From d70d81ebdf5417bb8ddfb0935cf302cc2a025cc4 Mon Sep 17 00:00:00 2001 From: Smart Home Cambodia Date: Fri, 28 Jul 2023 22:36:06 +0700 Subject: [PATCH] OneDrive Backup OneDrive Backup --- onedrive-backup/.config/dotnet-tools.json | 12 + onedrive-backup/.dockerignore | 25 + onedrive-backup/.gitignore | 234 + onedrive-backup/App.razor | 13 + onedrive-backup/CHANGELOG.md | 122 + onedrive-backup/ConsoleLogger.cs | 66 + onedrive-backup/Contracts/AddonOptions.cs | 125 + .../Contracts/HassAddonInfoResponse.cs | 19 + .../Contracts/HassAddonsResponse.cs | 30 + .../Contracts/HassBackupsResponse.cs | 59 + .../Contracts/HassSupervisorInfoResponse.cs | 20 + .../Contracts/OneDriveFreeSpaceData.cs | 9 + onedrive-backup/Contracts/OnedriveBackup.cs | 41 + .../Contracts/OnedriveItemDescription.cs | 27 + onedrive-backup/Contracts/SyncFileData.cs | 18 + onedrive-backup/DOCS.md | 3 + onedrive-backup/DateTimeHelper.cs | 38 + onedrive-backup/Dockerfile | 32 + .../Extensions/BackupExtensions.cs | 84 + .../Extensions/MiddlewareExtensions.cs | 18 + onedrive-backup/Graph/GraphHelper.cs | 346 + onedrive-backup/Graph/IGraphHelper.cs | 35 + onedrive-backup/Graph/TransferSpeedHelper.cs | 49 + onedrive-backup/Hass/BackupManager.cs | 546 + onedrive-backup/Hass/Events/OneDriveEvents.cs | 10 + onedrive-backup/Hass/HassContext.cs | 14 + .../Hass/HassOnedriveEntityState.cs | 109 + .../Hass/HassOnedriveFileSyncEntityState.cs | 82 + .../Hass/HassOnedriveFreeSpaceEntityState.cs | 47 + onedrive-backup/Hass/HassioClient.cs | 225 + onedrive-backup/Hass/HassioClientMock.cs | 164 + onedrive-backup/Hass/IHassioClient.cs | 32 + onedrive-backup/Logo/logo_50x50.png | Bin 0 -> 1802 bytes onedrive-backup/Logo/logo_large.png | Bin 0 -> 25466 bytes .../Middleware/ExtractHassUrlMiddleware.cs | 36 + .../IncomingHassFirewallMiddleware.cs | 32 + onedrive-backup/Models/BackupModel.cs | 37 + onedrive-backup/Orchestrator.cs | 101 + onedrive-backup/Pages/About.razor | 25 + onedrive-backup/Pages/Error.cshtml | 24 + onedrive-backup/Pages/Error.cshtml.cs | 27 + onedrive-backup/Pages/Main.razor | 73 + onedrive-backup/Pages/_Host.cshtml | 42 + onedrive-backup/Program.cs | 107 + .../Properties/launchSettings.json | 35 + onedrive-backup/README.md | 23 + onedrive-backup/Shared/BackupCard.razor | 187 + onedrive-backup/Shared/BackupCard.razor.css | 11 + onedrive-backup/Shared/MainLayout.razor | 62 + onedrive-backup/Shared/MainLayout.razor.css | 49 + .../Shared/OneDriveSummaryCard.razor | 258 + .../Shared/OneDriveSummaryCard.razor.css | 14 + onedrive-backup/Shared/ViewHelpers.cs | 26 + onedrive-backup/Storage/AddonOptionsReader.cs | 25 + onedrive-backup/Storage/LocalStorage.cs | 32 + onedrive-backup/Sync/SyncManager.cs | 207 + onedrive-backup/TimeRangeHelper.cs | 53 + onedrive-backup/_Imports.razor | 8 + onedrive-backup/apparmor.txt | 27 + onedrive-backup/appsettings.Development.json | 16 + onedrive-backup/appsettings.json | 17 + onedrive-backup/build_and_publish.ps1 | 50 + onedrive-backup/config.yaml | 67 + onedrive-backup/hassio-onedrive-backup.sln | 31 + onedrive-backup/icon.png | Bin 0 -> 4544 bytes onedrive-backup/images/add-on-store.png | Bin 0 -> 3765 bytes onedrive-backup/images/add-repo.png | Bin 0 -> 12465 bytes onedrive-backup/images/addon-repo-menu.png | Bin 0 -> 5002 bytes onedrive-backup/images/authenticate.png | Bin 0 -> 15173 bytes onedrive-backup/images/autominify.png | Bin 0 -> 26498 bytes onedrive-backup/images/blazorblocked.png | Bin 0 -> 8003 bytes onedrive-backup/images/bmc.svg | 22 + onedrive-backup/images/consent.png | Bin 0 -> 68820 bytes onedrive-backup/images/filesync_sensor.png | Bin 0 -> 5685 bytes onedrive-backup/images/pagerule.png | Bin 0 -> 40314 bytes onedrive-backup/images/sensor.png | Bin 0 -> 32048 bytes onedrive-backup/images/sensor_dashboard.png | Bin 0 -> 26552 bytes onedrive-backup/images/sensor_freespace.png | Bin 0 -> 2224 bytes .../images/sensor_recovery_dashboard.png | Bin 0 -> 16645 bytes onedrive-backup/images/upload_backup.png | Bin 0 -> 3176 bytes onedrive-backup/images/webui.png | Bin 0 -> 111903 bytes onedrive-backup/libman.json | 28 + onedrive-backup/logo.png | Bin 0 -> 4881 bytes onedrive-backup/onedrive-backup.csproj | 36 + onedrive-backup/onedrive-backup.sln | 25 + onedrive-backup/options.json | 25 + onedrive-backup/translations/de.yaml | 43 + onedrive-backup/translations/en.yaml | 65 + onedrive-backup/wwwroot/bmc/bmc-button.svg | 22 + .../wwwroot/css/bootstrap/bootstrap.min.css | 7 + .../css/bootstrap/bootstrap.min.css.map | 1 + .../wwwroot/css/open-iconic/FONT-LICENSE | 86 + .../wwwroot/css/open-iconic/ICON-LICENSE | 21 + .../wwwroot/css/open-iconic/README.md | 114 + .../font/css/open-iconic-bootstrap.min.css | 1 + .../open-iconic/font/fonts/open-iconic.eot | Bin 0 -> 28196 bytes .../open-iconic/font/fonts/open-iconic.otf | Bin 0 -> 20996 bytes .../open-iconic/font/fonts/open-iconic.svg | 543 + .../open-iconic/font/fonts/open-iconic.ttf | Bin 0 -> 28028 bytes .../open-iconic/font/fonts/open-iconic.woff | Bin 0 -> 14984 bytes onedrive-backup/wwwroot/css/site.css | 68 + .../wwwroot/images/Bitcoin-Logo.svg | 1 + onedrive-backup/wwwroot/images/Bitcoin.svg | 7 + onedrive-backup/wwwroot/images/bc_address.png | Bin 0 -> 6941 bytes .../lib/bootstrap/css/bootstrap-grid.css | 4063 ++++++ .../lib/bootstrap/css/bootstrap-grid.css.map | 1 + .../lib/bootstrap/css/bootstrap-grid.min.css | 6 + .../bootstrap/css/bootstrap-grid.min.css.map | 1 + .../lib/bootstrap/css/bootstrap-grid.rtl.css | 4062 ++++++ .../bootstrap/css/bootstrap-grid.rtl.css.map | 1 + .../bootstrap/css/bootstrap-grid.rtl.min.css | 6 + .../css/bootstrap-grid.rtl.min.css.map | 1 + .../lib/bootstrap/css/bootstrap-reboot.css | 591 + .../bootstrap/css/bootstrap-reboot.css.map | 1 + .../bootstrap/css/bootstrap-reboot.min.css | 6 + .../css/bootstrap-reboot.min.css.map | 1 + .../bootstrap/css/bootstrap-reboot.rtl.css | 588 + .../css/bootstrap-reboot.rtl.css.map | 1 + .../css/bootstrap-reboot.rtl.min.css | 6 + .../css/bootstrap-reboot.rtl.min.css.map | 1 + .../lib/bootstrap/css/bootstrap-utilities.css | 5375 +++++++ .../bootstrap/css/bootstrap-utilities.css.map | 1 + .../bootstrap/css/bootstrap-utilities.min.css | 6 + .../css/bootstrap-utilities.min.css.map | 1 + .../bootstrap/css/bootstrap-utilities.rtl.css | 5366 +++++++ .../css/bootstrap-utilities.rtl.css.map | 1 + .../css/bootstrap-utilities.rtl.min.css | 6 + .../css/bootstrap-utilities.rtl.min.css.map | 1 + .../wwwroot/lib/bootstrap/css/bootstrap.css | 12078 ++++++++++++++++ .../lib/bootstrap/css/bootstrap.css.map | 1 + .../lib/bootstrap/css/bootstrap.min.css | 6 + .../lib/bootstrap/css/bootstrap.min.css.map | 1 + .../lib/bootstrap/css/bootstrap.rtl.css | 12042 +++++++++++++++ .../lib/bootstrap/css/bootstrap.rtl.css.map | 1 + .../lib/bootstrap/css/bootstrap.rtl.min.css | 6 + .../bootstrap/css/bootstrap.rtl.min.css.map | 1 + .../lib/bootstrap/js/bootstrap.bundle.js | 6294 ++++++++ .../lib/bootstrap/js/bootstrap.bundle.js.map | 1 + .../lib/bootstrap/js/bootstrap.bundle.min.js | 7 + .../bootstrap/js/bootstrap.bundle.min.js.map | 1 + .../wwwroot/lib/bootstrap/js/bootstrap.esm.js | 4421 ++++++ .../lib/bootstrap/js/bootstrap.esm.js.map | 1 + .../lib/bootstrap/js/bootstrap.esm.min.js | 7 + .../lib/bootstrap/js/bootstrap.esm.min.js.map | 1 + .../wwwroot/lib/bootstrap/js/bootstrap.js | 4467 ++++++ .../wwwroot/lib/bootstrap/js/bootstrap.js.map | 1 + .../wwwroot/lib/bootstrap/js/bootstrap.min.js | 7 + .../lib/bootstrap/js/bootstrap.min.js.map | 1 + .../lib/bootstrap/scss/_accordion.scss | 158 + .../wwwroot/lib/bootstrap/scss/_alert.scss | 68 + .../wwwroot/lib/bootstrap/scss/_badge.scss | 38 + .../lib/bootstrap/scss/_breadcrumb.scss | 40 + .../lib/bootstrap/scss/_button-group.scss | 142 + .../wwwroot/lib/bootstrap/scss/_buttons.scss | 207 + .../wwwroot/lib/bootstrap/scss/_card.scss | 239 + .../wwwroot/lib/bootstrap/scss/_carousel.scss | 238 + .../wwwroot/lib/bootstrap/scss/_close.scss | 63 + .../lib/bootstrap/scss/_containers.scss | 41 + .../wwwroot/lib/bootstrap/scss/_dropdown.scss | 250 + .../wwwroot/lib/bootstrap/scss/_forms.scss | 9 + .../lib/bootstrap/scss/_functions.scss | 302 + .../wwwroot/lib/bootstrap/scss/_grid.scss | 39 + .../wwwroot/lib/bootstrap/scss/_helpers.scss | 12 + .../wwwroot/lib/bootstrap/scss/_images.scss | 42 + .../lib/bootstrap/scss/_list-group.scss | 197 + .../wwwroot/lib/bootstrap/scss/_maps.scss | 174 + .../wwwroot/lib/bootstrap/scss/_mixins.scss | 42 + .../wwwroot/lib/bootstrap/scss/_modal.scss | 237 + .../wwwroot/lib/bootstrap/scss/_nav.scss | 209 + .../wwwroot/lib/bootstrap/scss/_navbar.scss | 288 + .../lib/bootstrap/scss/_offcanvas.scss | 146 + .../lib/bootstrap/scss/_pagination.scss | 109 + .../lib/bootstrap/scss/_placeholders.scss | 51 + .../wwwroot/lib/bootstrap/scss/_popover.scss | 196 + .../wwwroot/lib/bootstrap/scss/_progress.scss | 68 + .../wwwroot/lib/bootstrap/scss/_reboot.scss | 610 + .../wwwroot/lib/bootstrap/scss/_root.scss | 188 + .../wwwroot/lib/bootstrap/scss/_spinners.scss | 85 + .../wwwroot/lib/bootstrap/scss/_tables.scss | 164 + .../wwwroot/lib/bootstrap/scss/_toasts.scss | 73 + .../wwwroot/lib/bootstrap/scss/_tooltip.scss | 120 + .../lib/bootstrap/scss/_transitions.scss | 27 + .../wwwroot/lib/bootstrap/scss/_type.scss | 106 + .../lib/bootstrap/scss/_utilities.scss | 806 ++ .../lib/bootstrap/scss/_variables-dark.scss | 82 + .../lib/bootstrap/scss/_variables.scss | 1743 +++ .../lib/bootstrap/scss/bootstrap-grid.scss | 62 + .../lib/bootstrap/scss/bootstrap-reboot.scss | 10 + .../bootstrap/scss/bootstrap-utilities.scss | 19 + .../wwwroot/lib/bootstrap/scss/bootstrap.scss | 52 + .../scss/forms/_floating-labels.scss | 90 + .../lib/bootstrap/scss/forms/_form-check.scss | 188 + .../bootstrap/scss/forms/_form-control.scss | 214 + .../lib/bootstrap/scss/forms/_form-range.scss | 91 + .../bootstrap/scss/forms/_form-select.scss | 80 + .../lib/bootstrap/scss/forms/_form-text.scss | 11 + .../bootstrap/scss/forms/_input-group.scss | 132 + .../lib/bootstrap/scss/forms/_labels.scss | 36 + .../lib/bootstrap/scss/forms/_validation.scss | 12 + .../lib/bootstrap/scss/helpers/_clearfix.scss | 3 + .../lib/bootstrap/scss/helpers/_color-bg.scss | 10 + .../scss/helpers/_colored-links.scss | 32 + .../bootstrap/scss/helpers/_focus-ring.scss | 5 + .../bootstrap/scss/helpers/_icon-link.scss | 25 + .../lib/bootstrap/scss/helpers/_position.scss | 36 + .../lib/bootstrap/scss/helpers/_ratio.scss | 26 + .../lib/bootstrap/scss/helpers/_stacks.scss | 15 + .../scss/helpers/_stretched-link.scss | 15 + .../scss/helpers/_text-truncation.scss | 7 + .../scss/helpers/_visually-hidden.scss | 8 + .../lib/bootstrap/scss/helpers/_vr.scss | 8 + .../lib/bootstrap/scss/mixins/_alert.scss | 18 + .../lib/bootstrap/scss/mixins/_backdrop.scss | 14 + .../lib/bootstrap/scss/mixins/_banner.scss | 7 + .../bootstrap/scss/mixins/_border-radius.scss | 78 + .../bootstrap/scss/mixins/_box-shadow.scss | 18 + .../bootstrap/scss/mixins/_breakpoints.scss | 127 + .../lib/bootstrap/scss/mixins/_buttons.scss | 70 + .../lib/bootstrap/scss/mixins/_caret.scss | 69 + .../lib/bootstrap/scss/mixins/_clearfix.scss | 9 + .../bootstrap/scss/mixins/_color-mode.scss | 21 + .../bootstrap/scss/mixins/_color-scheme.scss | 7 + .../lib/bootstrap/scss/mixins/_container.scss | 11 + .../lib/bootstrap/scss/mixins/_deprecate.scss | 10 + .../lib/bootstrap/scss/mixins/_forms.scss | 153 + .../lib/bootstrap/scss/mixins/_gradients.scss | 47 + .../lib/bootstrap/scss/mixins/_grid.scss | 151 + .../lib/bootstrap/scss/mixins/_image.scss | 16 + .../bootstrap/scss/mixins/_list-group.scss | 26 + .../lib/bootstrap/scss/mixins/_lists.scss | 7 + .../bootstrap/scss/mixins/_pagination.scss | 10 + .../bootstrap/scss/mixins/_reset-text.scss | 17 + .../lib/bootstrap/scss/mixins/_resize.scss | 6 + .../scss/mixins/_table-variants.scss | 24 + .../bootstrap/scss/mixins/_text-truncate.scss | 8 + .../bootstrap/scss/mixins/_transition.scss | 26 + .../lib/bootstrap/scss/mixins/_utilities.scss | 97 + .../scss/mixins/_visually-hidden.scss | 33 + .../lib/bootstrap/scss/utilities/_api.scss | 47 + .../lib/bootstrap/scss/vendor/_rfs.scss | 354 + .../wwwroot/lib/jquery/jquery.slim.min.js | 2 + .../wwwroot/lib/jquery/jquery.slim.min.map | 1 + .../wwwroot/lib/popper.js/umd/popper.min.js | 6 + .../wwwroot/scripts/BlazorHelpers.js | 34 + 244 files changed, 75229 insertions(+) create mode 100644 onedrive-backup/.config/dotnet-tools.json create mode 100644 onedrive-backup/.dockerignore create mode 100644 onedrive-backup/.gitignore create mode 100644 onedrive-backup/App.razor create mode 100644 onedrive-backup/CHANGELOG.md create mode 100644 onedrive-backup/ConsoleLogger.cs create mode 100644 onedrive-backup/Contracts/AddonOptions.cs create mode 100644 onedrive-backup/Contracts/HassAddonInfoResponse.cs create mode 100644 onedrive-backup/Contracts/HassAddonsResponse.cs create mode 100644 onedrive-backup/Contracts/HassBackupsResponse.cs create mode 100644 onedrive-backup/Contracts/HassSupervisorInfoResponse.cs create mode 100644 onedrive-backup/Contracts/OneDriveFreeSpaceData.cs create mode 100644 onedrive-backup/Contracts/OnedriveBackup.cs create mode 100644 onedrive-backup/Contracts/OnedriveItemDescription.cs create mode 100644 onedrive-backup/Contracts/SyncFileData.cs create mode 100644 onedrive-backup/DOCS.md create mode 100644 onedrive-backup/DateTimeHelper.cs create mode 100644 onedrive-backup/Dockerfile create mode 100644 onedrive-backup/Extensions/BackupExtensions.cs create mode 100644 onedrive-backup/Extensions/MiddlewareExtensions.cs create mode 100644 onedrive-backup/Graph/GraphHelper.cs create mode 100644 onedrive-backup/Graph/IGraphHelper.cs create mode 100644 onedrive-backup/Graph/TransferSpeedHelper.cs create mode 100644 onedrive-backup/Hass/BackupManager.cs create mode 100644 onedrive-backup/Hass/Events/OneDriveEvents.cs create mode 100644 onedrive-backup/Hass/HassContext.cs create mode 100644 onedrive-backup/Hass/HassOnedriveEntityState.cs create mode 100644 onedrive-backup/Hass/HassOnedriveFileSyncEntityState.cs create mode 100644 onedrive-backup/Hass/HassOnedriveFreeSpaceEntityState.cs create mode 100644 onedrive-backup/Hass/HassioClient.cs create mode 100644 onedrive-backup/Hass/HassioClientMock.cs create mode 100644 onedrive-backup/Hass/IHassioClient.cs create mode 100644 onedrive-backup/Logo/logo_50x50.png create mode 100644 onedrive-backup/Logo/logo_large.png create mode 100644 onedrive-backup/Middleware/ExtractHassUrlMiddleware.cs create mode 100644 onedrive-backup/Middleware/IncomingHassFirewallMiddleware.cs create mode 100644 onedrive-backup/Models/BackupModel.cs create mode 100644 onedrive-backup/Orchestrator.cs create mode 100644 onedrive-backup/Pages/About.razor create mode 100644 onedrive-backup/Pages/Error.cshtml create mode 100644 onedrive-backup/Pages/Error.cshtml.cs create mode 100644 onedrive-backup/Pages/Main.razor create mode 100644 onedrive-backup/Pages/_Host.cshtml create mode 100644 onedrive-backup/Program.cs create mode 100644 onedrive-backup/Properties/launchSettings.json create mode 100644 onedrive-backup/README.md create mode 100644 onedrive-backup/Shared/BackupCard.razor create mode 100644 onedrive-backup/Shared/BackupCard.razor.css create mode 100644 onedrive-backup/Shared/MainLayout.razor create mode 100644 onedrive-backup/Shared/MainLayout.razor.css create mode 100644 onedrive-backup/Shared/OneDriveSummaryCard.razor create mode 100644 onedrive-backup/Shared/OneDriveSummaryCard.razor.css create mode 100644 onedrive-backup/Shared/ViewHelpers.cs create mode 100644 onedrive-backup/Storage/AddonOptionsReader.cs create mode 100644 onedrive-backup/Storage/LocalStorage.cs create mode 100644 onedrive-backup/Sync/SyncManager.cs create mode 100644 onedrive-backup/TimeRangeHelper.cs create mode 100644 onedrive-backup/_Imports.razor create mode 100644 onedrive-backup/apparmor.txt create mode 100644 onedrive-backup/appsettings.Development.json create mode 100644 onedrive-backup/appsettings.json create mode 100644 onedrive-backup/build_and_publish.ps1 create mode 100644 onedrive-backup/config.yaml create mode 100644 onedrive-backup/hassio-onedrive-backup.sln create mode 100644 onedrive-backup/icon.png create mode 100644 onedrive-backup/images/add-on-store.png create mode 100644 onedrive-backup/images/add-repo.png create mode 100644 onedrive-backup/images/addon-repo-menu.png create mode 100644 onedrive-backup/images/authenticate.png create mode 100644 onedrive-backup/images/autominify.png create mode 100644 onedrive-backup/images/blazorblocked.png create mode 100644 onedrive-backup/images/bmc.svg create mode 100644 onedrive-backup/images/consent.png create mode 100644 onedrive-backup/images/filesync_sensor.png create mode 100644 onedrive-backup/images/pagerule.png create mode 100644 onedrive-backup/images/sensor.png create mode 100644 onedrive-backup/images/sensor_dashboard.png create mode 100644 onedrive-backup/images/sensor_freespace.png create mode 100644 onedrive-backup/images/sensor_recovery_dashboard.png create mode 100644 onedrive-backup/images/upload_backup.png create mode 100644 onedrive-backup/images/webui.png create mode 100644 onedrive-backup/libman.json create mode 100644 onedrive-backup/logo.png create mode 100644 onedrive-backup/onedrive-backup.csproj create mode 100644 onedrive-backup/onedrive-backup.sln create mode 100644 onedrive-backup/options.json create mode 100644 onedrive-backup/translations/de.yaml create mode 100644 onedrive-backup/translations/en.yaml create mode 100644 onedrive-backup/wwwroot/bmc/bmc-button.svg create mode 100644 onedrive-backup/wwwroot/css/bootstrap/bootstrap.min.css create mode 100644 onedrive-backup/wwwroot/css/bootstrap/bootstrap.min.css.map create mode 100644 onedrive-backup/wwwroot/css/open-iconic/FONT-LICENSE create mode 100644 onedrive-backup/wwwroot/css/open-iconic/ICON-LICENSE create mode 100644 onedrive-backup/wwwroot/css/open-iconic/README.md create mode 100644 onedrive-backup/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css create mode 100644 onedrive-backup/wwwroot/css/open-iconic/font/fonts/open-iconic.eot create mode 100644 onedrive-backup/wwwroot/css/open-iconic/font/fonts/open-iconic.otf create mode 100644 onedrive-backup/wwwroot/css/open-iconic/font/fonts/open-iconic.svg create mode 100644 onedrive-backup/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf create mode 100644 onedrive-backup/wwwroot/css/open-iconic/font/fonts/open-iconic.woff create mode 100644 onedrive-backup/wwwroot/css/site.css create mode 100644 onedrive-backup/wwwroot/images/Bitcoin-Logo.svg create mode 100644 onedrive-backup/wwwroot/images/Bitcoin.svg create mode 100644 onedrive-backup/wwwroot/images/bc_address.png create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-grid.css create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-grid.css.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-grid.min.css create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-grid.min.css.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-grid.rtl.css create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-grid.rtl.css.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-grid.rtl.min.css create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-grid.rtl.min.css.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-reboot.css create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-reboot.css.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-reboot.min.css create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-reboot.min.css.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-reboot.rtl.css create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-reboot.rtl.css.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-reboot.rtl.min.css create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-reboot.rtl.min.css.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-utilities.css create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-utilities.css.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-utilities.min.css create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-utilities.min.css.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-utilities.rtl.css create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-utilities.rtl.css.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-utilities.rtl.min.css create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap-utilities.rtl.min.css.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap.css create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap.css.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap.min.css create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap.min.css.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap.rtl.css create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap.rtl.css.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap.rtl.min.css create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/css/bootstrap.rtl.min.css.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/js/bootstrap.bundle.js create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/js/bootstrap.bundle.js.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/js/bootstrap.bundle.min.js create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/js/bootstrap.bundle.min.js.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/js/bootstrap.esm.js create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/js/bootstrap.esm.js.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/js/bootstrap.esm.min.js create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/js/bootstrap.esm.min.js.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/js/bootstrap.js create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/js/bootstrap.js.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/js/bootstrap.min.js create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/js/bootstrap.min.js.map create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_accordion.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_alert.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_badge.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_breadcrumb.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_button-group.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_buttons.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_card.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_carousel.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_close.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_containers.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_dropdown.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_forms.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_functions.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_grid.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_helpers.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_images.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_list-group.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_maps.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_mixins.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_modal.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_nav.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_navbar.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_offcanvas.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_pagination.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_placeholders.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_popover.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_progress.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_reboot.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_root.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_spinners.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_tables.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_toasts.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_tooltip.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_transitions.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_type.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_utilities.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_variables-dark.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/_variables.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/bootstrap-grid.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/bootstrap-reboot.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/bootstrap-utilities.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/bootstrap.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/forms/_floating-labels.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/forms/_form-check.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/forms/_form-control.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/forms/_form-range.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/forms/_form-select.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/forms/_form-text.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/forms/_input-group.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/forms/_labels.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/forms/_validation.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/helpers/_clearfix.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/helpers/_color-bg.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/helpers/_colored-links.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/helpers/_focus-ring.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/helpers/_icon-link.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/helpers/_position.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/helpers/_ratio.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/helpers/_stacks.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/helpers/_stretched-link.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/helpers/_text-truncation.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/helpers/_visually-hidden.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/helpers/_vr.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_alert.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_backdrop.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_banner.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_border-radius.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_box-shadow.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_breakpoints.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_buttons.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_caret.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_clearfix.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_color-mode.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_color-scheme.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_container.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_deprecate.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_forms.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_gradients.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_grid.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_image.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_list-group.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_lists.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_pagination.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_reset-text.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_resize.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_table-variants.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_text-truncate.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_transition.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_utilities.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/mixins/_visually-hidden.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/utilities/_api.scss create mode 100644 onedrive-backup/wwwroot/lib/bootstrap/scss/vendor/_rfs.scss create mode 100644 onedrive-backup/wwwroot/lib/jquery/jquery.slim.min.js create mode 100644 onedrive-backup/wwwroot/lib/jquery/jquery.slim.min.map create mode 100644 onedrive-backup/wwwroot/lib/popper.js/umd/popper.min.js create mode 100644 onedrive-backup/wwwroot/scripts/BlazorHelpers.js diff --git a/onedrive-backup/.config/dotnet-tools.json b/onedrive-backup/.config/dotnet-tools.json new file mode 100644 index 0000000..98de9de --- /dev/null +++ b/onedrive-backup/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-ef": { + "version": "7.0.3", + "commands": [ + "dotnet-ef" + ] + } + } +} \ No newline at end of file diff --git a/onedrive-backup/.dockerignore b/onedrive-backup/.dockerignore new file mode 100644 index 0000000..bdca33b --- /dev/null +++ b/onedrive-backup/.dockerignore @@ -0,0 +1,25 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/onedrive-backup/.gitignore b/onedrive-backup/.gitignore new file mode 100644 index 0000000..d0cb552 --- /dev/null +++ b/onedrive-backup/.gitignore @@ -0,0 +1,234 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +build/ +bld/ +bin/ +Bin/ +obj/ +Obj/ + +# Visual Studio 2015 cache/options directory +.vs/ +/wwwroot/dist/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Microsoft Azure ApplicationInsights config file +ApplicationInsights.config + +# Windows Store app package directory +AppPackages/ +BundleArtifacts/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +orleans.codegen.cs + +/node_modules + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe + +# FAKE - F# Make +.fake/ + +record.auth* \ No newline at end of file diff --git a/onedrive-backup/App.razor b/onedrive-backup/App.razor new file mode 100644 index 0000000..bc83e9f --- /dev/null +++ b/onedrive-backup/App.razor @@ -0,0 +1,13 @@ +@using onedrive_backup.Shared; + + + + + + + Not found + +

Sorry, there's nothing at this address.

+
+
+
diff --git a/onedrive-backup/CHANGELOG.md b/onedrive-backup/CHANGELOG.md new file mode 100644 index 0000000..d650831 --- /dev/null +++ b/onedrive-backup/CHANGELOG.md @@ -0,0 +1,122 @@ +## v2.1.2 [May 18th 2023] + +### Fixed +* Fixed permissions issue when running the add-on in a Supervised (Non HassOS) deployment +* Improved Exception Handling + +## v2.1.1 [April 11th 2023] +### Fixed +* Fixed a bug where subsequent backup iterations would begin before the previous cycle has completed + +## v2.1 [March 30th 2023] +### Added +* Option to [ignore Home Assistant Upgrade Backups](https://github.com/lavinir/hassio-onedrive-backup#ignore-home-assistant-upgrade-backups) +* Show Upload Transfer Speed in UI + +### Fixed +* UI bugfixes + +### Updated +* More log verbosity updates (Info -> Verbose) + +## v2.02 [Martch 28th 2023] +### Fixed +* Fixed a scenario where potentially temporary backup files would be uploaded as part of the addon's own backup + +### Updated +* Log verbosity for INFO level has been decreased. Those logs will still be available at the VERBOSE level. + +## v2.01 [March 21st 2023] +### Fixed +* Removed addon list from backup details in webui to workaround onedrive size limitation causing backup uplaods to fail when a lot of addons are backed up. + +## v2.0 [March 21st 2023] +### Summary +This is a very big release 🎉 with many new features and some breaking changes, please see details below. + +### Added +* **Web Interface!** - There is now a dedicated Web UI for the addon, where you can easily see an overview of all your backups, trigger manual backups, retrieve backups and more. **CloudFlared** users please see [relevant prerequisites](https://github.com/lavinir/hassio-onedrive-backup#html-content-filtering-error) +* **On Demand Backups** - Available through the new Web Interface +* **Log Verbosity Config** - You can now specify the [verbosity](https://github.com/lavinir/hassio-onedrive-backup#log-level) of the addon logs from the config. +* **Exclude Addons from Backup** - It is now possible to [exclude addons](https://github.com/lavinir/hassio-onedrive-backup#excluded-addons-optional) from your backups + +### Updated +* [Breaking change] **File Sync Engine** - The File Syncing engine has been rewritten. Along with it the relevant configuration for specifying the [sync paths](https://github.com/lavinir/hassio-onedrive-backup#file-sync-paths-optional) has changed. Please see the [documentation]((https://github.com/lavinir/hassio-onedrive-backup#file-sync-paths-optional)) for proper configuration. + +### Fixed +* **Sync Drift** - Updating backup interval logic to avoid an issue where backup times could slowly drift and if you were using a short **Allowed Hours** window you could reach an issue where an update would be skipped because a window was missed. + +### Removed +* [Breaking change] **Recovery Mode** - With the introduction of the dedicated Web UI, Recovery mode is no longer needed and has been removed. You can now load a Backup from OneDrive to Home Assistant with a single button from the Web UI. See [Restoring from Backup](https://github.com/lavinir/hassio-onedrive-backup#restoring-from-backup) + +## v1.41 [January 26th 2023] +### Added + * [**Monitor *all* backups**](https://github.com/lavinir/hassio-onedrive-backup#monitor-all-local-backups) - You can now optionally choose to have the addon monitor **any** created local backup, treating it as any other and backing them up to OneDrive. + * [**FileSync 1**] - Added option to set paths as [recursive](https://github.com/lavinir/hassio-onedrive-backup#file-sync-paths-optional) enabling syncing all contained subfolders + * [**FileSync 2**] - Optional [deletions in OneDrive](https://github.com/lavinir/hassio-onedrive-backup#remove-deleted-files-during-file-sync) for Synced Files that no longer exist / no longer monitored. + +### Fixed +* [**Allowed Hours**] - Fixed an issue where backup uploads / deletions would still occur outside of allowed hours +* [**Redundant Uploads**] - Fixed an issue that occured when the configured local backup maximum exceeded the configured OneDrive backup maximum where remaining local uploads would be uploaded and immediately deleted from OneDrive +* [**Backup Sensor**] - DateTime attributes now in standard international format +## v1.4 [January 15th 2023] +### Added +* [**First release of File Syncs!** 🎉](https://github.com/lavinir/hassio-onedrive-backup#sync_paths-optional) This allows file syncing to OneDrive outside of Backups. +* [**New sensor added for File Syncs**](https://github.com/lavinir/hassio-onedrive-backup#home-assistant-file-sync-sensor) + +### Updated +* **Password protection for backups now optional** - Due to multiple requests you can now choose to not protect your backups with a password. +## v1.3 [December 13 2022] + +### Added +* [**Multiple instance support!**](https://github.com/lavinir/hassio-onedrive-backup#backup_instance_name-optional) You can now have multiple installations of Home Assistant backing up to the same OneDrive account without overriding each other. +* [**Event support for backup failures.**](https://github.com/lavinir/hassio-onedrive-backup#events) Native Home Assistant events will now fire to notify you of backup failures. +* **Configuration Translations** added for English and German (Thank you [@Kreisverkehr](https://github.com/Kreisverkehr)) + +## v1.22 [December 6 2022] + +### Updated +* Sensor will now only change to "Syncing" during actual OneDrive backup taking place and not whenever the add-on is checking whether a backup is needed. (This was done to remove state change noise) + +## v1.21 [December 2 2022] + +### Fixed +* Fixed ArmV7 image issue with timezone support + +## v1.2 [December 1 2022] +See updates below. Also I've enabled **[Discussions](https://github.com/lavinir/hassio-onedrive-backup/discussions)** on the official repo to make it easier to get suggestions and feedback. +### Added +* **Allowed backup hours** - You can now specify specific hours during the day that backups will be perfomed. See [allowed_backup_hours](../README.md#backup_allowed_hours-optional) + +### Fixed +* Timestamps are now using the set TimeZone instead of UTC +### Removed +* **sync_interval_hours** setting has been removed. This is now handled internally by the add-on. + +## v1.11 [November 1 2022] +### Fixed +* **Incorrect Hassio Role** - Role was not actually changed to manager (required for partial backup support) +* **Small fixes** + + +## v1.1 [October 31 2022] + +### Added +* **Recovery Mode** - Allow loading backups back from OneDrive to Home +Assistant +* **Partial backups** - Added support for partial folder backups +* **Added configuration** - Allow setting timeout on Home Assistant API calls (to accomodate large backup files) +* **Timestamp suffix** - Added Timestamp suffix to local backups +* **OneDrive free space sensor** - Added new sensor showing amount of free space left in OneDrive + +### Fixed +* **Large backup files** - Fixed failing backups when backup size is over 2GB + +### Security +Add-on role changed to *manager* to enumerate add-ons to support partial backups. This knocked 1 security point from the addon's previous security rating. + +The only additional call being made now is enumerating the installed add-ons so they can be passed on to Home Assistant when creating a partial bakcup. + +## v1.0 [October 27th 2022] +### Added +- First Release :) diff --git a/onedrive-backup/ConsoleLogger.cs b/onedrive-backup/ConsoleLogger.cs new file mode 100644 index 0000000..d0a9ea0 --- /dev/null +++ b/onedrive-backup/ConsoleLogger.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace hassio_onedrive_backup +{ + public static class ConsoleLogger + { + private static LogLevel _logLevel; + + public static void LogError(string msg) + { + WriteLog(LogLevel.Error, msg); + } + + public static void LogWarning(string msg) + { + WriteLog(LogLevel.Warning, msg); + } + + public static void LogInfo(string msg) + { + WriteLog(LogLevel.Info, msg); + } + + public static void LogVerbose(string msg) + { + WriteLog(LogLevel.Verbose, msg); + } + + public static void SetLogLevel(LogLevel level) + { + _logLevel = level; + } + + private static void WriteLog(LogLevel level, string msg) + { + if (level < _logLevel) + { + return; + } + + var timestamp = DateTimeHelper.Instance?.Now; + string logMsg = $"{timestamp} [{Thread.CurrentThread.ManagedThreadId}] {level}: {msg}"; + + if (level == LogLevel.Error) + { + Console.Error.WriteLine(logMsg); + } + else + { + Console.WriteLine(logMsg); + } + } + + public enum LogLevel + { + Verbose, + Info, + Warning, + Error, + } + } +} diff --git a/onedrive-backup/Contracts/AddonOptions.cs b/onedrive-backup/Contracts/AddonOptions.cs new file mode 100644 index 0000000..08d157e --- /dev/null +++ b/onedrive-backup/Contracts/AddonOptions.cs @@ -0,0 +1,125 @@ +using Newtonsoft.Json; +using System.Text.Json.Serialization; +using JsonIgnoreAttribute = Newtonsoft.Json.JsonIgnoreAttribute; + +namespace hassio_onedrive_backup.Contracts +{ + public class AddonOptions + { + [JsonProperty("local_backup_num_to_keep")] + public int MaxLocalBackups { get; set; } + + [JsonProperty("onedrive_backup_num_to_keep")] + public int MaxOnedriveBackups { get; set; } + + [JsonProperty("backup_interval_days")] + public float BackupIntervalDays { get; set; } + + [JsonProperty("backup_passwd")] + public string? BackupPassword { get; set; } + + [JsonProperty("backup_name")] + public string? BackupName { get; set; } + + [JsonProperty("monitor_all_local_backups")] + public bool MonitorAllLocalBackups{ get; set; } + + [JsonProperty("notify_on_error")] + public bool NotifyOnError { get; set; } + + [JsonProperty("hass_api_timeout_minutes")] + public int HassAPITimeoutMinutes { get; set; } + + [JsonProperty("exclude_media_folder")] + public bool ExcludeMediaFolder { get; set; } + + [JsonProperty("exclude_ssl_folder")] + public bool ExcludeSSLFolder { get; set; } + + [JsonProperty("exclude_share_folder")] + public bool ExcludeShareFolder { get; set; } + + [JsonProperty("exclude_local_addons_folder")] + public bool ExcludeLocalAddonsFolder { get; set; } + + [JsonProperty("backup_allowed_hours")] + public string? BackupAllowedHours { get; set; } + + [JsonProperty("backup_instance_name")] + public string? InstanceName { get; set; } + + [JsonProperty("sync_paths")] + public List? SyncPaths { get; set; } + + [JsonProperty("file_sync_remove_deleted")] + public bool FileSyncRemoveDeleted { get; set; } = false; + + [JsonProperty("excluded_addons")] + public List ExcludedAddons { get; set; } = new List(); + + [JsonProperty("log_level")] + public string LogLevelStr { get; set; } + + [JsonProperty("ignore_upgrade_backups")] + public bool IgnoreUpgradeBackups { get; set; } + + //[JsonProperty("upload_speed_cap")] + //public int? UploadSpeedCapKBPerSecond { get; set; } + + [JsonIgnore] + public ConsoleLogger.LogLevel LogLevel => LogLevelStr switch + { + "verbose" => ConsoleLogger.LogLevel.Verbose, + "info" => ConsoleLogger.LogLevel.Info, + "warning" => ConsoleLogger.LogLevel.Warning, + "error" => ConsoleLogger.LogLevel.Error, + _ => ConsoleLogger.LogLevel.Info + }; + + [JsonIgnore] + public string BackupPasswordSafe => string.IsNullOrEmpty(BackupPassword) ? "backup" : BackupPassword; + [JsonIgnore] + public float BackupIntervalHours => BackupIntervalDays * 24; + + [JsonIgnore] + public string BackupNameSafe => string.IsNullOrEmpty(BackupName) ? "hass_backup" : BackupName; + + [JsonIgnore] + public bool IsPartialBackup => ExcludeLocalAddonsFolder || ExcludeMediaFolder || ExcludeShareFolder || ExcludeSSLFolder || ExcludedAddons.Any(); + + [JsonIgnore] + public bool FileSyncEnabled => SyncPaths != null && SyncPaths.Count > 0; + + //[JsonIgnore] + //public bool UploadSpeedCap => UploadSpeedCapKBPerSecond != null; + + public List IncludedFolderList + { + get + { + List folders = new List(); + if (!ExcludeLocalAddonsFolder) + { + folders.Add("addons/local"); + } + + if (!ExcludeMediaFolder) + { + folders.Add("media"); + } + + if (!ExcludeShareFolder) + { + folders.Add("share"); + } + + if (!ExcludeSSLFolder) + { + folders.Add("ssl"); + } + + return folders; + } + } + } +} diff --git a/onedrive-backup/Contracts/HassAddonInfoResponse.cs b/onedrive-backup/Contracts/HassAddonInfoResponse.cs new file mode 100644 index 0000000..3ff9fff --- /dev/null +++ b/onedrive-backup/Contracts/HassAddonInfoResponse.cs @@ -0,0 +1,19 @@ +using Newtonsoft.Json; + +namespace onedrive_backup.Contracts +{ + public class HassAddonInfoResponse + { + [JsonProperty("data")] + public Data DataProperty { get; set; } + + public class Data + { + [JsonProperty("ingress_entry")] + public string IngressEntry { get; set; } + + [JsonProperty("ingress_url")] + public string IngressUrl { get; set; } + } + } +} diff --git a/onedrive-backup/Contracts/HassAddonsResponse.cs b/onedrive-backup/Contracts/HassAddonsResponse.cs new file mode 100644 index 0000000..c44604b --- /dev/null +++ b/onedrive-backup/Contracts/HassAddonsResponse.cs @@ -0,0 +1,30 @@ +using Newtonsoft.Json; + +namespace hassio_onedrive_backup.Contracts +{ + public class HassAddonsResponse + { + [JsonProperty("result")] + public string Result { get; set; } + + [JsonProperty("data")] + public Data DataProperty { get; set; } + + public class Data + { + [JsonProperty("addons")] + public Addon[] Addons { get; set; } + + } + + public class Addon + { + [JsonProperty("slug")] + public string Slug { get; set; } + + [JsonProperty("name")] + public string Name { get; set; } + } + + } +} diff --git a/onedrive-backup/Contracts/HassBackupsResponse.cs b/onedrive-backup/Contracts/HassBackupsResponse.cs new file mode 100644 index 0000000..fbdd352 --- /dev/null +++ b/onedrive-backup/Contracts/HassBackupsResponse.cs @@ -0,0 +1,59 @@ +using Newtonsoft.Json; + +namespace hassio_onedrive_backup.Contracts +{ + public class HassBackupsResponse + { + [JsonProperty("result")] + public string Result { get; set; } + + [JsonProperty("data")] + public Data DataProperty { get; set; } + + public class Data + { + [JsonProperty("backups")] + public Backup[] Backups { get; set; } + } + + public class Backup + { + [JsonProperty("slug")] + public string Slug { get; set; } + + [JsonProperty("date")] + public DateTime Date { get; set; } + + [JsonProperty("name")] + public string Name { get; set; } + + [JsonProperty("type")] + public string Type { get; set; } + + [JsonProperty("size")] + public float Size { get; set; } + + [JsonProperty("protected")] + public bool Protected { get; set; } + + [JsonProperty("compressed")] + public bool Compressed { get; set; } + + [JsonProperty("content")] + public Content Content { get; set; } + } + + public class Content + { + [JsonProperty("homeassistant")] + public bool Homeassistant { get; set; } + + [JsonProperty("addons")] + public string[] Addons { get; set; } + + [JsonProperty("folders")] + public string[] Folders { get; set; } + } + } + +} diff --git a/onedrive-backup/Contracts/HassSupervisorInfoResponse.cs b/onedrive-backup/Contracts/HassSupervisorInfoResponse.cs new file mode 100644 index 0000000..a90b974 --- /dev/null +++ b/onedrive-backup/Contracts/HassSupervisorInfoResponse.cs @@ -0,0 +1,20 @@ +using Newtonsoft.Json; + +namespace hassio_onedrive_backup.Contracts +{ + public class HassSupervisorInfoResponse + { + [JsonProperty("result")] + public string Result { get; set; } + + [JsonProperty("data")] + public Data DataProperty { get; set; } + + public class Data + { + [JsonProperty("timezone")] + public string Timezone{ get; set; } + } + + } +} diff --git a/onedrive-backup/Contracts/OneDriveFreeSpaceData.cs b/onedrive-backup/Contracts/OneDriveFreeSpaceData.cs new file mode 100644 index 0000000..eb5b943 --- /dev/null +++ b/onedrive-backup/Contracts/OneDriveFreeSpaceData.cs @@ -0,0 +1,9 @@ +namespace onedrive_backup.Contracts +{ + public class OneDriveFreeSpaceData + { + public double? FreeSpace { get; set; } + + public double? TotalSpace { get; set; } + } +} diff --git a/onedrive-backup/Contracts/OnedriveBackup.cs b/onedrive-backup/Contracts/OnedriveBackup.cs new file mode 100644 index 0000000..dbbfbe6 --- /dev/null +++ b/onedrive-backup/Contracts/OnedriveBackup.cs @@ -0,0 +1,41 @@ +namespace hassio_onedrive_backup.Contracts +{ + public class OnedriveBackup + { + public OnedriveBackup() + { + + } + + public OnedriveBackup(string fileName, OnedriveItemDescription itemDescription) + { + FileName = fileName; + Slug = itemDescription.Slug; + BackupDate = itemDescription.BackupDate; + InstanceName = itemDescription.InstanceName; + Type = itemDescription.BackupType; + IsProtected = itemDescription.IsProtected; + Size = itemDescription.Size; + Addons = itemDescription.Addons; + Folders = itemDescription.Folders; + } + + public string Slug { get; set; } + + public string FileName { get; set; } + + public DateTime BackupDate { get; set; } + + public string? InstanceName { get; set; } + + public string Type { get; set; } + + public bool IsProtected { get; set; } + + public float Size { get; set; } + + public IEnumerable Addons { get; set; } + + public IEnumerable Folders { get; set; } + } +} diff --git a/onedrive-backup/Contracts/OnedriveItemDescription.cs b/onedrive-backup/Contracts/OnedriveItemDescription.cs new file mode 100644 index 0000000..112f861 --- /dev/null +++ b/onedrive-backup/Contracts/OnedriveItemDescription.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace hassio_onedrive_backup.Contracts +{ + public class OnedriveItemDescription + { + public string Slug { get; set; } + + public DateTime BackupDate { get; set; } + + public string? InstanceName { get; set; } + + public bool IsProtected { get; set; } + + public float Size { get; set; } + + public string BackupType { get; set; } + + public IEnumerable Addons { get; set; } + + public IEnumerable Folders { get; set; } + } +} diff --git a/onedrive-backup/Contracts/SyncFileData.cs b/onedrive-backup/Contracts/SyncFileData.cs new file mode 100644 index 0000000..94630d4 --- /dev/null +++ b/onedrive-backup/Contracts/SyncFileData.cs @@ -0,0 +1,18 @@ +namespace hassio_onedrive_backup.Contracts +{ + internal class SyncFileData + { + public SyncFileData(string path, string hash, long size) + { + Path = path ?? throw new ArgumentNullException(nameof(path)); + Hash = hash ?? throw new ArgumentNullException(nameof(hash)); + Size = size; + } + + public string Path { get; } + + public string Hash { get; } + + public long Size { get; } + } +} diff --git a/onedrive-backup/DOCS.md b/onedrive-backup/DOCS.md new file mode 100644 index 0000000..f74ed34 --- /dev/null +++ b/onedrive-backup/DOCS.md @@ -0,0 +1,3 @@ +# Home Assistant Addon: OneDrive Backup + +See [README on GitHub](https://github.com/lavinir/hassio-onedrive-backup) for a full guide on using the addon. \ No newline at end of file diff --git a/onedrive-backup/DateTimeHelper.cs b/onedrive-backup/DateTimeHelper.cs new file mode 100644 index 0000000..6942002 --- /dev/null +++ b/onedrive-backup/DateTimeHelper.cs @@ -0,0 +1,38 @@ +namespace hassio_onedrive_backup +{ + public class DateTimeHelper + { + public const string DateTimeFormat = "yyyy-MM-dd HH:mm:ss"; + private readonly TimeZoneInfo? _timeZoneInfo = null; + + private DateTimeHelper(string timeZoneId) + { + try + { + _timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId); + } + catch (Exception ex) + { + ConsoleLogger.LogError($"Error finding timezone: {ex}. Falling back to UTC"); + } + } + + public static DateTimeHelper? Instance { get; private set; } + + public static DateTimeHelper Initialize(string timeZoneId) + { + Instance = new DateTimeHelper(timeZoneId); + return Instance; + } + + public DateTime Now + { + get + { + var now = DateTime.Now; + var ret = _timeZoneInfo != null ? TimeZoneInfo.ConvertTime(now, _timeZoneInfo) : now; + return ret; + } + } + } +} diff --git a/onedrive-backup/Dockerfile b/onedrive-backup/Dockerfile new file mode 100644 index 0000000..cc2c5aa --- /dev/null +++ b/onedrive-backup/Dockerfile @@ -0,0 +1,32 @@ +#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. +ARG SDK_IMAGE_ARCH_TAG +ARG RUNTIME_IMAGE_ARCH_TAG +FROM mcr.microsoft.com/dotnet/aspnet:$RUNTIME_IMAGE_ARCH_TAG AS base +RUN apk add --no-cache tzdata +WORKDIR /app +EXPOSE 8099 + +FROM mcr.microsoft.com/dotnet/sdk:$SDK_IMAGE_ARCH_TAG AS build +ARG BUILD_ARCH +WORKDIR /src +COPY ["onedrive-backup.csproj", "."] +RUN dotnet restore "./onedrive-backup.csproj" -r $BUILD_ARCH +COPY . . +WORKDIR "/src/." +RUN dotnet build "onedrive-backup.csproj" -c Release -o /app/build -r $BUILD_ARCH + +FROM build AS publish +ARG BUILD_ARCH +RUN dotnet publish "onedrive-backup.csproj" -c Release -o /app/publish -r $BUILD_ARCH --no-self-contained /p:EnvironmentName=Production + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "onedrive-backup.dll"] + +ARG VERSION +LABEL \ + io.hass.version="$VERSION" \ + io.hass.type="addon" \ + io.hass.arch="armhf|aarch64|amd64|armv7" + diff --git a/onedrive-backup/Extensions/BackupExtensions.cs b/onedrive-backup/Extensions/BackupExtensions.cs new file mode 100644 index 0000000..c498cfc --- /dev/null +++ b/onedrive-backup/Extensions/BackupExtensions.cs @@ -0,0 +1,84 @@ +using hassio_onedrive_backup; +using hassio_onedrive_backup.Contracts; +using onedrive_backup.Hass; +using onedrive_backup.Models; +using static hassio_onedrive_backup.Contracts.HassBackupsResponse; +using Addon = hassio_onedrive_backup.Contracts.HassAddonsResponse.Addon; + +namespace onedrive_backup.Extensions +{ + public static class BackupExtensions + { + public static BackupModel ToBackupModel(this Backup backup, HassContext hassContext) + { + return new BackupModel + { + Slug = backup.Slug, + Date = backup.Date, + Name = backup.Name, + Type = backup.Type, + Size = backup.Size, + IsProtected = backup.Protected, + Location = BackupModel.BackupLocation.Local, + Addons = backup.Content?.Addons?.Select(slug => new Addon { Slug = slug, Name = GetAddonNameFromSlug(hassContext.Addons, slug) }).ToList() ?? Enumerable.Empty(), + Folders = backup.Content?.Folders ?? Enumerable.Empty() + }; + } + + public static BackupModel ToBackupModel(this OnedriveBackup onedriveBackup, HassContext hassContext) + { + return new BackupModel + { + Slug = onedriveBackup.Slug, + Date = onedriveBackup.BackupDate, + OneDriveFileName = onedriveBackup.FileName, + Type = onedriveBackup.Type, + Size = onedriveBackup.Size, + IsProtected = onedriveBackup.IsProtected, + Location = BackupModel.BackupLocation.OneDrive, + Addons = onedriveBackup.Addons?.Select(slug => new Addon { Slug = slug, Name = GetAddonNameFromSlug(hassContext.Addons, slug) }) ?? Enumerable.Empty(), + Folders = onedriveBackup.Folders ?? Enumerable.Empty() + }; + } + + public static OnedriveBackup ToOneDriveBackup(this BackupModel backupModel) + { + return new OnedriveBackup + { + Addons = backupModel.Addons.Select(addon => addon.Slug), + BackupDate = backupModel.Date, + FileName = backupModel.OneDriveFileName, + Folders = backupModel.Folders, + IsProtected = backupModel.IsProtected, + Slug = backupModel.Slug, + Type = backupModel.Type, + Size = backupModel.Size + }; + } + + public static Backup ToBackup(this BackupModel backupModel) + { + return new Backup + { + Date = backupModel.Date, + Protected = backupModel.IsProtected, + Slug = backupModel.Slug, + Type = backupModel.Type, + Size = backupModel.Size, + Name = backupModel.DisplayName, + Content = new Content + { + Addons = backupModel.Addons.Select(addon => addon.Slug).ToArray() ?? Enumerable.Empty().ToArray(), + Folders = backupModel.Folders?.ToArray() ?? Enumerable.Empty().ToArray() + } + }; + } + + private static string GetAddonNameFromSlug(IEnumerable addons, string slug) + { + ConsoleLogger.LogVerbose($"Looking for Addon name matching slug: {slug}. Checking agaisnt {addons.Count()} Addons in cache "); + string name = addons.FirstOrDefault(addon => addon.Slug.Equals(slug, StringComparison.OrdinalIgnoreCase))?.Name; + return name ?? string.Empty; + } + } +} diff --git a/onedrive-backup/Extensions/MiddlewareExtensions.cs b/onedrive-backup/Extensions/MiddlewareExtensions.cs new file mode 100644 index 0000000..a7bb93e --- /dev/null +++ b/onedrive-backup/Extensions/MiddlewareExtensions.cs @@ -0,0 +1,18 @@ +using onedrive_backup.Middleware; + +namespace onedrive_backup.Extensions +{ + public static class MiddlewareExtensions + { + public static IApplicationBuilder UseHassUrlExtractor( + this IApplicationBuilder builder) + { + return builder.UseMiddleware(); + } + + public static IApplicationBuilder UseIncomingHassFirewallMiddleware(this IApplicationBuilder builder ) + { + return builder.UseMiddleware(); + } + } +} diff --git a/onedrive-backup/Graph/GraphHelper.cs b/onedrive-backup/Graph/GraphHelper.cs new file mode 100644 index 0000000..31cca9c --- /dev/null +++ b/onedrive-backup/Graph/GraphHelper.cs @@ -0,0 +1,346 @@ +using Azure.Core; +using Azure.Identity; +using hassio_onedrive_backup.Storage; +using Microsoft.Graph; +using onedrive_backup.Contracts; +using onedrive_backup.Graph; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; +using File = System.IO.File; + +namespace hassio_onedrive_backup.Graph +{ + public class GraphHelper : IGraphHelper + { + private const string AuthRecordFile = "record.auth"; + private const int UploadRetryCount = 3; + private const int DownloadRetryCount = 3; + private const int GraphRequestTimeoutMinutes = 2; + private const int ChunkSize = (320 * 1024) * 10; + private DeviceCodeCredential? _deviceCodeCredential; + protected GraphServiceClient? _userClient; + private IEnumerable _scopes; + private string _clientId; + private string _persistentDataPath; + private HttpClient _downloadHttpClient; + private bool? _isAuthenticated = null; + + public event AuthStatusChanged? AuthStatusChangedEventHandler; + + public GraphHelper( + IEnumerable scopes, + string clientId, + string persistentDataPath = "") + { + _scopes = scopes; + _clientId = clientId; + _persistentDataPath = persistentDataPath; + } + + public bool? IsAuthenticated + { + get => _isAuthenticated; + private set + { + _isAuthenticated = value; AuthStatusChangedEventHandler?.Invoke(); + } + } + + public string AuthUrl { get; private set; } + + public string AuthCode { get; private set; } + + private string PersistentAuthRecordFullPath => Path.Combine(_persistentDataPath, AuthRecordFile); + + public async Task GetAndCacheUserTokenAsync() + { + if (_deviceCodeCredential == null) + { + await InitializeGraphForUserAuthAsync(); + } + + _ = _deviceCodeCredential ?? + throw new NullReferenceException("User Auth not Initialized"); + + _ = _scopes ?? throw new ArgumentNullException("'scopes' cannot be null"); + + var context = new TokenRequestContext(_scopes.ToArray()); + var response = await _deviceCodeCredential.GetTokenAsync(context); + await PersistAuthenticationRecordAsync(GetAuthenticationRecordFromCredential()); + IsAuthenticated = true; + return response.Token; + } + + public async Task GetItemInAppFolderAsync(string subPath = "") + { + try + { + var item = await _userClient.Me.Drive.Special.AppRoot.ItemWithPath(subPath).Request().Expand("children").GetAsync(); + return item; + // return item.Children.ToList(); + } + catch (ServiceException se) + { + if (se.StatusCode != System.Net.HttpStatusCode.NotFound) + { + throw; + } + + return null; + } + + } + + public async Task?> GetItemsInAppFolderAsync(string subPath = "") + { + var parent = await GetItemInAppFolderAsync(subPath); + return parent?.Children?.ToList(); + } + + public async Task DeleteItemFromAppFolderAsync(string itemPath) + { + try + { + ConsoleLogger.LogInfo($"Deleting item: {itemPath}"); + await _userClient.Drive.Special.AppRoot.ItemWithPath(itemPath).Request().DeleteAsync(); + } + catch (Exception ex) + { + ConsoleLogger.LogError($"Error deleting {itemPath}. {ex}"); + return false; + } + + return true; + } + + public async Task GetOrCreateFolder(string folderPath) + { + var folder = (await GetItemInAppFolderAsync(folderPath)) ?? + await _userClient.Drive.Special.AppRoot.ItemWithPath(folderPath).Children.Request().AddAsync(new DriveItem + { + // Name = Path.GetFileName(folderPath), + // Folder = new Folder { } + File = new Microsoft.Graph.File { }, + Name = "temp.txt", + Content = new MemoryStream(Encoding.UTF8.GetBytes("Here's your damn content")) + }); + + return folder; + } + + public async Task UploadFileAsync(string filePath, DateTime date, string? instanceName, TransferSpeedHelper transferSpeedHelper, string? destinationFileName = null, Action? progressCallback = null, bool flatten = true, string description = null) + { + if (File.Exists(filePath) == false) + { + ConsoleLogger.LogError($"File {filePath} not found"); + return false; + } + + using var fileStream = File.OpenRead(filePath); + destinationFileName = destinationFileName ?? (flatten ? Path.GetFileName(filePath) : filePath); + // string originalFileName = Path.GetFileNameWithoutExtension(filePath); + var uploadSession = await _userClient.Drive.Special.AppRoot.ItemWithPath(destinationFileName).CreateUploadSession(new DriveItemUploadableProperties + { + Description = description + } + + ).Request().PostAsync(); + + // todo: allow settings this in advanced configuration + int maxSlizeSize = ChunkSize; + long totalFileLength = fileStream.Length; + var fileUploadTask = new LargeFileUploadTask(uploadSession, fileStream, maxSlizeSize); + var lastShownPercentageHolder = new UploadProgressHolder(); + IProgress progress = new Progress(async prog => + { + (double delayMS, double speed) = transferSpeedHelper.MarkAndCalcThrottle(prog); + double percentage = Math.Round((prog / (double)totalFileLength), 2) * 100; + if (percentage - lastShownPercentageHolder.Percentage >= 10 || percentage == 100) + { + ConsoleLogger.LogVerbose($"Uploaded {percentage}%"); + lastShownPercentageHolder.Percentage = percentage; + } + + progressCallback?.Invoke((int)percentage, (int)speed); + //if (delayMS >= 1) + //{ + // await Task.Delay((int)delayMS); + //} + }); + + int uploadAttempt = 0; + while (uploadAttempt++ < UploadRetryCount) + { + try + { + ConsoleLogger.LogInfo($"Starting file upload. (Size:{totalFileLength} bytes. Attempt: {uploadAttempt}/{UploadRetryCount})"); + UploadResult uploadResult; + transferSpeedHelper.Start(); + if (uploadAttempt > 1) + { + uploadResult = await fileUploadTask.ResumeAsync(progress); + } + else + { + uploadResult = await fileUploadTask.UploadAsync(progress); + } + + transferSpeedHelper.Reset(); + await Task.Delay(TimeSpan.FromSeconds(2)); + if (uploadResult.UploadSucceeded) + { + ConsoleLogger.LogInfo("Upload completed successfully"); + break; + } + else + { + ConsoleLogger.LogError("Upload failed"); + } + } + catch (ServiceException ex) + { + ConsoleLogger.LogError($"Error uploading: {ex}"); + return false; + } + } + + return true; + } + + public async Task GetFreeSpaceInGB() + { + try + { + var drive = await _userClient.Drive.Request().GetAsync(); + double? totalSpace = drive.Quota.Total == null ? null : drive.Quota.Total.Value / (double)Math.Pow(1024, 3); + double? freeSpace = drive.Quota.Remaining == null ? null : drive.Quota.Remaining.Value / (double)Math.Pow(1024, 3); + return new OneDriveFreeSpaceData + { + FreeSpace = freeSpace, + TotalSpace = totalSpace + }; + + } + catch (Exception ex) + { + ConsoleLogger.LogError($"Error getting free space: {ex}"); + return null; + } + } + + public async Task DownloadFileAsync(string fileName, Action? progressCallback) + { + var item = await _userClient.Drive.Special.AppRoot.ItemWithPath(fileName).Request().GetAsync(); + if (item.AdditionalData.TryGetValue("@microsoft.graph.downloadUrl", out var downloadUrl) == false) + { + ConsoleLogger.LogError($"Failed getting file download data. ${fileName}"); + return null; + } + + var fileInfo = new FileInfo($"{LocalStorage.TempFolder}/{fileName}"); + using var fileStream = File.Create(fileInfo.FullName); + + _downloadHttpClient = _downloadHttpClient ?? new HttpClient(); + long position = 0; + int attempt = 1; + while (position < item.Size) + { + try + { + long chunkSize = Math.Min(position + ChunkSize, item.Size.Value - 1); + _downloadHttpClient.DefaultRequestHeaders.Range = new System.Net.Http.Headers.RangeHeaderValue(position, chunkSize); + var contentStream = await _downloadHttpClient.GetStreamAsync(downloadUrl.ToString()); + await contentStream.CopyToAsync(fileStream); + position = chunkSize + 1; + progressCallback?.Invoke((int)(position * 100 / item.Size.Value)); + } + catch (Exception ex) + { + if (attempt >= DownloadRetryCount) + { + ConsoleLogger.LogError($"Failed downloading file {fileName}. {ex}"); + progressCallback?.Invoke(null); + return null; + } + + await Task.Delay(5000); + } + } + + progressCallback?.Invoke(null); + ConsoleLogger.LogInfo($"{fileName} downloaded successfully"); + return fileInfo.FullName; + } + + protected virtual async Task InitializeGraphForUserAuthAsync() + { + AuthenticationRecord? authRecord = await ReadPersistedAuthenticationRecordAsync(); + var deviceCodeCredOptions = new DeviceCodeCredentialOptions + { + ClientId = _clientId, + DeviceCodeCallback = DeviceCodeBallBackPrompt, + TenantId = "common", + AuthenticationRecord = authRecord, + TokenCachePersistenceOptions = new TokenCachePersistenceOptions + { + Name = "hassio-onedrive-backup", + UnsafeAllowUnencryptedStorage = true + }, + }; + + _deviceCodeCredential = new DeviceCodeCredential(deviceCodeCredOptions); + _userClient = new GraphServiceClient(_deviceCodeCredential, _scopes); + _userClient.HttpProvider.OverallTimeout = TimeSpan.FromMinutes(GraphRequestTimeoutMinutes); + } + + private AuthenticationRecord GetAuthenticationRecordFromCredential() + { + var record = typeof(DeviceCodeCredential) + .GetProperty("Record", System.Reflection.BindingFlags.NonPublic | BindingFlags.Instance) + .GetValue(_deviceCodeCredential) as AuthenticationRecord; + + return record; + } + + private async Task PersistAuthenticationRecordAsync(AuthenticationRecord record) + { + using var authRecordStream = new FileStream(PersistentAuthRecordFullPath, FileMode.Create, FileAccess.Write); + await record.SerializeAsync(authRecordStream); + } + + private async Task ReadPersistedAuthenticationRecordAsync() + { + if (File.Exists(PersistentAuthRecordFullPath) == false) + { + ConsoleLogger.LogWarning("Token cache is empty"); + return null; + } + + using var authRecordStream = new FileStream(PersistentAuthRecordFullPath, FileMode.Open, FileAccess.Read); + var record = await AuthenticationRecord.DeserializeAsync(authRecordStream); + return record; + } + + private Task DeviceCodeBallBackPrompt(DeviceCodeInfo info, CancellationToken ct) + { + IsAuthenticated = false; + ConsoleLogger.LogInfo(info.Message); + (AuthUrl, AuthCode) = ExtractAuthParams(info.Message); + return Task.FromResult(0); + } + + private (string url, string code) ExtractAuthParams(string message) + { + Match match = Regex.Match(message, "To sign in, use a web browser to open the page ([^ ]*) and enter the code ([\\w]*) to authenticate"); + string url = match.Groups[1].Value; + string code = match.Groups[2].Value; + return (url, code); + } + + private class UploadProgressHolder + { + public double Percentage { get; set; } = 0; + } + } +} diff --git a/onedrive-backup/Graph/IGraphHelper.cs b/onedrive-backup/Graph/IGraphHelper.cs new file mode 100644 index 0000000..117bdbd --- /dev/null +++ b/onedrive-backup/Graph/IGraphHelper.cs @@ -0,0 +1,35 @@ +using Microsoft.Graph; +using onedrive_backup.Contracts; +using onedrive_backup.Graph; + +namespace hassio_onedrive_backup.Graph +{ + public interface IGraphHelper + { + string AuthUrl { get; } + + string AuthCode { get; } + + bool? IsAuthenticated { get; } + + event AuthStatusChanged AuthStatusChangedEventHandler; + + Task GetAndCacheUserTokenAsync(); + + Task> GetItemsInAppFolderAsync(string subPath = ""); + + Task GetItemInAppFolderAsync(string subPath = ""); + + Task DeleteItemFromAppFolderAsync(string itemPath); + + Task UploadFileAsync(string filePath, DateTime date, string? instanceName, TransferSpeedHelper transferSpeedHelper, string? destinationFileName = null, Action? progressCallback = null, bool flatten = true, string description = null); + + Task DownloadFileAsync(string fileName, Action? progressCallback); + + Task GetFreeSpaceInGB(); + + Task GetOrCreateFolder(string path); + } + + public delegate void AuthStatusChanged(); +} \ No newline at end of file diff --git a/onedrive-backup/Graph/TransferSpeedHelper.cs b/onedrive-backup/Graph/TransferSpeedHelper.cs new file mode 100644 index 0000000..479378c --- /dev/null +++ b/onedrive-backup/Graph/TransferSpeedHelper.cs @@ -0,0 +1,49 @@ +using System.Diagnostics; + +namespace onedrive_backup.Graph +{ + public class TransferSpeedHelper + { + private Stopwatch _stopWatch = new Stopwatch(); + private double _prevProgress = 0; + private double _prevTimeStamp = 0; + private double _speedCap; + + public TransferSpeedHelper(double? speedCapKBSec) + { + _speedCap = speedCapKBSec != null ? speedCapKBSec.Value * 1024 : double.MaxValue; + } + public void Start() + { + Reset(); + _stopWatch.Start(); + } + + public void Reset() + { + _stopWatch.Reset(); + _prevTimeStamp = 0; + _prevProgress = 0; + } + + public (double delay, double ratePerSecond) MarkAndCalcThrottle(double progress) + { + double bytesTransfered = progress - _prevProgress; + var ellapsedMS = _stopWatch.ElapsedMilliseconds; + double timefromPrev = ellapsedMS - _prevTimeStamp; + double ratePerSecond = 1000 * bytesTransfered / timefromPrev; + + _prevTimeStamp = ellapsedMS; + _prevProgress = progress; + + if (ratePerSecond > _speedCap) + { + var targetTimeForSpeedMS = (bytesTransfered / _speedCap) * 1000; + var remainingTimeToWait = targetTimeForSpeedMS - _prevTimeStamp; + return (remainingTimeToWait, ratePerSecond); + } + + return (0, ratePerSecond); + } + } +} diff --git a/onedrive-backup/Hass/BackupManager.cs b/onedrive-backup/Hass/BackupManager.cs new file mode 100644 index 0000000..17c6db8 --- /dev/null +++ b/onedrive-backup/Hass/BackupManager.cs @@ -0,0 +1,546 @@ +using hassio_onedrive_backup.Contracts; +using hassio_onedrive_backup.Graph; +using Microsoft.Graph; +using Newtonsoft.Json; +using onedrive_backup.Graph; +using onedrive_backup.Hass; +using System.Collections; +using static hassio_onedrive_backup.Contracts.HassAddonsResponse; +using static hassio_onedrive_backup.Contracts.HassBackupsResponse; + +namespace hassio_onedrive_backup.Hass +{ + public class BackupManager + { + private const int InstanceNameMaxLength = 20; + private readonly HassOnedriveEntityState _hassEntityState; + private readonly TransferSpeedHelper? _transferSpeedHelper; + private readonly HassContext _hassContext; + private AddonOptions _addonOptions; + private IGraphHelper _graphHelper; + private IHassioClient _hassIoClient; + private BitArray _allowedHours; + private bool _isExecuting = false; + + public List LocalBackups { get; private set; } + public List OnlineBackups { get; private set; } + + public BackupManager(IServiceProvider serviceProvider, BitArray allowedHours, TransferSpeedHelper? transferSpeedHelper) + { + _addonOptions = serviceProvider.GetService(); + _graphHelper = serviceProvider.GetService(); + _hassIoClient = serviceProvider.GetService(); + _hassEntityState = serviceProvider.GetService(); + _transferSpeedHelper = transferSpeedHelper; + _hassContext = serviceProvider.GetService(); + _allowedHours = allowedHours; + } + + public event Action? LocalBackupsUpdated; + + public event Action? OneDriveBackupsUpdated; + + public async Task PerformBackupsAsync() + { + if (_isExecuting) + { + ConsoleLogger.LogVerbose("Previous backup iteration still executing. Skipping..."); + return; + } + + try + { + _isExecuting = true; + await UpdateHassEntity(); + var now = DateTimeHelper.Instance!.Now; + + // Get existing local backups + ConsoleLogger.LogVerbose("Retrieving existing local backups..."); + var localBackups = await GetLocalBackups(); + + // Get existing online backups + ConsoleLogger.LogVerbose("Retrieving existing online backups..."); + var onlineBackups = await GetOnlineBackupsAsync(_addonOptions.InstanceName); + + DateTime lastLocalBackupTime = localBackups.Any() ? localBackups.Max(backup => backup.Date) : DateTime.MinValue; + ConsoleLogger.LogVerbose($"Last local backup Date: {(lastLocalBackupTime == DateTime.MinValue ? "None" : lastLocalBackupTime)}"); + + DateTime lastOnlineBackupTime = onlineBackups.Any() ? onlineBackups.Max(backup => backup.BackupDate) : DateTime.MinValue; + ConsoleLogger.LogVerbose($"Last online backup Date: {(lastOnlineBackupTime == DateTime.MinValue ? "None" : lastOnlineBackupTime)}"); + + // Create local backups if needed + if ((now - lastLocalBackupTime).TotalHours >= _addonOptions.BackupIntervalHours && (now - lastOnlineBackupTime).TotalHours >= _addonOptions.BackupIntervalHours) + { + if (_allowedHours[now.Hour] == false) + { + ConsoleLogger.LogWarning("Not performing backup outside allowed times"); + } + else + { + _hassEntityState.State = HassOnedriveEntityState.BackupState.Syncing; + await _hassEntityState.UpdateBackupEntityInHass(); + await CreateLocalBackup(); + } + } + + // Get Online backup candidates + var onlineBackupCandiates = await GetOnlineBackupCandidatesAsync(localBackups); + + var uploadCandidates = onlineBackupCandiates + .Select(bc => new { Slug = bc.Slug, Date = bc.Date }).Union(onlineBackups.Select(ob => new { Slug = ob.Slug, Date = ob.BackupDate })) + .OrderByDescending(backup => backup.Date) + .Take(_addonOptions.MaxOnedriveBackups).ToList(); + + // Get Online Backups Candidates that have not yet been uploaded + var backupsToUpload = new List(); + foreach (var backupId in uploadCandidates) + { + if (onlineBackups.Any(ob => ob.Slug == backupId.Slug)) + { + continue; + } + + backupsToUpload.Add(onlineBackupCandiates.Single(bc => bc.Slug == backupId.Slug)); + } + + // Upload backups + if (backupsToUpload.Any()) + { + ConsoleLogger.LogInfo($"Found {backupsToUpload.Count()} backups to upload."); + + // Set Home Assistant Entity state to Syncing + _hassEntityState.State = HassOnedriveEntityState.BackupState.Syncing; + await _hassEntityState.UpdateBackupEntityInHass(); + + foreach (var backup in backupsToUpload) + { + await UploadLocalBackupToOneDrive(backup); + } + } + else + { + ConsoleLogger.LogVerbose("Online backups synced. No upload required"); + } + + // Refresh Online Backups + onlineBackups = await GetOnlineBackupsAsync(_addonOptions.InstanceName); + int numOfOnlineBackupsToDelete = Math.Max(0, onlineBackups.Count - _addonOptions.MaxOnedriveBackups); + + // Delete Old Online Backups + var backupsToDelete = onlineBackups + .OrderBy(onlineBackup => onlineBackup.BackupDate) + .Take(numOfOnlineBackupsToDelete) + .ToList(); + + if (backupsToDelete.Any()) + { + _hassEntityState.State = HassOnedriveEntityState.BackupState.Syncing; + await _hassEntityState.UpdateBackupEntityInHass(); + + ConsoleLogger.LogInfo($"Found {backupsToDelete.Count()} backups to delete from OneDrive."); + foreach (var backupToDelete in backupsToDelete) + { + bool deleteSuccessfull = await _graphHelper.DeleteItemFromAppFolderAsync(backupToDelete.FileName); + if (deleteSuccessfull == false) + { + await _hassIoClient.PublishEventAsync(Events.OneDriveEvents.OneDriveBackupDeleteFailed); + if (_addonOptions.NotifyOnError) + { + await _hassIoClient.SendPersistentNotificationAsync("Failed deleting old backup from OneDrive. Check Addon logs for more details"); + } + } + } + } + + // Delete Old Local Backups + if (localBackups.Count > _addonOptions.MaxLocalBackups) + { + _hassEntityState.State = HassOnedriveEntityState.BackupState.Syncing; + await _hassEntityState.UpdateBackupEntityInHass(); + + int numOfLocalBackupsToRemove = localBackups.Count - _addonOptions.MaxLocalBackups; + var localBackupsToRemove = localBackups + .OrderBy(backup => backup.Date) + .Take(numOfLocalBackupsToRemove) + .ToList(); + + ConsoleLogger.LogInfo($"Removing {numOfLocalBackupsToRemove} local backups"); + foreach (var localBackup in localBackupsToRemove) + { + bool deleteSuccess = await _hassIoClient.DeleteBackupAsync(localBackup); + if (deleteSuccess == false) + { + await _hassIoClient.PublishEventAsync(Events.OneDriveEvents.LocalBackupDeleteFailed); + if (_addonOptions.NotifyOnError) + { + await _hassIoClient.SendPersistentNotificationAsync("Error Deleting Local Backup. Check Addon logs for more details"); + } + } + } + } + + await UpdateHassEntity(); + + } + finally + { + _isExecuting = false; + } + } + + public async Task CreateLocalBackup() + { + List? addons = null; + List? folders = null; + + ConsoleLogger.LogInfo($"Creating new backup"); + if (_addonOptions.IsPartialBackup) + { + addons = _hassContext.Addons + .Where(addon => _addonOptions.ExcludedAddons.Any(excludedAddon => excludedAddon.Equals(addon.Slug, StringComparison.OrdinalIgnoreCase)) == false) + .Select(addon => addon.Slug) + .ToList(); + folders = _addonOptions.IncludedFolderList; + } + + bool backupCreated = await _hassIoClient.CreateBackupAsync( + _addonOptions.BackupNameSafe, + compressed: true, + password: String.IsNullOrEmpty(_addonOptions.BackupPassword) ? null : _addonOptions.BackupPassword, + addons: addons, + folders: folders); + + if (backupCreated == false) + { + await _hassIoClient.PublishEventAsync(Events.OneDriveEvents.BackupCreateFailed); + if (_addonOptions.NotifyOnError) + { + await _hassIoClient.SendPersistentNotificationAsync("Failed creating local backup. Check Addon logs for more details"); + } + } + else + { + LocalBackups = await GetLocalBackups(); + } + + return backupCreated; + } + + public async Task UploadLocalBackupToOneDrive(Backup backup, Action? progressCallback = null, bool updateHassEntityState = true) + { + string? tempBackupFilePath = null; + try + { + ConsoleLogger.LogInfo($"Uploading {backup.Name} ({backup.Date})"); + string? instanceSuffix = _addonOptions.InstanceName == null ? null : $".{_addonOptions.InstanceName.Substring(0, Math.Min(InstanceNameMaxLength, _addonOptions.InstanceName.Length))}"; + string destinationFileName = $"{backup.Name}{instanceSuffix}.tar"; + tempBackupFilePath = await _hassIoClient.DownloadBackupAsync(backup.Slug); + var uploadSuccessful = await _graphHelper.UploadFileAsync(tempBackupFilePath, backup.Date, _addonOptions.InstanceName, _transferSpeedHelper, destinationFileName, + async (prog, speed) => + { + if (updateHassEntityState) + { + _hassEntityState.UploadPercentage = prog; + _hassEntityState.UploadSpeed = speed / 1024; + await _hassEntityState.UpdateBackupEntityInHass(); + } + + progressCallback?.Invoke(prog, speed); + }, + description: SerializeBackupDescription(tempBackupFilePath, backup) + ); + if (uploadSuccessful == false) + { + await _hassIoClient.PublishEventAsync(Events.OneDriveEvents.BackupUploadFailed); + if (_addonOptions.NotifyOnError) + { + await _hassIoClient.SendPersistentNotificationAsync("Failed uploading backup to onedrive. Check Addon logs for more details"); + } + } + } + catch (Exception ex) + { + ConsoleLogger.LogError($"Error uploading backup: {ex}"); + return false; + } + finally + { + // Delete temporary backup file + if (tempBackupFilePath != null) + { + System.IO.File.Delete(tempBackupFilePath); + } + } + + return true; + } + + public async Task DownloadCloudBackupsAsync() + { + _hassEntityState.State = HassOnedriveEntityState.BackupState.RecoveryMode; + await _hassEntityState.UpdateBackupEntityInHass(); + var onlineBackups = await GetOnlineBackupsAsync("*"); + var onlineInstanceBackups = onlineBackups.Where(backup => string.Equals(backup.InstanceName, _addonOptions.InstanceName, StringComparison.OrdinalIgnoreCase)).ToList(); + var localBackups = await GetLocalBackups(); + + if (onlineInstanceBackups.Count > 0) + { + ConsoleLogger.LogInfo($"Found {onlineInstanceBackups.Count} matching backups in OneDrive"); + } + else if (onlineBackups.Count > 0) + { + var instanceNames = onlineBackups.Select(backup => backup.InstanceName ?? "*NoInstance*").Distinct(); + ConsoleLogger.LogInfo($"Found backups belonging to other instances: {string.Join(',', instanceNames)}. If you would like to use another instance backup please update the addon configuration and set the appropriate instance name"); + return; + } + else + { + ConsoleLogger.LogWarning($"No backups found in OneDrive"); + return; + } + + var localBackupNum = localBackups.Count; + int numberOfBackupsToDownload = Math.Max(0, _addonOptions.MaxLocalBackups - localBackupNum); + if (numberOfBackupsToDownload == 0) + { + ConsoleLogger.LogWarning( + $"Local backups at maximum configured number ({_addonOptions.MaxLocalBackups}). To sync additional backups from OneDrive either delete some local backups or increase the configured maximum"); + return; + } + + var backupsToDownload = onlineInstanceBackups + .OrderByDescending(backup => backup.BackupDate) + .Where(backup => localBackups.Any(local => local.Slug.Equals(backup.Slug, StringComparison.OrdinalIgnoreCase)) == false) + .Take(numberOfBackupsToDownload) + .ToList(); + + if (backupsToDownload.Count == 0) + { + ConsoleLogger.LogInfo($"All {Math.Min(numberOfBackupsToDownload, onlineInstanceBackups.Count)} latest backups already exist locally"); + } + + foreach (var onlineBackup in backupsToDownload) + { + await DownloadBackupFromOneDrive(onlineBackup); + } + } + + public async Task DownloadBackupFromOneDrive(OnedriveBackup onlineBackup, Action? progressCallback = null, bool updateHassEntityState = true) + { + string? backupFile = null; + try + { + ConsoleLogger.LogInfo($"Downloading backup {onlineBackup.FileName}"); + backupFile = await _graphHelper.DownloadFileAsync(onlineBackup.FileName, async (prog) => + { + if (updateHassEntityState) + { + _hassEntityState.DownloadPercentage = prog; + await _hassEntityState.UpdateBackupEntityInHass(); + } + + progressCallback?.Invoke(prog); + }); + + if (backupFile == null) + { + ConsoleLogger.LogError($"Error downloading backup {onlineBackup.FileName}"); + return false; + } + + // Upload backup to Home Assistant + ConsoleLogger.LogInfo($"Loading backup {onlineBackup.FileName} to Home Assisant"); + await _hassIoClient.UploadBackupAsync(backupFile); + } + catch (Exception ex) + { + ConsoleLogger.LogError($"Error fetching backup {onlineBackup.FileName} from Onedrive to Home Assistant. {ex}"); + return false; + } + finally + { + if (backupFile != null) + { + System.IO.File.Delete(backupFile); + } + } + + return true; + } + + private string SerializeBackupDescription(string originalFileName, Backup backup) + { + var description = new OnedriveItemDescription + { + Slug = Path.GetFileNameWithoutExtension(originalFileName), + BackupDate = backup.Date, + InstanceName = _addonOptions.InstanceName, + BackupType = backup.Type, + IsProtected = backup.Protected, + Size = backup.Size, + Addons = Enumerable.Empty(), //Temporary workaround for size issue + Folders = backup.Content?.Folders ?? Enumerable.Empty() + }; + + string serializedDesc = JsonConvert.SerializeObject(description); + ConsoleLogger.LogVerbose($"Backup Description: {serializedDesc}"); + return serializedDesc; + } + + private async Task UpdateHassEntity() + { + var now = DateTimeHelper.Instance!.Now; + var localBackups = await GetLocalBackups(); + var onlineBackups = await GetOnlineBackupsAsync(_addonOptions.InstanceName); + _hassEntityState.BackupsInHomeAssistant = localBackups.Count; + _hassEntityState.BackupsInOnedrive = onlineBackups.Count; + _hassEntityState.LastLocalBackupDate = localBackups.Any() ? localBackups.Max(backup => backup.Date) : null; + _hassEntityState.LastOnedriveBackupDate = onlineBackups.Any() ? onlineBackups.Max(backup => backup.BackupDate) : null; + + bool onedriveSynced = false; + bool localSynced = false; + + if (_hassEntityState.LastOnedriveBackupDate != null && (now - _hassEntityState.LastOnedriveBackupDate.Value).TotalHours <= _addonOptions.BackupIntervalHours) + { + onedriveSynced = true; + } + + if (_hassEntityState.LastLocalBackupDate != null && (now - _hassEntityState.LastLocalBackupDate.Value).TotalHours <= _addonOptions.BackupIntervalHours) + { + localSynced = true; + } + + HassOnedriveEntityState.BackupState state = HassOnedriveEntityState.BackupState.Unknown; + if (onedriveSynced && localSynced) + { + state = HassOnedriveEntityState.BackupState.Backed_Up; + } + else if (onedriveSynced) + { + state = HassOnedriveEntityState.BackupState.Backed_Up_Onedrive; + } + else if (localSynced) + { + state = HassOnedriveEntityState.BackupState.Backed_Up_Local; + } + else + { + state = HassOnedriveEntityState.BackupState.Stale; + } + + _hassEntityState.State = state; + await _hassEntityState.UpdateBackupEntityInHass(); + } + + public async Task RefreshBackupData() + { + var getLocalBackupsTask = GetLocalBackups(); + var getOneDriveBackupTasks = GetOnlineBackupsAsync(_addonOptions.InstanceName); + await Task.WhenAll(getLocalBackupsTask, getOneDriveBackupTasks); + } + + public async Task> GetOnlineBackupsAsync(string? instanceName) + { + var onlineBackups = (await _graphHelper.GetItemsInAppFolderAsync()).Select(CheckIfFileIsBackup).ToList(); + onlineBackups.RemoveAll(item => item == null); + if (instanceName != "*") + { + onlineBackups = onlineBackups.Where(item => string.Equals(instanceName, item.InstanceName, StringComparison.OrdinalIgnoreCase)).ToList(); + } + + OnlineBackups = onlineBackups; + OneDriveBackupsUpdated?.Invoke(); + return onlineBackups; + } + + private OnedriveBackup? CheckIfFileIsBackup(DriveItem item) + { + OnedriveBackup ret = null; + if (item.Folder != null && item.Name.Equals("FileSync")) + { + return ret; + } + + try + { + ret = new OnedriveBackup(item.Name, JsonConvert.DeserializeObject(item.Description)!); + } + catch (Exception ex) + { + ConsoleLogger.LogWarning($"Unrecognized file found in backup folder : {item.Name}"); + } + + return ret; + } + + private Task> GetOnlineBackupCandidatesAsync(IEnumerable localBackups) + { + var filteredLocalBackups = localBackups + .Where(backup => backup.Compressed) + .OrderByDescending(backup => backup.Date); + + return Task.FromResult(filteredLocalBackups.ToList()); + } + + public async Task> GetLocalBackups() + { + var ret = await _hassIoClient.GetBackupsAsync(IsMonitoredBackup); + LocalBackups = ret; + LocalBackupsUpdated?.Invoke(); + return ret; + } + + private bool IsMonitoredBackup(Backup backup) + { + // Monitoring All Backups + if (_addonOptions.MonitorAllLocalBackups) + { + // If should ignore upgrade backups and backup seems like an upgrade backup skip it + if (_addonOptions.IgnoreUpgradeBackups && IsUpgradeBackup(backup)) + { + ConsoleLogger.LogVerbose($"Ignoring Upgrade Backup: {backup.Name}"); + return false; + } + + // Otherwise back it up + return true; + } + + // If addon backup always back up + if (backup.Name.StartsWith(_addonOptions.BackupNameSafe, StringComparison.OrdinalIgnoreCase)) + { + return true; + } + else + { + ConsoleLogger.LogVerbose($"Ignoring 'External' backup: {backup.Name}"); + return false; + } + } + + private bool IsUpgradeBackup(Backup backup) + { + // Check if addon upgrade backup + if (backup.Name.StartsWith("addon_", StringComparison.OrdinalIgnoreCase)) + { + if (backup.Content?.Homeassistant != true && backup.Content?.Addons?.Count() == 1) + { + ConsoleLogger.LogVerbose($"Backup {backup.Name} detected as Addon auto upgrade backup"); + return true; + } + } + + // check if core upgrade backup + if (backup.Name.StartsWith("core_", StringComparison.OrdinalIgnoreCase)) + { + if (backup.Content?.Homeassistant == true && backup.Content?.Addons.Count() == 0) + { + ConsoleLogger.LogVerbose($"Backup {backup.Name} detected as Home Assistant auto upgrade backup"); + return true; + } + } + + return false; + } + } +} diff --git a/onedrive-backup/Hass/Events/OneDriveEvents.cs b/onedrive-backup/Hass/Events/OneDriveEvents.cs new file mode 100644 index 0000000..4b48230 --- /dev/null +++ b/onedrive-backup/Hass/Events/OneDriveEvents.cs @@ -0,0 +1,10 @@ +namespace hassio_onedrive_backup.Hass.Events +{ + public enum OneDriveEvents + { + BackupCreateFailed, + BackupUploadFailed, + OneDriveBackupDeleteFailed, + LocalBackupDeleteFailed, + } +} diff --git a/onedrive-backup/Hass/HassContext.cs b/onedrive-backup/Hass/HassContext.cs new file mode 100644 index 0000000..0df38e8 --- /dev/null +++ b/onedrive-backup/Hass/HassContext.cs @@ -0,0 +1,14 @@ +using Microsoft.Graph; +using static hassio_onedrive_backup.Contracts.HassAddonsResponse; + +namespace onedrive_backup.Hass +{ + public class HassContext + { + public string IngressUrl { get; set; } + + public string HeaderIngressPath { get; set; } + + public IEnumerable Addons { get; set; } + } +} diff --git a/onedrive-backup/Hass/HassOnedriveEntityState.cs b/onedrive-backup/Hass/HassOnedriveEntityState.cs new file mode 100644 index 0000000..484f62d --- /dev/null +++ b/onedrive-backup/Hass/HassOnedriveEntityState.cs @@ -0,0 +1,109 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel; + +namespace hassio_onedrive_backup.Hass +{ + internal class HassOnedriveEntityState : INotifyPropertyChanged + { + private const string OneDrive_Backup_Entity_ID = "sensor.onedrivebackup"; + private IHassioClient? _hassioClient; + private BackupState state; + private List entityStateConverters = new List + { + new StringEnumConverter() + }; + + public event PropertyChangedEventHandler? PropertyChanged; + + public HassOnedriveEntityState(IHassioClient hassioClient) + { + _hassioClient = hassioClient; + State = BackupState.Unknown; + } + + [JsonConverter(typeof(StringEnumConverter))] + public BackupState State + { + get => state; + set + { + state = value; + if (state != BackupState.Syncing) + { + UploadPercentage = null; + UploadSpeed = null; + } + } + } + + public DateTime? LastLocalBackupDate { get; set; } + + public DateTime? LastOnedriveBackupDate { get; set; } + + public int BackupsInHomeAssistant { get; set; } + + public int BackupsInOnedrive { get; set; } + + public int? UploadPercentage { get; set; } + + public int? DownloadPercentage { get; set; } + + // KB/s + public int? UploadSpeed { get; set; } + + public async Task UpdateBackupEntityInHass() + { + var payload = new + { + state = State, + attributes = new Dictionary + { + { BackupStateAttribute.LastLocalBackupDate, LastLocalBackupDate?.ToString(DateTimeHelper.DateTimeFormat) }, + { BackupStateAttribute.LastOnedriveBackupDate, LastOnedriveBackupDate?.ToString(DateTimeHelper.DateTimeFormat) }, + { BackupStateAttribute.BackupsInHomeAssistant, BackupsInHomeAssistant.ToString() }, + { BackupStateAttribute.BackupsInOnedrive, BackupsInOnedrive.ToString() }, + { BackupStateAttribute.UploadPercentage, UploadPercentage == null ? null : $"{UploadPercentage}%" }, + { BackupStateAttribute.UploadSpeed, UploadSpeed== null ? null : $"{UploadSpeed} KB/s" }, + { BackupStateAttribute.DownloadPercentage, DownloadPercentage == null ? null : $"{DownloadPercentage}%" } + } + }; + + string payloadStr = JsonConvert.SerializeObject(payload, new JsonSerializerSettings + { + NullValueHandling = NullValueHandling.Ignore, + Converters = entityStateConverters + }); + + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(null)); + await _hassioClient.UpdateHassEntityStateAsync(OneDrive_Backup_Entity_ID, payloadStr); + } + + public class BackupStateAttribute + { + public const string LastLocalBackupDate = "Last Local backup date"; + + public const string LastOnedriveBackupDate = "Last OneDrive backup date"; + + public const string BackupsInHomeAssistant = "Backups in Home Assistant"; + + public const string BackupsInOnedrive = "Backups in OneDrive"; + + public const string UploadPercentage = "Current backup upload percentage"; + + public const string DownloadPercentage = "Backup download percentage"; + + public const string UploadSpeed = "Current backup upload speed (KB/s)"; + } + public enum BackupState + { + Syncing, + Backed_Up_Local, + Backed_Up_Onedrive, + Backed_Up, + Stale, + RecoveryMode, + Unknown, + } + } +} diff --git a/onedrive-backup/Hass/HassOnedriveFileSyncEntityState.cs b/onedrive-backup/Hass/HassOnedriveFileSyncEntityState.cs new file mode 100644 index 0000000..cb95284 --- /dev/null +++ b/onedrive-backup/Hass/HassOnedriveFileSyncEntityState.cs @@ -0,0 +1,82 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel; + +namespace hassio_onedrive_backup.Hass +{ + internal class HassOnedriveFileSyncEntityState : INotifyPropertyChanged + { + private const string OneDrive_FileSync_Entity_ID = "sensor.onedrivefilesync"; + + private IHassioClient? _hassioClient; + private static HassOnedriveFileSyncEntityState? _instance; + private FileState state; + private List entityStateConverters = new List + { + new StringEnumConverter() + }; + + public event PropertyChangedEventHandler? PropertyChanged; + + public HassOnedriveFileSyncEntityState(IHassioClient hassioClient) + { + _hassioClient = hassioClient; + State = FileState.Unknown; + } + + [JsonConverter(typeof(StringEnumConverter))] + public FileState State + { + get => state; + set + { + state = value; + if (state != FileState.Syncing) + { + UploadPercentage = null; + UploadSpeed = null; + } + } + } + + public int? UploadPercentage { get; set; } + + public int? UploadSpeed { get; set; } + + + public async Task UpdateBackupEntityInHass() + { + var payload = new + { + state = State, + attributes = new Dictionary + { + { FileStateAttribute.UploadPercentage, UploadPercentage == null ? null : $"{UploadPercentage}%" }, + { FileStateAttribute.UploadSpeed, UploadSpeed == null ? null : $"{UploadSpeed} KB/s" }, +} + }; + + string payloadStr = JsonConvert.SerializeObject(payload, new JsonSerializerSettings + { + NullValueHandling = NullValueHandling.Ignore, + Converters = entityStateConverters + }); + + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(null)); + await _hassioClient.UpdateHassEntityStateAsync(OneDrive_FileSync_Entity_ID, payloadStr); + } + + public class FileStateAttribute + { + public const string UploadPercentage = "Current file upload percentage"; + public const string UploadSpeed = "Current file upload speed (KB/s)"; + } + + public enum FileState + { + Syncing, + Synced, + Unknown, + } + } +} diff --git a/onedrive-backup/Hass/HassOnedriveFreeSpaceEntityState.cs b/onedrive-backup/Hass/HassOnedriveFreeSpaceEntityState.cs new file mode 100644 index 0000000..467fd2d --- /dev/null +++ b/onedrive-backup/Hass/HassOnedriveFreeSpaceEntityState.cs @@ -0,0 +1,47 @@ +using Newtonsoft.Json; +using onedrive_backup.Contracts; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace hassio_onedrive_backup.Hass +{ + internal class HassOnedriveFreeSpaceEntityState : INotifyPropertyChanged + { + private const string OneDrive_FreeSpace_Entity_ID = "sensor.onedrivefreespace"; + private IHassioClient? _hassioClient; + + public HassOnedriveFreeSpaceEntityState(IHassioClient hassioClient) + { + _hassioClient = hassioClient; + } + + public double? FreeSpaceGB { get; private set; } + public double? TotalSpaceGB { get; private set; } + + public event PropertyChangedEventHandler? PropertyChanged; + + public async Task UpdateOneDriveFreespaceSensorInHass(OneDriveFreeSpaceData freeSpaceData) + { + FreeSpaceGB = freeSpaceData.FreeSpace; + TotalSpaceGB = freeSpaceData.TotalSpace; + + var payload = new + { + state = FreeSpaceGB == null ? "-" : FreeSpaceGB.Value.ToString("0.00"), + attributes = new Dictionary + { + { "unit_of_measurement", "GB" } + } + }; + + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(null)); + string payloadStr = JsonConvert.SerializeObject(payload); + await _hassioClient.UpdateHassEntityStateAsync(OneDrive_FreeSpace_Entity_ID, payloadStr); + } + + } +} diff --git a/onedrive-backup/Hass/HassioClient.cs b/onedrive-backup/Hass/HassioClient.cs new file mode 100644 index 0000000..bb7a348 --- /dev/null +++ b/onedrive-backup/Hass/HassioClient.cs @@ -0,0 +1,225 @@ +using hassio_onedrive_backup.Contracts; +using hassio_onedrive_backup.Hass.Events; +using hassio_onedrive_backup.Storage; +using Newtonsoft.Json; +using onedrive_backup.Contracts; +using System.Globalization; +using System.Net.Http.Headers; +using System.Text; +using static hassio_onedrive_backup.Contracts.HassAddonsResponse; +using static hassio_onedrive_backup.Contracts.HassBackupsResponse; + +namespace hassio_onedrive_backup.Hass +{ + internal class HassioClient : IHassioClient + { + private const string Supervisor_Base_Uri_Str = "http://supervisor"; + private const string Hass_Base_Uri_Str = "http://supervisor/core/api"; + private readonly HttpClient _httpClient; + + public HassioClient(string token, int hassioTimeout) + { + _httpClient = new HttpClient(); + _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); + _httpClient.Timeout = TimeSpan.FromMinutes(hassioTimeout); + } + + public async Task DeleteBackupAsync(Backup backup) + { + try + { + Uri uri = new Uri(Supervisor_Base_Uri_Str + $"/backups/{backup.Slug}"); + await _httpClient.DeleteAsync(uri); + + } + catch (Exception ex) + { + ConsoleLogger.LogError($"Error deleting backup {backup.Slug}. {ex}"); + return false; + } + + return true; + } + + public async Task> GetBackupsAsync(Predicate filter) + { + Uri uri = new Uri(Supervisor_Base_Uri_Str + "/backups"); + var response = await GetJsonResponseAsync(uri); + if (response.Result.Equals("ok", StringComparison.OrdinalIgnoreCase) == false) + { + throw new InvalidOperationException($"Failed getting Backups from Supervisor. Result: {response.Result}"); + } + + var backups = response.DataProperty.Backups; + + return filter != null ? backups.Where(backup => filter(backup)).ToList() : backups.ToList(); + } + + public async Task CreateBackupAsync(string backupName, bool appendTimestamp = true, bool compressed = true, string? password = null, IEnumerable? folders = null, IEnumerable? addons = null) + { + DateTime timeStamp = DateTimeHelper.Instance!.Now; + const string dt_format = "yyyy-MM-dd-HH-mm"; + + string? payloadStr; + Uri? uri; + + string finalBackupName = appendTimestamp ? $"{backupName}_{timeStamp.ToString(dt_format, CultureInfo.CurrentCulture)}" : backupName; + + // Full Backup + if (folders == null && addons == null) + { + uri = new Uri(Supervisor_Base_Uri_Str + "/backups/new/full"); + var fullPayload = new + { + name = finalBackupName, + compressed = compressed, + password = password + }; + + payloadStr = JsonConvert.SerializeObject(fullPayload, new JsonSerializerSettings + { + NullValueHandling = NullValueHandling.Ignore + }); + + ConsoleLogger.LogInfo("Starting full local backup"); + } + // Partial Backup + else + { + uri = new Uri(Supervisor_Base_Uri_Str + "/backups/new/partial"); + var partialPayload = new + { + name = finalBackupName, + compressed = compressed, + password = password, + homeassistant = true, + addons = addons, + folders = folders + }; + + payloadStr = JsonConvert.SerializeObject(partialPayload, new JsonSerializerSettings + { + NullValueHandling = NullValueHandling.Ignore + }); + + ConsoleLogger.LogInfo("Starting partial local backup"); + } + + try + { + await _httpClient.PostAsync(uri, new StringContent(payloadStr, Encoding.UTF8, "application/json")); + ConsoleLogger.LogInfo("Backup complete"); + } + catch (TaskCanceledException tce) + { + if (tce.InnerException is TimeoutException) + { + ConsoleLogger.LogError($"Backup request timed out. {tce}"); + ConsoleLogger.LogError($"Increase the timeout value in configuration"); + return false; + } + } + catch (Exception ex) + { + ConsoleLogger.LogError($"Failed creating new backup. {ex}"); + return false; + } + + return true; + } + + public async Task UploadBackupAsync(string filePath) + { + try + { + Uri uri = new Uri(Supervisor_Base_Uri_Str + "/backups/new/upload"); + using var multiPartFormContent = new MultipartFormDataContent(); + var fsContent = new StreamContent(System.IO.File.OpenRead(filePath)); + multiPartFormContent.Add(fsContent, name: "file", fileName: filePath); + var response = await _httpClient.PostAsync(uri, multiPartFormContent); + response.EnsureSuccessStatusCode(); + } + catch (Exception ex) + { + ConsoleLogger.LogError($"Error uploading backup to Home Assistant. {ex}"); + return false; + } + + return true; + } + + public async Task SendPersistentNotificationAsync(string message) + { + try + { + Uri uri = new Uri(Hass_Base_Uri_Str + "/services/notify/persistent_notification"); + var payload = new + { + message = message, + title = "hassio-onedrive-backup" + }; + + string payloadStr = JsonConvert.SerializeObject(payload); + await _httpClient.PostAsync(uri, new StringContent(payloadStr, Encoding.UTF8, "application/json")); + } + catch (Exception ex) + { + ConsoleLogger.LogError($"Failed sending persistent notification. {ex}"); + } + } + + public async Task> GetAddonsAsync() + { + Uri uri = new Uri(Supervisor_Base_Uri_Str + "/addons"); + var response = await GetJsonResponseAsync(uri); + var ret = response.DataProperty.Addons.ToList(); + return ret; + } + + public async Task UpdateHassEntityStateAsync(string entityId, string payload) + { + Uri uri = new Uri(Hass_Base_Uri_Str + $"/states/{entityId}"); + await _httpClient.PostAsync(uri, new StringContent(payload, Encoding.UTF8, "application/json")); + } + + public async Task PublishEventAsync(OneDriveEvents eventType, string payload = "") + { + Uri uri = new Uri(Hass_Base_Uri_Str + $"/events/onedrive.{eventType}"); + await _httpClient.PostAsync(uri, new StringContent(payload, Encoding.UTF8, "application/json")); + } + + public async Task DownloadBackupAsync(string backupSlug) + { + ConsoleLogger.LogInfo($"Fetching Local Backup (Slug:{backupSlug})"); + Uri uri = new Uri(Supervisor_Base_Uri_Str + $"/backups/{backupSlug}/download"); + var fileInfo = new FileInfo($"{LocalStorage.TempFolder}/{backupSlug}.tar"); + await using var memStream = await _httpClient.GetStreamAsync(uri); + using var fileStream = System.IO.File.Create(fileInfo.FullName); + await memStream.CopyToAsync(fileStream); + ConsoleLogger.LogInfo($"Backup ({backupSlug}) fetched successfully"); + return fileInfo.FullName; + } + + public async Task GetTimeZoneAsync() + { + Uri uri = new Uri(Supervisor_Base_Uri_Str + "/supervisor/info"); + var response = await GetJsonResponseAsync(uri); + var ret = response.DataProperty.Timezone; + return ret; + } + + private async Task GetJsonResponseAsync(Uri uri) + { + string response = await _httpClient.GetStringAsync(uri); + T ret = JsonConvert.DeserializeObject(response)!; + return ret; + } + + public async Task GetAddonInfo(string slug) + { + Uri uri = new Uri(Supervisor_Base_Uri_Str + $"/addons/{slug}/info"); + var response = await GetJsonResponseAsync(uri); + return response; + } + } +} diff --git a/onedrive-backup/Hass/HassioClientMock.cs b/onedrive-backup/Hass/HassioClientMock.cs new file mode 100644 index 0000000..da90f2d --- /dev/null +++ b/onedrive-backup/Hass/HassioClientMock.cs @@ -0,0 +1,164 @@ +using hassio_onedrive_backup.Contracts; +using hassio_onedrive_backup.Hass.Events; +using Newtonsoft.Json; +using onedrive_backup.Contracts; +using System.Diagnostics; +using System.Net.Http; +using static hassio_onedrive_backup.Contracts.HassAddonsResponse; +using static hassio_onedrive_backup.Contracts.HassBackupsResponse; + +namespace hassio_onedrive_backup.Hass +{ + internal class HassioClientMock : IHassioClient + { + private List _backups = new List + { + new Backup + { + Compressed = true, + Date = DateTime.Now.AddDays(-10), + Name = "Mock1", + Protected = false, + Size = 1, + Slug = "Mock1", + Type = "partial", + Content = new Content + { + Addons = new string[] + { + "Addon1", "Addon2" + } + } + }, + new Backup + { + Compressed = true, + Date = DateTime.Now.AddDays(-1), + Name = "Mock2", + Protected = false, + Size = 2, + Slug = "Mock2", + Type = "full", + Content = new Content + { + Addons = new string[] + { + "Addon1", "Addon2" + }, + Folders = new string[] + { + "Folder1" + } + } + } + }; + + public Task CreateBackupAsync(string backupName, bool appendTimestamp = true, bool compressed = true, string? password = null, IEnumerable? folders = null, IEnumerable? addons = null) + { + DateTime timeStamp = DateTimeHelper.Instance!.Now; + string finalBackupName = appendTimestamp ? $"{backupName}_{timeStamp.ToString("yyyy-MM-dd-HH-mm")}" : backupName; + var backup = new Backup + { + Compressed = compressed, + Name = finalBackupName, + Protected = !string.IsNullOrEmpty(password), + Type = folders == null && addons == null ? "full" : "partial", + Date = DateTime.Now, + Slug = Guid.NewGuid().ToString() + }; + + _backups.Add(backup); + return Task.FromResult(true); + } + + public Task DeleteBackupAsync(Backup backup) + { + var backupToRemove = _backups.SingleOrDefault(bck => bck.Slug.Equals(backup.Slug, StringComparison.OrdinalIgnoreCase)); + if (backupToRemove != null) + { + _backups.Remove(backupToRemove); + return Task.FromResult(true); + } + + return Task.FromResult(false); + } + + public Task DownloadBackupAsync(string backupSlug) + { + string backupFile = $"./{backupSlug}.tar"; + + // 15MB File + byte[] data = new byte[100 * 1024 * 1024]; + new Random().NextBytes(data); + File.WriteAllBytes(backupFile, data); + return Task.FromResult(backupFile); + } + + public Task GetAddonInfo(string slug) + { + return Task.FromResult(new HassAddonInfoResponse + { + DataProperty = new HassAddonInfoResponse.Data + { + IngressEntry = "/", + IngressUrl = "/" + } + }); + } + + public Task> GetAddonsAsync() + { + return Task.FromResult(new List() + { + new HassAddonsResponse.Addon{ Slug = "Addon1", Name = "First Addon" }, + new HassAddonsResponse.Addon { Slug = "Addon2", Name = "Second Addon" } + }); + } + + public Task> GetBackupsAsync(Predicate filter) + { + return Task.FromResult(_backups); + } + + public Task GetTimeZoneAsync() + { + return Task.FromResult("Local"); + } + + public Task PublishEventAsync(OneDriveEvents eventType, string payload = "") + { + Debug.WriteLine($"EventType: {eventType}. Payload: {payload}"); + return Task.CompletedTask; + } + + public Task SendPersistentNotificationAsync(string message) + { + var payload = new + { + message = message, + title = "hassio-onedrive-backup" + }; + + string payloadStr = JsonConvert.SerializeObject(payload); + Debug.WriteLine(payloadStr); + return Task.CompletedTask; + } + + public Task UpdateHassEntityStateAsync(string entityId, string payload) + { + Debug.WriteLine($"EntityId: {entityId}. State: {payload}"); + return Task.CompletedTask; + } + + public Task UploadBackupAsync(string filePath) + { + _backups.Add(new Backup + { + Name = Path.GetFileNameWithoutExtension(filePath), + Slug = Guid.NewGuid().ToString() + }); + + return Task.FromResult(true); + } + } +} diff --git a/onedrive-backup/Hass/IHassioClient.cs b/onedrive-backup/Hass/IHassioClient.cs new file mode 100644 index 0000000..f40d5ef --- /dev/null +++ b/onedrive-backup/Hass/IHassioClient.cs @@ -0,0 +1,32 @@ +using hassio_onedrive_backup.Hass.Events; +using onedrive_backup.Contracts; +using static hassio_onedrive_backup.Contracts.HassAddonsResponse; +using static hassio_onedrive_backup.Contracts.HassBackupsResponse; + +namespace hassio_onedrive_backup.Hass +{ + public interface IHassioClient + { + Task> GetBackupsAsync(Predicate filter); + + Task SendPersistentNotificationAsync(string message); + + Task CreateBackupAsync(string backupName, bool appendTimestamp = true, bool compressed = true, string? password = null, IEnumerable? folders = null, IEnumerable? addons = null); + + Task DeleteBackupAsync(Backup backup); + + Task UpdateHassEntityStateAsync(string entityId, string payload); + + Task DownloadBackupAsync(string backupSlug); + + Task UploadBackupAsync(string filePath); + + Task> GetAddonsAsync(); + + Task GetAddonInfo(string slug); + + Task GetTimeZoneAsync(); + + Task PublishEventAsync(OneDriveEvents eventType, string payload = ""); + } +} \ No newline at end of file diff --git a/onedrive-backup/Logo/logo_50x50.png b/onedrive-backup/Logo/logo_50x50.png new file mode 100644 index 0000000000000000000000000000000000000000..0e6f093a9131016ab8b4e59491a2ac0148eaf011 GIT binary patch literal 1802 zcmV+l2le=gP)EX>4Tx04UFukvT{MK^TQUqvAo-!W1eNTSO}bQ4vdt zq6i9-M2JV>?#4tRy9v7y8%x1fu<&TS3L9%}Eo=or@Bp#2vQo4WS^wDx2|@%1hWU6i z?=kZR0tXq>a;tj4vhz-KETSc5X0@7U>S?8pMyhqw%}vHeR!%q2Z3d@9`K$OVP(m2MRHMRD5afXWOx@#wH{NLWjk zuu;P1l4A+?3x|`IE%|{&fs=~Y6kC}U^XH!Gg~3I8I;M1)?Tj(bBvWV@tguXmJl(R| zqPRq5KT^iu=KH6_Wr%ATQye2?vCw@#>JNT*>!$j83rWEUR6lv%TL;u^!PlneeI9z= z*AY}c!i8P*XAfZTUG&YO7T$-ZbvU~$YQ{F4Z$QgKPIq))s+1W>rQr2MzG()Uuc3af z(A&>G$9E8yt|qQvcMm$#l09GM-L<8?{dvakkH|MICvuCgRhhK_000SaNLh0L04^f{ z04^f|c%?sf00006VoOIv00000008+zyMF)x1q(?;K~z{r?Uz|>6;&9=|L4riUE8~~ zw<|4eS*=7G1R*Xg4;T_^tPd^;Mp6Y|jD|;|#?<&?d?3O2V1mK}5d$Q~C?F6L2*Qg= zp(%@^EEc5I0$pf(J9nEoelzz}q<5iH=-d2~oB6(Pw)36y|GqgFE-o%EE-o$rlgAlE zu<+(XEe5cZgV)&+u0%k6ejuUEWpT3b^u$8<8+2CZvMauKjk+0W( zYdP82^q7%EB5xgRFciL@9==?Lib5G2H_h~h_|CR|8FI`cPb9qgXp>;ZX)ro z6Ks`Wm`yXIFf$`WD#3&vhndOP*LhWrWX7~@pT?0$XYD+6jC{5J6KPMGX(tluxKO5K z%w0l=HW|u+S%T5W@NAuickT&dJb}m`05VmSD_}1)QdiB@?Ld8mKMv<8V(B>sqRCtVhQnC7FkR zpzzmv-ktNa^z-6;MFig@tp_qNZs6(Je#9t&8$)S3#u&$VNeGLVG@^N74c4|)!=U*b zO%^QvYGlkqP1`RmmVREGCDI|dU}CNGiqaU>Frb@Q5c8letis?7B@rJg8^aJ0Klai} z7$m8_G{g6_T4|HYybyG&fcmBM^5RHZ(XE|fp=iU>Ey~haemqv`!6^0Q#+o1os0+t4 zw98`Dql46nX#v7s1>arMVNepucp7>R|IiANr}d*VJfet@j}6Wngqo zFzQDsNl;O8#UdDsNizp$HNxooEpS|V{}CwBP)*veYpy`3G6+sz@nOv!jhPVk#ts-b3+{at|f6NDR7r!y!#HVuNbW7WyV zc|LoqviowPRI8X=DTf1ONblEb~P|1pt5y001C1;b6ceT+?g2;2V^MsJtiu zP#2H*Y6K1bGt^RCTuDY;oXo+=-rUm03;>`_^iBNyrC)?-&_GqTQH}UCe>f{p26Cy#C6;Wh5)xqE)+ zlhYNuaxfke+kC}@I9D)Nh;B<)kD+usGIMHgW{`i%$)-U; zj}Api6-dWMPVva(tt=(jL&Oiq{`)O^-YKQ={Eq?NxFrK!^(>Jnl5E5$2z2&x+5#j* zbR8}gIZ8|6<84yAXUyFnf7BsA4MWl^k#oIm`d_wx;}GULqJ%CAxEO2_mV)?To+@3w zf2gzNQ2<Jvxma^_)|7)F1dp<)Q7}FxX6AK z64)$aIB`_f7(WY3Ca=c?0>Fm%Xa&|U>TRsAFRyl6=)AoFm}s1$dkM>^zykzhEGsPm zzJsqP@pgak4c_64wle_0{OR8Z!sC~)8vsBCkdY8o^H@1uchAP!+k&~YFn4Q8TU|YI z76@fS^jL`b=U9NCwfN}_OsCrr=m`a$-xHk#`$HsC9!vxw}ygYzRGI67|Z~g4t z7L@VuFbp~DwZ<;pjX>p2Mn*s+M3i>Av|sJSb1zCMq?q;4 z%OnUqjuT*tXu-kxDt_^~8Wvo{Ll6b= z#(pE+A%w;Tz(99ZC>}G1FB(WPa)ttA(VHyZa%f5XS1DtR%P|#=G3*lsu+%@bG5Ehi zd@}bLMs$l~>-p&Lelnxg7!FTja$^7`#aEVdnTC*|&BbCd zWqE-E_`!%$z=%*3cAjEdz-J65U?bIstd#JTasCs_jA@e8JQ~l!{_je~kNDZ)e{WU3 zr|mFqf^+O_svI^q`d4=pqY12^Pz%bHct)90|FDU^e|nfZ(xREbfvMgQh3%dGUrD4E za~73aZs;NF2!_&RSKzI` z5L+Q<0w6i?A^(jht!*n?<%|5a$(%jS)q_ZvX_@=s|< z{u0DQkPy4ea~9m6`L~=>VU#~*NQ!{V=Q3EF8UvSpo-g{laL5LiqFaNJwiRD5mMj0+ zzrP4m-{gM-5lqSk_21YL$5?MODqM@A(m|N6+J zt#~+$fGBHW!FVdsf5SqI_Z|Tb910#Q7@?0(dH5wHPG2OFAz?$6ECvZgD2(%H3e6ov zu>Jv}WEYHGLu^=Ot2V$|k~s$y1{gZ7B(47GOq_AgWc;-9mw4o0oE%GR6R_Awga`YY z{%e#U8ZoVl!U~<|1^BOm8T;zbWihj1;X<5gC?&7G7o@;{lHz-9HYj3FqhAfV;6S<} zR07FH*<1bfDJ#p7qUn2Sfl~MhR3br3WGiM4NK9G*kErSIV+(S4QDN~)xWcs~_-C;!aRiCd}VozJR)Pm>ktvB^VQbkx|Y{2uds1)@EM@mj$=8_LEA4BY+x! z9w91QgfZkh8Nh(7?>$ID;>?Aax{#aI{gudzHzKnQ=6fcJ zl=&!DJ=C1D2%H((0sy12KKol5BAlT(ale7=xkRvIprLLcrGV1he540$K!9+7A@9(> z(O2)v%@R4m3yf)Hf~zU_gQ^W;-xO8tce>Rz^Qt_gR_M8L@h{bEvwbZekXX9r{jM8@^h!fFb?iQC%D zWUjMqNHzwG$dLg)Ijud>*1~R8Jdoo>y078>pvu-X7X|r+YBd)lyvd$PzH=Agm7rW8$oyd4wKwPokd3d*aig2msf2AdMwf=JC8agImjx^8c;di&^+dNl zi?qiROLpw%S_7a6z*h@vopVzLKFq1w45X{St@H7fY_m!!{M33>5iU+nWpL* z7oxfHYI@>ohjPkO97EB-KslDUw$o$Ymh-a|PYp0;K&z~g?qpfoPx>nSzEjO>Yf9&o zZLTIYPRkjZ<$LjTaUSH~tHXHbD#v72M{jg$IZUxwxcM>EmgNhQ%$qA3w;L#qPuuDr zg>x_081RGu&t2MnXrw$LA$U6SH+|}vM zQAbX{awT?pb8UH#Ca@{9>Z!C9jbU-`vHN0^l)KaWy0_XY-dH#?Dz@~gr`98nFb8l}ntQBPt-xqbBrT%D3VY#OOnTe1;AGX9WI{!v86`wMJJh2ZZd5x~ zpCyMlf0R^yZg? z3&HN$6ICvNrM?^SYA3?mKmQnYpL)1JuugwJF8_HTCV7Slh>pR~=U;BRxZ1%~lQZ~T zwEW;tI+uBy_6ma5Yq|MN;Rc|D5h>(6$nDU5On>FahR7#}QL{8}iH_QITs2CFe@%Wk z6cf%hQ1u;o=xpuaKDxSPOGR0J58o$xZtr@1;wIuX-yb*TaL?5+wO}IqCud&4LzPZm zzvmmjFIpu6&~H98=!XxlO>uvD#vgUcwf5qxtGj;U^bLd0y9aH%Iy1)Y?VNMO*PkbS z+OP$Hf6@Ypxe?t7^i3mQsFe@q-)cZnu3a9`vJ?UX&`S7hfNDW3Y|kGs)|?OTT7rC+ zod*7wD{Li#Ey8cLE0p#8axu+M;Ka<3waAQw$c;+l+hv^QpHaS2>_NhQ;>&AZ_nkR%P3k z3V$`tQa1{_dx2`I!>ZyBX(UAh^lgP1m`Zl}7(gN>RR|;v>on=Wq0iG~Qpk;Bu7iXOt*DZ?hf;gY!OD;@H4aeuWy&dqHunrQB~ zQmeh{t&`71g(}i|*26ycv*w7K;Mo2v3)^eN!5wC#w|VTzh7@tyhk0Qug1jhTgUJRF zV(w)2&#+l(ieKop`sEmy_zPR5GD7f`1H^>pyn`byc%(P_vS5okWDBX!{z@W0p5#)^ zGe6M=9nhqsJT-i9yuj-6wA*SfYq{JQx}0oV-QRiW4r50{*cHNiJ34Q4kX1LrwxbEeT9f3O)i-XjNBQ<1E2o>e1AN^L7s;} z9M>Q`H6rG=N3Is8!>t)#52MSo8GC-?V-6t8`cFHyt@e9{@p9ZJX_9zLvyM|Djf=7%n(0AOY{Ul3c~PbDU%~%Syq`xEBK;p}*&3Bj*32 zC#$i`;XgSXD=)ZMTT3J;g4~LIq{Dzo7SydDqVie1_8F?-FA6R|fc{H8!lIuth#E9Z z33TI|W?Vx{W8igg-bl)9$$$2@Cq5J10-Nbn8#ZAAEeAp(UHX}Qq zd;82=XI(yL$J)NTw^^E!8?VcSarlO6|M4%XJvuN;G9Fh#zk8P#hinsA6kOQ8#YX*ha0@o6cgj0^0%R_WSk_GWG) z9M@~C{tC0wOaUTtBp>9f7C8>%p7T3ol*3PO zAqHN0%nT_;#d_?|IDMJfi2l_>YOofg*~EkFT9cO)KMh=y&lP@2bbV|qID7W}x-`p3 zWM_k8_t(V2jqfmuXeaNTavlB^W~Z4;~Tu~o!59--0vsQ@xz<0 z$6+SA45p><&2#hPZ1|s|92UYwVDC0_!nP68%n6&N7<8X9vgD#qa^nkMRv;a*1I2ga z$D-eLv$%?0ucswkbp51&>=$z`lK0Z$KQ}`tp` z7gqOG^4ON|<5s`rfd{Bu%Kh;R*444VX@yt!T5|idzuwAY!#l5{;r?lC%fndC*}ePm z>KM>W@p1NUprF~%@5Y+MUkzW>V_gG@k$byZIkI~mg~{8S44*5v8oW3@EF~5&`?WOc z`OY6Y?57t6JIMqA*v%5tT68!>G>hel@~a-wVaZwsq}9DC*uLW_6=fMsjD-)MeQ9mF zyyu#yUHuJl*EI+H!c4F|l)lk=`BRJMvAOf~@p8Wx5OARQHF-EE*f#Q#hbQKJBev!2 zZQ|_N-RpWr^d^Pxqq{%;0L?M`QfBk<&DjYRGNJ5(2!XL)V9Cbn1C zubD8k+f%+z8+x?@M~^b7Dm# zx@Q}`my2bBm!c-=v#x<{{aRlsKxNdQ7eYnUVY%ugIqOQac}YE?Tj{bw+d;3`kiB!h zkSuT7!ms9PbO^{8%*VFU=OccAfR`{%z3sEx)$SnS8Mc=XTI(^`Wg@)$5VR$%Bf+HK z(VZUy5FaQ$pxgt;D{mXvViYq&bfx0wYHp1&l|$WBn`?16R7!YOd@~;(J@*)2mrqTS zs<5GBUOHDhiGNh9bRT9?Q9vmEa)4Sgnn@_@QV1b~>+f5B{u$91=Y+rtN!#n?aOT6v zLzcGwQu?XeVtmnADE(&-ObwUKiAfI9*8pn;db>)Q1gh-y;n-%>`qWFdr%0V?5mtn( z`3OYeiqVk-*u-?QwMu$cJgfl-Ek-HcGpSM-ps6GzB|bmpcR-;|VfS}ATvkHLbS#k+ z06e6u=ZGq-u_Dyym+C)b(C!<5EmwE-AIHRqA7T^8$1o_AiPO4kp-E49x(xzF`+z&n zY<^#ukzVey+CAdp=5H2EWI285HDjWn+Ofn(zQr5T26e7)w&9s2-_iDDX%fvA<~2Ln zat#T0)r&XNO_CW6A)7er)C?tdfWwo9i&umj`d~Ux_jRJG<53|R%%FISr!Iul#xs?M zChUyRWd;&E5)6XU(WDhI9&)3_I9kt`}s2@u}De*#?t9xkV z7H zDqRzFS1c@SCJ$@=9K6q-=YSoKKMyCArr}YH_xVnzQB!7vR18 z1S}WQkN9;r{ri~^9#GCGs*YT{B468jIu$FGUYW{oFW2&L&-gtav4k0b9O>U)Z6N}V z#z&oeODeJ2mo92llg!}75hpx$epJhx0Ib`158HaUHfUkwR+AT2sR1qO5a_r47l>rl zCx^z#Y!|uHtXTx!yRUw6VYrHND50ob&CsgCT6r3)&imS*uJRh3e&n`0#E~x5!VmtU zIxK>|Z0!y7kCn}>eVJPo>R(jf`n`-2Jq?)uNwH`my<`}&ZY1t2h~772`!NljKhjfd zjgJ5hi|XOB{2IjLD2zk`(OKS$87lWB&@y=!!!4u*RJ%SdqJy;Bn_xJ2LO6_H2(m&u z;ld~mFIYFL8KjL|WR4v@XE#pSpF5&o^k2)LdyoYiTKX*c7_&!#0 zV-mG0q~~xyhC(DFW#=iv*6#6#iGpK?FyUi~_c>5hqy<*55!dFVLFi>q`jEO1{U>w5 z)|qe%3)|79vxbXBMxUKaL0xzK+4q1+U&5i?jGI|E!oPG4g@4U^S9y@EuU8B{x`nua|1u^8 z9Tl>dq^d}u>+^t`v$HRS?QwhS(}7dJ-KxC*bCD$XVDRlj=HseRm{cVQmzgyAy3sYu znr$~Xl=!;SR3@mLo|e|3XVXE1CnFJAFM){3Xe~SAVvzOVCjah8odeC)MpjgLs)XGmKu<&DD1#=|* zB9s0VqUSa=~mD&YCDlp8mu}S z)mgE<%p%#6$qIj}8jcAvI5oumHlu&A%Z)6Ii#2fNg=5o>hC!)Ga(znvc$)r#nKL%H4mETEXm-ZCeOcl{El4rS#*jK2r}p= zOJ`bwlC!j|$lHoXu{#bsUHaRpX%aZ_eJlSDw4yS^sfM!#Ct^iZ%(f3K{j*D8qc?sZ zGY@?c24@rM@ArvR6t!AyUh7(zgc*eoI)*{Fh4*Q4q6_XKE{jwS8Ic+>4s$)-s5i}Q z@685)d1d90;i1+NIuA9hZrl!k?KhsD?Q1d+Nl-H;H=?YH@vpd7NL(9FzNIRBB?dq* zK{t2FMH%vMT8ystHdt#QJ|J=hwV$-H*&sRdYARIENF|FqO4rGl>;VF(b;dlcI5tnI^Ksi!a^|TwwtM7L7i?xm$gj9K3-8JT^h%VvoI>dL%tutLjz&<5 zs2s*C-&U0yN(jXs^c8dk8DXQciG-wXCm}XUzqZ>VSc}N9_vcy!Q5}YZ76G=34VMjz zaYIMLygxQr?qyqEP-zn>H(Sn0IymY`|9ZKppTGzMpj)|lZ}i~GH6$qU1A#iuq(u9D zEK<8?-mmehMDl)r2b9l!KR&-%4B|bWnxD_ve!sAyfTnI8E)-U?F^psdXO#&sqXSl^ zwTloOZ_>yGJ;Q*^SrDkGfVft7rq>tut5vnwRpIg>OB$@rUmQ+9gg$n9?K+x&GoLld zVn$B)mH&ZvPsB#A!5zN4{0ZmZ!(d=DNSJ3Izzji?yzF>0DE`nX)U}3^yy|!r#otkD zIIQf?(x4p3Fbtz<#7vN1s6lD`JwCnSh!ZOwT*YOQ;2U&0e+(9uLZyo^n2 z4kQsS@c>z)L_>_RoP>#j_q$eg)Fljr9iF{>ys5H6z!OR*aCAku02*%Q|8fDWq=iQ{ zuk3UUm+=+W8ou zSdJR~nX3AkCK&_lyK7&j@6o!nZs5(|9r3;*5cF@acb_6kQ^r_==18vG>6pgC$%iA! zu;z%2ktRYQBJ0=A#q4)EB@n}K{kVzR;n zra2~qT)D{4H*LppF=_p6a+U`6cG(GD04h4Qb#SGj3a+G2p?(^!NMj1FaQ&b^E zu!>Z&kOa@rJ~ESc%ne&Eiq9bNJXO;^l==FLtHbc_-V{Zu@b1q21u4gITLYsLg^R8O zB5q8p>-g$PlaakJO-(cbiN|*TQcRQzh%~?LK_E@0<4MOl-ql0ZOCKn($*TwsYI~{O zcvrfcx%Y|6M)o_)-YG8FYPhHgkXwHoMi6=K^?$c0w463pVKp1r%7OXxV`jHiQ1&@b z%%5{9mPXO;l!a&9By`qJ=+NTt$MEsbVZZ)q==J`b9CITjXn-Kk1~lN&burj~vIUUM z7APPsK-gW;7seDO^3OMJnxZQqcKkN9mtRXXaEHMzmx*WbeVCGO6|(>N$N6IgNB-sd znbu0)>-BmCj0hlQsLc#k=}0zx&gqnW*+d5h?!LR2d)ByIf+Xp#34V z@3`QX747EXg~%NXn^H3wFz$()gdQq)*FQCm9Dn|#3A!cq91c9PP68@8))=Sn1~1a) za??I(?CrPK#n9GRnk3O^){kL`5h$^Yvw9;WB$bMLub9}22=Fr zSW8d(nX#t0N(M8Ph&Nq~o9GGB@~1=PGnco=XVnEBID=EX{S7G>k7FXkyfzrP-n00^WJ!{wP<5O22X zvmWNl_R|A#HMn5b=zthzObO}jH9uvU5xm`lTdm=(%s9jfU56kAfA_eHD8&<9a}@rO zjNQTD|LUtYOco~cPYR>m*37s*dv8)trcKm}^2?EtAwS=wu)WP(Od{Ui>EAV=(6<~9 zOED+p%~Q#C_QIHFnLoj1Z8%zNy|YVDB=dop=@6Oy!F?2{elrt+;NafjEn(^QInDq`2=#qofoVofSa5}I9DG)!n z)2yt&6r2m*v2P2cLW_7}Do!iib3mw3^3?Yoa4-cn*8O*IR{A(G)@8f-+xS0sH5eR5XUYCqU|{$=!Pty>sYUp*Q>c&Gb` zmsspyI-P5*5@=IZ(C=8gZhD@w=kdD3FP8z{5cCWeYJ~14P!9gV|rtr;GI3snm4n(~fRr;8`FUw4H)^$y`t2tL@xad8-F>4xNuyWcekhzgCV$^(sEdP++|oJvN--RQ^m>EV9lwMp zuA*i~UHwq>Z8;VGc6D99F33B>W%@;gP25n&m{i2dz5n8y=M4dAiGRT-)u%VR@$>S{ z@tvF&+ep#}BwHKqY_=Jwm`V{>J*=V<`!EChW!GUOky&UY*f|P~P#w{|4S!Y)B)>&AeaK8HYnwBmyZAK8%%#^u2k^oVPzhmZE>S7|;Zj|G;f=?2O> z%Gny0s=*}C<1~n(Kx4#X>lH&zM>jq?TF%4Wh~iQkqC*pNM>KI?4ujQj2&Qg33c>Bw z2=LS9zEQJ%^3N=QxZt9npV`wLmwAa~=##Ka=d(oDYJ?_pS&zCuC?IyaA2l$OkqiDa zpq47N6&nvSpudugWfF4GD9D(dj56Si&9I%vwKnHu(V_1|UCYbQC~1)reu)5!mgRQ= zGn!;0Pt=!=y}j94MjnB-14ZW!t*(`5d355e`hE2k#j8PtjdZQBB&X#5_Y7=vIy2SX(Dk|T_VzTYmK^#vclQEoQdHA; z7*a(X2x89Xz6S7 zJJJZDv0D?e%_Yc)r<1b;iukKvSK?)bzw=)|H^f5ds@X}1q!sW_&@$DMXb5*9G{iU# zQ%c=!bk(xy>c5Io>FaC{+UA`NHH(IIE8z1|<|q6Ebp0$w-q3XSTzRoy3-n@#`ts?C z-t`3U!z~GK`{9)Hn=RbYl&YG^#764I+qfxyZ3eblvVii!D$u$PGgDjgcM5Z3m&0s= z@7GXd%ZstKzFr;lL5NAeC%vATkHLpTmfmmy1`Xh zL66<7T#w}Amx~$Nl=;G%2w-TO3O+{ate$|p*xV&=oZ|(B@Qa(*Mnq_*{2$aAJ6s^>+ynJ(_s-p>nShF%TaSgZR}vHxo8odn+!RieQP9mB|4O z?kX;rKhzmi**B$*-tjipmn@&S9>uie>1{9P>q|)T&YXU2k*%KJmq`&(8S!&5Cwk&1 znJ@@)-V!nfWYOvQg1~ZIci!pp!;+cM9N?3^Hwwkj-Wyl1_f&7%dLkz zPNMlq4<~(Mzqf7k^IGlkvBV9efMnwF%F_}z6@1L}Co|iInr_~|q4;U3J5jlR)YXIl zEVE%KdB;>1jN{hHEOOZE!)Wq35ap?i_{0;`igzXU;GNAG!iokM~-I(Co zTPeCvRtzS1FH*QAaL)+%sfUfx697SM8c(&w?3RjRKN8~ZD8>3??4u*7ngtB}b6m zzRd{pI6yg=4eWa30J9!2XJ~HJZ2($IPS5=^-@^#s4>SP<&?277KRWwHPA(HEN?f1m zX>#3>+0&5K*K#|X*^lCX(4`l9AqEK%991Yr7?o|+V2!Bib~vijgVL+qGspbA(I|Gh z{i^SR$9!l!(3TzpiX9!Ee5SHG(0}BP2^)p!XyXo$znjJh@0lf84tVijfF4fEQt2vb zD#ZHLnB|}^47=-A4#_!!A*g^|t&14LjA=MB&VOAB=vuAXDu1wMJ>ygy{dN1^P61aW zYB*XBpzwxl0&LC#iq=C^Dx#jB;e3pc3 z_8W}ofR-XX>f{!Eyx7N(sSWqGVDsUG zPN-@BJY~CwwowFgx(ZQvrjlDETb%5$8oyaNc94hRTZ_GDG~;EM1aOZB;u}aifJp$| zJqLc-(c8bcq;Fq_v_-s=kXgeqwUuND@D%cGJzu^1sv*fz zi_=!qQ3lBS_nUg`qKk@!q8ze)Bea!8z%x(zc^wSMO#s^0tx4!0?J{zN3im8Bjaml!0 z$fDVh2+AVzSjdGFnq_h*Lk%hq8+K-cpS{=!M!A}@la}THC|3~;WLic}GMotG5*~zJ z{z8SS(>hmU#1}|*fXYEFS7n1g>@Us^X(zb$&hW5aQf^_sT6=M9)_OLmd)k}LlJ&xt zO|r4}v%ByobV06}x#QLR5sa^hbrS{#&i_&Xk$uv^SnFK=0) z1BjcMa3ThF(hV>}a>Hbla3jr)=8YvXmH~MzL2YC-3Fnnsh$HpI3L!kFbJ^sbNwE5I zIeNZR50h(XLq9GEX-M8JoBQ)H_P_UmT15HebDedtZfTwKL3N%=(b;hL>Jp*J8bI9l zwZ%-VcQ7NVH*z$^IyDRe;7>?zbPR_r9wo=SoY9pQk`C}mF#1!MZ=DNoo|0DcH_8`c z71kP1Hc`i%m$~CeRWtn3o9du*uJm9dGiNl0p>)dKn`#|q%t6uAoWX+(-u6wch>)Gg z+a@K=?$}*75uX5zw^%CxH)>=-1WgGjwB=DjKG-^}QN%Vl=Pr0>;PeG7hgpWG0)E~+ zsi2Qw-FgJ>^Y4oXFQ?ilALYRH0=U%0p?nz?V}N8POnf3AJu_aq?oG2mzR6(qQrB>e z{o>_-mUYtPvl(`z_VP>`HJ}^3d2GYha}k@LI?|pywnRf1{1j!Hua*<1%6K zCyC+XyGJj%u&ND*>xlbXH#v-;&`{WpGm_UD1yPbdrD?crVZE#HsS zg<*%C17vxt$>KQfEv&^vJp$viwQyEyKwg5;2Dm|^28R-5Z1jUVtQDO9)CHfOX|k*W z+tYe+Wgo_O`HH~Obb-*9Mj^N6r$Sy$lynrP!LtmJg! zA3WkA^1Qxv`IbD?x{YvO*y8+U0qa3`(tJy<iKv6C*}Lg;F0$o*&kRZY>3D|ut35sSMO^l)K_9!m`+edGQx zLD*_7oPJ+t!c5-}i*~N;ObfX&c3;OGKO+ZitTZMhlH0dtM$`iK?2e#eYk|g3%)@bo z@I5sUY|-duk{TX1+1_Ncu31C9WVVr9U`}`ej`}kjMQTU+@Vo^MfVPJUH0t4JSV-?+ zANv;+rgh(Wk;BqVdUwI%g1 z{W46L;utb}$nL8AFvQ|K>nPPxN98j05boL&^+m;3;vJAre2MY5jrva{A1>w1@LjTp<3b5gPv;iu_cpcFU4I*?dGyLMYCvgJNIfLt z^TSwZyC7_4e@q0W$;TjdA*7Zz>7YTEO+XXqCM9v`-BlB{VXIN~)bd+XLBH0qIMCsy zd{?&jY*?G!uN&b+L`!|^PjlgbtxeLe_fp#{#UZde&shVdLbD#fH@57KNi>|a((q>b z+EbSA=wrr$z2a1F>|{W8Uo5jVv4FuLc!*>+lvOrIbL|OnMf8=S4}0a z<^45Lz5MGTy&~u4_tG3I-!BtT6K3@5YV#$GP4Z|8RtkJiw1QBI|)0 zkr0obeSGui#9AA{Hdww#A{mEU3VI+&?-H3Vd^VMr>+O9E%_b^{Mw$>k?t9B|V@`TA zSIG0@*5WH&eMlb>HlL@)q4}q6r!mdr2t+axXij1!l{Ic}8+I?OmV(F5N9MV@iP)6) zA>?+e{3tTHN04Y=y=uzkZK;I+&;d^vTlrE{Z!zu0g~W@7+^H=NcTojb9KSu*d+A@+ zbOjEa$MV zonHnMGT_HT5}4L3J&m?-nKoUPh=n@CfjABpJ>OE-)>r$|FbvLch>L2PV!iJZSWf8!EHCX+O z=YoQ(U~N-u3iye{b!*SCP=id*4yXr^r3su18BSFM!htCw1Qj)H4 zrS`XIhGB%;Vfi#pXCORJRr|%Yp!9Ee3R5LKR+Sd<-h<`iV7MPv3)VQ1nfQe$%<07Zns>YR)WVBO0axG`x5Fh?V$NrstB>IQoE=P?JY?nBkC5%Lv+$^eIc zJ#)Mp4$tR2kupE2(sj*~akLD1Mv($7%VA4`!KE@67S=pp$rl!b;>mgEDFS+OwV*l$63ctGWyprD>K~REmFxO-lYRRE9Ffbte`r`W) z#G%7$&RzI>DoB?>8nFcPo$2416j^uxj=EHu4`LkOP;3WDE1dR3#3(zzLkF}_P4rfq zBB6@HCk~U}QLtentjnnO3ZJ!qtk^u&r!nk+~%Lg6P&8`9zUH+Z` zVWf!dl=(k_9#^So3$P~m4S9pmo7n8*eC93;VCpC)I8%r28lam6(b>+Yv_XU0RILD| zhF!o(@bl6&IP6CFemi&XPos@D4M{HlTEIuH>98af>;^DPsAF zuVBhWxUiFvoXn2dZV5Jf^)qK3@zsnc?bOwr!Z z^&Gq%xlZ#4l+E{oV(u3|3mi^)>nw35``iijDVs-N0LW)1;cAQJ=zgU6ei1 zM;zu_TNVG$Db&%p!H?7tDCwF4ZKMWF@wYgu&jix7=Lrx}L)nfVi*KMdgiY-oYE4%9 z0Pm_9x-Z3}D(y9z-ZH|7`WsG<&u2JF96FUrwcNEmB;)VsUdfatn91A{OFRf9Ex-pn?A)VMO3A8qyz1qcT`Yq|wua4snez+_{6pgiI4B@adM-I{ zf1FfT7HlU^PI+|0KlF~-5#KDk4$w$-xj_*g9DrRpjGK#C_gt6P=ZMYcdYT> zRp6~5@5I6wCWEehIA{{7!2}6?D(Z9d9KN+IB#h_e6{Tq&+;bbT=@ zn}&MYs`k%paqj70uyC~#?KOLez8r z{{1Kfo4R^Sj?n;4nNGh}}N>u=fZ#`ww6{*Nw1wMs|@iwi2*_1*lHp8D1bB{wyt|N{)K%^FYbbah9ah1 zREU8u_DIAIbsKID0hMqzM!?|wWJN&h{N-O-+GLdYa2*6RsY6t5 zK;Pm<_-EV<^1dZty;r}~<7oP6hfi$mK5THZz%@(uQUw!xJRm6!C0i=t;yuOTPF5nB zY_DmB$Kq8j?$nM(DnDb#&2jlRGe>R*p>_~sy#HllHB_s^M$NU6wv2-q<3a|>LVmtc za~b0@+*oE-(_%LP6MZN8kfR`|BsH-3)bHbq<2nm0(3QM5)mSs|U$1lMoe*tUmtx@> zjch^h8~i2tGX7=5L;Kqs(E4lbr8qm+$R0I1!yua7&0b}Vj?U3|(x4uB8eRvfYKV)) zA&w#+=*yvfTJw*Q<#XAdGuH?B$du3L@BASx**c92i~efj_iA0WG%ZKt>uf-A_V@lE7<|<* z8mY>6Pc@Vc|K?)(?j5Bpq@uw9kQ(K~&dbRRjN0%w4J9FY!&?FUwe`u6tIq;<_${l7 z-}xUlK{(b*MdYUu&Hi_$t?Iqe{VHk0m<$0Gu$)5Ysn#Ov+?aCZNRQU+`@E~Gj5ZHi z37C;a-nPjTegDW=iW!npX6cwgKRHSyMI8&U%V$Fpeu85j>w}YNx=?z*J5Ss3gO@}dKK0%P zNr&}S1R#8Fs_N|5;_eTQ&l5TL>vO+N~>T_R^!P!v#Mbx(PLCdlrh5`5r=V95FVw( zZ2p}L9OYfOx6yoow5MMy-EaGz2ucWlf{bAIjcU93i(hR_>1;DzS{Esln@M@No2Shc zwM;&bq5R$SVb(LI_$>#DzqgLml`E|yjE-{&7Qm$J(ESC}GM*ZgKFp-rPSN~v>Ybq- z0`WDVY@mG;sn1GA_q|;5vYEjkn{x~VDhlULv3)>MM84NymJoLQ-lE6vf)Doi{ zILmcp42jRWnJ30^5M$3s(F7)Lf4(zG=Bs3YpS^td$@e-x+3?LRm}j)aC)i6R5_ zVAh2CrgxopqM05Yyx{~;IkcPa>gu{eZxrpL3=JNEQ`F#*IKNo*sqM1M@5x$4d4KY+ zj@|x0?S1z@o8S9?=ujPKOKYpfC^cS`S}&p0j8R%EMru|NYQzp&Mb)OFR@DeKLdBj@ zirNH8#ca(OiPowRK3?Cy;Qa@D@88bjKIc5Ha~{`qJ+JGW`+i=8pBD#t(;9OU#1$C0 zxB&+g+@otx;>GpjuDxY)_+c(^!NmRSmbH#2rhk`sU5I(j#P!i>JLS}iI^0!QL2XM4 zr-bYaXKpg9V9Pe|G}hPNr39~+avQGMP)`q(&=$EH^z62o;@;qJVm9>`5lEZszX&JY z9DAo~(#B=9Hljk3-}$OM+fdmwj&CLoN#PN_MWP@o)@R)86@T3eb3fjWC^jffcGRtQ;BQDp zp=~@(+&tsSQMOYeIMY12BBp^$bAj6RwEezPVFaFKCFmVdf4OW3%5Ox8 zgGN%z+VxRHqiRhO9;itFyp~2+c6ZqBkdvS`J}=S?(l*66CW|4e2HWelAmuCQL4mi;amGsBt^>CDmV@dVql9L_YRA3D;x}-=aEen zryHfe4_TJp5%ZjS_u(u3vrUF9?N`5xq!LbpA*oGm#;SR%LY50STUTtGr_?7J1LwPB zsl_jr`H*R4^k^wQ`QfJFdM0X4WfGh@IW0THK^-(TlYbFI5PkQ(M=6je62_^I$E>2swp&%0q&!OzA9 zS9aG{DJSZEueL??q$dx;wbm=G_ZycH&Y_nwGPdF^TK7)_J+b&G240<-T0vuB_~L$|#Kba(itN`hFa<8d*A=MIMN zptes!=*A$+`~|^CEe|jxSTDVjJ7{xfol7qcn&3wxU09~hxtgwgkt=H4c|2h(f8eFH zPO$ljS$^W}QJ}Bv<_r&p1}n;ptpl zZAz9YDizewbM<%mM6av;?p4E%wE&hFVVNdal9SLi)+Tm|y*|D__w1*q+Mitba(F{q z|JwuFVA-vNox1gS*$likZIhl9d0W}m%AN=hU>kclGs-*p`#=!sl zrM!7qp}T&<>ZCb)u$u0^(qoQ1t=sp6hL0R+_z1|YElv;c93isl9`(jgqx}R+->iTZzRJP|EsDMR3>C1c+Q! z#Sz>+7I3OAiX3q6%$sVHoJywDW8zc9k6F?)Ug+%fc*JBqU_xu~60p%lbD@EG zC>xt8m{`*}2J9>b_VxY4$BAL7Yw(|M+iM7f0HbwRqxR*cO&k$wK1;5n#_OK+ZonbU zs>KOgRMijPLjHN^Xc`555RJfH{8JzO{$pSZ{0YS(rf8lTzh0^;gY^Iiyv zbbhRsGaXd0nruO%l!>Sw`%|wSb8aXdhd2w(stlBnW0=G9ptF@3>uHf;^Atla`iMD7 zQw7o&KhYR|gIo}3deq6>Z5p}LY)!#tePApOFp2ycA-3f599a4Te&2ElKWeY#Rs-+8 zR^sS&&)>4y>9e&w$eKeqY=|cpIZW@Yu|IS!?GdB9^i~fISZvk$QJM7R$|~H`oO;ge zkW{`cv)|HeUtn?DaM$mUmSJA!4%Z~IDU3P7Xvv={vq?dK!J&-;h~hvA=FEvTH7A^7 zOvOq{X|afrZdkwv7DDd*2%A-uN^Xn4eCMLUpza)_3Ob>vEaK_pB*^)-9h$eE`-;;O zop6{Q58dsBjYa%E?CV-0cqaFSpTQ6oEnF%;q@zZ)we5HHwJiVxTHUmsWjsSCDjm0F zb0_JTuJY{1+JV*7S{kQ`(mCnyk0)IyPNs7#x;&*yXpfqgqv*D4-gVzH)9R9Cu3f!2 z7~387!1fhfPhPNL#X#!mVWX^8-0?d|eX88ferC6qR^3a4dr6h;p@F~se8`9t5x6su zNJe_i&mhik(*?H4xYMaQ(eU1OO_m!C=&oorJ=&kF+7&f!Lf78R%$ONo_ZpY=*UNd@ z7QsutD<@ACM|#hzFJ86xLt0?Kyp7RnhJWZv9|(M3>N4McT}#$ehy~B} zNC$7Bv08TT=4ZBiPY~5{0A0X&nuP=_@RPG1M_9=UFSH;lcG<_AqkPg|yvHy|J(Sk; zC2ZFqjS^m}1yw;8t{)7Ihe8mrI)0Ugnr2+z?TX87QIzaF%rSEPuyV4E z>7lUS)Hu9=67x}?M=S?raAp`?$KpP#E<&IEtSSH+fX8zeIfM zNsTMf$_{q6gXQHGdSL(2Rn}e+SW$E>=9fOM$1G^MuUe^@fb^7b2OKb5eD%CTE1sSA zo6MJQ?(Ttx>V2Pde3YM!uuCbCJ7W&SoQry;OW$`B)Z zGpgX!E{=zuIkPg#f0=6jWg_g$r+%EdMIiKiaHviDsp@77_KrDIQ=@L6%obelTHwz8 z7{q)&<6DLR)6yO6qk|@0QyP<8ZhQf3|c~!QPc)wn-$?TExPu4b3co8AqiP0{BXT{=qM0QjVN(68> zN%eG3FPu~2Yu`q#Tv=ziSlWP@YQ7Dk9=z4_OANuL_xLFdzqki!R>Cib2y1~jV&0ii zl#kKguN4%evWb#jlfQDAX~+4-LJ80E>dhcz;y3QRnf(sA@vGj}J5xMoI$0f?KSN1i z^PA2>hUx;7s*>F;b?v9~Eu&XrzkU{k?|S$`FtL?&QS&)wMb<7s2pg?f5k8l<+b9P9 zA;uvI z9LjlCIhH0qx$s+@{3ZR?S80Kndf~Eilzcxg_JK~i?m^oKnl<4!`7xAYdly$DUVz&) zGCkD9^>LOC>B4Y2jxiT#7^@GCIe@o}GEzEa5&SXezCuRsaEB%hNBzl7zp?~3=v*u} zdHJR3d{}eSG*!(!1CQ|q`xf_Eq=q$1<%@DRNjf|~gUJu|XOW3!sL#H4%{E(-Dhe|f zU}?>&Bpldv@d4Y-ack6)KPgKYRP-?8smaHL%l)x}86v3QU5wHzPuyu&2~XYMPfe$U z|1jprLfUIQapmD;Ng`e5=Sz16++wOTrYvrJGj8U&b*e=wX_3Tdv`;&SP1(J*ak?*7 z{Oasp{ictb4!G>p2mt1`U7lSRJ4lk@&*1*N%TZ*}rKeRW=4_xo%OT&&P{LxH)S!ku zgmnt|fO~YeQfH(xnr&HF1eeR*u%4Yrk-3-(GCo?B7&l z^R(tk7ed0!tA}~XlY`0V^5_5z-b%J@F2`r`0ka-nG%o>WxU+CIJmZ<7TtBheS?Zpz zYwZXsui0o$m%CKPQS2F+_{J?MxZEu8_9PC}dr{lyzW`+XHd9E-e7*_roe(Z23>i7G zlx&OxiMELMoc=psQ1#JtW?5dL%FRSEYXaL-SS4biESYP%I2mAkpYnUertRN?hAh%# zGKDU(&}$b*?veccs3Gr`;l3N?10}n5oQs@2^0-#kAXjvrF=`$)!GD&|IaYlrNvPc! zIN#B(eSuA>RH+ct=5K;6Dg~ZX4l`{k>&+-1S~YpIt#A+N`UVU#Hpqjf=MEl@ZU>Cl zU{Z^sN^X~%NSQGuhNT=K#R^yabh;&HA~*MT9z=>Gd~m5k1A@8ocVFH)o^5V-XM6br zU(oa@7rN*exqKa1DhU)0Bu=v9y4A#DnAd zckfi)46U)eEVD|h-x(HgALG^qj&ATS9Nv(Z;i6g&$quP+zJ@ z>DE!x?$hNq`8oDkMld1UwA3ZfLh=pn5p~SBf43S2I%8Zw-Z@4tlRwlGM0d*(_Ott; zY5r6%pJuqDjsQq6c!RTMJT9dcwEG>Tm8Js`Kp^_$v=qe#-d2DE+#+FL8p2BA8+ky@>67M3g!-6)w0>JM2s#np-zyqNdg*srr*)ZR;}RIF6 zshjQJ&^IW75+?tB0$FA8B}Wl|@ooo+XQpI14?tJOe>{VDO=z|3J}Te;u@ms6^io8J ziZ;7S-Oi^bhH-6W@6Xgezmx-sLz{P2C{k(1l5k8BbnyPhZXH~QGu`_q{vy)pt&XV< z;OvO>RR>Y{H(zIc(Uv4v0*g}Odd;mvpPFgYrY?NW<%V_ywt+Z*L?N0&h(dIS=%;

rmm{D3R<`pS-<6+Y6dsP?(d{zJdv^HuF&z@WSKl*>>5f&9hj3(lmQq`42t z&L(u8OS=q@ho@^_rl$Wh^@vY2{_=Vemzlm9M_&4VQ~E74T2WC{FzvCr%o78@DauKxPDqNEnm^FItn&*zJ?dKckL7`}ZP zZFkL*-(amPp4F9Mgno4$(AC`hER@%2Qds=BSZ4@37g-jXS&KQ$pQGE5<5L!sS^q59 z;JBw}nqR^qeeB0r8iZ{v$#|mCZ}57yN&P|CsGuWuVAWPZUIjfsw0l|J>AM85{Pksb z&q9{g-Nz#DY?{jJ2KM#2o$93RmMUo+YdnH1icZ1NDEwu7a2 z%7`tcOPy|j1fsVo!U{D0Q`@1u@dJ91QiIPxNg2 zJd=;3p2^cx>NthjAUK`2l`BoY_(|mhuba|l{!mt591oEn*@C9ZcY2%s#$mSS)+><- zybBjZfUuqAXQyW#%p`cbQyg_g{2#S>E{lRDL&Q-zOfX3pIzdoaVc)>Gz;+*DzBK$h zUwP#$;oX2H?oO|^IQzCxphW!Efu~x7Mp`6te8F_N){kDwpacgiRK%@CYN}ien*sHf zh}tEQu_eYbpHH41YxU0OC^2ILJ^s>0z^3~%rpy*vkUy#4mkkE;( zRxR8?J#-x_bI~&mQJ&6#Ka1TRE15>@sqMq2R^FmET_-<=*=09K0%s3ho*B0ikZZ?# zhs(5YU%E!@U9C`w`!{*?SaU5TR!<&IYSp~XdN%i4s-+8t4DmfRsyq(VG)<{*4Ey7w zJ#Ryt+j6J;ct6Isag(;=sZGCC@F4{i{^6Ctxdgt5M_#m4NY|@)8(DOLE>5{-gIz+v zmQe9r8GRdQtI`_f0ehyWe(-Uu$@K5k3+vkaYInJ-%0=NkKMAV`Be;Oi*#x1z2GTym zEKA9)sb(LIdgFxx48HcRb=5;HGa||!Lt%6lY8&ieWxO+L&B^}S<`=d|OfbeX&$_rn z@ILSHYK^^Wi)gW?wW?^Kgz8Hp;@G#@1jdgG)pGfGwAbJ!_et0RM4xP_aj>b21t$Ay z7=iD9K3P7W6_Ik=4)Vlt%EmMqn5qq#&moMQv0L5@9N-ef&~)qgGok*2)YA^7?%A^x z-OUYr{UkZfLHmu`nH)!nJKl=GhU1m3M$bTO{s3|QGMHF3;+j*kXxCWI^q@P(YJH+C zjulrqEB&x%Z@OX8BXEgVn|=fE3bfN3S5{H|Mt$jnbAp)aUe!amSHJo4t+T)F>O_m7 zA3b+Frn;4@W;K6?YrHM%X|Ci?~=ZnEVgo>Pvg-p(rpc1 zwTRh?P48yx9De5AFi_LeW_3d01!Df;@$d~d)^^k=pLKzQ;I*ZKyD{hzY4ki)s^Hn{ z*2ltZO|H(0m@~ej{T5F*Z74J&Ii>jx&K>IiJtcmv_*yJQdJeTaUMJHja4B3-WRr8L zEseiI9wrj|h^5KC)%tdBGGDhli?5)ObNny8!iP;}%X)~Q*@L{;HLBrbwWZ=un!zik zH2SivzR>p&cj@wK#nBY-t+tP&lI6gDPBQ6sa~`%EW_>x(!z>8P(d9&1yRuPZEUS`j z`bKR@0@ykKyn{vK>xa4`!svarCMTa!g7gSxw9*_r`4O13(B^`{j8)&FV^X$bX7+9X z!sg{eeg6DHH+L}4PgbP?k20P1U)-K7Y1yR6nmLZjjXz^9vq z9t~Xe=NZ_(yFa}}*=z(aHm%|L2kw!Mvif%2m=_` zHC#+Fv+0bg0q7OFmUsEL6YgWo&?&;=z+Re^2Z7yf&3M>J=@ z7c!oe%Bjfssi8YT?yJ{^^lc08D2B5|nhDUS=kN$jrgl{~GxNe4I^lh)U+X+U^9_g% z@aijUP7_i5(0(cTo6|U;IZZaTy2!$^`rO&1YPP@E=8{@@`~F>f?_`x4X~@X_zP3+l zWTmz!gE{ofGe>Qm{@Wa2?%Q91yzk;KH8@%dlYHcA(*f?B}%7smLWX2 z*Z>T>`mP2%$Sg^Q-J>D@jbCwPp7!AXDgykEPtX@f*R$FVX8+X)_#cP-|8D=w4s_Tb Zhr6Z%cOR2(p8nTgPs`|WrN;Bu{|EST^@0EZ literal 0 HcmV?d00001 diff --git a/onedrive-backup/Middleware/ExtractHassUrlMiddleware.cs b/onedrive-backup/Middleware/ExtractHassUrlMiddleware.cs new file mode 100644 index 0000000..49891ca --- /dev/null +++ b/onedrive-backup/Middleware/ExtractHassUrlMiddleware.cs @@ -0,0 +1,36 @@ +using hassio_onedrive_backup; +using Microsoft.Extensions.Primitives; +using onedrive_backup.Hass; + +namespace onedrive_backup.Middleware +{ + public class ExtractHassUrlMiddleware + { + private readonly RequestDelegate _next; + private HassContext _ingressSettings; + private IHostEnvironment _env; + + public ExtractHassUrlMiddleware(RequestDelegate next, HassContext ingressSettings, IHostEnvironment env) + { + _next = next; + _ingressSettings = ingressSettings; + _env = env; + } + + public async Task InvokeAsync(HttpContext context) + { + const string HeaderKeyName = "X-Ingress-Path"; + if (context.Request.Headers.TryGetValue(HeaderKeyName, out StringValues headerValue)) + { + _ingressSettings.HeaderIngressPath = headerValue.ToString(); + ConsoleLogger.LogInfo($"X-Ingress-Path: {_ingressSettings.HeaderIngressPath}"); + } + else if (_env.IsDevelopment()) + { + _ingressSettings.HeaderIngressPath = "/"; + } + + await _next(context); + } + } +} diff --git a/onedrive-backup/Middleware/IncomingHassFirewallMiddleware.cs b/onedrive-backup/Middleware/IncomingHassFirewallMiddleware.cs new file mode 100644 index 0000000..2493fea --- /dev/null +++ b/onedrive-backup/Middleware/IncomingHassFirewallMiddleware.cs @@ -0,0 +1,32 @@ +using hassio_onedrive_backup; +using Microsoft.Extensions.Primitives; + +namespace onedrive_backup.Middleware +{ + public class IncomingHassFirewallMiddleware + { + private readonly RequestDelegate _next; + private readonly IHostEnvironment _env; + private const string _allowedIP = "172.30.32.2"; + + public IncomingHassFirewallMiddleware(RequestDelegate next, IHostEnvironment env) + { + _next = next; + _env = env; + } + + public async Task InvokeAsync(HttpContext context) + { + var ip = context.Connection.RemoteIpAddress.MapToIPv4(); + ConsoleLogger.LogVerbose($"Source IP: {ip}"); + if (_env.IsDevelopment() ==false && ip.ToString().Equals(_allowedIP, StringComparison.OrdinalIgnoreCase) == false) + { + ConsoleLogger.LogError($"Blocking request from unauthorized source IP : {ip.ToString()}"); + } + + // await context.Response.WriteAsync($"Request origin ({ip}) blocked."); + await _next(context); + } + + } +} diff --git a/onedrive-backup/Models/BackupModel.cs b/onedrive-backup/Models/BackupModel.cs new file mode 100644 index 0000000..9b932d6 --- /dev/null +++ b/onedrive-backup/Models/BackupModel.cs @@ -0,0 +1,37 @@ + +using static hassio_onedrive_backup.Contracts.HassAddonsResponse; + +namespace onedrive_backup.Models +{ + public class BackupModel + { + public string Name { get; set; } + + public string Slug { get; set; } + + public DateTime Date { get; set; } + + public BackupLocation Location { get; set; } + + public string OneDriveFileName { get; set; } + + public string Type { get; set; } + + public bool IsProtected { get; set; } + + public float Size { get; set; } + + public IEnumerable Addons { get; set; } + + public IEnumerable Folders { get; set; } + + public string DisplayName => string.IsNullOrEmpty(Name) ? Path.GetFileNameWithoutExtension(OneDriveFileName) : Name; + + public enum BackupLocation + { + Local, + OneDrive, + Both + } + } +} diff --git a/onedrive-backup/Orchestrator.cs b/onedrive-backup/Orchestrator.cs new file mode 100644 index 0000000..983071e --- /dev/null +++ b/onedrive-backup/Orchestrator.cs @@ -0,0 +1,101 @@ +using hassio_onedrive_backup.Contracts; +using hassio_onedrive_backup.Graph; +using hassio_onedrive_backup.Hass; +using hassio_onedrive_backup.Sync; +using onedrive_backup.Graph; +using System.Collections; + +namespace hassio_onedrive_backup +{ + public class Orchestrator + { + private readonly IHassioClient _hassIoClient; + private readonly HassOnedriveFreeSpaceEntityState? _hassOnedriveFreeSpaceEntityState; + private readonly IGraphHelper _graphHelper; + private readonly IServiceProvider _serviceProvider; + private readonly AddonOptions _addonOptions; + private readonly BitArray _allowedBackupHours; + + private bool _enabled = false; + + public Orchestrator(IServiceProvider serviceProvider) + { + _serviceProvider = serviceProvider; + _addonOptions = serviceProvider.GetService(); + _graphHelper = serviceProvider.GetService(); + _hassIoClient = serviceProvider.GetService(); + _hassOnedriveFreeSpaceEntityState = serviceProvider.GetService(); + + _allowedBackupHours = TimeRangeHelper.GetAllowedHours(_addonOptions.BackupAllowedHours); + BackupManager = new BackupManager(_serviceProvider, _allowedBackupHours, new TransferSpeedHelper(null)); + } + + public BackupManager BackupManager { get; set; } + + public async Task Start() + { + _enabled = true; + string timeZoneId = await _hassIoClient.GetTimeZoneAsync(); + DateTimeHelper.Initialize(timeZoneId); + TimeSpan intervalDelay = TimeSpan.FromMinutes(5); + + ConsoleLogger.LogInfo($"Backup interval configured to every {_addonOptions.BackupIntervalHours} hours"); + if (string.IsNullOrWhiteSpace(_addonOptions.BackupAllowedHours) == false) + { + ConsoleLogger.LogInfo($"Backups / Syncs will only run during these hours: {_allowedBackupHours.ToAllowedHoursText()}"); + } + + //if (_addonOptions.UploadSpeedCap) + //{ + // ConsoleLogger.LogInfo($"Upload speed configured to cap at {_addonOptions.UploadSpeedCapKBPerSecond} KB/s"); + //} + + // Initialize File Sync Manager + if (_addonOptions.FileSyncEnabled) + { + ConsoleLogger.LogInfo($"File Sync Enabled"); + var transferSpeedHelper = new TransferSpeedHelper(null); + var syncManager = new SyncManager(_serviceProvider, _allowedBackupHours, transferSpeedHelper); + var tokenSource = new CancellationTokenSource(); + await _graphHelper.GetAndCacheUserTokenAsync(); + var fileSyncTask = Task.Run(() => syncManager.SyncLoop(tokenSource.Token), tokenSource.Token); + } + else + { + ConsoleLogger.LogInfo($"File Sync Disabled"); + } + + while (_enabled) + { + try + { + // Refresh Graph Token + await _graphHelper.GetAndCacheUserTokenAsync(); + + // Update OneDrive Freespace Sensor + var oneDriveSpace = await _graphHelper.GetFreeSpaceInGB(); + if (oneDriveSpace != null) + { + await _hassOnedriveFreeSpaceEntityState.UpdateOneDriveFreespaceSensorInHass(oneDriveSpace); + } + + ConsoleLogger.LogVerbose("Checking backups"); + + BackupManager.PerformBackupsAsync(); + } + catch (Exception ex) + { + ConsoleLogger.LogError($"Unexpected error. {ex}"); + } + + ConsoleLogger.LogVerbose("Backup Interval Completed."); + await Task.Delay(intervalDelay); + } + } + + public void Stop() + { + _enabled = false; + } + } +} diff --git a/onedrive-backup/Pages/About.razor b/onedrive-backup/Pages/About.razor new file mode 100644 index 0000000..21695e9 --- /dev/null +++ b/onedrive-backup/Pages/About.razor @@ -0,0 +1,25 @@ +@page "/about" + +

About...

+ +

Official Repository

+

You can find the code and documentation for the addon on the officail GitHub Repo

+ +

Open Issues

+

If you encounter any bugs or issues with the add-on, please open an issue if needed here

+ +

Suggest Features

+

If you have any suggestions for new features or improvements to the add-on, please submit them on the offical GitHub repository discussions.

+ +

License

+

I originally wanted a native cloud backup solution for Home Assistant with OneDrive which is why I created this. It has become a passion project and I am actively maintaining and supporting it. Completely free to use but if you + would like to show support for the project you could Buy Me A Coffee :) +

+
+ Bitcoin logo + Bitcoin address + Bitcoin Address: bc1q8htme48sx54gvctk59yxg3ts940ncf6p8377r6 +
+@code { + +} diff --git a/onedrive-backup/Pages/Error.cshtml b/onedrive-backup/Pages/Error.cshtml new file mode 100644 index 0000000..4104e3e --- /dev/null +++ b/onedrive-backup/Pages/Error.cshtml @@ -0,0 +1,24 @@ +@page +@model hassio_onedrive_backup.Pages.ErrorModel + + + + + + + + Error + + + + + +
+
+

Error.

+

An error occurred while processing your request.

+
+
+ + + diff --git a/onedrive-backup/Pages/Error.cshtml.cs b/onedrive-backup/Pages/Error.cshtml.cs new file mode 100644 index 0000000..ad7f6d0 --- /dev/null +++ b/onedrive-backup/Pages/Error.cshtml.cs @@ -0,0 +1,27 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using System.Diagnostics; + +namespace hassio_onedrive_backup.Pages +{ + [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] + [IgnoreAntiforgeryToken] + public class ErrorModel : PageModel + { + public string? RequestId { get; set; } + + public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); + + private readonly ILogger _logger; + + public ErrorModel(ILogger logger) + { + _logger = logger; + } + + public void OnGet() + { + RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; + } + } +} \ No newline at end of file diff --git a/onedrive-backup/Pages/Main.razor b/onedrive-backup/Pages/Main.razor new file mode 100644 index 0000000..901debd --- /dev/null +++ b/onedrive-backup/Pages/Main.razor @@ -0,0 +1,73 @@ +@page "/" +@using hassio_onedrive_backup.Contracts; +@using hassio_onedrive_backup.Graph; +@using hassio_onedrive_backup; +@using onedrive_backup.Extensions; +@using onedrive_backup.Hass; +@using onedrive_backup.Models; +@using static hassio_onedrive_backup.Contracts.HassBackupsResponse; +@inject IGraphHelper GraphHelper +@inject Orchestrator Orchestrator +@inject HassContext HassContext; + +
+
+
+ +
+
+
+
+
+ @foreach (var backup in Backups) + { +
+ +
+ } +
+
+ +@code +{ + private List Backups => GetBackupModels(); + + protected override void OnInitialized() + { + base.OnInitialized(); + GraphHelper.AuthStatusChangedEventHandler += OnStateChanged; + Orchestrator.BackupManager.OneDriveBackupsUpdated += OnStateChanged; + Orchestrator.BackupManager.LocalBackupsUpdated += OnStateChanged; + } + + private List GetBackupModels() + { + var ret = new List(); + var _localBackups = Orchestrator.BackupManager.LocalBackups?.Select(backup => backup.ToBackupModel(HassContext)) ?? Enumerable.Empty(); + var _onedriveBackups = Orchestrator.BackupManager.OnlineBackups?.Select(backup => backup.ToBackupModel(HassContext)) ?? Enumerable.Empty(); + + ret.AddRange(_onedriveBackups); + foreach (var localBackup in _localBackups) + { + if (_onedriveBackups.Any(oneDriveBackup => oneDriveBackup.Slug == localBackup.Slug)) + { + var syncedBackup = ret.Find(backup => backup.Slug == localBackup.Slug); + syncedBackup.Location = BackupModel.BackupLocation.Both; + continue; + } + + ret.Add(localBackup); + } + + ret = ret.OrderByDescending(backup => backup.Date).ToList(); + return ret; + } + private async void OnStateChanged() + { + await InvokeAsync(() => + { + StateHasChanged(); + }); + } + +} \ No newline at end of file diff --git a/onedrive-backup/Pages/_Host.cshtml b/onedrive-backup/Pages/_Host.cshtml new file mode 100644 index 0000000..56a7444 --- /dev/null +++ b/onedrive-backup/Pages/_Host.cshtml @@ -0,0 +1,42 @@ +@page "/" +@using Microsoft.AspNetCore.Components.Web +@using onedrive_backup; +@using onedrive_backup.Hass; +@namespace hassio_onedrive_backup.Pages +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers +@inject HassContext IngressSettings + + + + + + + + + + + + + + + +
+ +
+ + An error has occurred. This application may no longer respond until reloaded. + + + An unhandled exception has occurred. See browser dev tools for details. + + Reload + 🗙 +
+ + + + + + + + diff --git a/onedrive-backup/Program.cs b/onedrive-backup/Program.cs new file mode 100644 index 0000000..fcf424e --- /dev/null +++ b/onedrive-backup/Program.cs @@ -0,0 +1,107 @@ +using hassio_onedrive_backup.Contracts; +using hassio_onedrive_backup.Graph; +using hassio_onedrive_backup.Hass; +using hassio_onedrive_backup.Storage; +using hassio_onedrive_backup.Sync; +using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.Logging.Console; +using onedrive_backup; +using onedrive_backup.Extensions; +using onedrive_backup.Graph; +using onedrive_backup.Hass; +using System.Collections; + +namespace hassio_onedrive_backup +{ + public class Program + { + private const string clientId = "b8a647cf-eccf-4c7f-a0a6-2cbec5d0b94d"; + private const string addonDirectory = "/data"; + private static readonly List scopes = new() { "Files.ReadWrite.AppFolder" }; + + private static Orchestrator _orchestrator; + private static string _baseDirectory; + + static void Main(string[] args) + { + _baseDirectory = AppDomain.CurrentDomain.BaseDirectory; + +#if DEBUG + IHassioClient hassIoClient = new HassioClientMock(); + var addonOptions = AddonOptionsReader.ReadOptions(); +#else + + Directory.SetCurrentDirectory(addonDirectory); + var addonOptions = AddonOptionsReader.ReadOptions(); + string supervisorToken = Environment.GetEnvironmentVariable("SUPERVISOR_TOKEN")!; + IHassioClient hassIoClient = new HassioClient(supervisorToken, addonOptions.HassAPITimeoutMinutes); +#endif + ConsoleLogger.SetLogLevel(addonOptions.LogLevel); + var builder = WebApplication.CreateBuilder(args); + LocalStorage.InitializeTempStorage(); + IGraphHelper graphHelper = new GraphHelper(scopes, clientId); + var addons = hassIoClient.GetAddonsAsync().Result; + ConsoleLogger.LogVerbose($"Detected Addons: {string.Join(",", addons.Select(addon => addon.Slug))}"); + HassContext hassContext = null; + var addonInfo = hassIoClient.GetAddonInfo("self").Result; + hassContext = new HassContext { IngressUrl = addonInfo.DataProperty.IngressUrl, Addons = addons }; + ConsoleLogger.LogVerbose($"Ingress URL: {addonInfo.DataProperty.IngressUrl}"); + builder.Services.AddSingleton(hassContext); + + // Add services to the container. + builder.Services.AddRazorPages(); + builder.Services.AddServerSideBlazor(); + builder.Services.AddSingleton(addonOptions); + builder.Services.AddSingleton(hassIoClient); + builder.Services.AddSingleton(graphHelper); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.WebHost.UseUrls("http://*:8099"); + + if (!builder.Environment.IsDevelopment()) + { + builder.Logging.ClearProviders(); + // builder.Logging.AddConsole(); + } + + var app = builder.Build(); + _orchestrator = app.Services.GetService(); + _orchestrator.Start(); + + app.UseIncomingHassFirewallMiddleware(); + if (!app.Environment.IsDevelopment()) + { + app.UseWhen(ctx => !ctx.Request.Path + .StartsWithSegments("/_framework/blazor.server.js"), + subApp => subApp.UseStaticFiles(new StaticFileOptions + { + FileProvider = new PhysicalFileProvider($"{_baseDirectory}/wwwroot") + })); + } + else + { + ConsoleLogger.LogInfo("Dev Mode"); + } + + + app.UsePathBase($"{hassContext?.HeaderIngressPath ?? "/"}"); + + // Configure the HTTP request pipeline. + if (!app.Environment.IsDevelopment()) + { + app.UseExceptionHandler("/Error"); + } + + app.UseStaticFiles(); + app.UseRouting(); + + // app.UseHassUrlExtractor(); + + app.MapBlazorHub(); + app.MapFallbackToPage("/_Host"); + app.Run(); + } + } +} \ No newline at end of file diff --git a/onedrive-backup/Properties/launchSettings.json b/onedrive-backup/Properties/launchSettings.json new file mode 100644 index 0000000..55be34c --- /dev/null +++ b/onedrive-backup/Properties/launchSettings.json @@ -0,0 +1,35 @@ +{ + "profiles": { + "onedrive_backup": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "http://localhost:8099;", + "hotReloadEnabled": false + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "Docker": { + "commandName": "Docker", + "launchBrowser": true, + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}", + "publishAllPorts": true, + "useSSL": true + } + }, + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:9765", + "sslPort": 44347 + } + } +} \ No newline at end of file diff --git a/onedrive-backup/README.md b/onedrive-backup/README.md new file mode 100644 index 0000000..cf2f027 --- /dev/null +++ b/onedrive-backup/README.md @@ -0,0 +1,23 @@ +# Home Assistant Addon: OneDrive Backup + +Simple OneDrive integration for seamless Home Assistant Backups to the cloud. + + +### Current Features +- Set backup creation schedule +- Syncs backups to OneDrive **(Personal Account only. OneDrive for business not currently supported)** +- Dedicated Web UI +- Additional File Sync to OneDrive +- Recovery mode for loading backups back from OneDrive to Home Assistant +- Supports backup retention for removing older backups +- Supports multiple Home Assistant instances +- Supports Home Assistant Persistent Notifications +- Supports Home Assistant Events +- Includes Sensor Entities for Dashboards / Automations + +Full documentation available on project page at [GitHub](https://github.com/lavinir/hassio-onedrive-backup) + +## Support +This is a free addon but if you enjoy this addon and would like to support the development it would be much appreciated :) + +[](https://www.buymeacoffee.com/snirlavis) diff --git a/onedrive-backup/Shared/BackupCard.razor b/onedrive-backup/Shared/BackupCard.razor new file mode 100644 index 0000000..e29536f --- /dev/null +++ b/onedrive-backup/Shared/BackupCard.razor @@ -0,0 +1,187 @@ +@using hassio_onedrive_backup; +@using hassio_onedrive_backup.Contracts; +@using onedrive_backup.Extensions; +@using onedrive_backup.Hass; +@using onedrive_backup.Models; +@inject Orchestrator Orchestrator; +@inject AddonOptions AddonOptions; +@inject IJSRuntime JS + +
+
+
+
+ @**************Add Badges*****************@ + @if (Backup.Type != null) + { + @Backup.Type + } + @if (Backup.Location == BackupModel.BackupLocation.OneDrive || Backup.Location == BackupModel.BackupLocation.Both) + { + OneDrive + } + @if (Backup.Location == BackupModel.BackupLocation.Local || Backup.Location == BackupModel.BackupLocation.Both) + { + Local + } + @if (Backup.IsProtected) + { + Protected + } + @***************@ +
+
+ @timeAgoText +
+
+
+
+
@Backup.DisplayName
+ @(Backup.Date) + @if (Backup.Size > 0) + { +
@Backup.Size MB
+ } +
+ @if (Backup.Folders != null && Backup.Folders.Any()) + { +
+

Folders:@string.Join(", ", Backup.Folders)

+
+ } +
+
+ +
+ + +@code { + private bool uploading = false; + private bool downloading = false; + private int uploadPercent = 0; + private int downloadPercent = 0; + private int transferSpeed = 0; + + [Parameter] + public BackupModel Backup { get; set; } + + public string BackupTypeColor => Backup.Type.Equals("full", StringComparison.OrdinalIgnoreCase) ? "bg-info" : "bg-secondary"; + + private bool detailsDisabled => (Backup.Addons?.Count() > 0 || Backup.Folders?.Count() > 0) ? false : true; + + private string timeAgoText => CalculateTimeAgoText(); + + private string TransferSpeedText => ViewHelpers.GetSpeedDisplayText(transferSpeed / 1000); + + private string CalculateTimeAgoText() + { + TimeSpan timeAgo = DateTimeHelper.Instance.Now - Backup.Date; + if (timeAgo.TotalDays > 1) + { + return $"{timeAgo.Days} days ago"; + } + else if (timeAgo.TotalHours > 1) + { + return $"{timeAgo.Hours} hours ago"; + } + else if (timeAgo.TotalMinutes > 1) + { + return $"{timeAgo.Minutes} minutes ago"; + } + else + { + return "Now"; + } + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + await JS.InvokeVoidAsync("addTooltips"); + } + } + + private async void UploadBackup() + { + uploading = true; + uploadPercent = 0; + var backup = Backup.ToBackup(); + await Orchestrator.BackupManager.UploadLocalBackupToOneDrive(backup, updateHassEntityState: false, progressCallback: (prog, speed) => + { + uploadPercent = prog ?? 0; + transferSpeed = speed ?? 0; + TriggerStateChanged(); + + }); + uploading = false; + transferSpeed = 0; + await Orchestrator.BackupManager.GetOnlineBackupsAsync(AddonOptions.InstanceName); + } + + + private async void DownloadBackup() + { + downloading = true; + downloadPercent = 0; + var onedriveBackup = Backup.ToOneDriveBackup(); + await Orchestrator.BackupManager.DownloadBackupFromOneDrive(onedriveBackup, updateHassEntityState: false, progressCallback: (prog) => + { + downloadPercent = prog ?? 0; + TriggerStateChanged(); + }); + + downloading = false; + await Orchestrator.BackupManager.GetLocalBackups(); + } + + private async void TriggerStateChanged() + { + await InvokeAsync(() => + { + StateHasChanged(); + }); + + } +} diff --git a/onedrive-backup/Shared/BackupCard.razor.css b/onedrive-backup/Shared/BackupCard.razor.css new file mode 100644 index 0000000..2235b3e --- /dev/null +++ b/onedrive-backup/Shared/BackupCard.razor.css @@ -0,0 +1,11 @@ +.transition-visible { + overflow: hidden; + transition: transform 0.3s ease-out; + height: auto; + transform: scaleY(1); + transform-origin: top; +} + + .transition-visible.transition-collapsed { + transform: scaleY(0); + } diff --git a/onedrive-backup/Shared/MainLayout.razor b/onedrive-backup/Shared/MainLayout.razor new file mode 100644 index 0000000..fbbfe99 --- /dev/null +++ b/onedrive-backup/Shared/MainLayout.razor @@ -0,0 +1,62 @@ +@using hassio_onedrive_backup.Graph; +@inherits LayoutComponentBase +@inject NavigationManager NavigationManager +@inject IGraphHelper GraphHelper +@inject IJSRuntime JS + +
+ @if (GraphHelper.IsAuthenticated == false) + { + + } + + +
+ +
+ @Body +
+ +
+ Donate Bitcoin + Buy Me A Coffee +

© Nir Lavi

+
+ +@code{ + protected override void OnInitialized() + { + base.OnInitialized(); + GraphHelper.AuthStatusChangedEventHandler += OnStateChanged; + } + + private void CopyCodeToClipboard() + { + JS.InvokeVoidAsync("copyToClipboard", GraphHelper.AuthCode); + } + + private async void OnStateChanged() + { + await InvokeAsync(() => + { + StateHasChanged(); + }); + } +} diff --git a/onedrive-backup/Shared/MainLayout.razor.css b/onedrive-backup/Shared/MainLayout.razor.css new file mode 100644 index 0000000..2db8926 --- /dev/null +++ b/onedrive-backup/Shared/MainLayout.razor.css @@ -0,0 +1,49 @@ + +/* Set the height of the footer and give it a dark background */ +footer { + position: fixed; + bottom: 0; + width: 100%; + height: 2rem; + background-color: #333; + color: #fff; + display: flex; + justify-content: flex-end; + align-items: center; + padding-right: 20px; +} + + /* Style the copyright text in the footer */ + footer p { + font-size: 14px; + margin: 0; + } + +/* Set the min-height of the content area to fill the viewport */ +.container { + min-height: calc(100vh - 140px); +} + + +::deep nav.navbar { + box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.05); +} + + ::deep nav.navbar .nav-link { + color: #333; + font-size: 16px; + font-weight: 500; + text-transform: uppercase; + padding: 16px; + border-bottom: 2px solid transparent; + transition: border-color 0.3s ease; + } + + ::deep nav.navbar .nav-link:hover { + color: #0066CC; + } + + ::deep nav.navbar .nav-link.active { + color: #0066CC; + border-bottom-color: #0066CC; + } \ No newline at end of file diff --git a/onedrive-backup/Shared/OneDriveSummaryCard.razor b/onedrive-backup/Shared/OneDriveSummaryCard.razor new file mode 100644 index 0000000..81ff417 --- /dev/null +++ b/onedrive-backup/Shared/OneDriveSummaryCard.razor @@ -0,0 +1,258 @@ +@using hassio_onedrive_backup.Contracts; +@using hassio_onedrive_backup.Graph; +@using hassio_onedrive_backup.Hass; +@using hassio_onedrive_backup; +@inject IJSRuntime JS +@inject AddonOptions AddonOptions +@inject HassOnedriveEntityState HassOnedriveEntityState +@inject HassOnedriveFreeSpaceEntityState HassOnedriveFreeSpaceEntityState +@inject HassOnedriveFileSyncEntityState HassOnedriveFileSyncEntityState +@inject Orchestrator Orchestrator +@inject IGraphHelper GraphHelper + +
+
+
+
+ Summary @SummaryBadgeText + @if (HassOnedriveEntityState.State == HassOnedriveEntityState.BackupState.Syncing) + { +
+ Loading... +
+ } +
+ @if (GraphHelper.IsAuthenticated == true) + { +
+@* + @UploadSpeed +*@ + + +
+ } +
+
+
+
+
+ OneDrive Storage +
+
+ @if (HassOnedriveFreeSpaceEntityState.FreeSpaceGB == null) + { +
+
Initializing
+
+ } + else + { +
+
Used: @(OneDriveUsedSpacePercentage)%
+
+ } +
+
+
+
+ Local Backups +
+
+
+
@HassOnedriveEntityState.BackupsInHomeAssistant / @AddonOptions.MaxLocalBackups
+ @*
*@ +
+
+
+
+
+ OneDrive Backups +
+
+
+
@HassOnedriveEntityState.BackupsInOnedrive / @AddonOptions.MaxOnedriveBackups
+ @*
*@ +
+
+
+
+
+ Last Backup Date +
+
+ @if (LastBackupDate == null) + { + None + } + else + { + @LastBackupDate + } +
+
+
+
+ Backup Upload Progress +
+
+ @if (HassOnedriveEntityState.UploadPercentage == null) + { + N/A + } + else + { +
+
@BackupUploadSpeed
+
+ } +
+
+ @if (AddonOptions.FileSyncEnabled) + { +
+
+ File Sync Upload Progress +
+
+ @if (HassOnedriveFileSyncEntityState.State != HassOnedriveFileSyncEntityState.FileState.Syncing) + { + N/A + } + else + { +
+
@(FileUploadSpeed)
+
+ } +
+
+ } +
+
+ +@code { + private bool onDemandBackup = false; + + private bool refreshingData = false; + + private int OneDriveUsedSpacePercentage => (int)((OneDriveUsedSpace / (HassOnedriveFreeSpaceEntityState.TotalSpaceGB ?? 1)) * 100); + + private int LocalBackupsPercentage => (int)((HassOnedriveEntityState.BackupsInHomeAssistant / (double)AddonOptions.MaxLocalBackups) * 100); + + private int OneDriveBackupsPercentage => (int)((HassOnedriveEntityState.BackupsInOnedrive / (double)AddonOptions.MaxOnedriveBackups) * 100); + + private string BackupUploadSpeed => ViewHelpers.GetSpeedDisplayText(HassOnedriveEntityState.UploadSpeed); + + private string FileUploadSpeed => ViewHelpers.GetSpeedDisplayText(HassOnedriveFileSyncEntityState.UploadSpeed); + + private double OneDriveUsedSpace => ((HassOnedriveFreeSpaceEntityState.TotalSpaceGB ?? 0) - (HassOnedriveFreeSpaceEntityState.FreeSpaceGB ?? 0)); + + private DateTime? LastBackupDate => HassOnedriveEntityState.LastLocalBackupDate > HassOnedriveEntityState.LastOnedriveBackupDate ? HassOnedriveEntityState.LastLocalBackupDate : HassOnedriveEntityState.LastOnedriveBackupDate; + + private string FreeSpaceColor => OneDriveUsedSpacePercentage > 90 ? "bg-danger" : "bg-primary"; + + private string SummaryBadgeColor + { + get + { + switch (HassOnedriveEntityState.State) + { + case HassOnedriveEntityState.BackupState.Stale: + return "bg-warning"; + case HassOnedriveEntityState.BackupState.Backed_Up: + return "bg-success"; + case HassOnedriveEntityState.BackupState.Backed_Up_Local: + return "bg-secondary"; + case HassOnedriveEntityState.BackupState.Backed_Up_Onedrive: + return "bg-primary"; + case HassOnedriveEntityState.BackupState.Syncing: + return "bg-dark"; + default: + return "bg-dark"; + } + } + } + + private string SummaryBadgeText + { + get + { + switch (HassOnedriveEntityState.State) + { + case HassOnedriveEntityState.BackupState.Stale: + return "Stale"; + case HassOnedriveEntityState.BackupState.Backed_Up: + return "Backed Up"; + case HassOnedriveEntityState.BackupState.Backed_Up_Local: + return "Backed Up Local"; + case HassOnedriveEntityState.BackupState.Backed_Up_Onedrive: + return "Backed Up OneDrive"; + case HassOnedriveEntityState.BackupState.Syncing: + return "Syncing"; + default: + return ""; + } + } + } + + protected override void OnInitialized() + { + base.OnInitialized(); + HassOnedriveFreeSpaceEntityState.PropertyChanged += TriggerStateChanged; + HassOnedriveEntityState.PropertyChanged += TriggerStateChanged; + HassOnedriveFileSyncEntityState.PropertyChanged += TriggerStateChanged; + Orchestrator.BackupManager.OneDriveBackupsUpdated += TriggerStateChanged; + Orchestrator.BackupManager.LocalBackupsUpdated += TriggerStateChanged; + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + // await JS.InvokeVoidAsync("addTooltips"); + } + } + + + private async void TriggerBackup() + { + onDemandBackup = true; + bool ret = await Orchestrator.BackupManager.CreateLocalBackup(); + onDemandBackup = false; + TriggerStateChanged(); + } + + private async void RefreshData() + { + refreshingData = true; + TriggerStateChanged(); + await Orchestrator.BackupManager.RefreshBackupData(); + refreshingData = false; + TriggerStateChanged(); + } + + private async void TriggerStateChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + { + await InvokeAsync(() => + { + StateHasChanged(); + }); + } + + private async void TriggerStateChanged() + { + await InvokeAsync(() => + { + StateHasChanged(); + }); + } +} diff --git a/onedrive-backup/Shared/OneDriveSummaryCard.razor.css b/onedrive-backup/Shared/OneDriveSummaryCard.razor.css new file mode 100644 index 0000000..5cc5b81 --- /dev/null +++ b/onedrive-backup/Shared/OneDriveSummaryCard.razor.css @@ -0,0 +1,14 @@ +@keyframes rotate { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } +} + +span.oi-reload.refreshing { + display: inline-block; + animation: rotate 2s linear infinite; +} diff --git a/onedrive-backup/Shared/ViewHelpers.cs b/onedrive-backup/Shared/ViewHelpers.cs new file mode 100644 index 0000000..e5e92e0 --- /dev/null +++ b/onedrive-backup/Shared/ViewHelpers.cs @@ -0,0 +1,26 @@ +namespace onedrive_backup.Shared +{ + public static class ViewHelpers + { + public static string GetSpeedDisplayText(int? speedKbSec) + { + if (speedKbSec == null) + { + return "0 KB/s"; + } + + if (speedKbSec < 1024) + { + return $"{speedKbSec} KB/s"; + } + else if (speedKbSec < 1024 * 1024) + { + return $"{speedKbSec / 1024} MB/s"; + } + else + { + return $"{speedKbSec / (1024 * 1024)} GB/s"; + } + } + } +} diff --git a/onedrive-backup/Storage/AddonOptionsReader.cs b/onedrive-backup/Storage/AddonOptionsReader.cs new file mode 100644 index 0000000..c3c96d5 --- /dev/null +++ b/onedrive-backup/Storage/AddonOptionsReader.cs @@ -0,0 +1,25 @@ +using hassio_onedrive_backup.Contracts; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace hassio_onedrive_backup.Storage +{ + internal class AddonOptionsReader + { + public static AddonOptions ReadOptions(string path = "options.json") + { + if (File.Exists(path) == false) + { + throw new NotSupportedException($"{path} not found"); + } + + string optionContents = File.ReadAllText(path); + var options = JsonConvert.DeserializeObject(optionContents); + return options!; + } + } +} diff --git a/onedrive-backup/Storage/LocalStorage.cs b/onedrive-backup/Storage/LocalStorage.cs new file mode 100644 index 0000000..0aebfba --- /dev/null +++ b/onedrive-backup/Storage/LocalStorage.cs @@ -0,0 +1,32 @@ +namespace hassio_onedrive_backup.Storage +{ + internal class LocalStorage + { + public const string TempFolder = "../tmp"; + private const string oldTempFolder = "./tmp"; + + public static void InitializeTempStorage() + { + // Legacy cleanup + if (Directory.Exists(oldTempFolder)) + { + ConsoleLogger.LogVerbose($"Deleting deprecated temp storage folder"); + Directory.Delete(oldTempFolder, true); + } + + // Clear temporary storage + if (Directory.Exists(TempFolder)) + { + if (Directory.EnumerateFiles($"{TempFolder}").Any()) + { + ConsoleLogger.LogVerbose("Cleaning up temporary artifcats"); + } + + Directory.Delete(TempFolder, true); + } + + // (Re)Create temporary directory + Directory.CreateDirectory(TempFolder); + } + } +} diff --git a/onedrive-backup/Sync/SyncManager.cs b/onedrive-backup/Sync/SyncManager.cs new file mode 100644 index 0000000..c10a317 --- /dev/null +++ b/onedrive-backup/Sync/SyncManager.cs @@ -0,0 +1,207 @@ +using hassio_onedrive_backup.Contracts; +using hassio_onedrive_backup.Graph; +using hassio_onedrive_backup.Hass; +using Microsoft.Extensions.FileSystemGlobbing; +using Microsoft.Graph; +using onedrive_backup.Graph; +using System.Collections; +using System.Diagnostics; +using System.Security.Cryptography; + +namespace hassio_onedrive_backup.Sync +{ + internal class SyncManager + { + private const string HashAlgo = "SHA256"; + private const string OneDriveFileSyncRootDir = "FileSync"; + private AddonOptions _addonOptions; + private IGraphHelper _graphHelper; + private IHassioClient _hassIoClient; + private BitArray _allowedHours; + private HassOnedriveFileSyncEntityState _hassEntityState; + private IWebHostEnvironment? _environment; + private TransferSpeedHelper _transferSpeedHelper; + private Matcher _fileMatcher; + + public SyncManager(IServiceProvider serviceProvider, BitArray allowedHours, TransferSpeedHelper? transferSpeedHelper) + { + _addonOptions = serviceProvider.GetService(); + _graphHelper = serviceProvider.GetService(); + _hassIoClient = serviceProvider.GetService(); + _hassEntityState = serviceProvider.GetService(); + _environment = serviceProvider.GetService(); + _transferSpeedHelper = transferSpeedHelper; + _allowedHours = allowedHours; + _fileMatcher = new(); + _fileMatcher.AddIncludePatterns(_addonOptions.SyncPaths); + } + + public async void SyncLoop(CancellationToken ct) + { + while (true && ct.IsCancellationRequested == false) + { + try + { + var now = DateTimeHelper.Instance!.Now; + + // Check if we are in the allowed hours + if (_allowedHours[now.Hour] == false) + { + continue; + } + + _hassEntityState.State = HassOnedriveFileSyncEntityState.FileState.Syncing; + await _hassEntityState.UpdateBackupEntityInHass(); + + var matchingFiles = _fileMatcher.GetResultsInFullPath("/"); + foreach (var matchingFile in matchingFiles) + { + try + { + await SyncFile(matchingFile); + } + catch (Exception ex) + { + ConsoleLogger.LogError($"Error syncing file {matchingFile}: {ex}"); + } + } + + if (_addonOptions.FileSyncRemoveDeleted) + { + await DeleteRemovedFilesFromOneDrive($"{OneDriveFileSyncRootDir}", "/"); + } + } + catch (Exception ex) + { + ConsoleLogger.LogError($"Error Syncing: {ex}"); + } + finally + { + _hassEntityState.State = HassOnedriveFileSyncEntityState.FileState.Synced; + await _hassEntityState.UpdateBackupEntityInHass(); + await Task.Delay(TimeSpan.FromMinutes(5)); + } + } + } + + private async Task SyncFile(string path) + { + var fileInfo = new FileInfo(path); + if (fileInfo.Length == 0) + { + ConsoleLogger.LogWarning($"Skipping 0-byte file: {path}"); + return; + } + + var now = DateTimeHelper.Instance!.Now; + string fileHash = CalculateFileHash(path); + var localFileSyncData = new SyncFileData(path, fileHash, fileInfo.Length); + + string remotePath = $"/{OneDriveFileSyncRootDir}{path}".Replace("//", "/").Replace(@"\\", @"\"); + if (_environment!.IsDevelopment()) + { + remotePath = remotePath.Replace(@"c:\", "/", StringComparison.OrdinalIgnoreCase); + } + + DriveItem? remoteFile = await _graphHelper.GetItemInAppFolderAsync(remotePath); + bool requiresUpload = + remoteFile == null + || remoteFile.Size != fileInfo.Length + || remoteFile.File.Hashes.Sha256Hash.Equals(fileHash, StringComparison.OrdinalIgnoreCase) == false; + + if (requiresUpload == false) + { + return; + } + + ConsoleLogger.LogInfo($"File {path} out of sync. Starting Upload"); + var uploadSuccessful = await _graphHelper.UploadFileAsync( + path, + now, + _addonOptions.InstanceName, + _transferSpeedHelper, + remotePath, + async (prog, speed) => + { + _hassEntityState.UploadPercentage = prog; + _hassEntityState.UploadSpeed = speed / 1024; + await _hassEntityState.UpdateBackupEntityInHass(); + Debug.WriteLine($"Progress: {prog}"); + + }, + flatten: false + ); + } + + private string CalculateFileHash(string path) + { + using (var hasher = HashAlgorithm.Create(HashAlgo)) + { + using (var fileStream = System.IO.File.OpenRead(path)) + { + byte[] hash = hasher!.ComputeHash(fileStream); + return BitConverter.ToString(hash).Replace("-", ""); + } + } + } + + private async Task DeleteRemovedFilesFromOneDrive(string remotePath, string localPath) + { + var item = await _graphHelper.GetItemInAppFolderAsync(remotePath); + if (item == null) + { + return; + } + + ConsoleLogger.LogVerbose($"Evaulating {remotePath}"); + localPath = Path.Combine(localPath, item.Name); + if (localPath.StartsWith($"/{OneDriveFileSyncRootDir}")) + { + localPath = "/"; + } + + if (item.Folder != null) + { + if (System.IO.Directory.Exists(localPath) == false) + { + ConsoleLogger.LogInfo($"{localPath} does not exist locally. Deleting from OneDrive"); + await _graphHelper.DeleteItemFromAppFolderAsync(remotePath); + } + else + { + // Recursive call for files in Folder + var folderItems = await _graphHelper.GetItemsInAppFolderAsync(remotePath); + foreach (var folderItem in folderItems) + { + await DeleteRemovedFilesFromOneDrive(Path.Combine(remotePath, folderItem.Name), localPath); + } + + // If no content left in folder then remove it + folderItems = await _graphHelper.GetItemsInAppFolderAsync(remotePath); + if (folderItems.Count == 0) + { + await _graphHelper.DeleteItemFromAppFolderAsync(remotePath); + } + } + } + else if (item.File != null) + { + if (System.IO.File.Exists(localPath) == false) + { + ConsoleLogger.LogInfo($"{localPath} does not exist locally. Deleting from OneDrive"); + await _graphHelper.DeleteItemFromAppFolderAsync(remotePath); + } + else if (_fileMatcher.Match(localPath).HasMatches == false) + { + ConsoleLogger.LogInfo($"{localPath} not included in Sync Paths. Deleting from OneDrive"); + await _graphHelper.DeleteItemFromAppFolderAsync(remotePath); + } + else + { + ConsoleLogger.LogVerbose($"{remotePath} in sync with {localPath}"); + } + } + } + + } +} diff --git a/onedrive-backup/TimeRangeHelper.cs b/onedrive-backup/TimeRangeHelper.cs new file mode 100644 index 0000000..b3f08a3 --- /dev/null +++ b/onedrive-backup/TimeRangeHelper.cs @@ -0,0 +1,53 @@ +using System.Collections; +using System.Text; + +namespace hassio_onedrive_backup +{ + public static class TimeRangeHelper + { + public static BitArray GetAllowedHours(string? allowedHoursExpression) + { + var allowedHours = new BitArray(24); + if (string.IsNullOrWhiteSpace(allowedHoursExpression)) + { + allowedHours.SetAll(true); + return allowedHours; + } + + var sections = allowedHoursExpression.Split(',', StringSplitOptions.RemoveEmptyEntries); + foreach (string section in sections) + { + string fromStr; + string toStr; + + fromStr = section.StartsWith('-') ? "0" : section.Split('-').FirstOrDefault(s => string.IsNullOrWhiteSpace(s) == false, "0"); + toStr = section.EndsWith('-') ? "23" : section.Split('-').LastOrDefault(s => string.IsNullOrWhiteSpace(s) == false, "23"); + + int from = int.Parse(fromStr); + int to = int.Parse(toStr); + + for (int i = from; i <= to; i++) + { + allowedHours.Set(i, true); + } + } + + return allowedHours; + } + + public static string ToAllowedHoursText(this BitArray bitArray) + { + var sb = new StringBuilder(); + for (int i=0; i< bitArray.Length; i++) + { + if (bitArray[i]) + { + sb.Append($"{i},"); + } + } + + sb.Remove(sb.Length - 1, 1); + return sb.ToString(); + } + } +} diff --git a/onedrive-backup/_Imports.razor b/onedrive-backup/_Imports.razor new file mode 100644 index 0000000..e7b7a75 --- /dev/null +++ b/onedrive-backup/_Imports.razor @@ -0,0 +1,8 @@ +@using System.Net.Http +@using Microsoft.AspNetCore.Authorization +@using Microsoft.AspNetCore.Components.Authorization +@using Microsoft.AspNetCore.Components.Forms +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Web.Virtualization +@using Microsoft.JSInterop diff --git a/onedrive-backup/apparmor.txt b/onedrive-backup/apparmor.txt new file mode 100644 index 0000000..0cb0d2b --- /dev/null +++ b/onedrive-backup/apparmor.txt @@ -0,0 +1,27 @@ +#include + +profile hassio_onedrive_backup flags=(attach_disconnected,mediate_deleted) { + #include + + # Capabilities + file, + signal (send) set=(kill,term,int,hup,cont), + network, + deny network raw, + +# S6-Overlay + /init ix, + /bin/** ix, + /usr/bin/** ix, + /run/{s6,s6-rc*,service}/** ix, + /package/** ix, + /command/** ix, + /etc/services.d/** rwix, + /etc/cont-init.d/** rwix, + /etc/cont-finish.d/** rwix, + /run/{,**} rwk, + /dev/tty rw, + +# Addon Data + /data/** rw, +} \ No newline at end of file diff --git a/onedrive-backup/appsettings.Development.json b/onedrive-backup/appsettings.Development.json new file mode 100644 index 0000000..0de6a2b --- /dev/null +++ b/onedrive-backup/appsettings.Development.json @@ -0,0 +1,16 @@ +{ + "DetailedErrors": true, + "Logging": { + "LogLevel": { + "Default": "Error", + "Microsoft.AspNetCore": "Error" + }, + "Console": { + "LogLevel": { + "Default": "Error", + "Microsoft.AspNetCore": "Error" + } + } + }, + "Urls": "http://*:8099" +} diff --git a/onedrive-backup/appsettings.json b/onedrive-backup/appsettings.json new file mode 100644 index 0000000..61e06c7 --- /dev/null +++ b/onedrive-backup/appsettings.json @@ -0,0 +1,17 @@ +{ + "DetailedErrors": true, + "Logging": { + "LogLevel": { + "Default": "Error", + "Microsoft.AspNetCore": "Error" + }, + "Console": { + "LogLevel": { + "Default": "Error", + "Microsoft.AspNetCore": "Error" + } + } + }, + "AllowedHosts": "*", + "Urls": "http://*:8099" +} diff --git a/onedrive-backup/build_and_publish.ps1 b/onedrive-backup/build_and_publish.ps1 new file mode 100644 index 0000000..b3f9ffa --- /dev/null +++ b/onedrive-backup/build_and_publish.ps1 @@ -0,0 +1,50 @@ +param( + [Parameter(Mandatory)] + [string]$version, + + [Parameter()] + [switch]$signImages, + + [Parameter()] + [string]$casApiKey +) + +$env:CAS_API_KEY = $casApiKey +& cas-v1.0.3-windows-amd64.exe login + +################## linux-x64 +Write-Host "Building linux-x64" +docker build -t "ghcr.io/lavinir/amd64-hassonedrive:$($version)" --build-arg BUILD_ARCH=linux-x64 --build-arg SDK_IMAGE_ARCH_TAG=7.0-alpine --build-arg RUNTIME_IMAGE_ARCH_TAG=7.0.3-alpine3.17-amd64 . + +if ($signImages.IsPresent) { + Write-Host "Signing linux-x64 Image" + & cas-v1.0.3-windows-amd64.exe notarize --bom "docker://ghcr.io/lavinir/amd64-hassonedrive:$($version)" +} + +Write-Host "Publishing linux-x64 Image" +docker push "ghcr.io/lavinir/amd64-hassonedrive:$($version)" + +################## linux-arm +Write-Host "Building linux-arm" +docker build -t "ghcr.io/lavinir/armv7-hassonedrive:$($version)" --build-arg SDK_IMAGE_ARCH_TAG=7.0-alpine --build-arg RUNTIME_IMAGE_ARCH_TAG=7.0.3-alpine3.17-arm32v7 --build-arg BUILD_ARCH=linux-arm . +docker build -t "ghcr.io/lavinir/armhf-hassonedrive:$($version)" --build-arg SDK_IMAGE_ARCH_TAG=7.0-alpine --build-arg RUNTIME_IMAGE_ARCH_TAG=7.0.3-alpine3.17-arm32v7 --build-arg BUILD_ARCH=linux-arm . + +if ($signImages.IsPresent) { + Write-Host "Signing linux-arm Images" + & cas-v1.0.3-windows-amd64.exe notarize --bom "docker://ghcr.io/lavinir/armv7-hassonedrive:$($version)" + & cas-v1.0.3-windows-amd64.exe notarize --bom "docker://ghcr.io/lavinir/armhf-hassonedrive:$($version)" +} +Write-Host "Publishing linux-arm Images" +docker push "ghcr.io/lavinir/armhf-hassonedrive:$($version)" +docker push "ghcr.io/lavinir/armv7-hassonedrive:$($version)" + +################## linux-arm64 +Write-Host "Building linux-arm64" +docker build -t "ghcr.io/lavinir/aarch64-hassonedrive:$($version)" --build-arg SDK_IMAGE_ARCH_TAG=7.0-alpine --build-arg RUNTIME_IMAGE_ARCH_TAG=7.0.3-alpine3.17-arm64v8 --build-arg BUILD_ARCH=linux-arm64 . + +if ($signImages.IsPresent) { + Write-Host "Signing linux-arm64 Image" + & cas-v1.0.3-windows-amd64.exe notarize --bom "docker://ghcr.io/lavinir/aarch64-hassonedrive:$($version)" +} +Write-Host "Publishing linux-arm64 Image" +docker push "ghcr.io/lavinir/aarch64-hassonedrive:$($version)" \ No newline at end of file diff --git a/onedrive-backup/config.yaml b/onedrive-backup/config.yaml new file mode 100644 index 0000000..7027e73 --- /dev/null +++ b/onedrive-backup/config.yaml @@ -0,0 +1,67 @@ +name: "OneDrive Backup" +version: "2.1.2" +slug: hassio_onedrive_backup +description: >- + Automatic backups from Home Assistant to OneDrive +arch: + - amd64 + - armhf + - armv7 + - aarch64 +url: "https://github.com/smarthomekh/hassio-onedrive-backup" +map: + - config:rw + - ssl:rw + - addons:rw + - media:rw + - share:rw + - backup:rw +options: + local_backup_num_to_keep : 2 + onedrive_backup_num_to_keep : 2 + backup_interval_days : 3 + backup_name : "hass_backup" + monitor_all_local_backups: false + ignore_upgrade_backups: false + hass_api_timeout_minutes: 30 + notify_on_error : true + exclude_media_folder: false + exclude_ssl_folder: false + exclude_share_folder: false + exclude_local_addons_folder: false + sync_paths: [] + file_sync_remove_deleted: false + excluded_addons: [] + log_level: info + +schema: + local_backup_num_to_keep : "int(0,)" + onedrive_backup_num_to_keep : "int(1,100)" + backup_interval_days : "float(0.0417,)" + backup_name : "match([a-zA-Z_]*)" + monitor_all_local_backups: bool + ignore_upgrade_backups: bool + backup_passwd : "password?" + hass_api_timeout_minutes : "int(30,)" + notify_on_error : bool + exclude_media_folder: bool + exclude_ssl_folder: bool + exclude_share_folder: bool + exclude_local_addons_folder: bool + backup_allowed_hours: "str?" + backup_instance_name: "match([a-zA-Z_]*)?" + sync_paths: + - 'match(\/config[\/\w.*-]*|\/ssl[\/\w.*-]*|\/addons[\/\w.*-]*|\/media[\/\w.*-]*|\/share[\/\w.*-]*|)' + file_sync_remove_deleted: bool + excluded_addons: + - str + log_level: list(verbose|info|warning|error) + +ingress: true +hassio_role : "manager" +codenotary: "tekdara@me.com" +apparmor: true +hassio_api : true +homeassistant_api: true +image: ghcr.io/lavinir/{arch}-hassonedrive +panel_icon: mdi:microsoft-onedrive diff --git a/onedrive-backup/hassio-onedrive-backup.sln b/onedrive-backup/hassio-onedrive-backup.sln new file mode 100644 index 0000000..35b4997 --- /dev/null +++ b/onedrive-backup/hassio-onedrive-backup.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.3.32929.385 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "hassio-onedrive-backup", "hassio-onedrive-backup.csproj", "{93C9CA11-C946-496A-AF9C-A86667FE7BE4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "onedrive-backup", "onedrive-backup.csproj", "{EAF98A54-3368-429C-A94E-B562AC6879B7}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {93C9CA11-C946-496A-AF9C-A86667FE7BE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {93C9CA11-C946-496A-AF9C-A86667FE7BE4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {93C9CA11-C946-496A-AF9C-A86667FE7BE4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {93C9CA11-C946-496A-AF9C-A86667FE7BE4}.Release|Any CPU.Build.0 = Release|Any CPU + {EAF98A54-3368-429C-A94E-B562AC6879B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EAF98A54-3368-429C-A94E-B562AC6879B7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EAF98A54-3368-429C-A94E-B562AC6879B7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EAF98A54-3368-429C-A94E-B562AC6879B7}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {750FF813-82FB-41C8-B4E4-81DC2AF2EF67} + EndGlobalSection +EndGlobal diff --git a/onedrive-backup/icon.png b/onedrive-backup/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0d86bebd0ac9d94d9e653e67677c5532cf1a5280 GIT binary patch literal 4544 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 literal 0 HcmV?d00001 diff --git a/onedrive-backup/images/add-on-store.png b/onedrive-backup/images/add-on-store.png new file mode 100644 index 0000000000000000000000000000000000000000..1508ead363db9fbf96e8107215e59a876239be7a GIT binary patch literal 3765 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 literal 0 HcmV?d00001 diff --git a/onedrive-backup/images/blazorblocked.png b/onedrive-backup/images/blazorblocked.png new file mode 100644 index 0000000000000000000000000000000000000000..be9879d4f7b4014df5e9c081eb604bf7eea4744d GIT binary patch literal 8003 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 AE&u=k literal 0 HcmV?d00001 diff --git a/onedrive-backup/images/bmc.svg b/onedrive-backup/images/bmc.svg new file mode 100644 index 0000000..4754bd3 --- /dev/null +++ b/onedrive-backup/images/bmc.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/onedrive-backup/images/consent.png b/onedrive-backup/images/consent.png new file mode 100644 index 0000000000000000000000000000000000000000..ff51897f0e1e5f65fd871fccebd5ce01c51f10cb GIT binary patch literal 68820 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�Ie(H>H(3IEF|KjC9_$_HnLO68F{0zcL_Hn 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 a4eyO!KNh~{Iei3tX{hKbS1a1S`#%6Do?D~< literal 0 HcmV?d00001 diff --git a/onedrive-backup/images/filesync_sensor.png b/onedrive-backup/images/filesync_sensor.png new file mode 100644 index 0000000000000000000000000000000000000000..633e23f8a183fea624bfa37f9999faa315d87d57 GIT binary patch literal 5685 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 literal 0 HcmV?d00001 diff --git a/onedrive-backup/images/pagerule.png b/onedrive-backup/images/pagerule.png new file mode 100644 index 0000000000000000000000000000000000000000..1a9738c7c7e24a6e88717ca08c8395aaaf2b531f GIT binary patch literal 40314 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

CBk)}RXEt~m%*HSGs5v~h6er_52Y7IO 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 Cg_o@W literal 0 HcmV?d00001 diff --git a/onedrive-backup/images/sensor_dashboard.png b/onedrive-backup/images/sensor_dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..a96dd349b8d70b417f9dfbe907911a4f9357cce9 GIT binary patch literal 26552 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 HRrr4aF+jEI literal 0 HcmV?d00001 diff --git a/onedrive-backup/images/sensor_freespace.png b/onedrive-backup/images/sensor_freespace.png new file mode 100644 index 0000000000000000000000000000000000000000..318444a4bf67c2bdb8ec414693e8b98668cc13fb GIT binary patch literal 2224 zcmbuA`#;l<9>+g~5~F0CxqdB#<&y7_OPNdNI@j@a2_v^gxg;hEIY-!pAu^hVk&(*1 zX2@lYhOZ*IEcZ0Il-t}|$N3M=<8gj?Ki}`yPw&_3m-jov$-xSAQsyK803aJ{3l{+3 zn>?CTPVgTwl{?aY)cB%ZtjvMBK{?Km5C}1|Hv@oI*&>Jjf=607(%Lf`0K~fgTYT># zo&^HH351P>nQNTyYO!P3q=z(PTD)w4#;I(GQ$NA_dn4rnODF$ykdD9uh>ql(=ZF9! z@WSBvWi6bvJQyb;ctNlzWM--)LP%wr$B`p+m!=Z7$8HfT9IWh16;rYs! z)~MVMi8A+Akj<`1r)B0z7PpWRscW00x@P3PQCNEU40|C3!=`}uCegfFwe=&v&(HS(EG zZz#7yre;qxNYvNT^W1p0*jEK(l_|wHjvv2G%6Q<_qzVG+ODto45f*FSMk&->y)x-O zYiy*GpgAtm2?`o|Xrlug+S59y{AJq2P@GdP!AsAjRD^nAEeA_OMstS`3=E^KsEBW0 z{d46e&4=x1cEZfjd2cN;v!bKP1*T#EL*=NUv6ZzZvFZkQwD)g5XD1=x5 zcWtBmeh=TwOBElH_n0FP<$C(6|E%1dUiQ50mUTYSKq1|F(6Vty>^Cc!M*Bpt<(rsP zMf?zfYXNu3Id%*yUn0?hgq-)ST+<|f{ZRaaNH9$Q1c_3(_pE+8U*X)aB7^EidB$9Y zFEL@b_6K+kUCs^XK+NlVT==%T?ltxHmbEEZZ1AIp_HRw}lQK?``$}E%Vw`%_%)Rra z8=<#G#xVL-Erf=0&fIb_hQ<14;|*o^z*Qx7N@Tlzm{AO4-6rR|<{22Sq<41vT=duA zmcoGTl-Q;DILAeCy$3^@(S_KGFW#nCD_in~V&=zuc}4~BP)3-TLeV16ZmjfSf0Z($ z#OT;4|BO&qR*A)0Ln19mGz98%7X5Wf3oG!Xp2CW_q`G(o7uh~1zheG<^B+--{BLW~ zQd>>lt^^oHTeD(##4+^hN`-1nT|YNCOj^Ym7WhI%KHsa~pBf(%=u>*UMqjeBg8BM1 z2653)<3U8cxj;}~*%#ecWlYb2Uwy7K#+kxZoi?{u3|}zh>QHA=t<0+Y>WEL;LY4f^ z+}LAM;h@^FAT60LzFi4OB&oQnF@THQt-n|XCWzp%s9e8C?XKUMFvDBUggZXuLu;lb z@$4pSS9b@!kQ*Z=`&XdX!mjO7lg7r(^Z0XWcucHw9HJd3Is3K{6{z$pAMV)JnCKc& zqz3VHUdSdP2|GJ+Z`Osjn!#zY@hu{_8=v3RV_tGlA#Ezu0ZbOFAPnqDf5P`eFXwdz zG#dJguv(>;T7ddUj7OpkMfL?d89$NSbd{SmSR78hs5fhE2K|ZdlG{D7P_lr>5I4{bER0_p9JHX zmJ0Gc$+U?5iHjYEf(?8s^wpa%57pVsQYARW;3XDB56a}2+9mZ5*$%;HY4C|vD8(X4PboYs`6*NLU+l|d!0G6Qsz@51nZD7d+{%2T4v|Hy8*_V* z5f=_LpFE~J5IDH(onv~lE9WCWaIS@gbSzqG;Job($2{RygfS8_%5uL;CjDIb!H7*r zNAGL`N{oWSNoDPa$}LItcw>icg1I(nZm!y_MEs$r(ed^_iHbGL?rp*RmjQj@9aX)c z<{7=N-afsqWB3hnCjKzZn)7}@H|y|@5%M$3!*?<%y%wiSVbnv-imy|0<6CKLIQqSS4Z^{q&fG8MKd+4_L;wH) literal 0 HcmV?d00001 diff --git a/onedrive-backup/images/sensor_recovery_dashboard.png b/onedrive-backup/images/sensor_recovery_dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..c70595f36d74be71fae300e115942bab6da58cd3 GIT binary patch literal 16645 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 literal 0 HcmV?d00001 diff --git a/onedrive-backup/images/upload_backup.png b/onedrive-backup/images/upload_backup.png new file mode 100644 index 0000000000000000000000000000000000000000..2486844e067ef7d4963cad52d1ac18be14c40986 GIT binary patch literal 3176 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 ZtvXHmCYhbR7WzA2(bdLbUIN!b{sqsw4a5Kd literal 0 HcmV?d00001 diff --git a/onedrive-backup/images/webui.png b/onedrive-backup/images/webui.png new file mode 100644 index 0000000000000000000000000000000000000000..6a0d48b3f065e65a28f7652cf13ef0719aa2d9ed GIT binary patch literal 111903 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

y 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%0DSD}x&vJns; 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 literal 0 HcmV?d00001 diff --git a/onedrive-backup/onedrive-backup.csproj b/onedrive-backup/onedrive-backup.csproj new file mode 100644 index 0000000..d9ed8db --- /dev/null +++ b/onedrive-backup/onedrive-backup.csproj @@ -0,0 +1,36 @@ + + + + net7.0 + enable + onedrive_backup + enable + Linux + . + + + + + + + + + + + + + + + + + + + + + Always + + + Always + + + diff --git a/onedrive-backup/onedrive-backup.sln b/onedrive-backup/onedrive-backup.sln new file mode 100644 index 0000000..dd311fb --- /dev/null +++ b/onedrive-backup/onedrive-backup.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33213.308 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "onedrive-backup", "onedrive-backup.csproj", "{F57B9442-408E-4DB1-ACDA-E8040B7812BA}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F57B9442-408E-4DB1-ACDA-E8040B7812BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F57B9442-408E-4DB1-ACDA-E8040B7812BA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F57B9442-408E-4DB1-ACDA-E8040B7812BA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F57B9442-408E-4DB1-ACDA-E8040B7812BA}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {E330ED29-4C58-4586-97E4-29193B070AF3} + EndGlobalSection +EndGlobal diff --git a/onedrive-backup/options.json b/onedrive-backup/options.json new file mode 100644 index 0000000..7b8a269 --- /dev/null +++ b/onedrive-backup/options.json @@ -0,0 +1,25 @@ +{ + "local_backup_num_to_keep": 3, + "onedrive_backup_num_to_keep": 2, + "backup_interval_days": 1, + "backup_passwd": "alsdkfjslajfk", + "backup_name": "hass_backup", + "include_all_local_backups": false, + "upload_speed_cap": 100, + "notify_on_error": true, + "recovery_mode": false, + "hass_api_timeout_minutes": 30, + "exclude_media_folder": false, + "exclude_ssl_folder": false, + "exclude_share_folder": true, + "exclude_local_addons_folder": false, + "backup_allowed_hours": "0-23", + "sync_paths": [ + ], + "file_sync_remove_deleted": true, + "backup_instance_name": "LocalTest", + "log_level": "info", + "excluded_addons": [ + "addon2" + ] +} diff --git a/onedrive-backup/translations/de.yaml b/onedrive-backup/translations/de.yaml new file mode 100644 index 0000000..069e420 --- /dev/null +++ b/onedrive-backup/translations/de.yaml @@ -0,0 +1,43 @@ +configuration: + recovery_mode: + name: Wiederherstellungsmodus + description: Wenn diese Einstellung aktiviert ist, führt das Add-on keine Sicherungen durch und der Synchronisierungsmodus arbeitet umgekehrt, von OneDrive zu Home Assistant. Dies respektiert immer noch die eingestellte maximale Anzahl lokaler Sicherungen und versucht, die neuesten Sicherungen, die in OneDrive vorhanden sind, zu synchronisieren, während es unter dem eingestellten Limit bleibt. + local_backup_num_to_keep: + name: Anzahl der lokalen Sicherungen + description: Die maximale Anzahl von Sicherungen, die lokal im Home Assistant gespeichert werden sollen + onedrive_backup_num_to_keep: + name: Anzahl der Sicherungen in OneDrive + description: Die maximale Anzahl der in OneDrive zu speichernden Sicherungen + backup_interval_days: + name: Sicherungsintervall (Tage) + description: Die Häufigkeit der Sicherungserstellung in Tagen. Um eine untertägige Ausführung festzulegen, können Sie eine Zahl zwischen 0 und 1 verwenden. Wenn der Wert hier z. B. auf 0,5 gesetzt wird, erfolgt die Sicherung alle 12 Stunden. + backup_name: + name: Name der Sicherung + description: Name, der für die vom Add-on erstellten Sicherungen verwendet werden soll. + backup_passwd: + name: Sicherungskennwort + description: Das Kennwort, mit dem die erstellten und auf OneDrive hochgeladenen Sicherungen geschützt werden sollen. + notify_on_error: + name: Benachrichtigung im Fehlerfall + description: Aktiviert dauerhafte Benachrichtigungen im Home Assistant, um über Fehler bei der Datensicherung zu informieren. + hass_api_timeout_minutes: + name: Hass api timeout (Minuten) + description: Hier können Sie die beim Aufruf der Home Assistant-APIs verwendete Zeitüberschreitung einstellen. + exclude_media_folder: + name: Medienordner ausschließen + description: Wenn diese Option aktiviert ist, wird eine Teilsicherung ohne den Ordner "media" erstellt. + exclude_ssl_folder: + name: ssl-Ordner ausschließen + description: Wenn diese Option aktiviert ist, wird eine Teilsicherung ohne den Ordner "ssl" erstellt. + exclude_share_folder: + name: Freigabeordner ausschließen + description: Wenn diese Option aktiviert ist, wird eine Teilsicherung ohne den Ordner "share" erstellt. + exclude_local_addons_folder: + name: Lokalen Addons-Ordner ausschließen + description: Wenn diese Option aktiviert ist, wird eine Teilsicherung ohne den Ordner "addons/local" erstellt. + backup_allowed_hours: + name: Zulässige Stunden + description: Hier kann ein Stundenbereich von 0 bis 23 angegeben werden, in dem nur während dieser Stunden Backups durchgeführt werden. Wenn eine Sicherung erforderlich ist, wird sie im ersten zulässigen Zeitfenster innerhalb der festgelegten Stunden durchgeführt. Das Format ist ein oder mehrere Bereiche, die durch ein Komma getrennt sind. Ein Bereich wird durch einen Bindestrich angegeben. + backup_instance_name: + name: Name der Sicherungsinstanz + description: Dies wird verwendet, um zwischen mehreren Home Assistant-Installationen zu unterscheiden, die auf demselben OneDrive-Konto gesichert werden. OneDrive-Sicherungen werden für jeden „Instanznamen“ getrennt \ No newline at end of file diff --git a/onedrive-backup/translations/en.yaml b/onedrive-backup/translations/en.yaml new file mode 100644 index 0000000..e31591a --- /dev/null +++ b/onedrive-backup/translations/en.yaml @@ -0,0 +1,65 @@ +configuration: + recovery_mode: + name: Recovery mode + description: When this settings is toggled on, the add-on will not perform any backups and sync mode will reverse from OneDrive back to Home Assistant. This will still respect the maximum local backups set and will try to sync back the latest backups that exist in OneDrive while remaining under the set limit. + local_backup_num_to_keep: + name: Number of local backups + description: The maximum amount of backups to keep locally in Home Assistant + onedrive_backup_num_to_keep: + name: Number of OneDrive backups + description: The maximum amount of backups to keep in OneDrive + backup_interval_days: + name: Backup interval (days) + description: The backup creation frequency in days. For setting a sub-day frequency you can use a number between 0 and 1, so for example if the value here is set to 0.5, the backup frequency will occur every 12 hours. + backup_name: + name: Backup name + description: Name to use for the backups created by the add-on. + monitor_all_local_backups: + name: Monitor all local backups + description: Use this to monitor all locally created backups not just ones created by the Addon. All backup quota rules defined will be applied here including backup deletion when this is enabled. + ignore_upgrade_backups: + name: Ignore upgrade backups + description: When enabled, the add-on will ignore backups that are automatically created during upgrades (of Home Assistant / Addons) + backup_passwd: + name: Backup password + description: The password to use to protect the backups created and uploaded to OneDrive. + notify_on_error: + name: Notify on error + description: Enables persistent notifications in Home Assistant to notify of backup failures. + hass_api_timeout_minutes: + name: Hass api timeout (minutes) + description: This allows you to set the timeout configured when calling the Home Assistant APIs. + exclude_media_folder: + name: Exclude media folder + description: When enabled, a partial backup will be created without the media folder + exclude_ssl_folder: + name: Exclude ssl folder + description: When enabled, a partial backup will be created without the ssl folder + exclude_share_folder: + name: Exclude share folder + description: When enabled, a partial backup will be created without the share folder + exclude_local_addons_folder: + name: Exclude local addons folder + description: When enabled, a partial backup will be created without the addons/local folder + backup_allowed_hours: + name: Allowed hours + description: This accepts a range of hours from 0 to 23 for which only during these hours will backups be performed. If a backup is required it will be performed at the first window allowed in the defined hours. The format of this is one or more ranges seperated by a comma. A range is specified by a dash. + backup_instance_name: + name: Backup instance name + description: This is used to distingiush between multiple Home Assistant installations backing up to the same OneDrive account. OneDrive backups will be seperated for each 'Instance Name' + sync_paths: + name: File Sync Paths + description: > + This allows you to specify a list of paths for the addon to sync to OneDrive so you can for example sync your **Media** folder to OneDrive and exclude it from the Backups allowing you to save storage space (as this will only be stored once). Files are stored under a new directory called "FileSync" under the App Folder root. Source folder structure is maintained under this folder. + Sync (sub)folders supported must be under one of the following roots: /config, /ssl, /share, /media, /addons + You can specify an array of items here containing "path" and "recursive". + See documentation for full usage details. + file_sync_remove_deleted: + name: Remove deleted files during File Sync + description: When enabled, the FileSync folder on OneDrive will mirror your included sync_paths meaning any 'extra' content that remains in OneDrive will be removed. + excluded_addons: + name: Excluded Addons + description: When enabled, partial backups will be created excluding the addons specified in this list. You need to specify the addon id (slug) in this list. + log_level: + name: Log Level + description: You can opt to see more / less logs by adjusting the verbosity of the addon logs. diff --git a/onedrive-backup/wwwroot/bmc/bmc-button.svg b/onedrive-backup/wwwroot/bmc/bmc-button.svg new file mode 100644 index 0000000..4754bd3 --- /dev/null +++ b/onedrive-backup/wwwroot/bmc/bmc-button.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/onedrive-backup/wwwroot/css/bootstrap/bootstrap.min.css b/onedrive-backup/wwwroot/css/bootstrap/bootstrap.min.css new file mode 100644 index 0000000..02ae65b --- /dev/null +++ b/onedrive-backup/wwwroot/css/bootstrap/bootstrap.min.css @@ -0,0 +1,7 @@ +@charset "UTF-8";/*! + * Bootstrap v5.1.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:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--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-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-rgb:33,37,41;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation 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, 0.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}*,::after,::before{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:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{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[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{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:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,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:#d63384;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}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,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}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button: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-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-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{padding-left:0;list-style:none}.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:"— "}.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-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-right:calc(var(--bs-gutter-x) * -.5);margin-left:calc(var(--bs-gutter-x) * -.5)}.row>*{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{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{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{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:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.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{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{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{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{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:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.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{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{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{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:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.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{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{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{margin-left:25%}.offset-lg-4{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:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.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{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{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{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:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.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:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-bg:transparent;--bs-table-accent-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .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 .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:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:#000;border-color:#e6dbb9}.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:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e}.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:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-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{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;-webkit-appearance:none;-moz-appearance:none;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{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.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{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.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{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-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-lg,.form-control-plaintext.form-control-sm{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;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.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;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.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:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){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;-moz-padding-start:calc(0.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 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;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.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{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-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);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-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]{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{background-color:#0d6efd;border-color:#0d6efd;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{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-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{transition:none}}.form-switch .form-check-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='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-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;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;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;-webkit-appearance:none;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:#b6d4fe}.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:#0d6efd;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;-moz-appearance:none;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:#b6d4fe}.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>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.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{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.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:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.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>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{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)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu){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:.875em;color:#198754}.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:rgba(25,135,84,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;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='%23198754' 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)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select: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='%23198754' 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)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:1}.input-group .form-control.is-valid:focus,.input-group .form-select.is-valid:focus,.was-validated .input-group .form-control:valid:focus,.was-validated .input-group .form-select:valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;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:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control: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)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select: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)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:2}.input-group .form-control.is-invalid:focus,.input-group .form-select.is-invalid:focus,.was-validated .input-group .form-control:invalid:focus,.was-validated .input-group .form-select:invalid:focus{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;-webkit-user-select:none;-moz-user-select:none;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 rgba(13,110,253,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.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 rgba(225,83,97,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0d6efd;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#fff;background-color:#198754;border-color:#198754}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;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 rgba(220,53,69,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.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 rgba(248,249,250,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#212529;border-color:#212529}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{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}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropend,.dropstart,.dropup{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:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-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:focus,.dropdown-item:hover{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.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:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.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-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.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-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.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:#0d6efd;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:focus,.nav-link:hover{color:#0a58ca}.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:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{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:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{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-lg,.navbar>.container-md,.navbar>.container-sm,.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}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-sm .offcanvas-bottom,.navbar-expand-sm .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .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:.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}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-md .offcanvas-bottom,.navbar-expand-md .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .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:.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}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-lg .offcanvas-bottom,.navbar-expand-lg .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .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:.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}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xl .offcanvas-bottom,.navbar-expand-xl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xxl .offcanvas-bottom,.navbar-expand-xxl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .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:.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-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand .offcanvas-bottom,.navbar-expand .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.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:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.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:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{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 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);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:rgba(0,0,0,.03);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;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{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:.75rem}@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-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{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-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{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:#0c63e4;background-color:#e7f1ff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.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='%230c63e4'%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:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.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 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{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;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{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 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-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.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:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@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:#0d6efd;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{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;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:focus,.list-group-item-action:hover{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:#0d6efd;border-color:#0d6efd}.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:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.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-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{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:focus,.list-group-item-light.list-group-item-action:hover{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:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .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 rgba(13,110,253,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select: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:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);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{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-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:1050;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 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 .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:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-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:.9}.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-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:276px;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;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::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-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-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.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 rgba(0,0,0,.2);border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 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%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{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:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-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-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@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%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@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;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1045;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-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:1rem 1rem}.offcanvas-header .btn-close{padding:.5rem .5rem;margin-top:-.5rem;margin-right:-.5rem;margin-bottom:-.5rem}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:1rem 1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);transform:translateX(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);transform:translateX(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}.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{-webkit-animation:placeholder-glow 2s ease-in-out infinite;animation:placeholder-glow 2s ease-in-out infinite}@-webkit-keyframes placeholder-glow{50%{opacity:.2}}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;-webkit-animation:placeholder-wave 2s linear infinite;animation:placeholder-wave 2s linear infinite}@-webkit-keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#0d6efd}.link-primary:focus,.link-primary:hover{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:focus,.link-secondary:hover{color:#565e64}.link-success{color:#198754}.link-success:focus,.link-success:hover{color:#146c43}.link-info{color:#0dcaf0}.link-info:focus,.link-info:hover{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:focus,.link-warning:hover{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:focus,.link-danger:hover{color:#b02a37}.link-light{color:#f8f9fa}.link-light:focus,.link-light:hover{color:#f9fafb}.link-dark{color:#212529}.link-dark:focus,.link-dark:hover{color:#1a1e21}.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:calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio:calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio:calc(9 / 21 * 100%)}.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:-webkit-sticky;position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top: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;top:0;right:0;bottom:0;left: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{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!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:-webkit-sticky!important;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:translateX(-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{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-primary{border-color:#0d6efd!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!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{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{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{margin-right:.5rem!important}.me-3{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{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{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{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{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{padding-bottom:.25rem!important}.pb-2{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{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{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-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{--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-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:#6c757d!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-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{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-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-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;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{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:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-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}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/onedrive-backup/wwwroot/css/bootstrap/bootstrap.min.css.map b/onedrive-backup/wwwroot/css/bootstrap/bootstrap.min.css.map new file mode 100644 index 0000000..afcd9e3 --- /dev/null +++ b/onedrive-backup/wwwroot/css/bootstrap/bootstrap.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v5.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n// scss-docs-start import-stack\n// Configuration\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"utilities\";\n\n// Layout & components\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"containers\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"accordion\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"alert\";\n@import \"progress\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"offcanvas\";\n@import \"placeholders\";\n\n// Helpers\n@import \"helpers\";\n\n// Utilities\n@import \"utilities/api\";\n// scss-docs-end import-stack\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$variable-prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$variable-prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$variable-prefix}white-rgb: #{to-rgb($white)};\n --#{$variable-prefix}black-rgb: #{to-rgb($black)};\n --#{$variable-prefix}body-rgb: #{to-rgb($body-color)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$variable-prefix}gradient: #{$gradient};\n\n // Root and body\n // stylelint-disable custom-property-empty-line-before\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$variable-prefix}root-font-size: #{$font-size-root};\n }\n --#{$variable-prefix}body-font-family: #{$font-family-base};\n --#{$variable-prefix}body-font-size: #{$font-size-base};\n --#{$variable-prefix}body-font-weight: #{$font-weight-base};\n --#{$variable-prefix}body-line-height: #{$line-height-base};\n --#{$variable-prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$variable-prefix}body-text-align: #{$body-text-align};\n }\n --#{$variable-prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n // stylelint-enable custom-property-empty-line-before\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n font-size: var(--#{$variable-prefix}-root-font-size);\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$variable-prefix}body-font-family);\n @include font-size(var(--#{$variable-prefix}body-font-size));\n font-weight: var(--#{$variable-prefix}body-font-weight);\n line-height: var(--#{$variable-prefix}body-line-height);\n color: var(--#{$variable-prefix}body-color);\n text-align: var(--#{$variable-prefix}body-text-align);\n background-color: var(--#{$variable-prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n// 2. Set correct height and prevent the `size` attribute to make the `hr` look like an input field\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n background-color: currentColor;\n border: 0;\n opacity: $hr-opacity;\n}\n\nhr:not([size]) {\n height: $hr-height; // 2\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`
` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-bs-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-bs-original-title] { // 1\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n text-decoration-skip-ink: none; // 4\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n\n &:hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n direction: ltr #{\"/* rtl:ignore */\"};\n unicode-bidi: bidi-override;\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`