From 27c561623c16f8aa3ebd2a57b335dadd6874a2dc Mon Sep 17 00:00:00 2001 From: wzh425 Date: Fri, 9 Jan 2026 14:12:34 +0800 Subject: [PATCH 1/6] refactor: Improve filter case sensitivity in query handlers Updated the filtering logic in AlarmHistoryQueryHandler, AlarmRuleQueryHandler, and WebHookQueryHandler to perform case-insensitive searches by converting both the filter and the target display names to lowercase. This enhancement ensures more accurate search results regardless of the case used in the input. --- .../AlarmHistories/Queries/AlarmHistoryQueryHandler.cs | 4 ++-- .../AlarmRules/Queries/AlarmRuleQueryHandler.cs | 4 ++-- .../WebHooks/Queries/WebHookQueryHandler.cs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Application/Masa.Alert.Application/AlarmHistories/Queries/AlarmHistoryQueryHandler.cs b/src/Application/Masa.Alert.Application/AlarmHistories/Queries/AlarmHistoryQueryHandler.cs index 6c820d77..874c38b6 100644 --- a/src/Application/Masa.Alert.Application/AlarmHistories/Queries/AlarmHistoryQueryHandler.cs +++ b/src/Application/Masa.Alert.Application/AlarmHistories/Queries/AlarmHistoryQueryHandler.cs @@ -1,4 +1,4 @@ -// Copyright (c) MASA Stack All rights reserved. +// Copyright (c) MASA Stack All rights reserved. // Licensed under the Apache License. See LICENSE.txt in the project root for license information. namespace Masa.Alert.Application.AlarmHistories.Queries; @@ -55,7 +55,7 @@ public async Task GetListAsync(GetAlarmHistoryListQuery query) private async Task>> CreateFilteredPredicate(GetAlarmHistoryInputDto options) { Expression> condition = x => true; - condition = condition.And(!string.IsNullOrEmpty(options.Filter), x => x.AlarmRule.DisplayName.Contains(options.Filter)); + condition = condition.And(!string.IsNullOrEmpty(options.Filter), x => x.AlarmRule.DisplayName.ToLower().Contains(options.Filter.ToLower())); switch (options.SearchType) { case AlarmHistorySearchTypes.Alarming: diff --git a/src/Application/Masa.Alert.Application/AlarmRules/Queries/AlarmRuleQueryHandler.cs b/src/Application/Masa.Alert.Application/AlarmRules/Queries/AlarmRuleQueryHandler.cs index 5e51d6cd..640ef32e 100644 --- a/src/Application/Masa.Alert.Application/AlarmRules/Queries/AlarmRuleQueryHandler.cs +++ b/src/Application/Masa.Alert.Application/AlarmRules/Queries/AlarmRuleQueryHandler.cs @@ -1,4 +1,4 @@ -// Copyright (c) MASA Stack All rights reserved. +// Copyright (c) MASA Stack All rights reserved. // Licensed under the Apache License. See LICENSE.txt in the project root for license information. namespace Masa.Alert.Application.AlarmRules.Queries; @@ -54,7 +54,7 @@ public async Task GetListAsync(GetAlarmRuleListQuery query) private async Task>> CreateFilteredPredicate(GetAlarmRuleInputDto options) { Expression> condition = x => true; - condition = condition.And(!string.IsNullOrEmpty(options.Filter), x => x.DisplayName.Contains(options.Filter)); + condition = condition.And(!string.IsNullOrEmpty(options.Filter), x => x.DisplayName.ToLower().Contains(options.Filter.ToLower())); condition = condition.And(options.Type != default, x => x.Type == options.Type); condition = condition.And(x => x.Show == options.Show); if (options.TimeType == AlarmRuleSearchTimeTypes.ModificationTime) diff --git a/src/Application/Masa.Alert.Application/WebHooks/Queries/WebHookQueryHandler.cs b/src/Application/Masa.Alert.Application/WebHooks/Queries/WebHookQueryHandler.cs index 924ac93c..10a818a2 100644 --- a/src/Application/Masa.Alert.Application/WebHooks/Queries/WebHookQueryHandler.cs +++ b/src/Application/Masa.Alert.Application/WebHooks/Queries/WebHookQueryHandler.cs @@ -1,4 +1,4 @@ -// Copyright (c) MASA Stack All rights reserved. +// Copyright (c) MASA Stack All rights reserved. // Licensed under the Apache License. See LICENSE.txt in the project root for license information. namespace Masa.Alert.Application.WebHooks.Queries; @@ -48,7 +48,7 @@ public async Task GetListAsync(GetWebHookListQuery query) private async Task>> CreateFilteredPredicate(GetWebHookInputDto options) { Expression> condition = x => true; - condition = condition.And(!string.IsNullOrEmpty(options.Filter), x => x.DisplayName.Contains(options.Filter)); + condition = condition.And(!string.IsNullOrEmpty(options.Filter), x => x.DisplayName.ToLower().Contains(options.Filter.ToLower())); return await Task.FromResult(condition); ; } From 9615a7d43ed9e7fe5ebea2ebbec2f7ddabc8d312 Mon Sep 17 00:00:00 2001 From: wzh425 Date: Fri, 14 Aug 2026 17:07:27 +0800 Subject: [PATCH 2/6] chore: sanitize sensitive local configuration values Remove hardcoded credentials from tracked configuration files and switch design-time database config loading to optional local secrets plus environment variables to satisfy repository secret scanning. Co-authored-by: Cursor --- .gitignore | 2 ++ .../AlertPostgreSqlDbContextFactory.cs | 2 ++ .../appsettings.PostgreSql.json | 4 +--- .../AlertSqlServerDbContextFactory.cs | 2 ++ .../appsettings.SqlServer.json | 4 +--- .../Masa.Alert.Service/Properties/launchSettings.json | 8 ++++---- 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index dfcfd56f..3d594515 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,8 @@ *.user *.userosscache *.sln.docstates +**/appsettings.secrets.json +**/appsettings.*.secrets.json # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs diff --git a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/AlertPostgreSqlDbContextFactory.cs b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/AlertPostgreSqlDbContextFactory.cs index 320bb1e6..52093645 100644 --- a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/AlertPostgreSqlDbContextFactory.cs +++ b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/AlertPostgreSqlDbContextFactory.cs @@ -12,6 +12,8 @@ public AlertDbContext CreateDbContext(string[] args) var configurationBuilder = new ConfigurationBuilder(); var configuration = configurationBuilder .AddJsonFile("appsettings.PostgreSql.json") + .AddJsonFile("appsettings.secrets.json", optional: true) + .AddEnvironmentVariables() .Build(); optionsBuilder.UseNpgsql(configuration.GetConnectionString("DefaultConnection")!, b => b.MigrationsAssembly("Masa.Alert.EntityFrameworkCore.PostgreSql")); diff --git a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/appsettings.PostgreSql.json b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/appsettings.PostgreSql.json index 2c4670b6..0e0dcd23 100644 --- a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/appsettings.PostgreSql.json +++ b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/appsettings.PostgreSql.json @@ -1,5 +1,3 @@ { - "ConnectionStrings": { - "DefaultConnection": "Server=10.130.0.19;Port=3815;User Id=ss;Password=Lsd@2023;Database=alert_dev;" - } + } \ No newline at end of file diff --git a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/AlertSqlServerDbContextFactory.cs b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/AlertSqlServerDbContextFactory.cs index 4322d2f0..e4794c13 100644 --- a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/AlertSqlServerDbContextFactory.cs +++ b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/AlertSqlServerDbContextFactory.cs @@ -12,6 +12,8 @@ public AlertDbContext CreateDbContext(string[] args) var configurationBuilder = new ConfigurationBuilder(); var configuration = configurationBuilder .AddJsonFile("appsettings.SqlServer.json") + .AddJsonFile("appsettings.secrets.json", optional: true) + .AddEnvironmentVariables() .Build(); optionsBuilder.UseSqlServer(configuration.GetConnectionString("DefaultConnection"), b => b.MigrationsAssembly("Masa.Alert.EntityFrameworkCore.SqlServer")); diff --git a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/appsettings.SqlServer.json b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/appsettings.SqlServer.json index 9dc4db49..0e0dcd23 100644 --- a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/appsettings.SqlServer.json +++ b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/appsettings.SqlServer.json @@ -1,5 +1,3 @@ { - "ConnectionStrings": { - "DefaultConnection": "Server=10.130.0.19,2415;Database=alert_dev;User Id=ss;Password=Hzss@123;" - } + } \ No newline at end of file diff --git a/src/Services/Masa.Alert.Service/Properties/launchSettings.json b/src/Services/Masa.Alert.Service/Properties/launchSettings.json index 7e681c57..6f3f16fa 100644 --- a/src/Services/Masa.Alert.Service/Properties/launchSettings.json +++ b/src/Services/Masa.Alert.Service/Properties/launchSettings.json @@ -17,8 +17,8 @@ "DAPR_GRPC_PORT": "3601", "DAPR_HTTP_PORT": "3600", "MASA_CLUSTER": "Default", - "DCC_SECRET": "masastack.com", - "ADMIN_PWD": "admin123", + "DCC_SECRET": "__SET_IN_USER_SECRETS__", + "ADMIN_PWD": "__SET_IN_USER_SECRETS__", "DOMAIN_NAME": "masastack.com", "MASA_NAMESPACE": "masastack", "TLS_NAME": "masastack", @@ -26,8 +26,8 @@ "IS_DEMO": "false", "OTLP_URL": "http://otel-collector.masastack:9013", "ELASTIC": "{\"Nodes\": [\"http://es-ydy-new.lonsid.cn:9200\"],\"Index\": \"auth_user_development\"}", - "REDIS": "{\"RedisHost\": \"10.130.0.19\", \"RedisPort\": 2135, \"RedisDb\": 3,\"RedisPassword\": \"Hzss@123\"}", - "CONNECTIONSTRING": "{\"Server\": \"10.130.0.19\", \"Port\": 3815,\"Database\":\"pm-dev\",\"UserId\": \"ss\",\"Password\":\"Lsd@2023\",\"DbType\":\"PostgreSql\"}", + "REDIS": "{\"RedisHost\": \"127.0.0.1\", \"RedisPort\": 6379, \"RedisDb\": 0}", + "CONNECTIONSTRING": "{\"Server\": \"127.0.0.1\", \"Port\": 5432, \"Database\": \"alert_dev\", \"UserId\": \"postgres\", \"DbType\": \"PostgreSql\"}", "MASA_STACK": "[{\"id\":\"pm\",\"service\":{\"id\":\"pm-service-dev\",\"domain\":\"http://pm-service-dev.masastack.com\"},\"web\":{\"id\":\"pm-web-dev\",\"domain\":\"https://pm-dev.masastack.com\"}},{\"id\":\"dcc\",\"service\":{\"id\":\"dcc-service-dev\",\"domain\":\"http://dcc-service-dev.masastack.com\"},\"web\":{\"id\":\"dcc-web-dev\",\"domain\":\"https://dcc-dev.masastack.com\"}},{\"id\":\"tsc\",\"service\":{\"id\":\"tsc-service-dev\",\"domain\":\"http://tsc-service-dev.masastack.com\"},\"web\":{\"id\":\"tsc-web-dev\",\"domain\":\"https://tsc-dev.masastack.com\"}},{\"id\":\"alert\",\"service\":{\"id\":\"alert-service-dev\",\"domain\":\"http://alert-service-dev.masastack.com\"},\"web\":{\"id\":\"alert-web-dev\",\"domain\":\"https://alert-dev.masastack.com\"}},{\"id\":\"scheduler\",\"service\":{\"id\":\"scheduler-service-dev\",\"domain\":\"http://scheduler-service-dev.masastack.com\"},\"worker\":{\"id\":\"scheduler-worker-dev\",\"domain\":\"http://scheduler-worker-dev.masastack.com\"},\"web\":{\"id\":\"scheduler-web-dev\",\"domain\":\"https://scheduler-dev.masastack.com\"}},{\"id\":\"mc\",\"service\":{\"id\":\"mc-service-dev\",\"domain\":\"http://mc-service-dev.masastack.com\"},\"web\":{\"id\":\"mc-web-dev\",\"domain\":\"https://mc-dev.masastack.com\"}},{\"id\":\"auth\",\"service\":{\"id\":\"auth-service-dev\",\"domain\":\"http://auth-service-dev.masastack.com\"},\"web\":{\"id\":\"auth-web-dev\",\"domain\":\"https://auth-dev.masastack.com\"},\"sso\":{\"id\":\"auth-sso-dev\",\"domain\":\"https://auth-sso-dev.masastack.com\"}}]", "MASA_ENVIRONMENT": "Development", "SUFFIX_IDENTITY": "dev" From 9678f2c26b8d406949a65d061156fc75fdf52163 Mon Sep 17 00:00:00 2001 From: wzh425 Date: Fri, 14 Aug 2026 17:19:21 +0800 Subject: [PATCH 3/6] refactor: Remove Masa.Alert.Web.Admin project and update configuration - Deleted the Masa.Alert.Web.Admin project, including all related components and files. - Updated solution and project files to remove references to the deleted project. - Added support for appsettings.secrets.json in PostgreSQL and SQL Server projects to manage sensitive configurations. - Commented out the ITokenGenerater registration in the service configuration to prevent potential issues. This refactor streamlines the project structure and enhances configuration management. --- Masa.Alert.sln | 36 - ...lert.EntityFrameworkCore.PostgreSql.csproj | 3 + ...Alert.EntityFrameworkCore.SqlServer.csproj | 3 + src/Services/Masa.Alert.Service/Program.cs | 2 +- .../Certificates/7348307__lonsid.cn.pfx | Bin 4925 -> 0 bytes .../Masa.Alert.Web.Admin.Server/Dockerfile | 15 - .../Masa.Alert.Web.Admin.Server.csproj | 33 - .../Pages/Error.cshtml | 43 - .../Pages/Error.cshtml.cs | 30 - .../Pages/Logout.cshtml | 2 - .../Pages/Logout.cshtml.cs | 24 - .../Pages/_Host.cshtml | 15 - .../Pages/_Layout.cshtml | 48 - .../Masa.Alert.Web.Admin.Server/Program.cs | 112 - .../Properties/launchSettings.json | 50 - .../Masa.Alert.Web.Admin.Server/_Imports.cs | 33 - .../appsettings.Develop.json | 10 - .../appsettings.Development.json | 9 - .../appsettings.Staging.json | 10 - .../appsettings.json | 9 - .../Masa.Alert.Web.Admin.Server/ssl/tls.crt | 39 - .../Masa.Alert.Web.Admin.Server/ssl/tls.key | 28 - .../wwwroot/css/error.css | 45 - .../wwwroot/favicon.ico | Bin 5430 -> 0 bytes .../masa.stack.components.i18n/en-US.json | 70 - .../supportedCultures.json | 4 - .../masa.stack.components.i18n/zh-CN.json | 115 - .../Masa.Alert.Web.Admin.WebAssembly.csproj | 18 - .../Program.cs | 25 - .../Properties/launchSettings.json | 30 - .../wwwroot/css/app.css | 33 - .../wwwroot/css/spinkit.min.css | 1 - .../wwwroot/decode.min.js | 2605 ----------------- .../wwwroot/favicon.ico | Bin 5430 -> 0 bytes .../wwwroot/i18n/en-US.json | 32 - .../wwwroot/i18n/languageConfig.json | 6 - .../wwwroot/i18n/zh-CN.json | 33 - .../wwwroot/index.html | 64 - .../wwwroot/nav/nav.json | 203 -- src/Web/Masa.Alert.Web.Admin/App.razor | 29 - .../Components/AutoHeight.razor | 50 - .../Components/DefaultPageTitle.razor | 9 - .../Components/DefaultSheetDialog.cs | 26 - .../Components/DefaultSimpleSelect.cs | 17 - .../Components/DefaultSubTitle.razor | 11 - .../Components/DefaultTitle.razor | 11 - .../Components/DefaultTooltip.razor | 9 - .../Components/EnableSwitch.razor | 7 - .../Components/EnableSwitch.razor.cs | 14 - .../DefaultGenericColumnRender.razor | 32 - .../Components/JsonPre.razor | 28 - .../Components/JsonPre.razor.css | 24 - .../Components/Lists/DateTimeListItem.razor | 12 - .../Components/MenuTooltip.razor | 22 - .../Components/Modules/Alarm/AlarmChart.razor | 200 -- .../Alarm/AlarmHistoryStatusIcon.razor | 31 - .../Modules/Alarm/AlarmHistoryStatusTag.razor | 24 - .../Modules/Alarm/AlarmPreviewChart.razor | 241 -- .../Alarm/AlarmPreviewChartModal.razor | 64 - .../Modules/Alarm/AlertSeverityTag.razor | 34 - .../Components/Modules/Alarm/ChartHelper.cs | 51 - .../Model/AlarmPreviewChartDataItemModel.cs | 11 - .../Notification/NotificationConfig.razor | 147 - .../Modules/Subjects/UserAutoComplete.razor | 36 - .../Subjects/UserAutoComplete.razor.cs | 93 - .../WebHooks/WebHookAutoComplete.razor | 70 - .../Components/OutlinedSearchTextField.cs | 40 - .../Components/SearchTextField.cs | 40 - .../Components/SelectItem.cs | 17 - .../Global/Config/GlobalConfig.cs | 45 - .../Global/ServiceCollectionExtensions.cs | 20 - .../Masa.Alert.Web.Admin.csproj | 44 - .../AlarmHistory/AlarmHistoryManagement.razor | 131 - .../AlarmHistoryManagement.razor.cs | 195 -- .../Modules/AlarmHistoryDetail.razor | 125 - .../Modules/AlarmHistoryDetail.razor.cs | 58 - .../Modules/AlarmHistoryDetailModal.razor | 21 - .../Modules/AlarmHistoryDetailModal.razor.cs | 69 - .../AlarmHistory/Modules/HandleAlarm.razor | 97 - .../Modules/HandleAlarmModal.razor | 30 - .../Modules/HandleAlarmModal.razor.cs | 107 - .../AlarmHistory/Modules/StatusTimeline.razor | 48 - .../Modules/StatusTimeline.razor.css | 19 - .../AlarmRules/AlarmRuleManagement.razor | 126 - .../AlarmRules/AlarmRuleManagement.razor.cs | 227 -- .../AlarmRules/Modules/AlarmRuleCard.razor | 144 - .../AlarmRules/Modules/AlarmRuleSetting.razor | 120 - .../Modules/LogAlarmRuleUpsertModal.razor | 211 -- .../Modules/LogAlarmRuleUpsertModal.razor.cs | 290 -- .../Modules/LogQueryExpression.razor | 30 - .../Modules/MetricAlarmRuleUpsertModal.razor | 216 -- .../MetricAlarmRuleUpsertModal.razor.cs | 290 -- .../Pages/WebHooks/Modules/WebHookCard.razor | 62 - .../WebHooks/Modules/WebHookTestModal.razor | 20 - .../Modules/WebHookTestModal.razor.cs | 53 - .../WebHooks/Modules/WebHookUpsertModal.razor | 47 - .../Modules/WebHookUpsertModal.razor.cs | 120 - .../Pages/WebHooks/WebHookManagement.razor | 38 - .../Pages/WebHooks/WebHookManagement.razor.cs | 66 - .../Registers/AlarmHistoryRegister.cs | 12 - .../Shared/AdminCompontentBase.cs | 187 -- .../Shared/MLoading.razor | 37 - .../Shared/MainLayout.razor | 34 - .../Shared/MainLayout.razor.css | 3 - .../AlarmHandleStatusCommitViewModel.cs | 17 - .../AlarmHistory/AlarmHandleViewModel.cs | 21 - .../AlarmHistory/AlarmHistoryListViewModel.cs | 29 - .../AlarmHistory/AlarmHistoryViewModel.cs | 31 - .../AlarmHandleViewModelValidator.cs | 12 - .../NotificationConfigViewModelValidator.cs | 13 - .../AlarmRules/AlarmRuleItemViewModel.cs | 23 - .../AlarmRules/AlarmRuleListViewModel.cs | 29 - .../AlarmRuleRecordListViewModel.cs | 23 - .../AlarmRules/AlarmRuleUpsertViewModel.cs | 45 - .../AlarmRules/AlarmRuleViewModel.cs | 8 - .../AlarmRules/CheckFrequencyViewModel.cs | 13 - .../AlarmRules/LogMonitorItemViewModel.cs | 17 - .../AlarmRules/MetricAggregationViewModel.cs | 23 - .../AlarmRules/MetricMonitorItemViewModel.cs | 19 - .../AlarmRules/NotificationConfigViewModel.cs | 17 - .../AlarmRules/RuleResultItemViewModel.cs | 11 - .../AlarmRules/SilenceCycleViewModel.cs | 13 - .../AlarmRules/TimeIntervalViewModel.cs | 26 - .../AlarmRuleItemViewModelValidator.cs | 14 - .../AlarmRuleUpsertViewModelValidator.cs | 33 - .../CheckFrequencyViewModelValidator.cs | 33 - .../LogMonitorItemViewModelValidator.cs | 16 - .../MetricMonitorItemViewModelValidator.cs | 13 - .../SilenceCycleViewModelValidator.cs | 12 - .../TimeIntervalViewModelValidator.cs | 19 - .../WebHookTestViewModalValidator.cs | 13 - .../WebHookUpsertViewModelValidator.cs | 18 - .../WebHooks/WebHookListViewModel.cs | 21 - .../WebHooks/WebHookTestViewModal.cs | 11 - .../WebHooks/WebHookUpsertViewModel.cs | 17 - .../ViewModel/WebHooks/WebHookViewModel.cs | 15 - src/Web/Masa.Alert.Web.Admin/_Imports.cs | 52 - src/Web/Masa.Alert.Web.Admin/_Imports.razor | 40 - .../wwwroot/css/alert-admin.css | 571 ---- .../wwwroot/css/animate.min.css | 7 - .../wwwroot/css/masa-blazor-pro.css | 576 ---- .../wwwroot/i18n/en-US.json | 164 -- .../wwwroot/i18n/languageConfig.json | 6 - .../wwwroot/i18n/supportedCultures.json | 6 - .../wwwroot/i18n/zh-CN.json | 280 -- .../wwwroot/img/analytics/json.png | Bin 976 -> 0 bytes .../wwwroot/img/analytics/left.png | Bin 3335 -> 0 bytes .../wwwroot/img/analytics/right.png | Bin 1814 -> 0 bytes .../img/auth/forgot-password-v2.9faba3c1.svg | 207 -- .../wwwroot/img/auth/register-v2.0a9e487c.svg | 351 --- .../wwwroot/img/eCommerce/rectangle.png | Bin 17020 -> 0 bytes .../wwwroot/img/eCommerce/trophy.png | Bin 69803 -> 0 bytes .../wwwroot/img/login/2873.png | Bin 5628 -> 0 bytes .../wwwroot/img/login/Gxwd.png | Bin 3786 -> 0 bytes .../wwwroot/img/login/left.svg | 53 - .../wwwroot/img/mainLayout/logo-en.png | Bin 9711 -> 0 bytes .../wwwroot/img/mainLayout/logo-en.svg | 6 - .../wwwroot/img/mainLayout/logo.svg | 4 - .../wwwroot/img/messageTask/send.svg | 3 - .../wwwroot/img/messageTask/test.svg | 3 - .../wwwroot/img/status/401.png | Bin 7469 -> 0 bytes .../wwwroot/img/status/404.png | Bin 13829 -> 0 bytes .../wwwroot/img/status/500.png | Bin 9020 -> 0 bytes .../wwwroot/img/upload/upload-active.png | Bin 3051 -> 0 bytes .../wwwroot/img/upload/upload-complete.png | Bin 1317 -> 0 bytes .../wwwroot/img/upload/upload-error.png | Bin 654 -> 0 bytes .../wwwroot/img/upload/upload.png | Bin 3639 -> 0 bytes .../wwwroot/js/quill/quill-helper.js | 19 - .../Masa.Alert.Web.Admin/wwwroot/js/util.js | 90 - .../wwwroot/js/vditor/vditor-helper.js | 23 - 170 files changed, 7 insertions(+), 11659 deletions(-) delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/Certificates/7348307__lonsid.cn.pfx delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/Dockerfile delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/Masa.Alert.Web.Admin.Server.csproj delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/Pages/Error.cshtml delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/Pages/Error.cshtml.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/Pages/Logout.cshtml delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/Pages/Logout.cshtml.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/Pages/_Host.cshtml delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/Pages/_Layout.cshtml delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/Program.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/Properties/launchSettings.json delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/_Imports.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/appsettings.Develop.json delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/appsettings.Development.json delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/appsettings.Staging.json delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/appsettings.json delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/ssl/tls.crt delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/ssl/tls.key delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/wwwroot/css/error.css delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/wwwroot/favicon.ico delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/wwwroot/masa.stack.components.i18n/en-US.json delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/wwwroot/masa.stack.components.i18n/supportedCultures.json delete mode 100644 src/Web/Masa.Alert.Web.Admin.Server/wwwroot/masa.stack.components.i18n/zh-CN.json delete mode 100644 src/Web/Masa.Alert.Web.Admin.WebAssembly/Masa.Alert.Web.Admin.WebAssembly.csproj delete mode 100644 src/Web/Masa.Alert.Web.Admin.WebAssembly/Program.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin.WebAssembly/Properties/launchSettings.json delete mode 100644 src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/css/app.css delete mode 100644 src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/css/spinkit.min.css delete mode 100644 src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/decode.min.js delete mode 100644 src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/favicon.ico delete mode 100644 src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/i18n/en-US.json delete mode 100644 src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/i18n/languageConfig.json delete mode 100644 src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/i18n/zh-CN.json delete mode 100644 src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/index.html delete mode 100644 src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/nav/nav.json delete mode 100644 src/Web/Masa.Alert.Web.Admin/App.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/AutoHeight.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/DefaultPageTitle.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/DefaultSheetDialog.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/DefaultSimpleSelect.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/DefaultSubTitle.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/DefaultTitle.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/DefaultTooltip.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/EnableSwitch.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/EnableSwitch.razor.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/GenericColumnRender/DefaultGenericColumnRender.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/JsonPre.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/JsonPre.razor.css delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/Lists/DateTimeListItem.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/MenuTooltip.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmChart.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmHistoryStatusIcon.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmHistoryStatusTag.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmPreviewChart.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmPreviewChartModal.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlertSeverityTag.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/ChartHelper.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/Model/AlarmPreviewChartDataItemModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/Modules/Notification/NotificationConfig.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/Modules/Subjects/UserAutoComplete.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/Modules/Subjects/UserAutoComplete.razor.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/Modules/WebHooks/WebHookAutoComplete.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/OutlinedSearchTextField.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/SearchTextField.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Components/SelectItem.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Global/Config/GlobalConfig.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Global/ServiceCollectionExtensions.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Masa.Alert.Web.Admin.csproj delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/AlarmHistoryManagement.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/AlarmHistoryManagement.razor.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetail.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetail.razor.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetailModal.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetailModal.razor.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarm.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarmModal.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarmModal.razor.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/StatusTimeline.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/StatusTimeline.razor.css delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/AlarmRuleManagement.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/AlarmRuleManagement.razor.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/AlarmRuleCard.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/AlarmRuleSetting.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogAlarmRuleUpsertModal.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogAlarmRuleUpsertModal.razor.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogQueryExpression.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/MetricAlarmRuleUpsertModal.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/MetricAlarmRuleUpsertModal.razor.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookCard.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookTestModal.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookTestModal.razor.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookUpsertModal.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookUpsertModal.razor.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/WebHookManagement.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/WebHookManagement.razor.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Registers/AlarmHistoryRegister.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Shared/AdminCompontentBase.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/Shared/MLoading.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Shared/MainLayout.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/Shared/MainLayout.razor.css delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHandleStatusCommitViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHandleViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHistoryListViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHistoryViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/Validator/AlarmHandleViewModelValidator.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/Validator/NotificationConfigViewModelValidator.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleItemViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleListViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleRecordListViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleUpsertViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/CheckFrequencyViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/LogMonitorItemViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/MetricAggregationViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/MetricMonitorItemViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/NotificationConfigViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/RuleResultItemViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/SilenceCycleViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/TimeIntervalViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/AlarmRuleItemViewModelValidator.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/AlarmRuleUpsertViewModelValidator.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/CheckFrequencyViewModelValidator.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/LogMonitorItemViewModelValidator.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/MetricMonitorItemViewModelValidator.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/SilenceCycleViewModelValidator.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/TimeIntervalViewModelValidator.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/Validator/WebHookTestViewModalValidator.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/Validator/WebHookUpsertViewModelValidator.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookListViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookTestViewModal.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookUpsertViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookViewModel.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/_Imports.cs delete mode 100644 src/Web/Masa.Alert.Web.Admin/_Imports.razor delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/css/alert-admin.css delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/css/animate.min.css delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/css/masa-blazor-pro.css delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/en-US.json delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/languageConfig.json delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/supportedCultures.json delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/zh-CN.json delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/analytics/json.png delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/analytics/left.png delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/analytics/right.png delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/auth/forgot-password-v2.9faba3c1.svg delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/auth/register-v2.0a9e487c.svg delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/eCommerce/rectangle.png delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/eCommerce/trophy.png delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/login/2873.png delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/login/Gxwd.png delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/login/left.svg delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo-en.png delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo-en.svg delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo.svg delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/messageTask/send.svg delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/messageTask/test.svg delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/status/401.png delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/status/404.png delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/status/500.png delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/upload/upload-active.png delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/upload/upload-complete.png delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/upload/upload-error.png delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/img/upload/upload.png delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/js/quill/quill-helper.js delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/js/util.js delete mode 100644 src/Web/Masa.Alert.Web.Admin/wwwroot/js/vditor/vditor-helper.js diff --git a/Masa.Alert.sln b/Masa.Alert.sln index b1093ae8..2b1aab72 100644 --- a/Masa.Alert.sln +++ b/Masa.Alert.sln @@ -17,10 +17,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "components", "components", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Alert.Service.Admin", "src\Services\Masa.Alert.Service\Masa.Alert.Service.Admin.csproj", "{87A8E21E-DF58-4BEA-8EA1-EF333BE4D2B3}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Web", "Web", "{F3986DD3-0372-4929-B72A-09D93196541E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Alert.Web.Admin", "src\Web\Masa.Alert.Web.Admin\Masa.Alert.Web.Admin.csproj", "{3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ApiGateways", "ApiGateways", "{32774681-0D67-48A6-A379-D57015094F85}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Alert.ApiGateways.Caller", "src\ApiGateways\Caller\Masa.Alert.ApiGateways.Caller\Masa.Alert.ApiGateways.Caller.csproj", "{40685EC0-64DF-4742-B8F6-602AFAEFC0EA}" @@ -35,10 +31,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Alert.Infrastructure.D EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Alert.Infrastructure.EntityFrameworkCore", "src\Infrastructure\Masa.Alert.Infrastructure.EntityFrameworkCore\Masa.Alert.Infrastructure.EntityFrameworkCore.csproj", "{FAFDC558-45A7-4FF7-BFCE-015EDF58F3AE}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Alert.Web.Admin.Server", "src\Web\Masa.Alert.Web.Admin.Server\Masa.Alert.Web.Admin.Server.csproj", "{8FA1D09B-F5B5-4B42-BF86-53512F1377B2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Alert.Web.Admin.WebAssembly", "src\Web\Masa.Alert.Web.Admin.WebAssembly\Masa.Alert.Web.Admin.WebAssembly.csproj", "{1644695E-4B4F-4D7D-833C-7E694E758641}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Alert.Infrastructure.Common", "src\Infrastructure\Masa.Alert.Infrastructure.Common\Masa.Alert.Infrastructure.Common.csproj", "{4024A9CA-D6CA-44D7-BEA4-D96891AFC6DD}" EndProject Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{C147F2DF-F545-4263-9FBE-C7A833BB2A73}" @@ -92,14 +84,6 @@ Global {87A8E21E-DF58-4BEA-8EA1-EF333BE4D2B3}.Release|Any CPU.Build.0 = Release|Any CPU {87A8E21E-DF58-4BEA-8EA1-EF333BE4D2B3}.Release|x86.ActiveCfg = Release|Any CPU {87A8E21E-DF58-4BEA-8EA1-EF333BE4D2B3}.Release|x86.Build.0 = Release|Any CPU - {3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7}.Debug|x86.ActiveCfg = Debug|Any CPU - {3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7}.Debug|x86.Build.0 = Debug|Any CPU - {3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7}.Release|Any CPU.Build.0 = Release|Any CPU - {3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7}.Release|x86.ActiveCfg = Release|Any CPU - {3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7}.Release|x86.Build.0 = Release|Any CPU {40685EC0-64DF-4742-B8F6-602AFAEFC0EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {40685EC0-64DF-4742-B8F6-602AFAEFC0EA}.Debug|Any CPU.Build.0 = Debug|Any CPU {40685EC0-64DF-4742-B8F6-602AFAEFC0EA}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -132,22 +116,6 @@ Global {FAFDC558-45A7-4FF7-BFCE-015EDF58F3AE}.Release|Any CPU.Build.0 = Release|Any CPU {FAFDC558-45A7-4FF7-BFCE-015EDF58F3AE}.Release|x86.ActiveCfg = Release|Any CPU {FAFDC558-45A7-4FF7-BFCE-015EDF58F3AE}.Release|x86.Build.0 = Release|Any CPU - {8FA1D09B-F5B5-4B42-BF86-53512F1377B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8FA1D09B-F5B5-4B42-BF86-53512F1377B2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8FA1D09B-F5B5-4B42-BF86-53512F1377B2}.Debug|x86.ActiveCfg = Debug|Any CPU - {8FA1D09B-F5B5-4B42-BF86-53512F1377B2}.Debug|x86.Build.0 = Debug|Any CPU - {8FA1D09B-F5B5-4B42-BF86-53512F1377B2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8FA1D09B-F5B5-4B42-BF86-53512F1377B2}.Release|Any CPU.Build.0 = Release|Any CPU - {8FA1D09B-F5B5-4B42-BF86-53512F1377B2}.Release|x86.ActiveCfg = Release|Any CPU - {8FA1D09B-F5B5-4B42-BF86-53512F1377B2}.Release|x86.Build.0 = Release|Any CPU - {1644695E-4B4F-4D7D-833C-7E694E758641}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1644695E-4B4F-4D7D-833C-7E694E758641}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1644695E-4B4F-4D7D-833C-7E694E758641}.Debug|x86.ActiveCfg = Debug|Any CPU - {1644695E-4B4F-4D7D-833C-7E694E758641}.Debug|x86.Build.0 = Debug|Any CPU - {1644695E-4B4F-4D7D-833C-7E694E758641}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1644695E-4B4F-4D7D-833C-7E694E758641}.Release|Any CPU.Build.0 = Release|Any CPU - {1644695E-4B4F-4D7D-833C-7E694E758641}.Release|x86.ActiveCfg = Release|Any CPU - {1644695E-4B4F-4D7D-833C-7E694E758641}.Release|x86.Build.0 = Release|Any CPU {4024A9CA-D6CA-44D7-BEA4-D96891AFC6DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4024A9CA-D6CA-44D7-BEA4-D96891AFC6DD}.Debug|Any CPU.Build.0 = Debug|Any CPU {4024A9CA-D6CA-44D7-BEA4-D96891AFC6DD}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -260,8 +228,6 @@ Global {4A1D2DFA-D091-4CD2-B9CB-D7AAA795ABD9} = {92F40AFA-8416-40BE-9893-D35E1924C69D} {FBFB499A-7022-4417-881B-68F63DBDB7F4} = {E011B243-0389-468B-B903-83445BED69A4} {87A8E21E-DF58-4BEA-8EA1-EF333BE4D2B3} = {4A1D2DFA-D091-4CD2-B9CB-D7AAA795ABD9} - {F3986DD3-0372-4929-B72A-09D93196541E} = {92F40AFA-8416-40BE-9893-D35E1924C69D} - {3F0181CA-BDF5-4F56-A664-0E82DFD2A8C7} = {F3986DD3-0372-4929-B72A-09D93196541E} {32774681-0D67-48A6-A379-D57015094F85} = {92F40AFA-8416-40BE-9893-D35E1924C69D} {40685EC0-64DF-4742-B8F6-602AFAEFC0EA} = {32774681-0D67-48A6-A379-D57015094F85} {88AD0A79-5286-4C1C-8A58-AAC9E6870CCD} = {92F40AFA-8416-40BE-9893-D35E1924C69D} @@ -269,8 +235,6 @@ Global {4660010F-BB9B-4C8E-B4F7-34AF77080EA0} = {92F40AFA-8416-40BE-9893-D35E1924C69D} {6CAC62DA-A3AF-4BFE-8E1C-0DB9D0D81CD6} = {4660010F-BB9B-4C8E-B4F7-34AF77080EA0} {FAFDC558-45A7-4FF7-BFCE-015EDF58F3AE} = {4660010F-BB9B-4C8E-B4F7-34AF77080EA0} - {8FA1D09B-F5B5-4B42-BF86-53512F1377B2} = {F3986DD3-0372-4929-B72A-09D93196541E} - {1644695E-4B4F-4D7D-833C-7E694E758641} = {F3986DD3-0372-4929-B72A-09D93196541E} {4024A9CA-D6CA-44D7-BEA4-D96891AFC6DD} = {4660010F-BB9B-4C8E-B4F7-34AF77080EA0} {BE3519B8-A573-4C5D-B48C-1FA3CE1E4473} = {92F40AFA-8416-40BE-9893-D35E1924C69D} {6D9909B5-3FF8-493C-B12A-0C312B01C106} = {92F40AFA-8416-40BE-9893-D35E1924C69D} diff --git a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/Masa.Alert.EntityFrameworkCore.PostgreSql.csproj b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/Masa.Alert.EntityFrameworkCore.PostgreSql.csproj index 983fc4a2..4e9d600a 100644 --- a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/Masa.Alert.EntityFrameworkCore.PostgreSql.csproj +++ b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.PostgreSql/Masa.Alert.EntityFrameworkCore.PostgreSql.csproj @@ -20,6 +20,9 @@ PreserveNewest + + PreserveNewest + diff --git a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/Masa.Alert.EntityFrameworkCore.SqlServer.csproj b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/Masa.Alert.EntityFrameworkCore.SqlServer.csproj index fb819a62..9feffeb2 100644 --- a/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/Masa.Alert.EntityFrameworkCore.SqlServer.csproj +++ b/src/Infrastructure/Masa.Alert.EntityFrameworkCore.SqlServer/Masa.Alert.EntityFrameworkCore.SqlServer.csproj @@ -16,6 +16,9 @@ + + PreserveNewest + PreserveNewest diff --git a/src/Services/Masa.Alert.Service/Program.cs b/src/Services/Masa.Alert.Service/Program.cs index 48f1924e..656954e2 100644 --- a/src/Services/Masa.Alert.Service/Program.cs +++ b/src/Services/Masa.Alert.Service/Program.cs @@ -86,7 +86,7 @@ }; builder.Services.AddCache(redisOptions); -builder.Services.AddScoped(); +//builder.Services.AddScoped(); builder.Services.AddAuthClient(masaStackConfig.GetAuthServiceDomain(), redisOptions); builder.Services.AddPmClient(masaStackConfig.GetPmServiceDomain()); builder.Services.AddTscClient(masaStackConfig.GetTscServiceDomain()); diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Certificates/7348307__lonsid.cn.pfx b/src/Web/Masa.Alert.Web.Admin.Server/Certificates/7348307__lonsid.cn.pfx deleted file mode 100644 index 5a014fef30c0300d2c8a2a7062c64545533d4473..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4925 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 diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Dockerfile b/src/Web/Masa.Alert.Web.Admin.Server/Dockerfile deleted file mode 100644 index 5bbd81ba..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM registry.cn-hangzhou.aliyuncs.com/masa/sdk:8.0.203 AS publish -WORKDIR /src -COPY . . -ENV CSPROJ="src/Web/Masa.Alert.Web.Admin.Server/Masa.Alert.Web.Admin.Server.csproj" -RUN dotnet restore $CSPROJ && dotnet publish $CSPROJ -c Release -o /app/publish - - -FROM registry.cn-hangzhou.aliyuncs.com/masa/dotnet_aspnet:6.0.4 -WORKDIR /app -COPY --from=publish /app/publish . -COPY ["src/Web/Masa.Alert.Web.Admin/wwwroot/i18n","wwwroot/i18n"] -ENV ASPNETCORE_URLS=https://0.0.0.0:443 -EXPOSE 80 -EXPOSE 443 -ENTRYPOINT ["dotnet", "Masa.Alert.Web.Admin.Server.dll"] \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Masa.Alert.Web.Admin.Server.csproj b/src/Web/Masa.Alert.Web.Admin.Server/Masa.Alert.Web.Admin.Server.csproj deleted file mode 100644 index 5cfedd88..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Masa.Alert.Web.Admin.Server.csproj +++ /dev/null @@ -1,33 +0,0 @@ - - - - enable - enable - ..\..\..\docker-compose.dcproj - d1f0bc4d-1731-474c-8478-296e92befe3d - Linux - ..\..\.. - false - false - - - - - - - - - - - - - - - - - - PreserveNewest - - - - diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Pages/Error.cshtml b/src/Web/Masa.Alert.Web.Admin.Server/Pages/Error.cshtml deleted file mode 100644 index 478c4449..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Pages/Error.cshtml +++ /dev/null @@ -1,43 +0,0 @@ -@page -@model Masa.Alert.Web.Admin.Pages.ErrorModel - - - - - - - - Error - - - - -
-
-

Error.

-

An error occurred while processing your request.

- - @if (Model.ShowRequestId) - { -

- Request ID: @Model.RequestId -

- } - -

Development Mode

-

- Swapping to the Development environment displays detailed information about the error - that occurred. -

-

- The Development environment shouldn't be enabled for deployed applications. - It can result in displaying sensitive information from exceptions to end users. - For local debugging, enable the Development environment by setting the - ASPNETCORE_ENVIRONMENT environment variable to Development - and restarting the app. -

-
-
- - - diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Pages/Error.cshtml.cs b/src/Web/Masa.Alert.Web.Admin.Server/Pages/Error.cshtml.cs deleted file mode 100644 index 3da20013..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Pages/Error.cshtml.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using System.Diagnostics; - -namespace Masa.Alert.Web.Admin.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/src/Web/Masa.Alert.Web.Admin.Server/Pages/Logout.cshtml b/src/Web/Masa.Alert.Web.Admin.Server/Pages/Logout.cshtml deleted file mode 100644 index 9450fa83..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Pages/Logout.cshtml +++ /dev/null @@ -1,2 +0,0 @@ -@page -@model Masa.Alert.Web.Admin.Server.Pages.LogoutModel diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Pages/Logout.cshtml.cs b/src/Web/Masa.Alert.Web.Admin.Server/Pages/Logout.cshtml.cs deleted file mode 100644 index cef4dbbc..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Pages/Logout.cshtml.cs +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Server.Pages; - -public class LogoutModel : PageModel -{ - public async Task OnGetAsync() - { - if (User.Identity != null && User.Identity.IsAuthenticated == true) - { - // delete local authentication cookie - await HttpContext.SignOutAsync(); - } - - return SignOut( - new AuthenticationProperties - { - RedirectUri = "/" - }, - OpenIdConnectDefaults.AuthenticationScheme, - CookieAuthenticationDefaults.AuthenticationScheme); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Pages/_Host.cshtml b/src/Web/Masa.Alert.Web.Admin.Server/Pages/_Host.cshtml deleted file mode 100644 index 695a6c9c..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Pages/_Host.cshtml +++ /dev/null @@ -1,15 +0,0 @@ -@page "/" -@namespace Masa.Alert.Web.Admin.Pages -@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers -@{ - Layout = "_Layout"; - - var tokens = new TokenProvider - { - AccessToken = await HttpContext.GetTokenAsync(OpenIdConnectParameterNames.AccessToken), - RefreshToken = await HttpContext.GetTokenAsync(OpenIdConnectParameterNames.RefreshToken), - IdToken = await HttpContext.GetTokenAsync(OpenIdConnectParameterNames.IdToken) - }; -} - - diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Pages/_Layout.cshtml b/src/Web/Masa.Alert.Web.Admin.Server/Pages/_Layout.cshtml deleted file mode 100644 index 87c3488d..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Pages/_Layout.cshtml +++ /dev/null @@ -1,48 +0,0 @@ -@using Microsoft.AspNetCore.Components.Web -@namespace Masa.Alert.Web.Admin.Server.Pages -@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers - - - - - - - - Masa.Alert.Web.Admin - - - - - - - - - - - - - - - - - - - @RenderBody() - - - - - - - - - - - - diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Program.cs b/src/Web/Masa.Alert.Web.Admin.Server/Program.cs deleted file mode 100644 index 54730d1b..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Program.cs +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -var builder = WebApplication.CreateBuilder(args); - -ValidatorOptions.Global.LanguageManager = new MasaLanguageManager(); -GlobalValidationOptions.SetDefaultCulture("zh-CN"); - -await builder.Services.AddMasaStackConfigAsync(MasaStackProject.Alert, MasaStackApp.WEB); -var masaStackConfig = builder.Services.GetMasaStackConfig(); - -if (builder.Environment.IsDevelopment()) -{ - builder.Services.AddDaprStarter(opt => - { - opt.AppId = masaStackConfig.GetWebId(MasaStackProject.Alert); - opt.DaprHttpPort = 20604; - opt.DaprGrpcPort = 20603; - }); -} - -builder.Services.AddDaprClient(); - -if (!builder.Environment.IsDevelopment()) -{ - builder.WebHost.UseKestrel(option => - { - option.ConfigureHttpsDefaults(options => - { - options.ServerCertificate = X509Certificate2.CreateFromPemFile("./ssl/tls.crt", "./ssl/tls.key"); - options.CheckCertificateRevocation = false; - }); - }); -} - -// Add services to the container. -builder.Services.AddRazorPages(); -builder.Services.AddServerSideBlazor(); -builder.Services.AddBlazorDownloadFile(); - -builder.Services.AddResponseCompression(opts => -{ - opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat( - new[] { "application/octet-stream" }); -}); - -var tscBaseAddress = masaStackConfig.GetTscServiceDomain(); -var alertBaseAddress = builder.Services.GetMasaConfiguration().ConfigurationApi.GetDefault().GetValue("AppSettings:AlertClient:Url"); - -if (string.IsNullOrEmpty(alertBaseAddress)) -{ - alertBaseAddress = masaStackConfig.GetAlertServiceDomain(); -} - -await builder.Services.AddMasaStackComponentsAsync(MasaStackProject.Alert); - -builder.Services.AddHttpContextAccessor(); -builder.Services.AddGlobalForServer(); - -MasaOpenIdConnectOptions masaOpenIdConnectOptions = new MasaOpenIdConnectOptions -{ - Authority = masaStackConfig.GetSsoDomain(), - ClientId = masaStackConfig.GetWebId(MasaStackProject.Alert), - Scopes = new List { "offline_access" } -}; - -IdentityModelEventSource.ShowPII = true; -builder.Services.AddMasaOpenIdConnect(masaOpenIdConnectOptions); - -builder.Services.AddAlertApiGateways(option => -{ - option.AppId = masaStackConfig.GetServiceId(MasaStackProject.Alert); - option.AuthorityEndpoint = masaOpenIdConnectOptions.Authority; - option.ClientId = masaOpenIdConnectOptions.ClientId; - option.ClientSecret = masaOpenIdConnectOptions.ClientSecret; -}); - -builder.Services.AddTscClient(tscBaseAddress); -builder.Services.AddMapster(); -var assemblies = AppDomain.CurrentDomain.GetAllAssemblies(); -TypeAdapterConfig.GlobalSettings.Scan(assemblies); -builder.Services.AddAutoInject(assemblies); - -StaticWebAssetsLoader.UseStaticWebAssets(builder.Environment, builder.Configuration); - -var app = builder.Build(); - -// Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - app.UseDeveloperExceptionPage(); -} -else -{ - app.UseExceptionHandler("/Error"); - // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. - app.UseHsts(); -} - -app.UseHttpsRedirection(); - -app.UseStaticFiles(); - -app.UseRouting(); - -app.UseAuthentication(); -app.UseAuthorization(); - -app.MapControllers(); -app.MapBlazorHub(); -app.MapFallbackToPage("/_Host"); -app.Run(); \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.Server/Properties/launchSettings.json b/src/Web/Masa.Alert.Web.Admin.Server/Properties/launchSettings.json deleted file mode 100644 index 13f52a0d..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/Properties/launchSettings.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:9877", - "sslPort": 44650 - } - }, - "profiles": { - "Masa.Alert.Web.Admin": { - "commandName": "Project", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development", - "MASA_CLUSTER": "Default", - "DCC_SECRET": "masastack.com", - "ADMIN_PWD": "admin123", - "DOMAIN_NAME": "masastack.com", - "MASA_NAMESPACE": "masastack", - "TLS_NAME": "masastack", - "MASA_VERSION": "1.0-Preview1", - "IS_DEMO": "false", - "OTLP_URL": "http://otel-collector.masastack:9013", - "ELASTIC": "{\"Nodes\": [\"http://es-ydy-new.lonsid.cn:9200\"],\"Index\": \"auth_user_development\"}", - "REDIS": "{\"RedisHost\": \"10.130.0.19\", \"RedisPort\": 2135, \"RedisDb\": 3,\"RedisPassword\": \"Hzss@123\"}", - "CONNECTIONSTRING": "{\"Server\": \"10.130.0.19\", \"Port\": 2415,\"Database\":\"pm-dev\",\"UserId\": \"ss\",\"Password\":\"Hzss@123\"}", - "MASA_STACK": "[{\"id\":\"pm\",\"service\":{\"id\":\"pm-service-dev\",\"domain\":\"http://pm-service-dev.masastack.com\"},\"web\":{\"id\":\"pm-web-dev\",\"domain\":\"https://pm-dev.masastack.com\"}},{\"id\":\"dcc\",\"service\":{\"id\":\"dcc-service-dev\",\"domain\":\"http://dcc-service-dev.masastack.com\"},\"web\":{\"id\":\"dcc-web-dev\",\"domain\":\"https://dcc-dev.masastack.com\"}},{\"id\":\"tsc\",\"service\":{\"id\":\"tsc-service-dev\",\"domain\":\"http://tsc-service-dev.masastack.com\"},\"web\":{\"id\":\"tsc-web-dev\",\"domain\":\"https://tsc-dev.masastack.com\"}},{\"id\":\"alert\",\"service\":{\"id\":\"alert-service-dev\",\"domain\":\"http://alert-service-dev.masastack.com\"},\"web\":{\"id\":\"alert-web-dev\",\"domain\":\"https://alert-dev.masastack.com\"}},{\"id\":\"scheduler\",\"service\":{\"id\":\"scheduler-service-dev\",\"domain\":\"http://scheduler-service-dev.masastack.com\"},\"worker\":{\"id\":\"scheduler-worker-dev\",\"domain\":\"http://scheduler-worker-dev.masastack.com\"},\"web\":{\"id\":\"scheduler-web-dev\",\"domain\":\"https://scheduler-dev.masastack.com\"}},{\"id\":\"mc\",\"service\":{\"id\":\"mc-service-dev\",\"domain\":\"http://mc-service-dev.masastack.com\"},\"web\":{\"id\":\"mc-web-dev\",\"domain\":\"https://mc-dev.masastack.com\"}},{\"id\":\"auth\",\"service\":{\"id\":\"auth-service-dev\",\"domain\":\"http://auth-service-dev.masastack.com\"},\"web\":{\"id\":\"auth-web-dev\",\"domain\":\"https://auth-dev.masastack.com\"},\"sso\":{\"id\":\"auth-sso-dev\",\"domain\":\"https://auth-sso-dev.masastack.com\"}}]", - "MASA_ENVIRONMENT": "Development", - "SUFFIX_IDENTITY": "dev" - }, - "applicationUrl": "https://localhost:19700;http://localhost:19710", - "dotnetRunMessages": true - }, - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "Docker": { - "commandName": "Docker", - "launchBrowser": true, - "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}", - "publishAllPorts": true, - "useSSL": true - } - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.Server/_Imports.cs b/src/Web/Masa.Alert.Web.Admin.Server/_Imports.cs deleted file mode 100644 index ae6ebc64..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/_Imports.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -// System Namespaces -global using System.Security.Cryptography.X509Certificates; - -// Microsoft Namespaces -global using Microsoft.AspNetCore.Authentication; -global using Microsoft.AspNetCore.Authentication.Cookies; -global using Microsoft.AspNetCore.Authentication.OpenIdConnect; -global using Microsoft.AspNetCore.Hosting.StaticWebAssets; -global using Microsoft.AspNetCore.Mvc; -global using Microsoft.AspNetCore.Mvc.RazorPages; -global using Microsoft.AspNetCore.ResponseCompression; -global using Microsoft.IdentityModel.Logging; -global using Microsoft.IdentityModel.Protocols.OpenIdConnect; - -// Third-party Libraries -global using BlazorDownloadFile; -global using FluentValidation; -global using FluentValidation.Resources; -global using Mapster; - -// MASA Building Blocks and Contrib Packages -global using Masa.Contrib.StackSdks.Caller; -global using Masa.Contrib.StackSdks.Config; -global using Masa.Contrib.Configuration.ConfigurationApi.Dcc; -global using Masa.Stack.Components; -global using Masa.Stack.Components.Extensions.OpenIdConnect; - -// MASA Alert Infrastructure and Extensions -global using Masa.Alert.Infrastructure.Common.Extensions; -global using Masa.Alert.ApiGateways.Caller.Extensions; \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.Server/appsettings.Develop.json b/src/Web/Masa.Alert.Web.Admin.Server/appsettings.Develop.json deleted file mode 100644 index e295a58d..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/appsettings.Develop.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Error" - } - }, - "AllowedHosts": "*", - "masa-alert-service": "masa-alert-service-develop" -} - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.Server/appsettings.Development.json b/src/Web/Masa.Alert.Web.Admin.Server/appsettings.Development.json deleted file mode 100644 index 2c0dfece..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/appsettings.Development.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Error" - } - }, - "AllowedHosts": "*", - "masa-alert-service": "masa-alert-service" -} diff --git a/src/Web/Masa.Alert.Web.Admin.Server/appsettings.Staging.json b/src/Web/Masa.Alert.Web.Admin.Server/appsettings.Staging.json deleted file mode 100644 index b88926d2..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/appsettings.Staging.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Error" - } - }, - "AllowedHosts": "*", - "masa-alert-service": "masa-alert-service-staging" -} - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.Server/appsettings.json b/src/Web/Masa.Alert.Web.Admin.Server/appsettings.json deleted file mode 100644 index 87873a24..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Error" - } - }, - "AllowedHosts": "*", - "AppId": "masa-alert-web-admin" -} diff --git a/src/Web/Masa.Alert.Web.Admin.Server/ssl/tls.crt b/src/Web/Masa.Alert.Web.Admin.Server/ssl/tls.crt deleted file mode 100644 index 1198c59b..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/ssl/tls.crt +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIGvzCCBaegAwIBAgIQDst0LJnPKMFkgmyOgbSX+jANBgkqhkiG9w0BAQsFADBf -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMR4wHAYDVQQDExVHZW9UcnVzdCBDTiBSU0EgQ0EgRzEw -HhcNMjIwMzAzMDAwMDAwWhcNMjMwMzE0MjM1OTU5WjCBiTELMAkGA1UEBhMCQ04x -EjAQBgNVBAgMCea1meaxn+ecgTESMBAGA1UEBwwJ5rip5bee5biCMTwwOgYDVQQK -DDPmtZnmsZ/mnJfor5flvrflgaXlurfppa7msLTorr7lpIfogqHku73mnInpmZDl -hazlj7gxFDASBgNVBAMMCyoubG9uc2lkLmNuMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAtbKBcjdZEBM6LMREx/vWuAa81uJpe6IvwKEajHoZ5NRK1CyM -L+VYBeKYhgRmBzgjJW0M16kk094/fgpAfclGswDryDnWGiuiaX2NXOroiPYFcyWX -UnEWYqsdrowbiUvFgPkXWwUwo8/RsV1nC/BiqNhduxLuQti0QkzOBeeurcunaShu -s9qbEjQeBkUUgmH4rK4U+ABv6RvwDfB1JLFFmruc3Wgndv0udylK67p9x7cXE0Wz -OhLQtI3+W5Vg8K2XXX/2AZOs+8jFkxG2x/EUQs4BKBYOvXqULLheFmut/pPxdxlb -2FNpMBq8qb0/U6oCkj2rO433EVvFzKvyx9nAGwIDAQABo4IDSjCCA0YwHwYDVR0j -BBgwFoAUkZ9eMRWuEJ+tYMH3wcyqSDQvDCYwHQYDVR0OBBYEFK/ICh/pYf/R8k57 -H6EKb+MbzgeiMCEGA1UdEQQaMBiCCyoubG9uc2lkLmNugglsb25zaWQuY24wDgYD -VR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjB1BgNV -HR8EbjBsMDSgMqAwhi5odHRwOi8vY3JsMy5kaWdpY2VydC5jb20vR2VvVHJ1c3RD -TlJTQUNBRzEuY3JsMDSgMqAwhi5odHRwOi8vY3JsNC5kaWdpY2VydC5jb20vR2Vv -VHJ1c3RDTlJTQUNBRzEuY3JsMD4GA1UdIAQ3MDUwMwYGZ4EMAQICMCkwJwYIKwYB -BQUHAgEWG2h0dHA6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzBvBggrBgEFBQcBAQRj -MGEwIQYIKwYBBQUHMAGGFWh0dHA6Ly9vY3NwLmRjb2NzcC5jbjA8BggrBgEFBQcw -AoYwaHR0cDovL2NybC5kaWdpY2VydC1jbi5jb20vR2VvVHJ1c3RDTlJTQUNBRzEu -Y3J0MAkGA1UdEwQCMAAwggF9BgorBgEEAdZ5AgQCBIIBbQSCAWkBZwB1AK33vvp8 -/xDIi509nB4+GGq0Zyldz7EMJMqFhjTr3IKKAAABf05aVi0AAAQDAEYwRAIgfqBq -PZpvMHW4aGsR/yucGiC7KeyYu+i7xg7k9gP5wYwCIDw1deL5sim38D6kU6BfkgV2 -YXlXv4TIQ2bLyELEcQ1SAHcANc8ZG7+xbFe/D61MbULLu7YnICZR6j/hKu+oA8M7 -1kwAAAF/TlpWMAAABAMASDBGAiEAwu1ZmZw5+99t+ilr1BryrezjJrolcU+l7a+3 -pK4G44QCIQDaROzJaidunAchCoQdQvkD7sobvJIqrcGi9RwTym2ckQB1ALNzdwfh -hFD4Y4bWBancEQlKeS2xZwwLh9zwAw55NqWaAAABf05aVmUAAAQDAEYwRAIgSM0e -5ypEiVCjJxKsG8zehtL4poEJGWNMnAAdvjhOa48CIACiIljn0KSsANPQgy51yM8y -NF6XS/NoFyAEwNIvf3P8MA0GCSqGSIb3DQEBCwUAA4IBAQCEFau//Q03vuchkVGl -sX+MSYTP0tJK3bXCCKcgrYo2ptoEFE9DJOcPcSF+Drw71G66mfPlT0v9Yvn1WyPg -81KGvBgBv2NHlQFsHy/dyxC1afUmj4E37pd9oI+KJ6yl++G8H1TN+T4PSU+WAneX -JQHmq3+xC3rcEUhqkoojIfT1nnXVKjf9KeHzKBgZwMnz7capvOBQ3pFp5oTDvt+2 -WEHM/pxnwuV+P8D7lJCx3O4DjP5Ww47FPTkq00Q5EzWQ+wy5w3ab3DPjsTmQJyZG -pOTxuh4GDCzfGWLG6uzsdCMOHcF5qxVZuw1MiY/TzJJ0CN9gTBjArE7/SfFi9qrf -HoS9 ------END CERTIFICATE----- \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.Server/ssl/tls.key b/src/Web/Masa.Alert.Web.Admin.Server/ssl/tls.key deleted file mode 100644 index cee682ee..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/ssl/tls.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC1soFyN1kQEzos -xETH+9a4BrzW4ml7oi/AoRqMehnk1ErULIwv5VgF4piGBGYHOCMlbQzXqSTT3j9+ -CkB9yUazAOvIOdYaK6JpfY1c6uiI9gVzJZdScRZiqx2ujBuJS8WA+RdbBTCjz9Gx -XWcL8GKo2F27Eu5C2LRCTM4F566ty6dpKG6z2psSNB4GRRSCYfisrhT4AG/pG/AN -8HUksUWau5zdaCd2/S53KUrrun3HtxcTRbM6EtC0jf5blWDwrZddf/YBk6z7yMWT -EbbH8RRCzgEoFg69epQsuF4Wa63+k/F3GVvYU2kwGrypvT9TqgKSPas7jfcRW8XM -q/LH2cAbAgMBAAECggEAI8KitHqNNls6Z2YnjV6U93on/3jnPtSAZn6urXg4kW9w -3Mp5utF+HgZnc3T5KbGURUDttqJNI7/JqkJVSAxttDxZq3oql9L/r5hs0p1PL+mP -0AZVfn3QZJH+EQT1RHPbxtL/lEP0u0DjKe/SoKhqmoWfCPskVpa0/5mDMOlU2VJ3 -ARdQcFlaUyq66sfEo+sTa+RYBlbtRUfyCW6HBlLBeowWpGjridULTMS9WQUA2wIw -wSFofg374aB8TdYsv5lsU+innHUQ/PK/5+8j7btUXGpsl8d8bvkym8w6Jsf9RC+P -NyGlG3nit7xakWMO6B+J8PMV5BzX0+lFr8mnfg+RwQKBgQDrshNmVxg0MkT/L6+7 -Eb0S4HfdGLxOtneWsgkPtUjp5Bax6S0uGY9KOpce7Vxw417r6yhDjQxf7Gr/ejme -diawv5hvtYortPHu6WMMRhDPC3d1ycs6b+UhkD6QE/YLU4ceezDolc4eJuhsTDMp -ro4JxzTz6X28Zq0BDni9OVso2wKBgQDFWZNKXHc/KPN5q0Xh6oMSN25v8mtx5xG4 -lrCysZKoHpK2ziwHtaOJPZejMPDxRjXbe7+GxNekV8ESEPPeEiB9ie2v0LZs5zhk -CAFpevRDwKVO4TaXPmXkWyRQSXNNa7Du6k5monPdBSVyZg+wxwyWxIYLep3cRyqf -m4eu/OTJwQKBgQDVO48XiHYKSuxnHiJTEPJIkLGAYq+CWswIltthzbXAfK0XmghY -66DaG/W6ci2up9WphF8x9fqbEc2fgll8hhHs1/m2Hrx5XEOAzL7iTMVKO2qBMuZc -4PygB9rCCH0RtCjLJ9KQqW8HklW2HJ4w+I3iRMogXT5240Fjck9Dig9x/wKBgQCR -FIfua8mSWhWbxWira46N7sg2bh3E750ceVNPGrH4+/jZgPnndQXTV79JTipjBT2E -rBWiCsWI4KZkFKhjAip2f9aHoMTrjJPtHeGD3MsDn/Um5vQN/eZEGSi6CTVFnjzF -duTKGPVab3UXA6bXS42arMDqYWr5zCuuiFUYNHwxQQKBgQC9D+dpMfDaFpjxYyi9 -PK2rnzGeYvkN/I6bx/JqwZEKwiYbdTGmVcdi8HVY09051lB2GTnD6E4WcEuQ0j8N -D6a9v8sraRGEeByfvoZOzkplpnORsRJdN9ZmGhZ8R+fXX4piC+et+Ei8oCxviNJA -F3SNL0UoerZ8xuM5Z+lZaIpzew== ------END PRIVATE KEY----- \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/css/error.css b/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/css/error.css deleted file mode 100644 index c65334c7..00000000 --- a/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/css/error.css +++ /dev/null @@ -1,45 +0,0 @@ -.text-danger { - --bs-text-opacity: 1; - color: rgba(var(--bs-danger-rgb),var(--bs-text-opacity)) !important -} - -.valid.modified:not([type=checkbox]) { - outline: 1px solid #26b050; -} - -.invalid { - outline: 1px solid red; -} - -.validation-message { - color: red; -} - -#blazor-error-ui { - background: lightyellow; - bottom: 0; - box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); - display: none; - left: 0; - padding: 0.6rem 1.25rem 0.7rem 1.25rem; - position: fixed; - width: 100%; - z-index: 1000; -} - - #blazor-error-ui .dismiss { - cursor: pointer; - position: absolute; - right: 0.75rem; - top: 0.5rem; - } - -.blazor-error-boundary { - background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121; - padding: 1rem 1rem 1rem 3.7rem; - color: white; -} - - .blazor-error-boundary::after { - content: "An error has occurred." - } diff --git a/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/favicon.ico b/src/Web/Masa.Alert.Web.Admin.Server/wwwroot/favicon.ico deleted file mode 100644 index 63e859b476eff5055e0e557aaa151ca8223fbeef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 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 - - - enable - enable - - - - - - - - - - - - - diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/Program.cs b/src/Web/Masa.Alert.Web.Admin.WebAssembly/Program.cs deleted file mode 100644 index 05e56589..00000000 --- a/src/Web/Masa.Alert.Web.Admin.WebAssembly/Program.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Masa.Alert.Web.Admin; -using Masa.Alert.Web.Admin.WebAssembly; -using Microsoft.AspNetCore.Components.Authorization; -using Microsoft.AspNetCore.Components.Web; -using Microsoft.AspNetCore.Components.WebAssembly.Hosting; - -var builder = WebAssemblyHostBuilder.CreateDefault(args); - -builder.Services.AddAuthorizationCore(); -builder.Services.AddScoped(); - -await builder.Services.AddGlobalForWasmAsync(builder.HostEnvironment.BaseAddress); - -builder.RootComponents.Add(typeof(App), "#app"); -builder.RootComponents.Add("head::after"); -builder.Services.AddMasaBlazor(builder => -{ - builder.UseTheme(option => - { - option.Primary = "#4318FF"; - option.Accent = "#4318FF"; - }); -}); - -await builder.Build().RunAsync(); diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/Properties/launchSettings.json b/src/Web/Masa.Alert.Web.Admin.WebAssembly/Properties/launchSettings.json deleted file mode 100644 index a0e3c6d4..00000000 --- a/src/Web/Masa.Alert.Web.Admin.WebAssembly/Properties/launchSettings.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:9877", - "sslPort": 44650 - } - }, - "profiles": { - "Masa.Alert.Web.Admin": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", - "applicationUrl": "https://localhost:7362;http://localhost:5362", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/css/app.css b/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/css/app.css deleted file mode 100644 index 18df7679..00000000 --- a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/css/app.css +++ /dev/null @@ -1,33 +0,0 @@ -#blazor-error-ui { - background: lightyellow; - bottom: 0; - box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); - display: none; - left: 0; - padding: 0.6rem 1.25rem 0.7rem 1.25rem; - position: fixed; - width: 100%; - z-index: 1000; -} - -#blazor-error-ui .dismiss { - cursor: pointer; - position: absolute; - right: 0.75rem; - top: 0.5rem; -} - -.modal-overlay { - position: fixed; - top: 0; - bottom: 0; - left: 0; - right: 0; - background-color: #F0F3FA; - z-index: 2000; - display: flex; - align-items: center; - justify-content: center; - flex-direction: column; - --sk-color: #4318FF; -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/css/spinkit.min.css b/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/css/spinkit.min.css deleted file mode 100644 index 248e1c3e..00000000 --- a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/css/spinkit.min.css +++ /dev/null @@ -1 +0,0 @@ -:root{--sk-size:40px;--sk-color:#333}.sk-center{margin:auto}.sk-plane{width:var(--sk-size);height:var(--sk-size);background-color:var(--sk-color);animation:sk-plane 1.2s infinite ease-in-out}@keyframes sk-plane{0%{transform:perspective(120px) rotateX(0) rotateY(0)}50%{transform:perspective(120px) rotateX(-180.1deg) rotateY(0)}100%{transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg)}}.sk-chase{width:var(--sk-size);height:var(--sk-size);position:relative;animation:sk-chase 2.5s infinite linear both}.sk-chase-dot{width:100%;height:100%;position:absolute;left:0;top:0;animation:sk-chase-dot 2.0s infinite ease-in-out both}.sk-chase-dot:before{content:'';display:block;width:25%;height:25%;background-color:var(--sk-color);border-radius:100%;animation:sk-chase-dot-before 2.0s infinite ease-in-out both}.sk-chase-dot:nth-child(1){animation-delay:-1.1s}.sk-chase-dot:nth-child(2){animation-delay:-1.0s}.sk-chase-dot:nth-child(3){animation-delay:-0.9s}.sk-chase-dot:nth-child(4){animation-delay:-0.8s}.sk-chase-dot:nth-child(5){animation-delay:-0.7s}.sk-chase-dot:nth-child(6){animation-delay:-0.6s}.sk-chase-dot:nth-child(1):before{animation-delay:-1.1s}.sk-chase-dot:nth-child(2):before{animation-delay:-1.0s}.sk-chase-dot:nth-child(3):before{animation-delay:-0.9s}.sk-chase-dot:nth-child(4):before{animation-delay:-0.8s}.sk-chase-dot:nth-child(5):before{animation-delay:-0.7s}.sk-chase-dot:nth-child(6):before{animation-delay:-0.6s}@keyframes sk-chase{100%{transform:rotate(360deg)}}@keyframes sk-chase-dot{80%,100%{transform:rotate(360deg)}}@keyframes sk-chase-dot-before{50%{transform:scale(0.4)}100%,0%{transform:scale(1.0)}}.sk-bounce{width:var(--sk-size);height:var(--sk-size);position:relative}.sk-bounce-dot{width:100%;height:100%;border-radius:50%;background-color:var(--sk-color);opacity:.6;position:absolute;top:0;left:0;animation:sk-bounce 2s infinite cubic-bezier(0.455,0.03,0.515,0.955)}.sk-bounce-dot:nth-child(2){animation-delay:-1.0s}@keyframes sk-bounce{0%,100%{transform:scale(0)}45%,55%{transform:scale(1)}}.sk-wave{width:var(--sk-size);height:var(--sk-size);display:flex;justify-content:space-between}.sk-wave-rect{background-color:var(--sk-color);height:100%;width:15%;animation:sk-wave 1.2s infinite ease-in-out}.sk-wave-rect:nth-child(1){animation-delay:-1.2s}.sk-wave-rect:nth-child(2){animation-delay:-1.1s}.sk-wave-rect:nth-child(3){animation-delay:-1.0s}.sk-wave-rect:nth-child(4){animation-delay:-0.9s}.sk-wave-rect:nth-child(5){animation-delay:-0.8s}@keyframes sk-wave{0%,40%,100%{transform:scaleY(0.4)}20%{transform:scaleY(1)}}.sk-pulse{width:var(--sk-size);height:var(--sk-size);background-color:var(--sk-color);border-radius:100%;animation:sk-pulse 1.2s infinite cubic-bezier(0.455,0.03,0.515,0.955)}@keyframes sk-pulse{0%{transform:scale(0)}100%{transform:scale(1);opacity:0}}.sk-flow{width:calc(var(--sk-size) * 1.3);height:calc(var(--sk-size) * 1.3);display:flex;justify-content:space-between}.sk-flow-dot{width:25%;height:25%;background-color:var(--sk-color);border-radius:50%;animation:sk-flow 1.4s cubic-bezier(0.455,0.03,0.515,0.955) 0s infinite both}.sk-flow-dot:nth-child(1){animation-delay:-0.30s}.sk-flow-dot:nth-child(2){animation-delay:-0.15s}@keyframes sk-flow{0%,80%,100%{transform:scale(0.3)}40%{transform:scale(1)}}.sk-swing{width:var(--sk-size);height:var(--sk-size);position:relative;animation:sk-swing 1.8s infinite linear}.sk-swing-dot{width:45%;height:45%;position:absolute;top:0;left:0;right:0;margin:auto;background-color:var(--sk-color);border-radius:100%;animation:sk-swing-dot 2s infinite ease-in-out}.sk-swing-dot:nth-child(2){top:auto;bottom:0;animation-delay:-1s}@keyframes sk-swing{100%{transform:rotate(360deg)}}@keyframes sk-swing-dot{0%,100%{transform:scale(0.2)}50%{transform:scale(1)}}.sk-circle{width:var(--sk-size);height:var(--sk-size);position:relative}.sk-circle-dot{width:100%;height:100%;position:absolute;left:0;top:0}.sk-circle-dot:before{content:'';display:block;width:15%;height:15%;background-color:var(--sk-color);border-radius:100%;animation:sk-circle 1.2s infinite ease-in-out both}.sk-circle-dot:nth-child(1){transform:rotate(30deg)}.sk-circle-dot:nth-child(2){transform:rotate(60deg)}.sk-circle-dot:nth-child(3){transform:rotate(90deg)}.sk-circle-dot:nth-child(4){transform:rotate(120deg)}.sk-circle-dot:nth-child(5){transform:rotate(150deg)}.sk-circle-dot:nth-child(6){transform:rotate(180deg)}.sk-circle-dot:nth-child(7){transform:rotate(210deg)}.sk-circle-dot:nth-child(8){transform:rotate(240deg)}.sk-circle-dot:nth-child(9){transform:rotate(270deg)}.sk-circle-dot:nth-child(10){transform:rotate(300deg)}.sk-circle-dot:nth-child(11){transform:rotate(330deg)}.sk-circle-dot:nth-child(1):before{animation-delay:-1.1s}.sk-circle-dot:nth-child(2):before{animation-delay:-1s}.sk-circle-dot:nth-child(3):before{animation-delay:-0.9s}.sk-circle-dot:nth-child(4):before{animation-delay:-0.8s}.sk-circle-dot:nth-child(5):before{animation-delay:-0.7s}.sk-circle-dot:nth-child(6):before{animation-delay:-0.6s}.sk-circle-dot:nth-child(7):before{animation-delay:-0.5s}.sk-circle-dot:nth-child(8):before{animation-delay:-0.4s}.sk-circle-dot:nth-child(9):before{animation-delay:-0.3s}.sk-circle-dot:nth-child(10):before{animation-delay:-0.2s}.sk-circle-dot:nth-child(11):before{animation-delay:-0.1s}@keyframes sk-circle{0%,80%,100%{transform:scale(0)}40%{transform:scale(1)}}.sk-circle-fade{width:var(--sk-size);height:var(--sk-size);position:relative}.sk-circle-fade-dot{width:100%;height:100%;position:absolute;left:0;top:0}.sk-circle-fade-dot:before{content:'';display:block;width:15%;height:15%;background-color:var(--sk-color);border-radius:100%;animation:sk-circle-fade 1.2s infinite ease-in-out both}.sk-circle-fade-dot:nth-child(1){transform:rotate(30deg)}.sk-circle-fade-dot:nth-child(2){transform:rotate(60deg)}.sk-circle-fade-dot:nth-child(3){transform:rotate(90deg)}.sk-circle-fade-dot:nth-child(4){transform:rotate(120deg)}.sk-circle-fade-dot:nth-child(5){transform:rotate(150deg)}.sk-circle-fade-dot:nth-child(6){transform:rotate(180deg)}.sk-circle-fade-dot:nth-child(7){transform:rotate(210deg)}.sk-circle-fade-dot:nth-child(8){transform:rotate(240deg)}.sk-circle-fade-dot:nth-child(9){transform:rotate(270deg)}.sk-circle-fade-dot:nth-child(10){transform:rotate(300deg)}.sk-circle-fade-dot:nth-child(11){transform:rotate(330deg)}.sk-circle-fade-dot:nth-child(1):before{animation-delay:-1.1s}.sk-circle-fade-dot:nth-child(2):before{animation-delay:-1.0s}.sk-circle-fade-dot:nth-child(3):before{animation-delay:-0.9s}.sk-circle-fade-dot:nth-child(4):before{animation-delay:-0.8s}.sk-circle-fade-dot:nth-child(5):before{animation-delay:-0.7s}.sk-circle-fade-dot:nth-child(6):before{animation-delay:-0.6s}.sk-circle-fade-dot:nth-child(7):before{animation-delay:-0.5s}.sk-circle-fade-dot:nth-child(8):before{animation-delay:-0.4s}.sk-circle-fade-dot:nth-child(9):before{animation-delay:-0.3s}.sk-circle-fade-dot:nth-child(10):before{animation-delay:-0.2s}.sk-circle-fade-dot:nth-child(11):before{animation-delay:-0.1s}@keyframes sk-circle-fade{0%,39%,100%{opacity:0;transform:scale(0.6)}40%{opacity:1;transform:scale(1)}}.sk-grid{width:var(--sk-size);height:var(--sk-size)}.sk-grid-cube{width:33.33%;height:33.33%;background-color:var(--sk-color);float:left;animation:sk-grid 1.3s infinite ease-in-out}.sk-grid-cube:nth-child(1){animation-delay:.2s}.sk-grid-cube:nth-child(2){animation-delay:.3s}.sk-grid-cube:nth-child(3){animation-delay:.4s}.sk-grid-cube:nth-child(4){animation-delay:.1s}.sk-grid-cube:nth-child(5){animation-delay:.2s}.sk-grid-cube:nth-child(6){animation-delay:.3s}.sk-grid-cube:nth-child(7){animation-delay:0s}.sk-grid-cube:nth-child(8){animation-delay:.1s}.sk-grid-cube:nth-child(9){animation-delay:.2s}@keyframes sk-grid{0%,70%,100%{transform:scale3D(1,1,1)}35%{transform:scale3D(0,0,1)}}.sk-fold{width:var(--sk-size);height:var(--sk-size);position:relative;transform:rotateZ(45deg)}.sk-fold-cube{float:left;width:50%;height:50%;position:relative;transform:scale(1.1)}.sk-fold-cube:before{content:'';position:absolute;top:0;left:0;width:100%;height:100%;background-color:var(--sk-color);animation:sk-fold 2.4s infinite linear both;transform-origin:100% 100%}.sk-fold-cube:nth-child(2){transform:scale(1.1) rotateZ(90deg)}.sk-fold-cube:nth-child(4){transform:scale(1.1) rotateZ(180deg)}.sk-fold-cube:nth-child(3){transform:scale(1.1) rotateZ(270deg)}.sk-fold-cube:nth-child(2):before{animation-delay:.3s}.sk-fold-cube:nth-child(4):before{animation-delay:.6s}.sk-fold-cube:nth-child(3):before{animation-delay:.9s}@keyframes sk-fold{0%,10%{transform:perspective(140px) rotateX(-180deg);opacity:0}25%,75%{transform:perspective(140px) rotateX(0);opacity:1}90%,100%{transform:perspective(140px) rotateY(180deg);opacity:0}}.sk-wander{width:var(--sk-size);height:var(--sk-size);position:relative}.sk-wander-cube{background-color:var(--sk-color);width:20%;height:20%;position:absolute;top:0;left:0;--sk-wander-distance:calc(var(--sk-size) * 0.75);animation:sk-wander 2.0s ease-in-out -2.0s infinite both}.sk-wander-cube:nth-child(2){animation-delay:-0.5s}.sk-wander-cube:nth-child(3){animation-delay:-1.0s}@keyframes sk-wander{0%{transform:rotate(0)}25%{transform:translateX(var(--sk-wander-distance)) rotate(-90deg) scale(0.6)}50%{transform:translateX(var(--sk-wander-distance)) translateY(var(--sk-wander-distance)) rotate(-179deg)}50.1%{transform:translateX(var(--sk-wander-distance)) translateY(var(--sk-wander-distance)) rotate(-180deg)}75%{transform:translateX(0) translateY(var(--sk-wander-distance)) rotate(-270deg) scale(0.6)}100%{transform:rotate(-360deg)}} diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/decode.min.js b/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/decode.min.js deleted file mode 100644 index faf2e423..00000000 --- a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/decode.min.js +++ /dev/null @@ -1,2605 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - brotli/decode.min.js at master · google/brotli - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - -
- - - -
- - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- -
- - - google  /   - brotli  /   - -
- - - - Type # for issues and pull requests, > for commands, and ? for help - - - Type # for issues, pull requests, and projects, > for commands, and ? for help - - - Type # for issues, pull requests, and projects, / for files, and > for commands - - -
- -
-
- We’ve encountered an error and some results aren't available at this time. Type a new search or try again later. -
-
- - No results matched your search - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - Search for issues and pull requests - - # - - - - Search for issues, pull requests, discussions, and projects - - # - - - - Search for organizations, repositories, and users - - @ - - - - Search for projects - - ! - - - - Search for files - - / - - - - Activate command mode - - > - - - - Search your issues, pull requests, and discussions - - # author:@me - - - - Search your issues, pull requests, and discussions - - # author:@me - - - - Filter to pull requests - - # is:pr - - - - Filter to issues - - # is:issue - - - - Filter to discussions - - # is:discussion - - - - Filter to projects - - # is:project - - - - Filter to open issues, pull requests, and discussions - - # is:open - - - - - - - - - - - - - - - - -
-
-
- -
- - - - - - - - - - -
- - - - -
-
-
- - - - - - - - - - - - - - - - -
- -
- -
-

- - - / - - brotli - - - Public -

- -
- -
    - -
  • - -
    - - - - - - - Watch - - - 347 - - - -
    -
    -

    Messages

    - -
    - -
    -
    - - - - - - - - -
    - - -
    - - - - - Get push messages on iOS or Android. - -
    -
    -
    -
    - - -
    -
    -
    - - - -
  • - -
  • -
    -
    - Fork - 1k - - -
    - -

    Fork brotli

    -
    - -
    - - - - - -

    If this dialog fails to load, you can visit the fork page directly.

    -
    -
    - -
    -
    -
    - -
  • - -
  • - -
    -
    - -
    -
    - -
    -
    - - - - - -
    - -
    -
    - - - - - - - -
    - -
    -
    -
    -
    -
    -
  • - -
  • - - -
  • -
- -
- -
-
- - - - -
- - - -
-
- - Open in github.dev - Open in a new github.dev tab - - - - - - - -
- - - - - Permalink - - -
- -
-
- - - master - - - - -
-
-
- Switch branches/tags - -
- - - -
- -
- -
- - -
- -
- - - - - - - - - - - - - - - - -
- - -
-
-
-
- -
- -
- - - - Go to file - - -
- - - - -
-
-
- - - - -
- -
-
-
 
-
- -
-
 
- Cannot retrieve contributors at this time -
-
- - - - - - - - - - - -
- -
- - -
- - 1 lines (1 sloc) - - 146 KB -
- -
- - - - -
- - - - - - - - - - - - - - - -
- -
-
- -
-
- -
- -
-
- - - -
- - -
- - - - - - - - - -
export let BrotliDecode=(()=>{function f(f){this.data=f,this.offset=0}let w=Int32Array.from([256,402,436,468,500,534,566,598,630,662,694,726,758,790,822,854,886,920,952,984,1016,1048,1080]),b=Int32Array.from([1,2,3,4,0,5,17,6,16,7,8,9,10,11,12,13,14,15]),j=Int32Array.from([0,3,2,1,0,0,0,0,0,0,3,3,3,3,3,3]),l=Int32Array.from([0,0,0,0,-1,1,-2,2,-3,3,-1,1,-2,2,-3,3]),m=Int32Array.from([131072,131076,131075,196610,131072,131076,131075,262145,131072,131076,131075,196610,131072,131076,131075,262149]),p=Int32Array.from([1,5,9,13,17,25,33,41,49,65,81,97,113,145,177,209,241,305,369,497,753,1265,2289,4337,8433,16625]),q=Int32Array.from([2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,7,8,9,10,11,12,13,24]),o=Int16Array.from([0,0,0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,12,14,24]),n=Int16Array.from([0,0,0,0,0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,24]),g=new Int16Array(2816);function k(f){let w=-1,b=16;for(;b>0;)f>>>b!=0&&(w+=b,f>>>=b),b>>=1;return w+f}function s(f,w,b){return 16+w+2*(b<<f)}function v(f,w,b){if(f<b+(2<<w))throw"maxDistance is too small";let j=4+(f-b>>w),l=k(j)-1;return((l-1<<1|j>>l&1)-1<<w)+(1<<w)+b+16}function t(f,w){if(0!=f.j)throw"State MUST be uninitialized";f.l=new Int32Array(3091),f.l[0]=7,f.m=3;let b=v(2147483644,3,120);f.p=new Int8Array(b),f.q=new Int32Array(b),f.input=w,function(f){f.o=new Int8Array(4160),f.g=0,f.k=new Int16Array(2080),f.s=32,f.v=2048,f.t=0,E(f)}(f),f.j=1}function e(f){if(f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),0!=_(f,1)){let w=_(f,3);return 0==w?1:_(f,w)+(1<<w)}return 0}function d(f,w,b){let j=f[w],l=b.g>>>b.s;j+=255&l;let m=f[j]>>16,p=65535&f[j];return m<=8?(b.s+=m,p):(j+=p,j+=(l&(1<<m)-1)>>>8,b.s+=8+(f[j]>>16),65535&f[j])}function H(f,w,b){b.s>=16&&(b.g=b.k[b.v++]<<16|b.g>>>16,b.s-=16);let j=d(f,w,b),l=q[j];return b.s>=16&&(b.g=b.k[b.v++]<<16|b.g>>>16,b.s-=16),p[j]+(l<=16?_(b,l):X(b,l))}function a(f,w){let b=f[w];for(;w>0;w--)f[w]=f[w-1];f[0]=b}function u(f,w,j,l,p){let q=new Int32Array(f),o=new Int32Array(18),n=32,g=0;for(let f=w;f<18&&n>0;f++){let w=b[f];p.s>=16&&(p.g=p.k[p.v++]<<16|p.g>>>16,p.s-=16);let j=p.g>>>p.s&15;p.s+=m[j]>>16;let l=65535&m[j];o[w]=l,0!=l&&(n-=32>>l,g++)}if(0!=n&&1!=g)throw"Corrupted Huffman code histogram";return function(f,w,b,j){let l=0,m=8,p=0,q=0,o=32768,n=new Int32Array(33);for(c(n,n.length-1,5,f,18);l<w&&o>0;){j.v>2030&&C(j),j.s>=16&&(j.g=j.k[j.v++]<<16|j.g>>>16,j.s-=16);let f=j.g>>>j.s&31;j.s+=n[f]>>16;let g=65535&n[f];if(g<16)p=0,b[l++]=g,0!=g&&(m=g,o-=32768>>g);else{let f=g-14,n=0;16==g&&(n=m),q!=n&&(p=0,q=n);let k=p;p>0&&(p-=2,p<<=f),j.s>=16&&(j.g=j.k[j.v++]<<16|j.g>>>16,j.s-=16),p+=_(j,f)+3;let s=p-k;if(l+s>w)throw"symbol + repeatDelta > numSymbols";for(let f=0;f<s;f++)b[l++]=q;0!=q&&(o-=s<<15-q)}}if(0!=o)throw"Unused space";b.fill(0,l,w)}(o,f,q,p),c(j,l,8,q,f)}function z(f,w,b,j,l){l.v>2030&&C(l),l.s>=16&&(l.g=l.k[l.v++]<<16|l.g>>>16,l.s-=16);let m=_(l,2);return 1==m?function(f,w,b,j,l){let m=new Int32Array(w),p=new Int32Array(4),q=1+k(f-1),o=_(l,2)+1;for(let f=0;f<o;f++){l.s>=16&&(l.g=l.k[l.v++]<<16|l.g>>>16,l.s-=16);let b=_(l,q);if(b>=w)throw"Can't readHuffmanCode";p[f]=b}!function(f,w){for(let b=0;b<w-1;++b)for(let j=b+1;j<w;++j)if(f[b]==f[j])throw"Duplicate simple Huffman code symbol"}(p,o);let n=o;switch(4==o&&(n+=_(l,1)),n){case 1:m[p[0]]=1;break;case 2:m[p[0]]=1,m[p[1]]=1;break;case 3:m[p[0]]=1,m[p[1]]=2,m[p[2]]=2;break;case 4:m[p[0]]=2,m[p[1]]=2,m[p[2]]=2,m[p[3]]=2;break;case 5:m[p[0]]=1,m[p[1]]=2,m[p[2]]=3,m[p[3]]=3}return c(b,j,8,m,w)}(f,w,b,j,l):u(w,m,b,j,l)}function h(f,b,j){j.v>2030&&C(j);let l=e(j)+1;if(1==l)return b.fill(0,0,f),l;j.s>=16&&(j.g=j.k[j.v++]<<16|j.g>>>16,j.s-=16);let m=0;0!=_(j,1)&&(m=_(j,4)+1);let p=l+m,q=w[p+31>>5],o=new Int32Array(q+1),n=o.length-1;z(p,p,o,n,j);for(let w=0;w<f;){j.v>2030&&C(j),j.s>=16&&(j.g=j.k[j.v++]<<16|j.g>>>16,j.s-=16);let l=d(o,n,j);if(0==l)b[w]=0,w++;else if(l<=m){j.s>=16&&(j.g=j.k[j.v++]<<16|j.g>>>16,j.s-=16);let m=(1<<l)+_(j,l);for(;0!=m;){if(w>=f)throw"Corrupted context map";b[w]=0,w++,m--}}else b[w]=l-m,w++}return j.s>=16&&(j.g=j.k[j.v++]<<16|j.g>>>16,j.s-=16),1==_(j,1)&&function(f,w){let b=new Int32Array(256);for(let f=0;f<256;f++)b[f]=f;for(let j=0;j<w;j++){let w=255&f[j];f[j]=b[w],0!=w&&a(b,w)}}(b,f),l}function i(f,w,b){let j=f.H,l=4+2*w;f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);let m=d(f.l,2*w,f),p=H(f.l,2*w+1,f);return 1==m?m=j[l+1]+1:0==m?m=j[l]:m-=2,m>=b&&(m-=b),j[l]=j[l+1],j[l+1]=m,p}function r(f){f.u=i(f,0,f.h);let w=f.H[5];f.i=w<<6,f.I=255&f.R[f.i];let b=f.K[w];f.T=b<<9,f.W=f.T+256}function I(f){f.B=i(f,1,f.Y),f.S=f.H[7]}function R(f){f.A=i(f,2,f.V),f.D=f.H[9]<<2}function K(f){if(0!=f.F)return f.P=10,void(f.j=12);f.U=new Int32Array(0),f.C=new Int32Array(0),f.J=new Int32Array(0),f.v>2030&&C(f),function(f){if(f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),f.F=_(f,1),f._=0,f.X=0,f.M=0,0!=f.F&&0!=_(f,1))return;let w=_(f,2)+4;if(7==w){if(f.M=1,0!=_(f,1))throw"Corrupted reserved bit";let w=_(f,2);if(0==w)return;for(let b=0;b<w;b++){f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);let j=_(f,8);if(0==j&&b+1==w&&w>1)throw"Exuberant nibble";f._|=j<<8*b}}else for(let b=0;b<w;b++){f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);let j=_(f,4);if(0==j&&b+1==w&&w>4)throw"Exuberant nibble";f._|=j<<4*b}f._++,0==f.F&&(f.X=_(f,1))}(f),0==f._&&0==f.M||(0!=f.X||0!=f.M?(G(f),f.j=0!=f.M?5:6):f.j=3,0==f.M&&(f.G+=f._,f.G>1<<30&&(f.G=1<<30),f.O<f.Z&&function(f){let w=f.Z;if(w>f.G){let b=f.G;for(;w>>1>b;)w>>=1;0==f.F&&w<16384&&f.Z>=16384&&(w=16384)}if(w<=f.O)return;let b=new Int8Array(w+37);0!=f.L.length&&b.set(f.L.subarray(0,0+f.O),0),f.L=b,f.O=w}(f)))}function T(f,w,b){let j=f.l[2*w];if(b<=1)return f.l[2*w+1]=j,f.l[2*w+2]=j,1<<28;let l=b+2;j+=z(l,l,f.l,2*w,f),f.l[2*w+1]=j;return j+=z(26,26,f.l,2*w+1,f),f.l[2*w+2]=j,H(f.l,2*w+1,f)}function y(f){f.h=e(f)+1,f.u=T(f,0,f.h),f.Y=e(f)+1,f.B=T(f,1,f.Y),f.V=e(f)+1,f.A=T(f,2,f.V),f.v>2030&&C(f),f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),f.N=_(f,2),f.$=_(f,4)<<f.N,f.K=new Int8Array(f.h);for(let w=0;w<f.h;){let b=ff(w+96,f.h);for(;w<b;++w)f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),f.K[w]=_(f,2);f.v>2030&&C(f)}f.R=new Int8Array(f.h<<6);let w=h(f.h<<6,f.R,f);f.ff=1;for(let w=0;w<f.h<<6;w++)if(f.R[w]!=w>>6){f.ff=0;break}f.wf=new Int8Array(f.V<<2);let b=h(f.V<<2,f.wf,f);f.U=Y(256,256,w,f),f.C=Y(704,704,f.Y,f);let j=s(f.N,f.$,24),l=j;1==f.bf&&(j=s(f.N,f.$,62),l=v(2147483644,f.N,f.$)),f.J=Y(j,l,b,f),function(f,w){let b=f.p,j=f.q,l=f.N,m=f.$,p=1<<l,q=1,o=0,n=16;for(let f=0;f<m;++f)b[n]=0,j[n]=f+1,++n;for(;n<w;){let f=m+((2+o<<q)-4<<l)+1;for(let w=0;w<p;++w)b[n]=q,j[n]=f+w,++n;q+=o,o^=1}}(f,l),f.i=0,f.D=0,f.T=512*f.K[0],f.W=f.T+256,f.I=0,f.S=0,f.H[4]=1,f.H[5]=0,f.H[6]=1,f.H[7]=0,f.H[8]=1,f.H[9]=0}function W(f){let w=f.L;if(f._<=0)return M(f),void(f.j=2);let b=ff(f.O-f.jf,f._);if(function(f,w,b,j){if(0!=(7&f.s))throw"Unaligned copyBytes";for(;32!=f.s&&0!=j;)w[b++]=f.g>>>f.s,f.s+=8,j--;if(0==j)return;let l=ff(x(f),j>>1);if(l>0){let m=f.v<<1,p=l<<1;w.set(f.o.subarray(m,m+p),b),b+=p,j-=p,f.v+=l}if(0==j)return;if(x(f)>0){for(f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);0!=j;)w[b++]=f.g>>>f.s,f.s+=8,j--;return void J(f,0)}for(;j>0;){let l=wf(f.input,w,b,j);if(-1==l)throw"Unexpected end of input";b+=l,j-=l}}(f,w,f.jf,b),f._-=b,f.jf+=b,f.jf==f.O)return f.P=6,void(f.j=12);M(f),f.j=2}function B(f){let w=ff(f.lf-f.mf,f.pf-f.qf);return 0!=w&&(f.nf.set(f.L.subarray(f.qf,f.qf+w),f.gf+f.mf),f.mf+=w,f.qf+=w),f.mf<f.lf?1:0}function Y(f,b,j,l){let m=w[b+31>>5],p=new Int32Array(j+j*m),q=j;for(let w=0;w<j;++w)p[w]=q,q+=z(f,b,p,w,l);return p}function S(f){let w=f.O;return 0!=f.kf&&(w=ff(w,f.qf+f.lf-f.mf)),w}function A(f,w){if(f.sf>2147483644)throw"Invalid backward reference";let b=f.sf-f.maxDistance-1-f.vf;if(b<0)!function(f,w,b){-1==f.tf&&function(f){f.ef=new Int8Array(256);let w=8;for(;f.vf-1>>>w!=0;)w++;w-=8,f.tf=w;let b=0,j=0;for(;b<f.vf;){for(;f.df[j+1]<b;)j++;f.ef[b>>>w]=j,b+=1<<w}}(f);let j=f.ef[w>>>f.tf];for(;w>=f.df[j+1];)j++;if(f.vf>w+b)throw"Invalid backward reference";f.m=f.m+1&3,f.H[f.m]=f.sf,f._-=b,f.Hf=j,f.af=w-f.df[j],f.uf=b,f.zf=0}(f,-b-1,f.hf),f.j=14;else{let j=L,l=f.hf;if(l>31)throw"Invalid backward reference";let m=$[l];if(0==m)throw"Invalid backward reference";let p=N[l],q=b>>>m;p+=(b&(1<<m)-1)*l;let o=F;if(q>=o.if)throw"Invalid backward reference";let n=function(f,w,b,j,l,m,p){let q=w,o=m.rf,n=m.If,g=m.Rf,k=3*p,s=o[k],v=o[k+1],t=o[k+2],e=g[s],d=g[s+1],H=g[t],a=g[t+1],u=v-11,z=v-0;(u<1||u>9)&&(u=0);(z<1||z>9)&&(z=0);for(;e!=d;)f[q++]=n[e++];u>l&&(u=l);j+=u,l-=u;let h=l-=z;for(;h>0;)f[q++]=b[j++],h--;if(10==v||11==v){let w=q-l;for(10==v&&(l=1);l>0;){let b=255&f[w];b<192?(b>=97&&b<=122&&(f[w]^=32),w+=1,l-=1):b<224?(f[w+1]^=32,w+=2,l-=2):(f[w+2]^=5,w+=3,l-=3)}}else if(21==v||22==v){let w=q-l,b=m.Kf[p],j=16777216-(32768&b)+(32767&b);for(;l>0;){let b=1,m=255&f[w];if(m<128)j+=m,f[w]=127&j;else if(m<192);else if(m<224)if(l>=2){let l=f[w+1];j+=63&l|(31&m)<<6,f[w]=192|j>>6&31,f[w+1]=192&l|63&j,b=2}else b=l;else if(m<240)if(l>=3){let l=f[w+1],p=f[w+2];j+=63&p|(63&l)<<6|(15&m)<<12,f[w]=224|j>>12&15,f[w+1]=192&l|j>>6&63,f[w+2]=192&p|63&j,b=3}else b=l;else if(m<248)if(l>=4){let l=f[w+1],p=f[w+2],q=f[w+3];j+=63&q|(63&p)<<6|(63&l)<<12|(7&m)<<18,f[w]=240|j>>18&7,f[w+1]=192&l|j>>12&63,f[w+2]=192&p|j>>6&63,f[w+3]=192&q|63&j,b=4}else b=l;w+=b,l-=b,21==v&&(l=0)}}for(;H!=a;)f[q++]=n[H++];return q-w}(f.L,f.jf,j,p,l,o,q);if(f.jf+=n,f._-=n,f.jf>=w)return f.P=4,void(f.j=12);f.j=4}}function V(f,w){let b=f.jf,j=b;for(;f.uf!=f.zf;){let j=w-b,n=f.df[f.Hf+1]-f.df[f.Hf]-f.af,g=f.uf-f.zf;if(g>n&&(g=n),g>j&&(g=j),l=f.L,m=b,p=f.Tf[f.Hf],q=f.af,o=f.af+g,l.set(p.slice(q,o),m),b+=g,f.af+=g,f.zf+=g,g==n&&(f.Hf++,f.af=0),b>=w)break}var l,m,p,q,o;return b-j}function D(f){if(0==f.j)throw"Can't decompress until initialized";if(11==f.j)throw"Can't decompress after close";if(1==f.j){let w=function(f){let w=f.bf;if(f.bf=0,f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),0==_(f,1))return 16;let b=_(f,3);return 0!=b?17+b:(b=_(f,3),0!=b?1==b?0==w?-1:(f.bf=1,1==_(f,1)?-1:(b=_(f,6),b<10||b>30?-1:b)):8+b:17)}(f);if(-1==w)throw"Invalid 'windowBits' code";f.Z=1<<w,f.yf=f.Z-16,f.j=2}let w=S(f),b=f.O-1,m=f.L;for(;10!=f.j;)switch(f.j){case 2:if(f._<0)throw"Invalid metablock length";K(f),w=S(f),b=f.O-1,m=f.L;continue;case 3:y(f),f.j=4;case 4:if(f._<=0){f.j=2;continue}f.v>2030&&C(f),0==f.B&&I(f),f.B--,f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);let p=d(f.C,f.S,f)<<2,q=g[p],o=g[p+1],n=g[p+2];f.Wf=g[p+3],f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);let k=255&q;f.Bf=o+(k<=16?_(f,k):X(f,k)),f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);let s=q>>8;f.hf=n+(s<=16?_(f,s):X(f,s)),f.Yf=0,f.j=7;case 7:if(0!=f.ff){for(;f.Yf<f.Bf;)if(f.v>2030&&C(f),0==f.u&&r(f),f.u--,f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),m[f.jf]=d(f.U,f.I,f),f.jf++,f.Yf++,f.jf>=w){f.P=7,f.j=12;break}}else{let j=255&m[f.jf-1&b],l=255&m[f.jf-2&b];for(;f.Yf<f.Bf;){f.v>2030&&C(f),0==f.u&&r(f);let b=O[f.T+j]|O[f.W+l],p=255&f.R[f.i+b];if(f.u--,l=j,f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),j=d(f.U,p,f),m[f.jf]=j,f.jf++,f.Yf++,f.jf>=w){f.P=7,f.j=12;break}}}if(7!=f.j)continue;if(f._-=f.Bf,f._<=0){f.j=4;continue}let v=f.Wf;if(v<0)f.sf=f.H[f.m];else{f.v>2030&&C(f),0==f.A&&R(f),f.A--,f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);let w=255&f.wf[f.D+v];if(v=d(f.J,w,f),v<16){let w=f.m+j[v]&3;if(f.sf=f.H[w]+l[v],f.sf<0)throw"Negative distance"}else{let w,b=f.p[v];f.s+b<=32?w=_(f,b):(f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),w=b<=16?_(f,b):X(f,b)),f.sf=f.q[v]+(w<<f.N)}}if(f.maxDistance!=f.yf&&f.jf<f.yf?f.maxDistance=f.jf:f.maxDistance=f.yf,f.sf>f.maxDistance){f.j=9;continue}if(v>0&&(f.m=f.m+1&3,f.H[f.m]=f.sf),f.hf>f._)throw"Invalid backward reference";f.Yf=0,f.j=8;case 8:let t=f.jf-f.sf&b,e=f.jf,H=f.hf-f.Yf,a=t+H,u=e+H;if(a<b&&u<b){if(H<12||a>e&&u>t)for(let f=0;f<H;f+=4)m[e++]=m[t++],m[e++]=m[t++],m[e++]=m[t++],m[e++]=m[t++];else m.copyWithin(e,t,a);f.Yf+=H,f._-=H,f.jf+=H}else for(;f.Yf<f.hf;)if(m[f.jf]=m[f.jf-f.sf&b],f._--,f.jf++,f.Yf++,f.jf>=w){f.P=8,f.j=12;break}8==f.j&&(f.j=4);continue;case 9:A(f,w);continue;case 14:if(f.jf+=V(f,w),f.jf>=w)return f.P=14,void(f.j=12);f.j=4;continue;case 5:for(;f._>0;)f.v>2030&&C(f),f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),_(f,8),f._--;f.j=2;continue;case 6:W(f);continue;case 12:f.pf=ff(f.jf,f.O),f.j=13;case 13:if(0==B(f))return;f.jf>=f.yf&&(f.maxDistance=f.yf),f.jf>=f.O&&(f.jf>f.O&&m.copyWithin(0,f.O,f.jf),f.jf&=b,f.qf=0),f.j=f.P;continue;default:throw"Unexpected state "+f.j}if(10==f.j){if(f._<0)throw"Invalid metablock length";G(f),J(f,1)}}!function(f){let w=new Int16Array(24),b=new Int16Array(24);b[0]=2;for(let f=0;f<23;++f)w[f+1]=w[f]+(1<<o[f]),b[f+1]=b[f]+(1<<n[f]);for(let j=0;j<704;++j){let l=j>>>6,m=-4;l>=2&&(l-=2,m=0);let p=(170064>>>2*l&3)<<3|j>>>3&7,q=(156228>>>2*l&3)<<3|7&j,g=b[q],k=m+(g>4?3:g-2),s=4*j;f[s+0]=o[p]|n[q]<<8,f[s+1]=w[p],f[s+2]=b[q],f[s+3]=k}}(g);let F=new function(f,w,b){this.if=0,this.rf=new Int32Array(0),this.If=new Int8Array(0),this.Rf=new Int32Array(0),this.Kf=new Int16Array(0),this.if=f,this.rf=new Int32Array(3*f),this.Kf=new Int16Array(f),this.If=new Int8Array(w),this.Rf=new Int32Array(b+1)}(121,167,50);function Q(f,w){let b=1<<w-1;for(;0!=(f&b);)b>>=1;return(f&b-1)+b}function P(f,w,b,j,l){do{f[w+(j-=b)]=l}while(j>0)}function U(f,w,b){let j=1<<w-b;for(;w<15&&(j-=f[w],!(j<=0));)w++,j<<=1;return w-b}function c(f,w,b,j,l){let m,p,q=f[w],o=new Int32Array(l),n=new Int32Array(16),g=new Int32Array(16);for(p=0;p<l;p++)n[j[p]]++;g[1]=0;for(let f=1;f<15;f++)g[f+1]=g[f]+n[f];for(p=0;p<l;p++)0!=j[p]&&(o[g[j[p]]++]=p);let k=b,s=1<<k,v=s;if(1==g[15]){for(m=0;m<v;m++)f[q+m]=o[0];return v}m=0,p=0;for(let w=1,j=2;w<=b;w++,j<<=1)for(;n[w]>0;n[w]--)P(f,q+m,j,s,w<<16|o[p++]),m=Q(m,w);let t=v-1,e=-1,d=q;for(let w=b+1,j=2;w<=15;w++,j<<=1)for(;n[w]>0;n[w]--)(m&t)!=e&&(d+=s,k=U(n,w,b),s=1<<k,v+=s,e=m&t,f[q+e]=k+b<<16|d-q-e),P(f,d+(m>>b),j,s,w-b<<16|o[p++]),m=Q(m,w);return v}function C(f){if(0!=f.t){if(x(f)>=-2)return;throw"No more input"}let w=f.v<<1,b=4096-w;for(f.o.copyWithin(0,w,4096),f.v=0;b<4096;){let w=4096-b,j=wf(f.input,f.o,b,w);if(j<=0){f.t=1,f.Sf=b,b+=1;break}b+=j}!function(f,w){let b=f.o,j=w>>1,l=f.k;for(let f=0;f<j;++f)l[f]=255&b[2*f]|(255&b[2*f+1])<<8}(f,b)}function J(f,w){if(0==f.t)return;let b=(f.v<<1)+(f.s+7>>3)-4;if(b>f.Sf)throw"Read after end";if(0!=w&&b!=f.Sf)throw"Unused bytes after end"}function _(f,w){let b=f.g>>>f.s&(1<<w)-1;return f.s+=w,b}function X(f,w){let b=_(f,16);return f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16,b|_(f,w-16)<<16}function E(f){f.v>2030&&C(f),J(f,0),f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16,f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16}function M(f){32==f.s&&E(f)}function G(f){let w=32-f.s&7;if(0!=w){if(0!=_(f,w))throw"Corrupted padding bits"}}function x(f){let w=2048;return 0!=f.t&&(w=f.Sf+1>>1),w-f.v}!function(f,w,b,j,l){let m=j.length,p=1,q=0;for(let b=0;b<m;++b){let l=j.charCodeAt(b);35==l?w[p++]=q:f[q++]=l}for(let f=0;f<363;++f)b[f]=l.charCodeAt(f)-32}(F.If,F.Rf,F.rf,'# #s #, #e #.# the #.com/#\xc2\xa0# of # and # in # to #"#">#\n#]# for # a # that #. # with #\'# from # by #. The # on # as # is #ing #\n\t#:#ed #(# at #ly #="# of the #. This #,# not #er #al #=\'#ful #ive #less #est #ize #ous #'," !! ! , *! &! \" ! ) * * - ! # ! #!*! + ,$ ! - % . / # 0 1 . \" 2 3!* 4% ! # / 5 6 7 8 0 1 & $ 9 + : ; < ' != > ?! 4 @ 4 2 & A *# ( B C& ) % ) !*# *-% A +! *. D! %' & E *6 F G% ! *A *% H! D I!+! J!+ K +- *4! A L!*4 M N +6 O!*% +.! K *G P +%( ! G *D +D Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K");let O=new Int32Array(2048);function Z(){this.L=new Int8Array(0),this.K=new Int8Array(0),this.R=new Int8Array(0),this.wf=new Int8Array(0),this.p=new Int8Array(0),this.nf=new Int8Array(0),this.o=new Int8Array(0),this.k=new Int16Array(0),this.Af=new Int32Array(0),this.H=new Int32Array(0),this.l=new Int32Array(0),this.U=new Int32Array(0),this.C=new Int32Array(0),this.J=new Int32Array(0),this.q=new Int32Array(0),this.j=0,this.P=0,this.g=0,this.s=0,this.v=0,this.Sf=0,this.t=0,this._=0,this.F=0,this.X=0,this.M=0,this.u=0,this.h=0,this.B=0,this.Y=0,this.A=0,this.V=0,this.jf=0,this.maxDistance=0,this.m=0,this.ff=0,this.I=0,this.S=0,this.Yf=0,this.Bf=0,this.i=0,this.D=0,this.T=0,this.W=0,this.Wf=0,this.$=0,this.N=0,this.sf=0,this.hf=0,this.yf=0,this.Z=0,this.O=0,this.G=0,this.gf=0,this.lf=0,this.mf=0,this.qf=0,this.pf=0,this.kf=0,this.bf=0,this.Vf=0,this.vf=0,this.Hf=0,this.af=0,this.uf=0,this.zf=0,this.Tf=new Array(0),this.df=new Int32Array(0),this.tf=0,this.ef=new Int8Array(0),this.input=null,this.L=new Int8Array(0),this.H=new Int32Array(10),this.H[0]=16,this.H[1]=15,this.H[2]=11,this.H[3]=4}!function(f,w,b){for(let w=0;w<256;++w)f[w]=63&w,f[512+w]=w>>2,f[1792+w]=2+(w>>6);for(let b=0;b<128;++b)f[1024+b]=4*(w.charCodeAt(b)-32);for(let w=0;w<64;++w)f[1152+w]=1&w,f[1216+w]=2+(1&w);let j=1280;for(let w=0;w<19;++w){let l=3&w,m=b.charCodeAt(w)-32;for(let w=0;w<m;++w)f[j++]=l}for(let w=0;w<16;++w)f[1792+w]=1,f[2032+w]=6;f[1792]=0,f[2047]=7;for(let w=0;w<256;++w)f[1536+w]=f[1792+w]<<3}(O," !! ! \"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# ","A/* ': & : $ \x81 @");let L=null,N=new Int32Array(32),$=new Int32Array(32);{let f=new Int8Array(122784),w=new Int32Array(25);!function(f,w,b,j,l,m){let p=function(f){let w=f.length,b=new Int8Array(w);for(let j=0;j<w;++j)b[j]=f.charCodeAt(j);return b}(w+b);if(p.length!=f.length)throw"Corrupted brotli dictionary";let q=0,o=j.length;for(let f=0;f<o;f+=2){let w=j.charCodeAt(f)-36,b=j.charCodeAt(f+1)-36;for(let f=0;f<w;++f)p[q]^=3,q++;for(let f=0;f<b;++f)p[q]^=236,q++}for(let f=0;f<m.length;++f)l[f]=m.charCodeAt(f)-65;f.set(p)}(f,'wjnfgltmojefofewab`h`lgfgbwbpkltlmozpjwf`jwzlsfmivpwojhfeqfftlqhwf{wzfbqlufqalgzolufelqnallhsobzojufojmfkfosklnfpjgfnlqftlqgolmdwkfnujftejmgsbdfgbzpevookfbgwfqnfb`kbqfbeqlnwqvfnbqhbaofvslmkjdkgbwfobmgmftpfufmmf{w`bpfalwkslpwvpfgnbgfkbmgkfqftkbwmbnfOjmhaoldpjyfabpfkfognbhfnbjmvpfq$*#(klogfmgptjwkMftpqfbgtfqfpjdmwbhfkbufdbnfpffm`boosbwktfoosovpnfmvejonsbqwiljmwkjpojpwdllgmffgtbzptfpwilapnjmgboploldlqj`kvpfpobpwwfbnbqnzellghjmdtjoofbpwtbqgafpwejqfSbdfhmltbtbz-smdnlufwkbmolbgdjufpfoemlwfnv`keffgnbmzql`hj`lmlm`follhkjgfgjfgKlnfqvofklpwbib{jmel`ovaobtpofppkboeplnfpv`kylmf233&lmfp`bqfWjnfqb`faovfelvqtffheb`fklsfdbufkbqgolpwtkfmsbqhhfswsbpppkjsqllnKWNOsobmWzsfglmfpbufhffseobdojmhplogejufwllhqbwfwltmivnswkvpgbqh`bqgejofefbqpwbzhjoowkbweboobvwlfufq-`lnwbohpklsulwfgffsnlgfqfpwwvqmalqmabmgefooqlpfvqo+phjmqlof`lnfb`wpbdfpnffwdlog-isdjwfnubqzefowwkfmpfmggqlsUjft`lsz2-3!?,b=pwlsfopfojfpwlvqsb`h-djesbpw`pp<dqbznfbm%dw8qjgfpklwobwfpbjgqlbgubq#effoilkmqj`hslqwebpw$VB.gfbg?,a=sllqajoowzsfV-P-tllgnvpw1s{8JmelqbmhtjgftbmwtbooofbgX3^8sbvotbufpvqf\'+$ tbjwnbppbqnpdlfpdbjmobmdsbjg"..#ol`hvmjwqllwtbohejqntjef{no!plmdwfpw13s{hjmgqltpwlloelmwnbjopbefpwbqnbsp`lqfqbjmeoltabazpsbmpbzp7s{85s{8bqwpellwqfbotjhjkfbwpwfswqjslqd,obhftfbhwlogElqn`bpwebmpabmhufqzqvmpivozwbph2s{8dlbodqftpoltfgdfjg>!pfwp6s{8-ip<73s{je#+pllmpfbwmlmfwvafyfqlpfmwqffgeb`wjmwldjewkbqn2;s{`bnfkjooalogyllnuljgfbpzqjmdejoosfbhjmjw`lpw0s{8ib`hwbdpajwpqloofgjwhmftmfbq?"..dqltIPLMgvwzMbnfpbofzlv#olwpsbjmibyy`logfzfpejpkttt-qjphwbapsqfu23s{qjpf16s{Aovfgjmd033/abooelqgfbqmtjogal{-ebjqob`hufqpsbjqivmfwf`kje+"sj`hfujo\'+! tbqnolqgglfpsvoo/333jgfbgqbtkvdfpslwevmgavqmkqfe`foohfzpwj`hklvqolppevfo21s{pvjwgfboQPP!bdfgdqfzDFW!fbpfbjnpdjqobjgp;s{8mbuzdqjgwjsp :::tbqpobgz`bqp*8#~sks<kfoowbootklnyk9\t),\x0e\t#233kboo-\t\tB4s{8svpk`kbw3s{8`qft),?,kbpk46s{eobwqbqf#%%#wfoo`bnslmwlobjgnjppphjswfmwejmfnbofdfwpsolw733/\x0e\t\x0e\t`lloeffw-sks?aq=fqj`nlpwdvjgafoogfp`kbjqnbwkbwln,jnd% ;1ov`h`fmw3338wjmzdlmfkwnopfoogqvdEQFFmlgfmj`h<jg>olpfmvooubpwtjmgQPP#tfbqqfozaffmpbnfgvhfmbpb`bsftjpkdvoeW109kjwppolwdbwfhj`haovqwkfz26s{$$*8*8!=npjftjmpajqgplqwafwbpffhW2;9lqgpwqffnboo53s{ebqn\x0elupalzpX3^-$*8!SLPWafbqhjgp*8~~nbqzwfmg+VH*rvbgyk9\n.pjy....sqls$*8\x0eojewW2:9uj`fbmgzgfaw=QPPsllomf`haoltW259gllqfuboW249ofwpebjolqbosloomlub`lopdfmf#\x0elxplewqlnfwjooqlpp?k0=slvqebgfsjmh?wq=njmj*\x7f"+njmfyk9\x04abqpkfbq33*8njoh#..=jqlmeqfggjphtfmwpljosvwp,ip,klozW119JPAMW139bgbnpffp?k1=iplm$/#$`lmwW129#QPPollsbpjbnllm?,s=plvoOJMFelqw`bqwW279?k2=;3s{"..?:s{8W379njhf975Ymj`fjm`kZlqhqj`fyk9\b$**8svqfnbdfsbqbwlmfalmg904Y\\le\\$^*8333/yk9\vwbmhzbqgaltoavpk965YIbub03s{\t\x7f~\t&@0&907YifeeF[SJ`bpkujpbdloepmltyk9\x05rvfq-`pppj`hnfbwnjm-ajmggfookjqfsj`pqfmw905YKWWS.132elwltloeFMG#{al{967YALGZgj`h8\t~\tf{jw906Yubqpafbw$~*8gjfw:::8bmmf~~?,Xj^-Obmdhn.^tjqfwlzpbggppfbobof{8\t\n~f`klmjmf-lqd336*wlmziftppbmgofdpqlle333*#133tjmfdfbqgldpallwdbqz`vwpwzofwfnswjlm-{no`l`hdbmd\'+$-63s{Sk-Gnjp`bobmolbmgfphnjofqzbmvmj{gjp`*8~\tgvpw`ojs*-\t\t43s{.133GUGp4^=?wbsfgfnlj((*tbdffvqlskjolswpklofEBRpbpjm.15WobapsfwpVQO#avoh`llh8~\x0e\tKFBGX3^*baaqivbm+2:;ofpkwtjm?,j=plmzdvzpev`hsjsf\x7f.\t"331*mgltX2^8X^8\tOld#pbow\x0e\t\n\nabmdwqjnabwk*x\x0e\t33s{\t~*8hl9\0effpbg=\x0ep9,,#X^8wloosovd+*x\tx\x0e\t#-ip$133sgvboalbw-ISD*8\t~rvlw*8\t\t$*8\t\x0e\t~\x0e1327132613251324132;132:13131312131113101317131613151314131;131:130313021301130013071306130513041320132113221323133:133;133413351336133713301331133213332:::2::;2::42::52::62::72::02::12::22::32:;:2:;;2:;42:;52:;62:;72:;02:;12:;22:;32:4:2:4;2:442:452:462:472:402:412:422:432:5:2:5;2:542:552:562:572:502:512:522:532:6:2:6;2:642:652:662:672:602:612:622:632333231720:73333::::`lnln/Mpfpwffpwbsfqlwlglkb`f`bgbb/]lajfmg/Abbp/Aujgb`bpllwqlelqlplollwqb`vbogjilpjgldqbmwjslwfnbgfafbodlrv/Efpwlmbgbwqfpsl`l`bpbabilwlgbpjmlbdvbsvfpvmlpbmwfgj`fovjpfoobnbzlylmbbnlqsjpllaqb`oj`foolgjlpklqb`bpj<[<\\<Q<\\<R<P=l<\\=l=o=n<\\<Q<Y<S<R<R=n<T<[<Q<R<X<R=n<R<Z<Y<R<Q<T=i<q<\\<Y<Y<]=g<P=g<~=g=m<R<^=g<^<R<q<R<R<]<s<R<W<T<Q<T<L<H<q<Y<p=g=n=g<r<Q<T<P<X<\\<{<\\<x<\\<q=o<r<]=n<Y<t<[<Y<U<Q=o<P<P<N=g=o<Z5m5f4O5j5i4K5i4U5o5h4O5d4]4C5f4K5m5e5k5d5h5i5h5o4K5d5h5k4D4_4K5h4I5j5k5f4O5f5n4C5k5h4G5i4D5k5h5d5h5f4D5h4K5f4D5o4X5f4K5i4O5i5j4F4D5f5h5j4A4D5k5i5i4X5d4Xejqpwujgflojdkwtlqognfgjbtkjwf`olpfaob`hqjdkwpnbooallhpsob`fnvpj`ejfoglqgfqsljmwubovfofufowbaofalbqgklvpfdqlvstlqhpzfbqppwbwfwlgbztbwfqpwbqwpwzofgfbwksltfqsklmfmjdkwfqqlqjmsvwbalvwwfqnpwjwofwllopfufmwol`bowjnfpobqdftlqgpdbnfppklqwpsb`fel`vp`ofbqnlgfoaol`hdvjgfqbgjlpkbqftlnfmbdbjmnlmfzjnbdfmbnfpzlvmdojmfpobwfq`lolqdqffmeqlmw%bns8tbw`kelq`fsqj`fqvofpafdjmbewfqujpjwjppvfbqfbpafoltjmgf{wlwboklvqpobafosqjmwsqfppavjowojmhppsffgpwvgzwqbgfelvmgpfmpfvmgfqpkltmelqnpqbmdfbggfgpwjoonlufgwbhfmbalufeobpkej{fglewfmlwkfqujftp`kf`hofdboqjufqjwfnprvj`hpkbsfkvnbmf{jpwdljmdnlujfwkjqgabpj`sfb`fpwbdftjgwkoldjmjgfbptqlwfsbdfpvpfqpgqjufpwlqfaqfbhplvwkulj`fpjwfpnlmwktkfqfavjogtkj`kfbqwkelqvnwkqffpslqwsbqwz@oj`holtfqojufp`obppobzfqfmwqzpwlqzvpbdfplvmg`lvqwzlvq#ajqwkslsvswzsfpbssozJnbdfafjmdvssfqmlwfpfufqzpkltpnfbmpf{wqbnbw`kwqb`hhmltmfbqozafdbmpvsfqsbsfqmlqwkofbqmdjufmmbnfgfmgfgWfqnpsbqwpDqlvsaqbmgvpjmdtlnbmebopfqfbgzbvgjlwbhfptkjof-`ln,ojufg`bpfpgbjoz`kjogdqfbwivgdfwklpfvmjwpmfufqaqlbg`lbpw`lufqbssofejofp`z`ofp`fmfsobmp`oj`htqjwfrvffmsjf`ffnbjoeqbnflogfqsklwlojnjw`b`kf`jujop`boffmwfqwkfnfwkfqfwlv`kalvmgqlzbobphfgtklofpjm`fpwl`h#mbnfebjwkkfbqwfnswzleefqp`lsfltmfgnjdkwboavnwkjmhaollgbqqbznbilqwqvpw`bmlmvmjlm`lvmwubojgpwlmfPwzofOldjmkbsszl``vqofew9eqfpkrvjwfejonpdqbgfmffgpvqabmejdkwabpjpklufqbvwl8qlvwf-kwnonj{fgejmboZlvq#pojgfwlsj`aqltmbolmfgqbtmpsojwqfb`kQjdkwgbwfpnbq`krvlwfdllgpOjmhpglvawbpzm`wkvnaboolt`kjfezlvwkmlufo23s{8pfqufvmwjokbmgp@kf`hPsb`frvfqzibnfpfrvbowtj`f3/333Pwbqwsbmfoplmdpqlvmgfjdkwpkjewtlqwkslpwpofbgptffhpbuljgwkfpfnjofpsobmfpnbqwboskbsobmwnbqhpqbwfpsobzp`objnpbofpwf{wppwbqptqlmd?,k0=wkjmd-lqd,nvowjkfbqgSltfqpwbmgwlhfmplojg+wkjpaqjmdpkjsppwbeewqjfg`boopevoozeb`wpbdfmwWkjp#,,..=bgnjmfdzswFufmw26s{8Fnbjowqvf!`qlpppsfmwaoldpal{!=mlwfgofbuf`kjmbpjyfpdvfpw?,k7=qlalwkfbuzwqvf/pfufmdqbmg`qjnfpjdmpbtbqfgbm`fskbpf=?"..fm\\VP% 0:8133s{\\mbnfobwjmfmilzbib{-bwjlmpnjwkV-P-#klogpsfwfqjmgjbmbu!=`kbjmp`lqf`lnfpgljmdsqjlqPkbqf2::3pqlnbmojpwpibsbmeboopwqjboltmfqbdqff?,k1=bavpfbofqwlsfqb!.,,T`bqgpkjoopwfbnpSklwlwqvwk`ofbm-sks<pbjmwnfwboolvjpnfbmwsqlleaqjfeqlt!=dfmqfwqv`hollhpUbovfEqbnf-mfw,..=\t?wqz#x\tubq#nbhfp`lpwpsobjmbgvowrvfpwwqbjmobalqkfosp`bvpfnbdj`nlwlqwkfjq163s{ofbpwpwfsp@lvmw`lvogdobpppjgfpevmgpklwfobtbqgnlvwknlufpsbqjpdjufpgvw`kwf{bpeqvjwmvoo/\x7f\x7fX^8wls!=\t?"..SLPW!l`fbm?aq,=eollqpsfbhgfswk#pjyfabmhp`bw`k`kbqw13s{8bojdmgfboptlvog63s{8vqo>!sbqhpnlvpfNlpw#---?,bnlmdaqbjmalgz#mlmf8abpfg`bqqzgqbewqfefqsbdf\\klnf-nfwfqgfobzgqfbnsqlufiljmw?,wq=gqvdp?"..#bsqjojgfboboofmf{b`welqwk`lgfpoldj`Ujft#pffnpaobmhslqwp#+133pbufg\\ojmhdlbopdqbmwdqffhklnfpqjmdpqbwfg03s{8tklpfsbqpf+*8!#Aol`hojmv{ilmfpsj{fo$*8!=*8je+.ofewgbujgklqpfEl`vpqbjpfal{fpWqb`hfnfmw?,fn=abq!=-pq`>wltfqbow>!`baofkfmqz17s{8pfwvsjwbozpkbqsnjmlqwbpwftbmwpwkjp-qfpfwtkffodjqop,`pp,233&8`ovappwveeajaofulwfp#2333hlqfb~*8\x0e\tabmgprvfvf>#x~8;3s{8`hjmdx\x0e\t\n\nbkfbg`ol`hjqjpkojhf#qbwjlpwbwpElqn!zbkll*X3^8Balvwejmgp?,k2=gfavdwbphpVQO#>`foop~*+*821s{8sqjnfwfoopwvqmp3{533-isd!psbjmafb`kwb{fpnj`qlbmdfo..=?,djewppwfuf.ojmhalgz-~*8\t\nnlvmw#+2::EBR?,qldfqeqbmh@obpp1;s{8effgp?k2=?p`lwwwfpwp11s{8gqjmh*#\x7f\x7f#oftjppkboo 30:8#elq#olufgtbpwf33s{8ib9\x0fnpjnlm?elmwqfsoznffwpvmwfq`kfbswjdkwAqbmg*#">#gqfpp`ojspqllnplmhfznlajonbjm-Mbnf#sobwfevmmzwqffp`ln,!2-isdtnlgfsbqbnPWBQWofew#jggfm/#132*8\t~\telqn-ujqvp`kbjqwqbmptlqpwSbdfpjwjlmsbw`k?"..\tl.`b`ejqnpwlvqp/333#bpjbmj((*xbglaf$*X3^jg>23alwk8nfmv#-1-nj-smd!hfujm`lb`k@kjogaqv`f1-isdVQO*(-isd\x7fpvjwfpoj`fkbqqz213!#ptffwwq=\x0e\tmbnf>gjfdlsbdf#ptjpp..=\t\t eee8!=Old-`ln!wqfbwpkffw*#%%#27s{8poffsmwfmwejofgib9\x0fojg>!`Mbnf!tlqpfpklwp.al{.gfowb\t%ow8afbqp97;Y?gbwb.qvqbo?,b=#psfmgabhfqpklsp>#!!8sks!=`wjlm20s{8aqjbmkfoolpjyf>l>&1E#iljmnbzaf?jnd#jnd!=/#eipjnd!#!*X3^NWlsAWzsf!mftozGbmph`yf`kwqbjohmltp?,k6=ebr!=yk.`m23*8\t.2!*8wzsf>aovfpwqvozgbujp-ip$8=\x0e\t?"pwffo#zlv#k1=\x0e\telqn#ifpvp233&#nfmv-\x0e\t\n\x0e\ttbofpqjphpvnfmwggjmda.ojhwfb`kdje!#ufdbpgbmphffpwjpkrjspvlnjplaqfgfpgffmwqfwlglpsvfgfb/]lpfpw/Mwjfmfkbpwblwqlpsbqwfglmgfmvfulkb`fqelqnbnjpnlnfilqnvmglbrv/Ag/Abpp/_olbzvgbef`kbwlgbpwbmwlnfmlpgbwlplwqbppjwjlnv`klbklqbovdbqnbzlqfpwlpklqbpwfmfqbmwfpelwlpfpwbpsb/Apmvfubpbovgelqlpnfgjlrvjfmnfpfpslgfq`kjofpfq/Muf`fpgf`jqilp/Efpwbqufmwbdqvslkf`klfoolpwfmdlbnjdl`lpbpmjufodfmwfnjpnbbjqfpivojlwfnbpkb`jbebulqivmjlojaqfsvmwlavfmlbvwlqbaqjoavfmbwf{wlnbqylpbafqojpwbovfdl`/_nlfmfqlivfdlsfq/Vkbafqfpwlzmvm`bnvifqubolqevfqbojaqldvpwbjdvboulwlp`bplpdv/Absvfglplnlpbujplvpwfggfafmml`kfavp`bebowbfvqlppfqjfgj`kl`vqpl`obuf`bpbpof/_msobylobqdllaqbpujpwbbslzlivmwlwqbwbujpwl`qfbq`bnslkfnlp`jm`l`bqdlsjplplqgfmkb`fm/Mqfbgjp`lsfgql`fq`bsvfgbsbsfonfmlq/Vwjo`obqlilqdf`boofslmfqwbqgfmbgjfnbq`bpjdvffoobppjdol`l`kfnlwlpnbgqf`obpfqfpwlmj/]lrvfgbsbpbqabm`lkjilpujbifsbaol/Epwfujfmfqfjmlgfibqelmgl`bmbomlqwfofwqb`bvpbwlnbqnbmlpovmfpbvwlpujoobufmglsfpbqwjslpwfmdbnbq`loofubsbgqfvmjglubnlpylmbpbnalpabmgbnbqjbbavplnv`kbpvajqqjlibujujqdqbgl`kj`bboo/Ailufmgj`kbfpwbmwbofppbojqpvfolsfplpejmfpoobnbavp`l/Epwboofdbmfdqlsobybkvnlqsbdbqivmwbglaofjpobpalopbab/]lkbaobov`kb/mqfbgj`fmivdbqmlwbpuboofboo/M`bqdbglolqbabilfpw/Edvpwlnfmwfnbqjlejqnb`lpwlej`kbsobwbkldbqbqwfpofzfpbrvfonvpflabpfpsl`lpnjwbg`jfol`kj`lnjfgldbmbqpbmwlfwbsbgfafpsobzbqfgfppjfwf`lqwf`lqfbgvgbpgfpflujfilgfpfbbdvbp%rvlw8glnbjm`lnnlmpwbwvpfufmwpnbpwfqpzpwfnb`wjlmabmmfqqfnlufp`qloovsgbwfdolabonfgjvnejowfqmvnafq`kbmdfqfpvowsvaoj`p`qffm`kllpfmlqnbowqbufojppvfpplvq`fwbqdfwpsqjmdnlgvofnlajofptjw`ksklwlpalqgfqqfdjlmjwpfoepl`jbob`wjuf`lovnmqf`lqgelooltwjwof=fjwkfqofmdwkebnjozeqjfmgobzlvwbvwklq`qfbwfqfujftpvnnfqpfqufqsobzfgsobzfqf{sbmgsloj`zelqnbwglvaofsljmwppfqjfpsfqplmojujmdgfpjdmnlmwkpelq`fpvmjrvftfjdkwsflsoffmfqdzmbwvqfpfbq`kejdvqfkbujmd`vpwlnleepfwofwwfqtjmgltpvanjwqfmgfqdqlvspvsolbgkfbowknfwklgujgflpp`klloevwvqfpkbgltgfabwfubovfpLaif`wlwkfqpqjdkwpofbdvf`kqlnfpjnsofmlwj`fpkbqfgfmgjmdpfbplmqfslqwlmojmfprvbqfavwwlmjnbdfpfmbaofnlujmdobwfpwtjmwfqEqbm`fsfqjlgpwqlmdqfsfbwOlmglmgfwbjoelqnfggfnbmgpf`vqfsbppfgwlddofsob`fpgfuj`fpwbwj``jwjfppwqfbnzfooltbwwb`hpwqffweojdkwkjggfmjmel!=lsfmfgvpfevouboofz`bvpfpofbgfqpf`qfwpf`lmggbnbdfpslqwpf{`fswqbwjmdpjdmfgwkjmdpfeef`wejfogppwbwfpleej`fujpvbofgjwlqulovnfQfslqwnvpfvnnlujfpsbqfmwb``fppnlpwoznlwkfq!#jg>!nbqhfwdqlvmg`kbm`fpvqufzafelqfpznalonlnfmwpsff`knlwjlmjmpjgfnbwwfq@fmwfqlaif`wf{jpwpnjggofFvqlsfdqltwkofdb`znbmmfqfmlvdk`bqffqbmptfqlqjdjmslqwbo`ojfmwpfof`wqbmgln`olpfgwlsj`p`lnjmdebwkfqlswjlmpjnsozqbjpfgfp`bsf`klpfm`kvq`kgfejmfqfbplm`lqmfqlvwsvwnfnlqzjeqbnfsloj`fnlgfopMvnafqgvqjmdleefqppwzofphjoofgojpwfg`boofgpjoufqnbqdjmgfofwfafwwfqaqltpfojnjwpDolabopjmdoftjgdfw`fmwfqavgdfwmltqbs`qfgjw`objnpfmdjmfpbefwz`klj`fpsjqjw.pwzofpsqfbgnbhjmdmffgfgqvppjbsofbpff{wfmwP`qjswaqlhfmbooltp`kbqdfgjujgfeb`wlqnfnafq.abpfgwkflqz`lmejdbqlvmgtlqhfgkfosfg@kvq`kjnsb`wpklvogbotbzpoldl!#alwwlnojpw!=*xubq#sqfej{lqbmdfKfbgfq-svpk+`lvsofdbqgfmaqjgdfobvm`kQfujftwbhjmdujpjlmojwwofgbwjmdAvwwlmafbvwzwkfnfpelqdlwPfbq`kbm`klqbonlpwolbgfg@kbmdfqfwvqmpwqjmdqfolbgNlajofjm`lnfpvssozPlvq`flqgfqpujftfg%maps8`lvqpfBalvw#jpobmg?kwno#`llhjfmbnf>!bnbylmnlgfqmbguj`fjm?,b=9#Wkf#gjboldklvpfpAFDJM#Nf{j`lpwbqwp`fmwqfkfjdkwbggjmdJpobmgbppfwpFnsjqfP`kllofeelqwgjqf`wmfbqoznbmvboPfof`w-\t\tLmfiljmfgnfmv!=SkjojsbtbqgpkbmgofjnslqwLeej`fqfdbqgphjoopmbwjlmPslqwpgfdqfftffhoz#+f-d-afkjmggl`wlqolddfgvmjwfg?,a=?,afdjmpsobmwpbppjpwbqwjpwjppvfg033s{\x7f`bmbgbbdfm`zp`kfnfqfnbjmAqbyjopbnsofoldl!=afzlmg.p`bofb``fswpfqufgnbqjmfEllwfq`bnfqb?,k2=\t\\elqn!ofbufppwqfpp!#,=\x0e\t-dje!#lmolbgolbgfqL{elqgpjpwfqpvqujuojpwfmefnbofGfpjdmpjyf>!bssfbowf{w!=ofufopwkbmhpkjdkfqelq`fgbmjnbobmzlmfBeqj`bbdqffgqf`fmwSflsof?aq#,=tlmgfqsqj`fpwvqmfg\x7f\x7f#x~8nbjm!=jmojmfpvmgbztqbs!=ebjofg`fmpvpnjmvwfafb`lmrvlwfp263s{\x7ffpwbwfqfnlwffnbjo!ojmhfgqjdkw8pjdmboelqnbo2-kwnopjdmvssqjm`feolbw9-smd!#elqvn-B``fppsbsfqpplvmgpf{wfmgKfjdkwpojgfqVWE.;!%bns8#Afelqf-#TjwkpwvgjlltmfqpnbmbdfsqlejwiRvfqzbmmvbosbqbnpalvdkwebnlvpdlldofolmdfqj((*#xjpqbfopbzjmdgf`jgfklnf!=kfbgfqfmpvqfaqbm`ksjf`fpaol`h8pwbwfgwls!=?qb`jmdqfpjyf..%dw8sb`jwzpf{vboavqfbv-isd!#23/333lawbjmwjwofpbnlvmw/#Jm`-`lnfgznfmv!#ozqj`pwlgbz-jmgffg`lvmwz\\oldl-EbnjozollhfgNbqhfwopf#jeSobzfqwvqhfz*8ubq#elqfpwdjujmdfqqlqpGlnbjm~fopfxjmpfqwAold?,ellwfqoldjm-ebpwfqbdfmwp?algz#23s{#3sqbdnbeqjgbzivmjlqgloobqsob`fg`lufqpsovdjm6/333#sbdf!=alpwlm-wfpw+bubwbqwfpwfg\\`lvmwelqvnpp`kfnbjmgf{/ejoofgpkbqfpqfbgfqbofqw+bssfbqPvanjwojmf!=algz!=\t)#WkfWklvdkpffjmdifqpfzMftp?,ufqjezf{sfqwjmivqztjgwk>@llhjfPWBQW#b`qlpp\\jnbdfwkqfbgmbwjufsl`hfwal{!=\tPzpwfn#Gbujg`bm`fqwbaofpsqlufgBsqjo#qfboozgqjufqjwfn!=nlqf!=albqgp`lolqp`bnsvpejqpw#\x7f\x7f#X^8nfgjb-dvjwbqejmjpktjgwk9pkltfgLwkfq#-sks!#bppvnfobzfqptjoplmpwlqfpqfojfeptfgfm@vpwlnfbpjoz#zlvq#Pwqjmd\t\tTkjowbzolq`ofbq9qfplqweqfm`kwklvdk!*#(#!?algz=avzjmdaqbmgpNfnafqmbnf!=lssjmdpf`wlq6s{8!=upsb`fslpwfqnbilq#`leeffnbqwjmnbwvqfkbssfm?,mbu=hbmpbpojmh!=Jnbdfp>ebopftkjof#kpsb`f3%bns8#\t\tJm##sltfqSlophj.`lolqilqgbmAlwwlnPwbqw#.`lvmw1-kwnomftp!=32-isdLmojmf.qjdkwnjoofqpfmjlqJPAM#33/333#dvjgfpubovf*f`wjlmqfsbjq-{no!##qjdkwp-kwno.aol`hqfdF{s9klufqtjwkjmujqdjmsklmfp?,wq=\x0evpjmd#\t\nubq#=$*8\t\n?,wg=\t?,wq=\tabkbpbaqbpjodbofdlnbdzbqslophjpqsphj4]4C5d\bTA\nzk\vBl\bQ\x7f\vUm\x05Gx\bSM\nmC\bTA\twQ\nd}\bW@\bTl\bTF\ti@\tcT\vBM\v|j\x04BV\tqw\tcC\bWI\npa\tfM\n{Z\x05{X\bTF\bVV\bVK\t\x7fm\x04kF\t[]\bPm\bTv\nsI\vpg\t[I\bQp\x04mx\v_W\n^M\npe\vQ}\vGu\nel\npe\x04Ch\x04BV\bTA\tSo\nzk\vGL\vxD\nd[\x05Jz\x05MY\bQp\x04li\nfl\npC\x05{B\x05Nt\vwT\ti_\bTg\x04QQ\n|p\vXN\bQS\vxD\x04QC\bWZ\tpD\vVS\bTW\x05Nt\x04Yh\nzu\x04Kj\x05N}\twr\tHa\n_D\tj`\vQ}\vWp\nxZ\x04{c\tji\tBU\nbD\x04a|\tTn\tpV\nZd\nmC\vEV\x05{X\tc}\tTo\bWl\bUd\tIQ\tcg\vxs\nXW\twR\vek\tc}\t]y\tJn\nrp\neg\npV\nz\\\x05{W\npl\nz\\\nzU\tPc\t`{\bV@\nc|\bRw\ti_\bVb\nwX\tHv\x04Su\bTF\v_W\vWs\vsI\x05m\x7f\nTT\ndc\tUS\t}f\tiZ\bWz\tc}\x04MD\tBe\tiD\v@@\bTl\bPv\t}t\x04Sw\x04M`\vnU\tkW\ved\nqo\vxY\tA|\bTz\vy`\x04BR\x04BM\tia\x04XU\nyu\x04n^\tfL\tiI\nXW\tfD\bWz\bW@\tyj\t\x7fm\tav\tBN\vb\\\tpD\bTf\nY[\tJn\bQy\t[^\vWc\vyu\x04Dl\x04CJ\vWj\vHR\t`V\vuW\tQy\np@\vGu\x05pl\x04Jm\bW[\nLP\nxC\n`m\twQ\x05ui\x05\x7fR\nbI\twQ\tBZ\tWV\x04BR\npg\tcg\x05ti\x04CW\n_y\tRg\bQa\vQB\vWc\nYb\x05le\ngE\x04Su\nL[\tQ\x7f\tea\tdj\v]W\nb~\x04M`\twL\bTV\bVH\nt\x7f\npl\t|b\x05s_\bU|\bTa\x04oQ\x05lv\x04Sk\x04M`\bTv\vK}\nfl\tcC\x04oQ\x04BR\tHk\t|d\bQp\tHK\tBZ\vHR\bPv\vLx\vEZ\bT\x7f\bTv\tiD\x05oD\x05MU\vwB\x04Su\x05k`\x04St\ntC\tPl\tKg\noi\tjY\vxY\x04h}\nzk\bWZ\t\x7fm\ve`\tTB\tfE\nzk\t`z\x04Yh\nV|\tHK\tAJ\tAJ\bUL\tp\\\tql\nYc\x04Kd\nfy\x04Yh\t[I\vDg\x04Jm\n]n\nlb\bUd\n{Z\tlu\tfs\x04oQ\bTW\x04Jm\vwB\tea\x04Yh\x04BC\tsb\tTn\nzU\n_y\vxY\tQ]\ngw\x04mt\tO\\\ntb\bWW\bQy\tmI\tV[\ny\\\naB\vRb\twQ\n]Q\x04QJ\bWg\vWa\bQj\ntC\bVH\nYm\vxs\bVK\nel\bWI\vxY\x04Cq\ntR\vHV\bTl\bVw\tay\bQa\bVV\t}t\tdj\nr|\tp\\\twR\n{i\nTT\t[I\ti[\tAJ\vxs\v_W\td{\vQ}\tcg\tTz\tA|\tCj\vLm\x05N}\x05m\x7f\nbK\tdZ\tp\\\t`V\tsV\np@\tiD\twQ\vQ}\bTf\x05ka\x04Jm\v@@\bV`\tzp\n@N\x04Sw\tiI\tcg\noi\x04Su\bVw\x04lo\x04Cy\tc}\vb\\\tsU\x04BA\bWI\bTf\nxS\tVp\nd|\bTV\vbC\tNo\x05Ju\nTC\t|`\n{Z\tD]\bU|\tc}\x05lm\bTl\tBv\tPl\tc}\bQp\t\x7fm\nLk\tkj\n@N\x04Sb\x04KO\tj_\tp\\\nzU\bTl\bTg\bWI\tcf\x04XO\bWW\ndz\x04li\tBN\nd[\bWO\x04MD\vKC\tdj\tI_\bVV\ny\\\vLm\x05xl\txB\tkV\vb\\\vJW\vVS\tVx\vxD\td{\x04MD\bTa\t|`\vPz\x04R}\vWs\x04BM\nsI\x04CN\bTa\x04Jm\npe\ti_\npV\nrh\tRd\tHv\n~A\nxR\vWh\vWk\nxS\vAz\vwX\nbI\x04oQ\tfw\nqI\nV|\nun\x05z\x7f\vpg\td\\\voA\x05{D\ti_\x05xB\bT\x7f\t`V\x05qr\tTT\x04g]\x04CA\vuR\tVJ\tT`\npw\vRb\tI_\nCx\x04Ro\vsI\x04Cj\x04Kh\tBv\tWV\x04BB\x05oD\x05{D\nhc\x04Km\v^R\tQE\n{I\np@\nc|\x05Gt\tc}\x04Dl\nzU\x05qN\tsV\x05k}\tHh\v|j\nqo\x05u|\tQ]\vek\x05\x7fZ\x04M`\x04St\npe\tdj\bVG\veE\t\x7fm\vWc\x04|I\n[W\tfL\bT\x7f\tBZ\x04Su\vKa\x04Cq\x05Nt\x04Y[\nqI\bTv\tfM\ti@\t}f\x04B\\\tQy\vBl\bWg\x04XD\x05kc\vx[\bVV\tQ]\t\x7fa\tPy\vxD\nfI\t}f\x05oD\tdj\tSG\x05ls\t~D\x04CN\n{Z\t\\v\n_D\nhc\vx_\x04C[\tAJ\nLM\tVx\x04CI\tbj\tc^\tcF\ntC\x04Sx\twr\x04XA\bU\\\t|a\vK\\\bTV\bVj\nd|\tfs\x04CX\ntb\bRw\tVx\tAE\tA|\bT\x7f\x05Nt\vDg\tVc\bTl\x04d@\npo\t\x7fM\tcF\npe\tiZ\tBo\bSq\nfH\x04l`\bTx\bWf\tHE\vF{\tcO\tfD\nlm\vfZ\nlm\veU\tdG\x04BH\bTV\tSi\x05MW\nwX\nz\\\t\\c\x04CX\nd}\tl}\bQp\bTV\tF~\bQ\x7f\t`i\ng@\x05nO\bUd\bTl\nL[\twQ\tji\ntC\t|J\nLU\naB\vxY\x04Kj\tAJ\x05uN\ti[\npe\x04Sk\vDg\vx]\bVb\bVV\nea\tkV\nqI\bTa\x04Sk\nAO\tpD\ntb\nts\nyi\bVg\ti_\v_W\nLk\x05Nt\tyj\tfM\x04R\x7f\tiI\bTl\vwX\tsV\vMl\nyu\tAJ\bVj\x04KO\tWV\vA}\vW\x7f\nrp\tiD\v|o\x05lv\vsI\x04BM\td~\tCU\bVb\x04eV\npC\vwT\tj`\tc}\vxs\vps\vvh\tWV\vGg\vAe\vVK\v]W\trg\vWc\x05F`\tBr\vb\\\tdZ\bQp\nqI\x04kF\nLk\vAR\bWI\bTg\tbs\tdw\n{L\n_y\tiZ\bTA\tlg\bVV\bTl\tdk\n`k\ta{\ti_\x05{A\x05wj\twN\v@@\bTe\ti_\n_D\twL\nAH\viK\vek\n[]\tp_\tyj\bTv\tUS\t[r\n{I\nps\x05Gt\vVK\npl\x04S}\vWP\t|d\x04MD\vHV\bT\x7f\x04R}\x04M`\bTV\bVH\x05lv\x04Ch\bW[\x04Ke\tR{\v^R\tab\tBZ\tVA\tB`\nd|\nhs\x04Ke\tBe\x04Oi\tR{\td\\\x05nB\bWZ\tdZ\tVJ\x05Os\t\x7fm\x04uQ\vhZ\x04Q@\x04QQ\nfI\bW[\x04B\\\x04li\nzU\nMd\x04M`\nxS\bVV\n\\}\vxD\t\x7fm\bTp\x04IS\nc|\tkV\x05i~\tV{\vhZ\t|b\bWt\n@R\voA\vnU\bWI\tea\tB`\tiD\tc}\tTz\x04BR\vQB\x05Nj\tCP\t[I\bTv\t`W\x05uN\vpg\vpg\vWc\tiT\tbs\twL\tU_\tc\\\t|h\vKa\tNr\tfL\nq|\nzu\nz\\\tNr\bUg\t|b\x04m`\bTv\nyd\nrp\bWf\tUX\x04BV\nzk\nd}\twQ\t}f\x04Ce\ved\bTW\bSB\nxU\tcn\bTb\ne\x7f\ta\\\tSG\bU|\npV\nN\\\x04Kn\vnU\tAt\tpD\v^R\vIr\x04b[\tR{\tdE\vxD\vWK\vWA\bQL\bW@\x04Su\bUd\nDM\tPc\x04CA\x04Dl\x04oQ\tHs\x05wi\x04ub\n\x7fa\bQp\x05Ob\nLP\bTl\x04Y[\vK}\tAJ\bQ\x7f\x04n^\vsA\bSM\nqM\bWZ\n^W\vz{\x04S|\tfD\bVK\bTv\bPv\x04BB\tCP\x04dF\tid\vxs\x04mx\vws\tcC\ntC\tyc\x05M`\vW\x7f\nrh\bQp\vxD\x04\\o\nsI\x04_k\nzu\x04kF\tfD\x04Xs\x04XO\tjp\bTv\x04BS\x05{B\tBr\nzQ\nbI\tc{\x04BD\x04BV\x05nO\bTF\tca\x05Jd\tfL\tPV\tI_\nlK\x04`o\twX\npa\tgu\bP}\x05{^\bWf\n{I\tBN\npa\x04Kl\vpg\tcn\tfL\vvh\x04Cq\bTl\vnU\bSq\x04Cm\twR\bUJ\npe\nyd\nYg\x04Cy\vKW\tfD\nea\x04oQ\tj_\tBv\x04nM\vID\bTa\nzA\x05pl\n]n\bTa\tR{\tfr\n_y\bUg\x05{X\x05kk\vxD\x04|I\x05xl\nfy\x04Ce\vwB\nLk\vd]\noi\n}h\tQ]\npe\bVw\x04Hk\x04OQ\nzk\tAJ\npV\bPv\ny\\\tA{\x04Oi\bSB\x04XA\veE\tjp\nq}\tiD\x05qN\v^R\t\x7fm\tiZ\tBr\bVg\noi\n\\X\tU_\nc|\vHV\bTf\tTn\x04\\N\x04\\N\nuB\x05lv\nyu\tTd\bTf\bPL\v]W\tdG\nA`\nw^\ngI\npe\tdw\nz\\\x05ia\bWZ\tcF\x04Jm\n{Z\bWO\x04_k\x04Df\x04RR\td\\\bVV\vxs\x04BN\x05ti\x04lm\tTd\t]y\vHV\tSo\v|j\x04XX\tA|\vZ^\vGu\bTW\x05M`\x04kF\vhZ\vVK\tdG\vBl\tay\nxU\x05qE\x05nO\bVw\nqI\x04CX\ne\x7f\tPl\bWO\vLm\tdL\x05uH\x04Cm\tdT\x04fn\vwB\x05ka\vnU\n@M\nyT\tHv\t\\}\x04Kh\td~\x04Yh\x05k}\neR\td\\\bWI\t|b\tHK\tiD\bTW\x05MY\npl\bQ_\twr\vAx\tHE\bTg\bSq\x05vp\vb\\\bWO\nOl\nsI\nfy\vID\t\\c\n{Z\n^~\npe\nAO\tTT\vxv\x04k_\bWO\v|j\vwB\tQy\ti@\tPl\tHa\tdZ\x05k}\x04ra\tUT\vJc\ved\np@\tQN\nd|\tkj\tHk\x04M`\noi\twr\td\\\nlq\no_\nlb\nL[\tac\x04BB\x04BH\x04Cm\npl\tIQ\bVK\vxs\n`e\viK\npa\x04Oi\tUS\bTp\tfD\nPG\x05kk\x04XA\nz\\\neg\vWh\twR\x05qN\nqS\tcn\x04lo\nxS\n^W\tBU\nt\x7f\tHE\tp\\\tfF\tfw\bVV\bW@\tak\vVK\x05ls\tVJ\bVV\veE\x04\\o\nyX\nYm\x04M`\x05lL\nd|\nzk\tA{\x05sE\twQ\x04XT\nt\x7f\tPl\t]y\vwT\x05{p\x04MD\vb\\\tQ]\x04Kj\tJn\nAH\vRb\tBU\tHK\t\\c\nfI\x05m\x7f\nqM\n@R\tSo\noi\x04BT\tHv\n_y\x04Kh\tBZ\t]i\bUJ\tV{\x04Sr\nbI\vGg\ta_\bTR\nfI\nfl\t[K\tII\x04S|\vuW\tiI\bWI\nqI\v|j\x04BV\bVg\bWZ\x04kF\vx]\bTA\tab\tfr\ti@\tJd\tJd\vps\nAO\bTa\x05xu\tiD\nzk\t|d\t|`\bW[\tlP\tdG\bVV\vw}\vqO\ti[\bQ\x7f\bTz\vVF\twN\x05ts\tdw\bTv\neS\ngi\tNr\x05yS\npe\bVV\bSq\n`m\tyj\tBZ\vWX\bSB\tc\\\nUR\t[J\tc_\x04nM\bWQ\vAx\nMd\tBr\x05ui\vxY\bSM\vWc\v|j\vxs\t}Q\tBO\bPL\bWW\tfM\nAO\tPc\veU\x04e^\bTg\nqI\tac\bPv\tcF\x04oQ\tQ\x7f\vhZ\x05ka\nz\\\tiK\tBU\n`k\tCP\x04S|\x04M`\n{I\tS{\x04_O\tBZ\x04Zi\x04Sk\tps\tp\\\nYu\n]s\nxC\bWt\nbD\tkV\vGu\x05yS\nqA\t[r\neK\x04M`\tdZ\x05lL\bUg\bTl\nbD\tUS\vb\\\tpV\ncc\x04S\\\tct\t`z\bPL\vWs\nA`\neg\bSq\x05uE\x04CR\vDg\t`W\vz{\vWc\x04Sk\x04Sk\tbW\bUg\tea\nxZ\tiI\tUX\tVJ\nqn\tS{\vRb\bTQ\npl\x05Gt\vuW\x05uj\npF\nqI\tfL\t[I\tia\x04XO\nyu\vDg\ved\tq{\x04VG\bQ\x7f\x05ka\tVj\tkV\txB\nd|\np@\tQN\tPc\tps\x04]j\tkV\toU\bTp\nzU\x05nB\vB]\ta{\bV@\n]n\x04m`\tcz\tR{\x04m`\bQa\vwT\bSM\x05MY\x05qN\tdj\x05~s\vQ}\x05MY\vMB\tBv\twR\bRg\vQ}\tql\vKC\nrm\x05xu\x04CC\vwB\vvh\tBq\x04Xq\npV\ti_\x05Ob\x05uE\nbd\nqo\v{i\nC~\tBL\veE\x05uH\bVj\x04Ey\x04Gz\vzR\v{i\tcf\n{Z\n]n\x04XA\vGu\vnU\thS\vGI\nCc\tHE\bTA\tHB\x04BH\x04Cj\nCc\bTF\tHE\nXI\tA{\bQ\x7f\tc\\\vmO\vWX\nfH\np@\x05MY\bTF\nlK\tBt\nzU\tTT\x04Km\vwT\npV\ndt\vyI\tVx\tQ\x7f\tRg\tTd\nzU\bRS\nLM\twA\x04nM\tTn\ndS\t]g\nLc\vwB\t}t\t[I\tCP\x04kX\vFm\vhZ\x05m\x7f\ti[\np@\vQ}\vW\x7f\t|d\nMO\nMd\tf_\tfD\tcJ\tHz\vRb\tio\tPy\x04Y[\nxU\tct\v@@\tww\bPv\x04BM\x04FF\ntb\x05v|\vKm\tBq\tBq\x04Kh\x04`o\nZd\x04XU\ti]\t|`\tSt\x04B\\\bQ\x7f\v_W\tTJ\nqI\t|a\tA{\vuP\x04MD\tPl\nxR\tfL\vws\tc{\td\\\bV`\neg\tHK\x05kc\nd|\bVV\ny\\\x05kc\ti]\bVG\t`V\tss\tI_\tAE\tbs\tdu\nel\tpD\vW\x7f\nqs\x05lv\bSM\x04Zi\vVK\x05ia\vQB\tQ\x7f\n{Z\bPt\vKl\nlK\nhs\ndS\bVK\x05mf\nd^\tkV\tcO\nc|\bVH\t\\]\bTv\bSq\tmI\vDg\tVJ\tcn\ny\\\bVg\bTv\nyX\bTF\t]]\bTp\noi\nhs\veU\nBf\tdj\x05Mr\n|p\t\\g\t]r\bVb\x05{D\nd[\x04XN\tfM\tO\\\x05s_\tcf\tiZ\x04XN\vWc\tqv\n`m\tU^\x05oD\nd|\vGg\tdE\vwf\x04lo\x04u}\nd|\x05oQ\t`i\x04Oi\vxD\ndZ\nCx\x04Yw\nzk\ntb\ngw\tyj\tB`\nyX\vps\ntC\vpP\vqw\bPu\bPX\tDm\npw\x05Nj\tss\taG\vxs\bPt\noL\x04Gz\tOk\ti@\ti]\x04eC\tIQ\tii\tdj\v@J\t|d\x05uh\bWZ\veU\vnU\bTa\tcC\x04g]\nzk\x04Yh\bVK\nLU\np@\ntb\ntR\tCj\vNP\ti@\bP{\n\\}\n{c\nwX\tfL\bVG\tc{\t|`\tAJ\t|C\tfD\x05ln\t|d\tbs\nqI\x05{B\vAx\np@\nzk\vRb\x05Os\vWS\x04e^\vD_\tBv\vWd\bVb\vxs\veE\bRw\n]n\n|p\vg|\tfw\x05kc\bTI\x05ka\n\\T\x04Sp\tju\vps\npe\x05u|\vGr\bVe\tCU\x04]M\x04XU\vxD\bTa\tIQ\vWq\tCU\tam\tdj\bSo\x04Sw\vnU\x04Ch\tQ]\x05s_\bPt\tfS\bTa\t\\}\n@O\x04Yc\tUZ\bTx\npe\vnU\nzU\t|}\tiD\nz\\\bSM\vxD\x04BR\nzQ\tQN\x04]M\x04Yh\nLP\vFm\vLX\x05vc\vql\x05ka\tHK\bVb\ntC\nCy\bTv\nuV\x04oQ\t`z\t[I\tB`\vRb\tyj\tsb\vWs\bTl\tkV\ved\ne\x7f\x05lL\vxN\t\x7fm\nJn\tjY\vxD\bVb\bSq\vyu\twL\vXL\bTA\tpg\tAt\tnD\x04XX\twR\npl\nhw\x05yS\nps\tcO\bW[\v|j\x04XN\tsV\tp\\\tBe\nb~\nAJ\n]e\x05k`\x05qN\tdw\tWV\tHE\vEV\x05Jz\tid\tB`\tzh\x05E]\tfD\bTg\x05qN\bTa\tja\x04Cv\bSM\nhc\bUe\x05t_\tie\x04g]\twQ\nPn\bVB\tjw\bVg\vbE\tBZ\vRH\bP{\tjp\n\\}\ta_\tcC\t|a\vD]\tBZ\ti[\tfD\vxW\no_\td\\\n_D\ntb\t\\c\tAJ\nlK\x04oQ\x04lo\vLx\vM@\bWZ\x04Kn\vpg\nTi\nIv\n|r\v@}\x05Jz\x05Lm\x05Wh\x05k}\x05ln\vxD\n]s\x04gc\vps\tBr\bTW\vBM\x05tZ\nBY\x04DW\tjf\vSW\x04C}\nqo\tdE\tmv\tIQ\bPP\bUb\x05lv\x04BC\nzQ\t[I\vgl\nig\bUs\x04BT\vbC\bSq\tsU\tiW\nJn\tSY\tHK\trg\npV\vID\v|j\x04KO\t`S\t|a`vbmglfmujbqnbgqjgavp`bqjmj`jlwjfnslslqrvf`vfmwbfpwbglsvfgfmivfdlp`lmwqbfpw/Mmmlnaqfwjfmfmsfqejonbmfqbbnjdlp`jvgbg`fmwqlbvmrvfsvfgfpgfmwqlsqjnfqsqf`jlpfd/Vmavfmlpuloufqsvmwlppfnbmbkba/Abbdlpwlmvfulpvmjglp`bqolpfrvjslmj/]lpnv`klpbodvmb`lqqfljnbdfmsbqwjqbqqjabnbq/Abklnaqffnsoflufqgbg`bnajlnv`kbpevfqlmsbpbglo/Amfbsbqf`fmvfubp`vqplpfpwbabrvjfqlojaqlp`vbmwlb``fplnjdvfoubqjlp`vbwqlwjfmfpdqvslppfq/Mmfvqlsbnfgjlpeqfmwfb`fq`bgfn/Mplefqwb`l`kfpnlgfoljwbojbofwqbpbod/Vm`lnsqb`vbofpf{jpwf`vfqslpjfmglsqfmpboofdbqujbifpgjmfqlnvq`jbslgq/Msvfpwlgjbqjlsvfaolrvjfqfnbmvfosqlsjl`qjpjp`jfqwlpfdvqlnvfqwfevfmwf`fqqbqdqbmgffef`wlsbqwfpnfgjgbsqlsjbleqf`fwjfqqbf.nbjoubqjbpelqnbpevwvqllaifwlpfdvjqqjfpdlmlqnbpnjpnlp/Vmj`l`bnjmlpjwjlpqby/_mgfajglsqvfabwlofglwfm/Abifp/Vpfpsfql`l`jmblqjdfmwjfmgb`jfmwl`/Mgjykbaobqpfq/Abobwjmbevfqybfpwjoldvfqqbfmwqbq/E{jwlo/_sfybdfmgbu/Agflfujwbqsbdjmbnfwqlpibujfqsbgqfpe/M`jo`bafyb/Mqfbppbojgbfmu/Alibs/_mbavplpajfmfpwf{wlpoofubqsvfgbmevfqwf`ln/Vm`obpfpkvnbmlwfmjglajoablvmjgbgfpw/Mpfgjwbq`qfbgl<X<W=c=k=n<R<V<\\<V<T<W<T=a=n<R<^=m<Y<Y<_<R<S=l<T=n<\\<V<Y=e<Y=o<Z<Y<v<\\<V<]<Y<[<]=g<W<R<Q<T<~=m<Y<S<R<X<A=n<R=n<R<P=k<Y<P<Q<Y=n<W<Y=n=l<\\<[<R<Q<\\<_<X<Y<P<Q<Y<x<W=c<s=l<T<Q<\\=m<Q<T=i=n<Y<P<V=n<R<_<R<X<^<R=n=n<\\<P<M<D<|<P<\\=c<K=n<R<^<\\=m<^<\\<P<Y<P=o<N<\\<V<X<^<\\<Q<\\<P=a=n<T=a=n=o<~<\\<P=n<Y=i<S=l<R=n=o=n<Q<\\<X<X<Q=c<~<R=n=n=l<T<Q<Y<U<~<\\=m<Q<T<P=m<\\<P=n<R=n=l=o<]<r<Q<T<P<T=l<Q<Y<Y<r<r<r<W<T=j=a=n<\\<r<Q<\\<Q<Y<P<X<R<P<P<R<U<X<^<Y<R<Q<R=m=o<X\fHy\fIk\fHU\fId\fHy\fIl\fHT\fIk\fHy\fHR\fHy\fIg\fHx\fH\\\fHF\fH\\\fHD\fIk\fHc\fHy\fHy\fHS\fHA\fIl\fHk\fHT\fHy\fH\\\fHH\fIg\fHU\fIg\fHj\fHF\fHU\fIl\fHC\fHU\fHC\fHR\fHH\fHy\fHI\fHRibdqbm\fHj\fHp\fHp\fIg\fHi\fH@\fHJ\fIg\fH{\fHd\fHp\fHR\fH{\fHc\fHU\fHB\fHk\fHD\fHY\fHU\fHC\fIk\fHI\fIk\fHI\fIl\fHt\fH\\\fHp\fH@\fHJ\fIl\fHy\fHd\fHp\fIl\fHY\fIk\fHD\fHd\fHD\fHc\fHU\fH\\\fHe\fHT\fHB\fIk\fHy\fHB\fHY\fIg\fH^\fIk\fHT\fH@\fHB\fHd\fHJ\fIk\fH\x7f\fH\\\fHj\fHB\fH@\fHT\fHA\fH\\\fH@\fHD\fHv\fH^\fHB\fHD\fHj\fH{\fHT\fIl\fH^\fIl4U5h5e4I5h5e5k4\\4K4N4B4]4U4C4C4K5h5e5k4\\5k4Y5d4]4V5f4]5o4K5j5d5h4K4D5f5j4U4]4Z4\\5h5o5k5j4K5f5d5i5n4K5h4U5h5f4K5j4K5h5o5j4A4F5e5n4D5h5d4A4E4K4B4]5m5n4[4U4D4C4]5o5j4I4\\4K5o5i4K4K4A4C4I5h4K5m5f5k4D4U4Z5o5f5m4D4A4G5d5i5j5d5k5d4O5j4K4@4C4K5h5k4K4_5h5i4U5j4C5h5f4_4U4D4]4Y5h5e5i5j4\\4D5k4K4O5j5k5i4G5h5o5j4F4K5h4K4A5f4G5i4Y4]4X4]4A4A5d5h5d5m5f4K4\\4K5h5o5h5i4]4E4K5j4F4K5h5m4O4D5d4B4K4Y4O5j4F4K5j5k4K5h5f4U4Z5d5d5n4C4K4D5j4B5f4]4D5j4F5h5o5i4X4K4M5d5k5f4K4D5d5n4Y4Y5d5i4K4]5n5i4O4A4C5j4A5j4U4C5i4]4O5f4K4A4E5o4F4D4C5d5j5f4@4D5i5j5k4F4A4F4@5k4E4_5j4E5f4F5i5o4]4E4V4^4E5j5m4_4D5f4F5h5h5k5h5j4K4F5h5o5n5h4D5h5i4K4U5j5k4O5d5h4X5f4M5j5d4]4O5i4K5m5f5o4D5o5h4\\4K4F4]4F4D4D4O5j5k5i4_4K5j5o4D5f4U5m5n4C4A4_5j5h5k5i4X4U4]4O5k5h4X5k4]5n4[4]4[5h4Dsqlejofpfquj`fgfebvowkjnpfoegfwbjop`lmwfmwpvsslqwpwbqwfgnfppbdfpv``fppebpkjlm?wjwof=`lvmwqzb``lvmw`qfbwfgpwlqjfpqfpvowpqvmmjmdsql`fpptqjwjmdlaif`wpujpjaoftfo`lnfbqwj`ofvmhmltmmfwtlqh`lnsbmzgzmbnj`aqltpfqsqjub`zsqlaofnPfquj`fqfpsf`wgjpsobzqfrvfpwqfpfquftfapjwfkjpwlqzeqjfmgplswjlmptlqhjmdufqpjlmnjoojlm`kbmmfotjmglt-bggqfppujpjwfgtfbwkfq`lqqf`wsqlgv`wfgjqf`welqtbqgzlv#`bmqfnlufgpvaif`w`lmwqlobq`kjuf`vqqfmwqfbgjmdojaqbqzojnjwfgnbmbdfqevqwkfqpvnnbqznb`kjmfnjmvwfpsqjubwf`lmwf{wsqldqbnpl`jfwzmvnafqptqjwwfmfmbaofgwqjddfqplvq`fpolbgjmdfofnfmwsbqwmfqejmboozsfqef`wnfbmjmdpzpwfnphffsjmd`vowvqf%rvlw8/ilvqmbosqlif`wpvqeb`fp%rvlw8f{sjqfpqfujftpabobm`fFmdojpk@lmwfmwwkqlvdkSofbpf#lsjmjlm`lmwb`wbufqbdfsqjnbqzujoobdfPsbmjpkdboofqzgf`ojmfnffwjmdnjppjlmslsvobqrvbojwznfbpvqfdfmfqbopsf`jfppfppjlmpf`wjlmtqjwfqp`lvmwfqjmjwjboqfslqwpejdvqfpnfnafqpklogjmdgjpsvwffbqojfqf{sqfppgjdjwbosj`wvqfBmlwkfqnbqqjfgwqbeej`ofbgjmd`kbmdfg`fmwqbouj`wlqzjnbdfp,qfbplmppwvgjfpefbwvqfojpwjmdnvpw#afp`kllopUfqpjlmvpvboozfsjplgfsobzjmddqltjmdlaujlvplufqobzsqfpfmwb`wjlmp?,vo=\x0e\ttqbssfqboqfbgz`fqwbjmqfbojwzpwlqbdfbmlwkfqgfphwlsleefqfgsbwwfqmvmvpvboGjdjwbo`bsjwboTfapjwfebjovqf`lmmf`wqfgv`fgBmgqljggf`bgfpqfdvobq#%bns8#bmjnbopqfofbpfBvwlnbwdfwwjmdnfwklgpmlwkjmdSlsvobq`bswjlmofwwfqp`bswvqfp`jfm`foj`fmpf`kbmdfpFmdobmg>2%bns8Kjpwlqz#>#mft#@fmwqbovsgbwfgPsf`jboMfwtlqhqfrvjqf`lnnfmwtbqmjmd@loofdfwlloabqqfnbjmpaf`bvpffof`wfgGfvwp`kejmbm`ftlqhfqprvj`hozafwtffmf{b`wozpfwwjmdgjpfbpfPl`jfwztfbslmpf{kjajw%ow8"..@lmwqlo`obppfp`lufqfglvwojmfbwwb`hpgfuj`fp+tjmgltsvqslpfwjwof>!Nlajof#hjoojmdpkltjmdJwbojbmgqlssfgkfbujozfeef`wp.2$^*8\t`lmejqn@vqqfmwbgubm`fpkbqjmdlsfmjmdgqbtjmdajoojlmlqgfqfgDfqnbmzqfobwfg?,elqn=jm`ovgftkfwkfqgfejmfgP`jfm`f`bwboldBqwj`ofavwwlmpobqdfpwvmjelqnilvqmfzpjgfabq@kj`bdlklojgbzDfmfqbosbppbdf/%rvlw8bmjnbwfeffojmdbqqjufgsbppjmdmbwvqboqlvdkoz-\t\tWkf#avw#mlwgfmpjwzAqjwbjm@kjmfpfob`h#lewqjavwfJqfobmg!#gbwb.eb`wlqpqf`fjufwkbw#jpOjaqbqzkvpabmgjm#eb`wbeebjqp@kbqofpqbgj`boaqlvdkwejmgjmdobmgjmd9obmd>!qfwvqm#ofbgfqpsobmmfgsqfnjvnsb`hbdfBnfqj`bFgjwjlm^%rvlw8Nfppbdfmffg#wlubovf>!`lnsof{ollhjmdpwbwjlmafojfufpnboofq.nlajofqf`lqgptbmw#wlhjmg#leEjqfel{zlv#bqfpjnjobqpwvgjfgnb{jnvnkfbgjmdqbsjgoz`ojnbwfhjmdglnfnfqdfgbnlvmwpelvmgfgsjlmffqelqnvobgzmbpwzklt#wl#Pvsslqwqfufmvff`lmlnzQfpvowpaqlwkfqplogjfqobqdfoz`boojmd-%rvlw8B``lvmwFgtbqg#pfdnfmwQlafqw#feelqwpSb`jej`ofbqmfgvs#tjwkkfjdkw9tf#kbufBmdfofpmbwjlmp\\pfbq`kbssojfgb`rvjqfnbppjufdqbmwfg9#ebopfwqfbwfgajddfpwafmfejwgqjujmdPwvgjfpnjmjnvnsfqkbspnlqmjmdpfoojmdjp#vpfgqfufqpfubqjbmw#qlof>!njppjmdb`kjfufsqlnlwfpwvgfmwplnflmff{wqfnfqfpwlqfalwwln9fuloufgboo#wkfpjwfnbsfmdojpktbz#wl##Bvdvpwpznalop@lnsbmznbwwfqpnvpj`bobdbjmpwpfqujmd~*+*8\x0e\tsbznfmwwqlvaof`lm`fsw`lnsbqfsbqfmwpsobzfqpqfdjlmpnlmjwlq#$$Wkf#tjmmjmdf{solqfbgbswfgDboofqzsqlgv`fbajojwzfmkbm`f`bqffqp*-#Wkf#`loof`wPfbq`k#bm`jfmwf{jpwfgellwfq#kbmgofqsqjmwfg`lmplofFbpwfqmf{slqwptjmgltp@kbmmfojoofdbomfvwqbopvddfpw\\kfbgfqpjdmjmd-kwno!=pfwwofgtfpwfqm`bvpjmd.tfahjw`objnfgIvpwj`f`kbswfquj`wjnpWklnbp#nlyjoobsqlnjpfsbqwjfpfgjwjlmlvwpjgf9ebopf/kvmgqfgLoznsj`\\avwwlmbvwklqpqfb`kfg`kqlmj`gfnbmgppf`lmgpsqlwf`wbglswfgsqfsbqfmfjwkfqdqfbwozdqfbwfqlufqboojnsqluf`lnnbmgpsf`jbopfbq`k-tlqpkjsevmgjmdwklvdkwkjdkfpwjmpwfbgvwjojwzrvbqwfq@vowvqfwfpwjmd`ofbqozf{slpfgAqltpfqojafqbo~#`bw`kSqlif`wf{bnsofkjgf+*8EolqjgbbmptfqpbooltfgFnsfqlqgfefmpfpfqjlvpeqffglnPfufqbo.avwwlmEvqwkfqlvw#le#">#mvoowqbjmfgGfmnbqhuljg+3*,boo-ipsqfufmwQfrvfpwPwfskfm\t\tTkfm#lapfquf?,k1=\x0e\tNlgfqm#sqlujgf!#bow>!alqgfqp-\t\tElq#\t\tNbmz#bqwjpwpsltfqfgsfqelqnej`wjlmwzsf#lenfgj`bowj`hfwplsslpfg@lvm`jotjwmfppivpwj`fDflqdf#Afodjvn---?,b=wtjwwfqmlwbaoztbjwjmdtbqebqf#Lwkfq#qbmhjmdskqbpfpnfmwjlmpvqujufp`klobq?,s=\x0e\t#@lvmwqzjdmlqfgolpp#leivpw#bpDflqdjbpwqbmdf?kfbg=?pwlssfg2$^*8\x0e\tjpobmgpmlwbaofalqgfq9ojpw#le`bqqjfg233/333?,k0=\t#pfufqboaf`lnfppfof`w#tfggjmd33-kwnonlmbq`klee#wkfwfb`kfqkjdkoz#ajloldzojef#lelq#fufmqjpf#le%qbrvl8sovplmfkvmwjmd+wklvdkGlvdobpiljmjmd`jq`ofpElq#wkfBm`jfmwUjfwmbnufkj`ofpv`k#bp`qzpwboubovf#>Tjmgltpfmilzfgb#pnboobppvnfg?b#jg>!elqfjdm#Boo#qjklt#wkfGjpsobzqfwjqfgkltfufqkjggfm8abwwofppffhjmd`bajmfwtbp#mlwollh#bw`lmgv`wdfw#wkfIbmvbqzkbssfmpwvqmjmdb9klufqLmojmf#Eqfm`k#ob`hjmdwzsj`bof{wqb`wfmfnjfpfufm#jedfmfqbwgf`jgfgbqf#mlw,pfbq`kafojfep.jnbdf9ol`bwfgpwbwj`-oldjm!=`lmufqwujlofmwfmwfqfgejqpw!=`jq`vjwEjmobmg`kfnjpwpkf#tbp23s{8!=bp#pv`kgjujgfg?,psbm=tjoo#afojmf#leb#dqfbwnzpwfqz,jmgf{-eboojmdgvf#wl#qbjotbz`loofdfnlmpwfqgfp`fmwjw#tjwkmv`ofbqIftjpk#sqlwfpwAqjwjpkeoltfqpsqfgj`wqfelqnpavwwlm#tkl#tbpof`wvqfjmpwbmwpvj`jgfdfmfqj`sfqjlgpnbqhfwpPl`jbo#ejpkjmd`lnajmfdqbskj`tjmmfqp?aq#,=?az#wkf#MbwvqboSqjub`z`llhjfplvw`lnfqfploufPtfgjpkaqjfeozSfqpjbmpl#nv`k@fmwvqzgfsj`wp`lovnmpklvpjmdp`qjswpmf{w#wlafbqjmdnbssjmdqfujpfgiRvfqz+.tjgwk9wjwof!=wllowjsPf`wjlmgfpjdmpWvqhjpkzlvmdfq-nbw`k+~*+*8\t\tavqmjmdlsfqbwfgfdqffpplvq`f>Qj`kbqg`olpfozsobpwj`fmwqjfp?,wq=\x0e\t`lolq9 vo#jg>!slppfppqloojmdskzpj`pebjojmdf{f`vwf`lmwfpwojmh#wlGfebvow?aq#,=\t9#wqvf/`kbqwfqwlvqjpn`obppj`sql`ffgf{sobjm?,k2=\x0e\tlmojmf-<{no#ufkfosjmdgjbnlmgvpf#wkfbjqojmffmg#..=*-bwwq+qfbgfqpklpwjmd eeeeeeqfbojyfUjm`fmwpjdmbop#pq`>!,Sqlgv`wgfpsjwfgjufqpfwfoojmdSvaoj`#kfog#jmIlpfsk#wkfbwqfbeef`wp?pwzof=b#obqdfglfpm$wobwfq/#Fofnfmwebuj`lm`qfbwlqKvmdbqzBjqslqwpff#wkfpl#wkbwNj`kbfoPzpwfnpSqldqbnp/#bmg##tjgwk>f%rvlw8wqbgjmdofew!=\tsfqplmpDlogfm#Beebjqpdqbnnbqelqnjmdgfpwqlzjgfb#le`bpf#lelogfpw#wkjp#jp-pq`#>#`bqwllmqfdjpwq@lnnlmpNvpojnpTkbw#jpjm#nbmznbqhjmdqfufbopJmgffg/frvbooz,pklt\\blvwgllqfp`bsf+Bvpwqjbdfmfwj`pzpwfn/Jm#wkf#pjwwjmdKf#boplJpobmgpB`bgfnz\t\n\n?"..Gbmjfo#ajmgjmdaol`h!=jnslpfgvwjojyfBaqbkbn+f{`fswxtjgwk9svwwjmd*-kwno+\x7f\x7f#X^8\tGBWBX#)hjw`kfmnlvmwfgb`wvbo#gjbof`wnbjmoz#\\aobmh$jmpwboof{sfqwpje+wzsfJw#bopl%`lsz8#!=Wfqnpalqm#jmLswjlmpfbpwfqmwbohjmd`lm`fqmdbjmfg#lmdljmdivpwjez`qjwj`peb`wlqzjwp#ltmbppbvowjmujwfgobpwjmdkjp#ltmkqfe>!,!#qfo>!gfufols`lm`fqwgjbdqbngloobqp`ovpwfqsks<jg>bo`lklo*8~*+*8vpjmd#b=?psbm=ufppfopqfujuboBggqfppbnbwfvqbmgqljgboofdfgjoomfpptbohjmd`fmwfqprvbojeznbw`kfpvmjejfgf{wjm`wGfefmpfgjfg#jm\t\n?"..#`vpwlnpojmhjmdOjwwof#Allh#lefufmjmdnjm-ip<bqf#wkfhlmwbhwwlgbz$p-kwno!#wbqdfw>tfbqjmdBoo#Qjd8\t~*+*8qbjpjmd#Bopl/#`qv`jbobalvw!=gf`obqf..=\t?p`ejqfel{bp#nv`kbssojfpjmgf{/#p/#avw#wzsf#>#\t\x0e\t?"..wltbqgpQf`lqgpSqjubwfElqfjdmSqfnjfq`klj`fpUjqwvboqfwvqmp@lnnfmwSltfqfgjmojmf8slufqwz`kbnafqOjujmd#ulovnfpBmwklmzoldjm!#QfobwfgF`lmlnzqfb`kfp`vwwjmddqbujwzojef#jm@kbswfq.pkbgltMlwbaof?,wg=\x0e\t#qfwvqmpwbgjvntjgdfwpubqzjmdwqbufopkfog#aztkl#bqftlqh#jmeb`vowzbmdvobqtkl#kbgbjqslqwwltm#le\t\tPlnf#$`oj`h$`kbqdfphfztlqgjw#tjoo`jwz#le+wkjp*8Bmgqft#vmjrvf#`kf`hfglq#nlqf033s{8#qfwvqm8qpjlm>!sovdjmptjwkjm#kfqpfoePwbwjlmEfgfqboufmwvqfsvaojpkpfmw#wlwfmpjlmb`wqfpp`lnf#wlejmdfqpGvhf#lesflsof/f{soljwtkbw#jpkbqnlmzb#nbilq!9!kwwsjm#kjp#nfmv!=\tnlmwkozleej`fq`lvm`jodbjmjmdfufm#jmPvnnbqzgbwf#leolzbowzejwmfppbmg#tbpfnsfqlqpvsqfnfPf`lmg#kfbqjmdQvppjbmolmdfpwBoafqwbobwfqbopfw#le#pnboo!=-bssfmggl#tjwkefgfqboabmh#leafmfbwkGfpsjwf@bsjwbodqlvmgp*/#bmg#sfq`fmwjw#eqln`olpjmd`lmwbjmJmpwfbgejewffmbp#tfoo-zbkll-qfpslmgejdkwfqlap`vqfqfeof`wlqdbmj`>#Nbwk-fgjwjmdlmojmf#sbggjmdb#tkloflmfqqlqzfbq#lefmg#le#abqqjfqtkfm#jwkfbgfq#klnf#leqfpvnfgqfmbnfgpwqlmd=kfbwjmdqfwbjmp`olvgeqtbz#le#Nbq`k#2hmltjmdjm#sbqwAfwtffmofpplmp`olpfpwujqwvboojmhp!=`qlppfgFMG#..=ebnlvp#btbqgfgOj`fmpfKfbowk#ebjqoz#tfbowkznjmjnboBeqj`bm`lnsfwfobafo!=pjmdjmdebqnfqpAqbpjo*gjp`vppqfsob`fDqfdlqzelmw#`lsvqpvfgbssfbqpnbhf#vsqlvmgfgalwk#leaol`hfgpbt#wkfleej`fp`lolvqpje+gl`vtkfm#kffmelq`fsvpk+evBvdvpw#VWE.;!=Ebmwbpzjm#nlpwjmivqfgVpvboozebqnjmd`olpvqflaif`w#gfefm`fvpf#le#Nfgj`bo?algz=\tfujgfmwaf#vpfghfz@lgfpj{wffmJpobnj` 333333fmwjqf#tjgfoz#b`wjuf#+wzsflelmf#`bm`lolq#>psfbhfqf{wfmgpSkzpj`pwfqqbjm?walgz=evmfqboujftjmdnjggof#`qj`hfwsqlskfwpkjewfggl`wlqpQvppfoo#wbqdfw`lnsb`wbodfaqbpl`jbo.avoh#lenbm#bmg?,wg=\t#kf#ofew*-ubo+*ebopf*8oldj`boabmhjmdklnf#wlmbnjmd#Bqjylmb`qfgjwp*8\t~*8\telvmgfqjm#wvqm@loojmpafelqf#Avw#wkf`kbqdfgWjwof!=@bswbjmpsfoofgdlggfppWbd#..=Bggjmd9avw#tbpQf`fmw#sbwjfmwab`h#jm>ebopf%Ojm`lomtf#hmlt@lvmwfqIvgbjpnp`qjsw#bowfqfg$^*8\t##kbp#wkfvm`ofbqFufmw$/alwk#jmmlw#boo\t\t?"..#sob`jmdkbqg#wl#`fmwfqplqw#le`ojfmwppwqffwpAfqmbqgbppfqwpwfmg#wlebmwbpzgltm#jmkbqalvqEqffglniftfoqz,balvw--pfbq`kofdfmgpjp#nbgfnlgfqm#lmoz#lmlmoz#wljnbdf!#ojmfbq#sbjmwfqbmg#mlwqbqfoz#b`qlmzngfojufqpklqwfq33%bns8bp#nbmztjgwk>!,)#?"X@wjwof#>le#wkf#oltfpw#sj`hfg#fp`bsfgvpfp#lesflsofp#Svaoj`Nbwwkftwb`wj`pgbnbdfgtbz#elqobtp#lefbpz#wl#tjmgltpwqlmd##pjnsof~`bw`k+pfufmwkjmelal{tfmw#wlsbjmwfg`jwjyfmJ#glm$wqfwqfbw-#Plnf#tt-!*8\talnajmdnbjowl9nbgf#jm-#Nbmz#`bqqjfp\x7f\x7fx~8tjtlqh#lepzmlmzngfefbwpebulqfglswj`bosbdfWqbvmofpp#pfmgjmdofew!=?`lnP`lqBoo#wkfiRvfqz-wlvqjpw@obppj`ebopf!#Tjokfonpvavqapdfmvjmfajpklsp-psojw+dolabo#elooltpalgz#lemlnjmbo@lmwb`wpf`vobqofew#wl`kjfeoz.kjggfm.abmmfq?,oj=\t\t-#Tkfm#jm#alwkgjpnjppF{solqfbotbzp#ujb#wkfpsb/]lotfoebqfqvojmd#bqqbmdf`bswbjmkjp#plmqvof#lekf#wllhjwpfoe/>3%bns8+`boofgpbnsofpwl#nbhf`ln,sbdNbqwjm#Hfmmfgzb``fswpevoo#lekbmgofgAfpjgfp,,..=?,baof#wlwbqdfwpfppfm`fkjn#wl#jwp#az#`lnnlm-njmfqbowl#wbhftbzp#wlp-lqd,obgujpfgsfmbowzpjnsof9je#wkfzOfwwfqpb#pklqwKfqafqwpwqjhfp#dqlvsp-ofmdwkeojdkwplufqobspoltoz#ofppfq#pl`jbo#?,s=\t\n\njw#jmwlqbmhfg#qbwf#levo=\x0e\t##bwwfnswsbjq#lenbhf#jwHlmwbhwBmwlmjlkbujmd#qbwjmdp#b`wjufpwqfbnpwqbssfg!*-`pp+klpwjofofbg#wlojwwof#dqlvsp/Sj`wvqf..=\x0e\t\x0e\t#qltp>!#laif`wjmufqpf?ellwfq@vpwlnU=?_,p`qploujmd@kbnafqpobufqztlvmgfgtkfqfbp">#$vmgelq#boosbqwoz#.qjdkw9Bqbajbmab`hfg#`fmwvqzvmjw#lenlajof.Fvqlsf/jp#klnfqjph#legfpjqfg@ojmwlm`lpw#lebdf#le#af`lnf#mlmf#les%rvlw8Njggof#fbg$*X3@qjwj`ppwvgjlp=%`lsz8dqlvs!=bppfnaonbhjmd#sqfppfgtjgdfw-sp9!#<#qfavjowaz#plnfElqnfq#fgjwlqpgfobzfg@bmlmj`kbg#wkfsvpkjmd`obpp>!avw#bqfsbqwjboAbazolmalwwln#`bqqjfq@lnnbmgjwp#vpfBp#tjwk`lvqpfpb#wkjqggfmlwfpbopl#jmKlvpwlm13s{8!=b``vpfgglvaof#dlbo#leEbnlvp#*-ajmg+sqjfpwp#Lmojmfjm#Ivozpw#(#!d`lmpvowgf`jnbokfosevoqfujufgjp#ufqzq$($jswolpjmd#efnbofpjp#boplpwqjmdpgbzp#lebqqjuboevwvqf#?laif`welq`jmdPwqjmd+!#,=\t\n\nkfqf#jpfm`lgfg-##Wkf#aboollmglmf#az,`lnnlmad`lolqobt#le#Jmgjbmbbuljgfgavw#wkf1s{#0s{irvfqz-bewfq#bsloj`z-nfm#bmgellwfq.>#wqvf8elq#vpfp`qffm-Jmgjbm#jnbdf#>ebnjoz/kwws9,,#%maps8gqjufqpfwfqmbopbnf#bpmlwj`fgujftfqp~*+*8\t#jp#nlqfpfbplmpelqnfq#wkf#mftjp#ivpw`lmpfmw#Pfbq`ktbp#wkftkz#wkfpkjssfgaq=?aq=tjgwk9#kfjdkw>nbgf#le`vjpjmfjp#wkbwb#ufqz#Bgnjqbo#ej{fg8mlqnbo#NjppjlmSqfpp/#lmwbqjl`kbqpfwwqz#wl#jmubgfg>!wqvf!psb`jmdjp#nlpwb#nlqf#wlwboozeboo#le~*8\x0e\t##jnnfmpfwjnf#jmpfw#lvwpbwjpezwl#ejmggltm#wlolw#le#Sobzfqpjm#Ivmfrvbmwvnmlw#wkfwjnf#wlgjpwbmwEjmmjpkpq`#>#+pjmdof#kfos#leDfqnbm#obt#bmgobafofgelqfpwp`llhjmdpsb`f!=kfbgfq.tfoo#bpPwbmofzaqjgdfp,dolabo@qlbwjb#Balvw#X3^8\t##jw/#bmgdqlvsfgafjmd#b*xwkqltkf#nbgfojdkwfqfwkj`boEEEEEE!alwwln!ojhf#b#fnsolzpojuf#jmbp#pffmsqjmwfqnlpw#leva.ojmhqfif`wpbmg#vpfjnbdf!=pv``ffgeffgjmdMv`ofbqjmelqnbwl#kfosTlnfm$pMfjwkfqNf{j`bmsqlwfjm?wbaof#az#nbmzkfbowkzobtpvjwgfujpfg-svpk+xpfoofqppjnsoz#Wkqlvdk-`llhjf#Jnbdf+logfq!=vp-ip!=#Pjm`f#vmjufqpobqdfq#lsfm#wl"..#fmgojfp#jm$^*8\x0e\t##nbqhfwtkl#jp#+!GLN@lnbmbdfglmf#elqwzsfle#Hjmdglnsqlejwpsqlslpfwl#pklt`fmwfq8nbgf#jwgqfppfgtfqf#jmnj{wvqfsqf`jpfbqjpjmdpq`#>#$nbhf#b#pf`vqfgAbswjpwulwjmd#\t\n\nubq#Nbq`k#1dqft#vs@ojnbwf-qfnlufphjoofgtbz#wkf?,kfbg=eb`f#leb`wjmd#qjdkw!=wl#tlqhqfgv`fpkbp#kbgfqf`wfgpklt+*8b`wjlm>allh#lebm#bqfb>>#!kww?kfbgfq\t?kwno=`lmelqneb`jmd#`llhjf-qfoz#lmklpwfg#-`vpwlnkf#tfmwavw#elqpsqfbg#Ebnjoz#b#nfbmplvw#wkfelqvnp-ellwbdf!=Nlajo@ofnfmwp!#jg>!bp#kjdkjmwfmpf..=?"..efnbof#jp#pffmjnsojfgpfw#wkfb#pwbwfbmg#kjpebpwfpwafpjgfpavwwlm\\alvmgfg!=?jnd#Jmelal{fufmwp/b#zlvmdbmg#bqfMbwjuf#`kfbsfqWjnflvwbmg#kbpfmdjmfptlm#wkf+nlpwozqjdkw9#ejmg#b#.alwwlnSqjm`f#bqfb#lenlqf#lepfbq`k\\mbwvqf/ofdboozsfqjlg/obmg#lelq#tjwkjmgv`fgsqlujmdnjppjofol`boozBdbjmpwwkf#tbzh%rvlw8s{8!=\x0e\tsvpkfg#babmglmmvnfqbo@fqwbjmJm#wkjpnlqf#jmlq#plnfmbnf#jpbmg/#jm`qltmfgJPAM#3.`qfbwfpL`wlafqnbz#mlw`fmwfq#obwf#jmGfefm`ffmb`wfgtjpk#wlaqlbgoz`llojmdlmolbg>jw-#Wkfqf`lufqNfnafqpkfjdkw#bppvnfp?kwno=\tsflsof-jm#lmf#>tjmgltellwfq\\b#dllg#qfhobnblwkfqp/wl#wkjp\\`llhjfsbmfo!=Olmglm/gfejmfp`qvpkfgabswjpn`lbpwbopwbwvp#wjwof!#nluf#wlolpw#jmafwwfq#jnsojfpqjuboqzpfqufqp#PzpwfnSfqkbspfp#bmg#`lmwfmgeoltjmdobpwfg#qjpf#jmDfmfpjpujft#leqjpjmd#pffn#wlavw#jm#ab`hjmdkf#tjoodjufm#bdjujmd#`jwjfp-eolt#le#Obwfq#boo#avwKjdktbzlmoz#azpjdm#lekf#glfpgjeefqpabwwfqz%bns8obpjmdofpwkqfbwpjmwfdfqwbhf#lmqfevpfg`boofg#>VP%bnsPff#wkfmbwjufpaz#wkjppzpwfn-kfbg#le9klufq/ofpajbmpvqmbnfbmg#boo`lnnlm,kfbgfq\\\\sbqbnpKbqubqg,sj{fo-qfnlubopl#olmdqlof#leiljmwozphzp`qbVmj`lgfaq#,=\x0e\tBwobmwbmv`ofvp@lvmwz/svqfoz#`lvmw!=fbpjoz#avjog#blm`oj`hb#djufmsljmwfqk%rvlw8fufmwp#fopf#x\tgjwjlmpmlt#wkf/#tjwk#nbm#tkllqd,Tfalmf#bmg`buboqzKf#gjfgpfbwwof33/333#xtjmgltkbuf#wlje+tjmgbmg#jwpplofoz#n%rvlw8qfmftfgGfwqljwbnlmdpwfjwkfq#wkfn#jmPfmbwlqVp?,b=?Hjmd#leEqbm`jp.sqlgv`kf#vpfgbqw#bmgkjn#bmgvpfg#azp`lqjmdbw#klnfwl#kbufqfobwfpjajojwzeb`wjlmAveebolojmh!=?tkbw#kfeqff#wl@jwz#le`lnf#jmpf`wlqp`lvmwfglmf#gbzmfqulvpprvbqf#~8je+dljm#tkbwjnd!#bojp#lmozpfbq`k,wvfpgbzollpfozPlolnlmpf{vbo#.#?b#kqnfgjvn!GL#MLW#Eqbm`f/tjwk#b#tbq#bmgpf`lmg#wbhf#b#=\x0e\t\x0e\t\x0e\tnbqhfw-kjdktbzglmf#jm`wjujwz!obpw!=laojdfgqjpf#wl!vmgfejnbgf#wl#Fbqoz#sqbjpfgjm#jwp#elq#kjpbwkofwfIvsjwfqZbkll"#wfqnfg#pl#nbmzqfbooz#p-#Wkf#b#tlnbm<ubovf>gjqf`w#qjdkw!#aj`z`ofb`jmd>!gbz#bmgpwbwjmdQbwkfq/kjdkfq#Leej`f#bqf#mltwjnfp/#tkfm#b#sbz#elqlm#wkjp.ojmh!=8alqgfqbqlvmg#bmmvbo#wkf#Mftsvw#wkf-`ln!#wbhjm#wlb#aqjfe+jm#wkfdqlvsp-8#tjgwkfmyznfppjnsof#jm#obwfxqfwvqmwkfqbszb#sljmwabmmjmdjmhp!=\t+*8!#qfb#sob`f_v330@bbalvw#bwq=\x0e\t\n\n``lvmw#djufp#b?P@QJSWQbjotbzwkfnfp,wlloal{AzJg+!{kvnbmp/tbw`kfpjm#plnf#je#+tj`lnjmd#elqnbwp#Vmgfq#avw#kbpkbmgfg#nbgf#azwkbm#jmefbq#legfmlwfg,jeqbnfofew#jmulowbdfjm#fb`kb%rvlw8abpf#leJm#nbmzvmgfqdlqfdjnfpb`wjlm#?,s=\x0e\t?vpwlnUb8%dw8?,jnslqwplq#wkbwnlpwoz#%bns8qf#pjyf>!?,b=?,kb#`obppsbppjufKlpw#>#TkfwkfqefqwjofUbqjlvp>X^8+ev`bnfqbp,=?,wg=b`wp#bpJm#plnf=\x0e\t\x0e\t?"lqdbmjp#?aq#,=Afjijmd`bwbo/Lgfvwp`kfvqlsfvfvphbqbdbfjodfpufmphbfpsb/]bnfmpbifvpvbqjlwqbabiln/E{j`ls/Mdjmbpjfnsqfpjpwfnbl`wvaqfgvqbmwfb/]bgjqfnsqfpbnlnfmwlmvfpwqlsqjnfqbwqbu/Epdqb`jbpmvfpwqbsql`fplfpwbglp`bojgbgsfqplmbm/Vnfqlb`vfqgln/Vpj`bnjfnaqllefqwbpbodvmlpsb/Apfpfifnsolgfqf`klbgfn/Mpsqjubglbdqfdbqfmob`fpslpjaofklwfofppfujoobsqjnfql/Vowjnlfufmwlpbq`kjul`vowvqbnvifqfpfmwqbgbbmvm`jlfnabqdlnfq`bgldqbmgfpfpwvgjlnfilqfpefaqfqlgjpf/]lwvqjpnl`/_gjdlslqwbgbfpsb`jlebnjojbbmwlmjlsfqnjwfdvbqgbqbodvmbpsqf`jlpbodvjfmpfmwjglujpjwbpw/Awvol`lml`fqpfdvmgl`lmpfileqbm`jbnjmvwlppfdvmgbwfmfnlpfef`wlpn/Mobdbpfpj/_mqfujpwbdqbmbgb`lnsqbqjmdqfpldbq`/Abb``j/_mf`vbglqrvjfmfpjm`ovplgfafq/Mnbwfqjbklnaqfpnvfpwqbslgq/Abnb/]bmb/Vowjnbfpwbnlplej`jbowbnajfmmjmd/Vmpbovglpslgfnlpnfilqbqslpjwjlmavpjmfppklnfsbdfpf`vqjwzobmdvbdfpwbmgbqg`bnsbjdmefbwvqfp`bwfdlqzf{wfqmbo`kjogqfmqfpfqufgqfpfbq`kf{`kbmdfebulqjwfwfnsobwfnjojwbqzjmgvpwqzpfquj`fpnbwfqjbosqlgv`wpy.jmgf{9`lnnfmwpplewtbqf`lnsofwf`bofmgbqsobwelqnbqwj`ofpqfrvjqfgnlufnfmwrvfpwjlmavjogjmdslojwj`pslppjaofqfojdjlmskzpj`boeffgab`hqfdjpwfqsj`wvqfpgjpbaofgsqlwl`lobvgjfm`fpfwwjmdpb`wjujwzfofnfmwpofbqmjmdbmzwkjmdbapwqb`wsqldqfpplufqujftnbdbyjmff`lmlnj`wqbjmjmdsqfppvqfubqjlvp#?pwqlmd=sqlsfqwzpklssjmdwldfwkfqbgubm`fgafkbujlqgltmolbgefbwvqfgellwaboopfof`wfgObmdvbdfgjpwbm`fqfnfnafqwqb`hjmdsbpptlqgnlgjejfgpwvgfmwpgjqf`wozejdkwjmdmlqwkfqmgbwbabpfefpwjuboaqfbhjmdol`bwjlmjmwfqmfwgqlsgltmsqb`wj`ffujgfm`fevm`wjlmnbqqjbdfqfpslmpfsqlaofnpmfdbwjufsqldqbnpbmbozpjpqfofbpfgabmmfq!=svq`kbpfsloj`jfpqfdjlmbo`qfbwjufbqdvnfmwallhnbqhqfefqqfq`kfnj`bogjujpjlm`booab`hpfsbqbwfsqlif`wp`lmeoj`wkbqgtbqfjmwfqfpwgfojufqznlvmwbjmlawbjmfg>#ebopf8elq+ubq#b``fswfg`bsb`jwz`lnsvwfqjgfmwjwzbjq`qbewfnsolzfgsqlslpfgglnfpwj`jm`ovgfpsqlujgfgklpsjwboufqwj`bo`loobspfbssqlb`ksbqwmfqpoldl!=?bgbvdkwfqbvwklq!#`vowvqboebnjojfp,jnbdfp,bppfnaozsltfqevowfb`kjmdejmjpkfggjpwqj`w`qjwj`bo`dj.ajm,svqslpfpqfrvjqfpfof`wjlmaf`lnjmdsqlujgfpb`bgfnj`f{fq`jpfb`wvbooznfgj`jmf`lmpwbmwb``jgfmwNbdbyjmfgl`vnfmwpwbqwjmdalwwln!=lapfqufg9#%rvlw8f{wfmgfgsqfujlvpPlewtbqf`vpwlnfqgf`jpjlmpwqfmdwkgfwbjofgpojdkwozsobmmjmdwf{wbqfb`vqqfm`zfufqzlmfpwqbjdkwwqbmpefqslpjwjufsqlgv`fgkfqjwbdfpkjssjmdbaplovwfqf`fjufgqfofubmwavwwlm!#ujlofm`fbmztkfqfafmfejwpobvm`kfgqf`fmwozboojbm`felooltfgnvowjsofavoofwjmjm`ovgfgl``vqqfgjmwfqmbo\'+wkjp*-qfsvaoj`=?wq=?wg`lmdqfppqf`lqgfgvowjnbwfplovwjlm?vo#jg>!gjp`lufqKlnf?,b=tfapjwfpmfwtlqhpbowklvdkfmwjqfoznfnlqjbonfppbdfp`lmwjmvfb`wjuf!=plnftkbwuj`wlqjbTfpwfqm##wjwof>!Ol`bwjlm`lmwqb`wujpjwlqpGltmolbgtjwklvw#qjdkw!=\tnfbpvqfptjgwk#>#ubqjbaofjmuloufgujqdjmjbmlqnboozkbssfmfgb``lvmwppwbmgjmdmbwjlmboQfdjpwfqsqfsbqfg`lmwqlopb``vqbwfajqwkgbzpwqbwfdzleej`jbodqbskj`p`qjnjmboslppjaoz`lmpvnfqSfqplmbopsfbhjmdubojgbwfb`kjfufg-isd!#,=nb`kjmfp?,k1=\t##hfztlqgpeqjfmgozaqlwkfqp`lnajmfglqjdjmbo`lnslpfgf{sf`wfgbgfrvbwfsbhjpwbmeloolt!#ubovbaof?,obafo=qfobwjufaqjmdjmdjm`qfbpfdlufqmlqsovdjmp,Ojpw#le#Kfbgfq!=!#mbnf>!#+%rvlw8dqbgvbwf?,kfbg=\t`lnnfq`fnbobzpjbgjqf`wlqnbjmwbjm8kfjdkw9p`kfgvof`kbmdjmdab`h#wl#`bwkloj`sbwwfqmp`lolq9# dqfbwfpwpvssojfpqfojbaof?,vo=\t\n\n?pfof`w#`jwjyfmp`olwkjmdtbw`kjmd?oj#jg>!psf`jej``bqqzjmdpfmwfm`f?`fmwfq=`lmwqbpwwkjmhjmd`bw`k+f*plvwkfqmNj`kbfo#nfq`kbmw`bqlvpfosbggjmd9jmwfqjlq-psojw+!ojybwjlmL`wlafq#*xqfwvqmjnsqlufg..%dw8\t\t`lufqbdf`kbjqnbm-smd!#,=pvaif`wpQj`kbqg#tkbwfufqsqlabaozqf`lufqzabpfabooivgdnfmw`lmmf`w--`pp!#,=#tfapjwfqfslqwfggfebvow!,=?,b=\x0e\tfof`wqj`p`lwobmg`qfbwjlmrvbmwjwz-#JPAM#3gjg#mlw#jmpwbm`f.pfbq`k.!#obmd>!psfbhfqp@lnsvwfq`lmwbjmpbq`kjufpnjmjpwfqqfb`wjlmgjp`lvmwJwbojbml`qjwfqjbpwqlmdoz9#$kwws9$p`qjsw$`lufqjmdleefqjmdbssfbqfgAqjwjpk#jgfmwjezEb`fallhmvnfqlvpufkj`ofp`lm`fqmpBnfqj`bmkbmgojmdgju#jg>!Tjoojbn#sqlujgfq\\`lmwfmwb``vqb`zpf`wjlm#bmgfqplmeof{jaof@bwfdlqzobtqfm`f?p`qjsw=obzlvw>!bssqlufg#nb{jnvnkfbgfq!=?,wbaof=Pfquj`fpkbnjowlm`vqqfmw#`bmbgjbm`kbmmfop,wkfnfp,,bqwj`oflswjlmboslqwvdboubovf>!!jmwfqubotjqfofppfmwjwofgbdfm`jfpPfbq`k!#nfbpvqfgwklvpbmgpsfmgjmd%kfoojs8mft#Gbwf!#pjyf>!sbdfMbnfnjggof!#!#,=?,b=kjggfm!=pfrvfm`fsfqplmbolufqeoltlsjmjlmpjoojmljpojmhp!=\t\n?wjwof=ufqpjlmppbwvqgbzwfqnjmbojwfnsqlsfmdjmffqpf`wjlmpgfpjdmfqsqlslpbo>!ebopf!Fpsb/]loqfofbpfppvanjw!#fq%rvlw8bggjwjlmpznswlnplqjfmwfgqfplvq`fqjdkw!=?sofbpvqfpwbwjlmpkjpwlqz-ofbujmd##alqgfq>`lmwfmwp`fmwfq!=-\t\tPlnf#gjqf`wfgpvjwbaofavodbqjb-pklt+*8gfpjdmfgDfmfqbo#`lm`fswpF{bnsofptjoojbnpLqjdjmbo!=?psbm=pfbq`k!=lsfqbwlqqfrvfpwpb#%rvlw8booltjmdGl`vnfmwqfujpjlm-#\t\tWkf#zlvqpfoe@lmwb`w#nj`kjdbmFmdojpk#`lovnajbsqjlqjwzsqjmwjmdgqjmhjmdeb`jojwzqfwvqmfg@lmwfmw#leej`fqpQvppjbm#dfmfqbwf.;;6:.2!jmgj`bwfebnjojbq#rvbojwznbqdjm93#`lmwfmwujftslqw`lmwb`wp.wjwof!=slqwbaof-ofmdwk#fojdjaofjmuloufpbwobmwj`lmolbg>!gfebvow-pvssojfgsbznfmwpdolppbqz\t\tBewfq#dvjgbm`f?,wg=?wgfm`lgjmdnjggof!=`bnf#wl#gjpsobzpp`lwwjpkilmbwkbmnbilqjwztjgdfwp-`ojmj`bowkbjobmgwfb`kfqp?kfbg=\t\nbeef`wfgpvsslqwpsljmwfq8wlPwqjmd?,pnboo=lhobklnbtjoo#af#jmufpwlq3!#bow>!klojgbzpQfplvq`foj`fmpfg#+tkj`k#-#Bewfq#`lmpjgfqujpjwjmdf{solqfqsqjnbqz#pfbq`k!#bmgqljg!rvj`hoz#nffwjmdpfpwjnbwf8qfwvqm#8`lolq9 #kfjdkw>bssqlubo/#%rvlw8#`kf`hfg-njm-ip!nbdmfwj`=?,b=?,kelqf`bpw-#Tkjof#wkvqpgbzgufqwjpf%fb`vwf8kbp@obppfubovbwflqgfqjmdf{jpwjmdsbwjfmwp#Lmojmf#`lolqbglLswjlmp!`bnsafoo?"..#fmg?,psbm=??aq#,=\x0e\t\\slsvsp\x7fp`jfm`fp/%rvlw8#rvbojwz#Tjmgltp#bppjdmfgkfjdkw9#?a#`obppof%rvlw8#ubovf>!#@lnsbmzf{bnsofp?jeqbnf#afojfufpsqfpfmwpnbqpkboosbqw#le#sqlsfqoz*-\t\tWkf#wb{lmlnznv`k#le#?,psbm=\t!#gbwb.pqwvdv/Fpp`qlooWl#sqlif`w?kfbg=\x0e\tbwwlqmfzfnskbpjppslmplqpebm`zal{tlqog$p#tjogojef`kf`hfg>pfppjlmpsqldqbnns{8elmw.#Sqlif`wilvqmbopafojfufgub`bwjlmwklnsplmojdkwjmdbmg#wkf#psf`jbo#alqgfq>3`kf`hjmd?,walgz=?avwwlm#@lnsofwf`ofbqej{\t?kfbg=\tbqwj`of#?pf`wjlmejmgjmdpqlof#jm#slsvobq##L`wlafqtfapjwf#f{slpvqfvpfg#wl##`kbmdfplsfqbwfg`oj`hjmdfmwfqjmd`lnnbmgpjmelqnfg#mvnafqp##?,gju=`qfbwjmdlmPvanjwnbqzobmg`loofdfpbmbozwj`ojpwjmdp`lmwb`w-olddfgJmbgujplqzpjaojmdp`lmwfmw!p%rvlw8*p-#Wkjp#sb`hbdfp`kf`hal{pvddfpwpsqfdmbmwwlnlqqltpsb`jmd>j`lm-smdibsbmfpf`lgfabpfavwwlm!=dbnaojmdpv`k#bp#/#tkjof#?,psbm=#njpplvqjpslqwjmdwls92s{#-?,psbm=wfmpjlmptjgwk>!1obyzolbgmlufnafqvpfg#jm#kfjdkw>!`qjsw!=\t%maps8?,?wq=?wg#kfjdkw91,sqlgv`w`lvmwqz#jm`ovgf#ellwfq!#%ow8"..#wjwof!=?,irvfqz-?,elqn=\t+\vBl\bQ\x7f*+\vUm\x05Gx*kqubwphjjwbojbmlqln/Nm(ow/Pqh/Kf4K4]4C5dwbnaj/Emmlwj`jbpnfmpbifpsfqplmbpgfqf`klpmb`jlmbopfquj`jl`lmwb`wlvpvbqjlpsqldqbnbdlajfqmlfnsqfpbpbmvm`jlpubofm`jb`lolnajbgfpsv/Epgfslqwfpsqlzf`wlsqlgv`wls/Vaoj`lmlplwqlpkjpwlqjbsqfpfmwfnjoolmfpnfgjbmwfsqfdvmwbbmwfqjlqqf`vqplpsqlaofnbpbmwjbdlmvfpwqlplsjmj/_mjnsqjnjqnjfmwqbpbn/Eqj`bufmgfglqpl`jfgbgqfpsf`wlqfbojybqqfdjpwqlsbobaqbpjmwfq/Epfmwlm`fpfpsf`jbonjfnaqlpqfbojgbg`/_qglabybqbdlybs/Mdjmbppl`jbofpaolrvfbqdfpwj/_mborvjofqpjpwfnbp`jfm`jbp`lnsofwlufqpj/_m`lnsofwbfpwvgjlps/Vaoj`blaifwjulboj`bmwfavp`bglq`bmwjgbgfmwqbgbpb``jlmfpbq`kjulppvsfqjlqnbzlq/Abbofnbmjbevm`j/_m/Vowjnlpkb`jfmglbrvfoolpfgj`j/_mefqmbmglbnajfmwfeb`fallhmvfpwqbp`ojfmwfpsql`fplpabpwbmwfsqfpfmwbqfslqwbq`lmdqfplsvaoj`bq`lnfq`jl`lmwqbwli/_ufmfpgjpwqjwlw/E`mj`b`lmivmwlfmfqd/Abwqbabibqbpwvqjbpqf`jfmwfvwjojybqalofw/Ampboubglq`lqqf`wbwqbabilpsqjnfqlpmfdl`jlpojafqwbggfwboofpsbmwboobsq/_{jnlbonfq/Abbmjnbofprvj/Emfp`lqby/_mpf``j/_mavp`bmglls`jlmfpf{wfqjlq`lm`fswlwlgbu/Abdbofq/Abfp`qjajqnfgj`jmboj`fm`jb`lmpvowbbpsf`wlp`q/Awj`bg/_obqfpivpwj`jbgfafq/Mmsfq/Alglmf`fpjwbnbmwfmfqsfrvf/]lqf`jajgbwqjavmbowfmfqjef`bm`j/_m`bmbqjbpgfp`bqdbgjufqplpnboolq`bqfrvjfqfw/E`mj`lgfafq/Abujujfmgbejmbmybpbgfobmwfevm`jlmb`lmpfilpgje/A`jo`jvgbgfpbmwjdvbpbubmybgbw/Eqnjmlvmjgbgfpp/Mm`kfy`bnsb/]bplewlmj`qfujpwbp`lmwjfmfpf`wlqfpnlnfmwlpeb`vowbg`q/Egjwlgjufqpbppvsvfpwleb`wlqfppfdvmglpsfrvf/]b<_<R<X<\\<Y=m<W<T<Y=m=n=`<]=g<W<R<]=g=n=`=a=n<R<P<y=m<W<T=n<R<_<R<P<Y<Q=c<^=m<Y=i=a=n<R<U<X<\\<Z<Y<]=g<W<T<_<R<X=o<X<Y<Q=`=a=n<R=n<]=g<W<\\=m<Y<]=c<R<X<T<Q=m<Y<]<Y<Q<\\<X<R=m<\\<U=n=h<R=n<R<Q<Y<_<R=m<^<R<T=m<^<R<U<T<_=l=g=n<R<Z<Y<^=m<Y<P=m<^<R=b<W<T=d=`=a=n<T=i<S<R<V<\\<X<Q<Y<U<X<R<P<\\<P<T=l<\\<W<T<]<R=n<Y<P=o=i<R=n=c<X<^=o=i=m<Y=n<T<W=b<X<T<X<Y<W<R<P<T=l<Y=n<Y<]=c=m<^<R<Y<^<T<X<Y=k<Y<_<R=a=n<T<P=m=k<Y=n=n<Y<P=g=j<Y<Q=g=m=n<\\<W<^<Y<X=`=n<Y<P<Y<^<R<X=g=n<Y<]<Y<^=g=d<Y<Q<\\<P<T=n<T<S<\\=n<R<P=o<S=l<\\<^<W<T=j<\\<R<X<Q<\\<_<R<X=g<[<Q<\\=b<P<R<_=o<X=l=o<_<^=m<Y<U<T<X<Y=n<V<T<Q<R<R<X<Q<R<X<Y<W<\\<X<Y<W<Y=m=l<R<V<T=b<Q=c<^<Y=m=`<y=m=n=`=l<\\<[<\\<Q<\\=d<T4K5h5h5k4K5h4F5f4@5i5f4U4B4K4Y4E4K5h4\\5f4U5h5f5k4@4C5f4C4K5h4N5j4K5h4]4C4F4A5o5i4Y5m4A4E5o4K5j4F4K5h5h5f5f5o5d5j4X4D5o4E5m5f5k4K4D5j4K4F4A5d4K4M4O5o4G4]4B5h4K5h4K5h4A4D4C5h5f5h4C4]5d4_4K4Z4V4[4F5o5d5j5k5j4K5o4_4K4A4E5j4K4C5f4K5h4[4D4U5h5f5o4X5o4]4K5f5i5o5j5i5j5k4K4X4]5o4E4]4J5f4_5j4X5f4[5i4K4\\4K4K5h5m5j4X4D4K4D4F4U4D4]4]4A5i4E5o4K5m4E5f5n5d5h5i4]5o4^5o5h5i4E4O4A5i4C5n5h4D5f5f4U5j5f4Y5d4]4E4[4]5f5n4X4K4]5o4@5d4K5h4O4B4]5e5i4U5j4K4K4D4A4G4U4]5d4Z4D4X5o5h5i4_4@5h4D5j4K5j4B4K5h4C5o4F4K4D5o5h5f4E4D4C5d5j4O5f4Z4K5f5d4@4C5m4]5f5n5o4F4D4F4O5m4Z5h5i4[4D4B4K5o4G4]4D4K4]5o4K5m4Z5h4K4A5h5e5j5m4_5k4O5f4K5i4]4C5d4C4O5j5k4K4C5f5j4K4K5h4K5j5i4U4]4Z4F4U5h5i4C4K4B5h5i5i5o5j\x03\x03\x03\x03\x03\x03\x03\x03\x02\x03\x02\x03\x02\x03\x02\x03\x01\x03\x01\x03\x01\x03\x01\x03\x07\x03\x07\x03\x07\x03\x07\x03\x03\x02\x01\0\x07\x06\x05\x04\x04\x05\x06\x07\0\x01\x02\x03\v\n\t\b\x0f\x0e\r\f\f\r\x0e\x0f\b\t\n\v\x13\x12\x11\x10\x17\x16\x15\x14\x14\x15\x16\x17\x10\x11\x12\x13\x1b\x1a\x19\x18\x1f\x1e\x1d\x1c\x1c\x1d\x1e\x1f\x18\x19\x1a\x1b\x13\x13\x13\x13\x03\x03\x03\x03\x03\x03\x03\x03\x13\x13\x13\x13\x02\x03\x03\x03\x01\x03\x03\x03\x01\x03\x03\x03\x02\x03\x03\x03\x02\x03\x03\x03\0\x03\x03\x03\x13\x13\x03\x02\x03\x03\x03\x02\x03\x03\x13\x13\x03\x02\x03\x03\x03\v\x03\v\x03\v\x03\v\x03\x03\x03\x02\x03\x01\x03\0\x03\x07\x03\x06\x03\x05\x03\x04qfplvq`fp`lvmwqjfprvfpwjlmpfrvjsnfmw`lnnvmjwzbubjobaofkjdkojdkwGWG,{kwnonbqhfwjmdhmltofgdfplnfwkjmd`lmwbjmfqgjqf`wjlmpvap`qjafbgufqwjpf`kbqb`wfq!#ubovf>!?,pfof`w=Bvpwqbojb!#`obpp>!pjwvbwjlmbvwklqjwzelooltjmdsqjnbqjozlsfqbwjlm`kboofmdfgfufolsfgbmlmznlvpevm`wjlm#evm`wjlmp`lnsbmjfppwqv`wvqfbdqffnfmw!#wjwof>!slwfmwjbofgv`bwjlmbqdvnfmwppf`lmgbqz`lszqjdkwobmdvbdfpf{`ovpjuf`lmgjwjlm?,elqn=\x0e\tpwbwfnfmwbwwfmwjlmAjldqbskz~#fopf#x\tplovwjlmptkfm#wkf#Bmbozwj`pwfnsobwfpgbmdfqlvppbwfoojwfgl`vnfmwpsvaojpkfqjnslqwbmwsqlwlwzsfjmeovfm`f%qbrvl8?,feef`wjufdfmfqboozwqbmpelqnafbvwjevowqbmpslqwlqdbmjyfgsvaojpkfgsqlnjmfmwvmwjo#wkfwkvnambjoMbwjlmbo#-el`vp+*8lufq#wkf#njdqbwjlmbmmlvm`fgellwfq!=\tf{`fswjlmofpp#wkbmf{sfmpjufelqnbwjlmeqbnftlqhwfqqjwlqzmgj`bwjlm`vqqfmwoz`obppMbnf`qjwj`jpnwqbgjwjlmfopftkfqfBof{bmgfqbssljmwfgnbwfqjbopaqlbg`bpwnfmwjlmfgbeejojbwf?,lswjlm=wqfbwnfmwgjeefqfmw,gfebvow-Sqfpjgfmwlm`oj`h>!ajldqbskzlwkfqtjpfsfqnbmfmwEqbm/KbjpKlooztllgf{sbmpjlmpwbmgbqgp?,pwzof=\tqfgv`wjlmGf`fnafq#sqfefqqfg@bnaqjgdflsslmfmwpAvpjmfpp#`lmevpjlm=\t?wjwof=sqfpfmwfgf{sobjmfgglfp#mlw#tlqogtjgfjmwfqeb`fslpjwjlmpmftpsbsfq?,wbaof=\tnlvmwbjmpojhf#wkf#fppfmwjboejmbm`jbopfof`wjlmb`wjlm>!,babmglmfgFgv`bwjlmsbqpfJmw+pwbajojwzvmbaof#wl?,wjwof=\tqfobwjlmpMlwf#wkbwfeej`jfmwsfqelqnfgwtl#zfbqpPjm`f#wkfwkfqfelqftqbssfq!=bowfqmbwfjm`qfbpfgAbwwof#lesfq`fjufgwqzjmd#wlmf`fppbqzslqwqbzfgfof`wjlmpFojybafwk?,jeqbnf=gjp`lufqzjmpvqbm`fp-ofmdwk8ofdfmgbqzDfldqbskz`bmgjgbwf`lqslqbwfplnfwjnfppfquj`fp-jmkfqjwfg?,pwqlmd=@lnnvmjwzqfojdjlvpol`bwjlmp@lnnjwwffavjogjmdpwkf#tlqogml#olmdfqafdjmmjmdqfefqfm`f`bmmlw#afeqfrvfm`zwzsj`boozjmwl#wkf#qfobwjuf8qf`lqgjmdsqfpjgfmwjmjwjboozwf`kmjrvfwkf#lwkfqjw#`bm#aff{jpwfm`fvmgfqojmfwkjp#wjnfwfofsklmfjwfnp`lsfsqb`wj`fpbgubmwbdf*8qfwvqm#Elq#lwkfqsqlujgjmdgfnl`qb`zalwk#wkf#f{wfmpjufpveefqjmdpvsslqwfg`lnsvwfqp#evm`wjlmsqb`wj`bopbjg#wkbwjw#nbz#afFmdojpk?,eqln#wkf#p`kfgvofggltmolbgp?,obafo=\tpvpsf`wfgnbqdjm9#3psjqjwvbo?,kfbg=\t\tnj`qlplewdqbgvboozgjp`vppfgkf#af`bnff{f`vwjufirvfqz-ipklvpfklog`lmejqnfgsvq`kbpfgojwfqboozgfpwqlzfgvs#wl#wkfubqjbwjlmqfnbjmjmdjw#jp#mlw`fmwvqjfpIbsbmfpf#bnlmd#wkf`lnsofwfgbodlqjwknjmwfqfpwpqfafoojlmvmgfejmfgfm`lvqbdfqfpjybaofjmuloujmdpfmpjwjufvmjufqpbosqlujpjlm+bowklvdkefbwvqjmd`lmgv`wfg*/#tkj`k#`lmwjmvfg.kfbgfq!=Efaqvbqz#mvnfqlvp#lufqeolt9`lnslmfmweqbdnfmwpf{`foofmw`lopsbm>!wf`kmj`bomfbq#wkf#Bgubm`fg#plvq`f#lef{sqfppfgKlmd#Hlmd#Eb`fallhnvowjsof#nf`kbmjpnfofubwjlmleefmpjuf?,elqn=\t\npslmplqfggl`vnfmw-lq#%rvlw8wkfqf#bqfwklpf#tklnlufnfmwpsql`fppfpgjeej`vowpvanjwwfgqf`lnnfmg`lmujm`fgsqlnlwjmd!#tjgwk>!-qfsob`f+`obppj`bo`lbojwjlmkjp#ejqpwgf`jpjlmpbppjpwbmwjmgj`bwfgfulovwjlm.tqbssfq!fmlvdk#wlbolmd#wkfgfojufqfg..=\x0e\t?"..Bnfqj`bm#sqlwf`wfgMlufnafq#?,pwzof=?evqmjwvqfJmwfqmfw##lmaovq>!pvpsfmgfgqf`jsjfmwabpfg#lm#Nlqflufq/balojpkfg`loof`wfgtfqf#nbgffnlwjlmbofnfqdfm`zmbqqbwjufbgul`bwfps{8alqgfq`lnnjwwfggjq>!owq!fnsolzffpqfpfbq`k-#pfof`wfgpv``fpplq`vpwlnfqpgjpsobzfgPfswfnafqbgg@obpp+Eb`fallh#pvddfpwfgbmg#obwfqlsfqbwjmdfobalqbwfPlnfwjnfpJmpwjwvwf`fqwbjmozjmpwboofgelooltfqpIfqvpbofnwkfz#kbuf`lnsvwjmddfmfqbwfgsqlujm`fpdvbqbmwffbqajwqbqzqf`ldmjyftbmwfg#wls{8tjgwk9wkflqz#leafkbujlvqTkjof#wkffpwjnbwfgafdbm#wl#jw#af`bnfnbdmjwvgfnvpw#kbufnlqf#wkbmGjqf`wlqzf{wfmpjlmpf`qfwbqzmbwvqboozl``vqqjmdubqjbaofpdjufm#wkfsobwelqn-?,obafo=?ebjofg#wl`lnslvmgphjmgp#le#pl`jfwjfpbolmdpjgf#..%dw8\t\tplvwktfpwwkf#qjdkwqbgjbwjlmnbz#kbuf#vmfp`bsf+pslhfm#jm!#kqfe>!,sqldqbnnflmoz#wkf#`lnf#eqlngjqf`wlqzavqjfg#jmb#pjnjobqwkfz#tfqf?,elmw=?,Mlqtfdjbmpsf`jejfgsqlgv`jmdsbppfmdfq+mft#Gbwfwfnslqbqzej`wjlmboBewfq#wkffrvbwjlmpgltmolbg-qfdvobqozgfufolsfqbaluf#wkfojmhfg#wlskfmlnfmbsfqjlg#lewllowjs!=pvapwbm`fbvwlnbwj`bpsf`w#leBnlmd#wkf`lmmf`wfgfpwjnbwfpBjq#Elq`fpzpwfn#lelaif`wjufjnnfgjbwfnbhjmd#jwsbjmwjmdp`lmrvfqfgbqf#pwjoosql`fgvqfdqltwk#lekfbgfg#azFvqlsfbm#gjujpjlmpnlof`vofpeqbm`kjpfjmwfmwjlmbwwqb`wfg`kjogkllgbopl#vpfggfgj`bwfgpjmdbslqfgfdqff#leebwkfq#le`lmeoj`wp?,b=?,s=\t`bnf#eqlntfqf#vpfgmlwf#wkbwqf`fjujmdF{f`vwjuffufm#nlqfb``fpp#wl`lnnbmgfqSlojwj`bonvpj`jbmpgfoj`jlvpsqjplmfqpbgufmw#leVWE.;!#,=?"X@GBWBX!=@lmwb`wPlvwkfqm#ad`lolq>!pfqjfp#le-#Jw#tbp#jm#Fvqlsfsfqnjwwfgubojgbwf-bssfbqjmdleej`jboppfqjlvpoz.obmdvbdfjmjwjbwfgf{wfmgjmdolmd.wfqnjmeobwjlmpv`k#wkbwdfw@llhjfnbqhfg#az?,avwwlm=jnsofnfmwavw#jw#jpjm`qfbpfpgltm#wkf#qfrvjqjmdgfsfmgfmw..=\t?"..#jmwfqujftTjwk#wkf#`lsjfp#le`lmpfmpvptbp#avjowUfmfyvfob+elqnfqozwkf#pwbwfsfqplmmfopwqbwfdj`ebulvq#lejmufmwjlmTjhjsfgjb`lmwjmfmwujqwvbooztkj`k#tbpsqjm`jsof@lnsofwf#jgfmwj`bopklt#wkbwsqjnjwjufbtbz#eqlnnlof`vobqsqf`jpfozgjpploufgVmgfq#wkfufqpjlm>!=%maps8?,Jw#jp#wkf#Wkjp#jp#tjoo#kbuflqdbmjpnpplnf#wjnfEqjfgqj`ktbp#ejqpwwkf#lmoz#eb`w#wkbwelqn#jg>!sqf`fgjmdWf`kmj`boskzpj`jpwl``vqp#jmmbujdbwlqpf`wjlm!=psbm#jg>!plvdkw#wlafolt#wkfpvqujujmd~?,pwzof=kjp#gfbwkbp#jm#wkf`bvpfg#azsbqwjboozf{jpwjmd#vpjmd#wkftbp#djufmb#ojpw#leofufop#lemlwjlm#leLeej`jbo#gjpnjppfgp`jfmwjpwqfpfnaofpgvsoj`bwff{solpjufqf`lufqfgboo#lwkfqdboofqjfpxsbggjmd9sflsof#leqfdjlm#lebggqfppfpbppl`jbwfjnd#bow>!jm#nlgfqmpklvog#afnfwklg#leqfslqwjmdwjnfpwbnsmffgfg#wlwkf#Dqfbwqfdbqgjmdpffnfg#wlujftfg#bpjnsb`w#lmjgfb#wkbwwkf#Tlqogkfjdkw#lef{sbmgjmdWkfpf#bqf`vqqfmw!=`bqfevooznbjmwbjmp`kbqdf#le@obppj`bobggqfppfgsqfgj`wfgltmfqpkjs?gju#jg>!qjdkw!=\x0e\tqfpjgfm`fofbuf#wkf`lmwfmw!=bqf#lewfm##~*+*8\x0e\tsqlabaoz#Sqlefpplq.avwwlm!#qfpslmgfgpbzp#wkbwkbg#wl#afsob`fg#jmKvmdbqjbmpwbwvp#lepfqufp#bpVmjufqpbof{f`vwjlmbddqfdbwfelq#tkj`kjmef`wjlmbdqffg#wlkltfufq/#slsvobq!=sob`fg#lm`lmpwqv`wfof`wlqbopznalo#lejm`ovgjmdqfwvqm#wlbq`kjwf`w@kqjpwjbmsqfujlvp#ojujmd#jmfbpjfq#wlsqlefpplq\t%ow8"..#feef`w#lebmbozwj`ptbp#wbhfmtkfqf#wkfwllh#lufqafojfe#jmBeqjhbbmpbp#ebq#bpsqfufmwfgtlqh#tjwkb#psf`jbo?ejfogpfw@kqjpwnbpQfwqjfufg\t\tJm#wkf#ab`h#jmwlmlqwkfbpwnbdbyjmfp=?pwqlmd=`lnnjwwffdlufqmjmddqlvsp#lepwlqfg#jmfpwbaojpkb#dfmfqbojwp#ejqpwwkfjq#ltmslsvobwfgbm#laif`w@bqjaafbmboolt#wkfgjpwqj`wptjp`lmpjmol`bwjlm-8#tjgwk9#jmkbajwfgPl`jbojpwIbmvbqz#2?,ellwfq=pjnjobqoz`klj`f#lewkf#pbnf#psf`jej`#avpjmfpp#Wkf#ejqpw-ofmdwk8#gfpjqf#wlgfbo#tjwkpjm`f#wkfvpfqBdfmw`lm`fjufgjmgf{-sksbp#%rvlw8fmdbdf#jmqf`fmwoz/eft#zfbqptfqf#bopl\t?kfbg=\t?fgjwfg#azbqf#hmltm`jwjfp#jmb``fpphfz`lmgfnmfgbopl#kbufpfquj`fp/ebnjoz#leP`kllo#le`lmufqwfgmbwvqf#le#obmdvbdfnjmjpwfqp?,laif`w=wkfqf#jp#b#slsvobqpfrvfm`fpbgul`bwfgWkfz#tfqfbmz#lwkfqol`bwjlm>fmwfq#wkfnv`k#nlqfqfeof`wfgtbp#mbnfglqjdjmbo#b#wzsj`botkfm#wkfzfmdjmffqp`lvog#mlwqfpjgfmwptfgmfpgbzwkf#wkjqg#sqlgv`wpIbmvbqz#1tkbw#wkfzb#`fqwbjmqfb`wjlmpsql`fpplqbewfq#kjpwkf#obpw#`lmwbjmfg!=?,gju=\t?,b=?,wg=gfsfmg#lmpfbq`k!=\tsjf`fp#le`lnsfwjmdQfefqfm`fwfmmfppfftkj`k#kbp#ufqpjlm>?,psbm=#??,kfbgfq=djufp#wkfkjpwlqjbmubovf>!!=sbggjmd93ujft#wkbwwldfwkfq/wkf#nlpw#tbp#elvmgpvapfw#lebwwb`h#lm`kjogqfm/sljmwp#lesfqplmbo#slpjwjlm9boofdfgoz@ofufobmgtbp#obwfqbmg#bewfqbqf#djufmtbp#pwjoop`qloojmdgfpjdm#lenbhfp#wkfnv`k#ofppBnfqj`bmp-\t\tBewfq#/#avw#wkfNvpfvn#leolvjpjbmb+eqln#wkfnjmmfplwbsbqwj`ofpb#sql`fppGlnjmj`bmulovnf#leqfwvqmjmdgfefmpjuf33s{\x7fqjdknbgf#eqlnnlvpflufq!#pwzof>!pwbwfp#le+tkj`k#jp`lmwjmvfpEqbm`jp`lavjogjmd#tjwklvw#btjwk#plnftkl#tlvogb#elqn#leb#sbqw#leafelqf#jwhmltm#bp##Pfquj`fpol`bwjlm#bmg#lewfmnfbpvqjmdbmg#jw#jpsbsfqab`hubovfp#le\x0e\t?wjwof=>#tjmglt-gfwfqnjmffq%rvlw8#sobzfg#azbmg#fbqoz?,`fmwfq=eqln#wkjpwkf#wkqffsltfq#bmgle#%rvlw8jmmfqKWNO?b#kqfe>!z9jmojmf8@kvq`k#lewkf#fufmwufqz#kjdkleej`jbo#.kfjdkw9#`lmwfmw>!,`dj.ajm,wl#`qfbwfbeqjhbbmpfpsfqbmwleqbm/Kbjpobwujf)Mvojfwvuj)_(`f)Mwjmb(af)Mwjmb\fUh\fT{\fTN\n{I\np@\x04Fr\vBl\bQ\x7f\tA{\vUm\x05Gx\tA{\x01yp\x06YA\0zX\bTV\bWl\bUd\x04BM\vB{\npV\v@x\x04B\\\np@\x04Db\x04Gz\tal\npa\tfM\tuD\bV~\x04mx\vQ}\ndS\tp\\\bVK\bS]\bU|\x05oD\tkV\ved\vHR\nb~\x04M`\nJp\x05oD\x04|Q\nLP\x04Sw\bTl\nAI\nxC\bWt\tBq\x05F`\x04Cm\vLm\tKx\t}t\bPv\ny\\\naB\tV\x7f\nZd\x04XU\x04li\tfr\ti@\tBH\x04BD\x04BV\t`V\n[]\tp_\tTn\n~A\nxR\tuD\t`{\bV@\tTn\tHK\tAJ\vxs\x04Zf\nqI\x04Zf\vBM\v|j\t}t\bSM\nmC\vQ}pfquj`jlpbqw/A`volbqdfmwjmbabq`folmb`vborvjfqsvaoj`bglsqlgv`wlpslo/Awj`bqfpsvfpwbtjhjsfgjbpjdvjfmwfa/Vprvfgb`lnvmjgbgpfdvqjgbgsqjm`jsbosqfdvmwbp`lmwfmjglqfpslmgfqufmfyvfobsqlaofnbpgj`jfnaqfqfob`j/_mmlujfnaqfpjnjobqfpsqlzf`wlpsqldqbnbpjmpwjwvwlb`wjujgbgfm`vfmwqbf`lmln/Abjn/Mdfmfp`lmwb`wbqgfp`bqdbqmf`fpbqjlbwfm`j/_mwfo/Eelml`lnjpj/_m`bm`jlmfp`bsb`jgbgfm`lmwqbqbm/Mojpjpebulqjwlpw/Eqnjmlpsqlujm`jbfwjrvfwbpfofnfmwlpevm`jlmfpqfpvowbgl`bq/M`wfqsqlsjfgbgsqjm`jsjlmf`fpjgbgnvmj`jsbo`qfb`j/_mgfp`bqdbpsqfpfm`jb`lnfq`jbolsjmjlmfpfifq`j`jlfgjwlqjbopbobnbm`bdlmy/Mofygl`vnfmwlsfo/A`vobqf`jfmwfpdfmfqbofpwbqqbdlmbsq/M`wj`bmlufgbgfpsqlsvfpwbsb`jfmwfpw/E`mj`bplaifwjulp`lmwb`wlp\fHB\fIk\fHn\fH^\fHS\fHc\fHU\fId\fHn\fH{\fHC\fHR\fHT\fHR\fHI\fHc\fHY\fHn\fH\\\fHU\fIk\fHy\fIg\fHd\fHy\fIm\fHw\fH\\\fHU\fHR\fH@\fHR\fHJ\fHy\fHU\fHR\fHT\fHA\fIl\fHU\fIm\fHc\fH\\\fHU\fIl\fHB\fId\fHn\fHJ\fHS\fHD\fH@\fHR\fHHgjsolgl`p\fHT\fHB\fHC\fH\\\fIn\fHF\fHD\fHR\fHB\fHF\fHH\fHR\fHG\fHS\fH\\\fHx\fHT\fHH\fHH\fH\\\fHU\fH^\fIg\fH{\fHU\fIm\fHj\fH@\fHR\fH\\\fHJ\fIk\fHZ\fHU\fIm\fHd\fHz\fIk\fH^\fHC\fHJ\fHS\fHy\fHR\fHB\fHY\fIk\fH@\fHH\fIl\fHD\fH@\fIl\fHv\fHB\fI`\fHH\fHT\fHR\fH^\fH^\fIk\fHz\fHp\fIe\fH@\fHB\fHJ\fHJ\fHH\fHI\fHR\fHD\fHU\fIl\fHZ\fHU\fH\\\fHi\fH^\fH{\fHy\fHA\fIl\fHD\fH{\fH\\\fHF\fHR\fHT\fH\\\fHR\fHH\fHy\fHS\fHc\fHe\fHT\fIk\fH{\fHC\fIl\fHU\fIn\fHm\fHj\fH{\fIk\fHs\fIl\fHB\fHz\fIg\fHp\fHy\fHR\fH\\\fHi\fHA\fIl\fH{\fHC\fIk\fHH\fIm\fHB\fHY\fIg\fHs\fHJ\fIk\fHn\fHi\fH{\fH\\\fH|\fHT\fIk\fHB\fIk\fH^\fH^\fH{\fHR\fHU\fHR\fH^\fHf\fHF\fH\\\fHv\fHR\fH\\\fH|\fHT\fHR\fHJ\fIk\fH\\\fHp\fHS\fHT\fHJ\fHS\fH^\fH@\fHn\fHJ\fH@\fHD\fHR\fHU\fIn\fHn\fH^\fHR\fHz\fHp\fIl\fHH\fH@\fHs\fHD\fHB\fHS\fH^\fHk\fHT\fIk\fHj\fHD\fIk\fHD\fHC\fHR\fHy\fIm\fH^\fH^\fIe\fH{\fHA\fHR\fH{\fH\\\fIk\fH^\fHp\fH{\fHU\fH\\\fHR\fHB\fH^\fH{\fIk\fHF\fIk\fHp\fHU\fHR\fHI\fHk\fHT\fIl\fHT\fHU\fIl\fHy\fH^\fHR\fHL\fIl\fHy\fHU\fHR\fHm\fHJ\fIn\fH\\\fHH\fHU\fHH\fHT\fHR\fHH\fHC\fHR\fHJ\fHj\fHC\fHR\fHF\fHR\fHy\fHy\fI`\fHD\fHZ\fHR\fHB\fHJ\fIk\fHz\fHC\fHU\fIl\fH\\\fHR\fHC\fHz\fIm\fHJ\fH^\fH{\fIl`bwfdlqjfpf{sfqjfm`f?,wjwof=\x0e\t@lszqjdkw#ibubp`qjsw`lmgjwjlmpfufqzwkjmd?s#`obpp>!wf`kmloldzab`hdqlvmg?b#`obpp>!nbmbdfnfmw%`lsz8#132ibubP`qjsw`kbqb`wfqpaqfbg`qvnawkfnpfoufpklqjylmwbodlufqmnfmw@bojelqmjbb`wjujwjfpgjp`lufqfgMbujdbwjlmwqbmpjwjlm`lmmf`wjlmmbujdbwjlmbssfbqbm`f?,wjwof=?n`kf`hal{!#wf`kmjrvfpsqlwf`wjlmbssbqfmwozbp#tfoo#bpvmw$/#$VB.qfplovwjlmlsfqbwjlmpwfofujpjlmwqbmpobwfgTbpkjmdwlmmbujdbwlq-#>#tjmglt-jnsqfppjlm%ow8aq%dw8ojwfqbwvqfslsvobwjlmad`lolq>! fpsf`jbooz#`lmwfmw>!sqlgv`wjlmmftpofwwfqsqlsfqwjfpgfejmjwjlmofbgfqpkjsWf`kmloldzSbqojbnfmw`lnsbqjplmvo#`obpp>!-jmgf{Le+!`lm`ovpjlmgjp`vppjlm`lnslmfmwpajloldj`boQfulovwjlm\\`lmwbjmfqvmgfqpwllgmlp`qjsw=?sfqnjppjlmfb`k#lwkfqbwnlpskfqf#lmel`vp>!?elqn#jg>!sql`fppjmdwkjp-ubovfdfmfqbwjlm@lmefqfm`fpvapfrvfmwtfoo.hmltmubqjbwjlmpqfsvwbwjlmskfmlnfmlmgjp`jsojmfoldl-smd!#+gl`vnfmw/alvmgbqjfpf{sqfppjlmpfwwofnfmwAb`hdqlvmglvw#le#wkffmwfqsqjpf+!kwwsp9!#vmfp`bsf+!sbpptlqg!#gfnl`qbwj`?b#kqfe>!,tqbssfq!=\tnfnafqpkjsojmdvjpwj`s{8sbggjmdskjolplskzbppjpwbm`fvmjufqpjwzeb`jojwjfpqf`ldmjyfgsqfefqfm`fje#+wzsflenbjmwbjmfgul`bavobqzkzslwkfpjp-pvanjw+*8%bns8maps8bmmlwbwjlmafkjmg#wkfElvmgbwjlmsvaojpkfq!bppvnswjlmjmwqlgv`fg`lqqvswjlmp`jfmwjpwpf{soj`jwozjmpwfbg#legjnfmpjlmp#lm@oj`h>!`lmpjgfqfggfsbqwnfmwl``vsbwjlmpllm#bewfqjmufpwnfmwsqlmlvm`fgjgfmwjejfgf{sfqjnfmwNbmbdfnfmwdfldqbskj`!#kfjdkw>!ojmh#qfo>!-qfsob`f+,gfsqfppjlm`lmefqfm`fsvmjpknfmwfojnjmbwfgqfpjpwbm`fbgbswbwjlmlsslpjwjlmtfoo#hmltmpvssofnfmwgfwfqnjmfgk2#`obpp>!3s{8nbqdjmnf`kbmj`bopwbwjpwj`p`fofaqbwfgDlufqmnfmw\t\tGvqjmd#wgfufolsfqpbqwjej`jbofrvjubofmwlqjdjmbwfg@lnnjppjlmbwwb`knfmw?psbm#jg>!wkfqf#tfqfMfgfqobmgpafzlmg#wkfqfdjpwfqfgilvqmbojpweqfrvfmwozboo#le#wkfobmd>!fm!#?,pwzof=\x0e\tbaplovwf8#pvsslqwjmdf{wqfnfoz#nbjmpwqfbn?,pwqlmd=#slsvobqjwzfnsolznfmw?,wbaof=\x0e\t#`lopsbm>!?,elqn=\t##`lmufqpjlmbalvw#wkf#?,s=?,gju=jmwfdqbwfg!#obmd>!fmSlqwvdvfpfpvapwjwvwfjmgjujgvbojnslppjaofnvowjnfgjbbonlpw#boos{#plojg# bsbqw#eqlnpvaif`w#wljm#Fmdojpk`qjwj`jyfgf{`fsw#elqdvjgfojmfplqjdjmboozqfnbqhbaofwkf#pf`lmgk1#`obpp>!?b#wjwof>!+jm`ovgjmdsbqbnfwfqpsqlkjajwfg>#!kwws9,,gj`wjlmbqzsfq`fswjlmqfulovwjlmelvmgbwjlms{8kfjdkw9pv``fppevopvsslqwfqpnjoofmmjvnkjp#ebwkfqwkf#%rvlw8ml.qfsfbw8`lnnfq`jbojmgvpwqjbofm`lvqbdfgbnlvmw#le#vmleej`jbofeej`jfm`zQfefqfm`fp`llqgjmbwfgjp`objnfqf{sfgjwjlmgfufolsjmd`bo`vobwfgpjnsojejfgofdjwjnbwfpvapwqjmd+3!#`obpp>!`lnsofwfozjoovpwqbwfejuf#zfbqpjmpwqvnfmwSvaojpkjmd2!#`obpp>!spz`kloldz`lmejgfm`fmvnafq#le#bapfm`f#leel`vpfg#lmiljmfg#wkfpwqv`wvqfpsqfujlvpoz=?,jeqbnf=lm`f#bdbjmavw#qbwkfqjnnjdqbmwple#`lvqpf/b#dqlvs#leOjwfqbwvqfVmojhf#wkf?,b=%maps8\tevm`wjlm#jw#tbp#wkf@lmufmwjlmbvwlnlajofSqlwfpwbmwbddqfppjufbewfq#wkf#Pjnjobqoz/!#,=?,gju=`loof`wjlm\x0e\tevm`wjlmujpjajojwzwkf#vpf#leulovmwffqpbwwqb`wjlmvmgfq#wkf#wkqfbwfmfg)?"X@GBWBXjnslqwbm`fjm#dfmfqbowkf#obwwfq?,elqn=\t?,-jmgf{Le+$j#>#38#j#?gjeefqfm`fgfulwfg#wlwqbgjwjlmppfbq`k#elqvowjnbwfozwlvqmbnfmwbwwqjavwfppl.`boofg#~\t?,pwzof=fubovbwjlmfnskbpjyfgb``fppjaof?,pf`wjlm=pv``fppjlmbolmd#tjwkNfbmtkjof/jmgvpwqjfp?,b=?aq#,=kbp#af`lnfbpsf`wp#leWfofujpjlmpveej`jfmwabphfwabooalwk#pjgfp`lmwjmvjmdbm#bqwj`of?jnd#bow>!bgufmwvqfpkjp#nlwkfqnbm`kfpwfqsqjm`jsofpsbqwj`vobq`lnnfmwbqzfeef`wp#legf`jgfg#wl!=?pwqlmd=svaojpkfqpIlvqmbo#legjeej`vowzeb`jojwbwfb``fswbaofpwzof-`pp!\nevm`wjlm#jmmlubwjlm=@lszqjdkwpjwvbwjlmptlvog#kbufavpjmfppfpGj`wjlmbqzpwbwfnfmwplewfm#vpfgsfqpjpwfmwjm#Ibmvbqz`lnsqjpjmd?,wjwof=\t\ngjsolnbwj``lmwbjmjmdsfqelqnjmdf{wfmpjlmpnbz#mlw#af`lm`fsw#le#lm`oj`h>!Jw#jp#boplejmbm`jbo#nbhjmd#wkfOv{fnalvqdbggjwjlmbobqf#`boofgfmdbdfg#jm!p`qjsw!*8avw#jw#tbpfof`wqlmj`lmpvanjw>!\t?"..#Fmg#fof`wqj`boleej`jboozpvddfpwjlmwls#le#wkfvmojhf#wkfBvpwqbojbmLqjdjmboozqfefqfm`fp\t?,kfbg=\x0e\tqf`ldmjpfgjmjwjbojyfojnjwfg#wlBof{bmgqjbqfwjqfnfmwBgufmwvqfpelvq#zfbqp\t\t%ow8"..#jm`qfbpjmdgf`lqbwjlmk0#`obpp>!lqjdjmp#lelaojdbwjlmqfdvobwjlm`obppjejfg+evm`wjlm+bgubmwbdfpafjmd#wkf#kjpwlqjbmp?abpf#kqfeqfsfbwfgoztjoojmd#wl`lnsbqbaofgfpjdmbwfgmlnjmbwjlmevm`wjlmbojmpjgf#wkfqfufobwjlmfmg#le#wkfp#elq#wkf#bvwklqjyfgqfevpfg#wlwbhf#sob`fbvwlmlnlvp`lnsqlnjpfslojwj`bo#qfpwbvqbmwwtl#le#wkfEfaqvbqz#1rvbojwz#leptelaif`w-vmgfqpwbmgmfbqoz#bootqjwwfm#azjmwfqujftp!#tjgwk>!2tjwkgqbtboeolbw9ofewjp#vpvbooz`bmgjgbwfpmftpsbsfqpnzpwfqjlvpGfsbqwnfmwafpw#hmltmsbqojbnfmwpvssqfppfg`lmufmjfmwqfnfnafqfggjeefqfmw#pzpwfnbwj`kbp#ofg#wlsqlsbdbmgb`lmwqloofgjmeovfm`fp`fqfnlmjbosql`objnfgSqlwf`wjlmoj#`obpp>!P`jfmwjej``obpp>!ml.wqbgfnbqhpnlqf#wkbm#tjgfpsqfbgOjafqbwjlmwllh#sob`fgbz#le#wkfbp#olmd#bpjnsqjplmfgBggjwjlmbo\t?kfbg=\t?nObalqbwlqzMlufnafq#1f{`fswjlmpJmgvpwqjboubqjfwz#leeolbw9#ofeGvqjmd#wkfbppfppnfmwkbuf#affm#gfbop#tjwkPwbwjpwj`pl``vqqfm`f,vo=?,gju=`ofbqej{!=wkf#svaoj`nbmz#zfbqptkj`k#tfqflufq#wjnf/pzmlmznlvp`lmwfmw!=\tsqfpvnbaozkjp#ebnjozvpfqBdfmw-vmf{sf`wfgjm`ovgjmd#`kboofmdfgb#njmlqjwzvmgfejmfg!afolmdp#wlwbhfm#eqlnjm#L`wlafqslpjwjlm9#pbjg#wl#afqfojdjlvp#Efgfqbwjlm#qltpsbm>!lmoz#b#eftnfbmw#wkbwofg#wl#wkf..=\x0e\t?gju#?ejfogpfw=Bq`kajpkls#`obpp>!mlafjmd#vpfgbssqlb`kfpsqjujofdfpmlp`qjsw=\tqfpvowp#jmnbz#af#wkfFbpwfq#fddnf`kbmjpnpqfbplmbaofSlsvobwjlm@loof`wjlmpfof`wfg!=mlp`qjsw=\x0e,jmgf{-sksbqqjubo#le.ippgh$**8nbmbdfg#wljm`lnsofwf`bpvbowjfp`lnsofwjlm@kqjpwjbmpPfswfnafq#bqjwknfwj`sql`fgvqfpnjdkw#kbufSqlgv`wjlmjw#bssfbqpSkjolplskzeqjfmgpkjsofbgjmd#wldjujmd#wkfwltbqg#wkfdvbqbmwffggl`vnfmwfg`lolq9 333ujgfl#dbnf`lnnjppjlmqfeof`wjmd`kbmdf#wkfbppl`jbwfgpbmp.pfqjelmhfzsqfpp8#sbggjmd9Kf#tbp#wkfvmgfqozjmdwzsj`booz#/#bmg#wkf#pq`Fofnfmwpv``fppjufpjm`f#wkf#pklvog#af#mfwtlqhjmdb``lvmwjmdvpf#le#wkfoltfq#wkbmpkltp#wkbw?,psbm=\t\n\n`lnsobjmwp`lmwjmvlvprvbmwjwjfpbpwqlmlnfqkf#gjg#mlwgvf#wl#jwpbssojfg#wlbm#bufqbdffeelqwp#wlwkf#evwvqfbwwfnsw#wlWkfqfelqf/`bsbajojwzQfsvaoj`bmtbp#elqnfgFof`wqlmj`hjolnfwfqp`kboofmdfpsvaojpkjmdwkf#elqnfqjmgjdfmlvpgjqf`wjlmppvapjgjbqz`lmpsjqb`zgfwbjop#lebmg#jm#wkfbeelqgbaofpvapwbm`fpqfbplm#elq`lmufmwjlmjwfnwzsf>!baplovwfozpvsslpfgozqfnbjmfg#bbwwqb`wjufwqbufoojmdpfsbqbwfozel`vpfp#lmfofnfmwbqzbssoj`baofelvmg#wkbwpwzofpkffwnbmvp`qjswpwbmgp#elq#ml.qfsfbw+plnfwjnfp@lnnfq`jbojm#Bnfqj`bvmgfqwbhfmrvbqwfq#lebm#f{bnsofsfqplmboozjmgf{-sks<?,avwwlm=\tsfq`fmwbdfafpw.hmltm`qfbwjmd#b!#gjq>!owqOjfvwfmbmw\t?gju#jg>!wkfz#tlvogbajojwz#lenbgf#vs#lemlwfg#wkbw`ofbq#wkbwbqdvf#wkbwwl#bmlwkfq`kjogqfm$psvqslpf#leelqnvobwfgabpfg#vslmwkf#qfdjlmpvaif`w#lesbppfmdfqpslppfppjlm-\t\tJm#wkf#Afelqf#wkfbewfqtbqgp`vqqfmwoz#b`qlpp#wkfp`jfmwjej``lnnvmjwz-`bsjwbojpnjm#Dfqnbmzqjdkw.tjmdwkf#pzpwfnPl`jfwz#leslojwj`jbmgjqf`wjlm9tfmw#lm#wlqfnlubo#le#Mft#Zlqh#bsbqwnfmwpjmgj`bwjlmgvqjmd#wkfvmofpp#wkfkjpwlqj`bokbg#affm#bgfejmjwjufjmdqfgjfmwbwwfmgbm`f@fmwfq#elqsqlnjmfm`fqfbgzPwbwfpwqbwfdjfpavw#jm#wkfbp#sbqw#le`lmpwjwvwf`objn#wkbwobalqbwlqz`lnsbwjaofebjovqf#le/#pv`k#bp#afdbm#tjwkvpjmd#wkf#wl#sqlujgfefbwvqf#leeqln#tkj`k,!#`obpp>!dfloldj`bopfufqbo#legfojafqbwfjnslqwbmw#klogp#wkbwjmd%rvlw8#ubojdm>wlswkf#Dfqnbmlvwpjgf#lemfdlwjbwfgkjp#`bqffqpfsbqbwjlmjg>!pfbq`ktbp#`boofgwkf#elvqwkqf`qfbwjlmlwkfq#wkbmsqfufmwjlmtkjof#wkf#fgv`bwjlm/`lmmf`wjmdb``vqbwfoztfqf#avjowtbp#hjoofgbdqffnfmwpnv`k#nlqf#Gvf#wl#wkftjgwk9#233plnf#lwkfqHjmdgln#lewkf#fmwjqfebnlvp#elqwl#`lmmf`wlaif`wjufpwkf#Eqfm`ksflsof#bmgefbwvqfg!=jp#pbjg#wlpwqv`wvqboqfefqfmgvnnlpw#lewfmb#pfsbqbwf.=\t?gju#jg#Leej`jbo#tlqogtjgf-bqjb.obafowkf#sobmfwbmg#jw#tbpg!#ubovf>!ollhjmd#bwafmfej`jbobqf#jm#wkfnlmjwlqjmdqfslqwfgozwkf#nlgfqmtlqhjmd#lmbooltfg#wltkfqf#wkf#jmmlubwjuf?,b=?,gju=plvmgwqb`hpfbq`kElqnwfmg#wl#afjmsvw#jg>!lsfmjmd#leqfpwqj`wfgbglswfg#azbggqfppjmdwkfloldjbmnfwklgp#leubqjbmw#le@kqjpwjbm#ufqz#obqdfbvwlnlwjufaz#ebq#wkfqbmdf#eqlnsvqpvjw#leeloolt#wkfaqlvdkw#wljm#Fmdobmgbdqff#wkbwb``vpfg#le`lnfp#eqlnsqfufmwjmdgju#pwzof>kjp#lq#kfqwqfnfmglvpeqffgln#le`lm`fqmjmd3#2fn#2fn8Abphfwaboo,pwzof-`ppbm#fbqojfqfufm#bewfq,!#wjwof>!-`ln,jmgf{wbhjmd#wkfsjwwpavqdk`lmwfmw!=\x0e?p`qjsw=+ewvqmfg#lvwkbujmd#wkf?,psbm=\x0e\t#l``bpjlmboaf`bvpf#jwpwbqwfg#wlskzpj`booz=?,gju=\t##`qfbwfg#az@vqqfmwoz/#ad`lolq>!wbajmgf{>!gjpbpwqlvpBmbozwj`p#bopl#kbp#b=?gju#jg>!?,pwzof=\t?`boofg#elqpjmdfq#bmg-pq`#>#!,,ujlobwjlmpwkjp#sljmw`lmpwbmwozjp#ol`bwfgqf`lqgjmdpg#eqln#wkfmfgfqobmgpslqwvdv/Fp;N;};D;u;F5m4K4]4_7`gfpbqqlool`lnfmwbqjlfgv`b`j/_mpfswjfnaqfqfdjpwqbglgjqf``j/_mvaj`b`j/_msvaoj`jgbgqfpsvfpwbpqfpvowbglpjnslqwbmwfqfpfqubglpbqw/A`volpgjefqfmwfppjdvjfmwfpqfs/Vaoj`bpjwvb`j/_mnjmjpwfqjlsqjub`jgbggjqf`wlqjlelqnb`j/_mslaob`j/_msqfpjgfmwf`lmw','fmjglpb``fplqjlpwf`kmlqbwjsfqplmbofp`bwfdlq/Abfpsf`jbofpgjpslmjaofb`wvbojgbgqfefqfm`jbuboobglojgajaojlwf`bqfob`jlmfp`bofmgbqjlslo/Awj`bpbmwfqjlqfpgl`vnfmwlpmbwvqbofybnbwfqjbofpgjefqfm`jbf`lm/_nj`bwqbmpslqwfqlgq/Advfysbqwj`jsbqfm`vfmwqbmgjp`vpj/_mfpwqv`wvqbevmgb`j/_meqf`vfmwfpsfqnbmfmwfwlwbonfmwf<P<R<Z<Q<R<]=o<X<Y=n<P<R<Z<Y=n<^=l<Y<P=c=n<\\<V<Z<Y=k=n<R<]=g<]<R<W<Y<Y<R=k<Y<Q=`=a=n<R<_<R<V<R<_<X<\\<S<R=m<W<Y<^=m<Y<_<R=m<\\<U=n<Y=k<Y=l<Y<[<P<R<_=o=n=m<\\<U=n<\\<Z<T<[<Q<T<P<Y<Z<X=o<]=o<X=o=n<s<R<T=m<V<[<X<Y=m=`<^<T<X<Y<R=m<^=c<[<T<Q=o<Z<Q<R=m<^<R<Y<U<W=b<X<Y<U<S<R=l<Q<R<P<Q<R<_<R<X<Y=n<Y<U=m<^<R<T=i<S=l<\\<^<\\=n<\\<V<R<U<P<Y=m=n<R<T<P<Y<Y=n<Z<T<[<Q=`<R<X<Q<R<U<W=o=k=d<Y<S<Y=l<Y<X=k<\\=m=n<T=k<\\=m=n=`=l<\\<]<R=n<Q<R<^=g=i<S=l<\\<^<R=m<R<]<R<U<S<R=n<R<P<P<Y<Q<Y<Y=k<T=m<W<Y<Q<R<^=g<Y=o=m<W=o<_<R<V<R<W<R<Q<\\<[<\\<X=n<\\<V<R<Y=n<R<_<X<\\<S<R=k=n<T<s<R=m<W<Y=n<\\<V<T<Y<Q<R<^=g<U=m=n<R<T=n=n<\\<V<T=i=m=l<\\<[=o<M<\\<Q<V=n=h<R=l=o<P<v<R<_<X<\\<V<Q<T<_<T=m<W<R<^<\\<Q<\\=d<Y<U<Q<\\<U=n<T=m<^<R<T<P=m<^=c<[=`<W=b<]<R<U=k<\\=m=n<R=m=l<Y<X<T<v=l<R<P<Y<H<R=l=o<P=l=g<Q<V<Y=m=n<\\<W<T<S<R<T=m<V=n=g=m=c=k<P<Y=m=c=j=j<Y<Q=n=l=n=l=o<X<\\=m<\\<P=g=i=l=g<Q<V<\\<q<R<^=g<U=k<\\=m<R<^<P<Y=m=n<\\=h<T<W=`<P<P<\\=l=n<\\=m=n=l<\\<Q<P<Y=m=n<Y=n<Y<V=m=n<Q<\\=d<T=i<P<T<Q=o=n<T<P<Y<Q<T<T<P<Y=b=n<Q<R<P<Y=l<_<R=l<R<X=m<\\<P<R<P=a=n<R<P=o<V<R<Q=j<Y=m<^<R<Y<P<V<\\<V<R<U<|=l=i<T<^5i5j4F4C5e4I4]4_4K5h4]4_4K5h4E4K5h4U4K5i5o4F4D5k4K4D4]4K5i4@4K5h5f5d5i4K5h4Y5d4]4@4C5f4C4E4K5h4U4Z5d4I4Z4K5m4E4K5h5n4_5i4K5h4U4K4D4F4A5i5f5h5i5h5m4K4F5i5h4F5n5e4F4U4C5f5h4K5h4X4U4]4O4B4D4K4]4F4[5d5f4]4U5h5f5o5i4I4]5m4K5n4[5h4D4K4F4K5h5h4V4E4F4]4F5f4D4K5h5j4K4_4K5h4X5f4B5i5j4F4C5f4K5h4U4]4D4K5h5n4Y4Y4K5m5h4K5i4U5h5f5k4K4F4A4C5f4G4K5h5h5k5i4K5h4U5i5h5i5o4F4D4E5f5i5o5j5o4K5h4[5m5h5m5f4C5f5d4I4C4K4]4E4F4K4]5f4B4K5h4Y4A4E4F4_4@5f5h4K5h5d5n4F4U5j4C5i4K5i4C5f5j4E4F4Y5i5f5i4O4]4X5f5m4K5h4\\5f5j4U4]4D5f4E4D5d4K4D4E4O5h4U4K4D4K5h4_5m4]5i4X4K5o5h4F4U4K5h5e4K5h4O5d5h4K5h4_5j4E4@4K5i4U4E4K5h4Y4A5m4K5h4C5f5j5o5h5i4K4F4K5h4B4K4Y4K5h5i5h5m4O4U4Z4K4M5o4F4K4D4E4K5h4B5f4]4]4_4K4J5h4K5h5n5h4D4K5h4O4C4D5i5n4K4[4U5i4]4K4_5h5i5j4[5n4E4K5h5o4F4D4K5h4]4@5h4K4X4F4]5o4K5h5n4C5i5f4U4[5f5opAzWbdMbnf+-isd!#bow>!2s{#plojg# -dje!#bow>!wqbmpsbqfmwjmelqnbwjlmbssoj`bwjlm!#lm`oj`h>!fpwbaojpkfgbgufqwjpjmd-smd!#bow>!fmujqlmnfmwsfqelqnbm`fbssqlsqjbwf%bns8ngbpk8jnnfgjbwfoz?,pwqlmd=?,qbwkfq#wkbmwfnsfqbwvqfgfufolsnfmw`lnsfwjwjlmsob`fklogfqujpjajojwz9`lszqjdkw!=3!#kfjdkw>!fufm#wklvdkqfsob`fnfmwgfpwjmbwjlm@lqslqbwjlm?vo#`obpp>!Bppl`jbwjlmjmgjujgvbopsfqpsf`wjufpfwWjnflvw+vqo+kwws9,,nbwkfnbwj`pnbqdjm.wls9fufmwvbooz#gfp`qjswjlm*#ml.qfsfbw`loof`wjlmp-ISD\x7fwkvna\x7fsbqwj`jsbwf,kfbg=?algzeolbw9ofew8?oj#`obpp>!kvmgqfgp#le\t\tKltfufq/#`lnslpjwjlm`ofbq9alwk8`llsfqbwjlmtjwkjm#wkf#obafo#elq>!alqgfq.wls9Mft#Yfbobmgqf`lnnfmgfgsklwldqbskzjmwfqfpwjmd%ow8pvs%dw8`lmwqlufqpzMfwkfqobmgpbowfqmbwjufnb{ofmdwk>!ptjwyfqobmgGfufolsnfmwfppfmwjbooz\t\tBowklvdk#?,wf{wbqfb=wkvmgfqajqgqfsqfpfmwfg%bns8mgbpk8psf`vobwjlm`lnnvmjwjfpofdjpobwjlmfof`wqlmj`p\t\n?gju#jg>!joovpwqbwfgfmdjmffqjmdwfqqjwlqjfpbvwklqjwjfpgjpwqjavwfg5!#kfjdkw>!pbmp.pfqje8`bsbaof#le#gjpbssfbqfgjmwfqb`wjufollhjmd#elqjw#tlvog#afBedkbmjpwbmtbp#`qfbwfgNbwk-eollq+pvqqlvmgjmd`bm#bopl#aflapfqubwjlmnbjmwfmbm`ffm`lvmwfqfg?k1#`obpp>!nlqf#qf`fmwjw#kbp#affmjmubpjlm#le*-dfwWjnf+*evmgbnfmwboGfpsjwf#wkf!=?gju#jg>!jmpsjqbwjlmf{bnjmbwjlmsqfsbqbwjlmf{sobmbwjlm?jmsvw#jg>!?,b=?,psbm=ufqpjlmp#lejmpwqvnfmwpafelqf#wkf##>#$kwws9,,Gfp`qjswjlmqfobwjufoz#-pvapwqjmd+fb`k#le#wkff{sfqjnfmwpjmeovfmwjbojmwfdqbwjlmnbmz#sflsofgvf#wl#wkf#`lnajmbwjlmgl#mlw#kbufNjggof#Fbpw?mlp`qjsw=?`lszqjdkw!#sfqkbsp#wkfjmpwjwvwjlmjm#Gf`fnafqbqqbmdfnfmwnlpw#ebnlvpsfqplmbojwz`qfbwjlm#leojnjwbwjlmpf{`ovpjufozplufqfjdmwz.`lmwfmw!=\t?wg#`obpp>!vmgfqdqlvmgsbqboofo#wlgl`wqjmf#lel``vsjfg#azwfqnjmloldzQfmbjppbm`fb#mvnafq#lepvsslqw#elqf{solqbwjlmqf`ldmjwjlmsqfgf`fpplq?jnd#pq`>!,?k2#`obpp>!svaoj`bwjlmnbz#bopl#afpsf`jbojyfg?,ejfogpfw=sqldqfppjufnjoojlmp#lepwbwfp#wkbwfmelq`fnfmwbqlvmg#wkf#lmf#bmlwkfq-sbqfmwMlgfbdqj`vowvqfBowfqmbwjufqfpfbq`kfqpwltbqgp#wkfNlpw#le#wkfnbmz#lwkfq#+fpsf`jbooz?wg#tjgwk>!8tjgwk9233&jmgfsfmgfmw?k0#`obpp>!#lm`kbmdf>!*-bgg@obpp+jmwfqb`wjlmLmf#le#wkf#gbvdkwfq#leb``fpplqjfpaqbm`kfp#le\x0e\t?gju#jg>!wkf#obqdfpwgf`obqbwjlmqfdvobwjlmpJmelqnbwjlmwqbmpobwjlmgl`vnfmwbqzjm#lqgfq#wl!=\t?kfbg=\t?!#kfjdkw>!2b`qlpp#wkf#lqjfmwbwjlm*8?,p`qjsw=jnsofnfmwfg`bm#af#pffmwkfqf#tbp#bgfnlmpwqbwf`lmwbjmfq!=`lmmf`wjlmpwkf#Aqjwjpktbp#tqjwwfm"jnslqwbmw8s{8#nbqdjm.elooltfg#azbajojwz#wl#`lnsoj`bwfggvqjmd#wkf#jnnjdqbwjlmbopl#`boofg?k7#`obpp>!gjpwjm`wjlmqfsob`fg#azdlufqmnfmwpol`bwjlm#lejm#Mlufnafqtkfwkfq#wkf?,s=\t?,gju=b`rvjpjwjlm`boofg#wkf#sfqpf`vwjlmgfpjdmbwjlmxelmw.pjyf9bssfbqfg#jmjmufpwjdbwff{sfqjfm`fgnlpw#ojhfoztjgfoz#vpfggjp`vppjlmpsqfpfm`f#le#+gl`vnfmw-f{wfmpjufozJw#kbp#affmjw#glfp#mlw`lmwqbqz#wljmkbajwbmwpjnsqlufnfmwp`klobqpkjs`lmpvnswjlmjmpwqv`wjlmelq#f{bnsoflmf#lq#nlqfs{8#sbggjmdwkf#`vqqfmwb#pfqjfp#lebqf#vpvboozqlof#jm#wkfsqfujlvpoz#gfqjubwjufpfujgfm`f#lef{sfqjfm`fp`lolqp`kfnfpwbwfg#wkbw`fqwjej`bwf?,b=?,gju=\t#pfof`wfg>!kjdk#p`klloqfpslmpf#wl`lnelqwbaofbglswjlm#lewkqff#zfbqpwkf#`lvmwqzjm#Efaqvbqzpl#wkbw#wkfsflsof#tkl#sqlujgfg#az?sbqbn#mbnfbeef`wfg#azjm#wfqnp#lebssljmwnfmwJPL.;;6:.2!tbp#alqm#jmkjpwlqj`bo#qfdbqgfg#bpnfbpvqfnfmwjp#abpfg#lm#bmg#lwkfq#9#evm`wjlm+pjdmjej`bmw`fofaqbwjlmwqbmpnjwwfg,ip,irvfqz-jp#hmltm#bpwkflqfwj`bo#wbajmgf{>!jw#`lvog#af?mlp`qjsw=\tkbujmd#affm\x0e\t?kfbg=\x0e\t?#%rvlw8Wkf#`lnsjobwjlmkf#kbg#affmsqlgv`fg#azskjolplskfq`lmpwqv`wfgjmwfmgfg#wlbnlmd#lwkfq`lnsbqfg#wlwl#pbz#wkbwFmdjmffqjmdb#gjeefqfmwqfefqqfg#wlgjeefqfm`fpafojfe#wkbwsklwldqbskpjgfmwjezjmdKjpwlqz#le#Qfsvaoj`#lemf`fppbqjozsqlabajojwzwf`kmj`boozofbujmd#wkfpsf`wb`vobqeqb`wjlm#lefof`wqj`jwzkfbg#le#wkfqfpwbvqbmwpsbqwmfqpkjsfnskbpjp#lmnlpw#qf`fmwpkbqf#tjwk#pbzjmd#wkbwejoofg#tjwkgfpjdmfg#wljw#jp#lewfm!=?,jeqbnf=bp#elooltp9nfqdfg#tjwkwkqlvdk#wkf`lnnfq`jbo#sljmwfg#lvwlsslqwvmjwzujft#le#wkfqfrvjqfnfmwgjujpjlm#lesqldqbnnjmdkf#qf`fjufgpfwJmwfqubo!=?,psbm=?,jm#Mft#Zlqhbggjwjlmbo#`lnsqfppjlm\t\t?gju#jg>!jm`lqslqbwf8?,p`qjsw=?bwwb`kFufmwaf`bnf#wkf#!#wbqdfw>!\\`bqqjfg#lvwPlnf#le#wkfp`jfm`f#bmgwkf#wjnf#le@lmwbjmfq!=nbjmwbjmjmd@kqjpwlskfqNv`k#le#wkftqjwjmdp#le!#kfjdkw>!1pjyf#le#wkfufqpjlm#le#nj{wvqf#le#afwtffm#wkfF{bnsofp#lefgv`bwjlmbo`lnsfwjwjuf#lmpvanjw>!gjqf`wlq#legjpwjm`wjuf,GWG#[KWNO#qfobwjmd#wlwfmgfm`z#wlsqlujm`f#letkj`k#tlvoggfpsjwf#wkfp`jfmwjej`#ofdjpobwvqf-jmmfqKWNO#boofdbwjlmpBdqj`vowvqftbp#vpfg#jmbssqlb`k#wljmwfoojdfmwzfbqp#obwfq/pbmp.pfqjegfwfqnjmjmdSfqelqnbm`fbssfbqbm`fp/#tkj`k#jp#elvmgbwjlmpbaaqfujbwfgkjdkfq#wkbmp#eqln#wkf#jmgjujgvbo#`lnslpfg#lepvsslpfg#wl`objnp#wkbwbwwqjavwjlmelmw.pjyf92fofnfmwp#leKjpwlqj`bo#kjp#aqlwkfqbw#wkf#wjnfbmmjufqpbqzdlufqmfg#azqfobwfg#wl#vowjnbwfoz#jmmlubwjlmpjw#jp#pwjoo`bm#lmoz#afgfejmjwjlmpwlDNWPwqjmdB#mvnafq#lejnd#`obpp>!Fufmwvbooz/tbp#`kbmdfgl``vqqfg#jmmfjdkalqjmdgjpwjmdvjpktkfm#kf#tbpjmwqlgv`jmdwfqqfpwqjboNbmz#le#wkfbqdvfp#wkbwbm#Bnfqj`bm`lmrvfpw#letjgfpsqfbg#tfqf#hjoofgp`qffm#bmg#Jm#lqgfq#wlf{sf`wfg#wlgfp`fmgbmwpbqf#ol`bwfgofdjpobwjufdfmfqbwjlmp#ab`hdqlvmgnlpw#sflsofzfbqp#bewfqwkfqf#jp#mlwkf#kjdkfpweqfrvfmwoz#wkfz#gl#mlwbqdvfg#wkbwpkltfg#wkbwsqfglnjmbmwwkfloldj`boaz#wkf#wjnf`lmpjgfqjmdpklqw.ojufg?,psbm=?,b=`bm#af#vpfgufqz#ojwwoflmf#le#wkf#kbg#boqfbgzjmwfqsqfwfg`lnnvmj`bwfefbwvqfp#ledlufqmnfmw/?,mlp`qjsw=fmwfqfg#wkf!#kfjdkw>!0Jmgfsfmgfmwslsvobwjlmpobqdf.p`bof-#Bowklvdk#vpfg#jm#wkfgfpwqv`wjlmslppjajojwzpwbqwjmd#jmwtl#lq#nlqff{sqfppjlmppvalqgjmbwfobqdfq#wkbmkjpwlqz#bmg?,lswjlm=\x0e\t@lmwjmfmwbofojnjmbwjmdtjoo#mlw#afsqb`wj`f#lejm#eqlmw#lepjwf#le#wkffmpvqf#wkbwwl#`qfbwf#bnjppjppjssjslwfmwjboozlvwpwbmgjmdafwwfq#wkbmtkbw#jp#mltpjwvbwfg#jmnfwb#mbnf>!WqbgjwjlmbopvddfpwjlmpWqbmpobwjlmwkf#elqn#lebwnlpskfqj`jgfloldj`bofmwfqsqjpfp`bo`vobwjmdfbpw#le#wkfqfnmbmwp#lesovdjmpsbdf,jmgf{-sks<qfnbjmfg#jmwqbmpelqnfgKf#tbp#bopltbp#boqfbgzpwbwjpwj`bojm#ebulq#leNjmjpwqz#lenlufnfmw#leelqnvobwjlmjp#qfrvjqfg?ojmh#qfo>!Wkjp#jp#wkf#?b#kqfe>!,slsvobqjyfgjmuloufg#jmbqf#vpfg#wlbmg#pfufqbonbgf#az#wkfpffnp#wl#afojhfoz#wkbwSbofpwjmjbmmbnfg#bewfqjw#kbg#affmnlpw#`lnnlmwl#qfefq#wlavw#wkjp#jp`lmpf`vwjufwfnslqbqjozJm#dfmfqbo/`lmufmwjlmpwbhfp#sob`fpvagjujpjlmwfqqjwlqjbolsfqbwjlmbosfqnbmfmwoztbp#obqdfozlvwaqfbh#lejm#wkf#sbpwelooltjmd#b#{nomp9ld>!=?b#`obpp>!`obpp>!wf{w@lmufqpjlm#nbz#af#vpfgnbmveb`wvqfbewfq#afjmd`ofbqej{!=\trvfpwjlm#letbp#fof`wfgwl#af`lnf#baf`bvpf#le#plnf#sflsofjmpsjqfg#azpv``fppevo#b#wjnf#tkfmnlqf#`lnnlmbnlmdpw#wkfbm#leej`jbotjgwk9233&8wf`kmloldz/tbp#bglswfgwl#hffs#wkfpfwwofnfmwpojuf#ajqwkpjmgf{-kwno!@lmmf`wj`vwbppjdmfg#wl%bns8wjnfp8b``lvmw#elqbojdm>qjdkwwkf#`lnsbmzbotbzp#affmqfwvqmfg#wljmuloufnfmwAf`bvpf#wkfwkjp#sfqjlg!#mbnf>!r!#`lmejmfg#wlb#qfpvow#leubovf>!!#,=jp#b`wvboozFmujqlmnfmw\x0e\t?,kfbg=\x0e\t@lmufqpfoz/=\t?gju#jg>!3!#tjgwk>!2jp#sqlabaozkbuf#af`lnf`lmwqloojmdwkf#sqlaofn`jwjyfmp#leslojwj`jbmpqfb`kfg#wkfbp#fbqoz#bp9mlmf8#lufq?wbaof#`fooubojgjwz#legjqf`woz#wllmnlvpfgltmtkfqf#jw#jptkfm#jw#tbpnfnafqp#le#qfobwjlm#wlb``lnnlgbwfbolmd#tjwk#Jm#wkf#obwfwkf#Fmdojpkgfoj`jlvp!=wkjp#jp#mlwwkf#sqfpfmwje#wkfz#bqfbmg#ejmboozb#nbwwfq#le\x0e\t\n?,gju=\x0e\t\x0e\t?,p`qjsw=ebpwfq#wkbmnbilqjwz#lebewfq#tkj`k`lnsbqbwjufwl#nbjmwbjmjnsqluf#wkfbtbqgfg#wkffq!#`obpp>!eqbnfalqgfqqfpwlqbwjlmjm#wkf#pbnfbmbozpjp#lewkfjq#ejqpwGvqjmd#wkf#`lmwjmfmwbopfrvfm`f#leevm`wjlm+*xelmw.pjyf9#tlqh#lm#wkf?,p`qjsw=\t?afdjmp#tjwkibubp`qjsw9`lmpwjwvfmwtbp#elvmgfgfrvjojaqjvnbppvnf#wkbwjp#djufm#azmffgp#wl#af`llqgjmbwfpwkf#ubqjlvpbqf#sbqw#lelmoz#jm#wkfpf`wjlmp#lejp#b#`lnnlmwkflqjfp#legjp`lufqjfpbppl`jbwjlmfgdf#le#wkfpwqfmdwk#leslpjwjlm#jmsqfpfmw.gbzvmjufqpboozwl#elqn#wkfavw#jmpwfbg`lqslqbwjlmbwwb`kfg#wljp#`lnnlmozqfbplmp#elq#%rvlw8wkf#`bm#af#nbgftbp#baof#wltkj`k#nfbmpavw#gjg#mlwlmNlvpfLufqbp#slppjaoflsfqbwfg#az`lnjmd#eqlnwkf#sqjnbqzbggjwjlm#leelq#pfufqbowqbmpefqqfgb#sfqjlg#lebqf#baof#wlkltfufq/#jwpklvog#kbufnv`k#obqdfq\t\n?,p`qjsw=bglswfg#wkfsqlsfqwz#legjqf`wfg#azfeef`wjufoztbp#aqlvdkw`kjogqfm#leSqldqbnnjmdolmdfq#wkbmnbmvp`qjswptbq#bdbjmpwaz#nfbmp#lebmg#nlpw#lepjnjobq#wl#sqlsqjfwbqzlqjdjmbwjmdsqfpwjdjlvpdqbnnbwj`bof{sfqjfm`f-wl#nbhf#wkfJw#tbp#bopljp#elvmg#jm`lnsfwjwlqpjm#wkf#V-P-qfsob`f#wkfaqlvdkw#wkf`bo`vobwjlmeboo#le#wkfwkf#dfmfqbosqb`wj`boozjm#klmlq#leqfofbpfg#jmqfpjgfmwjbobmg#plnf#lehjmd#le#wkfqfb`wjlm#wl2pw#Fbqo#le`vowvqf#bmgsqjm`jsbooz?,wjwof=\t##wkfz#`bm#afab`h#wl#wkfplnf#le#kjpf{slpvqf#wlbqf#pjnjobqelqn#le#wkfbggEbulqjwf`jwjyfmpkjssbqw#jm#wkfsflsof#tjwkjm#sqb`wj`fwl#`lmwjmvf%bns8njmvp8bssqlufg#az#wkf#ejqpw#booltfg#wkfbmg#elq#wkfevm`wjlmjmdsobzjmd#wkfplovwjlm#wlkfjdkw>!3!#jm#kjp#allhnlqf#wkbm#belooltp#wkf`qfbwfg#wkfsqfpfm`f#jm%maps8?,wg=mbwjlmbojpwwkf#jgfb#leb#`kbqb`wfqtfqf#elq`fg#`obpp>!awmgbzp#le#wkfefbwvqfg#jmpkltjmd#wkfjmwfqfpw#jmjm#sob`f#lewvqm#le#wkfwkf#kfbg#leOlqg#le#wkfslojwj`boozkbp#jwp#ltmFgv`bwjlmbobssqlubo#leplnf#le#wkffb`k#lwkfq/afkbujlq#lebmg#af`bvpfbmg#bmlwkfqbssfbqfg#lmqf`lqgfg#jmaob`h%rvlw8nbz#jm`ovgfwkf#tlqog$p`bm#ofbg#wlqfefqp#wl#balqgfq>!3!#dlufqmnfmw#tjmmjmd#wkfqfpvowfg#jm#tkjof#wkf#Tbpkjmdwlm/wkf#pvaif`w`jwz#jm#wkf=?,gju=\x0e\t\n\nqfeof`w#wkfwl#`lnsofwfaf`bnf#nlqfqbgjlb`wjufqfif`wfg#aztjwklvw#bmzkjp#ebwkfq/tkj`k#`lvog`lsz#le#wkfwl#jmgj`bwfb#slojwj`bob``lvmwp#le`lmpwjwvwfptlqhfg#tjwkfq?,b=?,oj=le#kjp#ojefb``lnsbmjfg`ojfmwTjgwksqfufmw#wkfOfdjpobwjufgjeefqfmwozwldfwkfq#jmkbp#pfufqboelq#bmlwkfqwf{w#le#wkfelvmgfg#wkff#tjwk#wkf#jp#vpfg#elq`kbmdfg#wkfvpvbooz#wkfsob`f#tkfqftkfqfbp#wkf=#?b#kqfe>!!=?b#kqfe>!wkfnpfoufp/bowklvdk#kfwkbw#`bm#afwqbgjwjlmboqlof#le#wkfbp#b#qfpvowqfnluf@kjoggfpjdmfg#aztfpw#le#wkfPlnf#sflsofsqlgv`wjlm/pjgf#le#wkfmftpofwwfqpvpfg#az#wkfgltm#wl#wkfb``fswfg#azojuf#jm#wkfbwwfnswp#wllvwpjgf#wkfeqfrvfm`jfpKltfufq/#jmsqldqbnnfqpbw#ofbpw#jmbssql{jnbwfbowklvdk#jwtbp#sbqw#lebmg#ubqjlvpDlufqmlq#lewkf#bqwj`ofwvqmfg#jmwl=?b#kqfe>!,wkf#f`lmlnzjp#wkf#nlpwnlpw#tjgfoztlvog#obwfqbmg#sfqkbspqjpf#wl#wkfl``vqp#tkfmvmgfq#tkj`k`lmgjwjlmp-wkf#tfpwfqmwkflqz#wkbwjp#sqlgv`fgwkf#`jwz#lejm#tkj`k#kfpffm#jm#wkfwkf#`fmwqboavjogjmd#lenbmz#le#kjpbqfb#le#wkfjp#wkf#lmoznlpw#le#wkfnbmz#le#wkfwkf#TfpwfqmWkfqf#jp#mlf{wfmgfg#wlPwbwjpwj`bo`lopsbm>1#\x7fpklqw#pwlqzslppjaof#wlwlsloldj`bo`qjwj`bo#leqfslqwfg#wlb#@kqjpwjbmgf`jpjlm#wljp#frvbo#wlsqlaofnp#leWkjp#`bm#afnfq`kbmgjpfelq#nlpw#leml#fujgfm`ffgjwjlmp#lefofnfmwp#jm%rvlw8-#Wkf`ln,jnbdfp,tkj`k#nbhfpwkf#sql`fppqfnbjmp#wkfojwfqbwvqf/jp#b#nfnafqwkf#slsvobqwkf#bm`jfmwsqlaofnp#jmwjnf#le#wkfgfefbwfg#azalgz#le#wkfb#eft#zfbqpnv`k#le#wkfwkf#tlqh#le@bojelqmjb/pfqufg#bp#bdlufqmnfmw-`lm`fswp#lenlufnfmw#jm\n\n?gju#jg>!jw!#ubovf>!obmdvbdf#lebp#wkfz#bqfsqlgv`fg#jmjp#wkbw#wkff{sobjm#wkfgju=?,gju=\tKltfufq#wkfofbg#wl#wkf\n?b#kqfe>!,tbp#dqbmwfgsflsof#kbuf`lmwjmvbooztbp#pffm#bpbmg#qfobwfgwkf#qlof#lesqlslpfg#azle#wkf#afpwfb`k#lwkfq-@lmpwbmwjmfsflsof#eqlngjbof`wp#lewl#qfujpjlmtbp#qfmbnfgb#plvq`f#lewkf#jmjwjboobvm`kfg#jmsqlujgf#wkfwl#wkf#tfpwtkfqf#wkfqfbmg#pjnjobqafwtffm#wtljp#bopl#wkfFmdojpk#bmg`lmgjwjlmp/wkbw#jw#tbpfmwjwofg#wlwkfnpfoufp-rvbmwjwz#leqbmpsbqfm`zwkf#pbnf#bpwl#iljm#wkf`lvmwqz#bmgwkjp#jp#wkfWkjp#ofg#wlb#pwbwfnfmw`lmwqbpw#wlobpwJmgf{Lewkqlvdk#kjpjp#gfpjdmfgwkf#wfqn#jpjp#sqlujgfgsqlwf`w#wkfmd?,b=?,oj=Wkf#`vqqfmwwkf#pjwf#lepvapwbmwjbof{sfqjfm`f/jm#wkf#Tfpwwkfz#pklvogpolufm(ajmb`lnfmwbqjlpvmjufqpjgbg`lmgj`jlmfpb`wjujgbgfpf{sfqjfm`jbwf`mlold/Absqlgv``j/_msvmwvb`j/_mbsoj`b`j/_m`lmwqbpf/]b`bwfdlq/Abpqfdjpwqbqpfsqlefpjlmbowqbwbnjfmwlqfd/Apwqbwfpf`qfwbq/Absqjm`jsbofpsqlwf``j/_mjnslqwbmwfpjnslqwbm`jbslpjajojgbgjmwfqfpbmwf`qf`jnjfmwlmf`fpjgbgfppvp`qjajqpfbpl`jb`j/_mgjpslmjaofpfubovb`j/_mfpwvgjbmwfpqfpslmpbaofqfplov`j/_mdvbgbobibqbqfdjpwqbglplslqwvmjgbg`lnfq`jbofpelwldqbe/Abbvwlqjgbgfpjmdfmjfq/Abwfofujpj/_m`lnsfwfm`jblsfqb`jlmfpfpwbaof`jglpjnsofnfmwfb`wvbonfmwfmbufdb`j/_m`lmelqnjgbgojmf.kfjdkw9elmw.ebnjoz9!#9#!kwws9,,bssoj`bwjlmpojmh!#kqfe>!psf`jej`booz,,?"X@GBWBX\tLqdbmjybwjlmgjpwqjavwjlm3s{8#kfjdkw9qfobwjlmpkjsgfuj`f.tjgwk?gju#`obpp>!?obafo#elq>!qfdjpwqbwjlm?,mlp`qjsw=\t,jmgf{-kwno!tjmglt-lsfm+#"jnslqwbmw8bssoj`bwjlm,jmgfsfmgfm`f,,ttt-dlldoflqdbmjybwjlmbvwl`lnsofwfqfrvjqfnfmwp`lmpfqubwjuf?elqn#mbnf>!jmwfoof`wvbonbqdjm.ofew92;wk#`fmwvqzbm#jnslqwbmwjmpwjwvwjlmpbaaqfujbwjlm?jnd#`obpp>!lqdbmjpbwjlm`jujojybwjlm2:wk#`fmwvqzbq`kjwf`wvqfjm`lqslqbwfg13wk#`fmwvqz.`lmwbjmfq!=nlpw#mlwbaoz,=?,b=?,gju=mlwjej`bwjlm$vmgfejmfg$*Evqwkfqnlqf/afojfuf#wkbwjmmfqKWNO#>#sqjlq#wl#wkfgqbnbwj`boozqfefqqjmd#wlmfdlwjbwjlmpkfbgrvbqwfqpPlvwk#Beqj`bvmpv``fppevoSfmmpzoubmjbBp#b#qfpvow/?kwno#obmd>!%ow8,pvs%dw8gfbojmd#tjwkskjobgfoskjbkjpwlqj`booz*8?,p`qjsw=\tsbggjmd.wls9f{sfqjnfmwbodfwBwwqjavwfjmpwqv`wjlmpwf`kmloldjfpsbqw#le#wkf#>evm`wjlm+*xpvap`qjswjlmo-gwg!=\x0e\t?kwdfldqbskj`bo@lmpwjwvwjlm$/#evm`wjlm+pvsslqwfg#azbdqj`vowvqbo`lmpwqv`wjlmsvaoj`bwjlmpelmw.pjyf9#2b#ubqjfwz#le?gju#pwzof>!Fm`z`olsfgjbjeqbnf#pq`>!gfnlmpwqbwfgb``lnsojpkfgvmjufqpjwjfpGfnldqbskj`p*8?,p`qjsw=?gfgj`bwfg#wlhmltofgdf#lepbwjpeb`wjlmsbqwj`vobqoz?,gju=?,gju=Fmdojpk#+VP*bssfmg@kjog+wqbmpnjppjlmp-#Kltfufq/#jmwfoojdfm`f!#wbajmgf{>!eolbw9qjdkw8@lnnlmtfbowkqbmdjmd#eqlnjm#tkj`k#wkfbw#ofbpw#lmfqfsqlgv`wjlmfm`z`olsfgjb8elmw.pjyf92ivqjpgj`wjlmbw#wkbw#wjnf!=?b#`obpp>!Jm#bggjwjlm/gfp`qjswjlm(`lmufqpbwjlm`lmwb`w#tjwkjp#dfmfqboozq!#`lmwfmw>!qfsqfpfmwjmd%ow8nbwk%dw8sqfpfmwbwjlml``bpjlmbooz?jnd#tjgwk>!mbujdbwjlm!=`lnsfmpbwjlm`kbnsjlmpkjsnfgjb>!boo!#ujlobwjlm#leqfefqfm`f#wlqfwvqm#wqvf8Pwqj`w,,FM!#wqbmpb`wjlmpjmwfqufmwjlmufqjej`bwjlmJmelqnbwjlm#gjeej`vowjfp@kbnsjlmpkjs`bsbajojwjfp?"Xfmgje^..=~\t?,p`qjsw=\t@kqjpwjbmjwzelq#f{bnsof/Sqlefppjlmboqfpwqj`wjlmppvddfpw#wkbwtbp#qfofbpfg+pv`k#bp#wkfqfnluf@obpp+vmfnsolznfmwwkf#Bnfqj`bmpwqv`wvqf#le,jmgf{-kwno#svaojpkfg#jmpsbm#`obpp>!!=?b#kqfe>!,jmwqlgv`wjlmafolmdjmd#wl`objnfg#wkbw`lmpfrvfm`fp?nfwb#mbnf>!Dvjgf#wl#wkflufqtkfonjmdbdbjmpw#wkf#`lm`fmwqbwfg/\t-mlmwlv`k#lapfqubwjlmp?,b=\t?,gju=\te#+gl`vnfmw-alqgfq9#2s{#xelmw.pjyf92wqfbwnfmw#le3!#kfjdkw>!2nlgjej`bwjlmJmgfsfmgfm`fgjujgfg#jmwldqfbwfq#wkbmb`kjfufnfmwpfpwbaojpkjmdIbubP`qjsw!#mfufqwkfofpppjdmjej`bm`fAqlbg`bpwjmd=%maps8?,wg=`lmwbjmfq!=\tpv`k#bp#wkf#jmeovfm`f#leb#sbqwj`vobqpq`>$kwws9,,mbujdbwjlm!#kboe#le#wkf#pvapwbmwjbo#%maps8?,gju=bgubmwbdf#legjp`lufqz#leevmgbnfmwbo#nfwqlslojwbmwkf#lsslpjwf!#{no9obmd>!gfojafqbwfozbojdm>`fmwfqfulovwjlm#lesqfpfqubwjlmjnsqlufnfmwpafdjmmjmd#jmIfpvp#@kqjpwSvaoj`bwjlmpgjpbdqffnfmwwf{w.bojdm9q/#evm`wjlm+*pjnjobqjwjfpalgz=?,kwno=jp#`vqqfmwozboskbafwj`bojp#plnfwjnfpwzsf>!jnbdf,nbmz#le#wkf#eolt9kjggfm8bubjobaof#jmgfp`qjaf#wkff{jpwfm`f#leboo#lufq#wkfwkf#Jmwfqmfw\n?vo#`obpp>!jmpwboobwjlmmfjdkalqkllgbqnfg#elq`fpqfgv`jmd#wkf`lmwjmvfp#wlMlmfwkfofpp/wfnsfqbwvqfp\t\n\n?b#kqfe>!`olpf#wl#wkff{bnsofp#le#jp#balvw#wkf+pff#afolt*-!#jg>!pfbq`ksqlefppjlmbojp#bubjobaofwkf#leej`jbo\n\n?,p`qjsw=\t\t\n\n?gju#jg>!b``fofqbwjlmwkqlvdk#wkf#Kboo#le#Ebnfgfp`qjswjlmpwqbmpobwjlmpjmwfqefqfm`f#wzsf>$wf{w,qf`fmw#zfbqpjm#wkf#tlqogufqz#slsvobqxab`hdqlvmg9wqbgjwjlmbo#plnf#le#wkf#`lmmf`wfg#wlf{soljwbwjlmfnfqdfm`f#le`lmpwjwvwjlmB#Kjpwlqz#lepjdmjej`bmw#nbmveb`wvqfgf{sf`wbwjlmp=?mlp`qjsw=?`bm#af#elvmgaf`bvpf#wkf#kbp#mlw#affmmfjdkalvqjmdtjwklvw#wkf#bggfg#wl#wkf\n?oj#`obpp>!jmpwqvnfmwboPlujfw#Vmjlmb`hmltofgdfgtkj`k#`bm#afmbnf#elq#wkfbwwfmwjlm#wlbwwfnswp#wl#gfufolsnfmwpJm#eb`w/#wkf?oj#`obpp>!bjnsoj`bwjlmppvjwbaof#elqnv`k#le#wkf#`lolmjybwjlmsqfpjgfmwjbo`bm`foAvaaof#Jmelqnbwjlmnlpw#le#wkf#jp#gfp`qjafgqfpw#le#wkf#nlqf#lq#ofppjm#PfswfnafqJmwfoojdfm`fpq`>!kwws9,,s{8#kfjdkw9#bubjobaof#wlnbmveb`wvqfqkvnbm#qjdkwpojmh#kqfe>!,bubjobajojwzsqlslqwjlmbolvwpjgf#wkf#bpwqlmlnj`bokvnbm#afjmdpmbnf#le#wkf#bqf#elvmg#jmbqf#abpfg#lmpnboofq#wkbmb#sfqplm#tklf{sbmpjlm#lebqdvjmd#wkbwmlt#hmltm#bpJm#wkf#fbqozjmwfqnfgjbwfgfqjufg#eqlnP`bmgjmbujbm?,b=?,gju=\x0e\t`lmpjgfq#wkfbm#fpwjnbwfgwkf#Mbwjlmbo?gju#jg>!sbdqfpvowjmd#jm`lnnjppjlmfgbmboldlvp#wlbqf#qfrvjqfg,vo=\t?,gju=\ttbp#abpfg#lmbmg#af`bnf#b%maps8%maps8w!#ubovf>!!#tbp#`bswvqfgml#nlqf#wkbmqfpsf`wjufoz`lmwjmvf#wl#=\x0e\t?kfbg=\x0e\t?tfqf#`qfbwfgnlqf#dfmfqbojmelqnbwjlm#vpfg#elq#wkfjmgfsfmgfmw#wkf#Jnsfqjbo`lnslmfmw#lewl#wkf#mlqwkjm`ovgf#wkf#@lmpwqv`wjlmpjgf#le#wkf#tlvog#mlw#afelq#jmpwbm`fjmufmwjlm#lenlqf#`lnsof{`loof`wjufozab`hdqlvmg9#wf{w.bojdm9#jwp#lqjdjmbojmwl#b``lvmwwkjp#sql`fppbm#f{wfmpjufkltfufq/#wkfwkfz#bqf#mlwqfif`wfg#wkf`qjwj`jpn#legvqjmd#tkj`ksqlabaoz#wkfwkjp#bqwj`of+evm`wjlm+*xJw#pklvog#afbm#bdqffnfmwb``jgfmwboozgjeefqp#eqlnBq`kjwf`wvqfafwwfq#hmltmbqqbmdfnfmwpjmeovfm`f#lmbwwfmgfg#wkfjgfmwj`bo#wlplvwk#le#wkfsbpp#wkqlvdk{no!#wjwof>!tfjdkw9alog8`qfbwjmd#wkfgjpsobz9mlmfqfsob`fg#wkf?jnd#pq`>!,jkwwsp9,,ttt-Tlqog#Tbq#JJwfpwjnlmjbopelvmg#jm#wkfqfrvjqfg#wl#bmg#wkbw#wkfafwtffm#wkf#tbp#gfpjdmfg`lmpjpwp#le#`lmpjgfqbaozsvaojpkfg#azwkf#obmdvbdf@lmpfqubwjlm`lmpjpwfg#leqfefq#wl#wkfab`h#wl#wkf#`pp!#nfgjb>!Sflsof#eqln#bubjobaof#lmsqlufg#wl#afpvddfpwjlmp!tbp#hmltm#bpubqjfwjfp#leojhfoz#wl#af`lnsqjpfg#lepvsslqw#wkf#kbmgp#le#wkf`lvsofg#tjwk`lmmf`w#bmg#alqgfq9mlmf8sfqelqnbm`fpafelqf#afjmdobwfq#af`bnf`bo`vobwjlmplewfm#`boofgqfpjgfmwp#lenfbmjmd#wkbw=?oj#`obpp>!fujgfm`f#elqf{sobmbwjlmpfmujqlmnfmwp!=?,b=?,gju=tkj`k#booltpJmwqlgv`wjlmgfufolsfg#azb#tjgf#qbmdflm#afkboe#leubojdm>!wls!sqjm`jsof#lebw#wkf#wjnf/?,mlp`qjsw=\x0epbjg#wl#kbufjm#wkf#ejqpwtkjof#lwkfqpkzslwkfwj`boskjolplskfqpsltfq#le#wkf`lmwbjmfg#jmsfqelqnfg#azjmbajojwz#wltfqf#tqjwwfmpsbm#pwzof>!jmsvw#mbnf>!wkf#rvfpwjlmjmwfmgfg#elqqfif`wjlm#lejnsojfp#wkbwjmufmwfg#wkfwkf#pwbmgbqgtbp#sqlabaozojmh#afwtffmsqlefpplq#lejmwfqb`wjlmp`kbmdjmd#wkfJmgjbm#L`fbm#`obpp>!obpwtlqhjmd#tjwk$kwws9,,ttt-zfbqp#afelqfWkjp#tbp#wkfqf`qfbwjlmbofmwfqjmd#wkfnfbpvqfnfmwpbm#f{wqfnfozubovf#le#wkfpwbqw#le#wkf\t?,p`qjsw=\t\tbm#feelqw#wljm`qfbpf#wkfwl#wkf#plvwkpsb`jmd>!3!=pveej`jfmwozwkf#Fvqlsfbm`lmufqwfg#wl`ofbqWjnflvwgjg#mlw#kbuf`lmpfrvfmwozelq#wkf#mf{wf{wfmpjlm#lef`lmlnj`#bmgbowklvdk#wkfbqf#sqlgv`fgbmg#tjwk#wkfjmpveej`jfmwdjufm#az#wkfpwbwjmd#wkbwf{sfmgjwvqfp?,psbm=?,b=\twklvdkw#wkbwlm#wkf#abpjp`foosbggjmd>jnbdf#le#wkfqfwvqmjmd#wljmelqnbwjlm/pfsbqbwfg#azbppbppjmbwfgp!#`lmwfmw>!bvwklqjwz#lemlqwktfpwfqm?,gju=\t?gju#!=?,gju=\x0e\t##`lmpvowbwjlm`lnnvmjwz#lewkf#mbwjlmbojw#pklvog#afsbqwj`jsbmwp#bojdm>!ofewwkf#dqfbwfpwpfof`wjlm#lepvsfqmbwvqbogfsfmgfmw#lmjp#nfmwjlmfgbooltjmd#wkftbp#jmufmwfgb``lnsbmzjmdkjp#sfqplmbobubjobaof#bwpwvgz#le#wkflm#wkf#lwkfqf{f`vwjlm#leKvnbm#Qjdkwpwfqnp#le#wkfbppl`jbwjlmpqfpfbq`k#bmgpv``ffgfg#azgfefbwfg#wkfbmg#eqln#wkfavw#wkfz#bqf`lnnbmgfq#lepwbwf#le#wkfzfbqp#le#bdfwkf#pwvgz#le?vo#`obpp>!psob`f#jm#wkftkfqf#kf#tbp?oj#`obpp>!ewkfqf#bqf#mltkj`k#af`bnfkf#svaojpkfgf{sqfppfg#jmwl#tkj`k#wkf`lnnjppjlmfqelmw.tfjdkw9wfqqjwlqz#lef{wfmpjlmp!=Qlnbm#Fnsjqffrvbo#wl#wkfJm#`lmwqbpw/kltfufq/#bmgjp#wzsj`boozbmg#kjp#tjef+bopl#`boofg=?vo#`obpp>!feef`wjufoz#fuloufg#jmwlpffn#wl#kbuftkj`k#jp#wkfwkfqf#tbp#mlbm#f{`foofmwboo#le#wkfpfgfp`qjafg#azJm#sqb`wj`f/aqlbg`bpwjmd`kbqdfg#tjwkqfeof`wfg#jmpvaif`wfg#wlnjojwbqz#bmgwl#wkf#sljmwf`lmlnj`boozpfwWbqdfwjmdbqf#b`wvboozuj`wlqz#lufq+*8?,p`qjsw=`lmwjmvlvpozqfrvjqfg#elqfulovwjlmbqzbm#feef`wjufmlqwk#le#wkf/#tkj`k#tbp#eqlmw#le#wkflq#lwkfqtjpfplnf#elqn#lekbg#mlw#affmdfmfqbwfg#azjmelqnbwjlm-sfqnjwwfg#wljm`ovgfp#wkfgfufolsnfmw/fmwfqfg#jmwlwkf#sqfujlvp`lmpjpwfmwozbqf#hmltm#bpwkf#ejfog#lewkjp#wzsf#ledjufm#wl#wkfwkf#wjwof#le`lmwbjmp#wkfjmpwbm`fp#lejm#wkf#mlqwkgvf#wl#wkfjqbqf#gfpjdmfg`lqslqbwjlmptbp#wkbw#wkflmf#le#wkfpfnlqf#slsvobqpv``ffgfg#jmpvsslqw#eqlnjm#gjeefqfmwglnjmbwfg#azgfpjdmfg#elqltmfqpkjs#lebmg#slppjaozpwbmgbqgjyfgqfpslmpfWf{wtbp#jmwfmgfgqf`fjufg#wkfbppvnfg#wkbwbqfbp#le#wkfsqjnbqjoz#jmwkf#abpjp#lejm#wkf#pfmpfb``lvmwp#elqgfpwqlzfg#azbw#ofbpw#wtltbp#gf`obqfg`lvog#mlw#afPf`qfwbqz#lebssfbq#wl#afnbqdjm.wls92,]_p(\x7f_p(\',df*xwkqlt#f~8wkf#pwbqw#lewtl#pfsbqbwfobmdvbdf#bmgtkl#kbg#affmlsfqbwjlm#legfbwk#le#wkfqfbo#mvnafqp\n?ojmh#qfo>!sqlujgfg#wkfwkf#pwlqz#le`lnsfwjwjlmpfmdojpk#+VH*fmdojpk#+VP*<p<R<Q<_<R<W<M=l<S=m<V<T=m=l<S=m<V<T=m=l<S=m<V<R5h4U4]4D5f4E\nAO\x05Gx\bTA\nzk\vBl\bQ\x7f\bTA\nzk\vUm\bQ\x7f\bTA\nzk\npe\x05u|\ti@\tcT\bVV\n\\}\nxS\tVp\x05tS\x05k`\t[X\t[X\vHR\bPv\bTW\bUe\n\x7fa\bQp\v_W\vWs\nxS\vAz\n_y\x04Khjmelqnb`j/_mkfqqbnjfmwbpfof`wq/_mj`lgfp`qjs`j/_m`obpjej`bglp`lml`jnjfmwlsvaoj`b`j/_mqfob`jlmbgbpjmelqn/Mwj`bqfob`jlmbglpgfsbqwbnfmwlwqbabibglqfpgjqf`wbnfmwfbzvmwbnjfmwlnfq`bglOjaqf`lmw/M`wfmlpkbajwb`jlmfp`vnsojnjfmwlqfpwbvqbmwfpgjpslpj`j/_m`lmpf`vfm`jbfof`wq/_mj`bbsoj`b`jlmfpgfp`lmf`wbgljmpwbob`j/_mqfbojyb`j/_mvwjojyb`j/_mfm`j`olsfgjbfmefqnfgbgfpjmpwqvnfmwlpf{sfqjfm`jbpjmpwjwv`j/_msbqwj`vobqfppva`bwfdlqjb=n<R<W=`<V<R<L<R=m=m<T<T=l<\\<]<R=n=g<]<R<W=`=d<Y<S=l<R=m=n<R<P<R<Z<Y=n<Y<X=l=o<_<T=i=m<W=o=k<\\<Y=m<Y<U=k<\\=m<^=m<Y<_<X<\\<L<R=m=m<T=c<p<R=m<V<^<Y<X=l=o<_<T<Y<_<R=l<R<X<\\<^<R<S=l<R=m<X<\\<Q<Q=g=i<X<R<W<Z<Q=g<T<P<Y<Q<Q<R<p<R=m<V<^=g=l=o<]<W<Y<U<p<R=m<V<^<\\=m=n=l<\\<Q=g<Q<T=k<Y<_<R=l<\\<]<R=n<Y<X<R<W<Z<Y<Q=o=m<W=o<_<T=n<Y<S<Y=l=`<r<X<Q<\\<V<R<S<R=n<R<P=o=l<\\<]<R=n=o<\\<S=l<Y<W=c<^<R<R<]=e<Y<R<X<Q<R<_<R=m<^<R<Y<_<R=m=n<\\=n=`<T<X=l=o<_<R<U=h<R=l=o<P<Y=i<R=l<R=d<R<S=l<R=n<T<^=m=m=g<W<V<\\<V<\\<Z<X=g<U<^<W<\\=m=n<T<_=l=o<S<S=g<^<P<Y=m=n<Y=l<\\<]<R=n<\\=m<V<\\<[<\\<W<S<Y=l<^=g<U<X<Y<W<\\=n=`<X<Y<Q=`<_<T<S<Y=l<T<R<X<]<T<[<Q<Y=m<R=m<Q<R<^<Y<P<R<P<Y<Q=n<V=o<S<T=n=`<X<R<W<Z<Q<\\=l<\\<P<V<\\=i<Q<\\=k<\\<W<R<L<\\<]<R=n<\\<N<R<W=`<V<R=m<R<^=m<Y<P<^=n<R=l<R<U<Q<\\=k<\\<W<\\=m<S<T=m<R<V=m<W=o<Z<]=g=m<T=m=n<Y<P<S<Y=k<\\=n<T<Q<R<^<R<_<R<S<R<P<R=e<T=m<\\<U=n<R<^<S<R=k<Y<P=o<S<R<P<R=e=`<X<R<W<Z<Q<R=m=m=g<W<V<T<]=g=m=n=l<R<X<\\<Q<Q=g<Y<P<Q<R<_<T<Y<S=l<R<Y<V=n<M<Y<U=k<\\=m<P<R<X<Y<W<T=n<\\<V<R<_<R<R<Q<W<\\<U<Q<_<R=l<R<X<Y<^<Y=l=m<T=c=m=n=l<\\<Q<Y=h<T<W=`<P=g=o=l<R<^<Q=c=l<\\<[<Q=g=i<T=m<V<\\=n=`<Q<Y<X<Y<W=b=c<Q<^<\\=l=c<P<Y<Q=`=d<Y<P<Q<R<_<T=i<X<\\<Q<Q<R<U<[<Q<\\=k<T=n<Q<Y<W=`<[=c=h<R=l=o<P<\\<N<Y<S<Y=l=`<P<Y=m=c=j<\\<[<\\=e<T=n=g<w=o=k=d<T<Y\fHD\fHU\fIl\fHn\fHy\fH\\\fHD\fIk\fHi\fHF\fHD\fIk\fHy\fHS\fHC\fHR\fHy\fH\\\fIk\fHn\fHi\fHD\fIa\fHC\fHy\fIa\fHC\fHR\fH{\fHR\fHk\fHM\fH@\fHR\fH\\\fIk\fHy\fHS\fHT\fIl\fHJ\fHS\fHC\fHR\fHF\fHU\fH^\fIk\fHT\fHS\fHn\fHU\fHA\fHR\fH\\\fHH\fHi\fHF\fHD\fIl\fHY\fHR\fH^\fIk\fHT\fIk\fHY\fHR\fHy\fH\\\fHH\fIk\fHB\fIk\fH\\\fIk\fHU\fIg\fHD\fIk\fHT\fHy\fHH\fIk\fH@\fHU\fIm\fHH\fHT\fHR\fHk\fHs\fHU\fIg\fH{\fHR\fHp\fHR\fHD\fIk\fHB\fHS\fHD\fHs\fHy\fH\\\fHH\fHR\fHy\fH\\\fHD\fHR\fHe\fHD\fHy\fIk\fHC\fHU\fHR\fHm\fHT\fH@\fHT\fIk\fHA\fHR\fH[\fHR\fHj\fHF\fHy\fIk\fH^\fHS\fHC\fIk\fHZ\fIm\fH\\\fIn\fHk\fHT\fHy\fIk\fHt\fHn\fHs\fIk\fHB\fIk\fH\\\fIl\fHT\fHy\fHH\fHR\fHB\fIk\fH\\\fHR\fH^\fIk\fHy\fH\\\fHi\fHK\fHS\fHy\fHi\fHF\fHD\fHR\fHT\fHB\fHR\fHp\fHB\fIm\fHq\fIk\fHy\fHR\fH\\\fHO\fHU\fIg\fHH\fHR\fHy\fHM\fHP\fIl\fHC\fHU\fHR\fHn\fHU\fIg\fHs\fH^\fHZ\fH@\fIa\fHJ\fH^\fHS\fHC\fHR\fHp\fIl\fHY\fHD\fHp\fHR\fHH\fHR\fHy\fId\fHT\fIk\fHj\fHF\fHy\fHR\fHY\fHR\fH^\fIl\fHJ\fIk\fHD\fIk\fHF\fIn\fH\\\fIl\fHF\fHR\fHD\fIl\fHe\fHT\fHy\fIk\fHU\fIg\fH{\fIl\fH@\fId\fHL\fHy\fHj\fHF\fHy\fIl\fHY\fH\\\fIa\fH[\fH{\fHR\fHn\fHY\fHj\fHF\fHy\fIg\fHp\fHS\fH^\fHR\fHp\fHR\fHD\fHR\fHT\fHU\fHB\fHH\fHU\fHB\fIk\fHn\fHe\fHD\fHy\fIl\fHC\fHR\fHU\fIn\fHJ\fH\\\fIa\fHp\fHT\fIn\fHv\fIl\fHF\fHT\fHn\fHJ\fHT\fHY\fHR\fH^\fHU\fIg\fHD\fHR\fHU\fIg\fHH\fIl\fHp\fId\fHT\fIk\fHY\fHR\fHF\fHT\fHp\fHD\fHH\fHR\fHD\fIk\fHH\fHR\fHp\fHR\fH\\\fIl\fHt\fHR\fHC\fH^\fHp\fHS\fH^\fIk\fHD\fIl\fHv\fIk\fHp\fHR\fHn\fHv\fHF\fHH\fIa\fH\\\fH{\fIn\fH{\fH^\fHp\fHR\fHH\fIk\fH@\fHR\fHU\fH\\\fHj\fHF\fHD\fIk\fHY\fHR\fHU\fHD\fHk\fHT\fHy\fHR\fHT\fIm\fH@\fHU\fH\\\fHU\fHD\fIk\fHk\fHT\fHT\fIk\fHT\fHU\fHS\fHH\fH@\fHM\fHP\fIk\fHt\fHs\fHD\fHR\fHH\fH^\fHR\fHZ\fHF\fHR\fHn\fHv\fHZ\fIa\fH\\\fIl\fH@\fHM\fHP\fIl\fHU\fIg\fHH\fIk\fHT\fHR\fHd\fHs\fHZ\fHR\fHC\fHJ\fHT\fHy\fHH\fIl\fHp\fHR\fHH\fIl\fHY\fHR\fH^\fHR\fHU\fHp\fHR\fH\\\fHF\fHs\fHD\fHR\fH\\\fHz\fHD\fIk\fHT\fHM\fHP\fHy\fHB\fHS\fH^\fHR\fHe\fHT\fHy\fIl\fHy\fIk\fHY\fH^\fH^\fH{\fHH\fHR\fHz\fHR\fHD\fHR\fHi\fH\\\fIa\fHI\fHp\fHU\fHR\fHn\fHJ\fIk\fHz\fHR\fHF\fHU\fH^\fIl\fHD\fHS\fHC\fHB\fH@\fHS\fHD\fHR\fH@\fId\fHn\fHy\fHy\fHU\fIl\fHn\fHy\fHU\fHD\fHR\fHJ\fIk\fHH\fHR\fHU\fHB\fH^\fIk\fHy\fHR\fHG\fIl\fHp\fH@\fHy\fHS\fHH\fIm\fH\\\fHH\fHB\fHR\fHn\fH{\fHY\fHU\fIl\fHn\fH\\\fIg\fHp\fHP\fHB\fHS\fH^\fIl\fHj\fH\\\fIg\fHF\fHT\fIk\fHD\fHR\fHC\fHR\fHJ\fHY\fH^\fIk\fHD\fIk\fHz\fHR\fHH\fHR\fHy\fH\\\fIl\fH@\fHe\fHD\fHy\fHR\fHp\fHY\fHR\fH@\fHF\fIn\fH\\\fHR\fH@\fHM\fHP\fHR\fHT\fI`\fHJ\fHR\fHZ\fIk\fHC\fH\\\fHy\fHS\fHC\fIk\fHy\fHU\fHR\fHn\fHi\fHy\fHT\fH\\\fH@\fHD\fHR\fHc\fHY\fHU\fHR\fHn\fHT\fIa\fHI\fH^\fHB\fHS\fH^\fIk\fH^\fIk\fHz\fHy\fHY\fHS\fH[\fHC\fHy\fIa\fH\\\fHn\fHT\fHB\fIn\fHU\fHI\fHR\fHD\fHR4F4_4F4[5f4U5i4X4K4]5o4E4D5d4K4_4[4E4K5h4Y5m4A4E5i5d4K4Z5f4U4K5h4B4K4Y4E4K5h5i4^5f4C4K5h4U4K5i4E4K5h5o4K4F4D4K5h4]4C5d4C4D4]5j4K5i4@4K5h4C5d5h4E4K5h4U4K5h5i4K5h5i5d5n4U4K5h4U4]4D5f4K5h4_4]5f4U4K5h4@5d4K5h4K5h4\\5k4K4D4K5h4A5f4K4E4K5h4A5n5d5n4K5h5o4]5f5i4K5h4U4]4K5n5i4A5m5d4T4E4K5h4G4K5j5f5i4X4K5k4C4E4K5h5i4]4O4E4K5h5n4]4N5j4K5h4X4D4K4D4K5h4A5d4K4]4K5h4@4C5f4C4K5h4O4_4]4E4K5h4U5h5d5i5i4@5i5d4U4E4K5h4]4A5i5j4K5h5j5n4K4[5m5h4_4[5f5j4K5h5o5d5f4F4K5h4C5j5f4K4D4]5o4K4F5k4K5h4]5f4K4Z4F4A5f4K4F5f4D4F5d5n5f4F4K5h4O5d5h5e4K5h4D4]5f4C4K5h5o5h4K5i4K5h4]4K4D4[4K5h4X4B4Y5f4_5f4K4]4K4F4K5h4G4K5h4G4K5h4Y5h4K4E4K5h4A4C5f4G4K5h4^5d4K4]4K5h4B5h5f4@4K5h4@5i5f4U4K5h4U4K5i5k4K5h4@5i4K5h4K5h4_4K4U4E5i4X4K5k4C5k4K5h4]4J5f4_4K5h4C4B5d5h4K5h5m5j5f4E4K5h5o4F4K4D4K5h4C5d4]5f4K5h4C4]5d4_4K4_4F4V4]5n4F4Y4K5i5f5i4K5h4D5j4K4F4K5h4U4T5f5ifmwfqwbjmnfmwvmgfqpwbmgjmd#>#evm`wjlm+*-isd!#tjgwk>!`lmejdvqbwjlm-smd!#tjgwk>!?algz#`obpp>!Nbwk-qbmgln+*`lmwfnslqbqz#Vmjwfg#Pwbwfp`jq`vnpwbm`fp-bssfmg@kjog+lqdbmjybwjlmp?psbm#`obpp>!!=?jnd#pq`>!,gjpwjmdvjpkfgwklvpbmgp#le#`lnnvmj`bwjlm`ofbq!=?,gju=jmufpwjdbwjlmebuj`lm-j`l!#nbqdjm.qjdkw9abpfg#lm#wkf#Nbppb`kvpfwwpwbaof#alqgfq>jmwfqmbwjlmbobopl#hmltm#bpsqlmvm`jbwjlmab`hdqlvmg9 esbggjmd.ofew9Elq#f{bnsof/#njp`foobmflvp%ow8,nbwk%dw8spz`kloldj`bojm#sbqwj`vobqfbq`k!#wzsf>!elqn#nfwklg>!bp#lsslpfg#wlPvsqfnf#@lvqwl``bpjlmbooz#Bggjwjlmbooz/Mlqwk#Bnfqj`bs{8ab`hdqlvmglsslqwvmjwjfpFmwfqwbjmnfmw-wlOltfq@bpf+nbmveb`wvqjmdsqlefppjlmbo#`lnajmfg#tjwkElq#jmpwbm`f/`lmpjpwjmd#le!#nb{ofmdwk>!qfwvqm#ebopf8`lmp`jlvpmfppNfgjwfqqbmfbmf{wqblqgjmbqzbppbppjmbwjlmpvapfrvfmwoz#avwwlm#wzsf>!wkf#mvnafq#lewkf#lqjdjmbo#`lnsqfkfmpjufqfefqp#wl#wkf?,vo=\t?,gju=\tskjolplskj`bool`bwjlm-kqfetbp#svaojpkfgPbm#Eqbm`jp`l+evm`wjlm+*x\t?gju#jg>!nbjmplskjpwj`bwfgnbwkfnbwj`bo#,kfbg=\x0e\t?algzpvddfpwp#wkbwgl`vnfmwbwjlm`lm`fmwqbwjlmqfobwjlmpkjspnbz#kbuf#affm+elq#f{bnsof/Wkjp#bqwj`of#jm#plnf#`bpfpsbqwp#le#wkf#gfejmjwjlm#leDqfbw#Aqjwbjm#`foosbggjmd>frvjubofmw#wlsob`fklogfq>!8#elmw.pjyf9#ivpwjej`bwjlmafojfufg#wkbwpveefqfg#eqlnbwwfnswfg#wl#ofbgfq#le#wkf`qjsw!#pq`>!,+evm`wjlm+*#xbqf#bubjobaof\t\n?ojmh#qfo>!#pq`>$kwws9,,jmwfqfpwfg#jm`lmufmwjlmbo#!#bow>!!#,=?,bqf#dfmfqboozkbp#bopl#affmnlpw#slsvobq#`lqqfpslmgjmd`qfgjwfg#tjwkwzof>!alqgfq9?,b=?,psbm=?,-dje!#tjgwk>!?jeqbnf#pq`>!wbaof#`obpp>!jmojmf.aol`h8b``lqgjmd#wl#wldfwkfq#tjwkbssql{jnbwfozsbqojbnfmwbqznlqf#bmg#nlqfgjpsobz9mlmf8wqbgjwjlmboozsqfglnjmbmwoz%maps8\x7f%maps8%maps8?,psbm=#`foopsb`jmd>?jmsvw#mbnf>!lq!#`lmwfmw>!`lmwqlufqpjbosqlsfqwz>!ld9,{.pkl`htbuf.gfnlmpwqbwjlmpvqqlvmgfg#azMfufqwkfofpp/tbp#wkf#ejqpw`lmpjgfqbaof#Bowklvdk#wkf#`loobalqbwjlmpklvog#mlw#afsqlslqwjlm#le?psbm#pwzof>!hmltm#bp#wkf#pklqwoz#bewfqelq#jmpwbm`f/gfp`qjafg#bp#,kfbg=\t?algz#pwbqwjmd#tjwkjm`qfbpjmdoz#wkf#eb`w#wkbwgjp`vppjlm#lenjggof#le#wkfbm#jmgjujgvbogjeej`vow#wl#sljmw#le#ujftklnlpf{vbojwzb``fswbm`f#le?,psbm=?,gju=nbmveb`wvqfqplqjdjm#le#wkf`lnnlmoz#vpfgjnslqwbm`f#legfmlnjmbwjlmpab`hdqlvmg9# ofmdwk#le#wkfgfwfqnjmbwjlmb#pjdmjej`bmw!#alqgfq>!3!=qfulovwjlmbqzsqjm`jsofp#lejp#`lmpjgfqfgtbp#gfufolsfgJmgl.Fvqlsfbmuvomfqbaof#wlsqlslmfmwp#lebqf#plnfwjnfp`olpfq#wl#wkfMft#Zlqh#@jwz#mbnf>!pfbq`kbwwqjavwfg#wl`lvqpf#le#wkfnbwkfnbwj`jbmaz#wkf#fmg#lebw#wkf#fmg#le!#alqgfq>!3!#wf`kmloldj`bo-qfnluf@obpp+aqbm`k#le#wkffujgfm`f#wkbw"Xfmgje^..=\x0e\tJmpwjwvwf#le#jmwl#b#pjmdofqfpsf`wjufoz-bmg#wkfqfelqfsqlsfqwjfp#lejp#ol`bwfg#jmplnf#le#tkj`kWkfqf#jp#bopl`lmwjmvfg#wl#bssfbqbm`f#le#%bns8mgbpk8#gfp`qjafp#wkf`lmpjgfqbwjlmbvwklq#le#wkfjmgfsfmgfmwozfrvjssfg#tjwkglfp#mlw#kbuf?,b=?b#kqfe>!`lmevpfg#tjwk?ojmh#kqfe>!,bw#wkf#bdf#lebssfbq#jm#wkfWkfpf#jm`ovgfqfdbqgofpp#le`lvog#af#vpfg#pwzof>%rvlw8pfufqbo#wjnfpqfsqfpfmw#wkfalgz=\t?,kwno=wklvdkw#wl#afslsvobwjlm#leslppjajojwjfpsfq`fmwbdf#leb``fpp#wl#wkfbm#bwwfnsw#wlsqlgv`wjlm#leirvfqz,irvfqzwtl#gjeefqfmwafolmd#wl#wkffpwbaojpknfmwqfsob`jmd#wkfgfp`qjswjlm!#gfwfqnjmf#wkfbubjobaof#elqB``lqgjmd#wl#tjgf#qbmdf#le\n?gju#`obpp>!nlqf#`lnnlmozlqdbmjpbwjlmpevm`wjlmbojwztbp#`lnsofwfg#%bns8ngbpk8#sbqwj`jsbwjlmwkf#`kbqb`wfqbm#bggjwjlmbobssfbqp#wl#afeb`w#wkbw#wkfbm#f{bnsof#lepjdmjej`bmwozlmnlvpflufq>!af`bvpf#wkfz#bpzm`#>#wqvf8sqlaofnp#tjwkpffnp#wl#kbufwkf#qfpvow#le#pq`>!kwws9,,ebnjojbq#tjwkslppfppjlm#leevm`wjlm#+*#xwllh#sob`f#jmbmg#plnfwjnfppvapwbmwjbooz?psbm=?,psbm=jp#lewfm#vpfgjm#bm#bwwfnswdqfbw#gfbo#leFmujqlmnfmwbopv``fppevooz#ujqwvbooz#boo13wk#`fmwvqz/sqlefppjlmbopmf`fppbqz#wl#gfwfqnjmfg#az`lnsbwjajojwzaf`bvpf#jw#jpGj`wjlmbqz#lenlgjej`bwjlmpWkf#elooltjmdnbz#qfefq#wl9@lmpfrvfmwoz/Jmwfqmbwjlmbobowklvdk#plnfwkbw#tlvog#aftlqog$p#ejqpw`obppjejfg#bpalwwln#le#wkf+sbqwj`vobqozbojdm>!ofew!#nlpw#`lnnlmozabpjp#elq#wkfelvmgbwjlm#le`lmwqjavwjlmpslsvobqjwz#le`fmwfq#le#wkfwl#qfgv`f#wkfivqjpgj`wjlmpbssql{jnbwjlm#lmnlvpflvw>!Mft#Wfpwbnfmw`loof`wjlm#le?,psbm=?,b=?,jm#wkf#Vmjwfgejon#gjqf`wlq.pwqj`w-gwg!=kbp#affm#vpfgqfwvqm#wl#wkfbowklvdk#wkjp`kbmdf#jm#wkfpfufqbo#lwkfqavw#wkfqf#bqfvmsqf`fgfmwfgjp#pjnjobq#wlfpsf`jbooz#jmtfjdkw9#alog8jp#`boofg#wkf`lnsvwbwjlmbojmgj`bwf#wkbwqfpwqj`wfg#wl\n?nfwb#mbnf>!bqf#wzsj`booz`lmeoj`w#tjwkKltfufq/#wkf#Bm#f{bnsof#le`lnsbqfg#tjwkrvbmwjwjfp#leqbwkfq#wkbm#b`lmpwfoobwjlmmf`fppbqz#elqqfslqwfg#wkbwpsf`jej`bwjlmslojwj`bo#bmg%maps8%maps8?qfefqfm`fp#wlwkf#pbnf#zfbqDlufqmnfmw#ledfmfqbwjlm#lekbuf#mlw#affmpfufqbo#zfbqp`lnnjwnfmw#wl\n\n?vo#`obpp>!ujpvbojybwjlm2:wk#`fmwvqz/sqb`wjwjlmfqpwkbw#kf#tlvogbmg#`lmwjmvfgl``vsbwjlm#lejp#gfejmfg#bp`fmwqf#le#wkfwkf#bnlvmw#le=?gju#pwzof>!frvjubofmw#legjeefqfmwjbwfaqlvdkw#balvwnbqdjm.ofew9#bvwlnbwj`boozwklvdkw#le#bpPlnf#le#wkfpf\t?gju#`obpp>!jmsvw#`obpp>!qfsob`fg#tjwkjp#lmf#le#wkffgv`bwjlm#bmgjmeovfm`fg#azqfsvwbwjlm#bp\t?nfwb#mbnf>!b``lnnlgbwjlm?,gju=\t?,gju=obqdf#sbqw#leJmpwjwvwf#elqwkf#pl.`boofg#bdbjmpw#wkf#Jm#wkjp#`bpf/tbp#bssljmwfg`objnfg#wl#afKltfufq/#wkjpGfsbqwnfmw#lewkf#qfnbjmjmdfeef`w#lm#wkfsbqwj`vobqoz#gfbo#tjwk#wkf\t?gju#pwzof>!bonlpw#botbzpbqf#`vqqfmwozf{sqfppjlm#leskjolplskz#leelq#nlqf#wkbm`jujojybwjlmplm#wkf#jpobmgpfof`wfgJmgf{`bm#qfpvow#jm!#ubovf>!!#,=wkf#pwqv`wvqf#,=?,b=?,gju=Nbmz#le#wkfpf`bvpfg#az#wkfle#wkf#Vmjwfgpsbm#`obpp>!n`bm#af#wqb`fgjp#qfobwfg#wlaf`bnf#lmf#lejp#eqfrvfmwozojujmd#jm#wkfwkflqfwj`boozElooltjmd#wkfQfulovwjlmbqzdlufqmnfmw#jmjp#gfwfqnjmfgwkf#slojwj`bojmwqlgv`fg#jmpveej`jfmw#wlgfp`qjswjlm!=pklqw#pwlqjfppfsbqbwjlm#lebp#wl#tkfwkfqhmltm#elq#jwptbp#jmjwjboozgjpsobz9aol`hjp#bm#f{bnsofwkf#sqjm`jsbo`lmpjpwp#le#bqf`ldmjyfg#bp,algz=?,kwno=b#pvapwbmwjboqf`lmpwqv`wfgkfbg#le#pwbwfqfpjpwbm`f#wlvmgfqdqbgvbwfWkfqf#bqf#wtldqbujwbwjlmbobqf#gfp`qjafgjmwfmwjlmboozpfqufg#bp#wkf`obpp>!kfbgfqlsslpjwjlm#wlevmgbnfmwboozglnjmbwfg#wkfbmg#wkf#lwkfqboojbm`f#tjwktbp#elq`fg#wlqfpsf`wjufoz/bmg#slojwj`bojm#pvsslqw#lesflsof#jm#wkf13wk#`fmwvqz-bmg#svaojpkfgolbg@kbqwafbwwl#vmgfqpwbmgnfnafq#pwbwfpfmujqlmnfmwboejqpw#kboe#le`lvmwqjfp#bmgbq`kjwf`wvqboaf#`lmpjgfqfg`kbqb`wfqjyfg`ofbqJmwfqubobvwklqjwbwjufEfgfqbwjlm#letbp#pv``ffgfgbmg#wkfqf#bqfb#`lmpfrvfm`fwkf#Sqfpjgfmwbopl#jm`ovgfgeqff#plewtbqfpv``fppjlm#legfufolsfg#wkftbp#gfpwqlzfgbtbz#eqln#wkf8\t?,p`qjsw=\t?bowklvdk#wkfzelooltfg#az#bnlqf#sltfqevoqfpvowfg#jm#bVmjufqpjwz#leKltfufq/#nbmzwkf#sqfpjgfmwKltfufq/#plnfjp#wklvdkw#wlvmwjo#wkf#fmgtbp#bmmlvm`fgbqf#jnslqwbmwbopl#jm`ovgfp=?jmsvw#wzsf>wkf#`fmwfq#le#GL#MLW#BOWFQvpfg#wl#qfefqwkfnfp,<plqw>wkbw#kbg#affmwkf#abpjp#elqkbp#gfufolsfgjm#wkf#pvnnfq`lnsbqbwjufozgfp`qjafg#wkfpv`k#bp#wklpfwkf#qfpvowjmdjp#jnslppjaofubqjlvp#lwkfqPlvwk#Beqj`bmkbuf#wkf#pbnffeef`wjufmfppjm#tkj`k#`bpf8#wf{w.bojdm9pwqv`wvqf#bmg8#ab`hdqlvmg9qfdbqgjmd#wkfpvsslqwfg#wkfjp#bopl#hmltmpwzof>!nbqdjmjm`ovgjmd#wkfabkbpb#Nfobzvmlqph#alhn/Iomlqph#mzmlqphpolufm)M(ajmbjmwfqmb`jlmbo`bojej`b`j/_m`lnvmj`b`j/_m`lmpwqv``j/_m!=?gju#`obpp>!gjpbnajdvbwjlmGlnbjmMbnf$/#$bgnjmjpwqbwjlmpjnvowbmflvpozwqbmpslqwbwjlmJmwfqmbwjlmbo#nbqdjm.alwwln9qfpslmpjajojwz?"Xfmgje^..=\t?,=?nfwb#mbnf>!jnsofnfmwbwjlmjmeqbpwqv`wvqfqfsqfpfmwbwjlmalqgfq.alwwln9?,kfbg=\t?algz=>kwws&0B&1E&1E?elqn#nfwklg>!nfwklg>!slpw!#,ebuj`lm-j`l!#~*8\t?,p`qjsw=\t-pfwBwwqjavwf+Bgnjmjpwqbwjlm>#mft#Bqqbz+*8?"Xfmgje^..=\x0e\tgjpsobz9aol`h8Vmelqwvmbwfoz/!=%maps8?,gju=,ebuj`lm-j`l!=>$pwzofpkffw$#jgfmwjej`bwjlm/#elq#f{bnsof/?oj=?b#kqfe>!,bm#bowfqmbwjufbp#b#qfpvow#lesw!=?,p`qjsw=\twzsf>!pvanjw!#\t+evm`wjlm+*#xqf`lnnfmgbwjlmelqn#b`wjlm>!,wqbmpelqnbwjlmqf`lmpwqv`wjlm-pwzof-gjpsobz#B``lqgjmd#wl#kjggfm!#mbnf>!bolmd#tjwk#wkfgl`vnfmw-algz-bssql{jnbwfoz#@lnnvmj`bwjlmpslpw!#b`wjlm>!nfbmjmd#%rvlw8..?"Xfmgje^..=Sqjnf#Njmjpwfq`kbqb`wfqjpwj`?,b=#?b#`obpp>wkf#kjpwlqz#le#lmnlvpflufq>!wkf#dlufqmnfmwkqfe>!kwwsp9,,tbp#lqjdjmbooztbp#jmwqlgv`fg`obppjej`bwjlmqfsqfpfmwbwjufbqf#`lmpjgfqfg?"Xfmgje^..=\t\tgfsfmgp#lm#wkfVmjufqpjwz#le#jm#`lmwqbpw#wl#sob`fklogfq>!jm#wkf#`bpf#lejmwfqmbwjlmbo#`lmpwjwvwjlmbopwzof>!alqgfq.9#evm`wjlm+*#xAf`bvpf#le#wkf.pwqj`w-gwg!=\t?wbaof#`obpp>!b``lnsbmjfg#azb``lvmw#le#wkf?p`qjsw#pq`>!,mbwvqf#le#wkf#wkf#sflsof#jm#jm#bggjwjlm#wlp*8#ip-jg#>#jg!#tjgwk>!233&!qfdbqgjmd#wkf#Qlnbm#@bwkloj`bm#jmgfsfmgfmwelooltjmd#wkf#-dje!#tjgwk>!2wkf#elooltjmd#gjp`qjnjmbwjlmbq`kbfloldj`bosqjnf#njmjpwfq-ip!=?,p`qjsw=`lnajmbwjlm#le#nbqdjmtjgwk>!`qfbwfFofnfmw+t-bwwb`kFufmw+?,b=?,wg=?,wq=pq`>!kwwsp9,,bJm#sbqwj`vobq/#bojdm>!ofew!#@yf`k#Qfsvaoj`Vmjwfg#Hjmdgln`lqqfpslmgfm`f`lm`ovgfg#wkbw-kwno!#wjwof>!+evm`wjlm#+*#x`lnfp#eqln#wkfbssoj`bwjlm#le?psbm#`obpp>!pafojfufg#wl#affnfmw+$p`qjsw$?,b=\t?,oj=\t?ojufqz#gjeefqfmw=?psbm#`obpp>!lswjlm#ubovf>!+bopl#hmltm#bp\n?oj=?b#kqfe>!=?jmsvw#mbnf>!pfsbqbwfg#eqlnqfefqqfg#wl#bp#ubojdm>!wls!=elvmgfq#le#wkfbwwfnswjmd#wl#`bqalm#gjl{jgf\t\t?gju#`obpp>!`obpp>!pfbq`k.,algz=\t?,kwno=lsslqwvmjwz#wl`lnnvmj`bwjlmp?,kfbg=\x0e\t?algz#pwzof>!tjgwk9Wj\rVSmd#Uj\rWkw`kbmdfp#jm#wkfalqgfq.`lolq9 3!#alqgfq>!3!#?,psbm=?,gju=?tbp#gjp`lufqfg!#wzsf>!wf{w!#*8\t?,p`qjsw=\t\tGfsbqwnfmw#le#f``ofpjbpwj`bowkfqf#kbp#affmqfpvowjmd#eqln?,algz=?,kwno=kbp#mfufq#affmwkf#ejqpw#wjnfjm#qfpslmpf#wlbvwlnbwj`booz#?,gju=\t\t?gju#jtbp#`lmpjgfqfgsfq`fmw#le#wkf!#,=?,b=?,gju=`loof`wjlm#le#gfp`fmgfg#eqlnpf`wjlm#le#wkfb``fsw.`kbqpfwwl#af#`lmevpfgnfnafq#le#wkf#sbggjmd.qjdkw9wqbmpobwjlm#lejmwfqsqfwbwjlm#kqfe>$kwws9,,tkfwkfq#lq#mlwWkfqf#bqf#boplwkfqf#bqf#nbmzb#pnboo#mvnafqlwkfq#sbqwp#lejnslppjaof#wl##`obpp>!avwwlmol`bwfg#jm#wkf-#Kltfufq/#wkfbmg#fufmwvboozBw#wkf#fmg#le#af`bvpf#le#jwpqfsqfpfmwp#wkf?elqn#b`wjlm>!#nfwklg>!slpw!jw#jp#slppjaofnlqf#ojhfoz#wlbm#jm`qfbpf#jmkbuf#bopl#affm`lqqfpslmgp#wlbmmlvm`fg#wkbwbojdm>!qjdkw!=nbmz#`lvmwqjfpelq#nbmz#zfbqpfbqojfpw#hmltmaf`bvpf#jw#tbpsw!=?,p`qjsw=\x0e#ubojdm>!wls!#jmkbajwbmwp#leelooltjmd#zfbq\x0e\t?gju#`obpp>!njoojlm#sflsof`lmwqlufqpjbo#`lm`fqmjmd#wkfbqdvf#wkbw#wkfdlufqmnfmw#bmgb#qfefqfm`f#wlwqbmpefqqfg#wlgfp`qjajmd#wkf#pwzof>!`lolq9bowklvdk#wkfqfafpw#hmltm#elqpvanjw!#mbnf>!nvowjsoj`bwjlmnlqf#wkbm#lmf#qf`ldmjwjlm#le@lvm`jo#le#wkffgjwjlm#le#wkf##?nfwb#mbnf>!Fmwfqwbjmnfmw#btbz#eqln#wkf#8nbqdjm.qjdkw9bw#wkf#wjnf#lejmufpwjdbwjlmp`lmmf`wfg#tjwkbmg#nbmz#lwkfqbowklvdk#jw#jpafdjmmjmd#tjwk#?psbm#`obpp>!gfp`fmgbmwp#le?psbm#`obpp>!j#bojdm>!qjdkw!?,kfbg=\t?algz#bpsf`wp#le#wkfkbp#pjm`f#affmFvqlsfbm#Vmjlmqfnjmjp`fmw#lenlqf#gjeej`vowUj`f#Sqfpjgfmw`lnslpjwjlm#lesbppfg#wkqlvdknlqf#jnslqwbmwelmw.pjyf922s{f{sobmbwjlm#lewkf#`lm`fsw#letqjwwfm#jm#wkf\n?psbm#`obpp>!jp#lmf#le#wkf#qfpfnaobm`f#wllm#wkf#dqlvmgptkj`k#`lmwbjmpjm`ovgjmd#wkf#gfejmfg#az#wkfsvaoj`bwjlm#lenfbmp#wkbw#wkflvwpjgf#le#wkfpvsslqw#le#wkf?jmsvw#`obpp>!?psbm#`obpp>!w+Nbwk-qbmgln+*nlpw#sqlnjmfmwgfp`qjswjlm#le@lmpwbmwjmlsoftfqf#svaojpkfg?gju#`obpp>!pfbssfbqp#jm#wkf2!#kfjdkw>!2!#nlpw#jnslqwbmwtkj`k#jm`ovgfptkj`k#kbg#affmgfpwqv`wjlm#lewkf#slsvobwjlm\t\n?gju#`obpp>!slppjajojwz#leplnfwjnfp#vpfgbssfbq#wl#kbufpv``fpp#le#wkfjmwfmgfg#wl#afsqfpfmw#jm#wkfpwzof>!`ofbq9a\x0e\t?,p`qjsw=\x0e\t?tbp#elvmgfg#jmjmwfqujft#tjwk\\jg!#`lmwfmw>!`bsjwbo#le#wkf\x0e\t?ojmh#qfo>!pqfofbpf#le#wkfsljmw#lvw#wkbw{NOKwwsQfrvfpwbmg#pvapfrvfmwpf`lmg#obqdfpwufqz#jnslqwbmwpsf`jej`bwjlmppvqeb`f#le#wkfbssojfg#wl#wkfelqfjdm#sloj`z\\pfwGlnbjmMbnffpwbaojpkfg#jmjp#afojfufg#wlJm#bggjwjlm#wlnfbmjmd#le#wkfjp#mbnfg#bewfqwl#sqlwf`w#wkfjp#qfsqfpfmwfgGf`obqbwjlm#lenlqf#feej`jfmw@obppjej`bwjlmlwkfq#elqnp#lekf#qfwvqmfg#wl?psbm#`obpp>!`sfqelqnbm`f#le+evm`wjlm+*#x\x0eje#bmg#lmoz#jeqfdjlmp#le#wkfofbgjmd#wl#wkfqfobwjlmp#tjwkVmjwfg#Mbwjlmppwzof>!kfjdkw9lwkfq#wkbm#wkfzsf!#`lmwfmw>!Bppl`jbwjlm#le\t?,kfbg=\t?algzol`bwfg#lm#wkfjp#qfefqqfg#wl+jm`ovgjmd#wkf`lm`fmwqbwjlmpwkf#jmgjujgvbobnlmd#wkf#nlpwwkbm#bmz#lwkfq,=\t?ojmh#qfo>!#qfwvqm#ebopf8wkf#svqslpf#lewkf#bajojwz#wl8`lolq9 eee~\t-\t?psbm#`obpp>!wkf#pvaif`w#legfejmjwjlmp#le=\x0e\t?ojmh#qfo>!`objn#wkbw#wkfkbuf#gfufolsfg?wbaof#tjgwk>!`fofaqbwjlm#leElooltjmd#wkf#wl#gjpwjmdvjpk?psbm#`obpp>!awbhfp#sob`f#jmvmgfq#wkf#mbnfmlwfg#wkbw#wkf=?"Xfmgje^..=\tpwzof>!nbqdjm.jmpwfbg#le#wkfjmwqlgv`fg#wkfwkf#sql`fpp#lejm`qfbpjmd#wkfgjeefqfm`fp#jmfpwjnbwfg#wkbwfpsf`jbooz#wkf,gju=?gju#jg>!tbp#fufmwvboozwkqlvdklvw#kjpwkf#gjeefqfm`fplnfwkjmd#wkbwpsbm=?,psbm=?,pjdmjej`bmwoz#=?,p`qjsw=\x0e\t\x0e\tfmujqlmnfmwbo#wl#sqfufmw#wkfkbuf#affm#vpfgfpsf`jbooz#elqvmgfqpwbmg#wkfjp#fppfmwjbooztfqf#wkf#ejqpwjp#wkf#obqdfpwkbuf#affm#nbgf!#pq`>!kwws9,,jmwfqsqfwfg#bppf`lmg#kboe#le`qloojmd>!ml!#jp#`lnslpfg#leJJ/#Kloz#Qlnbmjp#f{sf`wfg#wlkbuf#wkfjq#ltmgfejmfg#bp#wkfwqbgjwjlmbooz#kbuf#gjeefqfmwbqf#lewfm#vpfgwl#fmpvqf#wkbwbdqffnfmw#tjwk`lmwbjmjmd#wkfbqf#eqfrvfmwozjmelqnbwjlm#lmf{bnsof#jp#wkfqfpvowjmd#jm#b?,b=?,oj=?,vo=#`obpp>!ellwfqbmg#fpsf`jboozwzsf>!avwwlm!#?,psbm=?,psbm=tkj`k#jm`ovgfg=\t?nfwb#mbnf>!`lmpjgfqfg#wkf`bqqjfg#lvw#azKltfufq/#jw#jpaf`bnf#sbqw#lejm#qfobwjlm#wlslsvobq#jm#wkfwkf#`bsjwbo#letbp#leej`jbooztkj`k#kbp#affmwkf#Kjpwlqz#lebowfqmbwjuf#wlgjeefqfmw#eqlnwl#pvsslqw#wkfpvddfpwfg#wkbwjm#wkf#sql`fpp##?gju#`obpp>!wkf#elvmgbwjlmaf`bvpf#le#kjp`lm`fqmfg#tjwkwkf#vmjufqpjwzlsslpfg#wl#wkfwkf#`lmwf{w#le?psbm#`obpp>!swf{w!#mbnf>!r!\n\n?gju#`obpp>!wkf#p`jfmwjej`qfsqfpfmwfg#aznbwkfnbwj`jbmpfof`wfg#az#wkfwkbw#kbuf#affm=?gju#`obpp>!`gju#jg>!kfbgfqjm#sbqwj`vobq/`lmufqwfg#jmwl*8\t?,p`qjsw=\t?skjolplskj`bo#pqsphlkqubwphjwj\rVSmd#Uj\rWkw<L=o=m=m<V<T<U=l=o=m=m<V<T<Ujmufpwjdb`j/_msbqwj`jsb`j/_m<V<R=n<R=l=g<Y<R<]<W<\\=m=n<T<V<R=n<R=l=g<U=k<Y<W<R<^<Y<V=m<T=m=n<Y<P=g<q<R<^<R=m=n<T<V<R=n<R=l=g=i<R<]<W<\\=m=n=`<^=l<Y<P<Y<Q<T<V<R=n<R=l<\\=c=m<Y<_<R<X<Q=c=m<V<\\=k<\\=n=`<Q<R<^<R=m=n<T<O<V=l<\\<T<Q=g<^<R<S=l<R=m=g<V<R=n<R=l<R<U=m<X<Y<W<\\=n=`<S<R<P<R=e=`=b=m=l<Y<X=m=n<^<R<]=l<\\<[<R<P=m=n<R=l<R<Q=g=o=k<\\=m=n<T<Y=n<Y=k<Y<Q<T<Y<\x7f<W<\\<^<Q<\\=c<T=m=n<R=l<T<T=m<T=m=n<Y<P<\\=l<Y=d<Y<Q<T=c<M<V<\\=k<\\=n=`<S<R=a=n<R<P=o=m<W<Y<X=o<Y=n=m<V<\\<[<\\=n=`=n<R<^<\\=l<R<^<V<R<Q<Y=k<Q<R=l<Y=d<Y<Q<T<Y<V<R=n<R=l<R<Y<R=l<_<\\<Q<R<^<V<R=n<R=l<R<P<L<Y<V<W<\\<P<\\4K5h5i5j4F4C5e5i5j4F4C5f4K4F4K5h5i5d4Z5d4U4K5h4D4]4K5i4@4K5h5i5d4K5n4U4K5h4]4_4K4J5h5i4X4K4]5o4K4F4K5h4O4U4Z4K4M4K5h4]5f4K4Z4E4K5h4F4Y5i5f5i4K5h4K4U4Z4K4M4K5h5j4F4K4J4@4K5h4O5h4U4K4D4K5h4F4_4@5f5h4K5h4O5n4_4K5i4K5h4Z4V4[4K4F4K5h5m5f4C5f5d4K5h4F4]4A5f4D4K5h4@4C5f4C4E4K5h4F4U5h5f5i4K5h4O4B4D4K4]4K5h4K5m5h4K5i4K5h4O5m5h4K5i4K5h4F4K4]5f4B4K5h4F5n5j5f4E4K5h4K5h4U4K4D4K5h4B5d4K4[4]4K5h5i4@4F5i4U4K5h4C5f5o5d4]4K5h4_5f4K4A4E4U4D4C4K5h5h5k4K5h4F4]4D5f4E4K5h4]5d4K4D4[4K5h4O4C4D5f4E4K5h4K4B4D4K4]4K5h5i4F4A4C4E4K5h4K4V4K5j5f`vqplq9sljmwfq8?,wjwof=\t?nfwb#!#kqfe>!kwws9,,!=?psbm#`obpp>!nfnafqp#le#wkf#tjmglt-ol`bwjlmufqwj`bo.bojdm9,b=#\x7f#?b#kqfe>!?"gl`wzsf#kwno=nfgjb>!p`qffm!#?lswjlm#ubovf>!ebuj`lm-j`l!#,=\t\n\n?gju#`obpp>!`kbqb`wfqjpwj`p!#nfwklg>!dfw!#,algz=\t?,kwno=\tpklqw`vw#j`lm!#gl`vnfmw-tqjwf+sbggjmd.alwwln9qfsqfpfmwbwjufppvanjw!#ubovf>!bojdm>!`fmwfq!#wkqlvdklvw#wkf#p`jfm`f#ej`wjlm\t##?gju#`obpp>!pvanjw!#`obpp>!lmf#le#wkf#nlpw#ubojdm>!wls!=?tbp#fpwbaojpkfg*8\x0e\t?,p`qjsw=\x0e\tqfwvqm#ebopf8!=*-pwzof-gjpsobzaf`bvpf#le#wkf#gl`vnfmw-`llhjf?elqn#b`wjlm>!,~algzxnbqdjm938Fm`z`olsfgjb#leufqpjlm#le#wkf#-`qfbwfFofnfmw+mbnf!#`lmwfmw>!?,gju=\t?,gju=\t\tbgnjmjpwqbwjuf#?,algz=\t?,kwno=kjpwlqz#le#wkf#!=?jmsvw#wzsf>!slqwjlm#le#wkf#bp#sbqw#le#wkf#%maps8?b#kqfe>!lwkfq#`lvmwqjfp!=\t?gju#`obpp>!?,psbm=?,psbm=?Jm#lwkfq#tlqgp/gjpsobz9#aol`h8`lmwqlo#le#wkf#jmwqlgv`wjlm#le,=\t?nfwb#mbnf>!bp#tfoo#bp#wkf#jm#qf`fmw#zfbqp\x0e\t\n?gju#`obpp>!?,gju=\t\n?,gju=\tjmpsjqfg#az#wkfwkf#fmg#le#wkf#`lnsbwjaof#tjwkaf`bnf#hmltm#bp#pwzof>!nbqdjm9-ip!=?,p`qjsw=?#Jmwfqmbwjlmbo#wkfqf#kbuf#affmDfqnbm#obmdvbdf#pwzof>!`lolq9 @lnnvmjpw#Sbqwz`lmpjpwfmw#tjwkalqgfq>!3!#`foo#nbqdjmkfjdkw>!wkf#nbilqjwz#le!#bojdm>!`fmwfqqfobwfg#wl#wkf#nbmz#gjeefqfmw#Lqwklgl{#@kvq`kpjnjobq#wl#wkf#,=\t?ojmh#qfo>!ptbp#lmf#le#wkf#vmwjo#kjp#gfbwk~*+*8\t?,p`qjsw=lwkfq#obmdvbdfp`lnsbqfg#wl#wkfslqwjlmp#le#wkfwkf#Mfwkfqobmgpwkf#nlpw#`lnnlmab`hdqlvmg9vqo+bqdvfg#wkbw#wkfp`qloojmd>!ml!#jm`ovgfg#jm#wkfMlqwk#Bnfqj`bm#wkf#mbnf#le#wkfjmwfqsqfwbwjlmpwkf#wqbgjwjlmbogfufolsnfmw#le#eqfrvfmwoz#vpfgb#`loof`wjlm#leufqz#pjnjobq#wlpvqqlvmgjmd#wkff{bnsof#le#wkjpbojdm>!`fmwfq!=tlvog#kbuf#affmjnbdf\\`bswjlm#>bwwb`kfg#wl#wkfpvddfpwjmd#wkbwjm#wkf#elqn#le#jmuloufg#jm#wkfjp#gfqjufg#eqlnmbnfg#bewfq#wkfJmwqlgv`wjlm#wlqfpwqj`wjlmp#lm#pwzof>!tjgwk9#`bm#af#vpfg#wl#wkf#`qfbwjlm#lenlpw#jnslqwbmw#jmelqnbwjlm#bmgqfpvowfg#jm#wkf`loobspf#le#wkfWkjp#nfbmp#wkbwfofnfmwp#le#wkftbp#qfsob`fg#azbmbozpjp#le#wkfjmpsjqbwjlm#elqqfdbqgfg#bp#wkfnlpw#pv``fppevohmltm#bp#%rvlw8b#`lnsqfkfmpjufKjpwlqz#le#wkf#tfqf#`lmpjgfqfgqfwvqmfg#wl#wkfbqf#qfefqqfg#wlVmplvq`fg#jnbdf=\t\n?gju#`obpp>!`lmpjpwp#le#wkfpwlsSqlsbdbwjlmjmwfqfpw#jm#wkfbubjobajojwz#lebssfbqp#wl#kbuffof`wqlnbdmfwj`fmbaofPfquj`fp+evm`wjlm#le#wkfJw#jp#jnslqwbmw?,p`qjsw=?,gju=evm`wjlm+*xubq#qfobwjuf#wl#wkfbp#b#qfpvow#le#wkf#slpjwjlm#leElq#f{bnsof/#jm#nfwklg>!slpw!#tbp#elooltfg#az%bns8ngbpk8#wkfwkf#bssoj`bwjlmip!=?,p`qjsw=\x0e\tvo=?,gju=?,gju=bewfq#wkf#gfbwktjwk#qfpsf`w#wlpwzof>!sbggjmd9jp#sbqwj`vobqozgjpsobz9jmojmf8#wzsf>!pvanjw!#jp#gjujgfg#jmwl\bTA\nzk#+\vBl\bQ\x7f*qfpslmpbajojgbgbgnjmjpwqb`j/_mjmwfqmb`jlmbofp`lqqfpslmgjfmwf\fHe\fHF\fHC\fIg\fH{\fHF\fIn\fH\\\fIa\fHY\fHU\fHB\fHR\fH\\\fIk\fH^\fIg\fH{\fIg\fHn\fHv\fIm\fHD\fHR\fHY\fH^\fIk\fHy\fHS\fHD\fHT\fH\\\fHy\fHR\fH\\\fHF\fIm\fH^\fHS\fHT\fHz\fIg\fHp\fIk\fHn\fHv\fHR\fHU\fHS\fHc\fHA\fIk\fHp\fIk\fHn\fHZ\fHR\fHB\fHS\fH^\fHU\fHB\fHR\fH\\\fIl\fHp\fHR\fH{\fH\\\fHO\fH@\fHD\fHR\fHD\fIk\fHy\fIm\fHB\fHR\fH\\\fH@\fIa\fH^\fIe\fH{\fHB\fHR\fH^\fHS\fHy\fHB\fHU\fHS\fH^\fHR\fHF\fIo\fH[\fIa\fHL\fH@\fHN\fHP\fHH\fIk\fHA\fHR\fHp\fHF\fHR\fHy\fIa\fH^\fHS\fHy\fHs\fIa\fH\\\fIk\fHD\fHz\fHS\fH^\fHR\fHG\fHJ\fI`\fH\\\fHR\fHD\fHB\fHR\fHB\fH^\fIk\fHB\fHH\fHJ\fHR\fHD\fH@\fHR\fHp\fHR\fH\\\fHY\fHS\fHy\fHR\fHT\fHy\fIa\fHC\fIg\fHn\fHv\fHR\fHU\fHH\fIk\fHF\fHU\fIm\fHm\fHv\fH@\fHH\fHR\fHC\fHR\fHT\fHn\fHY\fHR\fHJ\fHJ\fIk\fHz\fHD\fIk\fHF\fHS\fHw\fH^\fIk\fHY\fHS\fHZ\fIk\fH[\fH\\\fHR\fHp\fIa\fHC\fHe\fHH\fIa\fHH\fH\\\fHB\fIm\fHn\fH@\fHd\fHJ\fIg\fHD\fIg\fHn\fHe\fHF\fHy\fH\\\fHO\fHF\fHN\fHP\fIk\fHn\fHT\fIa\fHI\fHS\fHH\fHG\fHS\fH^\fIa\fHB\fHB\fIm\fHz\fIa\fHC\fHi\fHv\fIa\fHw\fHR\fHw\fIn\fHs\fHH\fIl\fHT\fHn\fH{\fIl\fHH\fHp\fHR\fHc\fH{\fHR\fHY\fHS\fHA\fHR\fH{\fHt\fHO\fIa\fHs\fIk\fHJ\fIn\fHT\fH\\\fIk\fHJ\fHS\fHD\fIg\fHn\fHU\fHH\fIa\fHC\fHR\fHT\fIk\fHy\fIa\fHT\fH{\fHR\fHn\fHK\fIl\fHY\fHS\fHZ\fIa\fHY\fH\\\fHR\fHH\fIk\fHn\fHJ\fId\fHs\fIa\fHT\fHD\fHy\fIa\fHZ\fHR\fHT\fHR\fHB\fHD\fIk\fHi\fHJ\fHR\fH^\fHH\fH@\fHS\fHp\fH^\fIl\fHF\fIm\fH\\\fIn\fH[\fHU\fHS\fHn\fHJ\fIl\fHB\fHS\fHH\fIa\fH\\\fHy\fHY\fHS\fHH\fHR\fH\\\fIm\fHF\fHC\fIk\fHT\fIa\fHI\fHR\fHD\fHy\fH\\\fIg\fHM\fHP\fHB\fIm\fHy\fIa\fHH\fHC\fIg\fHp\fHD\fHR\fHy\fIo\fHF\fHC\fHR\fHF\fIg\fHT\fIa\fHs\fHt\fH\\\fIk\fH^\fIn\fHy\fHR\fH\\\fIa\fHC\fHY\fHS\fHv\fHR\fH\\\fHT\fIn\fHv\fHD\fHR\fHB\fIn\fH^\fIa\fHC\fHJ\fIk\fHz\fIk\fHn\fHU\fHB\fIk\fHZ\fHR\fHT\fIa\fHy\fIn\fH^\fHB\fId\fHn\fHD\fIk\fHH\fId\fHC\fHR\fH\\\fHp\fHS\fHT\fHy\fIkqpp({no!#wjwof>!.wzsf!#`lmwfmw>!wjwof!#`lmwfmw>!bw#wkf#pbnf#wjnf-ip!=?,p`qjsw=\t?!#nfwklg>!slpw!#?,psbm=?,b=?,oj=ufqwj`bo.bojdm9w,irvfqz-njm-ip!=-`oj`h+evm`wjlm+#pwzof>!sbggjmd.~*+*8\t?,p`qjsw=\t?,psbm=?b#kqfe>!?b#kqfe>!kwws9,,*8#qfwvqm#ebopf8wf{w.gf`lqbwjlm9#p`qloojmd>!ml!#alqgfq.`loobspf9bppl`jbwfg#tjwk#Abkbpb#JmglmfpjbFmdojpk#obmdvbdf?wf{w#{no9psb`f>-dje!#alqgfq>!3!?,algz=\t?,kwno=\tlufqeolt9kjggfm8jnd#pq`>!kwws9,,bggFufmwOjpwfmfqqfpslmpjaof#elq#p-ip!=?,p`qjsw=\t,ebuj`lm-j`l!#,=lsfqbwjmd#pzpwfn!#pwzof>!tjgwk92wbqdfw>!\\aobmh!=Pwbwf#Vmjufqpjwzwf{w.bojdm9ofew8\tgl`vnfmw-tqjwf+/#jm`ovgjmd#wkf#bqlvmg#wkf#tlqog*8\x0e\t?,p`qjsw=\x0e\t?!#pwzof>!kfjdkw98lufqeolt9kjggfmnlqf#jmelqnbwjlmbm#jmwfqmbwjlmbob#nfnafq#le#wkf#lmf#le#wkf#ejqpw`bm#af#elvmg#jm#?,gju=\t\n\n?,gju=\tgjpsobz9#mlmf8!=!#,=\t?ojmh#qfo>!\t##+evm`wjlm+*#xwkf#26wk#`fmwvqz-sqfufmwGfebvow+obqdf#mvnafq#le#Azybmwjmf#Fnsjqf-isd\x7fwkvna\x7fofew\x7fubpw#nbilqjwz#lenbilqjwz#le#wkf##bojdm>!`fmwfq!=Vmjufqpjwz#Sqfppglnjmbwfg#az#wkfPf`lmg#Tlqog#Tbqgjpwqjavwjlm#le#pwzof>!slpjwjlm9wkf#qfpw#le#wkf#`kbqb`wfqjyfg#az#qfo>!mleloolt!=gfqjufp#eqln#wkfqbwkfq#wkbm#wkf#b#`lnajmbwjlm#lepwzof>!tjgwk9233Fmdojpk.psfbhjmd`lnsvwfq#p`jfm`falqgfq>!3!#bow>!wkf#f{jpwfm`f#leGfnl`qbwj`#Sbqwz!#pwzof>!nbqdjm.Elq#wkjp#qfbplm/-ip!=?,p`qjsw=\t\npAzWbdMbnf+p*X3^ip!=?,p`qjsw=\x0e\t?-ip!=?,p`qjsw=\x0e\tojmh#qfo>!j`lm!#$#bow>$$#`obpp>$elqnbwjlm#le#wkfufqpjlmp#le#wkf#?,b=?,gju=?,gju=,sbdf=\t##?sbdf=\t?gju#`obpp>!`lmwaf`bnf#wkf#ejqpwabkbpb#Jmglmfpjbfmdojpk#+pjnsof*"y"W"W"["Q"U"V"@=i=l<^<\\=n=m<V<T<V<R<P<S<\\<Q<T<T=c<^<W=c<Y=n=m=c<x<R<]<\\<^<T=n=`=k<Y<W<R<^<Y<V<\\=l<\\<[<^<T=n<T=c<t<Q=n<Y=l<Q<Y=n<r=n<^<Y=n<T=n=`<Q<\\<S=l<T<P<Y=l<T<Q=n<Y=l<Q<Y=n<V<R=n<R=l<R<_<R=m=n=l<\\<Q<T=j=g<V<\\=k<Y=m=n<^<Y=o=m<W<R<^<T=c=i<S=l<R<]<W<Y<P=g<S<R<W=o=k<T=n=`=c<^<W=c=b=n=m=c<Q<\\<T<]<R<W<Y<Y<V<R<P<S<\\<Q<T=c<^<Q<T<P<\\<Q<T<Y=m=l<Y<X=m=n<^<\\4K5h5i5d4K4Z5f4U4K5h4]4J5f4_5f4E4K5h4K5j4F5n4K5h5i4X4K4]5o4K4F5o4K5h4_5f4K4]4K4F4K5h5i5o4F5d4D4E4K5h4_4U5d4C5f4E4K4A4Y4K4J5f4K4F4K5h4U4K5h5i5f4E4K5h4Y5d4F5f4K4F4K5h4K5j4F4]5j4F4K5h4F4Y4K5i5f5i4K5h4I4_5h4K5i5f4K5h5i4X4K4]5o4E4K5h5i4]4J5f4K4Fqlalwp!#`lmwfmw>!?gju#jg>!ellwfq!=wkf#Vmjwfg#Pwbwfp?jnd#pq`>!kwws9,,-isd\x7fqjdkw\x7fwkvna\x7f-ip!=?,p`qjsw=\x0e\t?ol`bwjlm-sqlwl`loeqbnfalqgfq>!3!#p!#,=\t?nfwb#mbnf>!?,b=?,gju=?,gju=?elmw.tfjdkw9alog8%rvlw8#bmg#%rvlw8gfsfmgjmd#lm#wkf#nbqdjm938sbggjmd9!#qfo>!mleloolt!#Sqfpjgfmw#le#wkf#wtfmwjfwk#`fmwvqzfujpjlm=\t##?,sbdfJmwfqmfw#F{solqfqb-bpzm`#>#wqvf8\x0e\tjmelqnbwjlm#balvw?gju#jg>!kfbgfq!=!#b`wjlm>!kwws9,,?b#kqfe>!kwwsp9,,?gju#jg>!`lmwfmw!?,gju=\x0e\t?,gju=\x0e\t?gfqjufg#eqln#wkf#?jnd#pq`>$kwws9,,b``lqgjmd#wl#wkf#\t?,algz=\t?,kwno=\tpwzof>!elmw.pjyf9p`qjsw#obmdvbdf>!Bqjbo/#Kfoufwj`b/?,b=?psbm#`obpp>!?,p`qjsw=?p`qjsw#slojwj`bo#sbqwjfpwg=?,wq=?,wbaof=?kqfe>!kwws9,,ttt-jmwfqsqfwbwjlm#leqfo>!pwzofpkffw!#gl`vnfmw-tqjwf+$?`kbqpfw>!vwe.;!=\tafdjmmjmd#le#wkf#qfufbofg#wkbw#wkfwfofujpjlm#pfqjfp!#qfo>!mleloolt!=#wbqdfw>!\\aobmh!=`objnjmd#wkbw#wkfkwws&0B&1E&1Ettt-nbmjefpwbwjlmp#leSqjnf#Njmjpwfq#lejmeovfm`fg#az#wkf`obpp>!`ofbqej{!=,gju=\x0e\t?,gju=\x0e\t\x0e\twkqff.gjnfmpjlmbo@kvq`k#le#Fmdobmgle#Mlqwk#@bqlojmbprvbqf#hjolnfwqfp-bggFufmwOjpwfmfqgjpwjm`w#eqln#wkf`lnnlmoz#hmltm#bpSklmfwj`#Boskbafwgf`obqfg#wkbw#wkf`lmwqloofg#az#wkfAfmibnjm#Eqbmhojmqlof.sobzjmd#dbnfwkf#Vmjufqpjwz#lejm#Tfpwfqm#Fvqlsfsfqplmbo#`lnsvwfqSqlif`w#Dvwfmafqdqfdbqgofpp#le#wkfkbp#affm#sqlslpfgwldfwkfq#tjwk#wkf=?,oj=?oj#`obpp>!jm#plnf#`lvmwqjfpnjm-ip!=?,p`qjsw=le#wkf#slsvobwjlmleej`jbo#obmdvbdf?jnd#pq`>!jnbdfp,jgfmwjejfg#az#wkfmbwvqbo#qfplvq`fp`obppjej`bwjlm#le`bm#af#`lmpjgfqfgrvbmwvn#nf`kbmj`pMfufqwkfofpp/#wkfnjoojlm#zfbqp#bdl?,algz=\x0e\t?,kwno=\x0e"y"W"W"["Q"U"V"@\twbhf#bgubmwbdf#lebmg/#b``lqgjmd#wlbwwqjavwfg#wl#wkfNj`qlplew#Tjmgltpwkf#ejqpw#`fmwvqzvmgfq#wkf#`lmwqlogju#`obpp>!kfbgfqpklqwoz#bewfq#wkfmlwbaof#f{`fswjlmwfmp#le#wklvpbmgppfufqbo#gjeefqfmwbqlvmg#wkf#tlqog-qfb`kjmd#njojwbqzjplobwfg#eqln#wkflsslpjwjlm#wl#wkfwkf#Log#WfpwbnfmwBeqj`bm#Bnfqj`bmpjmpfqwfg#jmwl#wkfpfsbqbwf#eqln#wkfnfwqlslojwbm#bqfbnbhfp#jw#slppjaofb`hmltofgdfg#wkbwbqdvbaoz#wkf#nlpwwzsf>!wf{w,`pp!=\twkf#JmwfqmbwjlmboB``lqgjmd#wl#wkf#sf>!wf{w,`pp!#,=\t`ljm`jgf#tjwk#wkfwtl.wkjqgp#le#wkfGvqjmd#wkjp#wjnf/gvqjmd#wkf#sfqjlgbmmlvm`fg#wkbw#kfwkf#jmwfqmbwjlmbobmg#nlqf#qf`fmwozafojfufg#wkbw#wkf`lmp`jlvpmfpp#bmgelqnfqoz#hmltm#bppvqqlvmgfg#az#wkfejqpw#bssfbqfg#jml``bpjlmbooz#vpfgslpjwjlm9baplovwf8!#wbqdfw>!\\aobmh!#slpjwjlm9qfobwjuf8wf{w.bojdm9`fmwfq8ib{,ojap,irvfqz,2-ab`hdqlvmg.`lolq9 wzsf>!bssoj`bwjlm,bmdvbdf!#`lmwfmw>!?nfwb#kwws.frvju>!Sqjub`z#Sloj`z?,b=f+!&0@p`qjsw#pq`>$!#wbqdfw>!\\aobmh!=Lm#wkf#lwkfq#kbmg/-isd\x7fwkvna\x7fqjdkw\x7f1?,gju=?gju#`obpp>!?gju#pwzof>!eolbw9mjmfwffmwk#`fmwvqz?,algz=\x0e\t?,kwno=\x0e\t?jnd#pq`>!kwws9,,p8wf{w.bojdm9`fmwfqelmw.tfjdkw9#alog8#B``lqgjmd#wl#wkf#gjeefqfm`f#afwtffm!#eqbnfalqgfq>!3!#!#pwzof>!slpjwjlm9ojmh#kqfe>!kwws9,,kwno7,ollpf-gwg!=\tgvqjmd#wkjp#sfqjlg?,wg=?,wq=?,wbaof=`olpfoz#qfobwfg#wlelq#wkf#ejqpw#wjnf8elmw.tfjdkw9alog8jmsvw#wzsf>!wf{w!#?psbm#pwzof>!elmw.lmqfbgzpwbwf`kbmdf\n?gju#`obpp>!`ofbqgl`vnfmw-ol`bwjlm-#Elq#f{bnsof/#wkf#b#tjgf#ubqjfwz#le#?"GL@WZSF#kwno=\x0e\t?%maps8%maps8%maps8!=?b#kqfe>!kwws9,,pwzof>!eolbw9ofew8`lm`fqmfg#tjwk#wkf>kwws&0B&1E&1Ettt-jm#slsvobq#`vowvqfwzsf>!wf{w,`pp!#,=jw#jp#slppjaof#wl#Kbqubqg#Vmjufqpjwzwzofpkffw!#kqfe>!,wkf#nbjm#`kbqb`wfqL{elqg#Vmjufqpjwz##mbnf>!hfztlqgp!#`pwzof>!wf{w.bojdm9wkf#Vmjwfg#Hjmdglnefgfqbo#dlufqmnfmw?gju#pwzof>!nbqdjm#gfsfmgjmd#lm#wkf#gfp`qjswjlm#le#wkf?gju#`obpp>!kfbgfq-njm-ip!=?,p`qjsw=gfpwqv`wjlm#le#wkfpojdkwoz#gjeefqfmwjm#b``lqgbm`f#tjwkwfof`lnnvmj`bwjlmpjmgj`bwfp#wkbw#wkfpklqwoz#wkfqfbewfqfpsf`jbooz#jm#wkf#Fvqlsfbm#`lvmwqjfpKltfufq/#wkfqf#bqfpq`>!kwws9,,pwbwj`pvddfpwfg#wkbw#wkf!#pq`>!kwws9,,ttt-b#obqdf#mvnafq#le#Wfof`lnnvmj`bwjlmp!#qfo>!mleloolt!#wKloz#Qlnbm#Fnsfqlqbonlpw#f{`ovpjufoz!#alqgfq>!3!#bow>!Pf`qfwbqz#le#Pwbwf`vonjmbwjmd#jm#wkf@JB#Tlqog#Eb`wallhwkf#nlpw#jnslqwbmwbmmjufqpbqz#le#wkfpwzof>!ab`hdqlvmg.?oj=?fn=?b#kqfe>!,wkf#Bwobmwj`#L`fbmpwqj`woz#psfbhjmd/pklqwoz#afelqf#wkfgjeefqfmw#wzsfp#lewkf#Lwwlnbm#Fnsjqf=?jnd#pq`>!kwws9,,Bm#Jmwqlgv`wjlm#wl`lmpfrvfm`f#le#wkfgfsbqwvqf#eqln#wkf@lmefgfqbwf#Pwbwfpjmgjdfmlvp#sflsofpSql`ffgjmdp#le#wkfjmelqnbwjlm#lm#wkfwkflqjfp#kbuf#affmjmuloufnfmw#jm#wkfgjujgfg#jmwl#wkqffbgib`fmw#`lvmwqjfpjp#qfpslmpjaof#elqgjpplovwjlm#le#wkf`loobalqbwjlm#tjwktjgfoz#qfdbqgfg#bpkjp#`lmwfnslqbqjfpelvmgjmd#nfnafq#leGlnjmj`bm#Qfsvaoj`dfmfqbooz#b``fswfgwkf#slppjajojwz#lebqf#bopl#bubjobaofvmgfq#`lmpwqv`wjlmqfpwlqbwjlm#le#wkfwkf#dfmfqbo#svaoj`jp#bonlpw#fmwjqfozsbppfp#wkqlvdk#wkfkbp#affm#pvddfpwfg`lnsvwfq#bmg#ujgflDfqnbmj`#obmdvbdfp#b``lqgjmd#wl#wkf#gjeefqfmw#eqln#wkfpklqwoz#bewfqtbqgpkqfe>!kwwsp9,,ttt-qf`fmw#gfufolsnfmwAlbqg#le#Gjqf`wlqp?gju#`obpp>!pfbq`k\x7f#?b#kqfe>!kwws9,,Jm#sbqwj`vobq/#wkfNvowjsof#ellwmlwfplq#lwkfq#pvapwbm`fwklvpbmgp#le#zfbqpwqbmpobwjlm#le#wkf?,gju=\x0e\t?,gju=\x0e\t\x0e\t?b#kqfe>!jmgf{-skstbp#fpwbaojpkfg#jmnjm-ip!=?,p`qjsw=\tsbqwj`jsbwf#jm#wkfb#pwqlmd#jmeovfm`fpwzof>!nbqdjm.wls9qfsqfpfmwfg#az#wkfdqbgvbwfg#eqln#wkfWqbgjwjlmbooz/#wkfFofnfmw+!p`qjsw!*8Kltfufq/#pjm`f#wkf,gju=\t?,gju=\t?gju#ofew8#nbqdjm.ofew9sqlwf`wjlm#bdbjmpw38#ufqwj`bo.bojdm9Vmelqwvmbwfoz/#wkfwzsf>!jnbdf,{.j`lm,gju=\t?gju#`obpp>!#`obpp>!`ofbqej{!=?gju#`obpp>!ellwfq\n\n?,gju=\t\n\n?,gju=\twkf#nlwjlm#sj`wvqf<}=f<W<_<\\=l=m<V<T<]=f<W<_<\\=l=m<V<T<H<Y<X<Y=l<\\=j<T<T<Q<Y=m<V<R<W=`<V<R=m<R<R<]=e<Y<Q<T<Y=m<R<R<]=e<Y<Q<T=c<S=l<R<_=l<\\<P<P=g<r=n<S=l<\\<^<T=n=`<]<Y=m<S<W<\\=n<Q<R<P<\\=n<Y=l<T<\\<W=g<S<R<[<^<R<W=c<Y=n<S<R=m<W<Y<X<Q<T<Y=l<\\<[<W<T=k<Q=g=i<S=l<R<X=o<V=j<T<T<S=l<R<_=l<\\<P<P<\\<S<R<W<Q<R=m=n=`=b<Q<\\=i<R<X<T=n=m=c<T<[<]=l<\\<Q<Q<R<Y<Q<\\=m<Y<W<Y<Q<T=c<T<[<P<Y<Q<Y<Q<T=c<V<\\=n<Y<_<R=l<T<T<|<W<Y<V=m<\\<Q<X=l\fHJ\fIa\fHY\fHR\fH\\\fHR\fHB\fId\fHD\fIm\fHi\fH^\fHF\fIa\fH\\\fHJ\fHR\fHD\fHA\fHR\fH\\\fHH\fIl\fHC\fHi\fHD\fIm\fHJ\fIk\fHZ\fHU\fHS\fHD\fIa\fHJ\fIl\fHk\fHn\fHM\fHS\fHC\fHR\fHJ\fHS\fH^\fIa\fH^\fIl\fHi\fHK\fHS\fHy\fHR\fH\\\fHY\fIl\fHM\fHS\fHC\fIg\fHv\fHS\fHs\fIa\fHL\fIk\fHT\fHB\fHR\fHv\fHR\fH\\\fHp\fHn\fHy\fIa\fHZ\fHD\fHJ\fIm\fHD\fHS\fHC\fHR\fHF\fIa\fH\\\fHC\fIg\fH{\fHi\fHD\fIm\fHT\fHR\fH\\\fH}\fHD\fH^\fHR\fHk\fHD\fHF\fHR\fH\\\fIa\fHs\fIl\fHZ\fH\\\fIa\fHH\fIg\fHn\fH^\fIg\fHy\fHT\fHA\fHR\fHG\fHP\fIa\fH^\fId\fHZ\fHZ\fH\\\fIa\fHH\fIk\fHn\fHF\fIa\fH\\\fHJ\fIk\fHZ\fHF\fIa\fH^\fIk\fHC\fH\\\fHy\fIk\fHn\fHJ\fIa\fH\\\fHT\fIa\fHI\fHS\fHH\fHS\fHe\fHH\fIa\fHF\fHR\fHJ\fHe\fHD\fIa\fHU\fIk\fHn\fHv\fHS\fHs\fIa\fHL\fHR\fHC\fHR\fHH\fIa\fH\\\fHR\fHp\fIa\fHC\fHR\fHJ\fHR\fHF\fIm\fH\\\fHR\fHD\fIk\fHp\fIg\fHM\fHP\fIk\fHn\fHi\fHD\fIm\fHY\fHR\fHJ\fHZ\fIa\fH\\\fIk\fHO\fIl\fHZ\fHS\fHy\fIa\fH[\fHR\fHT\fH\\\fHy\fHR\fH\\\fIl\fHT\fHn\fH{\fIa\fH\\\fHU\fHF\fH\\\fHS\fHO\fHR\fHB\fH@\fIa\fH\\\fHR\fHn\fHM\fH@\fHv\fIa\fHv\fIg\fHn\fHe\fHF\fH^\fH@\fIa\fHK\fHB\fHn\fHH\fIa\fH\\\fIl\fHT\fHn\fHF\fH\\\fIa\fHy\fHe\fHB\fIa\fHB\fIl\fHJ\fHB\fHR\fHK\fIa\fHC\fHB\fHT\fHU\fHR\fHC\fHH\fHR\fHZ\fH@\fIa\fHJ\fIg\fHn\fHB\fIl\fHM\fHS\fHC\fHR\fHj\fHd\fHF\fIl\fHc\fH^\fHB\fIg\fH@\fHR\fHk\fH^\fHT\fHn\fHz\fIa\fHC\fHR\fHj\fHF\fH\\\fIk\fHZ\fHD\fHi\fHD\fIm\fH@\fHn\fHK\fH@\fHR\fHp\fHP\fHR\fH\\\fHD\fHY\fIl\fHD\fHH\fHB\fHF\fIa\fH\\\fHB\fIm\fHz\fHF\fIa\fH\\\fHZ\fIa\fHD\fHF\fH\\\fHS\fHY\fHR\fH\\\fHD\fIm\fHy\fHT\fHR\fHD\fHT\fHB\fH\\\fIa\fHI\fHD\fHj\fHC\fIg\fHp\fHS\fHH\fHT\fIg\fHB\fHY\fHR\fH\\4K5h5i4X4K4]5o4K4F4K5h5i5j4F4C5f4K4F4K5h5o5i4D5f5d4F4]4K5h5i4X4K5k4C4K4F4U4C4C4K5h4^5d4K4]4U4C4C4K5h4]4C5d4C4K5h4I4_5h4K5i5f4E4K5h5m5d4F5d4X5d4D4K5h5i4_4K4D5n4K4F4K5h5i4U5h5d5i4K4F4K5h5i4_5h4_5h4K4F4K5h4@4]4K5m5f5o4_4K5h4K4_5h4K5i5f4E4K5h4K4F4Y4K5h4K4Fhfztlqgp!#`lmwfmw>!t0-lqd,2:::,{kwno!=?b#wbqdfw>!\\aobmh!#wf{w,kwno8#`kbqpfw>!#wbqdfw>!\\aobmh!=?wbaof#`foosbggjmd>!bvwl`lnsofwf>!lee!#wf{w.bojdm9#`fmwfq8wl#obpw#ufqpjlm#az#ab`hdqlvmg.`lolq9# !#kqfe>!kwws9,,ttt-,gju=?,gju=?gju#jg>?b#kqfe>! !#`obpp>!!=?jnd#pq`>!kwws9,,`qjsw!#pq`>!kwws9,,\t?p`qjsw#obmdvbdf>!,,FM!#!kwws9,,ttt-tfm`lgfVQJ@lnslmfmw+!#kqfe>!ibubp`qjsw9?gju#`obpp>!`lmwfmwgl`vnfmw-tqjwf+$?p`slpjwjlm9#baplovwf8p`qjsw#pq`>!kwws9,,#pwzof>!nbqdjm.wls9-njm-ip!=?,p`qjsw=\t?,gju=\t?gju#`obpp>!t0-lqd,2:::,{kwno!#\t\x0e\t?,algz=\x0e\t?,kwno=gjpwjm`wjlm#afwtffm,!#wbqdfw>!\\aobmh!=?ojmh#kqfe>!kwws9,,fm`lgjmd>!vwe.;!<=\tt-bggFufmwOjpwfmfq<b`wjlm>!kwws9,,ttt-j`lm!#kqfe>!kwws9,,#pwzof>!ab`hdqlvmg9wzsf>!wf{w,`pp!#,=\tnfwb#sqlsfqwz>!ld9w?jmsvw#wzsf>!wf{w!##pwzof>!wf{w.bojdm9wkf#gfufolsnfmw#le#wzofpkffw!#wzsf>!wfkwno8#`kbqpfw>vwe.;jp#`lmpjgfqfg#wl#afwbaof#tjgwk>!233&!#Jm#bggjwjlm#wl#wkf#`lmwqjavwfg#wl#wkf#gjeefqfm`fp#afwtffmgfufolsnfmw#le#wkf#Jw#jp#jnslqwbmw#wl#?,p`qjsw=\t\t?p`qjsw##pwzof>!elmw.pjyf92=?,psbm=?psbm#jg>daOjaqbqz#le#@lmdqfpp?jnd#pq`>!kwws9,,jnFmdojpk#wqbmpobwjlmB`bgfnz#le#P`jfm`fpgju#pwzof>!gjpsobz9`lmpwqv`wjlm#le#wkf-dfwFofnfmwAzJg+jg*jm#`lmivm`wjlm#tjwkFofnfmw+$p`qjsw$*8#?nfwb#sqlsfqwz>!ld9<}=f<W<_<\\=l=m<V<T\t#wzsf>!wf{w!#mbnf>!=Sqjub`z#Sloj`z?,b=bgnjmjpwfqfg#az#wkffmbaofPjmdofQfrvfpwpwzof>%rvlw8nbqdjm9?,gju=?,gju=?,gju=?=?jnd#pq`>!kwws9,,j#pwzof>%rvlw8eolbw9qfefqqfg#wl#bp#wkf#wlwbo#slsvobwjlm#lejm#Tbpkjmdwlm/#G-@-#pwzof>!ab`hdqlvmg.bnlmd#lwkfq#wkjmdp/lqdbmjybwjlm#le#wkfsbqwj`jsbwfg#jm#wkfwkf#jmwqlgv`wjlm#lejgfmwjejfg#tjwk#wkfej`wjlmbo#`kbqb`wfq#L{elqg#Vmjufqpjwz#njpvmgfqpwbmgjmd#leWkfqf#bqf/#kltfufq/pwzofpkffw!#kqfe>!,@lovnajb#Vmjufqpjwzf{sbmgfg#wl#jm`ovgfvpvbooz#qfefqqfg#wljmgj`bwjmd#wkbw#wkfkbuf#pvddfpwfg#wkbwbeejojbwfg#tjwk#wkf`lqqfobwjlm#afwtffmmvnafq#le#gjeefqfmw=?,wg=?,wq=?,wbaof=Qfsvaoj`#le#Jqfobmg\t?,p`qjsw=\t?p`qjsw#vmgfq#wkf#jmeovfm`f`lmwqjavwjlm#wl#wkfLeej`jbo#tfapjwf#lekfbgrvbqwfqp#le#wkf`fmwfqfg#bqlvmg#wkfjnsoj`bwjlmp#le#wkfkbuf#affm#gfufolsfgEfgfqbo#Qfsvaoj`#leaf`bnf#jm`qfbpjmdoz`lmwjmvbwjlm#le#wkfMlwf/#kltfufq/#wkbwpjnjobq#wl#wkbw#le#`bsbajojwjfp#le#wkfb``lqgbm`f#tjwk#wkfsbqwj`jsbmwp#jm#wkfevqwkfq#gfufolsnfmwvmgfq#wkf#gjqf`wjlmjp#lewfm#`lmpjgfqfgkjp#zlvmdfq#aqlwkfq?,wg=?,wq=?,wbaof=?b#kwws.frvju>![.VB.skzpj`bo#sqlsfqwjfple#Aqjwjpk#@lovnajbkbp#affm#`qjwj`jyfg+tjwk#wkf#f{`fswjlmrvfpwjlmp#balvw#wkfsbppjmd#wkqlvdk#wkf3!#`foosbggjmd>!3!#wklvpbmgp#le#sflsofqfgjqf`wp#kfqf-#Elqkbuf#`kjogqfm#vmgfq&0F&0@,p`qjsw&0F!**8?b#kqfe>!kwws9,,ttt-?oj=?b#kqfe>!kwws9,,pjwf\\mbnf!#`lmwfmw>!wf{w.gf`lqbwjlm9mlmfpwzof>!gjpsobz9#mlmf?nfwb#kwws.frvju>![.mft#Gbwf+*-dfwWjnf+*#wzsf>!jnbdf,{.j`lm!?,psbm=?psbm#`obpp>!obmdvbdf>!ibubp`qjswtjmglt-ol`bwjlm-kqfe?b#kqfe>!ibubp`qjsw9..=\x0e\t?p`qjsw#wzsf>!w?b#kqfe>$kwws9,,ttt-klqw`vw#j`lm!#kqfe>!?,gju=\x0e\t?gju#`obpp>!?p`qjsw#pq`>!kwws9,,!#qfo>!pwzofpkffw!#w?,gju=\t?p`qjsw#wzsf>,b=#?b#kqfe>!kwws9,,#booltWqbmpsbqfm`z>![.VB.@lnsbwjaof!#`lmqfobwjlmpkjs#afwtffm\t?,p`qjsw=\x0e\t?p`qjsw#?,b=?,oj=?,vo=?,gju=bppl`jbwfg#tjwk#wkf#sqldqbnnjmd#obmdvbdf?,b=?b#kqfe>!kwws9,,?,b=?,oj=?oj#`obpp>!elqn#b`wjlm>!kwws9,,?gju#pwzof>!gjpsobz9wzsf>!wf{w!#mbnf>!r!?wbaof#tjgwk>!233&!#ab`hdqlvmg.slpjwjlm9!#alqgfq>!3!#tjgwk>!qfo>!pklqw`vw#j`lm!#k5=?vo=?oj=?b#kqfe>!##?nfwb#kwws.frvju>!`pp!#nfgjb>!p`qffm!#qfpslmpjaof#elq#wkf#!#wzsf>!bssoj`bwjlm,!#pwzof>!ab`hdqlvmg.kwno8#`kbqpfw>vwe.;!#booltwqbmpsbqfm`z>!pwzofpkffw!#wzsf>!wf\x0e\t?nfwb#kwws.frvju>!=?,psbm=?psbm#`obpp>!3!#`foopsb`jmd>!3!=8\t?,p`qjsw=\t?p`qjsw#plnfwjnfp#`boofg#wkfglfp#mlw#mf`fppbqjozElq#nlqf#jmelqnbwjlmbw#wkf#afdjmmjmd#le#?"GL@WZSF#kwno=?kwnosbqwj`vobqoz#jm#wkf#wzsf>!kjggfm!#mbnf>!ibubp`qjsw9uljg+3*8!feef`wjufmfpp#le#wkf#bvwl`lnsofwf>!lee!#dfmfqbooz#`lmpjgfqfg=?jmsvw#wzsf>!wf{w!#!=?,p`qjsw=\x0e\t?p`qjswwkqlvdklvw#wkf#tlqog`lnnlm#njp`lm`fswjlmbppl`jbwjlm#tjwk#wkf?,gju=\t?,gju=\t?gju#`gvqjmd#kjp#ojefwjnf/`lqqfpslmgjmd#wl#wkfwzsf>!jnbdf,{.j`lm!#bm#jm`qfbpjmd#mvnafqgjsolnbwj`#qfobwjlmpbqf#lewfm#`lmpjgfqfgnfwb#`kbqpfw>!vwe.;!#?jmsvw#wzsf>!wf{w!#f{bnsofp#jm`ovgf#wkf!=?jnd#pq`>!kwws9,,jsbqwj`jsbwjlm#jm#wkfwkf#fpwbaojpknfmw#le\t?,gju=\t?gju#`obpp>!%bns8maps8%bns8maps8wl#gfwfqnjmf#tkfwkfqrvjwf#gjeefqfmw#eqlnnbqhfg#wkf#afdjmmjmdgjpwbm`f#afwtffm#wkf`lmwqjavwjlmp#wl#wkf`lmeoj`w#afwtffm#wkftjgfoz#`lmpjgfqfg#wltbp#lmf#le#wkf#ejqpwtjwk#ubqzjmd#gfdqffpkbuf#psf`vobwfg#wkbw+gl`vnfmw-dfwFofnfmwsbqwj`jsbwjmd#jm#wkflqjdjmbooz#gfufolsfgfwb#`kbqpfw>!vwe.;!=#wzsf>!wf{w,`pp!#,=\tjmwfq`kbmdfbaoz#tjwknlqf#`olpfoz#qfobwfgpl`jbo#bmg#slojwj`bowkbw#tlvog#lwkfqtjpfsfqsfmgj`vobq#wl#wkfpwzof#wzsf>!wf{w,`ppwzsf>!pvanjw!#mbnf>!ebnjojfp#qfpjgjmd#jmgfufolsjmd#`lvmwqjfp`lnsvwfq#sqldqbnnjmdf`lmlnj`#gfufolsnfmwgfwfqnjmbwjlm#le#wkfelq#nlqf#jmelqnbwjlmlm#pfufqbo#l``bpjlmpslqwvdv/Fp#+Fvqlsfv*<O<V=l<\\={<Q=m=`<V<\\=o<V=l<\\={<Q=m=`<V<\\<L<R=m=m<T<U=m<V<R<U<P<\\=n<Y=l<T<\\<W<R<^<T<Q=h<R=l<P<\\=j<T<T=o<S=l<\\<^<W<Y<Q<T=c<Q<Y<R<]=i<R<X<T<P<R<T<Q=h<R=l<P<\\=j<T=c<t<Q=h<R=l<P<\\=j<T=c<L<Y=m<S=o<]<W<T<V<T<V<R<W<T=k<Y=m=n<^<R<T<Q=h<R=l<P<\\=j<T=b=n<Y=l=l<T=n<R=l<T<T<X<R=m=n<\\=n<R=k<Q<R4K5h5i4F5d4K4@4C5d5j4K5h4K4X4F4]4K5o4K4F4K5h4K5n4F4]4K4A4K4Fkwno8#`kbqpfw>VWE.;!#pfwWjnflvw+evm`wjlm+*gjpsobz9jmojmf.aol`h8?jmsvw#wzsf>!pvanjw!#wzsf#>#$wf{w,ibubp`qj?jnd#pq`>!kwws9,,ttt-!#!kwws9,,ttt-t0-lqd,pklqw`vw#j`lm!#kqfe>!!#bvwl`lnsofwf>!lee!#?,b=?,gju=?gju#`obpp>?,b=?,oj=\t?oj#`obpp>!`pp!#wzsf>!wf{w,`pp!#?elqn#b`wjlm>!kwws9,,{w,`pp!#kqfe>!kwws9,,ojmh#qfo>!bowfqmbwf!#\x0e\t?p`qjsw#wzsf>!wf{w,#lm`oj`h>!ibubp`qjsw9+mft#Gbwf*-dfwWjnf+*~kfjdkw>!2!#tjgwk>!2!#Sflsof$p#Qfsvaoj`#le##?b#kqfe>!kwws9,,ttt-wf{w.gf`lqbwjlm9vmgfqwkf#afdjmmjmd#le#wkf#?,gju=\t?,gju=\t?,gju=\tfpwbaojpknfmw#le#wkf#?,gju=?,gju=?,gju=?,g ujftslqwxnjm.kfjdkw9\t?p`qjsw#pq`>!kwws9,,lswjlm=?lswjlm#ubovf>lewfm#qfefqqfg#wl#bp#,lswjlm=\t?lswjlm#ubov?"GL@WZSF#kwno=\t?"..XJmwfqmbwjlmbo#Bjqslqw=\t?b#kqfe>!kwws9,,ttt?,b=?b#kqfe>!kwws9,,t\fTL\fT^\fTE\fT^\fUh\fT{\fTN\roI\ro|\roL\ro{\roO\rov\rot\nAO\x05Gx\bTA\nzk#+\vUm\x05Gx*\fHD\fHS\fH\\\fIa\fHJ\fIk\fHZ\fHM\fHR\fHe\fHD\fH^\fIg\fHM\fHy\fIa\fH[\fIk\fHH\fIa\fH\\\fHp\fHR\fHD\fHy\fHR\fH\\\fIl\fHT\fHn\fH@\fHn\fHK\fHS\fHH\fHT\fIa\fHI\fHR\fHF\fHD\fHR\fHT\fIa\fHY\fIl\fHy\fHR\fH\\\fHT\fHn\fHT\fIa\fHy\fH\\\fHO\fHT\fHR\fHB\fH{\fIa\fH\\\fIl\fHv\fHS\fHs\fIa\fHL\fIg\fHn\fHY\fHS\fHp\fIa\fHr\fHR\fHD\fHi\fHB\fIk\fH\\\fHS\fHy\fHR\fHY\fHS\fHA\fHS\fHD\fIa\fHD\fH{\fHR\fHM\fHS\fHC\fHR\fHm\fHy\fIa\fHC\fIg\fHn\fHy\fHS\fHT\fIm\fH\\\fHy\fIa\fH[\fHR\fHF\fHU\fIm\fHm\fHv\fHH\fIl\fHF\fIa\fH\\\fH@\fHn\fHK\fHD\fHs\fHS\fHF\fIa\fHF\fHO\fIl\fHy\fIa\fH\\\fHS\fHy\fIk\fHs\fHF\fIa\fH\\\fHR\fH\\\fHn\fHA\fHF\fIa\fH\\\fHR\fHF\fIa\fHH\fHB\fHR\fH^\fHS\fHy\fIg\fHn\fH\\\fHG\fHP\fIa\fHH\fHR\fH\\\fHD\fHS\fH\\\fIa\fHB\fHR\fHO\fH^\fHS\fHB\fHS\fHs\fIk\fHMgfp`qjswjlm!#`lmwfmw>!gl`vnfmw-ol`bwjlm-sqlw-dfwFofnfmwpAzWbdMbnf+?"GL@WZSF#kwno=\t?kwno#?nfwb#`kbqpfw>!vwe.;!=9vqo!#`lmwfmw>!kwws9,,-`pp!#qfo>!pwzofpkffw!pwzof#wzsf>!wf{w,`pp!=wzsf>!wf{w,`pp!#kqfe>!t0-lqd,2:::,{kwno!#{nowzsf>!wf{w,ibubp`qjsw!#nfwklg>!dfw!#b`wjlm>!ojmh#qfo>!pwzofpkffw!##>#gl`vnfmw-dfwFofnfmwwzsf>!jnbdf,{.j`lm!#,=`foosbggjmd>!3!#`foops-`pp!#wzsf>!wf{w,`pp!#?,b=?,oj=?oj=?b#kqfe>!!#tjgwk>!2!#kfjdkw>!2!!=?b#kqfe>!kwws9,,ttt-pwzof>!gjpsobz9mlmf8!=bowfqmbwf!#wzsf>!bssoj.,,T0@,,GWG#[KWNO#2-3#foopsb`jmd>!3!#`foosbg#wzsf>!kjggfm!#ubovf>!,b=%maps8?psbm#qlof>!p\t?jmsvw#wzsf>!kjggfm!#obmdvbdf>!IbubP`qjsw!##gl`vnfmw-dfwFofnfmwpAd>!3!#`foopsb`jmd>!3!#zsf>!wf{w,`pp!#nfgjb>!wzsf>$wf{w,ibubp`qjsw$tjwk#wkf#f{`fswjlm#le#zsf>!wf{w,`pp!#qfo>!pw#kfjdkw>!2!#tjgwk>!2!#>$(fm`lgfVQJ@lnslmfmw+?ojmh#qfo>!bowfqmbwf!#\talgz/#wq/#jmsvw/#wf{wnfwb#mbnf>!qlalwp!#`lmnfwklg>!slpw!#b`wjlm>!=\t?b#kqfe>!kwws9,,ttt-`pp!#qfo>!pwzofpkffw!#?,gju=?,gju=?gju#`obppobmdvbdf>!ibubp`qjsw!=bqjb.kjggfm>!wqvf!=.[?qjsw!#wzsf>!wf{w,ibubpo>38~*+*8\t+evm`wjlm+*xab`hdqlvmg.jnbdf9#vqo+,b=?,oj=?oj=?b#kqfe>!k\n\n?oj=?b#kqfe>!kwws9,,bwlq!#bqjb.kjggfm>!wqv=#?b#kqfe>!kwws9,,ttt-obmdvbdf>!ibubp`qjsw!#,lswjlm=\t?lswjlm#ubovf,gju=?,gju=?gju#`obpp>qbwlq!#bqjb.kjggfm>!wqf>+mft#Gbwf*-dfwWjnf+*slqwvdv/Fp#+gl#Aqbpjo*<R=l<_<\\<Q<T<[<\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n=`<R<]=l<\\<[<R<^<\\<Q<T=c=l<Y<_<T=m=n=l<\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n<T<R<]=c<[<\\=n<Y<W=`<Q<\\?"GL@WZSF#kwno#SVAOJ@#!mw.Wzsf!#`lmwfmw>!wf{w,?nfwb#kwws.frvju>!@lmwfqbmpjwjlmbo,,FM!#!kwws9?kwno#{nomp>!kwws9,,ttt.,,T0@,,GWG#[KWNO#2-3#WGWG,{kwno2.wqbmpjwjlmbo,,ttt-t0-lqd,WQ,{kwno2,sf#>#$wf{w,ibubp`qjsw$8?nfwb#mbnf>!gfp`qjswjlmsbqfmwMlgf-jmpfqwAfelqf?jmsvw#wzsf>!kjggfm!#mbip!#wzsf>!wf{w,ibubp`qj+gl`vnfmw*-qfbgz+evm`wjp`qjsw#wzsf>!wf{w,ibubpjnbdf!#`lmwfmw>!kwws9,,VB.@lnsbwjaof!#`lmwfmw>wno8#`kbqpfw>vwe.;!#,=\tojmh#qfo>!pklqw`vw#j`lm?ojmh#qfo>!pwzofpkffw!#?,p`qjsw=\t?p`qjsw#wzsf>>#gl`vnfmw-`qfbwfFofnfm?b#wbqdfw>!\\aobmh!#kqfe>#gl`vnfmw-dfwFofnfmwpAjmsvw#wzsf>!wf{w!#mbnf>b-wzsf#>#$wf{w,ibubp`qjmsvw#wzsf>!kjggfm!#mbnfkwno8#`kbqpfw>vwe.;!#,=gwg!=\t?kwno#{nomp>!kwws.,,T0@,,GWG#KWNO#7-32#WfmwpAzWbdMbnf+$p`qjsw$*jmsvw#wzsf>!kjggfm!#mbn?p`qjsw#wzsf>!wf{w,ibubp!#pwzof>!gjpsobz9mlmf8!=gl`vnfmw-dfwFofnfmwAzJg+>gl`vnfmw-`qfbwfFofnfmw+$#wzsf>$wf{w,ibubp`qjsw$jmsvw#wzsf>!wf{w!#mbnf>!g-dfwFofnfmwpAzWbdMbnf+pmj`bo!#kqfe>!kwws9,,ttt-@,,GWG#KWNO#7-32#Wqbmpjw?pwzof#wzsf>!wf{w,`pp!=\t\t?pwzof#wzsf>!wf{w,`pp!=jlmbo-gwg!=\t?kwno#{nomp>kwws.frvju>!@lmwfmw.Wzsfgjmd>!3!#`foopsb`jmd>!3!kwno8#`kbqpfw>vwe.;!#,=\t#pwzof>!gjpsobz9mlmf8!=??oj=?b#kqfe>!kwws9,,ttt-#wzsf>$wf{w,ibubp`qjsw$=<X<Y=c=n<Y<W=`<Q<R=m=n<T=m<R<R=n<^<Y=n=m=n<^<T<T<S=l<R<T<[<^<R<X=m=n<^<\\<]<Y<[<R<S<\\=m<Q<R=m=n<T\fHF\fIm\fHT\fIa\fHH\fHS\fHy\fHR\fHy\fHR\fHn\fH{\fIa\fH\\\fIk\fHT\fHe\fHD\fIa\fHU\fIg\fHn\fHD\fIk\fHY\fHS\fHK\fHR\fHD\fHT\fHA\fHR\fHG\fHS\fHy\fIa\fHT\fHS\fHn\fH{\fHT\fIm\fH\\\fHy\fIa\fH[\fHS\fHH\fHy\fIe\fHF\fIl\fH\\\fHR\fHk\fHs\fHY\fHS\fHp\fIa\fHr\fHR\fHF\fHD\fHy\fHR\fH\\\fIa\fH\\\fHY\fHR\fHd\fHT\fHy\fIa\fH\\\fHS\fHC\fHH\fHR',"\u06f7%\u018c'T%\x85'W%\xd7%O%g%\xa6&\u0193%\u01e5&>&*&'&^&\x88\u0178\u0c3e&\u01ad&\u0192&)&^&%&'&\x82&P&1&\xb1&3&]&m&u&E&t&C&\xcf&V&V&/&>&6&\u0f76\u177co&p&@&E&M&P&x&@&F&e&\xcc&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\u025e*\u03ea\u21f3&\u1372&K&;&)&E&H&P&0&?&9&V&\x81&-&v&a&,&E&)&?&=&'&'&B&\u0d2e&\u0503&\u0316*&*8&%&%&&&%,)&\x9a&>&\x86&7&]&F&2&>&J&6&n&2&%&?&\x8e&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\u053c\x84(,(<&,&\u03da&\u18c7&-&,(%&(&%&(\u013b0&X&D&\x81&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\xc6-\u0360\u1ef3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\u072c\u2a25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\u1e78\xcc-&7&1&F&7&t&W&7&I&.&.&^&=\u0f9c\u19d3&8(>&/&/&\u077b')'\u1065')'%@/&0&%\u043e\u09c0*&*@&C\u053d\u05d4\u0274\u05eb4\u0dd7\u071a\u04d16\u0d84&/\u0178\u0303Z&*%\u0246\u03ff&\u0134&1\xa8\u04b4\u0174",w,"AAAAKKLLKKKKKJJIHHIHHGGFF"),function(f,w){if(w.length>31)throw"sizeBits length must be at most 31";for(let f=0;f<4;++f)if(0!=w[f])throw"first 4 must be 0";let b=N,j=$;j.set(w.subarray(0,0+w.length),0);let l=0,m=f.length;for(let f=0;f<w.length;++f){b[f]=l;let w=j[f];if(0!=w){if(w>=31)throw"newSizeBits values must be less than 31";if(l+=f<<w,l<=0||l>m)throw"newSizeBits is inconsistent: overflow"}}for(let f=w.length;f<32;++f)b[f]=l;if(l!=m)throw"newSizeBits is inconsistent: underflow";L=f}(f,w)}function ff(f,w){return f<=w?f:w}function wf(f,w,b,j){if(null==f)return-1;let l=ff(f.offset+j,f.data.length),m=l-f.offset;return w.set(f.data.subarray(f.offset,l),b),f.offset+=m,m}return function(w,b){let j=new Z;if(t(j,new f(w)),b){let f=b.customDictionary;f&&function(f,w){if(1!=f.j)throw"State MUST be freshly initialized";if(0==f.Vf&&(f.Tf=new Array(16),f.df=new Int32Array(16),f.tf=-1),15==f.Vf)throw"Too many dictionary chunks";f.Tf[f.Vf]=w,f.Vf++,f.vf+=w.length,f.df[f.Vf]=f.vf}(j,f)}let l=0,m=[];for(;;){let f=new Int8Array(16384);if(m.push(f),j.nf=f,j.gf=0,j.lf=16384,j.mf=0,D(j),l+=j.mf,j.mf<16384)break}!function(f){if(0==f.j)throw"State MUST be initialized";11!=f.j&&(f.j=11,null!=f.input&&(f.input,f.input=null))}(j);let p=new Int8Array(l),q=0;for(let f=0;f<m.length;++f){let w=m[f],b=ff(l,q+16384)-q;b<16384?p.set(w.subarray(0,b),q):p.set(w,q),q+=b}return p}})();
-
- - - -
- -
- - - - -
- - -
- - -
-
- - - - -
- - - -
-
- -
-
- -
- - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/favicon.ico b/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/favicon.ico deleted file mode 100644 index 63e859b476eff5055e0e557aaa151ca8223fbeef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 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 - - - - - - Masa.Alert.Web.Admin - - - - - - - - - - - - - -
- - -
- -
- An unhandled error has occurred. - Reload - 🗙 -
- - - - - - - - diff --git a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/nav/nav.json b/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/nav/nav.json deleted file mode 100644 index 1829e716..00000000 --- a/src/Web/Masa.Alert.Web.Admin.WebAssembly/wwwroot/nav/nav.json +++ /dev/null @@ -1,203 +0,0 @@ -[ - { - "Id": 1, - "Title": "Dashboard", - "Icon": "mdi-trending-up", - "Children": [ - { - "Id": 2, - "Title": "eCommerce", - "Icon": "mdi-circle", - "Href": "dashboard/ecommerce" - }, - { - "Id": 3, - "Hide": true, - "Title": "Analytics", - "Icon": "mdi-circle", - "Href": "dashboard/analytics" - } - ] - }, - { - "Id": 4, - "Title": "eCommerce", - "Icon": "mdi-cart-outline", - "Children": [ - { - "Id": 5, - "Title": "Shop", - "Icon": "mdi-circle", - "Href": "app/ecommerce/shop" - }, - { - "Id": 6, - "Title": "Details", - "Icon": "mdi-circle", - "Href": "app/ecommerce/details" - }, - { - "Id": 7, - "Title": "Order", - "Icon": "mdi-circle", - "Href": "app/ecommerce/order" - } - ] - }, - { - "Id": 8, - "Title": "Todo", - "Icon": "mdi-calendar-check-outline", - "Href": "app/todo" - }, - { - "Id": 9, - "Title": "Invoice", - "Icon": "mdi-content-paste", - "Hide": true, - "Children": [ - { - "Id": 10, - "Title": "List", - "Icon": "mdi-circle", - "Href": "app/invoice/list" - }, - { - "Id": 11, - "Title": "Preview", - "Icon": "mdi-circle", - "Href": "app/invoice/preview" - }, - { - "Id": 12, - "Title": "Edit", - "Icon": "mdi-circle", - "Href": "app/invoice/edit" - }, - { - "Id": 13, - "Title": "Add", - "Icon": "mdi-circle", - "Href": "app/invoice/add" - } - ] - }, - { - "Id": 14, - "Title": "User", - "Icon": "mdi-account-outline", - "Children": [ - { - "Id": 15, - "Title": "List", - "Icon": "mdi-circle", - "Href": "app/user/list" - }, - { - "Id": 16, - "Title": "View", - "Icon": "mdi-circle", - "Href": "app/user/view" - }, - { - "Id": 17, - "Title": "Edit", - "Icon": "mdi-circle", - "Href": "app/user/edit" - } - ] - }, - { - "Id": 18, - "Title": "Auth", - "Icon": "mdi-file-outline", - "Children": [ - { - "Id": 19, - "Title": "Login v1", - "Icon": "mdi-circle", - "Href": "pages/authentication/login-v1" - }, - { - "Id": 20, - "Title": "Login v2", - "Icon": "mdi-circle", - "Href": "pages/authentication/login-v2" - }, - { - "Id": 21, - "Hide": true, - "Title": "Register v1", - "Icon": "mdi-circle", - "Href": "pages/authentication/register-v1" - }, - { - "Id": 22, - "Hide": true, - "Title": "Register v2", - "Icon": "mdi-circle", - "Href": "pages/authentication/register-v2" - }, - { - "Id": 23, - "Hide": true, - "Title": "Forgot Password v1", - "Icon": "mdi-circle", - "Href": "pages/authentication/forgot-password-v1" - }, - { - "Id": 24, - "Hide": true, - "Title": "Forgot Password v2", - "Icon": "mdi-circle", - "Href": "pages/authentication/forgot-password-v2" - }, - { - "Id": 25, - "Hide": true, - "Title": "Reset Password v1", - "Icon": "mdi-circle", - "Href": "pages/authentication/reset-password-v1" - }, - { - "Id": 26, - "Hide": true, - "Title": "Reset Password v2", - "Icon": "mdi-circle", - "Href": "pages/authentication/reset-password-v2" - } - ] - }, - { - "Id": 27, - "Title": "Others", - "Icon": "mdi-dots-horizontal", - "Children": [ - { - "Id": 28, - "Hide": true, - "Title": "Account Settings", - "Icon": "mdi-circle", - "Href": "pages/others/account-settings" - }, - { - "Id": 29, - "Title": "500", - "Icon": "mdi-circle", - "Href": "pages/others/500" - }, - { - "Id": 30, - "Title": "401", - "Icon": "mdi-circle", - "Href": "pages/others/401" - }, - { - "Id": 31, - "Title": "404", - "Icon": "mdi-circle", - "Href": "pages/others/404" - } - ] - } -] diff --git a/src/Web/Masa.Alert.Web.Admin/App.razor b/src/Web/Masa.Alert.Web.Admin/App.razor deleted file mode 100644 index adfa6b59..00000000 --- a/src/Web/Masa.Alert.Web.Admin/App.razor +++ /dev/null @@ -1,29 +0,0 @@ -@inject TokenProvider TokenProvider - - - - - - - - - - - - - - - -@code { - [Parameter] - public TokenProvider InitialState { get; set; } = null!; - - protected override Task OnInitializedAsync() - { - TokenProvider.AccessToken = InitialState.AccessToken; - TokenProvider.RefreshToken = InitialState.RefreshToken; - TokenProvider.IdToken = InitialState.IdToken; - return base.OnInitializedAsync(); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Components/AutoHeight.razor b/src/Web/Masa.Alert.Web.Admin/Components/AutoHeight.razor deleted file mode 100644 index cfee7ab0..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/AutoHeight.razor +++ /dev/null @@ -1,50 +0,0 @@ -@using Masa.Blazor.Extensions -@inject IJSRuntime jsRuntime -
- @HeaderContent -
- @AutoHeightContent -
- @FooterContent -
- - -@code { - [Parameter] - public RenderFragment? HeaderContent { get; set; } - - [Parameter] - public RenderFragment? AutoHeightContent { get; set; } - - [Parameter] - public RenderFragment? FooterContent { get; set; } - - [Parameter] - public string AutoClass { get; set; } = ""; - - [Parameter] - public string Class { get; set; } = ""; - - [Parameter] - public bool Overflow { get; set; } - - private ElementReference divRef; - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - await base.OnAfterRenderAsync(firstRender); - - if (firstRender) - { - await ScrollToTop(); - } - } - - private async Task ScrollToTop() - { - if (Overflow) - { - await jsRuntime.ScrollTo(divRef, 0); - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/DefaultPageTitle.razor b/src/Web/Masa.Alert.Web.Admin/Components/DefaultPageTitle.razor deleted file mode 100644 index 33c387d2..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/DefaultPageTitle.razor +++ /dev/null @@ -1,9 +0,0 @@ -@ChildContent - -@code { - [Parameter] - public RenderFragment? ChildContent { get; set; } - - [Parameter] - public string Class { get; set; } = ""; -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/DefaultSheetDialog.cs b/src/Web/Masa.Alert.Web.Admin/Components/DefaultSheetDialog.cs deleted file mode 100644 index 14cbe1b6..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/DefaultSheetDialog.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Components; - -public class DefaultSheetDialog : SSheetDialog -{ - protected override void OnParametersSet() - { - base.OnParametersSet(); - ContentClass ??= ""; - if (ContentClass.Contains("sheetDialogPadding") is false) - ContentClass += " sheetDialogPadding"; - } - - protected override void BuildRenderTree(RenderTreeBuilder builder) - { - if (Value) - { - builder.OpenElement(0, "div"); - builder.SetKey(Value); - base.BuildRenderTree(builder); - builder.CloseElement(); - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/DefaultSimpleSelect.cs b/src/Web/Masa.Alert.Web.Admin/Components/DefaultSimpleSelect.cs deleted file mode 100644 index 00d50507..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/DefaultSimpleSelect.cs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Components; - -public class DefaultSimpleSelect : SSimpleSelect -{ - [EditorRequired] - [Parameter] - public List> Items { get; set; } = new(); - - public override async Task SetParametersAsync(ParameterView parameters) - { - await base.SetParametersAsync(parameters); - ValueTexts = Items.Select(x => (x.Value, x.Text)).ToList(); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Components/DefaultSubTitle.razor b/src/Web/Masa.Alert.Web.Admin/Components/DefaultSubTitle.razor deleted file mode 100644 index e9b75657..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/DefaultSubTitle.razor +++ /dev/null @@ -1,11 +0,0 @@ -
- @ChildContent -
- -@code{ - [Parameter] - public RenderFragment? ChildContent { get; set; } - - [Parameter] - public string Class { get; set; } = "mt-9 mb-6"; -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/DefaultTitle.razor b/src/Web/Masa.Alert.Web.Admin/Components/DefaultTitle.razor deleted file mode 100644 index 1cee8df4..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/DefaultTitle.razor +++ /dev/null @@ -1,11 +0,0 @@ -
- @ChildContent -
- -@code{ - [Parameter] - public RenderFragment? ChildContent { get; set; } - - [Parameter] - public string Class { get; set; } = "mt-9 mb-6"; -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/DefaultTooltip.razor b/src/Web/Masa.Alert.Web.Admin/Components/DefaultTooltip.razor deleted file mode 100644 index 8051f3b1..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/DefaultTooltip.razor +++ /dev/null @@ -1,9 +0,0 @@ -mdi-help-circle-outline - -@code { - [Parameter] - public string Tooltip { get; set; } - - [Parameter] - public string Class { get; set; } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/EnableSwitch.razor b/src/Web/Masa.Alert.Web.Admin/Components/EnableSwitch.razor deleted file mode 100644 index 875ec70b..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/EnableSwitch.razor +++ /dev/null @@ -1,7 +0,0 @@ -@inherits AdminCompontentBase - - - - @(Value ? T("Enabled") : T("Disabled")) - - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Components/EnableSwitch.razor.cs b/src/Web/Masa.Alert.Web.Admin/Components/EnableSwitch.razor.cs deleted file mode 100644 index 69aed621..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/EnableSwitch.razor.cs +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Components; - -public partial class EnableSwitch -{ - [Parameter] - public bool Value { get; set; } - - [Parameter] - public EventCallback ValueChanged { get; set; } -} - diff --git a/src/Web/Masa.Alert.Web.Admin/Components/GenericColumnRender/DefaultGenericColumnRender.razor b/src/Web/Masa.Alert.Web.Admin/Components/GenericColumnRender/DefaultGenericColumnRender.razor deleted file mode 100644 index 3d60d505..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/GenericColumnRender/DefaultGenericColumnRender.razor +++ /dev/null @@ -1,32 +0,0 @@ -@if (Value is DateTime dateTime) -{ - -} -else if (Value is DateTimeOffset dateTimeOffset) -{ - -} -else -{ - if(Width != null) - { -
- @Value -
- } - else - { -
@Value
- } -} - -@code { - [Parameter] - public object? Value { get; set; } - - [Parameter] - public StringNumber? Width { get; set; } - - [Inject] - public JsInitVariables JsInitVariables { get; set; } = default!; -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/JsonPre.razor b/src/Web/Masa.Alert.Web.Admin/Components/JsonPre.razor deleted file mode 100644 index 3fc79c5d..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/JsonPre.razor +++ /dev/null @@ -1,28 +0,0 @@ -@inherits AdminCompontentBase -

-
-@code {
-    [Parameter]
-    public string Value { get; set; } = default!;
-
-    [Parameter]
-    public bool Overflow { get; set; }
-
-    protected override async Task OnAfterRenderAsync(bool firstRender)
-    {
-        if (firstRender)
-        {
-            await JsonFormat();
-        }
-    }
-
-    protected override async Task OnParametersSetAsync()
-    {
-        await JsonFormat();
-    }
-
-    private async Task JsonFormat()
-    {
-        await Js.InvokeVoidAsync("util.jsonFormat", Ref, Value);
-    }
-}
diff --git a/src/Web/Masa.Alert.Web.Admin/Components/JsonPre.razor.css b/src/Web/Masa.Alert.Web.Admin/Components/JsonPre.razor.css
deleted file mode 100644
index 987426f9..00000000
--- a/src/Web/Masa.Alert.Web.Admin/Components/JsonPre.razor.css
+++ /dev/null
@@ -1,24 +0,0 @@
-.json-pre {
-    padding: 5px;
-    color: #A3AED0 !important;
-}
-
-    .json-pre ::deep .string {
-        color: green;
-    }
-
-    .json-pre ::deep .number {
-        color: darkorange;
-    }
-
-    .json-pre ::deep .boolean {
-        color: blue;
-    }
-
-    .json-pre ::deep .null {
-        color: #A3AED0;
-    }
-
-    .json-pre ::deep .key {
-        color: #F178B6;
-    }
diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Lists/DateTimeListItem.razor b/src/Web/Masa.Alert.Web.Admin/Components/Lists/DateTimeListItem.razor
deleted file mode 100644
index 1f2e7cc3..00000000
--- a/src/Web/Masa.Alert.Web.Admin/Components/Lists/DateTimeListItem.razor
+++ /dev/null
@@ -1,12 +0,0 @@
-@inherits AdminCompontentBase
-
-    
-        @Value?.ToString(T("$DateFormat"))
-        @Value?.ToString(T("$TimeFormat"))
-    
-
-
-@code {
-    [Parameter]
-    public DateTimeOffset? Value { get; set; }
-}
diff --git a/src/Web/Masa.Alert.Web.Admin/Components/MenuTooltip.razor b/src/Web/Masa.Alert.Web.Admin/Components/MenuTooltip.razor
deleted file mode 100644
index ffc6c344..00000000
--- a/src/Web/Masa.Alert.Web.Admin/Components/MenuTooltip.razor
+++ /dev/null
@@ -1,22 +0,0 @@
-
-    
-        
-            mdi-help-circle-outline
-        
-    
-    
-        @((MarkupString)Tooltip)
-    
-
-
-@code {
-    [Parameter]
-    public string Tooltip { get; set; }
-
-    [Parameter]
-    public string Class { get; set; }
-}
diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmChart.razor b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmChart.razor
deleted file mode 100644
index ff2dbfd3..00000000
--- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmChart.razor
+++ /dev/null
@@ -1,200 +0,0 @@
-@inherits AdminCompontentBase
-
- @AlarmHistory.AlarmRule.ProjectIdentity - - - - -
-
- @AlarmHistory.AlarmRule.AppIdentity - - @AlarmHistory.AlarmRule.DisplayName @(!string.IsNullOrEmpty(AlarmHistory.AlarmRule.ChartYAxisUnit) ? $"({AlarmHistory.AlarmRule.ChartYAxisUnit})" : "") - -
-
- - -
- -@code { - [Parameter] - public StringNumber Width { get; set; } = 761; - - [Parameter] - public StringNumber Height { get; set; } = 219; - - [EditorRequired] - [Parameter] - public AlarmHistoryViewModel AlarmHistory { get; set; } = new(); - - [Parameter] - public EventCallback OnClick { get; set; } - - protected override string? PageName { get; set; } = "AlarmChartBlock"; - - private AlarmHistoryViewModel _alarmHistory = new(); - - private DateTimeOffset? _startTime = null; - - private DateTimeOffset? _endTime = null; - - private object _option = new(); - - private MECharts? _chart = null; - - private List _alarmRuleRecords = new(); - - AlarmRuleRecordService AlarmRuleRecordService => AlertCaller.AlarmRuleRecordService; - - protected override async Task OnParametersSetAsync() - { - if (_alarmHistory != AlarmHistory) - { - _alarmHistory = AlarmHistory; - _startTime = null; - _endTime = null; - await LoadData(); - } - } - - Task OnDateTimeUpdateAsync((DateTimeOffset?, DateTimeOffset?) args) - { - (_startTime, _endTime) = args; - return LoadData(); - } - - private async Task LoadData() - { - var queryParam = new GetAlarmRuleRecordInputDto(500) - { - AlarmHistoryId = AlarmHistory.Id, - StartTime = _startTime?.UtcDateTime, - EndTime = _endTime?.UtcDateTime, - IsTrigger = true - }; - - var dtos = (await AlarmRuleRecordService.GetListAsync(queryParam)); - - var paginatedList = dtos?.Adapt>() ?? new(); - var records = paginatedList.Result; - - var legendData = new List(); - - foreach (var item in records) - { - foreach (var key in item.AggregateResult.Keys) - { - if (!legendData.Contains(key)) - { - legendData.Add(key); - } - } - } - - var seriesData = legendData.Select((key, i) => - { - var data = records.Select(x => - { - var val = x.AggregateResult.FirstOrDefault(x => x.Key == key).Value; - return new List { x.ExcuteTime.ToUnixTimeMilliseconds(), val, x.Id }; - }); - - return new - { - Name = key, - Type = "line", - Stack = "Total", - Data = data, - LineStyle = ChartHelper.GetLineStyle(i), - AreaStyle = ChartHelper.GetAreaStyle(i), - Smooth = true - }; - }); - - RenderCharts(legendData, seriesData); - - _alarmRuleRecords = records ?? new(); - } - - private void RenderCharts(List legendData, object seriesData) - { - _option = new - { - Tooltip = new - { - Trigger = "axis", - }, - Legend = new - { - Bottom = "0%", - Icon = "roundRect", - Data = legendData - }, - Grid = new - { - Left = 0, - Right = 10, - Top = 40, - Bottom = 30, - ContainLabel = true - }, - Color = ChartHelper.Colors, - XAxis = new - { - Type = "time", - BoundaryGap = false, - AxisLine = new - { - LineStyle = new - { - Color = "#FF5252" - } - }, - AxisLabel = new - { - Color = "#A3AED0", - Formatter = new - { - Year = "{yyyy}", - Month = "{MMM}", - Day = "{d}", - Hour = "{HH}:{mm}", - Minute = "{HH}:{mm}", - Second = "{HH}:{mm}:{ss}" - } - }, - AxisTick = new - { - Show = false - }, - SplitNumber = 4, - MinInterval = 20 * 1000,//Minimum accuracy of x-axis in one minute - }, - YAxis = new - { - Type = "value", - SplitLine = new - { - Show = true, - LineStyle = new - { - Type = "dashed" - } - } - }, - Series = seriesData - }; - } - - private async Task HandleOnClick(EChartsEventArgs args) - { - var recordId = Guid.Parse(args.Value[2].ToString()); - var record = _alarmRuleRecords.FirstOrDefault(x => x.Id == recordId); - - if (record != null && OnClick.HasDelegate) - { - await OnClick.InvokeAsync(record); - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmHistoryStatusIcon.razor b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmHistoryStatusIcon.razor deleted file mode 100644 index b4e0a2f3..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmHistoryStatusIcon.razor +++ /dev/null @@ -1,31 +0,0 @@ -@switch (Value) -{ - case AlarmHistoryHandleStatuses.Pending: - - mdi-timer-outline - - break; - case AlarmHistoryHandleStatuses.InProcess: - - mdi-chart-donut - - break; - case AlarmHistoryHandleStatuses.ProcessingCompleted: - - mdi-check - - break; - case AlarmHistoryHandleStatuses.Notified: - - mdi-message-text - - break; -} - -@code { - [Parameter] - public AlarmHistoryHandleStatuses Value { get; set; } - - [Parameter] - public StringNumber? Size { get; set; } = 16; -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmHistoryStatusTag.razor b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmHistoryStatusTag.razor deleted file mode 100644 index 27cdad28..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmHistoryStatusTag.razor +++ /dev/null @@ -1,24 +0,0 @@ -@inherits AdminCompontentBase -@T(Value.ToString()) -@code { - [Parameter] - public AlarmHistoryHandleStatuses Value { get; set; } - - protected override void OnParametersSet() - { - switch (Value) - { - case AlarmHistoryHandleStatuses.Pending: - Class = "warning--text warning-lighten"; - break; - case AlarmHistoryHandleStatuses.InProcess: - Class = "yellow-clicked--text yellow-lighten"; - break; - case AlarmHistoryHandleStatuses.ProcessingCompleted: - Class = "green--text green-lighten"; - break; - default: - break; - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmPreviewChart.razor b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmPreviewChart.razor deleted file mode 100644 index 28e81f4a..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmPreviewChart.razor +++ /dev/null @@ -1,241 +0,0 @@ -@inherits AdminCompontentBase -
- - -
-

@T("ChartPreviewTips")

-

@T("YAxisUnits"):@ChartYAxisUnit

-
-
-
- - -
- -@code { - [Parameter] - public StringNumber Width { get; set; } = 761; - - [Parameter] - public StringNumber Height { get; set; } = 223; - - [EditorRequired] - [Parameter] - public AlarmRuleUpsertViewModel AlarmRule { get; set; } = new(); - - [Parameter] - public string ChartYAxisUnit { get; set; } = string.Empty; - - protected override string? PageName { get; set; } = "AlarmChartBlock"; - - private DateTimeOffset? _startTime; - - private DateTimeOffset? _endTime; - - private object _option = new(); - - protected override void OnParametersSet() - { - _startTime = null; - _endTime = null; - - FillData(); - } - - private void RenderCharts(List legendData, object seriesData) - { - _option = new - { - Tooltip = new - { - Trigger = "axis", - }, - Legend = new - { - Bottom = "0%", - Icon = "roundRect", - Data = legendData - }, - Grid = new - { - Left = 0, - Right = 10, - Top = 40, - Bottom = 30, - ContainLabel = true - }, - Color = ChartHelper.Colors, - XAxis = new - { - Type = "time", - BoundaryGap = false, - AxisLine = new - { - LineStyle = new - { - Color = "#E4E8F3" - } - }, - AxisLabel = new - { - Color = "#A3AED0" - }, - AxisTick = new - { - Show = false - } - }, - YAxis = new - { - Type = "value", - SplitLine = new - { - Show = true, - LineStyle = new - { - Type = "dashed" - } - } - }, - Series = seriesData - }; - } - - private void FillData() - { - var timeList = new List(); - var chartData = new List(); - - if (AlarmRule.CheckFrequency.Type == AlarmCheckFrequencyTypes.FixedInterval) - { - timeList = GetTimeListByFixedInterval(); - } - - if (AlarmRule.CheckFrequency.Type == AlarmCheckFrequencyTypes.Cron) - { - timeList = GetTimeListByCron(); - } - Random a = new Random(); - - if (AlarmRule.Type == AlarmRuleTypes.Log) - { - foreach (var item in AlarmRule.LogMonitorItems) - { - var data = timeList.Select(x => new List { x, a.Next(100) }).ToList()!; - chartData.Add(new AlarmPreviewChartDataItemModel - { - Name = item.Alias, - Data = data - }); - } - } - - if (AlarmRule.Type == AlarmRuleTypes.Metric) - { - foreach (var item in AlarmRule.MetricMonitorItems) - { - var data = timeList.Select(x => new List { x, a.Next(100) }).ToList()!; - chartData.Add(new AlarmPreviewChartDataItemModel - { - Name = item.Alias, - Data = data - }); - } - } - - var legendData = chartData.Select(x => x.Name).ToList(); - - var seriesData = chartData.Select((x, i) => new - { - Name = x.Name, - Type = "line", - Stack = "Total", - Data = x.Data, - LineStyle = ChartHelper.GetLineStyle(i), - AreaStyle = ChartHelper.GetAreaStyle(i), - Smooth = true - }); - RenderCharts(legendData, seriesData); - } - - private List GetTimeListByFixedInterval(int count = 10) - { - var timeList = new List(); - var time = _startTime ?? DateTimeOffset.UtcNow; - - var i = 0; - while (CheckIsAddTime(time, i)) - { - timeList.Add(time.ToUnixTimeMilliseconds()); - - var intervalTime = AlarmRule.CheckFrequency.FixedInterval.GetIntervalTime(); - - if (intervalTime.HasValue) - { - time = time.Add(intervalTime.Value); - } - - i++; - } - return timeList; - } - - private List GetTimeListByCron(int count = 10) - { - var timeList = new List(); - - if (!CronExpression.IsValidExpression(AlarmRule.CheckFrequency.CronExpression)) - { - return timeList; - } - - var cronExpression = new CronExpression(AlarmRule.CheckFrequency.CronExpression); - - var timezone = TimeZoneInfo.GetSystemTimeZones().FirstOrDefault(p => p.BaseUtcOffset == JsInitVariables.TimezoneOffset); - - if (timezone != null) - cronExpression.TimeZone = timezone; - var time = _startTime ?? DateTimeOffset.UtcNow; - var i = 0; - while (CheckIsAddTime(time, i)) - { - timeList.Add(time.ToUnixTimeMilliseconds()); - - var nextExcuteTime = cronExpression.GetNextValidTimeAfter(time); - if (nextExcuteTime.HasValue) - { - time = nextExcuteTime.Value; - } - - i++; - } - - return timeList; - } - - private void TimeRangeChange((DateTimeOffset?, DateTimeOffset?) args) - { - (_startTime, _endTime) = args; - FillData(); - } - - private bool CheckIsAddTime(DateTimeOffset time, int i) - { - if (i > 300) - { - return false; - } - - if (_endTime.HasValue && time <= _endTime) - { - return true; - } - - if (!_endTime.HasValue && i < 10) - { - return true; - } - - return false; - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmPreviewChartModal.razor b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmPreviewChartModal.razor deleted file mode 100644 index 69d91c48..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlarmPreviewChartModal.razor +++ /dev/null @@ -1,64 +0,0 @@ -@inherits AdminCompontentBase - - - @if (AlarmRule.Type == AlarmRuleTypes.Log) - { - - @T("LogSamplingPreview") - - - - } - - -@code { - [Parameter] - public StringNumber Width { get; set; } = 770; - - [EditorRequired] - [Parameter] - public AlarmRuleUpsertViewModel AlarmRule { get; set; } = new(); - - [Inject] - public ITscClient TscClient { get; set; } = default!; - - private AlarmRuleUpsertViewModel _alarmRule = new(); - - protected override string? PageName { get; set; } = "AlarmChartBlock"; - - private bool _visible = false; - - private LogDto _log = new(); - private string _logStr = string.Empty; - - public async Task OpenModalAsync() - { - _alarmRule = AlarmRule; - await GetLatestAsync(); - await InvokeAsync(() => - { - _visible = true; - StateHasChanged(); - }); - } - - public async Task GetLatestAsync() - { - var request = new LogLatestRequest - { - Start = DateTime.Now.AddDays(-20), - End = DateTime.Now, - IsDesc = true - }; - - try - { - var log = await TscClient.LogService.GetLatestAsync(request); - _logStr = JsonSerializer.Serialize(log); - } - catch (Exception) - { - _logStr = "{}"; - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlertSeverityTag.razor b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlertSeverityTag.razor deleted file mode 100644 index aa66892d..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/AlertSeverityTag.razor +++ /dev/null @@ -1,34 +0,0 @@ -@inherits AdminCompontentBase -
-
- @T(Value.ToString()) -
- -@code { - [Parameter] - public AlertSeverity Value { get; set; } - - protected override void OnParametersSet() - { - switch (Value) - { - case AlertSeverity.Serious: - Class = "warning-clicked"; - break; - case AlertSeverity.High: - Class = "warning"; - break; - case AlertSeverity.Secondary: - Class = "remind"; - break; - case AlertSeverity.Low: - Class = "yellow"; - break; - case AlertSeverity.Report: - Class = "yellow-clicked"; - break; - default: - break; - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/ChartHelper.cs b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/ChartHelper.cs deleted file mode 100644 index 8e46c0e6..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/ChartHelper.cs +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Components.Modules.Alarm; - -public class ChartHelper -{ - public static List Colors = new List { "#4318FF", "#FF5252", "#FFB547", "#05CD99", "#00B42A", "#FF7D00", "#37A7FF" }; - - public static object? GetLineStyle(int i) - { - return new - { - Color = i < Colors.Count ? Colors[i] : null, - Width = 3 - }; - } - - public static object? GetAreaStyle(int i) - { - return new - { - Color = new - { - ColorStops = GetColorStops(i), - Global = false, - Type = "linear", - X = 0, - X2 = 0, - Y = 0, - Y2 = 1 - } - }; - } - - public static object? GetColorStops(int i) - { - var index = i % Colors.Count; - return index switch - { - 0 => new[] { new { Offset = 0, Color = "#ECE8FF" }, new { Offset = 1, Color = "rgba(236, 232, 255, 0)" } }, - 1 => new[] { new { Offset = 0, Color = "#FDCDC5" }, new { Offset = 1, Color = "rgba(255, 236, 232, 0)" } }, - 2 => new[] { new { Offset = 0, Color = "#FFB547" }, new { Offset = 1, Color = "#FFF8ED" } }, - 3 => new[] { new { Offset = 0, Color = "#05CD99" }, new { Offset = 1, Color = "#E6FAF5" } }, - 4 => new[] { new { Offset = 0, Color = "#00B42A" }, new { Offset = 1, Color = "#7A8499" } }, - 5 => new[] { new { Offset = 0, Color = "#FF7D00" }, new { Offset = 1, Color = "#FFF7E8" } }, - 6 => new[] { new { Offset = 0, Color = "#37A7FF" }, new { Offset = 1, Color = "#EBF6FF" } }, - _ => null - }; - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/Model/AlarmPreviewChartDataItemModel.cs b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/Model/AlarmPreviewChartDataItemModel.cs deleted file mode 100644 index d5b27d24..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Alarm/Model/AlarmPreviewChartDataItemModel.cs +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Components.Modules.Alarm.Model; - -public class AlarmPreviewChartDataItemModel -{ - public string Name { get; set; } = string.Empty; - - public List> Data { get; set; } = new(); -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Notification/NotificationConfig.razor b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Notification/NotificationConfig.razor deleted file mode 100644 index d1abe782..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Notification/NotificationConfig.razor +++ /dev/null @@ -1,147 +0,0 @@ -@inherits AdminCompontentBase - - -
- - - @if (!string.IsNullOrEmpty(PrependText)) - { - @PrependText - } - - -
-
- - - - -
- - - - - - - - - - - - - - - - - - - - - - -@code { - [Parameter] - public NotificationConfigViewModel Value { get; set; } = new(); - - [Parameter] - public string PrependText { get; set; } = string.Empty; - - [Parameter] - public string ItemClass { get; set; } = string.Empty; - - [Parameter] - public string ItemBackgroundColor { get; set; } = string.Empty; - - private List _items = new(); - - [Inject] - public IMcClient McClient { get; set; } = default!; - - private List _channelItems = new(); - private List _templateItems = new(); - private Guid TemplateId = default; - private bool _visible = false; - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - await LoadData(); - } - await base.OnAfterRenderAsync(firstRender); - } - - private async Task LoadData() - { - await HandleChannelTypeChangeAsync(); - await HandleChannelChangeAsync(); - } - - private async Task HandleChannelTypeChangeAsync() - { - var input = new GetChannelModel() - { - Page = 1, - PageSize = 99, - Type = (ChannelTypes)Value.ChannelType - }; - - _channelItems = Value.ChannelType > 0 ? (await McClient.ChannelService.GetListAsync(input)).Result : new(); - } - - private async Task HandleChannelChangeAsync() - { - var channelId = _channelItems.FirstOrDefault(x => x.Code == Value.ChannelCode)?.Id; - - if (channelId == null) return; - - var input = new GetMessageTemplateModel - { - Page = 1, - PageSize = 99, - AuditStatus = MessageTemplateAuditStatuses.Approved, - ChannelId = channelId.Value - }; - - _templateItems = (await McClient.MessageTemplateService.GetListAsync(input)).Result; - } - - private void HandleTemplateSelectedAsync(MessageTemplateModel item) - { - Value.TemplateCode = item.Code; - Value.TemplateName = item.DisplayName; - } - - private async Task HandleTemplateClick() - { - await LoadData(); - - _visible = true; - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Subjects/UserAutoComplete.razor b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Subjects/UserAutoComplete.razor deleted file mode 100644 index 9d8d6ce2..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Subjects/UserAutoComplete.razor +++ /dev/null @@ -1,36 +0,0 @@ -@inherits AdminCompontentBase - - - - - @if (!string.IsNullOrEmpty(data.Item.Avatar)) - { - - - - } - - @data.Item.DisplayName - - - - - @RenderFragments.UserSelectItem(data.Item.Avatar, data.Item.DisplayName, data.Item.PhoneNumber, data.Item.Account, data.Item.Email) - - diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Subjects/UserAutoComplete.razor.cs b/src/Web/Masa.Alert.Web.Admin/Components/Modules/Subjects/UserAutoComplete.razor.cs deleted file mode 100644 index 599c2c80..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/Subjects/UserAutoComplete.razor.cs +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Components.Modules.Subjects; - -public partial class UserAutoComplete : AdminCompontentBase -{ - [Inject] - public IAuthClient AuthClient { get; set; } = default!; - - [Parameter] - public List Value { get; set; } = new(); - - [Parameter] - public EventCallback> ValueChanged { get; set; } - - [Parameter] - public string Label { get; set; } = ""; - - [Parameter] - public bool Readonly { get; set; } - - [Parameter] - public int Page { get; set; } = 1; - - [Parameter] - public int PageSize { get; set; } = 10; - - bool _loading; - - protected List Users { get; set; } = new(); - - public string Search { get; set; } = ""; - - protected override async Task OnParametersSetAsync() - { - if (!Users.Any()) - { - await InitUsers(); - } - - base.OnParametersSet(); - } - - private async Task InitUsers() - { - var list = await AuthClient.UserService.GetListByIdsAsync(Value.ToArray()); - Users = list.Select(x => new UserSelectModel(x.Id, x.Name ?? string.Empty, x.DisplayName, x.Account, x.PhoneNumber ?? string.Empty, x.Email ?? string.Empty, x.Avatar)).ToList(); - StateHasChanged(); - } - - private async Task Remove(UserSelectModel staff) - { - if (Readonly is false) - { - var value = new List(); - value.AddRange(Value); - value.Remove(staff.Id); - await ValueChanged.InvokeAsync(value); - } - } - - private bool FilterItem(UserSelectModel item, string queryText, string itemText) - { - return item.DisplayName.Contains(queryText); - } - - private async Task QuerySelection(string search) - { - search = search.TrimStart(' ').TrimEnd(' '); - Search = search; - await Task.Delay(300); - if (search != Search) - { - return; - } - - _loading = true; - var response = await AuthClient.UserService.SearchAsync(search); - var users = response; - var seletedItems = Users.Where(x => Value.Contains(x.Id)).ToList(); - Users = seletedItems.UnionBy(users, user => user.Id).ToList(); - _loading = false; - } - - public string TextView(UserSelectModel user) - { - if (!string.IsNullOrEmpty(user.DisplayName)) return user.DisplayName; - if (!string.IsNullOrEmpty(user.Name)) return user.Name; - if (!string.IsNullOrEmpty(user.PhoneNumber)) return user.PhoneNumber; - return ""; - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/Modules/WebHooks/WebHookAutoComplete.razor b/src/Web/Masa.Alert.Web.Admin/Components/Modules/WebHooks/WebHookAutoComplete.razor deleted file mode 100644 index b582d6ce..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/Modules/WebHooks/WebHookAutoComplete.razor +++ /dev/null @@ -1,70 +0,0 @@ -@inherits AdminCompontentBase - - - - - -@code { - [Parameter] - public Guid Value { get; set; } - - [Parameter] - public EventCallback ValueChanged { get; set; } - - [Parameter] - public string Label { get; set; } = ""; - - [Parameter] - public bool Readonly { get; set; } - - [Parameter] - public int PageSize { get; set; } = 10; - - [Parameter] - public bool Solo { get; set; } = true; - - bool _loading; - - protected List WebHooks { get; set; } = new(); - - public string Search { get; set; } = ""; - - WebHookService WebHookService => AlertCaller.WebHookService; - - private async Task QuerySelection(string search) - { - search = search.TrimStart(' ').TrimEnd(' '); - Search = search; - await Task.Delay(300); - if (search != Search) - { - return; - } - - _loading = true; - - var dtos = await WebHookService.GetListAsync(new GetWebHookInputDto(PageSize) - { - Filter = search - }); - WebHooks = dtos.Result; - - _loading = false; - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/OutlinedSearchTextField.cs b/src/Web/Masa.Alert.Web.Admin/Components/OutlinedSearchTextField.cs deleted file mode 100644 index ec638ed7..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/OutlinedSearchTextField.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Components; - -public class OutlinedSearchTextField : MTextField -{ - [Inject] - public I18n? I18n { get; set; } - - public override async Task SetParametersAsync(ParameterView parameters) - { - Flat = true; - Dense = true; - Solo = true; - HideDetails = "auto"; - BackgroundColor = "#F0F3FA"; - Placeholder = I18n!.T("Search"); - PrependInnerContent = builder => - { - builder.OpenComponent(0); - builder.AddAttribute(1, "Size", (StringNumber)16); - builder.AddAttribute(2, "Class", "mr-2 emphasis2--text"); - builder.AddAttribute(3, "ChildContent", (RenderFragment)delegate (RenderTreeBuilder builder2) { - builder2.AddContent(4, IconConstants.Search); - }); - builder.CloseComponent(); - }; - - await base.SetParametersAsync(parameters); - } - - protected override void OnParametersSet() - { - base.OnParametersSet(); - Class ??= ""; - if (Class.Contains("rounded-2 search") is false) - Class += " rounded-2 search"; - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/SearchTextField.cs b/src/Web/Masa.Alert.Web.Admin/Components/SearchTextField.cs deleted file mode 100644 index 301c084f..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/SearchTextField.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Components; - -public class SearchTextField : STextField -{ - [Parameter] - public bool FillBackground { get; set; } = true; - - public override async Task SetParametersAsync(ParameterView parameters) - { - Flat = true; - Solo = true; - Small = true; - BackgroundColor = FillBackground ? "fill-background" : ""; - Style = "max-width:340px;"; - Placeholder = I18n!.T("Search"); - PrependInnerContent = builder => - { - builder.OpenComponent(0); - builder.AddAttribute(1, "Size", (StringNumber)16); - builder.AddAttribute(2, "Class", "mr-2 emphasis2--text"); - builder.AddAttribute(3, "ChildContent", (RenderFragment)delegate (RenderTreeBuilder builder2) { - builder2.AddContent(4, IconConstants.Search); - }); - builder.CloseComponent(); - }; - - await base.SetParametersAsync(parameters); - } - - protected override void OnParametersSet() - { - base.OnParametersSet(); - Class ??= ""; - if (Class.Contains("rounded-2 search") is false) - Class += " rounded-2 search"; - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Components/SelectItem.cs b/src/Web/Masa.Alert.Web.Admin/Components/SelectItem.cs deleted file mode 100644 index e157a457..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Components/SelectItem.cs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Components; - -public class SelectItem -{ - public TValue Value { get; set; } - - public string Text { get; set; } - - public SelectItem(TValue value, string text) - { - Value = value; - Text = text; - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Global/Config/GlobalConfig.cs b/src/Web/Masa.Alert.Web.Admin/Global/Config/GlobalConfig.cs deleted file mode 100644 index 6c7ba77f..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Global/Config/GlobalConfig.cs +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Global -{ - public class GlobalConfig - { - #region Field - - private bool _Loading; - - #endregion - - #region Property - - public bool Loading - { - get => _Loading; - set - { - if (_Loading != value) - { - _Loading = value; - OnLoadingChanged?.Invoke(_Loading, LoadingText); - } - } - } - - public string LoadingText = string.Empty; - - public bool ThrottleFlag { get; set; } - - #endregion - - - #region event - - public delegate void GlobalConfigChanged(); - public delegate void LoadingChanged(bool loading, string loadingText); - - public event LoadingChanged? OnLoadingChanged; - - #endregion - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Global/ServiceCollectionExtensions.cs b/src/Web/Masa.Alert.Web.Admin/Global/ServiceCollectionExtensions.cs deleted file mode 100644 index 7bbb93e4..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Global/ServiceCollectionExtensions.cs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Microsoft.Extensions.DependencyInjection -{ - public static class ServiceCollectionExtensions - { - public static IServiceCollection AddGlobalForServer(this IServiceCollection services) - { - services.AddScoped(); - return services; - } - - public static IServiceCollection AddGlobalForWasmAsync(this IServiceCollection services, string baseUri) - { - services.AddScoped(); - return services; - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Masa.Alert.Web.Admin.csproj b/src/Web/Masa.Alert.Web.Admin/Masa.Alert.Web.Admin.csproj deleted file mode 100644 index 9c4307fc..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Masa.Alert.Web.Admin.csproj +++ /dev/null @@ -1,44 +0,0 @@ - - - - enable - enable - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - - diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/AlarmHistoryManagement.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/AlarmHistoryManagement.razor deleted file mode 100644 index c80abbfd..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/AlarmHistoryManagement.razor +++ /dev/null @@ -1,131 +0,0 @@ -@inherits AdminCompontentBase -@page "/alarmHistory" -@page "/alarmHistory/{AlarmRuleId}" -@T("AlarmHistory") - - - - - - @foreach (var item in Enum.GetValues()) - { - - @T(item.ToString()) - - } - - - - - - - - - - - - - @if (_queryParam.SearchType == AlarmHistorySearchTypes.Alarming) - { - - - - - } - @if (_queryParam.SearchType == AlarmHistorySearchTypes.Processed) - { - - - - } - - - - - - - - @header.Text - - - @switch (context.Header.Value) - { - case nameof(AlarmHistoryListViewModel.AlertSeverity): - - break; - case nameof(AlarmHistoryListViewModel.HandleStatus): - - break; - case nameof(AlarmHistoryQueryModel.RecoveryTime): - - - @context.Item.Handle.HandlerName @context.Item.RecoveryTime?.ToOffset(JsInitVariables.TimezoneOffset).ToString(T("$TimeFormat")) - @context.Item.RecoveryTime?.ToOffset(JsInitVariables.TimezoneOffset).ToString(T("$DateFormat")) - - - break; - case "Action": - @if (context.Item.HandleStatus == AlarmHistoryHandleStatuses.Pending && _queryParam.SearchType!= AlarmHistorySearchTypes.NoNotice) - { - - mdi-account-check - - } - else - { - - mdi-eye - - } - break; - default: - - break; - } - - - - - - - - - - - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/AlarmHistoryManagement.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/AlarmHistoryManagement.razor.cs deleted file mode 100644 index 9ad0bf97..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/AlarmHistoryManagement.razor.cs +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Pages.AlarmHistory; - -public partial class AlarmHistoryManagement : AdminCompontentBase -{ - [Parameter] - public string AlarmRuleId { get; set; } = string.Empty; - - private GetAlarmHistoryInputDto _queryParam = new(10); - private PaginatedListDto _entities = new(); - private AlarmHistoryDetailModal? _detailModal; - private HandleAlarmModal? _handleAlarmModal; - private List _timeTypeItems = Enum.GetValues().Where(x => x != AlarmHistorySearchTimeTypes.ProcessingCompletedTime).ToList(); - private List _handleStatusItems = Enum.GetValues().ToList(); - - AlarmHistoryService AlarmHistoryService => AlertCaller.AlarmHistoryService; - AlarmRuleService AlarmRuleService => AlertCaller.AlarmRuleService; - - protected override string? PageName { get; set; } = "AlarmHistoryBlock"; - - private SDataTable _dataTableRef; - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - await LoadData(); - } - await base.OnAfterRenderAsync(firstRender); - } - - protected override async void OnParametersSet() - { - _queryParam.AlarmRuleId = string.IsNullOrEmpty(AlarmRuleId) ? null : Guid.Parse(AlarmRuleId); - - if (_queryParam.AlarmRuleId.HasValue) - { - var alarmRule = await AlarmRuleService.GetAsync(_queryParam.AlarmRuleId.Value); - _queryParam.Filter = alarmRule?.DisplayName ?? string.Empty; - } - else - { - _queryParam.Filter = string.Empty; - } - } - - public List> GetHeaders() - { - List> _headers = new(); - - if (_queryParam.SearchType == AlarmHistorySearchTypes.Alarming) - { - _headers = new() - { - new() { Text = T(nameof(AlarmHistoryListViewModel.AlertSeverity)), Value = nameof(AlarmHistoryListViewModel.AlertSeverity),Sortable=false, Width = "7rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.DisplayName)), Value = nameof(AlarmHistoryListViewModel.DisplayName),Sortable=false, Width = "9rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.FirstAlarmTime)), Value = nameof(AlarmHistoryListViewModel.FirstAlarmTime), Width = "7rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.AlarmCount)), Value = nameof(AlarmHistoryListViewModel.AlarmCount), Width = "6.5625rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.LastAlarmTime)), Value = nameof(AlarmHistoryListViewModel.LastAlarmTime), Width = "7rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.HandleStatus)), Value = nameof(AlarmHistoryListViewModel.HandleStatus), Sortable = false, Width = "11rem"}, - new() { Text = T("Action"), Value = "Action",Sortable=false,Width=105}, - }; - } - else if (_queryParam.SearchType == AlarmHistorySearchTypes.Processed) - { - _headers = new() - { - new() { Text = T(nameof(AlarmHistoryListViewModel.AlertSeverity)), Value = nameof(AlarmHistoryListViewModel.AlertSeverity),Sortable=false, Width = "6.5625rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.DisplayName)), Value = nameof(AlarmHistoryListViewModel.DisplayName),Sortable=false, Width = "8rem"}, - new() { Text = T("HandleCompletionTime"), Value = nameof(AlarmHistoryQueryModel.RecoveryTime), Width = "10rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.FirstAlarmTime)), Value = nameof(AlarmHistoryListViewModel.FirstAlarmTime), Width = "7rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.AlarmCount)), Value = nameof(AlarmHistoryListViewModel.AlarmCount), Width = "6.5625rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.LastAlarmTime)), Value = nameof(AlarmHistoryListViewModel.LastAlarmTime), Width = "7rem"}, - new() { Text = T("Action"), Value = "Action",Sortable=false,Width=105}, - }; - } - else - { - _headers = new() - { - new() { Text = T(nameof(AlarmHistoryListViewModel.AlertSeverity)), Value = nameof(AlarmHistoryListViewModel.AlertSeverity),Sortable=false, Width = "6.5625rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.DisplayName)), Value = nameof(AlarmHistoryListViewModel.DisplayName),Sortable=false, Width = "10rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.FirstAlarmTime)), Value = nameof(AlarmHistoryListViewModel.FirstAlarmTime), Width = "6.5625rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.AlarmCount)), Value = nameof(AlarmHistoryListViewModel.AlarmCount), Width = "6.5625rem"}, - new() { Text = T(nameof(AlarmHistoryListViewModel.LastAlarmTime)), Value = nameof(AlarmHistoryListViewModel.LastAlarmTime), Width = "6.5625rem"}, - new() { Text = T("Action"), Value = "Action",Sortable=false,Width=105}, - }; - } - return _headers; - } - - private async Task LoadData() - { - Loading = true; - - var queryParam = _queryParam.Adapt() ?? new(); - queryParam.StartTime = queryParam.StartTime?.Add(JsInitVariables.TimezoneOffset); - queryParam.EndTime = queryParam.EndTime?.Add(JsInitVariables.TimezoneOffset); - - var dtos = (await AlarmHistoryService.GetListAsync(queryParam)); - _entities = dtos?.Adapt>() ?? new(); - Loading = false; - StateHasChanged(); - } - - private Task DateRangChangedAsync((DateTimeOffset?, DateTimeOffset?) args) - { - (_queryParam.StartTime, _queryParam.EndTime) = (args.Item1?.UtcDateTime, args.Item2?.UtcDateTime); - return RefreshAsync(); - } - - private async Task RefreshAsync() - { - _queryParam.Page = 1; - await LoadData(); - } - - private async Task HandleClearAsync() - { - _queryParam = new(10); - await LoadData(); - } - - private async Task HandlePageChanged(int page) - { - _queryParam.Page = page; - await LoadData(); - } - - private async Task HandlePageSizeChanged(int pageSize) - { - _queryParam.PageSize = pageSize; - await LoadData(); - } - - private async Task HandleOk() - { - await LoadData(); - } - - private async Task HandleSearchTypeChange() - { - _queryParam = new() { Filter = _queryParam.Filter, SearchType = _queryParam.SearchType, AlarmRuleId = _queryParam.AlarmRuleId, Page = 1 }; - switch (_queryParam.SearchType) - { - case AlarmHistorySearchTypes.Alarming: - _timeTypeItems = Enum.GetValues().Where(x => x != AlarmHistorySearchTimeTypes.ProcessingCompletedTime).ToList(); - _handleStatusItems = new List { AlarmHistoryHandleStatuses.Pending, AlarmHistoryHandleStatuses.InProcess }; - _queryParam.TimeType = default; - - _queryParam.Sorting = $"{nameof(AlarmHistoryQueryModel.AlertSeverity)} asc,{nameof(AlarmHistoryQueryModel.Id)} desc"; - break; - case AlarmHistorySearchTypes.Processed: - _timeTypeItems = Enum.GetValues().ToList(); - _handleStatusItems = Enum.GetValues().ToList(); - _queryParam.TimeType = AlarmHistorySearchTimeTypes.ProcessingCompletedTime; - - _queryParam.Sorting = $"{nameof(AlarmHistoryQueryModel.RecoveryTime)} desc"; - break; - case AlarmHistorySearchTypes.NoNotice: - _timeTypeItems = Enum.GetValues().Where(x => x != AlarmHistorySearchTimeTypes.ProcessingCompletedTime).ToList(); - _handleStatusItems = Enum.GetValues().ToList(); - _queryParam.TimeType = default; - - _queryParam.Sorting = $"{nameof(AlarmHistoryQueryModel.LastAlarmTime)} desc"; - break; - default: - break; - } - - await RefreshAsync(); - } - - private async Task HandleOnOptionsUpdate(DataOptions options) - { - var sortBy = options.SortBy; - var sorting = new StringBuilder(); - - for (int i = 0; i < sortBy.Count; i++) - { - if (i > 0) - { - sorting.AppendLine(","); - } - var sortDesc = options.SortDesc[i] ? "desc" : "asc"; - sorting.AppendLine($"{sortBy[i]} {sortDesc}"); - } - - _queryParam.Sorting = sorting.ToString(); - - await RefreshAsync(); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetail.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetail.razor deleted file mode 100644 index 8ee01442..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetail.razor +++ /dev/null @@ -1,125 +0,0 @@ -@inherits AdminCompontentBase - -@T("CheckFrequency") -
- - @if (AlarmHistory.AlarmRule.CheckFrequency.Type == AlarmCheckFrequencyTypes.FixedInterval) - { - @AlarmHistory.AlarmRule.CheckFrequency.FixedInterval.IntervalTime @T(AlarmHistory.AlarmRule.CheckFrequency.FixedInterval.IntervalTimeType.ToString()) - } - @if (AlarmHistory.AlarmRule.CheckFrequency.Type == AlarmCheckFrequencyTypes.Cron) - { - @AlarmHistory.AlarmRule.CheckFrequency.CronExpression - } - - @T(AlarmHistory.AlarmRule.CheckFrequency.Type.ToString()) -
-@T("VariableInfo") -@if (AlarmHistory.AlarmRule.Type == AlarmRuleTypes.Log) -{ - @foreach (var item in AlarmHistory.AlarmRule.LogMonitorItems) - { -
-
- @item.Alias -
-
- @item.Field - @T("Count") - @(item.IsOffset ? string.Format(T("OffsetPeriod"), item.OffsetPeriod) : string.Empty) -
-
- } -} -@if (AlarmHistory.AlarmRule.Type == AlarmRuleTypes.Metric) -{ - @foreach (var item in AlarmHistory.AlarmRule.MetricMonitorItems) - { -
- @if (item.IsExpression) - { -
- @item.Expression -
-
- @item.Alias - @(item.IsOffset ? string.Format(T("OffsetPeriod"), item.OffsetPeriod) : string.Empty) -
- } - else - { -
- @item.Alias -
-
- @item.Aggregation.Name - @item.Aggregation.Tag @T(item.Aggregation.ComparisonOperator.ToString()) @item.Aggregation.Value - @T(item.Aggregation.AggregationType.ToString()) - @(item.IsOffset ? string.Format(T("OffsetPeriod"), item.OffsetPeriod) : string.Empty) -
- } -
- } -} -@T("AlarmInfo") -
-
- @T("AlarmTime") -
-
- @AlarmHistory.LastAlarmTime.ToOffset(JsInitVariables.TimezoneOffset).ToString(T("$DateTimeFormat")) -
-
-@T("TriggerRules") -@foreach (var item in AlarmHistory.RuleResultItems) -{ -
-
- -
-
-
- - - @T("AlarmNotification") - - - - - @T("RecoveryNotification") - - -
-
-
-
-
- @if (!string.IsNullOrEmpty(item.AlarmRuleItem.Expression)) - { - - } -
-
@T("TriggerRules")
-
-} -@if (HandleStatusShow) -{ -
- @T("HandleDetails") - - @if (!AlarmHistory.HandleStatusCommits.Any(x => x.Status == AlarmHistoryHandleStatuses.ProcessingCompleted)) - { - - @IconConstants.Update - @T("ChangeAlarmHandle") - - } -
- - - - - - - -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetail.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetail.razor.cs deleted file mode 100644 index 4385937e..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetail.razor.cs +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Pages.AlarmHistory.Modules; - -public partial class AlarmHistoryDetail : AdminCompontentBase -{ - protected override string? PageName { get; set; } = "AlarmHistoryBlock"; - - [Parameter] - public AlarmHistoryViewModel AlarmHistory { get; set; } = new(); - - [Parameter] - public bool HandleStatusShow { get; set; } - - private bool _handleAlarmVisible; - - private HandleAlarm? _handleDetail; - - private AlarmHistoryService AlarmHistoryService => AlertCaller.AlarmHistoryService; - - private void HandleOnClick(AlarmRuleRecordListViewModel record) - { - AlarmHistory.RuleResultItems = record.RuleResultItems; - AlarmHistory.LastAlarmTime = record.CreationTime.ToLocalTime(); - } - - private void HandleChange() - { - _handleAlarmVisible = true; - } - - private async Task HandleDetailSaveAsync() - { - Check.NotNull(_handleDetail, "form not found"); - - var handleResult = await _handleDetail.Submit(); - - if (!handleResult) - return; - - _handleAlarmVisible = false; - - await GetFormDataAsync(); - } - - private async Task GetFormDataAsync() - { - var alarmHistory = await AlarmHistoryService.GetAsync(AlarmHistory.Id); - AlarmHistory = alarmHistory.Adapt(); - } - - private void HandleAlarmVisibleChanged(bool val) - { - if (!val) - _handleAlarmVisible = false; - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetailModal.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetailModal.razor deleted file mode 100644 index 6e203cdd..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetailModal.razor +++ /dev/null @@ -1,21 +0,0 @@ -@inherits AdminCompontentBase - - - - - @T("AlarmDetails") - - - - - - - @if (_entityId != default) - { - - mdi-delete - - } - - diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetailModal.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetailModal.razor.cs deleted file mode 100644 index fb42fe34..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/AlarmHistoryDetailModal.razor.cs +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Pages.AlarmHistory.Modules; - -public partial class AlarmHistoryDetailModal : AdminCompontentBase -{ - [Parameter] - public EventCallback OnOk { get; set; } - - private bool _visible; - private Guid _entityId; - private AlarmHistoryViewModel _model = new(); - - AlarmHistoryService AlarmHistoryService => AlertCaller.AlarmHistoryService; - - protected override string? PageName { get; set; } = "AlarmHistoryBlock"; - - public async Task OpenModalAsync(AlarmHistoryListViewModel? listModel = null) - { - _entityId = listModel?.Id ?? default; - _model = listModel?.Adapt() ?? new(); - - if (_entityId != default) - { - await GetFormDataAsync(); - } - - await InvokeAsync(() => - { - _visible = true; - StateHasChanged(); - }); - } - - private async Task GetFormDataAsync() - { - var dto = await AlarmHistoryService.GetAsync(_entityId) ?? new(); - _model = dto.Adapt(); - } - - private void HandleCancel() - { - _visible = false; - } - - private void HandleVisibleChanged(bool val) - { - if (!val) HandleCancel(); - } - - private async Task HandleDel() - { - await ConfirmAsync(T("DeletionConfirmationMessage", $"{T("AlarmHistory")}"), DeleteAsync, AlertTypes.Error); - } - - private async Task DeleteAsync() - { - Loading = true; - await AlarmHistoryService.DeleteAsync(_entityId); - Loading = false; - await SuccessMessageAsync(T("DeletedSuccessfullyMessage")); - _visible = false; - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarm.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarm.razor deleted file mode 100644 index 7145ab38..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarm.razor +++ /dev/null @@ -1,97 +0,0 @@ -@inherits AdminCompontentBase - - - - - - - @T("Processed") - - -
-
- - @if (Value.IsHandleNotice) - { - - } -
-
- - - @T("ThirdPartyProcessing") - - -
-
- - -
-
- - @if (Value.IsHandleNotice) - { - - } -
-
-
-
-
- -@code { - [Parameter] - public AlarmHandleViewModel Value { get; set; } = default!; - - [Parameter] - public Guid AlarmRuleId { get; set; } - - private MForm? _form { get; set; } - - private AlarmHistoryService AlarmHistoryService => AlertCaller.AlarmHistoryService; - - protected override string? PageName { get; set; } = "AlarmHistoryBlock"; - - public async Task Submit() - { - Check.NotNull(_form, "form not found"); - - if (!_form.Validate()) - { - return false; - } - - Loading = true; - - if (!Value.IsThirdParty) - { - Value.WebHookId = default; - } - - var inputDto = Value.Adapt(); - - try - { - await AlarmHistoryService.HandleAsync(AlarmRuleId, inputDto); - } - catch (Exception ex) - { - Loading = false; - await PopupService.EnqueueSnackbarAsync(ex.Message, AlertTypes.Error); - return false; - } - - Loading = false; - - ResetForm(); - - await SuccessMessageAsync(T("OperationSuccessfulMessage")); - - return true; - } - - private void ResetForm() - { - Value = new(); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarmModal.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarmModal.razor deleted file mode 100644 index 08ce20fe..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarmModal.razor +++ /dev/null @@ -1,30 +0,0 @@ -@inherits AdminCompontentBase - - - - - - -
- -
-
-
-
- - - - - - - -
-
- - @if (_tab == T("HandleAlarm")) - { - @T("HandleAlarm") - } - -
diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarmModal.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarmModal.razor.cs deleted file mode 100644 index 77794c0a..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/HandleAlarmModal.razor.cs +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Pages.AlarmHistory.Modules; - -public partial class HandleAlarmModal : AdminCompontentBase -{ - [Parameter] - public EventCallback OnOk { get; set; } - - private bool _visible; - private Guid _entityId; - private AlarmHistoryViewModel _model = new(); - private AlarmHandleViewModel _handle = new(); - private string _tab = ""; - private HandleAlarm? _handleDetail; - - AlarmHistoryService AlarmHistoryService => AlertCaller.AlarmHistoryService; - - protected override string? PageName { get; set; } = "AlarmHistoryBlock"; - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - _tab = T("AlarmDetails"); - } - await base.OnAfterRenderAsync(firstRender); - } - - public async Task OpenModalAsync(AlarmHistoryListViewModel? listModel = null) - { - _entityId = listModel?.Id ?? default; - _model = listModel?.Adapt() ?? new(); - - if (_entityId != default) - { - await GetFormDataAsync(); - } - - await InvokeAsync(() => - { - _visible = true; - StateHasChanged(); - }); - } - - private async Task GetFormDataAsync() - { - var dto = await AlarmHistoryService.GetAsync(_entityId) ?? new(); - _model = dto.Adapt(); - _handle = _model.Handle; - } - - private void HandleCancel() - { - _visible = false; - ResetForm(); - } - - private void ResetForm() - { - _tab = T("AlarmDetails"); - } - - private void HandleVisibleChanged(bool val) - { - if (!val) HandleCancel(); - } - - private async void HandleAlarm() - { - Check.NotNull(_handleDetail, "form not found"); - - var handleResult = await _handleDetail.Submit(); - - if (!handleResult) - return; - - _visible = false; - - ResetForm(); - - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - } - - private async Task HandleDel() - { - await ConfirmAsync(T("DeletionConfirmationMessage", $"{T("AlarmHistory")}"), DeleteAsync, AlertTypes.Error); - } - - private async Task DeleteAsync() - { - Loading = true; - await AlarmHistoryService.DeleteAsync(_entityId); - Loading = false; - await SuccessMessageAsync(T("DeletedSuccessfullyMessage")); - _visible = false; - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/StatusTimeline.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/StatusTimeline.razor deleted file mode 100644 index ac9ee619..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/StatusTimeline.razor +++ /dev/null @@ -1,48 +0,0 @@ -@inherits AdminCompontentBase -
- - @foreach (var item in _statusCommits) - { - - -
@T(item.Status.ToString())
-
- - - - -
-
@item.Remarks
-
@item.CreationTime.ToOffset(JsInitVariables.TimezoneOffset).ToString(T("$DateTimeFormat"))
-
-
-
- } -
-
- -@code { - [Parameter] - public List StatusCommits { get; set; } = new(); - - private List _statusCommits => StatusCommits.OrderByDescending(x => x.CreationTime).ToList(); - - private string _class = string.Empty; - - private string GetStatusColor(AlarmHistoryHandleStatuses Status) - { - switch (Status) - { - case AlarmHistoryHandleStatuses.Notified: - return "info--text"; - case AlarmHistoryHandleStatuses.ProcessingCompleted: - return "success--text"; - case AlarmHistoryHandleStatuses.InProcess: - return "primary--text"; - case AlarmHistoryHandleStatuses.Pending: - return "remind--text"; - default: - return ""; - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/StatusTimeline.razor.css b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/StatusTimeline.razor.css deleted file mode 100644 index b90cd5e5..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmHistory/Modules/StatusTimeline.razor.css +++ /dev/null @@ -1,19 +0,0 @@ -.status-time-line { - margin-left: -430px; -} - - .status-time-line ::deep .m-timeline-item__dot { - box-shadow: none; - } - - .status-time-line ::deep .m-timeline-item__dot { - background: transparent !important; - } - - .status-time-line ::deep .m-timeline-item__inner-dot { - background-color: transparent !important; - } - - .status-time-line ::deep .m-icon { - background: #ffff !important; - } diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/AlarmRuleManagement.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/AlarmRuleManagement.razor deleted file mode 100644 index a8d7022c..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/AlarmRuleManagement.razor +++ /dev/null @@ -1,126 +0,0 @@ -@inherits AdminCompontentBase -@page "/alarmRules" - -@T("AlarmRule") - - - - - - @foreach (var item in Enum.GetValues()) - { - - @T(item.ToString()) - - } - - - - - - - - - @if (_queryParam.Type == AlarmRuleTypes.Log) - { - - - - - - - - - } - @if (_queryParam.Type == AlarmRuleTypes.Metric) - { - - - - - - - - } - - - - - @if (!_showEmptyPlaceholder) - { - - @foreach (var _entitie in _entities.Result) - { - - - - } - - } - else - { - - } - - -
- @if (!_showEmptyPlaceholder) - { - - } -
-
-
- - - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/AlarmRuleManagement.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/AlarmRuleManagement.razor.cs deleted file mode 100644 index 7173e4e4..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/AlarmRuleManagement.razor.cs +++ /dev/null @@ -1,227 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Pages.AlarmRules; - -public partial class AlarmRuleManagement : AdminCompontentBase -{ - [Inject] - public IAuthClient AuthClient { get; set; } = default!; - - [Inject] - public IPmClient PmClient { get; set; } = default!; - - [Inject] - public ITscClient TscClient { get; set; } = default!; - - private GetAlarmRuleInputDto _queryParam = new(20); - private PaginatedListDto _entities = new(); - private LogAlarmRuleUpsertModal? _logUpsertModal; - private MetricAlarmRuleUpsertModal? _metricUpsertModal; - private List _projects = new(); - private List> _projectItems = new(); - private List> _appsItems = new(); - private List> _metricItems = new(); - - AlarmRuleService AlarmRuleService => AlertCaller.AlarmRuleService; - - protected override string? PageName { get; set; } = "AlarmRuleBlock"; - - private bool _showEmptyPlaceholder = false; - - private readonly AsyncTaskQueue _asyncTaskQueue; - - public AlarmRuleManagement() - { - _asyncTaskQueue = new AsyncTaskQueue - { - AutoCancelPreviousTask = true, - UseSingleThread = true - }; - } - - protected async override Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - await InitData(); - } - await base.OnAfterRenderAsync(firstRender); - } - - - protected override void OnInitialized() - { - base.OnInitialized(); - MasaGlobalConfig.CurrentTeamId = MasaUser.CurrentTeamId; - MasaGlobalConfig.OnCurrentTeamChanged += OnTeamChanged; - } - - private void OnTeamChanged(Guid teamId) - { - MasaGlobalConfig.CurrentTeamId = teamId; - _ = InvokeAsync(async () => - { - await LoadProjectAppsAsync(); - await LoadData(); - StateHasChanged(); - }); - } - public async Task InitData() - { - await LoadData(); - await LoadProjectAppsAsync(); - _metricItems = (await TscClient.MetricService.GetNamesAsync(null)).Select(x => new SelectItem(x, x)).ToList(); - } - - private async Task LoadProjectAppsAsync() - { - _projects = await PmClient.ProjectService.GetListByTeamIdsAsync(new List { MasaGlobalConfig.CurrentTeamId }, MultiEnvironmentUserContext.Environment!); - _projectItems = _projects.Select(x => new SelectItem(x.Identity, x.Name)).ToList(); - if (!string.IsNullOrEmpty(_queryParam.ProjectIdentity) && !_projects.Exists(project => project.Identity == _queryParam.ProjectIdentity)) - _queryParam.ProjectIdentity = default!; - if (!string.IsNullOrEmpty(_queryParam.AppIdentity) && (string.IsNullOrEmpty(_queryParam.ProjectIdentity) || !_projectItems.Exists(app => app.Value == _queryParam.AppIdentity))) - _queryParam.AppIdentity = default!; - } - - private async Task LoadData() - { - Loading = true; - _showEmptyPlaceholder = false; - var result = await _asyncTaskQueue.ExecuteAsync(async () => - { - var queryParam = _queryParam.Adapt() ?? new(); - queryParam.TeamId = MasaGlobalConfig.CurrentTeamId; - queryParam.StartTime = queryParam.StartTime?.Add(JsInitVariables.TimezoneOffset); - queryParam.EndTime = queryParam.EndTime?.Add(JsInitVariables.TimezoneOffset); - var dtos = (await AlarmRuleService.GetListAsync(queryParam)); - return dtos; - }); - if (result.IsValid) - { - var paginatedListDto = result.result?.Adapt>() ?? new(); - paginatedListDto = await FillNotifier(paginatedListDto); - _entities = paginatedListDto; - Loading = false; - _showEmptyPlaceholder = !_entities.Result.Any(); - StateHasChanged(); - } - } - - private async Task> FillNotifier(PaginatedListDto alarmRules) - { - var userIds = new List(); - - foreach (var rule in alarmRules.Result) - { - foreach (var item in rule.Items) - { - userIds.AddRange(item.NotificationConfig.Receivers); - } - } - - var users = await AuthClient.UserService.GetListByIdsAsync(userIds.Distinct().ToArray()); - - foreach (var rule in alarmRules.Result) - { - foreach (var item in rule.Items) - { - var notifiers = users.Where(x => item.NotificationConfig.Receivers.Contains(x.Id)); - rule.Notifiers.AddRange(notifiers); - } - } - - return alarmRules; - } - - private async Task HandleOk() - { - await LoadData(); - } - - private Task DateRangChangedAsync((DateTimeOffset?, DateTimeOffset?) args) - { - (_queryParam.StartTime, _queryParam.EndTime) = (args.Item1?.UtcDateTime, args.Item2?.UtcDateTime); - return RefreshAsync(); - } - - private async Task RefreshAsync() - { - _queryParam.Page = 1; - await LoadData(); - } - - private async Task HandlePageChanged(int page) - { - _queryParam.Page = page; - await LoadData(); - } - - private async Task HandlePageSizeChanged(int pageSize) - { - _queryParam.PageSize = pageSize; - await LoadData(); - } - - private async Task HandleClearAsync() - { - _queryParam = new(20); - await LoadData(); - } - - private async Task HandleAdd() - { - if (_queryParam.Type == AlarmRuleTypes.Log) - { - await _logUpsertModal?.OpenModalAsync()!; - } - - if (_queryParam.Type == AlarmRuleTypes.Metric) - { - await _metricUpsertModal?.OpenModalAsync()!; - } - } - - private async Task HandleEdit(AlarmRuleListViewModel item) - { - if (item.Type == AlarmRuleTypes.Log) - { - await _logUpsertModal?.OpenModalAsync(item)!; - } - - if (item.Type == AlarmRuleTypes.Metric) - { - await _metricUpsertModal?.OpenModalAsync(item)!; - } - } - - private async Task HandleProjectChange() - { - await RefreshAsync(); - - var projectId = _projects.Find(x => x.Identity == _queryParam.ProjectIdentity)?.Id; - - if (projectId == null) - { - return; - } - - _appsItems = (await PmClient.AppService.GetListByProjectIdsAsync(new List { projectId.Value })).Select(x => new SelectItem(x.Identity, x.Name)).ToList(); - } - - private async Task HandleTypeChange() - { - _queryParam = new(20) - { - Type = _queryParam.Type - }; - - await RefreshAsync(); - } - - protected override ValueTask DisposeAsyncCore() - { - MasaGlobalConfig.OnCurrentTeamChanged -= OnTeamChanged; - return base.DisposeAsyncCore(); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/AlarmRuleCard.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/AlarmRuleCard.razor deleted file mode 100644 index 4a620692..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/AlarmRuleCard.razor +++ /dev/null @@ -1,144 +0,0 @@ -@inherits AdminCompontentBase - - - - - @AlarmRule.DisplayName - - - - - - mdi-dots-vertical - - - - - - - - @T("Edit") - - - - - - - @T("AlarmHistory") - - - - @if (AlarmRule.IsEnabled) - { - - - - @T("Disable") - - - - } - @if (!AlarmRule.IsEnabled) - { - - - - @T("Enabled") - - - - } - - - - - - - - -
- @if (AlarmRule.Type == AlarmRuleTypes.Log) - { - - @AlarmRule.ProjectIdentity - - - @AlarmRule.AppIdentity - - } - @if (AlarmRule.Type == AlarmRuleTypes.Metric) - { - foreach (var item in _metricMonitorItems) - { - - @item.Aggregation.Name - - } - } -
-
- - @if (AlarmRule.Notifiers.Any()) - { - mdi-bell -
- @foreach (var item in AlarmRule.Notifiers) - { - - - - - - - - @item.DisplayName - - - } -
- - } - - @AlarmRule.ModificationTime.Humanize(culture:I18n.Culture) - - - - @AlarmRule.ModifierName -
-
- -@code { - [Parameter] - public int Height { get; set; } = 168; - - [EditorRequired] - [Parameter] - public AlarmRuleListViewModel AlarmRule { get; set; } = null!; - - [Parameter] - public EventCallback OnEdit { get; set; } - - private List _metricMonitorItems => AlarmRule.MetricMonitorItems.Where(x => !string.IsNullOrEmpty(x.Aggregation.Name)).Take(5).ToList(); - - AlarmRuleService AlarmRuleService => AlertCaller.AlarmRuleService; - - private async Task HandleEdit() - { - if (OnEdit.HasDelegate) - { - await OnEdit.InvokeAsync(); - } - } - - private async Task HandleDisable() - { - await AlarmRuleService.SetIsEnabledAsync(AlarmRule.Id, false); - AlarmRule.IsEnabled = false; - } - - private async Task HandleEnabled() - { - await AlarmRuleService.SetIsEnabledAsync(AlarmRule.Id, true); - AlarmRule.IsEnabled = true; - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/AlarmRuleSetting.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/AlarmRuleSetting.razor deleted file mode 100644 index 5837f59f..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/AlarmRuleSetting.razor +++ /dev/null @@ -1,120 +0,0 @@ -@inherits AdminCompontentBase - -@T("BaseInfo") - -@T("TriggerRules") -@foreach (var item in Model.Items) -{ - -
- - - - - - - - - - - -
- - - @T("IsNotification") - - - - @if (item.IsNotification) - { - - } -
-
- - - @T("IsRecoveryNotification") - - - - @if (item.IsRecoveryNotification) - { - - } -
- -
- - mdi-plus - - @if (Model.Items.Count > 1) - { - - mdi-delete - - } -
-
-
-
-} -@T("AdvancedConfiguration") - - - - - - - - - - - - - - - - - - @if (Model.SilenceCycle.Type == SilenceCycleTypes.Time) - { - - - - - - - } - @if (Model.SilenceCycle.Type == SilenceCycleTypes.Cycle) - { - - - - @T("Period") - - - - } - - -@code { - [Parameter] - public AlarmRuleUpsertViewModel Model { get; set; } = new(); - - [Parameter] - public EventCallback ModelChanged { get; set; } - private List _items = new(); - - protected override string? PageName { get; set; } = "AlarmRuleBlock"; - - private void HandleItemsAdd(AlarmRuleItemViewModel item) - { - var index = Model.Items.IndexOf(item) + 1; - Model.Items.Insert(index, new AlarmRuleItemViewModel()); - } - - private void HandleItemsRemove(AlarmRuleItemViewModel item) - { - Model.Items.Remove(item); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogAlarmRuleUpsertModal.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogAlarmRuleUpsertModal.razor deleted file mode 100644 index 41449b7c..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogAlarmRuleUpsertModal.razor +++ /dev/null @@ -1,211 +0,0 @@ -@inherits AdminCompontentBase - - - - - - - @T("RelationRes") - - - - @T("MonitoringSetting") - - - - @T("AlarmSetting") - - - - - - - @T("SelectItem") - - @T("SelectApp") - - - - - - - - - @T("ChartSetting") - - - - @T("VariableConfiguration") - - - - - @if (_model.CheckFrequency.Type == AlarmCheckFrequencyTypes.FixedInterval) - { - - - - - - - } - @if (_model.CheckFrequency.Type == AlarmCheckFrequencyTypes.Cron) - { - - - - } - - @if (_model.CheckFrequency.Type == AlarmCheckFrequencyTypes.Cron && !string.IsNullOrEmpty(_model.CheckFrequency.CronExpression)) - { -
-

- - @T("NextRunTimeTip")

- @((MarkupString)_nextRunTimeStr) -
- } - - @foreach (var item in _model.LogMonitorItems) - { - - - - - @T("Count") - - - - - - - @T("as") - - - - - - - @T("Offset") - - - - @if (item.IsOffset) - { - - - @T("Period") - - - } - - -
-
- - mdi-plus - - @if (_model.LogMonitorItems.Count > 1) - { - - mdi-delete - - } -
-
-
- } - @T("LogFilter") - - -
-
-
- - - - - - - -
-
-
-
- - @if (_model.Step == 1) - { - @if (_entityId != default) - { - - mdi-delete - - } - } - @if (_model.Step == 2) - { - - fa:fas fa-chart-line - - - @if (_entityId != default) - { - - - - - mdi-delete - - } - } - @if (_model.Step == 3) - { - - - - - - fa:fas fa-chart-line - - - @if (_entityId != default) - { - - - - - mdi-delete - - } - } - - - @if (_model.Step == 1) - { - @T("NextStep") - } - @if (_model.Step == 2 ) - { - @T("PreviousStep") - @T("NextStep") - } - @if (_model.Step == 3) - { - @T("PreviousStep") - @T(_entityId == default?"Submit":"Save") - } - -
- - - - - - - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogAlarmRuleUpsertModal.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogAlarmRuleUpsertModal.razor.cs deleted file mode 100644 index b97c8597..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogAlarmRuleUpsertModal.razor.cs +++ /dev/null @@ -1,290 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -using Masa.BuildingBlocks.StackSdks.Config; -using Masa.Contrib.StackSdks.Config; - -namespace Masa.Alert.Web.Admin.Pages.AlarmRules.Modules; - -public partial class LogAlarmRuleUpsertModal : AdminCompontentBase -{ - [Parameter] - public EventCallback OnOk { get; set; } - - [Inject] - public IPmClient PmClient { get; set; } = default!; - - [Inject] - public ITscClient TscClient { get; set; } = default!; - - [Inject] - public IMasaStackConfig MasaStackConfig { get; set; } = default!; - - private MForm? _form; - private AlarmRuleUpsertViewModel _model = new(); - private bool _visible; - private Guid _entityId; - private bool _cronVisible; - private string _tempCron = string.Empty; - private string _nextRunTimeStr = string.Empty; - private AlarmPreviewChartModal? _previewChart; - private List _projectItems = new(); - private List _appItems = new(); - private List _fields = new(); - - AlarmRuleService AlarmRuleService => AlertCaller.AlarmRuleService; - - protected override string? PageName { get; set; } = "AlarmRuleBlock"; - - protected override void OnInitialized() - { - base.OnInitialized(); - MasaGlobalConfig.CurrentTeamId = MasaUser.CurrentTeamId; - MasaGlobalConfig.OnCurrentTeamChanged += OnTeamChanged; - } - - private void OnTeamChanged(Guid teamId) - { - MasaGlobalConfig.CurrentTeamId = teamId; - _ = InvokeAsync(async () => - { - await LoadProjectsAsync(); - StateHasChanged(); - }); - } - - protected override async Task OnInitializedAsync() - { - await base.OnInitializedAsync(); - - await LoadProjectsAsync(); - _fields = (await TscClient.LogService.GetMappingAsync()).ToList(); - } - - private async Task LoadProjectsAsync() - { - _projectItems = await PmClient.ProjectService.GetListByTeamIdsAsync(new List { MasaGlobalConfig.CurrentTeamId }, MultiEnvironmentUserContext.Environment!) ?? new(); - if (!string.IsNullOrEmpty(_model.ProjectIdentity) && !_projectItems.Exists(project => project.Identity == _model.ProjectIdentity)) - { - _model.ProjectIdentity = default!; - _appItems = new(); - } - } - - public async Task OpenModalAsync(AlarmRuleListViewModel? listModel = null) - { - _entityId = listModel?.Id ?? default; - _model = listModel?.Adapt() ?? new() { Source = MasaStackConfig.GetServiceId(MasaStackProject.Alert), Show = true }; - _model.Type = AlarmRuleTypes.Log; - - if (_entityId != default) - { - await GetFormDataAsync(); - } - - FillData(); - - await InvokeAsync(() => - { - _visible = true; - StateHasChanged(); - }); - - _form?.ResetValidation(); - } - - private async Task GetFormDataAsync() - { - var dto = await AlarmRuleService.GetAsync(_entityId) ?? new(); - _model = dto.Adapt(); - await HandleProjectChange(); - GetNextRunTime(); - } - - private void FillData() - { - if (!_model.LogMonitorItems.Any()) - { - _model.LogMonitorItems.Add(new LogMonitorItemViewModel()); - } - if (!_model.MetricMonitorItems.Any()) - { - _model.MetricMonitorItems.Add(new MetricMonitorItemViewModel()); - } - if (!_model.Items.Any()) - { - _model.Items.Add(new AlarmRuleItemViewModel()); - } - } - - private void HandleCancel() - { - _visible = false; - ResetForm(); - } - - private void ResetForm() - { - _model = new(); - } - - private void HandleVisibleChanged(bool val) - { - if (!val) HandleCancel(); - } - - private async Task SetCronExpression() - { - if (CronExpression.IsValidExpression(_tempCron)) - { - _model.CheckFrequency.CronExpression = _tempCron; - GetNextRunTime(); - _cronVisible = false; - } - else - { - await PopupService.EnqueueSnackbarAsync(T("CronExpressionInvalid"), AlertTypes.Error); - } - } - - private void GetNextRunTime(int showCount = 5) - { - if (!CronExpression.IsValidExpression(_model.CheckFrequency.CronExpression)) - { - _nextRunTimeStr = T("CronExpressionNotHasNextRunTime"); - return; - } - - var sb = new StringBuilder(); - - var startTime = DateTimeOffset.UtcNow; - - var cronExpression = new CronExpression(_model.CheckFrequency.CronExpression); - - var timezone = TimeZoneInfo.GetSystemTimeZones().FirstOrDefault(p => p.BaseUtcOffset == JsInitVariables.TimezoneOffset); - - if (timezone != null) - cronExpression.TimeZone = timezone; - - for (int i = 0; i < showCount; i++) - { - var nextExcuteTime = cronExpression.GetNextValidTimeAfter(startTime); - - if (nextExcuteTime.HasValue) - { - startTime = nextExcuteTime.Value; - sb.AppendLine(string.Format("

{0}

", startTime.ToOffset(JsInitVariables.TimezoneOffset).ToString("yyyy-MM-dd HH:mm:ss"))); - } - } - - if (sb.Length == 0) - { - _nextRunTimeStr = T("CronExpressionNotHasNextRunTime"); - } - else - { - _nextRunTimeStr = sb.ToString(); - } - - StateHasChanged(); - } - - private void OpenCronModal() - { - _cronVisible = true; - _tempCron = _model.CheckFrequency.CronExpression; - } - - private void HandleLogMonitorItemsAdd(LogMonitorItemViewModel item) - { - var index = _model.LogMonitorItems.IndexOf(item) + 1; - _model.LogMonitorItems.Insert(index, new LogMonitorItemViewModel()); - } - - private void HandleLogMonitorItemsRemove(LogMonitorItemViewModel item) - { - _model.LogMonitorItems.Remove(item); - } - - private async Task HandleOk() - { - Check.NotNull(_form, "form not found"); - - if (!_form.Validate()) - { - return; - } - - Loading = true; - - var inputDto = _model.Adapt(); - - if (_entityId == default) - { - await AlarmRuleService.CreateAsync(inputDto); - } - else - { - await AlarmRuleService.UpdateAsync(_entityId, inputDto); - } - - Loading = false; - _visible = false; - - ResetForm(); - - await UpsertSuccessfulMessage(_entityId, T("AlarmRule")); - - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - } - - private void HandleNextStep() - { - Check.NotNull(_form, "form not found"); - - if (!_form.Validate()) - { - return; - } - _model.Step++; - } - - private async Task HandleProjectChange() - { - var projectId = _projectItems.Find(x => x.Identity == _model.ProjectIdentity)?.Id; - if (projectId != null) - { - _appItems = await PmClient.AppService.GetListByProjectIdsAsync(new List { projectId.Value }) ?? new(); - if (!string.IsNullOrEmpty(_model.AppIdentity) && (string.IsNullOrEmpty(_model.ProjectIdentity) || !_appItems.Exists(app => app.Identity == _model.AppIdentity))) - _model.AppIdentity = default!; - } - } - - private async Task HandleDel() - { - await ConfirmAsync(T("DeletionConfirmationMessage", $"{T("AlarmRule")}\"{_model.DisplayName}\""), DeleteAsync, AlertTypes.Error); - } - - private async Task DeleteAsync() - { - Loading = true; - await AlarmRuleService.DeleteAsync(_entityId); - Loading = false; - await SuccessMessageAsync(T("DeletedSuccessfullyMessage")); - _visible = false; - ResetForm(); - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - } - - protected override ValueTask DisposeAsyncCore() - { - MasaGlobalConfig.OnCurrentTeamChanged -= OnTeamChanged; - return base.DisposeAsyncCore(); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogQueryExpression.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogQueryExpression.razor deleted file mode 100644 index 934ff907..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/LogQueryExpression.razor +++ /dev/null @@ -1,30 +0,0 @@ -
- -
- -@code { - [EditorRequired] - [Parameter] - public AlarmRuleUpsertViewModel AlarmRule { get; set; } = new(); - - public string _queryStr = "Query"; - - protected override void OnParametersSet() - { - var queryStr = string.IsNullOrEmpty(AlarmRule.WhereExpression) ? "{}" : AlarmRule.WhereExpression; - var aggsStr = "{"; - for (int i = 0; i < AlarmRule.LogMonitorItems.Count; i++) - { - if (i>0) - { - aggsStr += ","; - } - - var item = AlarmRule.LogMonitorItems[i]; - aggsStr += $"\"{item.Alias}\":{{\"value_count\":{{\"field\":\"{item.Field}\"}}}}"; - } - aggsStr += "}"; - - _queryStr = $"{{\"query\":{queryStr},\"aggs\":{aggsStr}}}"; - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/MetricAlarmRuleUpsertModal.razor b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/MetricAlarmRuleUpsertModal.razor deleted file mode 100644 index 072e4db9..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/MetricAlarmRuleUpsertModal.razor +++ /dev/null @@ -1,216 +0,0 @@ -@inherits AdminCompontentBase - - - - - - - @T("MonitoringSetting") - - - - @T("AlarmSetting") - - - - - - - - @T("ChartSetting") - - - - @T("VariableConfiguration") - - - - - @if (_model.CheckFrequency.Type == AlarmCheckFrequencyTypes.FixedInterval) - { - - - - - - - } - @if (_model.CheckFrequency.Type == AlarmCheckFrequencyTypes.Cron) - { - - - - } - - @if (_model.CheckFrequency.Type == AlarmCheckFrequencyTypes.Cron && !string.IsNullOrEmpty(_model.CheckFrequency.CronExpression)) - { -
-

- - @T("NextRunTimeTip") -

- @((MarkupString)_nextRunTimeStr) -
- } - - @foreach (var item in _model.MetricMonitorItems) - { - - - - @if (item.IsExpression) - { - - } - else - { - - - - - - - - - - - - - - - - - - - - - - } - - - - - @T("as") - - - - - - - @T("Offset") - - - @if (item.IsOffset) - { - - - - @T("Period") - - - - } - - - - - mdi-plus - - @if (_model.MetricMonitorItems.Count > 1) - { - - mdi-delete - - } - - - - } -
-
-
- - - - - - - -
-
-
-
- - @if (_model.Step == 1) - { - - mdi-chart-line - - - @if (_entityId != default) - { - - - - - mdi-delete - - } - } - @if (_model.Step == 2) - { - - - - - - mdi-chart-line - - - @if (_entityId != default) - { - - - - - mdi-delete - - } - } - - - @if (_model.Step == 1) - { - @T("NextStep") - } - @if (_model.Step == 2) - { - @T("PreviousStep") - @T(_entityId == default?"Submit":"Save") - } - -
- - - - - - - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/MetricAlarmRuleUpsertModal.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/MetricAlarmRuleUpsertModal.razor.cs deleted file mode 100644 index 4ecedebe..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/AlarmRules/Modules/MetricAlarmRuleUpsertModal.razor.cs +++ /dev/null @@ -1,290 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Pages.AlarmRules.Modules; - -public partial class MetricAlarmRuleUpsertModal : AdminCompontentBase -{ - [Parameter] - public EventCallback OnOk { get; set; } - - [Inject] - public ITscClient TscClient { get; set; } = default!; - - private MForm? _form; - private AlarmRuleUpsertViewModel _model = new(); - private bool _visible; - private Guid _entityId; - private bool _cronVisible; - private string _tempCron = string.Empty; - private string _nextRunTimeStr = string.Empty; - private List _items = new(); - private AlarmPreviewChartModal? _previewChart; - private List _names = new(); - private List _allNames = new(); - private string _search = ""; - - protected override string? PageName { get; set; } = "AlarmRuleBlock"; - - AlarmRuleService AlarmRuleService => AlertCaller.AlarmRuleService; - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - await LoadData(); - } - await base.OnAfterRenderAsync(firstRender); - } - - private async Task LoadData() - { - _allNames = (await TscClient.MetricService.GetNamesAsync(null)).ToList(); - } - - public async Task OpenModalAsync(AlarmRuleListViewModel? listModel = null) - { - _entityId = listModel?.Id ?? default; - _model = listModel?.Adapt() ?? new(); - _model.Type = AlarmRuleTypes.Metric; - - if (_entityId != default) - { - await GetFormDataAsync(); - } - FillData(); - await InvokeAsync(() => - { - _visible = true; - StateHasChanged(); - }); - - _form?.ResetValidation(); - } - - private async Task GetFormDataAsync() - { - var dto = await AlarmRuleService.GetAsync(_entityId) ?? new(); - _model = dto.Adapt(); - - InitNames(_model.MetricMonitorItems.Select(x => x.Aggregation.Name).ToList()); - - foreach (var item in _model.MetricMonitorItems) - { - if (string.IsNullOrEmpty(item.Aggregation.Name)) continue; - await HandleMetricNameChange(item.Aggregation.Name, item); - - if (string.IsNullOrEmpty(item.Aggregation.Tag)) continue; - HandleMetricTagChange(item.Aggregation.Tag, item); - } - GetNextRunTime(); - } - - private void FillData() - { - if (!_model.LogMonitorItems.Any()) - { - _model.LogMonitorItems.Add(new LogMonitorItemViewModel()); - } - if (!_model.MetricMonitorItems.Any()) - { - _model.MetricMonitorItems.Add(new MetricMonitorItemViewModel()); - } - if (!_model.Items.Any()) - { - _model.Items.Add(new AlarmRuleItemViewModel()); - } - } - - private void HandleCancel() - { - _visible = false; - ResetForm(); - } - - private void ResetForm() - { - _model = new(); - } - - private void HandleVisibleChanged(bool val) - { - if (!val) HandleCancel(); - } - - private async Task SetCronExpression() - { - if (CronExpression.IsValidExpression(_tempCron)) - { - _model.CheckFrequency.CronExpression = _tempCron; - GetNextRunTime(); - _cronVisible = false; - } - else - { - await PopupService.EnqueueSnackbarAsync(T("CronExpressionInvalid"), AlertTypes.Error); - } - } - - private void GetNextRunTime(int showCount = 5) - { - if (!CronExpression.IsValidExpression(_model.CheckFrequency.CronExpression)) - { - _nextRunTimeStr = T("CronExpressionNotHasNextRunTime"); - return; - } - - var sb = new StringBuilder(); - - var startTime = DateTimeOffset.UtcNow; - - var cronExpression = new CronExpression(_model.CheckFrequency.CronExpression); - - var timezone = TimeZoneInfo.GetSystemTimeZones().FirstOrDefault(p => p.BaseUtcOffset == JsInitVariables.TimezoneOffset); - - if (timezone != null) - cronExpression.TimeZone = timezone; - - for (int i = 0; i < showCount; i++) - { - var nextExcuteTime = cronExpression.GetNextValidTimeAfter(startTime); - - if (nextExcuteTime.HasValue) - { - startTime = nextExcuteTime.Value; - sb.AppendLine(string.Format("

{0}

", startTime.ToOffset(JsInitVariables.TimezoneOffset).ToString("yyyy-MM-dd HH:mm:ss"))); - } - } - - if (sb.Length == 0) - { - _nextRunTimeStr = T("CronExpressionNotHasNextRunTime"); - } - else - { - _nextRunTimeStr = sb.ToString(); - } - } - - private void OpenCronModal() - { - _cronVisible = true; - _tempCron = _model.CheckFrequency.CronExpression; - } - - private void HandleMetricMonitorItemsAdd(MetricMonitorItemViewModel item) - { - var index = _model.MetricMonitorItems.IndexOf(item) + 1; - _model.MetricMonitorItems.Insert(index, new MetricMonitorItemViewModel()); - } - - private void HandleMetricMonitorItemsRemove(MetricMonitorItemViewModel item) - { - _model.MetricMonitorItems.Remove(item); - } - - private async Task HandleMetricNameChange(string newVal, MetricMonitorItemViewModel item) - { - var query = new LableValuesRequest - { - Match = newVal, - Start = DateTime.Now.AddDays(-1), - End = DateTime.Now, - }; - var labelValues = (await TscClient.MetricService.GetLabelValuesAsync(query)); - item.Aggregation.LabelValues = labelValues; - item.Aggregation.TagItems = labelValues.Select(x => x.Key).ToList(); - } - - private void HandleMetricTagChange(string newVal, MetricMonitorItemViewModel item) - { - item.Aggregation.ValueItems = item.Aggregation.LabelValues.FirstOrDefault(x => x.Key == newVal).Value; - } - - private async Task HandleOk() - { - Check.NotNull(_form, "form not found"); - - if (!_form.Validate()) - { - return; - } - - Loading = true; - - var inputDto = _model.Adapt(); - - if (_entityId == default) - { - await AlarmRuleService.CreateAsync(inputDto); - } - else - { - await AlarmRuleService.UpdateAsync(_entityId, inputDto); - } - - Loading = false; - _visible = false; - - ResetForm(); - - await UpsertSuccessfulMessage(_entityId, T("AlarmRule")); - - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - } - - private void HandleNextStep() - { - Check.NotNull(_form, "form not found"); - - if (!_form.Validate()) - { - return; - } - _model.Step++; - } - - private async Task HandleDel() - { - await ConfirmAsync(T("DeletionConfirmationMessage", $"{T("AlarmRule")}\"{_model.DisplayName}\""), DeleteAsync, AlertTypes.Error); - } - - private async Task DeleteAsync() - { - Loading = true; - await AlarmRuleService.DeleteAsync(_entityId); - Loading = false; - await SuccessMessageAsync(T("DeletedSuccessfullyMessage")); - _visible = false; - ResetForm(); - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - } - - private async Task QueryNames(string search) - { - search = search.TrimStart(' ').TrimEnd(' '); - _search = search; - await Task.Delay(300); - if (search != _search) - { - return; - } - - Loading = true; - - _names = _allNames.Where(x => x.Contains(search)).ToList(); - StateHasChanged(); - Loading = false; - } - - private void InitNames(List names) - { - _names = _allNames.Where(x => names.Contains(x)).ToList(); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookCard.razor b/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookCard.razor deleted file mode 100644 index c91a9f3f..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookCard.razor +++ /dev/null @@ -1,62 +0,0 @@ -@inherits AdminCompontentBase - - - - - @WebHook.DisplayName - - - - @IconConstants.Update - - - mdi-bug - - - - - -
- @WebHook.Url -
-
- - - @WebHook.ModifierName - - - - @WebHook.ModificationTime.Humanize(culture:I18n.Culture) - -
- -@code { - [Parameter] - public int Height { get; set; } = 147; - - [EditorRequired] - [Parameter] - public WebHookListViewModel WebHook { get; set; } = null!; - - [Parameter] - public EventCallback OnEdit { get; set; } - - [Parameter] - public EventCallback OnTest { get; set; } - - private async Task HandleEdit() - { - if (OnEdit.HasDelegate) - { - await OnEdit.InvokeAsync(); - } - } - - private async Task HandleTest() - { - if (OnTest.HasDelegate) - { - await OnTest.InvokeAsync(); - } - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookTestModal.razor b/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookTestModal.razor deleted file mode 100644 index 5709e8bf..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookTestModal.razor +++ /dev/null @@ -1,20 +0,0 @@ -@inherits AdminCompontentBase - - - - - - @T("Test") - - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookTestModal.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookTestModal.razor.cs deleted file mode 100644 index a0e58d85..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookTestModal.razor.cs +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Pages.WebHooks.Modules; - -public partial class WebHookTestModal : AdminCompontentBase -{ - [Parameter] - public EventCallback OnOk { get; set; } - - private WebHookTestViewModal _model = new(); - private bool _visible; - - WebHookService WebHookService => AlertCaller.WebHookService; - - protected override string? PageName { get; set; } = "WebHookBlock"; - - public async Task OpenModalAsync(Guid webHookId) - { - _model.WebHookId = webHookId; - await InvokeAsync(() => - { - _visible = true; - StateHasChanged(); - }); - } - - private void HandleCancel() - { - _visible = false; - ResetForm(); - } - - private async Task HandleOkAsync() - { - Loading = true; - await WebHookService.TestAsync(_model.WebHookId, new WebHookTestDto { Handler = _model.UserId }); - Loading = false; - await SuccessMessageAsync(T("OperationSuccessfulMessage")); - _visible = false; - - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - ResetForm(); - } - - private void ResetForm() - { - _model = new(); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookUpsertModal.razor b/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookUpsertModal.razor deleted file mode 100644 index d7fdc765..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookUpsertModal.razor +++ /dev/null @@ -1,47 +0,0 @@ -@inherits AdminCompontentBase - - - - - -
- @T("SecretKey") - - - @_model.SecretKey - - - - mdi-refresh - -
- - - - -
-
-
-
- - @if (_entityId != default) - { - - mdi-delete - - } - - - @if (_entityId != default) - { - @T("Test") - } - @T(_entityId == default?"Submit":"Save") - -
- - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookUpsertModal.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookUpsertModal.razor.cs deleted file mode 100644 index 61e06de2..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/Modules/WebHookUpsertModal.razor.cs +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Pages.WebHooks.Modules; - -public partial class WebHookUpsertModal : AdminCompontentBase -{ - [Parameter] - public EventCallback OnOk { get; set; } - - private MForm? _form; - private WebHookUpsertViewModel _model = new(); - private bool _visible; - private Guid _entityId; - private WebHookTestModal? _testModal; - - protected override string? PageName { get; set; } = "WebHookBlock"; - - WebHookService WebHookService => AlertCaller.WebHookService; - - public async Task OpenModalAsync(WebHookListViewModel? listModel = null) - { - _entityId = listModel?.Id ?? default; - _model = listModel?.Adapt() ?? new(); - - if (_entityId != default) - { - await GetFormDataAsync(); - } - - await InvokeAsync(() => - { - _visible = true; - StateHasChanged(); - }); - - _form?.ResetValidation(); - } - - private async Task GetFormDataAsync() - { - var dto = await WebHookService.GetAsync(_entityId) ?? new(); - _model = dto.Adapt(); - } - - private void HandleCancel() - { - _visible = false; - ResetForm(); - } - - private void ResetForm() - { - _model = new(); - } - - private void HandleVisibleChanged(bool val) - { - if (!val) HandleCancel(); - } - - private void HandleRefresh() - { - _model.SecretKey = Guid.NewGuid().ToString(); - } - - private async Task HandleOk() - { - Check.NotNull(_form, "form not found"); - - if (!_form.Validate()) - { - return; - } - - Loading = true; - - var inputDto = _model.Adapt(); - - if (_entityId == default) - { - await WebHookService.CreateAsync(inputDto); - } - else - { - await WebHookService.UpdateAsync(_entityId, inputDto); - } - - Loading = false; - _visible = false; - - ResetForm(); - - await UpsertSuccessfulMessage(_entityId, T("WebHook")); - - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - } - - private async Task HandleDel() - { - await ConfirmAsync(T("DeletionConfirmationMessage", $"{T("WebHook")}\"{_model.DisplayName}\""), DeleteAsync, AlertTypes.Error); - } - - private async Task DeleteAsync() - { - Loading = true; - await WebHookService.DeleteAsync(_entityId); - Loading = false; - await SuccessMessageAsync(T("DeletedSuccessfullyMessage")); - _visible = false; - ResetForm(); - if (OnOk.HasDelegate) - { - await OnOk.InvokeAsync(); - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/WebHookManagement.razor b/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/WebHookManagement.razor deleted file mode 100644 index 97a8f1ea..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/WebHookManagement.razor +++ /dev/null @@ -1,38 +0,0 @@ -@inherits AdminCompontentBase -@page "/webHook" -@T("WebHook") - - - - - @T("WebHook") - - - - - @if (!_showEmptyPlaceholder) - { - - @foreach (var _entitie in _entities.Result) - { - - - - } - - } - else - { - - } - - - @if (!_showEmptyPlaceholder) - { - - } - - - - - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/WebHookManagement.razor.cs b/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/WebHookManagement.razor.cs deleted file mode 100644 index ab8c976e..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Pages/WebHooks/WebHookManagement.razor.cs +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Pages.WebHooks; - -public partial class WebHookManagement : AdminCompontentBase -{ - private GetWebHookInputDto _queryParam = new(20); - private PaginatedListDto _entities = new(); - private WebHookUpsertModal? _upsertModal; - private WebHookTestModal? _testModal; - protected override string? PageName { get; set; } = "WebHookBlock"; - - WebHookService WebHookService => AlertCaller.WebHookService; - - private bool _showEmptyPlaceholder = false; - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - await LoadData(); - } - await base.OnAfterRenderAsync(firstRender); - } - - private async Task LoadData() - { - Loading = true; - _showEmptyPlaceholder = false; - var dtos = (await WebHookService.GetListAsync(_queryParam)); - _entities = dtos?.Adapt>() ?? new(); - _showEmptyPlaceholder = !_entities.Result.Any(); - Loading = false; - StateHasChanged(); - } - - private async Task HandleOk() - { - await LoadData(); - } - - private async Task RefreshAsync() - { - _queryParam.Page = 1; - await LoadData(); - } - - private async Task HandlePageChanged(int page) - { - _queryParam.Page = page; - await LoadData(); - } - - private async Task HandlePageSizeChanged(int pageSize) - { - _queryParam.PageSize = pageSize; - await LoadData(); - } - - private async Task HandleClearAsync() - { - _queryParam = new(20); - await LoadData(); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Registers/AlarmHistoryRegister.cs b/src/Web/Masa.Alert.Web.Admin/Registers/AlarmHistoryRegister.cs deleted file mode 100644 index 65c91ccf..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Registers/AlarmHistoryRegister.cs +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.Registers; - -public class AlarmHistoryRegister : IRegister -{ - public void Register(TypeAdapterConfig config) - { - config.ForType().Map(dest => dest.DisplayName, src => src.AlarmRule.DisplayName); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Shared/AdminCompontentBase.cs b/src/Web/Masa.Alert.Web.Admin/Shared/AdminCompontentBase.cs deleted file mode 100644 index 3016eec0..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Shared/AdminCompontentBase.cs +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -using Masa.BuildingBlocks.Authentication.Identity; -using Masa.BuildingBlocks.StackSdks.Auth.Contracts; - -namespace Masa.Alert.Web.Admin; - -public abstract class AdminCompontentBase : Masa.Blazor.Core.MasaComponentBase -{ - private GlobalConfig? _globalConfig; - private AlertCaller? _alertCaller; - private NavigationManager? _navigationManager; - - [Inject] - public IPopupService PopupService { get; set; } = default!; - - [Inject] - public I18n I18n { get; set; } = default!; - - [Inject] - public GlobalConfig GlobalConfig - { - get - { - return _globalConfig ?? throw new Exception("please Inject GlobalConfig!"); - } - set - { - _globalConfig = value; - } - } - - [Inject] - public NavigationManager NavigationManager - { - get - { - return _navigationManager ?? throw new Exception("please Inject NavigationManager!"); - } - set - { - _navigationManager = value; - } - } - - [Inject] - public JsInitVariables JsInitVariables { get; set; } = default!; - - [CascadingParameter(Name = "Culture")] - private string Culture { get; set; } = null!; - - [Inject] - public AlertCaller AlertCaller - { - get - { - return _alertCaller ?? throw new Exception("please Inject AlertCaller!"); - } - set - { - _alertCaller = value; - } - } - - [Inject] - public MasaGlobalConfig MasaGlobalConfig { get; set; } = default!; - - [Inject] - public IMultiEnvironmentUserContext MultiEnvironmentUserContext { get; set; } = default!; - - [Inject] - public MasaUser MasaUser { get; set; } = null!; - - protected bool IsPage = false; - - protected override void OnInitialized() - { - base.OnInitialized(); - MasaGlobalConfig.CurrentTeamId = MasaUser.CurrentTeamId; - } - - public bool Loading - { - get => GlobalConfig.Loading; - set => GlobalConfig.Loading = value; - } - - public string LoadingText - { - get => GlobalConfig.LoadingText; - set => GlobalConfig.LoadingText = value; - } - - protected virtual string? PageName { get; set; } - - public string T(string key) - { - if (string.IsNullOrEmpty(key)) return key; - if (PageName is not null) return I18n.T(PageName, key, false) ?? I18n.T(key, false) ?? key; - else return I18n.T(key, true); - } - - public string T(string formatkey, params string[] args) - { - return string.Format(T(formatkey), args); - } - - public HubConnection? HubConnection { get; set; } - - public async Task UpsertSuccessfulMessage(Guid entityId, string displayName) - { - if (entityId == default) - { - await SuccessMessageAsync(T("CreateSuccessfulMessage", displayName)); - } - else - { - await SuccessMessageAsync(T("EditSuccessfulMessage", displayName)); - } - } - - public async Task ConfirmAsync(string messgae, Func callback, AlertTypes type = AlertTypes.Warning) - { - if (await PopupService.SimpleConfirmAsync(I18n.T("OperationConfirmation"), messgae, type)) await callback.Invoke(); - } - - public async Task SuccessMessageAsync(string message) - { - await PopupService.EnqueueSnackbarAsync(message, AlertTypes.Success); - } - - public async Task WarningAsync(string message) - { - await PopupService.EnqueueSnackbarAsync(message, AlertTypes.Warning); - } - - public async Task ErrorMessageAsync(string message) - { - await PopupService.EnqueueSnackbarAsync(message, AlertTypes.Error); - } - - protected async Task HandleErrorAsync(Exception exception) - { - await InvokeAsync(async () => - { - await ErrorMessageAsync(exception.Message); - Loading = false; - StateHasChanged(); - }); - } - - public List> GetEnumMap() where TEnum : struct, Enum - { - return Enum.GetValues().Select(e => new KeyValuePair(e.ToString(), e)).ToList(); - } - - public List> GetBooleanMap() - { - return new() - { - new(T("Enable"), true), - new(T("Disabled"), false) - }; - } - - public async Task Throttle(Func callback, int wait = 500, bool immediate = true) - { - if (immediate) - { - if (!GlobalConfig.ThrottleFlag) - { - GlobalConfig.ThrottleFlag = true; - await callback.Invoke(); - await Task.Delay(wait); - GlobalConfig.ThrottleFlag = false; - } - } - else if (!GlobalConfig.ThrottleFlag) - { - GlobalConfig.ThrottleFlag = true; - await Task.Delay(wait); - GlobalConfig.ThrottleFlag = false; - await callback.Invoke(); - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/Shared/MLoading.razor b/src/Web/Masa.Alert.Web.Admin/Shared/MLoading.razor deleted file mode 100644 index 2ac5135d..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Shared/MLoading.razor +++ /dev/null @@ -1,37 +0,0 @@ -@implements IDisposable -@inject GlobalConfig GlobalConfig; - - -
- -
@LoadingText
-
-
- -@code { - [Parameter] - public bool IsLoading { get; set; } - - [Parameter] - public string LoadingText { get; set; } = string.Empty; - - [Parameter] - public EventCallback LoadingChanged { get; set; } - - void Loading(bool loading,string loadingText) - { - IsLoading = loading; - LoadingText = loadingText; - base.StateHasChanged(); - } - - protected override void OnInitialized() - { - GlobalConfig.OnLoadingChanged += Loading; - } - - public void Dispose() - { - GlobalConfig.OnLoadingChanged -= Loading; - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Shared/MainLayout.razor b/src/Web/Masa.Alert.Web.Admin/Shared/MainLayout.razor deleted file mode 100644 index 55d4675f..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Shared/MainLayout.razor +++ /dev/null @@ -1,34 +0,0 @@ -@using Masa.BuildingBlocks.StackSdks.Config; -@using Masa.Contrib.StackSdks.Config; -@inherits LayoutComponentBase -@inject GlobalConfig GlobalConfig -@inject NavigationManager Navigation -@inject IMasaStackConfig MasaStackConfig - - - @Body - - - -@code { - [Inject] - public IPopupService PopupService { get; set; } = default!; - - private List WhiteUris = new List { "alarmHistory/*" }; - - private Task OnErrorAfterHandle(Exception exception) - { - GlobalConfig.Loading = false; - GlobalConfig.ThrottleFlag = false; - return Task.CompletedTask; - } - - private bool SignOut() - { - Navigation.NavigateTo("/Logout", true); - return true; - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/Shared/MainLayout.razor.css b/src/Web/Masa.Alert.Web.Admin/Shared/MainLayout.razor.css deleted file mode 100644 index 5b076258..00000000 --- a/src/Web/Masa.Alert.Web.Admin/Shared/MainLayout.razor.css +++ /dev/null @@ -1,3 +0,0 @@ -.main-layout ::deep .app-bar .m-toolbar__content { - padding: 0 !important; -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHandleStatusCommitViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHandleStatusCommitViewModel.cs deleted file mode 100644 index 4287884a..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHandleStatusCommitViewModel.cs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmHistory; - -public class AlarmHandleStatusCommitViewModel -{ - public AlarmHistoryHandleStatuses Status { get; set; } - - public DateTimeOffset CreationTime { get; set; } - - public Guid UserId { get; set; } - - public string UserName { get; set; } = string.Empty; - - public string Remarks { get; set; } = string.Empty; -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHandleViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHandleViewModel.cs deleted file mode 100644 index 7184f838..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHandleViewModel.cs +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmHistory; - -public class AlarmHandleViewModel -{ - public AlarmHistoryHandleStatuses Status { get; set; } - - public Guid Handler { get; set; } - - public Guid WebHookId { get; set; } - - public bool IsHandleNotice { get; set; } - - public NotificationConfigViewModel NotificationConfig { get; set; } = new(); - - public string HandlerName { get; set; } = string.Empty; - - public bool IsThirdParty { get; set; } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHistoryListViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHistoryListViewModel.cs deleted file mode 100644 index 13845e70..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHistoryListViewModel.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmHistory; - -public class AlarmHistoryListViewModel -{ - public Guid Id { get; set; } - - public AlertSeverity AlertSeverity { get; set; } - - public string DisplayName { get; set; } = default!; - - public string TriggerRules { get; set; } = default!; - - public DateTimeOffset FirstAlarmTime { get; set; } - - public int AlarmCount { get; set; } - - public DateTimeOffset LastAlarmTime { get; set; } - - public AlarmHistoryHandleStatuses HandleStatus { get; set; } - - public DateTimeOffset? RecoveryTime { get; set; } - - public AlarmHandleViewModel Handle { get; set; } = new(); - - public bool IsNotification { get; set; } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHistoryViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHistoryViewModel.cs deleted file mode 100644 index 69ab7628..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/AlarmHistoryViewModel.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmHistory; - -public record class AlarmHistoryViewModel -{ - public Guid Id { get; set; } - - public AlertSeverity AlertSeverity { get; set; } - - public string DisplayName { get; set; } = default!; - - public string TriggerRules { get; set; } = default!; - - public DateTimeOffset FirstAlarmTime { get; set; } - - public int AlarmCount { get; set; } - - public DateTimeOffset LastAlarmTime { get; set; } - - public AlarmRuleViewModel AlarmRule { get; set; } = new(); - - public List RuleResultItems { get; set; } = new(); - - public List HandleStatusCommits { get; set; } = new(); - - public AlarmHandleViewModel Handle { get; set; } = new(); - - public bool IsNotification { get; set; } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/Validator/AlarmHandleViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/Validator/AlarmHandleViewModelValidator.cs deleted file mode 100644 index 8c2b118b..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/Validator/AlarmHandleViewModelValidator.cs +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmHistory.Validator; - -public class AlarmHandleViewModelValidator : AbstractValidator -{ - public AlarmHandleViewModelValidator(I18n i18n) - { - RuleFor(x => x.NotificationConfig).SetValidator(new NotificationConfigViewModelValidator(i18n)).When(x => x.IsHandleNotice); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/Validator/NotificationConfigViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/Validator/NotificationConfigViewModelValidator.cs deleted file mode 100644 index c6f608b0..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmHistory/Validator/NotificationConfigViewModelValidator.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmHistory.Validator; - -public class NotificationConfigViewModelValidator : AbstractValidator -{ - public NotificationConfigViewModelValidator(I18n i18n) - { - RuleFor(x => x.TemplateName).Required(string.Format(i18n.T("RequiredValidator"), i18n.T("MessageTemplate"))); - RuleFor(x => x.Receivers).Required(string.Format(i18n.T("RequiredValidator"), i18n.T("Receiver", true))); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleItemViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleItemViewModel.cs deleted file mode 100644 index 36f86d46..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleItemViewModel.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class AlarmRuleItemViewModel -{ - public Guid Id { get; set; } - - public Guid AlarmRuleId { get; set; } - - public string Expression { get; set; } = string.Empty; - - public AlertSeverity AlertSeverity { get; set; } - - public bool IsRecoveryNotification { get; set; } - - public bool IsNotification { get; set; } - - public NotificationConfigViewModel RecoveryNotificationConfig { get; set; } = new(); - - public NotificationConfigViewModel NotificationConfig { get; set; } = new(); -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleListViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleListViewModel.cs deleted file mode 100644 index 7368a8f0..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleListViewModel.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class AlarmRuleListViewModel -{ - public Guid Id { get; set; } - - public AlarmRuleTypes Type { get; set; } - - public string DisplayName { get; set; } = default!; - - public string ProjectIdentity { get; set; } = default!; - - public string AppIdentity { get; set; } = default!; - - public DateTime ModificationTime { get; set; } - - public string ModifierName { get; set; } = string.Empty; - - public bool IsEnabled { get; set; } - - public List Items { get; set; } = new(); - - public List MetricMonitorItems { get; set; } = new(); - - public List Notifiers = new(); -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleRecordListViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleRecordListViewModel.cs deleted file mode 100644 index 3cf45be0..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleRecordListViewModel.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class AlarmRuleRecordListViewModel -{ - public Guid Id { get; set; } - - public Guid AlarmRuleId { get; set; } - - public ConcurrentDictionary AggregateResult { get; set; } = new(); - - public bool IsTrigger { get; set; } - - public int ConsecutiveCount { get; set; } - - public List RuleResultItems { get; set; } = new(); - - public DateTime CreationTime { get; set; } - - public DateTimeOffset ExcuteTime { get; set; } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleUpsertViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleUpsertViewModel.cs deleted file mode 100644 index 46dc6945..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleUpsertViewModel.cs +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class AlarmRuleUpsertViewModel -{ - public AlarmRuleTypes Type { get; set; } - - public string DisplayName { get; set; } = string.Empty; - - public string ProjectIdentity { get; set; } = string.Empty; - - public string AppIdentity { get; set; } = string.Empty; - - public int Step { get; set; } = 1; - - public string ChartYAxisUnit { get; set; } = string.Empty; - - public CheckFrequencyViewModel CheckFrequency { get; set; } = new(); - - public bool IsGetTotal { get; set; } - - public string TotalVariable { get; set; } = "total"; - - public string WhereExpression { get; set; } = string.Empty; - - public string QueryStr { get; set; } = "Query"; - - public int ContinuousTriggerThreshold { get; set; } - - public SilenceCycleViewModel SilenceCycle { get; set; } = new(); - - public bool IsEnabled { get; set; } - - public List LogMonitorItems { get; set; } = new(); - - public List MetricMonitorItems { get; set; } = new(); - - public List Items { get; set; } = new(); - - public string Source { get; set; } = default!; - - public bool Show { get; set; } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleViewModel.cs deleted file mode 100644 index c944c750..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/AlarmRuleViewModel.cs +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class AlarmRuleViewModel: AlarmRuleUpsertViewModel -{ -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/CheckFrequencyViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/CheckFrequencyViewModel.cs deleted file mode 100644 index 3fd0482c..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/CheckFrequencyViewModel.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class CheckFrequencyViewModel -{ - public AlarmCheckFrequencyTypes Type { get; set; } - - public TimeIntervalViewModel FixedInterval { get; set; } = new(); - - public string CronExpression { get; set; } = string.Empty; -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/LogMonitorItemViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/LogMonitorItemViewModel.cs deleted file mode 100644 index cc6568fa..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/LogMonitorItemViewModel.cs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class LogMonitorItemViewModel -{ - public string Field { get; set; } = string.Empty; - - public LogAggregationTypes AggregationType { get; set; } = LogAggregationTypes.Count; - - public string Alias { get; set; } = string.Empty; - - public bool IsOffset { get; set; } - - public int OffsetPeriod { get; set; } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/MetricAggregationViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/MetricAggregationViewModel.cs deleted file mode 100644 index 576f6ada..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/MetricAggregationViewModel.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class MetricAggregationViewModel -{ - public string Name { get; set; } = string.Empty; - - public string Tag { get; set; } = string.Empty; - - public MetricComparisonOperators ComparisonOperator { get; set; } = MetricComparisonOperators.Equal; - - public string Value { get; set; } = string.Empty; - - public MetricAggregationTypes AggregationType { get; set; } = MetricAggregationTypes.Count; - - public List TagItems { get; set; } = new(); - - public List ValueItems { get; set; } = new(); - - public Dictionary> LabelValues = new(); -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/MetricMonitorItemViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/MetricMonitorItemViewModel.cs deleted file mode 100644 index b2ce32a6..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/MetricMonitorItemViewModel.cs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class MetricMonitorItemViewModel -{ - public bool IsExpression { get; set; } - - public string Expression { get; set; } = string.Empty; - - public MetricAggregationViewModel Aggregation { get; set; } = new(); - - public string Alias { get; set; } = string.Empty; - - public bool IsOffset { get; set; } - - public int OffsetPeriod { get; set; } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/NotificationConfigViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/NotificationConfigViewModel.cs deleted file mode 100644 index fd0d8d44..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/NotificationConfigViewModel.cs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class NotificationConfigViewModel -{ - public string ChannelCode { get; set; } = default!; - - public string TemplateCode { get; set; } = default!; - - public string TemplateName { get; set; } = default!; - - public int ChannelType { get; set; } - - public List Receivers { get; set; } = new(); -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/RuleResultItemViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/RuleResultItemViewModel.cs deleted file mode 100644 index ae1d10b1..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/RuleResultItemViewModel.cs +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class RuleResultItemViewModel -{ - public bool IsValid { get; set; } - - public AlarmRuleItemViewModel AlarmRuleItem { get; set; } = new(); -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/SilenceCycleViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/SilenceCycleViewModel.cs deleted file mode 100644 index 9f34bc32..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/SilenceCycleViewModel.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class SilenceCycleViewModel -{ - public SilenceCycleTypes Type { get; set; } - - public TimeIntervalViewModel TimeInterval { get; set; } = new(); - - public int SilenceCycleValue { get; set; } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/TimeIntervalViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/TimeIntervalViewModel.cs deleted file mode 100644 index ed2615b8..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/TimeIntervalViewModel.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules; - -public class TimeIntervalViewModel -{ - public int IntervalTime { get; set; } = 15; - - public TimeTypes IntervalTimeType { get; set; } = TimeTypes.Minute; - - public TimeSpan? GetIntervalTime() - { - switch (IntervalTimeType) - { - case TimeTypes.Minute: - return TimeSpan.FromMinutes(IntervalTime); - case TimeTypes.Hour: - return TimeSpan.FromHours(IntervalTime); - case TimeTypes.Day: - return TimeSpan.FromDays(IntervalTime); - default: - return null; - } - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/AlarmRuleItemViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/AlarmRuleItemViewModelValidator.cs deleted file mode 100644 index 3886137f..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/AlarmRuleItemViewModelValidator.cs +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules.Validator; - -public class AlarmRuleItemViewModelValidator : AbstractValidator -{ - public AlarmRuleItemViewModelValidator(I18n i18n) - { - var scope = "AlarmRuleBlock"; - RuleFor(x => x.Expression).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "Expression"))); - RuleFor(x => x.AlertSeverity).IsInEnum().WithMessage(string.Format(i18n.T("IsInEnumValidator"), i18n.T(scope, "AlertSeverity"))); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/AlarmRuleUpsertViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/AlarmRuleUpsertViewModelValidator.cs deleted file mode 100644 index fe93bdf4..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/AlarmRuleUpsertViewModelValidator.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules.Validator; - -public class AlarmRuleUpsertViewModelValidator : AbstractValidator -{ - public AlarmRuleUpsertViewModelValidator(I18n i18n) - { - var scope = "AlarmRuleBlock"; - RuleFor(x => x.ProjectIdentity).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "ProjectIdentity"))) - .When(x => x.Type == AlarmRuleTypes.Log).When(x => x.Step == 1); - RuleFor(x => x.AppIdentity).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "AppIdentity"))) - .When(x => x.Type == AlarmRuleTypes.Log).When(x => x.Step == 1); - - RuleFor(x => x.CheckFrequency).SetValidator(new CheckFrequencyViewModelValidator(i18n)) - .When(x => (x.Type == AlarmRuleTypes.Log && x.Step == 2) || (x.Type == AlarmRuleTypes.Metric && x.Step == 1)); - RuleFor(x => x.LogMonitorItems).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "VariableConfiguration"))) - .ForEach(x => x.SetValidator(new LogMonitorItemViewModelValidator(i18n))) - .When(x => x.Type == AlarmRuleTypes.Log && x.Step == 2); - RuleFor(x => x.MetricMonitorItems).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "VariableConfiguration"))) - .ForEach(x => x.SetValidator(new MetricMonitorItemViewModelValidator(i18n))) - .When(x => x.Type == AlarmRuleTypes.Metric && x.Step == 1); - - RuleFor(x => x.DisplayName).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "DisplayName"))) - .Length(2, 50).WithMessage(string.Format(i18n.T("LengthValidator"), i18n.T(scope, "DisplayName"), 2, 50)) - .When(x => (x.Type == AlarmRuleTypes.Log && x.Step == 3) || (x.Type == AlarmRuleTypes.Metric && x.Step == 2)); - RuleFor(x => x.Items).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "TriggerRules"))) - .ForEach(x => x.SetValidator(new AlarmRuleItemViewModelValidator(i18n))) - .When(x => (x.Type == AlarmRuleTypes.Log && x.Step == 3) || (x.Type == AlarmRuleTypes.Metric && x.Step == 2)); - RuleFor(x => x.SilenceCycle).SetValidator(new SilenceCycleViewModelValidator(i18n)).When(x => (x.Type == AlarmRuleTypes.Log && x.Step == 3) || (x.Type == AlarmRuleTypes.Metric && x.Step == 2)); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/CheckFrequencyViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/CheckFrequencyViewModelValidator.cs deleted file mode 100644 index 710660e5..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/CheckFrequencyViewModelValidator.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules.Validator; - -public class CheckFrequencyViewModelValidator : AbstractValidator -{ - public CheckFrequencyViewModelValidator(I18n i18n) - { - RuleFor(x => x.Type).Required(string.Format(i18n.T("RequiredValidator"), i18n.T("CheckFrequency"))); - RuleFor(x => x.CronExpression).Required(string.Format(i18n.T("RequiredValidator"), i18n.T("CronExpression"))) - .Must(x => CronExpression.IsValidExpression(x)).WithMessage(i18n.T("InvalidCronExpression")) - .Must(x => - { - if (string.IsNullOrEmpty(x)) - return true; - var startTime = DateTimeOffset.UtcNow; - var cronExpression = new CronExpression(x); - var nextExcuteTime = cronExpression.GetNextValidTimeAfter(startTime); - if (nextExcuteTime.HasValue == false) - { - return false; - } - var nextExcuteTime2 = cronExpression.GetNextValidTimeAfter(nextExcuteTime.Value); - if (nextExcuteTime2.HasValue && (nextExcuteTime2.Value - nextExcuteTime.Value).TotalSeconds < 30) - return false; - return true; - }).WithMessage(i18n.T("RunningIntervalTips")) - .When(x => x.Type == AlarmCheckFrequencyTypes.Cron); - RuleFor(x => x.FixedInterval).SetValidator(new TimeIntervalViewModelValidator(i18n)) - .When(x => x.Type == AlarmCheckFrequencyTypes.FixedInterval); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/LogMonitorItemViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/LogMonitorItemViewModelValidator.cs deleted file mode 100644 index 0c9b7387..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/LogMonitorItemViewModelValidator.cs +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -using static System.Formats.Asn1.AsnWriter; - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules.Validator; - -public class LogMonitorItemViewModelValidator : AbstractValidator -{ - public LogMonitorItemViewModelValidator(I18n i18n) - { - var scope = "AlarmRuleBlock"; - RuleFor(x => x.Field).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "Field"))); - RuleFor(x => x.Alias).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "Alias"))); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/MetricMonitorItemViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/MetricMonitorItemViewModelValidator.cs deleted file mode 100644 index a4bf0509..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/MetricMonitorItemViewModelValidator.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules.Validator; - -public class MetricMonitorItemViewModelValidator : AbstractValidator -{ - public MetricMonitorItemViewModelValidator(I18n i18n) - { - var scope = "AlarmRuleBlock"; - RuleFor(x => x.Alias).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "Alias"))); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/SilenceCycleViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/SilenceCycleViewModelValidator.cs deleted file mode 100644 index 20128a05..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/SilenceCycleViewModelValidator.cs +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules.Validator; - -public class SilenceCycleViewModelValidator : AbstractValidator -{ - public SilenceCycleViewModelValidator(I18n i18n) - { - RuleFor(x => x.TimeInterval).SetValidator(new TimeIntervalViewModelValidator(i18n)).When(x => x.Type == SilenceCycleTypes.Time); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/TimeIntervalViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/TimeIntervalViewModelValidator.cs deleted file mode 100644 index 5c7ef4aa..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/AlarmRules/Validator/TimeIntervalViewModelValidator.cs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.AlarmRules.Validator; - -public class TimeIntervalViewModelValidator : AbstractValidator -{ - public TimeIntervalViewModelValidator(I18n i18n) - { - var scope = "AlarmRuleBlock"; - RuleFor(x => x.IntervalTimeType).IsInEnum().WithMessage(string.Format(i18n.T("IsInEnumValidator"), i18n.T(scope, "IntervalTimeType"))); - RuleFor(x => x.IntervalTime).InclusiveBetween(1, 59).WithMessage(string.Format(i18n.T("InclusiveBetweenValidator"), i18n.T(scope, "IntervalTime"), 1, 59)) - .When(x => x.IntervalTimeType == TimeTypes.Minute); - RuleFor(x => x.IntervalTime).InclusiveBetween(1, 23).WithMessage(string.Format(i18n.T("InclusiveBetweenValidator"), i18n.T(scope, "IntervalTime"), 1, 23)) - .When(x => x.IntervalTimeType == TimeTypes.Hour); - RuleFor(x => x.IntervalTime).InclusiveBetween(1, 31).WithMessage(string.Format(i18n.T("InclusiveBetweenValidator"), i18n.T(scope, "IntervalTime"), 1, 31)) - .When(x => x.IntervalTimeType == TimeTypes.Day); - } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/Validator/WebHookTestViewModalValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/Validator/WebHookTestViewModalValidator.cs deleted file mode 100644 index c6bd5dd8..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/Validator/WebHookTestViewModalValidator.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.WebHooks.Validator; - -public class WebHookTestViewModalValidator : AbstractValidator -{ - public WebHookTestViewModalValidator(I18n i18n) - { - RuleFor(x => x.UserId).Required(string.Format(i18n.T("RequiredValidator"), i18n.T("User"))); - RuleFor(x => x.WebHookId).Required(); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/Validator/WebHookUpsertViewModelValidator.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/Validator/WebHookUpsertViewModelValidator.cs deleted file mode 100644 index 3a9aa66d..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/Validator/WebHookUpsertViewModelValidator.cs +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.WebHooks.Validator; - -public class WebHookUpsertViewModelValidator : AbstractValidator -{ - public WebHookUpsertViewModelValidator(I18n i18n) - { - var scope = "WebHookBlock"; - RuleFor(x => x.DisplayName).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "DisplayName"))) - .ChineseLetterNumberSymbol().WithMessage(string.Format(i18n.T("ChineseLetterNumberSymbolValidator"), i18n.T(scope, "DisplayName"))) - .Length(2, 50).WithMessage(string.Format(i18n.T("LengthValidator"), i18n.T(scope, "DisplayName"), 2, 50)); - RuleFor(x => x.SecretKey).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "SecretKey"))); - RuleFor(x => x.Url).Required(string.Format(i18n.T("RequiredValidator"), i18n.T(scope, "Url"))) - .Url().WithMessage(string.Format(i18n.T("UrlValidator"), i18n.T(scope, "Url"))); - } -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookListViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookListViewModel.cs deleted file mode 100644 index 1284d0fa..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookListViewModel.cs +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.WebHooks; - -public class WebHookListViewModel -{ - public Guid Id { get; set; } - - public string DisplayName { get; set; } = default!; - - public string Url { get; set; } = default!; - - public string Description { get; set; } = default!; - - public string SecretKey { get; set; } = default!; - - public DateTime ModificationTime { get; set; } - - public string ModifierName { get; set; } = string.Empty; -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookTestViewModal.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookTestViewModal.cs deleted file mode 100644 index 7f6c76ae..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookTestViewModal.cs +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.WebHooks; - -public class WebHookTestViewModal -{ - public Guid UserId { get; set; } - - public Guid WebHookId { get; set; } -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookUpsertViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookUpsertViewModel.cs deleted file mode 100644 index 1e98192a..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookUpsertViewModel.cs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.WebHooks; - -public class WebHookUpsertViewModel -{ - public Guid Id { get; set; } - - public string DisplayName { get; set; } = string.Empty; - - public string Url { get; set; } = string.Empty; - - public string Description { get; set; } = string.Empty; - - public string SecretKey { get; set; } = Guid.NewGuid().ToString(); -} diff --git a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookViewModel.cs b/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookViewModel.cs deleted file mode 100644 index 6cf877af..00000000 --- a/src/Web/Masa.Alert.Web.Admin/ViewModel/WebHooks/WebHookViewModel.cs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Alert.Web.Admin.ViewModel.WebHooks; - -public class WebHookViewModel -{ - public string DisplayName { get; set; } = default!; - - public string Url { get; set; } = default!; - - public string Description { get; set; } = default!; - - public string SecretKey { get; set; } = default!; -} diff --git a/src/Web/Masa.Alert.Web.Admin/_Imports.cs b/src/Web/Masa.Alert.Web.Admin/_Imports.cs deleted file mode 100644 index 24ef6d94..00000000 --- a/src/Web/Masa.Alert.Web.Admin/_Imports.cs +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -global using System.Collections.Concurrent; -global using System.Reflection; -global using System.Text; -global using System.Text.Json; -global using FluentValidation; -global using Mapster; -global using Masa.Alert.ApiGateways.Caller; -global using Masa.Alert.ApiGateways.Caller.Services.AlarmHistories; -global using Masa.Alert.ApiGateways.Caller.Services.AlarmRules; -global using Masa.Alert.ApiGateways.Caller.Services.WebHooks; -global using Masa.Alert.Application.Contracts.AlarmHistories.Dtos; -global using Masa.Alert.Application.Contracts.AlarmRules.Dtos; -global using Masa.Alert.Application.Contracts.QueryModels; -global using Masa.Alert.Application.Contracts.WebHooks.Dtos; -global using Masa.Alert.Domain.Shared.AlarmHistory; -global using Masa.Alert.Domain.Shared.AlarmRules; -global using Masa.Alert.Domain.Shared.Enums; -global using Masa.Alert.Infrastructure.Common.Extensions; -global using Masa.Alert.Infrastructure.Common.Utils; -global using Masa.Alert.Infrastructure.Ddd.Application.Contracts.Dtos; -global using Masa.Alert.Web.Admin.Components; -global using Masa.Alert.Web.Admin.Components.Modules.Alarm; -global using Masa.Alert.Web.Admin.Global; -global using Masa.Alert.Web.Admin.Pages.AlarmHistory.Modules; -global using Masa.Alert.Web.Admin.Pages.AlarmRules.Modules; -global using Masa.Alert.Web.Admin.Pages.WebHooks.Modules; -global using Masa.Alert.Web.Admin.ViewModel.AlarmHistory; -global using Masa.Alert.Web.Admin.ViewModel.AlarmRules; -global using Masa.Alert.Web.Admin.ViewModel.WebHooks; -global using Masa.Blazor; -global using Masa.BuildingBlocks.StackSdks.Auth; -global using Masa.BuildingBlocks.StackSdks.Auth.Contracts.Model; -global using Masa.BuildingBlocks.StackSdks.Mc.Enum; -global using Masa.BuildingBlocks.StackSdks.Pm; -global using Masa.BuildingBlocks.StackSdks.Pm.Model; -global using Masa.BuildingBlocks.StackSdks.Tsc; -global using Masa.BuildingBlocks.StackSdks.Tsc.Contracts.Model; -global using Masa.BuildingBlocks.StackSdks.Tsc.Model; -global using Masa.Contrib.StackSdks.Caller; -global using Masa.Stack.Components; -global using Masa.Stack.Components.Extensions; -global using Masa.Stack.Components.Models; -global using Masa.Stack.Components.TaskHandle; -global using Microsoft.AspNetCore.Components; -global using Microsoft.AspNetCore.Components.Rendering; -global using Microsoft.AspNetCore.SignalR.Client; -global using Microsoft.Extensions.DependencyInjection; -global using ProjectModel = Masa.BuildingBlocks.StackSdks.Pm.Model.ProjectModel; -global using MasaGlobalConfig = Masa.Stack.Components.Configs.GlobalConfig; \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/_Imports.razor b/src/Web/Masa.Alert.Web.Admin/_Imports.razor deleted file mode 100644 index cbfee633..00000000 --- a/src/Web/Masa.Alert.Web.Admin/_Imports.razor +++ /dev/null @@ -1,40 +0,0 @@ -@using Microsoft.AspNetCore.Components.Web -@using Masa.Blazor -@using Masa.Blazor.Presets -@using Masa.Alert.Web.Admin.Global -@using Masa.Alert.Web.Admin.Shared -@using System.Diagnostics.CodeAnalysis -@using Microsoft.AspNetCore.Components.Authorization -@using Microsoft.AspNetCore.Components.Routing -@using Humanizer -@using System.Globalization -@using Masa.Stack.Components -@using Masa.Alert.Web.Admin.Components -@using Masa.Stack.Components.Layouts -@using Microsoft.AspNetCore.Components.Rendering -@using Masa.Stack.Components.Models -@using Masa.Alert.Web.Admin.Components.Lists -@using System.Net.Http -@using System.Net.Http.Json -@using Microsoft.AspNetCore.Components.Forms -@using Microsoft.AspNetCore.Components.Web.Virtualization -@using Microsoft.JSInterop -@using static Masa.Stack.Components.JsInitVariables -@using Masa.Alert.Web.Admin.Components.GenericColumnRender -@using Masa.Alert.Web.Admin.Pages.AlarmRules.Modules -@using Masa.Alert.Domain.Shared.AlarmRules -@using Masa.Alert.Web.Admin.Components.Modules.Alarm -@using Masa.Alert.Web.Admin.Pages.AlarmHistory.Modules -@using Masa.Alert.Domain.Shared.AlarmHistory -@using static Masa.Alert.Application.Contracts.AlarmRules.Dtos.GetAlarmRuleInputDto -@using static Masa.Alert.Application.Contracts.AlarmHistories.Dtos.GetAlarmHistoryInputDto -@using Masa.Alert.Web.Admin.Pages.WebHooks.Modules -@using Masa.Alert.Contracts.Admin.Tsc -@using Masa.Alert.Web.Admin.Components.Modules.Alarm.Model -@using Masa.Alert.Web.Admin.Components.Modules.Subjects -@using Masa.Alert.Web.Admin.Components.Modules.Notification -@using Masa.BuildingBlocks.StackSdks.Mc; -@using Masa.BuildingBlocks.StackSdks.Mc.Model -@using Microsoft.IdentityModel.Protocols.OpenIdConnect -@using Masa.Alert.Web.Admin.Components.Modules.WebHooks -@using Masa.Stack.Components.Shared.IntegrationComponents \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/css/alert-admin.css b/src/Web/Masa.Alert.Web.Admin/wwwroot/css/alert-admin.css deleted file mode 100644 index 2ffbb441..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/css/alert-admin.css +++ /dev/null @@ -1,571 +0,0 @@ -.rounded-2 { - border-radius: 10px !important; -} - -.rounded-4 { - border-radius: 20px !important; -} - -.button { - min-width: 40px; - min-height: 40px; - border: 1px solid #F0F3FA; - box-sizing: border-box; - border-radius: 10px; - cursor: pointer; -} - -.text-btn { - /* BUTTON-按钮 */ - font-family: Roboto !important; - font-style: normal !important; - font-weight: 400 !important; - font-size: 0.875rem !important; - line-height: 1.25rem !important; - /* default color */ - color: #A3AED0 !important; -} - -.m-input.mx-auto .m-text-field__slot { - padding-bottom: 2px; -} - - .m-input.mx-auto .m-text-field__slot input { - text-align: center; - } - -.m-input.mx-auto .m-input__slot::before { - border-color: #E2E7F4 !important; -} - -.m-input.mx-auto .m-text-field__slot input::placeholder { - text-align: center; - color: #A3AED0 !important; - font-family: Roboto !important; - font-size: 24px !important; - font-style: normal !important; - font-weight: 700 !important; - line-height: normal !important; - letter-spacing: 0em !important; -} - -.m-data-table.table-space-v-4 > .m-data-table__wrapper > table { - border-spacing: 0px 16px !important; -} - -.m-data-table.table-space-v-2 > .m-data-table__wrapper > table { - border-spacing: 0px 8px !important; -} - -.justify-center.m-input--checkbox > .m-input__control { - flex-grow: 0 !important; - width: auto !important; -} - -.elevation-tab { - background-color: #F0F3FA !important; - padding: 3px; -} - -.m-item-group.elevation-tab .m-btn.m-btn--has-bg.m-btn--active { - background-color: white !important; - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - font-size: 14px; - line-height: 16px; - display: flex; - align-items: center; - text-align: center; - letter-spacing: 0.1px; - /* text/1-2强调 */ - - color: #323D6F; -} - -.elevation-tab .theme--light.m-btn--active:hover::before, .elevation-tab .theme--light.m-btn--active::before { - opacity: 0; -} - -.m-item-group.elevation-tab .m-btn.m-btn--has-bg { - background-color: #F0F3FA !important; - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - font-size: 14px; - line-height: 21px; - /* identical to box height, or 150% */ - - display: flex; - align-items: center; - text-align: center; - /* text/2-2正文 */ - - color: #7681AB; -} - -.remover-hover.m-list-item:hover::before { - opacity: 0 !important; -} - -.m-chip:not(.m-chip--active) { - background: #f6f8fd !important; -} - -.m-chip.theme--light.m-chip--select { - background: #f6f8fd !important; -} - -.max-full-height { - max-height: 100% !important; -} - -.m-stepper__content.full-height .m-stepper__wrapper { - height: 100% !important; -} - -.m-window.m-item-group.flex-grow-1 .m-window__container { - height: 100% !important; -} - -.full-height.d-flex.flex-column .m-data-table__wrapper { - flex-grow: 1 !important; -} - -.m-text-field.m-text-field--solo.elevation-0:not(.m-text-field--solo-flat) > .m-input__control > .m-input__slot { - box-shadow: none; -} - -.flex-column { - display: flex; - flex-direction: column; - word-break: break-all; -} - -.flex-height-auto { - flex: auto; -} - -.overflow-y { - overflow-y: scroll; - overflow-x: hidden; -} - -.sheet-dialog { - padding-left: 80px; - padding-right: 80px; - padding-bottom: 24px; - padding-top: 24px; - height: 100%; - width: 100%; - position: absolute; -} - -.m-stepper__content.full-height .m-stepper__wrapper { - height: 100% !important; -} - -.m-window.m-item-group.flex-grow-1 .m-window__container { - height: 100% !important; -} - -.full-height.d-flex.flex-column .m-data-table__wrapper { - flex-grow: 1 !important; -} - -.m-text-field.m-text-field--solo.elevation-0:not(.m-text-field--solo-flat) > .m-input__control > .m-input__slot { - box-shadow: none; -} - -.line-clamp-2 { - word-break: break-all; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; - overflow: hidden; -} - -.fold { - width: calc(100% - 470px); - display: inline-block; -} - -.m-text-field.m-text-field--solo:not(.m-text-field--solo-flat) > .m-input__control > .m-input__slot { - box-shadow: initial; -} - -.m-data-table > .m-data-table__wrapper > table > thead > tr > th, .m-data-table > .m-data-table__wrapper > table > tbody > tr > td { - padding: 0 24px !important; -} - -.error--text { - color: #FF5252 !important; - caret-color: #FF5252 !important; -} - -.btn-form { - width: 140px !important; - height: 56px !important; - padding: 4px 58px !important; - border-radius: 12px !important; - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - font-size: 16px; - line-height: 28px; -} - -.btn-form-full { - width: 100% !important; - height: 56px !important; - padding: 4px 58px !important; - border-radius: 12px !important; -} - -.btn-form-rounded { - height: 40px !important; - padding: 8px 14px !important; - border-radius: 99px !important; -} - -/* fill/线 */ -.btn-fill-line { - border: 1px solid #E2E7F4 !important; - border-radius: 8px !important; -} - -/* 小按钮/主要/默认 */ -.small-btn { - min-width: 100px !important; - height: 40px !important; - padding: 4px !important; -} - -.medium-btn { - min-width: 100px !important; - height: 48px !important; - padding: 4px !important; -} - -.linear--text { - color: #A18BFF !important; -} - -.gradient--text { - color: #4318FF !important; -} - -.search-panel { - height: 40px !important; - position: relative !important; -} - -.search-panel-right { - position: absolute !important; - right: 0 !important; - top: 0 !important; -} - -.rounded-5 { - border-radius: 20px !important; -} - -/*.m-text-field.m-text-field--solo .m-input__append-inner, .m-text-field.m-text-field--solo .m-input__prepend-inner { - margin-top: 0 !important; -}*/ - -.m-application .overflow-x-visible { - overflow-x: visible !important; -} - -.m-application .overflow-y-visible { - overflow-y: visible !important; -} - -.border-bottom-none { - border-bottom: none !important; -} - -.masa-stack-components .page-select { - margin-top: 2px; -} - -.masa .warning-disabled--text { - color: #FBACA3 !important; -} - -.m-alert__wrapper { - width: 100%; -} - -.m-input--selection-controls__ripple:before { - opacity: 0; -} - -.m-text-field__details { - font-weight: 400; - font-size: 10px; - line-height: 15px; - color: #A3AED0; -} - -/*.m-stepper__wrapper { - overflow: visible; -}*/ - -.m-dialog { - border-radius: 20px !important; -} - - .m-dialog .m-sheet.m-card { - border-radius: 20px !important; - } - -.vertical-divider { - width: 0px; - height: 8px; - border: 1px solid #E2E7F4; - flex: none; - order: 1; - flex-grow: 0; - margin-left: 8px; - margin-right: 8px; -} - -.m-card { - box-shadow: 0px 0px 0px 0px rgb(0 0 0 / 20%), 0px 0px 0px 0px rgb(0 0 0 / 14%), 0px 0px 0px 0px rgb(0 0 0 / 12%) !important; - border-radius: 20px !important; -} - -.row-box > .col { - padding-top: 18px; - padding-bottom: 18px; -} - - -@-webkit-keyframes searchOpen { - 0% { - width: 488px; - } - - 100% { - width: 100%; - } -} - -@keyframes searchOpen { - 0% { - width: 488px; - } - - 100% { - width: 100%; - } -} - -.animate__searchOpen { - -webkit-animation-name: searchOpen; - animation-name: searchOpen; -} - -@-webkit-keyframes searchShrink { - 0% { - width: 100%; - } - - 100% { - width: 488px; - } -} - -@keyframes searchShrink { - 0% { - width: 100%; - } - - 100% { - width: 488px; - } -} - -.animate__searchShrink { - -webkit-animation-name: searchShrink; - animation-name: searchShrink; -} - -/*.m-stepper__header { - height: 48px !important; - margin: -8px 0 18px 0; -} - -.m-stepper__step { - padding: 0 !important; -}*/ - -.outlined-box-medium { - border: 1px solid #E2E7F4; - border-radius: 8px; - height: 48px; - padding-left: 6px; -} - -.sheetDialogPadding { - padding-left: 228px; - padding-right: 228px; - padding-bottom: 48px; - padding-top: 48px; - height: 100%; - width: 100%; - position: absolute; -} - -.m-input__append-outer, .m-input__prepend-outer { - margin-top: auto !important; - margin-bottom: auto !important; -} - -.m-input__control { - flex: 1; -} - -.remind--text { - color: #FF7D00 !important; -} - -.default-tab { - height: 36px; -} - - .default-tab button.m-btn--active { - color: #323D6F; - font-weight: 700; - font-size: 14px; - } - - .default-tab button { - color: #7681AB; - font-size: 14px; - font-weight: 500; - } - -.flex-none { - flex: none; -} - -.default-tag { - padding: 8px 14px; -} - - .default-tag .m-chip__content { - white-space: nowrap !important; - overflow: hidden !important; - text-overflow: ellipsis !important; - } - -.line-fill { - border: 1px solid #FFFFFF !important; -} - -.line-primary { - border: 1px solid #4318FF !important; -} - -.m-input--is-disabled { - opacity: 1 !important; -} - - .m-input--is-disabled .m-input--selection-controls__input { - opacity: 0.6; - } - -.fit-width { - width: fit-content; -} - -.button-divider { - padding-right: 0 !important; -} - - .button-divider .m-divider__content { - margin-right: 0; - padding-right: 0; - } - -.m-application .bgray { - border: 1px solid #E9EDF7; -} - - .m-application .bgray .clock-size { - font-size: 1rem; - } - -.masa-main .m-card { - border-radius: 12px !important; -} - -.m-application--is-ltr .m-border__left.green { - width: 2px !important; - background: #05CD99 !important; - flex: none !important; - order: 0 !important; - align-self: stretch !important; - flex-grow: 0 !important; -} - -.m-divider__wrapper.m-divider__wrapper--has-content.m-divider__wrapper--right { - padding: 8px 0px 0px 0px !important; -} - -.theme--light.m-data-table > .m-data-table__wrapper > table > tbody > tr:hover:not(.m-data-table__expanded__content):not(.m-data-table__empty-wrapper) { - background-color: #F6F8FD !important; - border-radius: 2px !important; -} - -.theme--light.m-data-table { - margin-left: 8px; - margin-right: 8px; -} - - .theme--light.m-data-table ::-webkit-scrollbar { - height: 0px!important; - } - -.m-data-table > .m-data-table__wrapper.fixed-right > table > thead > tr > th:last-child::after { - width: 0px !important; - content: "" !important; -} - -.m-data-table > .m-data-table__wrapper.fixed-right > table > tbody > tr > td:last-child::after { - width: 0px !important; - content: "" !important; -} - -.m-application .mdi-radiobox-marked { - font-size: 36px !important; -} - -.m-application .mdi-radiobox-blank { - font-size: 36px !important; -} - -.masa-main .search { - width: 300px; -} - -.m-tooltip--attached { - display: none !important; -} - -.masa pre { - white-space: pre-wrap !important; - word-wrap: break-word !important; -} - -.s-autocomplete-selection .m-list-item__action { - margin-right: 0px !important; -} - - .s-autocomplete-selection .m-list-item__action .m-list-item__action-text { - width: 100%; - } \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/css/animate.min.css b/src/Web/Masa.Alert.Web.Admin/wwwroot/css/animate.min.css deleted file mode 100644 index 76d2fe1a..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/css/animate.min.css +++ /dev/null @@ -1,7 +0,0 @@ -@charset "UTF-8";/*! - * animate.css - https://animate.style/ - * Version - 4.1.1 - * Licensed under the MIT license - http://opensource.org/licenses/MIT - * - * Copyright (c) 2020 Animate.css - */:root{--animate-duration:1s;--animate-delay:1s;--animate-repeat:1}.animate__animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-duration:var(--animate-duration);animation-duration:var(--animate-duration);-webkit-animation-fill-mode:both;animation-fill-mode:both}.animate__animated.animate__infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animate__animated.animate__repeat-1{-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-iteration-count:var(--animate-repeat);animation-iteration-count:var(--animate-repeat)}.animate__animated.animate__repeat-2{-webkit-animation-iteration-count:2;animation-iteration-count:2;-webkit-animation-iteration-count:calc(var(--animate-repeat)*2);animation-iteration-count:calc(var(--animate-repeat)*2)}.animate__animated.animate__repeat-3{-webkit-animation-iteration-count:3;animation-iteration-count:3;-webkit-animation-iteration-count:calc(var(--animate-repeat)*3);animation-iteration-count:calc(var(--animate-repeat)*3)}.animate__animated.animate__delay-1s{-webkit-animation-delay:1s;animation-delay:1s;-webkit-animation-delay:var(--animate-delay);animation-delay:var(--animate-delay)}.animate__animated.animate__delay-2s{-webkit-animation-delay:2s;animation-delay:2s;-webkit-animation-delay:calc(var(--animate-delay)*2);animation-delay:calc(var(--animate-delay)*2)}.animate__animated.animate__delay-3s{-webkit-animation-delay:3s;animation-delay:3s;-webkit-animation-delay:calc(var(--animate-delay)*3);animation-delay:calc(var(--animate-delay)*3)}.animate__animated.animate__delay-4s{-webkit-animation-delay:4s;animation-delay:4s;-webkit-animation-delay:calc(var(--animate-delay)*4);animation-delay:calc(var(--animate-delay)*4)}.animate__animated.animate__delay-5s{-webkit-animation-delay:5s;animation-delay:5s;-webkit-animation-delay:calc(var(--animate-delay)*5);animation-delay:calc(var(--animate-delay)*5)}.animate__animated.animate__faster{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-duration:calc(var(--animate-duration)/2);animation-duration:calc(var(--animate-duration)/2)}.animate__animated.animate__fast{-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-duration:calc(var(--animate-duration)*0.8);animation-duration:calc(var(--animate-duration)*0.8)}.animate__animated.animate__slow{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2)}.animate__animated.animate__slower{-webkit-animation-duration:3s;animation-duration:3s;-webkit-animation-duration:calc(var(--animate-duration)*3);animation-duration:calc(var(--animate-duration)*3)}@media (prefers-reduced-motion:reduce),print{.animate__animated{-webkit-animation-duration:1ms!important;animation-duration:1ms!important;-webkit-transition-duration:1ms!important;transition-duration:1ms!important;-webkit-animation-iteration-count:1!important;animation-iteration-count:1!important}.animate__animated[class*=Out]{opacity:0}}@-webkit-keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0) scaleY(1.1);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0) scaleY(1.05);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0) scaleY(.95);transform:translateZ(0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-4px,0) scaleY(1.02);transform:translate3d(0,-4px,0) scaleY(1.02)}}@keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0) scaleY(1.1);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0) scaleY(1.05);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0) scaleY(.95);transform:translateZ(0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-4px,0) scaleY(1.02);transform:translate3d(0,-4px,0) scaleY(1.02)}}.animate__bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.animate__flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__pulse{-webkit-animation-name:pulse;animation-name:pulse;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.animate__shakeX{-webkit-animation-name:shakeX;animation-name:shakeX}@-webkit-keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}20%,40%,60%,80%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}}@keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}20%,40%,60%,80%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}}.animate__shakeY{-webkit-animation-name:shakeY;animation-name:shakeY}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.animate__headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.animate__swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.animate__jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}.animate__heartBeat{-webkit-animation-name:heartBeat;animation-name:heartBeat;-webkit-animation-duration:1.3s;animation-duration:1.3s;-webkit-animation-duration:calc(var(--animate-duration)*1.3);animation-duration:calc(var(--animate-duration)*1.3);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes backInDown{0%{-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInDown{0%{-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInDown{-webkit-animation-name:backInDown;animation-name:backInDown}@-webkit-keyframes backInLeft{0%{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInLeft{0%{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInLeft{-webkit-animation-name:backInLeft;animation-name:backInLeft}@-webkit-keyframes backInRight{0%{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInRight{0%{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInRight{-webkit-animation-name:backInRight;animation-name:backInRight}@-webkit-keyframes backInUp{0%{-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInUp{0%{-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInUp{-webkit-animation-name:backInUp;animation-name:backInUp}@-webkit-keyframes backOutDown{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(700px) scale(.7);transform:translateY(700px) scale(.7);opacity:.7}}@keyframes backOutDown{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(700px) scale(.7);transform:translateY(700px) scale(.7);opacity:.7}}.animate__backOutDown{-webkit-animation-name:backOutDown;animation-name:backOutDown}@-webkit-keyframes backOutLeft{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}}@keyframes backOutLeft{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}}.animate__backOutLeft{-webkit-animation-name:backOutLeft;animation-name:backOutLeft}@-webkit-keyframes backOutRight{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}}@keyframes backOutRight{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}}.animate__backOutRight{-webkit-animation-name:backOutRight;animation-name:backOutRight}@-webkit-keyframes backOutUp{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(-700px) scale(.7);transform:translateY(-700px) scale(.7);opacity:.7}}@keyframes backOutUp{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(-700px) scale(.7);transform:translateY(-700px) scale(.7);opacity:.7}}.animate__backOutUp{-webkit-animation-name:backOutUp;animation-name:backOutUp}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__bounceIn{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.animate__bounceOut{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0) scaleY(.985);transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0) scaleY(3);transform:translate3d(0,2000px,0) scaleY(3)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0) scaleY(.985);transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0) scaleY(3);transform:translate3d(0,2000px,0) scaleY(3)}}.animate__bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0) scaleX(.9);transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0) scaleX(2);transform:translate3d(-2000px,0,0) scaleX(2)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0) scaleX(.9);transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0) scaleX(2);transform:translate3d(-2000px,0,0) scaleX(2)}}.animate__bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0) scaleX(.9);transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0) scaleX(2);transform:translate3d(2000px,0,0) scaleX(2)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0) scaleX(.9);transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0) scaleX(2);transform:translate3d(2000px,0,0) scaleX(2)}}.animate__bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0) scaleY(.985);transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0) scaleY(.9);transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0) scaleY(3);transform:translate3d(0,-2000px,0) scaleY(3)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0) scaleY(.985);transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0) scaleY(.9);transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0) scaleY(3);transform:translate3d(0,-2000px,0) scaleY(3)}}.animate__bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.animate__fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInTopLeft{-webkit-animation-name:fadeInTopLeft;animation-name:fadeInTopLeft}@-webkit-keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInTopRight{-webkit-animation-name:fadeInTopRight;animation-name:fadeInTopRight}@-webkit-keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInBottomLeft{-webkit-animation-name:fadeInBottomLeft;animation-name:fadeInBottomLeft}@-webkit-keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInBottomRight{-webkit-animation-name:fadeInBottomRight;animation-name:fadeInBottomRight}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.animate__fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.animate__fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.animate__fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.animate__fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.animate__fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.animate__fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.animate__fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animate__fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.animate__fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}}@keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}}.animate__fadeOutTopLeft{-webkit-animation-name:fadeOutTopLeft;animation-name:fadeOutTopLeft}@-webkit-keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}}@keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}}.animate__fadeOutTopRight{-webkit-animation-name:fadeOutTopRight;animation-name:fadeOutTopRight}@-webkit-keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}}@keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}}.animate__fadeOutBottomRight{-webkit-animation-name:fadeOutBottomRight;animation-name:fadeOutBottomRight}@-webkit-keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}}@keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}}.animate__fadeOutBottomLeft{-webkit-animation-name:fadeOutBottomLeft;animation-name:fadeOutBottomLeft}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animate__animated.animate__flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.animate__flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.animate__flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.animate__flipOutX{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}.animate__flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedInRight{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInRight{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__lightSpeedInRight{-webkit-animation-name:lightSpeedInRight;animation-name:lightSpeedInRight;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedInLeft{0%{-webkit-transform:translate3d(-100%,0,0) skewX(30deg);transform:translate3d(-100%,0,0) skewX(30deg);opacity:0}60%{-webkit-transform:skewX(-20deg);transform:skewX(-20deg);opacity:1}80%{-webkit-transform:skewX(5deg);transform:skewX(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInLeft{0%{-webkit-transform:translate3d(-100%,0,0) skewX(30deg);transform:translate3d(-100%,0,0) skewX(30deg);opacity:0}60%{-webkit-transform:skewX(-20deg);transform:skewX(-20deg);opacity:1}80%{-webkit-transform:skewX(5deg);transform:skewX(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__lightSpeedInLeft{-webkit-animation-name:lightSpeedInLeft;animation-name:lightSpeedInLeft;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.animate__lightSpeedOutRight{-webkit-animation-name:lightSpeedOutRight;animation-name:lightSpeedOutRight;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes lightSpeedOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0) skewX(-30deg);transform:translate3d(-100%,0,0) skewX(-30deg);opacity:0}}@keyframes lightSpeedOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0) skewX(-30deg);transform:translate3d(-100%,0,0) skewX(-30deg);opacity:0}}.animate__lightSpeedOutLeft{-webkit-animation-name:lightSpeedOutLeft;animation-name:lightSpeedOutLeft;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateOut{0%{opacity:1}to{-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{opacity:1}to{-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}.animate__rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes rotateOutDownLeft{0%{opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}.animate__rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateOutDownRight{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.animate__rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateOutUpLeft{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.animate__rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateOutUpRight{0%{opacity:1}to{-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{opacity:1}to{-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.animate__rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.animate__hinge{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2);-webkit-animation-name:hinge;animation-name:hinge;-webkit-transform-origin:top left;transform-origin:top left}@-webkit-keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.animate__jackInTheBox{-webkit-animation-name:jackInTheBox;animation-name:jackInTheBox}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}@keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}.animate__rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.animate__zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.animate__zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0)}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0)}}.animate__zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft;-webkit-transform-origin:left center;transform-origin:left center}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0)}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0)}}.animate__zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight;-webkit-transform-origin:right center;transform-origin:right center}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.animate__slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.animate__slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.animate__slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animate__slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/css/masa-blazor-pro.css b/src/Web/Masa.Alert.Web.Admin/wwwroot/css/masa-blazor-pro.css deleted file mode 100644 index e26cd6aa..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/css/masa-blazor-pro.css +++ /dev/null @@ -1,576 +0,0 @@ -html { - font-size: 16px; -} - -/*scrollbar*/ -::-webkit-scrollbar-track { - border-radius: 6px; - margin: 5px 0; - background-color: #F6F8FD; -} - -::-webkit-scrollbar { - width: 8px; - height: 5px; - margin: 5px 0; -} - -::-webkit-scrollbar-thumb { - margin: 5px 0; - border-radius: 4px; - background-color: #A3AED0 !important; -} - -.border-b-solid { - /* 分割线/下 */ - box-shadow: inset 0px -1px 0px #F0F3FA !important; -} - -.block-center { - /*flex 布局*/ - display: flex; - /*实现垂直居中*/ - align-items: center; -} - -.block-between { - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; -} - -/*组件样式全局修改start*/ -.m-radio i { - font-size: 21px !important; -} - -.m-input__slot { - margin-bottom: 0px !important; -} - -.m-messages { - min-height: 0px !important; -} - -.m-navigation-drawer__border { - width: 0 -} - -.m-card { - box-shadow: 0px 0px 0px 0px rgb(0 0 0 / 20%), 0px 0px 0px 0px rgb(0 0 0 / 14%), 0px 0px 0px 0px rgb(0 0 0 / 12%) !important; - border-radius: 20px; -} - - .m-card.line { - border-radius: 10px !important; - } - -.m-card__text { - padding: 16px 24px; - height: 100%; -} - -.m-input .m-input__icon .mdi-menu-down { - color: #A3AED0; -} - -.m-input .m-label { - /* BUTTON-按钮 */ - font-family: Roboto !important; - font-style: normal !important; - font-weight: 500 !important; - font-size: 0.875rem !important; - /* line-height: 1rem !important;*/ - /* default color */ - color: #7681AB; -} - -.m-input--checkbox .mdi-checkbox-blank-outline { - color: #A3AED0 !important; - caret-color: #A3AED0 !important; -} - -.theme--light .m-input--is-disabled .mdi-checkbox-blank-outline { - color: #E9EDF7 !important; - caret-color: #E9EDF7 !important; -} - -.theme--light .m-input--is-disabled .mdi-checkbox-marked { - color: #E9EDF7 !important; - caret-color: #E9EDF7 !important; -} - -.m-input--checkbox .m-input--selection-controls__ripple:before { - content: none; -} - -.m-input--selection-controls__input:hover .mdi-checkbox-blank-outline { - color: #4318FF !important; - caret-color: #4318FF !important; -} - -.m-radio .mdi-radiobox-blank { - color: #A3AED0 !important; - caret-color: #A3AED0 !important; -} - - -.table-header-fill .m-data-table-header tr { - background: #F6F8FD; -} - -.table-border-none td, th { - border-bottom: 0px !important; - box-shadow: none; -} - -.table-border-solid td, th { - border-bottom: 0 !important; - box-shadow: none; -} - -.primaryText .primaryText { - color: #4318FF !important; - caret-color: #4318FF !important; -} - -.m-pagination__navigation, .m-pagination__item { - box-shadow: 0px 0px 0px 0px rgb(0 0 0 / 20%), 0px 0px 0px 0px rgb(0 0 0 / 14%), 0px 0px 0px 0px rgb(0 0 0 / 12%) !important; -} - -.m-btn--is-elevated { - box-shadow: none !important; -} - -.hide-shadow { - box-shadow: none !important; - border: none; -} - -/* pagetabs */ - -.m-page-tabs .m-slide-group__prev.m-slide-group__prev--disabled { - flex: none !important; - min-width: 0px !important; -} - -/* pagetabs */ -/*组件样式全局修改end*/ -/*shop*/ -.ml300 { - margin-left: 300px; -} - -.commodity:hover { - height: calc(100% + 10px); -} - - .commodity:hover .content { - transition-property: margin-top; - transition-duration: 0.5s; - box-shadow: 0px 18px 40px rgba(112, 144, 176, 0.12) !important; - margin-top: -4px; - } - -.order:hover { - background-color: #6946FF !important; -} - - .order:hover .white-order { - color: #FFFFFF !important; - caret-color: #FFFFFF !important; - } - -.favorite:hover { - background: #F6F8FD !important; -} -/*shop*/ - -.coupons.m-text-field > .m-input__control > .m-input__slot:before { - border-color: transparent; - border-style: hidden; -} - -.coupons.m-text-field > .m-input__control > .m-input__slot:after { - border-color: transparent; - border-style: hidden; -} - -.coupons .m-input__control .m-text-field__slot input::-webkit-input-placeholder { - font-family: Roboto !important; - font-style: normal !important; - font-weight: bold !important; - font-size: 1rem !important; - line-height: 1.1875rem !important; - letter-spacing: 0.009375rem !important; - color: #323D6F !important; -} - -.m-text-field.m-input--dense:not(.m-text-field--outlined) .m-text-field__prefix, .m-text-field.m-input--dense:not(.m-text-field--outlined) .m-text-field__suffix, .m-text-field.m-input--dense:not(.m-text-field--outlined) input { - padding-top: 0; -} - -.max-height { - height: 100% !important; -} - -.max-width { - width: 100% !important; -} - -.full-width { - width: 100% !important; -} - -.full-height { - height: 100% !important; -} - -.hide { - display: none; -} - -.border-right-solid { - border-right: 1px solid #ebe9f1; -} - -.border-left-solid { - border-left: 1px solid #ebe9f1; -} - -.congratulation-medal { - position: absolute; - top: 0; - right: 37px; -} - -.a { - color: #7367f0 !important; - text-decoration: none; -} - -.border-top-solid { - border-top: 1px solid #d8d6de; -} - -.border-solid { - border: 1px solid #d8d6de; -} - -.card-text { - line-height: 1.5rem; - box-sizing: border-box; - margin-block-start: 1em; - margin-block-end: 1em; - margin-inline-start: 0px; - margin-inline-end: 0px; -} - -.pro-nav > .m-tabs-bar { - background-color: transparent !important; -} - -.pro-nav .m-tab:before { - background-color: transparent; -} - -.m-btn { - text-transform: none !important; -} - -.list-unstyled { - list-style: none; -} - -.vertical-center { - display: flex; - -webkit-box-pack: center; - justify-content: center; - -webkit-box-align: center; - align-items: center; -} - -.linear-gradient-purple { - background: linear-gradient(118deg,#7367f0,rgba(115,103,240,.7)) -} - -.grey-bg { - background-color: #f8f8f8; -} - -.hover-pointer { - cursor: pointer; -} - -.justify-text-align { - text-align: justify !important; -} - -.relate-group .m-icon { - font-size: 40px; -} - -.relate-group .m-slide-group__next { - margin-left: 10px; -} - -.pointer-events-none { - pointer-events: none; -} - -.btn .m-label { - color: #323D6F; - font-family: Roboto; - font-style: normal; - font-weight: 500; - font-size: 14px; - line-height: 16px; -} - -.mtab-tab-linear-primary { - background: linear-gradient(270deg, #4318FF 5.56%, rgba(67, 24, 255, 0) 100%); -} - -.mtab-tab-linear-neutral { - background: linear-gradient(270deg, #E9EDF7 0%, rgba(233, 237, 247, 0) 100%); -} - -.mtab-tab-line { - align-self: stretch; - margin: 10px 0px; - width: 87px; - height: 6px; - border-radius: 60px; -} - -.mtab-tab-indicator { - margin-top: 3px; - margin-left: -1px; - align-self: stretch; - width: 22px; - height: 22px; -} - -.mtab-tab-indicator-primary { - border: 4px solid #4318FF; - box-sizing: border-box; -} - -.mtab-tab-indicator-neutral { - background: #F0F3FA; - border: 4px solid #A3AED0; - box-sizing: border-box; -} - -.mtab-tab-title { - position: absolute; - top: 29px; - font-family: Roboto; - font-style: normal; - font-weight: 500; - font-size: 14px; - line-height: 16px; - color: #1B2559; -} - -.auto-width { - width: auto; - margin: 0px 8px; -} - -.hidden-webkit-scrollbar::-webkit-scrollbar { - display: none; -} - -.hidden-webkit-scrollbar { - -ms-overflow-style: none; /* for Internet Explorer, Edge */ - overflow-y: scroll; -} - -.neutral-lighten-1--text .m-label { - color: #323D6F !important; -} - -.neutral-lighten-4--text .m-label { - color: #A3AED0 !important; -} - -.theme--light.m-text-field--outlined.neutral-lighten-4--text > .m-input__control > .m-input__slot fieldset { - color: #A3AED0 !important; -} - -.task-search.m-text-field > .m-input__control > .m-input__slot:before, .m-text-field > .m-input__control > .m-input__slot:after { - width: 0 !important; -} - -.task-search.m-text-field > .m-input__control > .m-input__slot:before, .m-text-field > .m-input__control > .m-input__slot:after { - width: 0 !important; -} - -.hide-timeline-before.m-timeline:before { - content: none; -} - -.pro-timeline-before.m-timeline:before { - background-color: #E9EDF7 !important; -} - - -.divider-align-start .m-timeline-item__divider { - align-items: start; - margin-top: 8px; -} - -td.text-center .m-input--checkbox .m-input__slot { - justify-content: center !important; -} - -.m-divider { - border-color: #E9EDF7 !important; -} - -.m-application .elevation-6 { - box-shadow: 0 18px 40px 0 rgb(112 144 176 / 12%) !important; -} - -.task-datepicker { - border-radius: 0px !important; -} - -input::-webkit-input-placeholder { - color: #7681AB !important; - font-size: 12px !important; -} - -.m-data-table-header__icon { - position: absolute !important; -} - -.user .m-data-table-header__icon { - margin-top: 1px; -} - -.neutral-lighten-icon .m-icon { - color: #A3AED0 !important; -} - -.m-timeline-flat .m-timeline-item__dot { - box-shadow: none; -} - -.chip-text { - font-style: normal !important; - font-weight: bold !important; -} - -.m-application .remover-ripple a { - color: #4318FF !important; -} - -.remover-ripple .m-list-item:before { - content: none !important; -} - -.remover-ripple .m-ripple__container { - opacity: 0 !important; -} - -.remover-ripple .m-list-item:hover .m-list-item__title { - color: #4318FF !important; -} - -.remover-ripple-with-icon .m-list-item:hover .m-icon { - color: inherit !important; -} - -.cyan { - background-color: #37A7FF !important; -} - -.cyan--text { - color: #37A7FF !important; -} - -.cyan-light { - background-color: #EBF6FF; -} - -.theme--light.m-icon { - color: #7681AB; -} - -.invoice-list-avatar { - width: 32px; - height: 32px; - font-size: .857rem; - font-weight: 600; -} - -.pagetabs .m-item-group.m-slide-group.m-tabs-bar { - margin-top: 4px; -} - -.m-page-tabs .m-page_tab { - background-color: #FFF; - font-family: Roboto; - font-style: normal; - font-weight: bold; - font-size: 14px; - line-height: 16px; - letter-spacing: 0.1px; - /* text/3-1次要 */ - color: #A3AED0 !important; - border-top-left-radius: 8px !important; - border-top-right-radius: 8px !important; -} - -.m-page_tab .m-icon { - color: #A3AED0 !important; - font-size: 16px !important; -} - -.m-page_tab_active { - background-color: #F0F3FA !important; - font-family: Roboto; - font-style: normal; - font-weight: bold; - font-size: 14px; - line-height: 16px; - letter-spacing: 0.1px; - /* text/1-1强调 */ - color: #1B2559 !important; -} - - .m-page_tab_active > .m-icon { - color: #1B2559 !important; - } - -.m-page-tabs > .m-tabs-bar { - border-bottom-left-radius: 20px !important; - border-bottom-right-radius: 20px !important; - height: 36px; - padding-left: 16px; -} - -.m-page-tabs .m-tab:before { - content: none !important; -} - -.m-page-tabs .m-tab:hover { - background-color: #F6F8FD; - color: #485585 !important; -} - - .m-page-tabs .m-tab:hover > .m-icon { - color: #485585 !important; - } - -.m-app-bar.rounded-b-4 > .m-toolbar__content { - border-bottom-left-radius: 20px !important; - border-bottom-right-radius: 20px !important; -} - -.m-dialog--drawer .m-card { - border-radius: 0; -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/en-US.json b/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/en-US.json deleted file mode 100644 index 013276a3..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/en-US.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "$Text": "English", - "$DateTimeFormat": "MM/dd/yyyy HH:mm:ss", - "$DateFormat": "MM/dd/yyyy", - "$MonthDayFormat": "MM/dd", - "$TimeFormat": "HH:mm:ss", - "Unit.Bar": "Bar", - "DeletionConfirmationMessage": "Are you sure delete {0}?", - "BasicInformation": "Basic Information", - "DetailInformation": "Detail Information", - "OperationConfirmation": "Operation confirmation", - "NextStep": "Next step", - "PreviousStep": "Previous step", - "DateRange": "Date range", - "Total": "Total", - "Item": "Item", - "All": "All", - "RowsPerPage": "Rows per page", - "Permission.Add": "Add", - "Permission.Edit": "Edit", - "Permission.Delete": "Delete", - "EditIn": "Edit in", - "EnabledConfirmation": "Are you sure you want to enable?", - "DisableConfirmation": "Are you sure you want to disable?", - "CronExpressionNotHasNextRunTime": "Cannot calculate the next run time from this expression", - "RunningIntervalTips": "The running time interval cannot be less than 30 seconds", - "DataBoundaryPrompt": "Default display of the latest 500 items", - "CreationTime": "Creation time", - "ModificationTime": "Modification time", - "WebsiteMessage": "Website message", - "WaitAudit": "Wait audit", - "ManualSelection": "Manual selection", - "BatchUpload": "Batch upload", - "PleaseSelectStartTime": "Please select start time", - "PleaseSelectEndTime": "Please select end time", - "OperationSuccessfulMessage": "Operate successfully", - "DeletedSuccessfullyMessage": "Deleted successfully", - "CreateSuccessfulMessage": "Create {0} successfully", - "EditSuccessfulMessage": "Edit {0} successfully", - "DeleteSuccessfulMessage": "Deleted {0} successfully", - "BeEqualTo": "Be equal to", - "NotEqualTo": "Not equal to", - "FirstAlarmTime": "First alarm time", - "LastAlarmTime": "Last alarm time", - "ProcessingCompletedTime": "Processing completed time", - "TimeType": "Time type", - "ProcessingCompleted": "Processing completed", - "CheckFrequency": "Check frequency", - "FixedInterval": "Fixed interval", - "MessageTemplate": "Message template", - "AlarmNotification": "Alarm notification", - "RecoveryNotification": "Recovery notification", - "ChannelType": "Channel type", - "AlarmRule": "Alarm rule", - "AlarmHistory": "Alarm history", - "InvalidCronExpression": "Invalid CRON expression", - "AlarmRuleBlock": { - "TimeType": "Time type", - "ProjectIdentity": "Project", - "AppIdentity": "App", - "MetricId": "Metric", - "AlarmHistory": "Alarm history", - "AddAlarmRule": "Add alarm rule", - "EditAlarmRule": "Edit alarm rule", - "RelationRes": "Relation resource", - "MonitoringSetting": "Monitoring setting", - "AlarmSetting": "Alarm setting", - "SelectItem": "Select item", - "SelectApp": "Select App", - "ChartYAxisUnit": "YUnit", - "ChartSetting": "Chart setting", - "ChartSettingTip": "When an alarm occurs, the alarm history details display the data trend in the form of a chart", - "VariableConfiguration": "Variable configuration", - "CronExpression": "CRON expression", - "GetTotal": "Get total", - "TotalVariable": "Variable", - "OffsetTip": "The current time is compared with the data before N cycles", - "OffsetPeriod": "Period", - "LogFilter": "Log filter", - "WhereExpression": "Expression", - "BaseInfo": "Basic information", - "TriggerRules": "Trigger rules", - "AlertSeverity": "Severity", - "MessageTemplateId": "Message template", - "MessageTemplate": "Message template", - "IsRecoveryNotification": "Recovery notification", - "IsNotification": "Notification", - "RecoveryNotificationTip": "Send a notification when the alarm automatically recovers", - "NotificationTip": "Send a notification when an alert rule is triggered", - "AdvancedConfiguration": "Advanced configuration", - "ContinuousTriggerThreshold": "Continuous trigger threshold", - "ContinuousTriggerThresholdTip": "The alarm will only be triggered when the trigger conditions are met for as many times as the consecutive checks and evaluations are performed", - "SilenceCycle": "Silence cycle", - "SilenceCycleTip": "If the alarm does not return to normal after the alarm occurs, how often should the alarm notification be sent repeatedly?", - "ChartPreview": "Chart preview", - "ExpressionTip": "Please refer to MASA Stack Documentation Site Rule Engine Introduction: http://docs.masastack.com/framework/building-blocks/rules-engine/overview", - "MetricMonitor.Name": "Name", - "MetricMonitor.Tag": "Tag", - "MetricMonitor.ComparisonOperator": "Comparison operator", - "MetricMonitor.AggregationType": "Aggregation type", - "NextRunTimeTip": "The next 5 run times:", - "IntervalTime": "Interval time", - "IntervalTimeType": "Interval time type", - "SilenceCycleValue": "Silence cycle" - }, - "AlarmChartBlock": { - "ChartPreview": "Chart preview", - "ChartPreviewTips": "This chart is only for reference of preview effect", - "UpdateChart": "Update chart", - "YAxisUnits": "YUnit", - "LogSamplingPreview": "Log sampling preview", - "LogSamplingPreviewTips": "By default, the latest log data that meets the rules in the previous period is obtained" - }, - "AlarmHistoryBlock": { - "NoNotice": "No notice", - "AlertSeverity": "Severity", - "TriggerRules": "Trigger rules", - "FirstAlarmTime": "First alarm time", - "AlarmCount": "Alarm count", - "LastAlarmTime": "Last alarm time", - "HandleStatus": "Status", - "ViewAlarmHistory": "View alarm", - "AlarmDetails": "Alarm details", - "HandleAlarm": "Handle alarm", - "VariableInfo": "Variable info", - "OffsetPeriod": "Offset {0} period", - "AlarmInfo": "Alarm info", - "AlarmTime": "Alarm time", - "HandleDetails": "Handle details", - "RecoveryNotification": "Recovery notification", - "ThirdPartyProcessing": "Third party processing", - "SendNotificationAfterProcessing": "Send a notification when processing is complete", - "HandleCompletionTime": "Processor|Processor time", - "AutoRecovery": "Auto recovery", - "PostWebHookTip": "Auto recovery", - "ChangeAlarmHandle": "Change alarm handle" - }, - "WebHookBlock": { - "AddWebHook": "Add WebHook", - "EditWebHook": "Edit WebHook", - "TestWebHook": "Test WebHook", - "SecretKeyTips": "For SecretKey usage, please refer to MASA Stack Document Site Alarm Center Development Guide: https://docs.masastack.com/stack/alert/develop-guide" - }, - "ChineseLetterNumberUnderlineValidator": "{0} must be Chinese, Arabic numerals, English letters or underline", - "ChineseLetterNumberValidator": "{0} must be Chinese, English letters, Arabic numerals", - "ChineseLetterUnderlineValidator": "{0} must be Chinese, English letters or underline", - "ChineseLetterNumberSymbolValidator": "{0} must be Chinese, English letters, Arabic numerals or some special characters", - "ChineseLetterValidator": "{0} must be Chinese, English letters", - "ChineseValidator": "{0} must be Chinese", - "IdCardValidator": "{0} is not a valid ID card", - "LetterNumberValidator": "{0} must be English letters or underline", - "LetterValidator": "{0} must be English letters", - "LowerLetterValidator": "{0} must be lowercase English letters", - "NumberValidator": "{0} must be Arabic numerals", - "PhoneValidator": "{0} must be a valid mobile phone number", - "RequiredValidator": "{0} is required", - "UpperLetterValidator": "{0} must be in capital English letters", - "UrlValidator": "{0} must be a valid Url address", - "EmailRegularValidator": "{0} must be a valid Email", - "IdentityValidator": "{0} must be Arabic numerals, English letters or hyphen and dots", - "InclusiveBetweenValidator": "{0} between [{1} and {2}]", - "LengthValidator": "The length of {0} is {1} to {2} characters", - "IsInEnumValidator": "Please select the correct {0}" -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/languageConfig.json b/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/languageConfig.json deleted file mode 100644 index bbb1d45d..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/languageConfig.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - "zh-CN", - "en-US" -] - - diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/supportedCultures.json b/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/supportedCultures.json deleted file mode 100644 index bbb1d45d..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/supportedCultures.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - "zh-CN", - "en-US" -] - - diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/zh-CN.json b/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/zh-CN.json deleted file mode 100644 index 34d3ce92..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/i18n/zh-CN.json +++ /dev/null @@ -1,280 +0,0 @@ -{ - "$DefaultLanguage": "true", - "$Text": "中文简体", - "$DateTimeFormat": "yyyy年MM月dd日 HH:mm:ss", - "$DateFormat": "yyyy年MM月dd日", - "$MonthDayFormat": "MM月dd日", - "$TimeFormat": "HH:mm:ss", - "Unit.Bar": "条", - "Favorite": "收藏", - "Source": "来源", - "Search": "搜索", - "Type": "类型", - "Copy": "复制", - "CreationTime": "创建时间", - "ModificationTime": "修改时间", - "State": "状态", - "Enabled": "启用", - "IsEnabled": "启用/禁用", - "Description": "描述说明", - "Explain": "说明", - "Disabled": "禁用", - "Action": "操作", - "Add": "新建", - "Submit": "提交", - "Save": "保存", - "Delete": "删除", - "Edit": "编辑", - "Sync": "同步", - "View": "查看", - "Handle": "处理", - "AddChild": "加子级", - "DeletionConfirmationMessage": "确定删除{0}吗", - "Creator": "创建人", - "Modifier": "最近修改人", - "Rows per page": "列/页", - "Male": "男", - "Female": "女", - "NextStep": "下一步", - "PreviousStep": "上一步", - "PCS": "个", - "Preview": "预览", - "Fill in more": "填写更多", - "Avatar": "头像", - "Icon Code": "ICON代码", - "Total": "共", - "Item": "条", - "All": "全部", - "RowsPerPage": "每页行数", - "User": "用户", - "Name": "姓名", - "Avatr": "头像", - "User.DisplayName": "用户昵称", - "PhoneNumber": "手机号码", - "IdCard": "身份证号", - "Account": "账号", - "UserId": "用户Id", - "Password": "密码", - "CompanyName": "公司名称", - "Address": "地区", - "BasicInformation": "基础信息", - "DetailInformation": "详细信息", - "OperationConfirmation": "操作确认", - "EnabledConfirmation": "您确认要启用吗?", - "DisableConfirmation": "您确认要禁用吗?", - "DateRange": "日期范围", - "Sms": "短信", - "Email": "邮箱", - "WebsiteMessage": "站内信", - "WeixinWork": "企业微信", - "WeixinWorkWebhook": "企业微信群机器人", - "WaitAudit": "待审核", - "Adopt": "通过", - "Fail": "未通过", - "Normal": "正常", - "Invalid": "失效", - "Permission.Add": "新建", - "Permission.Edit": "编辑", - "Permission.Delete": "删除", - "Team": "团队", - "Role": "角色", - "Organization": "组织架构", - "EditIn": "编辑于", - "ManualSelection": "手动选择", - "BatchUpload": "批量上传", - "Second": "秒", - "Send": "发送", - "Each": "每", - "Draft": "草稿", - "Initiate": "启动", - "Disable": "禁用", - "Withdraw": "撤回", - "Ok": "确定", - "Cancel": "取消", - "StartTime": "开始时间", - "EndTime": "结束时间", - "PleaseSelectStartTime": "请选择开始时间", - "PleaseSelectEndTime": "请选择结束时间", - "OperationSuccessfulMessage": "操作成功", - "DeletedSuccessfullyMessage": "删除成功", - "CreateSuccessfulMessage": "新建{0}成功", - "EditSuccessfulMessage": "编辑{0}成功", - "DeleteSuccessfulMessage": "删除{0}成功", - "GreaterThan": ">", - "GreaterOrEqual": ">=", - "LessThan": "<", - "LessOrEqual": "<=", - "Equal": "==", - "NotEqual": "!=", - "BeEqualTo": "等于", - "NotEqualTo": "不等于", - "Count": "计数", - "Sum": "求和", - "Avg": "平均值", - "FirstAlarmTime": "初次告警时间", - "LastAlarmTime": "最近告警时间", - "ProcessingCompletedTime": "处理完成时间", - "TimeType": "时间类型", - "Serious": "严重", - "High": "高", - "Secondary": "中", - "Low": "低", - "Report": "报告", - "Pending": "待处理", - "InProcess": "处理中", - "ProcessingCompleted": "处理完成", - "Notified": "处理完成已通知", - "CheckFrequency": "检查频率", - "FixedInterval": "固定间隔", - "MessageTemplate": "消息模板", - "Handler": "处理人", - "Test": "测试", - "Minute": "分钟", - "Hour": "小时", - "Day": "天", - "AlarmNotification": "告警通知", - "RecoveryNotification": "恢复通知", - "ChannelType": "渠道类型", - "Channel": "渠道", - "Template": "模板", - "AlarmRule": "告警规则", - "AlarmHistory": "告警历史", - "WebHook": "WebHook", - "Receiver": "收件人", - "InvalidCronExpression": "无效的CRON表达式", - "CronExpressionNotHasNextRunTime": "您的表达式计算不出下一次运行时间", - "RunningIntervalTips": "运行时间间隔不能小于30秒", - "Notifier": "通知人", - "AlarmRuleBlock": { - "Log": "日志监控", - "Metric": "指标监控", - "TimeType": "时间类型", - "ProjectIdentity": "项目", - "AppIdentity": "应用", - "MetricId": "指标", - "AlarmHistory": "告警历史", - "Disable": "禁用", - "AddAlarmRule": "新建告警规则", - "EditAlarmRule": "编辑告警规则", - "RelationRes": "关联资源", - "MonitoringSetting": "监控设置", - "AlarmSetting": "告警设置", - "SelectItem": "选择项目", - "SelectApp": "选择应用", - "ChartYAxisUnit": "Y轴单位", - "ChartSetting": "图表设置", - "ChartSettingTip": "发生告警时,告警历史详情以图表的形式显示数据趋势", - "VariableConfiguration": "变量配置", - "Cron": "CRON", - "CronExpression": "CRON表达式", - "GetTotal": "获取数据总量", - "TotalVariable": "变量", - "Field": "日志参数", - "Count": "计数", - "Alias": "变量", - "Period": "周期", - "Offset": "偏移量", - "OffsetTip": "当前时间距离N周期之前的数据对比", - "OffsetPeriod": "周期", - "LogFilter": "日志筛选", - "WhereExpression": "表达式", - "BaseInfo": "基础信息", - "DisplayName": "告警规则名称", - "TriggerRules": "触发规则", - "AlertSeverity": "严重程度", - "MessageTemplateId": "消息模板", - "MessageTemplate": "消息模板", - "IsRecoveryNotification": "恢复通知", - "IsNotification": "告警通知", - "RecoveryNotificationTip": "当告警自动恢复时,发送通知", - "NotificationTip": "触发告警规则时,发送通知", - "AdvancedConfiguration": "高级配置", - "ContinuousTriggerThreshold": "连续触发阈值", - "ContinuousTriggerThresholdTip": "连续多少次执行检查评估都满足触发条件时,才会触发告警。", - "SilenceCycle": "沉默周期", - "SilenceCycleTip": "告警发生后未恢复正常,间隔多久重复发送一次告警通知", - "ChartPreview": "图表预览", - "Expression": "表达式", - "ExpressionTip": "请参考MASA Stack 文档站点规则引擎介绍:http://docs.masastack.com/framework/building-blocks/rules-engine/overview", - "MetricMonitor.Name": "监控指标", - "MetricMonitor.Tag": "Tag", - "MetricMonitor.Alias": "变量", - "MetricMonitor.ComparisonOperator": "比较运算符", - "MetricMonitor.Value": "值", - "MetricMonitor.AggregationType": "聚合类型", - "Time": "按时间", - "Cycle": "按周期", - "NextRunTimeTip": "预计未来5次检查时间:", - "IntervalTime": "间隔时间", - "IntervalTimeType": "间隔时间类型", - "SilenceCycleValue": "沉默周期" - }, - "AlarmChartBlock": { - "ChartPreview": "图表预览", - "ChartPreviewTips": "本图仅用于预览效果的参考", - "UpdateChart": "更新图表", - "YAxisUnits": "Y轴单位", - "LogSamplingPreview": "日志采样预览", - "LogSamplingPreviewTips": "默认获取上一周期符合规则的最近一条日志数据" - }, - "AlarmHistoryBlock": { - "Alarming": "正在告警", - "Processed": "已处理", - "NoNotice": "无需通知", - "AlertSeverity": "严重程度", - "DisplayName": "告警规则名称", - "TriggerRules": "触发规则", - "FirstAlarmTime": "初次告警时间", - "AlarmCount": "告警次数", - "LastAlarmTime": "最近告警时间", - "HandleStatus": "状态", - "ViewAlarmHistory": "查看告警", - "AlarmDetails": "告警详情", - "HandleAlarm": "处理告警", - "VariableInfo": "变量信息", - "OffsetPeriod": "偏移量{0}周期", - "AlarmInfo": "告警信息", - "AlarmTime": "告警时间", - "HandleDetails": "处理详情", - "ChangeAlarmHandle": "变更告警处理", - "RecoveryNotification": "恢复通知", - "ThirdPartyProcessing": "第三方处理", - "SendNotificationAfterProcessing": "处理完成后发送通知", - "Receiver": "收件人", - "HandleCompletionTime": "处理人|处理完成时间", - "AutoRecovery": "自动恢复", - "PostWebHookTip": "自动恢复" - }, - "WebHookBlock": { - "AddWebHook": "新建WebHook", - "EditWebHook": "编辑WebHook", - "TestWebHook": "测试WebHook", - "DisplayName": "名称", - "Url": "Url", - "Description": "描述", - "SecretKey": "密钥", - "SecretKeyTips": "密钥使用请参考MASA Stack 文档站点告警中心开发指南:https://docs.masastack.com/stack/alert/develop-guide" - }, - "ChineseLetterNumberUnderlineValidator": "{0}必须是中文、数字、字母或下划线", - "ChineseLetterNumberValidator": "{0}必须是中文、数字、字母", - "ChineseLetterUnderlineValidator": "{0}必须是中文、字母或下划线", - "ChineseLetterNumberSymbolValidator": "{0}必须是中文、字母、数字或部分特殊字符", - "ChineseLetterValidator": "{0}必须是中文、字母", - "ChineseValidator": "{0}必须是中文", - "IdCardValidator": "{0}不是一个有效的身份证", - "LetterNumberValidator": "{0}必须是字母或下划线", - "LetterValidator": "{0}必须是字母", - "LowerLetterValidator": "{0}必须是小写字母", - "NumberValidator": "{0}必须是数字", - "PhoneValidator": "{0}必须是一个合法的手机号码", - "RequiredValidator": "{0}是必需的", - "UpperLetterValidator": "{0}必须是大写字母", - "UrlValidator": "{0}必须是一个合法的Url地址", - "EmailRegularValidator": "{0}必须是一个合法的Email", - "IdentityValidator": "{0}必须是数字、字母或中划线和点", - "InclusiveBetweenValidator": "{0}需要在[{1 }- {2}]之间", - "LengthValidator": "{0}的长度必须在 {1} 到 {2} 字符", - "IsInEnumValidator": "请选择正确的{0}", - "Metric": "指标", - "DataBoundaryPrompt": "默认显示最近500条" -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/analytics/json.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/analytics/json.png deleted file mode 100644 index fee45284b9a1e1969543864e32ba13e10eb34c37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 976 zcmeAS@N?(olHy`uVBq!ia0vp^ia@Nw!3-n~zAt_Uq!^2X+?^QKos)S9|1b0XzsmFfBDepG-TyCg`9I&|{{qkd^WFY0@%+C4 zDB|{ip$AB6zU%*mE+EDNpp-L6e7*}vJ&+4zEO7n57|3u283@t>GzUn!{$Jqoe<4sD z!f*yD18D&&1DXcp0%d_xu22(zTqql;9jq8+Adn3f2QokkAi5w7FdHNSW`LA|#UTtJ ziC{n!z?Fd+K*dlsK&~^`MzFmQL68H0f)E2yHA0Mq%Yw`SD~1>dHYzN`q!JkDRV6`w z!3@l79Gn7zLc$`VVv=$S${JeQI(qsBhDOGw<`y<~4$iI~KED0|fx#i6Vd0Tc(J}F9 z>Djr(C1n-WwRNrS9TO)_o-%XR>^bx1FJ7{A+42=D*KXLjW7nR&`wtvEeEh_zi&w5* zzj5pCgC|d)zj*oT^_#cv-hcS~^Vjb`fBzX>o?-?}0_L7Bjv*GO-(GPKW-=5x@G;$a zjRKd}HjP(F;-cJQ0V!{lA~uL8=yGgYq_oHXy_;;C&Th-9PxUAE%>1L)eg>GB*gi7O zoOk9xNL}+QA>W>Y#LV;4k{$-XJ!P5dX(ry;;N_yG>AAIlrKdh9=_!ZA;wMLs2^!1_ zZ7Y#>KVYC*WbNMY*;z9FtqdcR>ddgd21c)ETU>HpZQn32;g`6S(;qp1ulOQHBV(jXDEACAzO8adqLA`0p)4G%#%A$_%TeJcKY5& zF{dNR-^^GdFX}7A&7SjG;HW^%#MXpZ)^pUXO@geCygRnwRN diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/analytics/left.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/analytics/left.png deleted file mode 100644 index ee5e3b2b46e3d738de9f13e3f3ef1b55d2fb0551..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3335 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 diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/analytics/right.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/analytics/right.png deleted file mode 100644 index 30bb2ccbf06ae9da5eb0204cdc04795e68426be4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1814 zcmcgsX*3(?8V+TeDn?={L7Joqf*DomAQc^vPNJHq&{!t5-BN^Fs#Qa;qFP%Ujiq9n zRz++@+=&v@QU829{`Y%J%7&mjIBLE;DYDchfzA-L-6W}ubqo({+9u9L$lqy2hqP_UzeSzZV zCMG+3u^bFgb*A@Lmh0f`MjNwmV!D}qNdK1TtlVQFfn(TyUr*wrG+i=uv_TW!S5o!` zitjBk3Z&Wk3o(ll5bcL3HO1Q*WRDUKEG@`A;y51Y+f57^24S@X3!w+SGvN0LkZBei zx*1{1Ose*VA3VL|Z1H{$ZM}ZQ zA3rh{P*yWz2vb}tyN|TyT{xrVmw71}i9R7*@Bi{*EKRLtVY2r`hn~!B^f2DDO$Jwk zITuV&*t-mRZ%JrZLsi^KhJ)B|hFBqllui$S+8t76dr;c(tb%_UcWTsVp_{f!e?bvl z!VR_+3Ya{tl!44iH$fB~+ESmO7SvMeOU|{23C=HxF;+ieB4H+B46Ay+yMuL|xKtGJYeKV4e9(vqN4+T{x#i=(H=^%8^ooiD zqls{kP1(QE^;Rzel`|l_xuYMj9Z#MeiP!7?0Lq@7oXNMSis*R>?O2YDv?Z4!(_4#j zdcJ!`XPYHyXcr>4OA9=d%pDyxc8pLhq$jP?-4bH{Y&?1VTEV|69)5SgD4IaEq`YO_ z%@4PC`^|sql*~~TCX_#(Zc1I740xh)O`#^jhnDxr{lUVz7p-X|yMO8`9&wNx5SuVG zQp|rV%2eK3JWziS84P9|Qm$7{ZHUL1TJ~?%-DFvW9r=EQc|nla^p6y%Qn@8K8UJH+ zaka-4gCHSgxoNM2l@y3>J)gC@J04M{175Q6$KV!Mz15Y;>VxK1CRaEUvU4ParMAQ> zOn5En4CMmCsm%~O1h2-!>|>O~f$^w$a*YuL?4U}G9+;o^`|Pf#N1>w%>GVHE{pC1r zkSb90RN7Ys-heZw#3KwY{J5mswD z9>FvQd#*On%>6C|IJo-44d|CH5FWb@era$|O?Go;$#R#1#8zA{vBf&GW zLif7Rj&J(~`&pfH&hGZFjvdX>TdOwouluDM38p=d?BY}8AaD41OvHl=x6UE<&*6OJVla?eKVoSbgZ*dQbk|H^0lYB20Ka RB - - Illustration - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/auth/register-v2.0a9e487c.svg b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/auth/register-v2.0a9e487c.svg deleted file mode 100644 index d1ac05b0..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/auth/register-v2.0a9e487c.svg +++ /dev/null @@ -1,351 +0,0 @@ - - - Group - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/eCommerce/rectangle.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/eCommerce/rectangle.png deleted file mode 100644 index 1ab629b5ed1914bb0a62d9a5937622456388f4ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17020 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 RBIW=9002ovPDHLkV1nVyk&6HT diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/eCommerce/trophy.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/eCommerce/trophy.png deleted file mode 100644 index 98f0b8d0ff288f760785384656be998677911fdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69803 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 AZ2$lO diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/login/left.svg b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/login/left.svg deleted file mode 100644 index 103158e7..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/login/left.svg +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo-en.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo-en.png deleted file mode 100644 index 7f0e00766579e670a7ab8f5183988159a8285630..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9711 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 Q`B{Lbnl7U9fmQhb04A`XaR2}S diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo-en.svg b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo-en.svg deleted file mode 100644 index fbafb572..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo-en.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo.svg b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo.svg deleted file mode 100644 index 0993edae..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/mainLayout/logo.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/messageTask/send.svg b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/messageTask/send.svg deleted file mode 100644 index 853702e9..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/messageTask/send.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/messageTask/test.svg b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/messageTask/test.svg deleted file mode 100644 index fc68bd37..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/messageTask/test.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/status/401.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/status/401.png deleted file mode 100644 index 1f94504e8dbcec2f81416ea14f17fd2ee0d000bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7469 zcmaiZbySpJ&_Buoi^$T_-5ruEptOLrbgKx6Gz$w$$Wo#r($ZZ5OXn`&(jiDJu5?MK zgv1iR{l4ct=lAFPob$xY+?YG}&fL$PC)QA3i~JtbJpuv(a_y(;#sma+?C{?MKw|te z?`7;E{zdBb)Y6xLfQ;t9`wl@y76YDn$Jba(l>jlyvV|uA&MJB;1O&D5WLJ(v1OzNy z+UhFLp?CJ??cZ8sLr4x6TQQGyeAIPP-}cApiRynL&=swAnIRYEIxA-VN7?#Yx9zT3 zQ)xco3qsgis*8|!dohj%6??^Q#0}-iF^+q>Rh9F<_-uvlUHK_Hh{Y(XmE)w5z)CkIt&QiVBx|m_J3V!q<4X>Zh~|>g>e?<(bUER zUpeSj&xEP8lacK;>L2RToiw=I1%

3jTycrL_szIH8=<@(v`fFI7p_jd-U3q>?Hu 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 diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/status/404.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/status/404.png deleted file mode 100644 index 39f2c595ed747ae3b08a23a9ecb2ee60ccd87c13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13829 zcmc(`g;$i_7dAW$A>Bx)2nYg7cS;G;-H0F!N)6p5DF_G%f+#f%UDBaaA|)X?NcVtr zzGt4_yS_i+{aA}Ni~Bxv_O_~yYm(v=BIv(2kRksu`p6nt0?hOQ+X?%DAm~hiDa97ZO=}y^Q~WFyt+?p=ou%O z_xM`TeXp#nC(wzXN2$mo?r{R$)?Lyn*q=q2OQ~TiECBHT-A@(qJxHjkOwNZ= zuOYSX*``WQEl!OWGa`)k#~NwxQ3bi#-T0kJIA0>(-w4Z=yxq#BUbiA%c=@zE7vEA! z`u3HRfvvj1tU-1&AAK1~#?U(mgzX**+Q~-e)Rryl@brs?d_E&#>W($3{AC2C>Dz=y z>=A+O(|89uOPdu`Hq8SzlB}N!^s9txMz}xlmbk-p9@?s}; z+>X3c{3Ys8IBqNCwHD9U9J>=1)ezsSi z$SrpspxPbcJzvX@4GGPkrR^g6QJu{hgWJwk78gH7jGL;LdJuNFrf+`-d^ewD_M*L& zPc=ctT(atmZzapWwTOz=7fQsq0%6E_HVIk3<@*QMWb&!Rt{siOPjr!Z0?*ucBB}!P zL&HZuUdO2msz_UDlKIpsbueE9jqWE0f5h@IKl9X_9ukJS|8TV9ffsX_ZhpESzSP7{c1jp2&SAc|9+P|Y z*zcb>1_MQdfHrJE8tSg>SpO}%s+mBH-^Hp)>YqPKFyvi+jv3YVRMO_@TPJ?=$B+G7 zQw(uLNnwI-3~?x>nS+N!p@Z1=Z#(Qv$qUdS(w3tcURF%)g`SEAnzcI9XI9^l*-(vTP**nZV zK@O#yt7&svdZaDH9-Y^^Urz2&P$u!)8+Y8+iLq?IFL*@}CVJ1oE_Be#Vj_?LQ zKI#4Mc?=p8>&_>tNJ}rMpwM@Dn`{*deA6_a5rCSenF-;(Y|36MGUqPNh8ArTdtX1!Y4OMShv|h+A-= z(X(yBbzS#+EkyW04hjGRBjUfuic&vXH;Iuhe;x{t%K-y`S4KX=NXz%Y zqay$OYo=>RM$yHANl=Id)j+F`SW2xDj={&1V37)k9jZt9srWm+m3vUw2; zA$w#UF9CI@k4(!43f(J7VF_r>9C_0Eq@bB0>=MvCXcI&x9JhQehk< zgHik#;Ao1(#}gQwkvFBUqT4I66^FWq8#@tYYO~6pq!ZWFV+?|!iKH+J1z^f$lR>|K zePRtF)};h#f{JrGD)+D!B7tA{MpbyeWd}iDd~kC`%HebIN}bF2hK|sLiDCdi&agVD z-={me8+)Ge1&PcZ{Pd?r=SG=V^>^(U>A1@Do_{iR&iV5l-kCy##E=-a|Ztqd2 zq5jVi7JR5XK}lqnuoQdjRn0YlYzG(3jTrNZWl-h_Ny>1X16`1o3}5uLM*l-tjO0W(4%f*9(q z(foVnBE!*IENY9-Tp@i51PBXoG$DW=U$WONtnW9k%!8RNk4y|x({73dgPx>MS^ONy zr^Q-`1)!;U^?hToJO~XeMMnoh?a5&Gtbu%kvM8HIw$O;Dc~YDn(Z5DU{`V?B9i!rJ z5`%eB@<48OoyLKrTt_mPiVADN`@ifIVO&aLV3=Chsx|1v$O)Vb`y`CDAp8gqKl5B_ zE?$9)@$*2AI{=6Wp8od*NzWew<IB|#a_<>Z2Y6`v0QvY-hls&Su zg%CmLk!SSWmN9Q0!mLs8BjQ%;%SRDd~Apg9O+K8E4hnz55)&m ze`CG$LO4I=>HTQo+9X=KI)X4?40VJK*3N>`TN7uTKm9qbKw}Hs)^2vLH(~QFp}ULv zIbXhT7QQc#m!y(G)%>PYl9$9}@rU;oGSGrNo&;0J}Rb5Ma)<%RU0ZTe=rH0#(Q!4#4frYb( za+eC|5-ChH9k13swjXG$-#Uzc2TBtxlGTjw)6y3X6w;HM0+!R0k2p4PfyEoTu`R(8 zAk;N{m6DH0m}dDsz|-}wdQ*3CI>Juy{S+8I^t6v>))e<0?nEL8 zWe|j_Mg>s!rr$HCJW$G5;X@5==_m9w_iXF48D_pB+%?FnJk9ps|1@GucHlxebrtIT zu+23O&_9w`Fxf-k>k7*%_7rNW8rk@xO+;3mR4y&FanZiRI6cAopt3aNUlI=ea2=howJ8brGvLGBn9tKURr5ry)W1fwVG4J|8ULHJFhrEh zW_oDMBdtLUD`fTu7Vol7%86|>jtSE1KOaAw>xj>Y-2NeO*JoQK`_Hw4miyqwvMWEZ zKGiQA%M8=Pjqm{~OlQPlb98NULzy|BR+g!2NB(`oD^~g0M~V^U9s;Pb0f@t8#c4vm zqjIY)=IWlt=>RdI3)86*F`lW;DEDWUSJdGuSs*qI#b{yPrS%@kb~)T8-B==VVee)zuepti|R# zPQGWA{{*I-6r+M=VPUVmLOyXm)SX8Z4$QKtKT;VZY`;`^Y#FlQY}!-#@>S2tz;YXMZ7YK7#}(f6a#0>7niQn|xXW>29Of zs_<3@18xsjVZ#r-bCv(?0{5dm)^{o1bKGw5BRAl*J z5Zb_1zbiT1$$fI(P5DGOCoUw~h8KDKHFd5-z4%@=Op}$q-8rc1Z2g6(-i%6K@b&C3 zZ51;`9;Z1S7qkKqb7&7>!XGh-&OPf3lI(#xuM)|-7`DD)5izArq5ewLsu2!_TPrGh zN(plCp-NFAG0%vGtfO)K-VXjZF_DXd!_#L@n)=H1yb+3A**!(kFu+@RD}4WHPeM(T?fAa2CPW6u_#CiDdiJa$hB< z2LFvh4O4~f8sNR9o$yOol!|}04q5pd+U$)$E8>Z#SH$*ed}uenHE_-gQPnn=Vy8FL zj-w5!a+wR*c-vK9RF&=GU5=Sp-fU~OSi+(wzzh;PR@02uJX=U5a5Bvz9F`DaW8~#F zB+DC%@PdE47e}-~2p0R%v%DRu7n*BmUMnm}#~3gkO!U@hcc!Pi3(LTF*ON-3u}tdL zBWw?e?bZ{qlK>GznkdpcJ^-;h3vyI8VDPHdXG4i}iOxBiSG-u|5)^u?-{?Lo#Mbxu zC)%wl#X|>kg^_#6RpkdVQzAmY(?9=s`gu(stI=_(-;|cTJl-(cW$*=ZB1X&DiIH~b z0C(sqiA^J|g_|MlSo2YU-15KAUdb#^coe-RXYNtv)$pc;WvY#AG^xZXafeTvx4*^b zzQI~(O0Xh}d|wb(E}^%@NcO^X4GQ$J%@=2i_t z?+b1a91?f4m#ZVmk~`_s9w*(gT(l%(;V`BBWUHtf4Bi7>84-lWd`-2+WZ(X_FyUH| z9PR47g-QxLUIOzb^yIx}7euqw=qN+7a(R{J1Cd_L0y_u91G< zVNZ4U!BqH>JIA8GlxaBCQ*3&O9is!`j|9*E4HCekV+4bkUFD6-RP6DN zj42R=2WLO_s8@7*(H1N$OvlinX%PChzER!nz4|%}lt(PTDc5{U|Eu^Jh+?EyO;w=# z-&X47O=;P{=(mr~;*<&D{m%ul&n@t$!hnmPblGT$XZj;2uA?XU8L6K<5AxZA?&?M^ z@@}7P2@7$$*r9maO2`22n=ef0tiT*PfTT#=%lpT316&$rh{O4r4*i^D=pdGR4h9u^ zqK=sXJbBlYmf@`_I_Eg{bfCM2>Cmd^44k!u2pMPChMq&`}`QE)t#tz5Kq--}N0yJVJm@IDl-mKb zW&Y2uX#q3;;Uhp0$~~RdivNUr>5~{@Oo|sH{k0SkX2dBEKmvQpy`foCkbk5|0R|>* zrHa^)3+0`!oh8~rA#w^pqnGXJ1ufhjnzP)1*nV_NKZVEvj*si5p)E}BvT(%%wMSCS z8Vn*g2A&q%JMeg!{0+-A1e}(12g2_9{PhWopwMFg*Dns8V!fc~gs|vP<~;{ti@`2Y zSEP>MCHeS7*;5L_;%Ex1d47TY)?-@lF}vXs(SI00nn6N8KUSmw?v8q^ingFk_Hx*- znhb47BQO&^f)G0uJTCRtm@CABuqV)F!!!_eR@yYYchCZVNI$JpGzi5h=WN0HRhZ7o zU!_NT1a3JC6ID zb*PogCD+Gnf2)e0J4v7u5>S4qhK(!5VKNXZwo}@ajgPjHil@{}sfv9u*5f}4SeCZ& z2i|wdfX_hCgb7pq-{5d)eEn4e`JMaBj4_kyw(bRkpwPkSfVN9DCScBLgO^X+?m<~R zkHow%UdN)XX(w0Ssm`Mq=%0MpRa0;g-5~hADD_Yu|1Th%zGm^p+oGr?Tuqy3j)tuy z*Pxv_rMgbIIs)MygZ&l|MV(2Hqw}ku3r+V!4y+c%WTalVvfVwN(DZ!+zOHGw|T7Qmw>$TA;F%w0bO2(9S1TQ)x+W6)|<(6H~ zsOa*0V}I)F*YW5nQA^1Amf2yK%6iW> z#vc_PMGCPUy!di@P+%m2u=CRRm87`)S#5QfS1pWrq|ij`yAOYR|8dB~(xUc0?t_x^JXMTW89e<-t;M;}a9ePP81 zf=^GG`9hAZQDP^r9LILKcXW9TlBv5ZqCX7$o#NL|j`{V}h`RS|hjwN-z!t^<%^xgYM{^!M~zi^+_=+}+Vf^Np&(VjdmDVwhbnEZhDUL}*~ zzFReTYT|KWl)2)*XuMu<`97#7zI)F!OeFXic5|36%tu!0??TP^v7E{ru~M-b6Y?+l zu)mT|z1nU)sgNn5oA8+n!%1W`9Xc&V!`5IdwMVR1%vUICb<3&RYW0)b!Cv7x{Y=Z5 zB*NQ2@NKs*CT;l6B-kOO8N`TRM#=ZEGnX=xm?sDM{k~K(5A%H_DtQ>WV9?X>c!4iy zp`<2gc)snhE##Pf>A32>o10k3QW>R@k7k&+4K+x64YtF!`r`X6xwt zp6!$V3UVJ6tDA*b*q0@ix+MOfG;vgSysWV&@*&}j&v*R3SDV~KG0crR8y1EB0veS5oTh{W~RL(>6p%a0V)m2ra_%9EFXbC~H5MdB!MMDFV0$-hPze9lesgknFi57OhqhpH5TIBIh=bDUE zUk!fW^`LNc@S>JCdx>O&kG2jbN;kVYZboJK{BjMw>TBQyMw`bdv&Ea&XEl~8$x^L) z4J1dE{y|9{0m=)6;i#YGIhO&~gf5ac(M1n{r-ga(06B?(CF;eK+WzYQ# zI3l+8{F@_KPFGbrSc2N-ZKi{^%t#i4XN$}lx#ja2NWxeD4K5%$Mm>zDmuK_wB`?-H zLaYyXx>HOmnJ#bMjw)Wd-_2u`Q7iFsKOY1n$hB409e>Ivcv@xo@gm;~Giqn>$1c2#dq-~^& zZo(G|3CmiFv8ri?3DsTsJTJ8n4<2t+HI!A?HyB}7WQydf)_!#PJ9hMfjH#gXPQ_Po z*~v?9Z@3t_H}uS5+Q;|&E#KPDWJq1D^aN# z@vG^(-&0#<{{1rc3$}LNf4m9dl}Znn6sV(u_T%q?Ch!;F)lMRjdzhlTpB42GN6AhE z-&U1eN%P*FJPf{6VBR})(kYC%UnD{0V{mqx>z-w7ik(-f&5zfzNK;-;=abeh^RHsE z>p1v6j|yIkT)@v$R82aDNBF^NotWF-zw2XVwd>TC^JNGc4f>$-)98q?{rBbHx6P*! z1h==ruD7O{c%qM`{;e7;=3O0Ux#vn4ik0jUo3ywvGKPMGK|2|-OHjeV*U@!O2l+Wv zm18J{`?Vq8J*IbkYxpB0+-M(Ntl#>VcXe8*iax&D^KEZlyW|WCTAS~b^W|u-grq7V zu^DtD$0ubvCjI5iE=b#VNlugbYpYB(;KdVP+^b`hZH3`dsRRtW7KTIP>v|yd82Sq&5WIUjHRvS3*nu~sJ7m&_4D7NOfr$moXq}8pee^sTNZ1XYTzV*BC3qG#Cyr*^1xO(yPfh{4GWv337 zWv8^ktLY%gy|;$0ExzNaA@s}A_xK*$YyFN#Ps_Va0mD!sgJDdGS$>%z*Jn2?eR^`_ zlCo>IZ+bHGBf{Cw?s<8m)9`VYR{QZr*q#5t+amU__!fGZ=E<0xXA>qgu?5@bIf+Mt zD#-O}r;6K?)r-rAe2%r3{-^4)$>}9&Kt$Om9E82XOj!)OSj|yK7P4Zhf9?bGcF>lM zQ3rKWiHxy5FD;TA%8z`X^F^1nOyAda@9kpXCvut3?RkgNZ8h6~f(}(C;txkR)p_`q zpE6gH#T|QZco$5?`Li@7eX{)MKfk!zSCuV*EmnukRWo@y3h8_I>~)*J-W(pA^XS&! z#*cxj9DJ4p$$b-wlv|uJ$1XegmwMh@&VvfcWrp{u@3hXh>{%R*y4=15TMHkzZN{_@ z_?Ia`vAY!Kql%(Q1j@LVw#D@Xl;+m z6&n(?{UDgd_`zQMRG7AgW5$j?YQDK-s#rat-WJ+vQYQrAd;W2wOlW#SaqsX1=iY*6 zs%<;xTbbMXZZ{p;5JdxsSbQgeSP5V;T_lIU#DZ!Th z+HkUBkKAWUH(`iF?k#Zqon3Gg7EwkesdUeQ(!Wq&y>_MOi1D3pG$mfkHtOelhzA{z z^llhw`eIOVKc<+Uu}__U|B74Sw$sU-b4S@j-B=Ar44mRMy=nVY{g9+>|N7t8o>WYN ziH)a)jbuKBkMs!3G4{YYV$$BJ<8$-a7x`>N+y7KBnbL(q zH^?Es#xS|c$%IOoXnGVMtSMGrE!{}R7`9v;EW4jtQP9@4>q{M+oaOC`8gkpSelR6N z^i`A$WS>91(np-|8YdznbUH+OS{-{d*JbXE~-C^b$fPM-zUu`Awk+$ zqecS90{-f z9tOM1Wm_9KEv?fj#;n8-?$A=p2{(TGkhqObLbgK$p57I_8Ct=oH2{i*;C=h^s|zCW zYxw!4P~<$U26btog2bLt!Q|&93SF*Co{AOcau`5}Tm8z*NgXt@ckAH8ZMi7FXJa&k z{c$`heyY1zf~fO!w@HQ6!myh!^aSnZ@dsYZcwwSNgL>lvWLN{W>y?ohg4-Ms!>2=y zGQ^7eL9_doqbH$X>OzbllsF)`%(bR=&UizX^$X=W%RkE-nNbVLt&RTiH0tI=oGmb8 zS(UXXo@Wq&cqN5l^lr*5cxJx*k(kcfRd&eal{sE%`+CWFY{4>oUw6{>mQR}<%Q7Fg z+bIL|Qjn%27H;+@8Lj_rzM`D31_~t|yx$v5@X|x`ABn-BT#zyo9!Juv&3>)bmtARa z8{fy*{>RP}C^$bg?VTFPcSR&NzIA)How$xu*QQ|FVcJI{0x}@-#`1b*8~*c6>~dt- zUsepdf8{-*uTz5V^Suw!^FZTnsKQ^h@DN{r5JE(l$al56o;U95f&nFN{@-S*Hy53}c>3|z2<1e4B8vXp| z6G4IZ3v22NPr~#;SeTpPKMZWJZsFS(`Yyj0d)l)n*>RUQ^B9At~gX)iD0^U`TM zqun0{ETpDEaDDOVc0fCq@12i|3snKs5b0Jq`3d%0itS@z(_9+u@%+m_U)B89Z-dxg zMy#tv&#wwy8OnZT*>4L`mXY>+;F77DW7*5OD4o+gM7^_sEr-N@Q`VcqDEz#by;q`M z(1)#Ltq2`gx0yE`vS+ATl;6xzGZTrzK7zru^O2<^a1s-65*MRot+=I5Q7?8eqfhJ2$I;iF{3{m6RE8R7i^I}jsXl%BYHSqd*n%=mLM@OKYsf?uP{g=a5 zcpdHiN|-M2Q6$`zcxF+uYL`hZo=I`8Rt-y0Oh|f1WD~{)| z#5ZL)DF5$%>q$q@l3+LVddeyTUy~Z_cY=T>M?Uhf;nTw*R$)dBNs7q+_)J-=V*zRT zFaI{(r5|dAcs3rf)7%K*hP2&coL}VK=|)`^GIww?8}L_{o=t;bgQTp~a3;9MeqK**MJm(9M zxu*wlt>=?5L=lx0kH&{j-^T2#-#>C9otjL2*dX#->NW+^36`%=bA3PI4W}qUUeiAo zygM?-D?Nv^i#NKnz)cso0bBj^HnZPyZcznS^JdJ5rUWMIgUzgXT|aBNv6SzVIAtx6 z3|n=~(5eCF#00fy$LVMAbotY55hq)&#c|Htz2v-%{hJdbJ(3o6ndJPxm-CA^*;oA? zx49@!Q%#<>nW>y;e`m!E?Ro4f^d%N>f|06|84>eqIIn}-vBcfhSQFmNe>EGz+T!b) zUOs}9WC+wWJ+{#7NUHNWc5;pgPOh{eI>gq@rA z!kgivhET*w@Ol=1CCn@+g_npqSF`w2D>w*%&;d4V;*B@3oL9@4%+Dq+tA6 zJozo^t3DaDK5K<9Yjpi#`^Z`Rx*uCj@orfw=ws{qVhAZ9u|3T0!do2;h>w>-r27gq zBbJ$ON5_{;t6E2f4P@897Z_D$n5^QZN zxLXD{*DHeByy<*~TP#));2x6|8N?VnjJgw_UR_ig*x3)!1S*MoW-;@D1^+LSE~39cXGn~J#g7ZsE|&oJ|t1c$X~wN!Ygza+&LHy z$ZO?$pvtqe<%8q;a%5|d!fJ3IzosPbVy)+JZ83zsR@5!3m&kp`Eu^xhK^V<4I7jZ!g_WePVBO@ zF2n8WD(3s@BKGlGew~Ra#SKX9?)4TPvmX4C?Ja`^=C*@D)KPt++03o5vzg*p*p%Sf zw+7c7@xsL!4c5NUWS0z1vLUa9vC4EAcN(B zC#T$fe9(caX}wX69hcWH=*^`uZ~mw5M+)xV;4H?_g~$&TWQ?6>RK5L0yUQ%W)` zl%9)qWED(yTR7*&q^J|Lwm~;!LQ~U)ff3f4Z+q$NJ%j^ z`t9fF>58K14*1?|o+fhWQ?BIL^-Rw0P{p~utPQmsIlz>CH~MY%N7apMsnyOL!;NtS zuFkH;gUI5bvN;!u^nmSIYOmW`h#V9QH5GVN<=1NeY_LUV+*HM|(bi02NtdJ{c59Q< zSDkL`VrIMI$NX<32t}7|dMb!2E}+;!AGclUwb@CWcycov-B zuVc`z_ggKWdpl4EilnAshd$3jzVclgx*GHGHb5tp-t%m<^6450mVWc_BC@0W(3a?%gK zj<05$I18ok6hDro&5udUyYlK8jWd#(Qv=K8jE+HAUd=49OfE9N4Cv8#$88YltJ*kEkYA@DeDv7nw3F+@6I~ewSqakf}LZ81Cz`OCMb2Vk#3&2l)%C zOjQF?|K9F)%k2&}T2xnQd{oKd))cHDV!|Q`A7?}j2rV6tscUqf_p)9R`&;Ifg44yO z@23?cVbX`7gye(Zk>HR@62qLZoPxK~dC7_ye3&GH7^CmE7H&;gZn6-yD+ zt9nz*6@UPi6QZ0KOny9=j?u7`c`q~{mP>=r0;?(CnVGlz;-}V z%WveiO5F1k^t0nQn;XW3Ac?^oLZrlj*Ne%o4K^nRDu_#|mR7_dv4!g3GPa{fp!1d9 zSD7GnKomax0`v8kBIy^9c3cM!U zSc?{1ujpG?oa4>8XueNylutO%_;c$q#F##e8p1Yaecp3>ohNlTBI38wg&2*hTNAlrq&HH!cGrNQ!vA~3oXCqFPd)wE@-%7MizO{j?Z+Bhc zXXIWO`RG;MAq;0xZ#;ALcX4J9((L@Xc;JH5*+lXsJpWDL$(%t}lh-o{WC+B9oPyB% z$(~Z2g`1Xuh+?J(i{m_C>oL|=P{)SrT-8Ra?^^uQZJ-{x%41}2_xDg3XB5IBuMA8?PMZX`x{)B2!N&(sJwhO%;4UZl1KlkFADTcI1k&jUz(F8l zpfCm>#lYkLKYpnh3nK9XwgL-5m9q(lXd~;EWUu!xKf{HDC2B%6AS`x3Pi&i}TsRSJ zW!)ehEv0kJlb*eBP8??PrtS4*X8xOX80xx`ZaL9JOLMCuf<@{+WP}4K7-v>8M@(mR zB81-v?mW&nJVc4;5(R7i*k*nI^ie1~(7LYNvMoK;PdQMK=E{yX^*wH@8#qxksuAGG zW6aDBQfz)|s~?6T1bSX94gT0h<+tU=f|TuZY|zSCaM;O{7+-DsymhJsf(fo860oGQ ztQaQn51Trl#^GVQb+E^FZZ||i_jTp5r)k9PrT;0DhQgr`IA{?W8<4(^`Ih;zn`w?? zhVm~9su{r>=3Dye9tUp6rzKx=h&36YrTg7J*jB_vWUs03p_+N4I$MmTuiBMYsY3xN zl$@>*s|_(}2(IucBfZTA!cLQ-8e)3*Zx?u=`Bk{Ba$)loYi}4cA_HD8vw`Vt!GNvq z&RN#7_W!p0&@l|5>KpavLm2(IKpO#4*#4svnl5T^Hy7;LO$eL4u`Cnu=o*sUt5H*Nc3_j=sRz(%qC;K{mHx?`b8s4E=kW7$f z{W0#e{|@2-1#RNT|E`_L^VZR?6w7)Wf-)nd5+}pAZpvxi?S?` z*B}9!y6G-_!Wte87bk)*FzZ~*HBc>Bop@lv$6Y;@dR;`v3&_n#NGyNJ&YPDf(H-iL z57t{?k>NNt>h z7pziOraq1R;Yk!VS8TaaKq;_t57k1cM@!s#;#fDN2}Cw!AFA)*&6y87>_EJq1|18u zutf19NgoqQoF)L0Qu}TMf7q037Je(1MZO0*w0QB`hq1J%Hd+1`IgS<(`~(pHLRT*< znQ(8|rKqnAXi|Yw&|zm}lrV91Z_I%1-UjqL=+sn28U`hTB(WulO_x{00~43xSQ34m zY?l|NmSY43eOWk4k|uKTvANb2FcVIa9guofOj zE6f^ucKaXFVLCu2!A@=D9iR_5>%r5@@D8?NcAe|{K$15N# zprId{fjzN!gZz_%?q;$FWS2rHVDppuNTONFl^3KQz2PB`y>Rl;OzB!cWxedZTTK^? zn85e2Lkxm}cUe(}-`_vBwVU&o@B0!?z#$)q)0XASOnl#btpJicUfihV9SbvevuIXZj0@G=D$4IxawHh%I?pk+-;Xg9B z%ro^PM_E?wOOh<<`Ek4A0@qiT3x8*5ml|^J# zap%u@=6X-Lb^$gLto)(f1l_M_LXXvWdM_jpOxvD%B;Po2dwdG4NmA= z`O5t5>bth#jkh-81KZtp3H3(dqME$z2?yaJ!~MS%URTqE%JoFi=TRVPIe|6y&AVVPIg5-`~ejklvq#7SYi62H+yE=MDpd zhWFnM3-djf_?-yrt}Z7DQ#V8Y=lui0MnYKv2Bt9)?b!?w28L!{L0Ur73-&zE#KCYS zZzu3*GaK?;R9eKSUP`g?(SXz8Y@}G9UtXWKcpYi2Rs2(jBMh?Zrxq-UdE{~N0zyWh z*gg2yU@^*iU8OPz{*xyw{g%7KpyUu+WIRs)7V>TFvF= z4+yobwwF;diz9^Wy3k(0HQ>PJX-rQ2)yEt&Qgwb+px<@dEH2}i_ovxHv`@Ei^Dj))2XSLNr-5vNL)7Z1Xs6qXUXxAH=IC`USper#zK#^AERZ~WWkNE^ zh3O*H4OyMNUjb+HybvY_eddH~SpYjsc}`sw{x2)rt~Q(uQI))z%FK?l;qW-3I>Kw< z)f+2dciX9qY>fcH?S z=5NIt;1|(&ihRn|)9izRhP2&G)&WJX^asN@0cwAUd>(t2tx2QnK&8UGUAp)FaY@i} z{K*xoq!?oaGpeAxm9oz1CQ)1NX?|j8+jDEGyq87{br20r!8pf$3TDP&#IX27#3u_f zO(+iTHhxHz1;Ez0j=G7wGlC!4g8Ip{Rs%`@9oH0_q62=6=PcIZVZ;OAq9j)~x$0;M8MsT-3|Yu-4=k zUz<`S9fUNf^HNB>_l{Z5Ap^zWKA6Sz!G#gJjF9i3;cg>H@r9~9*z;FnEVxoN_s4G~ z1!qy0dK2PG<0&d(V>dRFWaTEq)hS?eQ^hlT6x#WV{Ot90wp`_88Wwon*=t?gZXhcM zf7Ip+jWXebx8Pt6^9!u-oy=yeCb9)`3E=eI*M1_J{@4D`a^eCsq~axqb^8TwJ~bXp zLbj;x_X~gT`dHP~CsXMMS>nSb(N$^}T0D2|@DVLWOSdqrXnz>_pw1^ujwGdWQ=**g z=kSm44sBE=omaMi%q8R^cpG%K*p6Jf82bqBtai?ACZnYHaxLF z7Xxj#LU^M^p_tZzRDlO`y8#I?u`cOnP2u{XC&wsQx}Sf%CF4fbbEg-*cNFl|TmS*i z3AK4~(GS|W9-lr!lo?%#b2E;8h_ej9C<-qXj_kL^k{r!|&7W$uP z(U(#}k_Ne!ILT1@BwchB>g_uvkFH8sA3_nCIpTWJ%g(-P{wW@nC+bckRllVe*(c?1 z45`cjXSitaZVe?RvvSbvE(~w**YkUyTW^y6UWYkEM5h!?tRufRq`8EYDPLLnB!O&A z1uwj)yUaxWJ<&;L@b* zS9Yk)EcC8mO$4?i5h1iA&Ws^z65P z>K=>1@}|mVjL36a=4bMBq!%yQ+IXcTc1Jc5`? z6~#kaOflf^J=ubyNO_v&o9^h?L+X2!4g+-3&>;|>dybP%S7nSv`b^Y+EbR)xa?)Qi zDrAvZM>i@p)i|M>)Al-7`4J8Ea{Va@xG=CIQP(K;)$;!XRGq{TRuf0{mXOhEJG|g` z4*Ql;V}#DpQg@?vZ$k=)bdL0`qIvqo(#gGsWW{HJM?R-WNpxXRsAA=?l++#~1J0}G z-BC+sM7@wc-cF2(D&t^C=XF&gf?XCVp^gJbS0bwHCbu9n*Kv{Yu*H~BTanXRsmIqs znZY7DxbX(R_Bkg-)#l}cSPGdw4S7(pWiKbIQGQPd*9k%AZ*U1xeWJp~_4)GSE~IZ2 z!0wdARB+48cF()H)r{a3(C9j@@K{)HOHKfw&ZMT*k0@$^GWRWCO@t}c>TqkJ0D2g- z^jd#@kIsWKJKz3T>?S9~${ad+{4eaGkkH@8$50JLwINh%%@L35B9a%oSFpAGA^1*w zB3iXRzK~F|q#Ep{I?fS*$p1nmoi(E!nx=&k{f%99=U>2~s`N(#iM7(~@ksgzJ9xd* zG?npGrtU^K{+A2Z<(=T9xzEhzGzQ_=$v_*(!E6xs`(!mcY_lM(m|2QG*`}Yhi~0z+ z>V4x+ZR(L2qx}!|-ame;jalETNo}baR8$MCBeFloc;AE+UXnFGd^fet z8zl2wDzN+~E0Y^s61Ad&PeAY~Bt3klnnY;r-S4SG_Q*=l3%#$T2?i=qzwa&LHsQ(0 z$YiZC8+jN{yKrFM^hTf%G*eg;oeKV@j8w$WC(m>}uEq%z;I5mG0^|8jiKBP-AP(=PMuFLMl(HI*gM|clshGInXXF>EJP*&_&&d4^#t)Z`F<2B}(COjpG?(Zqjj)frz*vGd%#5qa>&ug2gj}7u7{a z{8#v=2}wBYPtWP!XFi|4tGR??pUO(DaJ%8U9+(k@1>8S;QZubkrU%qpb5Ki(Rj{I; z@nBxPfKIlAH*o~{!>Mzn2C7MN8+H2WaKm~-xkID`zBy51V&-%oZ{m*(bINWfTk>Ly z($KkYv8fXq?(D15=qAWQMAjo|biYV9gfzwfUNU}P9tLs}b9Xts}gM!(o( zLae{RUa&8Hcs*}dPmF^4nyOJk4?#F`^;by2c2*Gf<0zJm$@o3u6XC3-0RHvo)s>wJ%AYwVqbn!> zo9}Ip%&`2Xe}FCqN85-rX&uhIFk&vj@G|%|6^J-mbA);$ zKPDSglIxc24l?FI1l7e?cJ=mq7gySdk*O-U^Ky}>c#{1ag`Buvh=w%&t1rDTUop0y zx|pNu(0~h@S{_}`gOQ-3ZQIYCU%YMYdPsEM;|exzwd#+c5tKFGRH5a8$#zai`9I`g z9j+JQ#mGtwzP51uxalBdCua8R!NkKYulA~nt&1SD8%p(u_17C`QBV9v40QBQoO#^T z?N3_YHJYrwXf9)b189suj{0Dw(kjrReKQ6~i3!Ul$KT6+yNL(|lx0^E?CvWS!|i!7 zkxrIy(YUzkgbj?K?`GaZy##git8lDt>}%nqam7{_QXAWCX)Owg`1Wy5)5e8H$U9A+ zB$Vik|BhSN@`oo6NxnG$a;(eK)~ru4Mx3yhb^RlV`{XL*{L<7;N<~pbhGA$5sYPD| z%(JDZQH^V0(OLne6wMODP>`AUP@QQ<&NJk=M3CvAAUM?oCfA7Z=$Yq4#CQKJxASqO z8s8DEK5dV0fj4}@B9wu_h4)cj*#z12?oLK`V!_F)gp2u5x=gz8ncYPGu{ZBjowXY&E1G4)qx0!y?d;m( zu{?}>S>JKYdK04z4F9CE*3)W5Op4|#fRWEt%#G=z(c-SQ$Gnn@Ee)1f+`VY~C#D6q zE<*9?a$+L*$>COMA|hyDKAN}g27kfMZ`QKi^vXuz@WZi!PSBP=x6R!Vpk2+%+j4>m zvdwFU3yiEw#|yedJWL!_8o~yw^hanl8o!;?Fb6iP{!^O-bCD|quym618oZUSNE$0Tt?Rf%|b{pJQ?yd z(bzL6CE*&oHaq&xrmP<`-=3MgARW|Hl-H);FuvPUKqVWKNZNdB(+0j>_y`amg$Oh+ zt+(Utq1(o}?_8+< z*LI~Cqg8zzTPVj~-}5?Upymhimw`#*K)RXQgS*#&_7NDrDmNcH4>9b-P)9DElRF&@ z-(QVB6q>$95vf0B2r`Yrf&g^AyIOu~9!pp`Fz04UgM*(ps*?pGeF^G~Q*bL>=kRO9 z;juWFD!>f+K9V~c+QpVydc5U-78a*k2e-Lf>n9R9+-8vExG-t(0de9&d|D7ai80KdSrgVV*S>#^tB zyCO}>6Vp6M)02qEMJf8Y`MY7cu3T?l%D7nTQ=)_>pg}BJph)v9ZBE$HK}hA&=PbaWhqdWfFDzl@Wo6tN! zZgM-?{yWQU8G!)cOgV2wF-!N|D*lwlXRleqyatp3wVq)UoF&Vx=bim?kz8y2Qwtii zgb;;-Dki<6Ie&4)qAa%)n)<`ikJLPl_p7NKceLEY&?#`}-1N0>K_yxwT!$+!k-QNz z!`G&FxhYRKenpWwl-2$Q-Qc?9pPU;XqI984V$tMtkCl?&(uah9jNB5bKiE)+a-KzY z_<*ZlP!mv@rp6zKN6LDD&yVX9#Kxg3A%`3}={7z6db*dXe0$1#7D31DUlFFR8b5Sq$&p~7zQ8y%x^ZfS{zwk537VFQ_ zpHAHP)w@ag1F<6FWv`uG1P5f}6CX{Yv+ZZS50M_E^ZD7ErH%h;r0**{io?ocUAA49 zJ8gdtXBYmA;@{ygd--JOSgsZ5J}cN_PT_quFjW1%$_n?!xZ-ZhLr8R5t-e%)l`R|x zK4LPP`ZV_9NZoUwaO_RrTkV?oKYrHLud7D6WAnTIQ@m6FVo-JAoESdklOeiS6#(&i zadritMcBIfURcaV5&289+N0 zOlvUBsfgQ~4QhL##IRW~umf{F>GB1twv8MNe}C7`q^CggbMq*yM`df!5;rTW8{6%g z!~=U241|gd<_kAA?9SG|PW*e$VK51k47jIzNUVFNc=kKwciCf^1y=>$<08O{68WhF zh!Ms46p-uHpPf#ULbrEx%&fj)oQRNOr^om=tUKg2FBF)45dem~Z}H$XP*zyc9Owp* zcVgH+3)BWR#sbc0!p2(eMMLbxy1x29Z_YI59uw-ASCYozP;_jAOJ zQgt~cxrO6j8@PeT!c5~6d-L%0mIH4vdyK90`QV3)jJvO~aBa`Lz6z6jpHTTVx}jiZ zJVCN6BGZVm22x9qYq6f6ACF`qv9t00kRtfHMAUUab4n1(`=Krb*?4`|C4 zE2rnEls?7p!i6ecNe~oPXNM15FYAgh7NMq_SulyK0iePy@hTQDZrb!5-B~4(1bBne zF@m*IP?V^zsFI&YSgtF|5fX1cR~~)4m}cq_Q5$xCOS6GkuY@mIvEY71cI^`?=OO?Q z-L)0LA1+izqbDjtC$)!5KT}4@)_1&ZtoQc>jb{e5x(2WXn9KC2tGnQ12O!BMgk=_Q zo1(C+pL6+Ca*!N0c|09zWo~hy|GG8|DV){KDcohm{_)>H5DeqVZ9zlvRxKk$1dX~u zW2E1h1nH|cn?x{J4Ou`BQ#6#!?!STInNBr*VHD?{fPK&ft;cc6Me{g8^X{J;!;r&h z@H66j$_k6TB*3B4aad~xZA*8jQWobt0ybvTm;_!3uzmSPi^rueZ zJP}+=a;gE9CJ~iHc@7pfmg#_aRFH26~5aLshaE~g9c67>3D}tfYa@YK!#3gl; zw$SmZ_skOF2;3jmBo6@#4Jj$a=|n2GS-__b*599CMH}UqT-q8SNBmBg-g!g~ZWylD zhP^ci>k8uy38oo?TfXsapDXAE>#+CE86r`G$qNoThC4bN@jNUjG=}~9D@(RM^a@#2 z%RGa=Y>0a2sy@H5+^sY9y`JbY%Ar@nd{sZkTocVq>X$U~cKxk7e{ey;wkQthX|a9{%HZ)W6fQ|FQaAVCDttU%7J2yl2dkzg^kQUX zeuDa;{MtH^k_65i#DUSQU7cqb`b;25Czp2o zU#bQMf_lb$=bIXMtJ@0uO3}A{E+~738FM)X9#CjP0*TkIMlRXoMI6)g-q%UZW)6YK zXgl-8)rRqC?*;_T_IeV7jxqE@d1Tvy_B9aWv1x*NFt)Hw&h|9I(>?+Pl!{ODpOkLp zVm>qkUIdCg@jetd2Q2sq>#{k$lC5LAUbbKp3dm}uMSAyY$usFj1_=@jKcLqba35mp zvo8MX`lD^NDJ&{zn1wLFYfD%7K*QMdcFTAe;O^gb$m39Y4Sc@TPlOO6rsE7TfUge8rpV8Us?D*9`pJZDTIcx zv+rf#c<_{8`g?=i`Us_50rMhutxn;y9rN%>G3jjr zzPYm~w0C6a4DC9Qv&^4mpa<^T&oYTMe2Chf+A;|4d#KK7t;49cTxAuI1&6uL)MUUA zMB!i|@&`(cF4?rp6*-wL80@*wI=!Y?F;$`v75FY1s}UDwVc)g8gGf@~dh6#y1cY@3 z%&nN1s#T8?!pLSFaSKkNrmisD{2ndOl0Qj3Eu@<1uPg!rtbi^75v~HTDe=M9rXJO= zS^DA62Rz>GA2tnxh!QYmtoetcg+L#~ao1K~MzI{?%8E^0kpzSY9|f#bwVs&8GE$V8 zgv{vK_PN|3TNBWRbVO6$idDlym&b{b>00qI-DK7VChBQ>O=LtBP$fRi2CgJoUoG;HuoG~ zxt!d7$NHk8S6dS=?ns}3eJ4PFp!c>3k{Xcg+C$J_$iGW+l5pSANsz zQ~db!$^qYgjrI3DE2;h|yH-tQ_1%(MsFTekM*jAzGw708ZH7_Jy7-g0zT{N4+S;F^ z%HtNh7oi3^ddnrA__Fqy@7u|j)ouTnx^&)dcXk?!O`0j9BK@HAaE5OO6$!m^(>^Oy zMGh#xr$&$);Tv(bdseY$n6YQD?Qpqsc^ms)CuetG-SCY4F0j$l(2}fO7OsdsOo2B; z{!Wi#MvANOQSAjU|M?^heTHsjlbwK9tQCv$V|ZS7x^`*U@); zzn!6ASJC0%utO+;u@-Sga72aBUAYwX$^r2;Lpow*8l7b()= zaUe_g5z>uthgz0<9>3%vKQT#xnQHUpLp_|t8QeQAMWz&1%gq0Zj=~8e3MQU~N!6p% z*XzeZ>(xtqeze=~3xU5&M}515>_}Vuy>~H29$#0F!F)hG;=L7es{SA#Wv;Xu{*J7M zeK73Hr+7hcnzjz;`?~y-B9y>eo3J$KQvk;pzN#%?KlDMZH&QJO&c@ON8WTA#ABTqE?pudSXG8zjIQ+FGElx(I zj+Z7@q;RHKPa5rd4krOzVK_!#Np;3W6ka~*bItHI}&Cj?-gzISR&RLApcnO zB!ej{PWm*6y_Pqp<^?k67IXsFT-Sc^I}&1Nhmkmg0kAg${x!jWI6~f7`xj+P_E8OR z?zuKg&nd_jWz$NcA5|Y5K8=HH!V1w$&iI8tOF4F(p(37Aum^ zdPk+0h_?vEGG@7~{lK&F4OH?mP*1S@>aj<_%euWuFT6A}HAI;@@PR=rP#b06o1$bR zPyRd9lNwfq{T;d5Ll)~W{!|yuIUXkwg`+^Q&BoYY?Z4M^8F+dih+P#F#!vUWoA|aT zj)NJXwZXWu+c! z{UUw)kzvd>OAbK~&{6az9xyZJy6ZCaJe1&W2&v0Y7AqU$e^doE;mo*YUP}-}i!X;*tUPu3K2Tw)J&=%EJj_svnLHU7BnLBdcY{F0~OVzXE~`OkZeLD1yos~yL}S5Ygs zD}3x=)4bD>2M4*s%kHa_*x2_41lQOc&w(KONkA+s^e$>@LLw%tXP#g~TS#c5SoU~` z@V_YtmT&(kDwdSGhEr4diEEnWOS$AlupxME(1qw`=w9m=T$Re>o~7G1K`MHZH8 zZVL`#yT!WB2RT^smH_r7C~k0YaqesySA+vW=^8VMVs@hvX$%*6g&ZE6d<5jQ5EGl2mt4@r9WDD)Jbsl zY1stew?9vh!UbGk?ELDegH$augA5XbL5WwtFiWk*B#l|g ztZ}WE@(L`KH7EciX^%V}j{zC@gX#j(9XD6a6qx!nYF~**C9e|Ig`1XX02fQRi54sk zVhtpzPUI|7b1!2hR>v`4RhP^Wvn@^=wDg&d<+m&l4!WqiTWgH-TIvopinn$flDjDY zZ$3p=m(<~^m^T^?hhRdT{EE^i7ns^)OP{tMyAafFhy8N2Mn;yX?;m90@8!Zn{auHf zhj5Dps&3RQj_ibaa8Vee7BsR1;U_au3~i~u#|{*6Z_r9x@6?d~xNWuIW19<|S!647 z0KT&Hc&OaLoKv`p48K(@>cEb_tROgFBWuo;+e{{*3o=YS4A2n9YCWRoNLNX{t5TcO z{uHf4Es2av2O~;`3hWjxB4RAN-l92`IirKP zb7}{vtNG+P*&IY%3Ig5gchM4js?*gagO~{dZNlUuvGN*qT;;rj23D&cAX`q*UDJKb zd=O#NM(mPhopa;#S`hE`dG_PHCI|3~K{915=MjY;k^860Z{=y5W1{FLoXU!&HnwCa zgv{=N0h$AITPs zEs*4CgqDk&HfB7sRA6n=WCJ#nn38Qlgu9iz?bxbad?`va7xq)Jp!H=Ucx?giJs)bx z`T}BEwD3%4Rp<{@!M2MYV=UZyz^0J0B@eVNIZD^bDj(8W$JEyJiFw-b=;1bmei1L>Q;ooTMN@Q#G+D7Vgbj&Mn z%j9nX3G-hb^VTzM{GWWQPMqtlE;@$M2e|)I&*c>L$Yrc+0WY^>-8!IOGk`31a2+ft z7eS3}-19^_!2(XUz5?DifnNAs8~FL#fJ<4CrA+~mCr`2<_wLpH0+^*<0GGuLe`FT5 z&f_=_%2p0k_YgO-?pyw6+yeT*qWfF!vk>1 zQrptAx5`yHQTOXTO~^5`%^9jnen(K>wQOL)EvGRpKQaSWEwrv~+cb7UOIh+WhdMp8 zm4e4U0Vv@8=qA9Q??9IlNdSBPx7E5nd82?>PJw=NtBs?PA}|=%+^z!;Oc}RPU1w!F z54=F1Fms?7zF`XrwzAZ>6~g}E*NdytAjoI{%XNQxuDa@{K3l;$-h+1L*Gtr)*?`{x z`BZ8{BC|CL6P(Dwf-+rh2fY=*uYUma;vWJ3@lwBY0oh}RT~G$`?q31!zSQb-1WoNl zxf>^B22E)i=AfGr!A%FM^7CBN6Xg~}Ex-F0&q*E+6C*Xrk8EraLQO zjgo4h4H(Y9mAldpR5T5Vt>wnGm4~r)N;$^o#QJ0YXZtgC4m=vXpwfqY9vBZFrexXz zk4LA7o$!!X&TZ&T6sG}?xXY+zKal(J*uF^>_Mo23Ej2 z5vT6<&Dvj6K1_N`JDh+B=y_B7`2@~F`C0zR;hz0a=9*CM&k1_bAMK0lcdHvOY9Kb zuomNxo4PTe-@U|fN|^)=b5bO2?fn|puFAG=W5{X^5P<1;%9h9Oq;2xM7U5DzCV1!$ zVZ6f`^{;NtUZd@VLa=>~a?V;$%KT}}g)dv-6kWrZuf=wps+2Odz@(FmmeU2Vk#!ni zwT{mSJ3XkUnr;p=az8KDVdWTTw3=~}&e|*`NV)K=xEz0EJ{qG-U*vwkYZj7`yZY1% z=4A_j%1eg-PHxwtJBQs!+C>X@GO$ithT@maTrSY04ngb1M(133=&Vr^c;GSHTx1b9xbdc! zN=Et49Yr~02rQqRai`&WqdC))fMTn|Zvt`4aGH%Yq!*!(GA~Y>Y+5yKgHr%L`!c@# zfw$7X7DXNjN&^JW3xP!d9xG2iZ=|+A9&st2xZ*$;+mHN%Y8<#Hb=yaPzr&==2N8m= zEG~FcgNC0$a|`r*6tkN!eUYzFT3x* zuO#?1Ov<#cXSwzkdNd*2fM$uc6CrgUks-EO*~#3uoa*CT|D*cl{>6nezj5cEIBkKu t?6S))yX>;dF1zfq%Pza@vdb=;mPn zTz>9W_w@Hk`f^MOO1zTgT`O8V1+%;llJ=bn0j1lvmE}oy$<<{;5m-ptbt(ibbMNXn zEH4YkUcfizH$FeE;wegLI=}90p5@%T=rOc0HpDq(#I_miGM9y+-n9IBy;=JIygJvA z<^G?2Y+mmo3yB4M)46?KSnj&OWS8!G!`dfEP=?Q!2SO#K@vn!hB>oh^y;T&zur;Wn zP?J}J=(@I&K&T=p+1X7Zk$`W>RnTK@8wojRCBtr$)k@M}4+P;BgC)z%EJvlLJ}^YYa^(PF0Fi zYv}8-Fc;@Z7L+8>={OCSf zbTwJkuU3~gqQX$EGn7iqpKx7@(wO0}WW6lgWUi+EG=mD~`;Y91d)b%8I}q{$&&Wb9 zK6L8&s&tdXZ>5B_Y%N|x3Q+Q`RSGn)ia-?KB4nHJw3P$}!LdNJa3Ztkq!zH*VwgW^ zV|HE#`Id|&b0=)H9Lo>JN)&Zbc0~)w(p;B?!cjM5*aC+=BMY$tURe>&-~HbCjT^uD zuits^BxYKNXS(}Xmq-5~HO*PznHMk-g79NmTFl+PNHsoEz_rWbl60dLr%`dbX<2uj3PPs?%!g`zw{>^*sHmxt?I3g{vYp$>NC3%Pw_P`Te&Ht;*!z^$vg6p3CPyGj&^(a6%*o@pMX0Bg$jgOpjrSkB=+I* zSCMUZofAsHKklJ$R9ZC(k)zkX6zP_voKXu)vxVGoUA^im9`1Ou2t0n|;=%nsc6Wu^ zRdr81+vqS4UoU;a)}r1kPQbhJ(1yWC3+i0_m@S62^O(UCb>riJw6KM5E{n5a?a@n+ zz!nGy7M{vQ3&_a=72Y1U!`dPRWMqMw9y(!7aV|_2C|O=%p*lngC?8sE!*pW2Fj7GI zboVX{M=l^+QSFfePI5bUY={YC(J`<}F;G6e=|r_h3b_2CA3V(#aU=`Wm@VKaF;I^; zI~R;fq7|_Mdd%=-x;H`$B%+gOMZ61}yq!xh_jnf;=H`Ne}a* zh)bds@r#ISa2}Y41ulQewqPoG#J~YYT47ugtsnuT=;aXuVeWP=E{Rqo641!)T*3`R zG8Z=RyAi>16wt`+T%Hza;+IP-PYX11JC`tQC9^;Sw{xD0J4yN_TSROFW1yF#1rEMk zT7e-5V0HO37MnyXQvE!0?JKb)JY3*xO#eAPW@M=9GLH47kD`B6Ne~1<5ClOG1VIo4 bk(vJhpD!_V*{3?|00000NkvXXu0mjfAAeMG diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/img/upload/upload-error.png b/src/Web/Masa.Alert.Web.Admin/wwwroot/img/upload/upload-error.png deleted file mode 100644 index fa0df845c0b762c780dd547f721802909e6c64cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 654 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 JPDHLkV1iO33-$m2 diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/js/quill/quill-helper.js b/src/Web/Masa.Alert.Web.Admin/wwwroot/js/quill/quill-helper.js deleted file mode 100644 index e9b39492..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/js/quill/quill-helper.js +++ /dev/null @@ -1,19 +0,0 @@ -export function uploadImage(quillElement, element, ossParamter, index = 0) { - let _that = this; - let quill = quillElement.__quill;//get quill editor - let fileInput = element.querySelector('input.ql-image[type=file]')//get fileInput - let files = fileInput.files; - - ossUpload(files[index], ossParamter).then(fileUrl => { - let length = quill.getSelection().index; - quill.insertEmbed(length, 'image', fileUrl);//Insert the uploaded picture into the editor - quill.setSelection(length + 1); - index += 1; - if (index < files.length) { - _that.uploadImage(quillElement, element, ossParamter, index); - } - else { - fileInput.value = ''; - } - }); -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/js/util.js b/src/Web/Masa.Alert.Web.Admin/wwwroot/js/util.js deleted file mode 100644 index 1f6e3a7e..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/js/util.js +++ /dev/null @@ -1,90 +0,0 @@ -let util = { - scrollTop: (dom, id) => { - if (id) { - document.getElementById(id).scrollTop = 0; - } - else { - dom.scrollTop = 0; - } - }, - isJson: (str) => { - if (typeof str == 'string') { - try { - var obj = JSON.parse(str); - if (typeof obj == 'object' && obj) { - return true; - } else { - return false; - } - - } catch (e) { - console.log('error:' + str + '!!!' + e); - return false; - } - } - }, - jsonFormat: (dom, str) => { - if (!dom || !isJSON(str)) { - return; - } - - str = JSON.stringify(JSON.parse(str), null, 2); - str = str - .replace(/&/g, '&') - .replace(//g, '>'); - str = str.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) { - var cls = 'number'; - if (/^"/.test(match)) { - if (/:$/.test(match)) { - cls = 'key'; - } else { - cls = 'string'; - } - } else if (/true|false/.test(match)) { - cls = 'boolean'; - } else if (/null/.test(match)) { - cls = 'null'; - } - return '' + match + ''; - }); - dom.innerHTML = str; - }, - screenSize: (editorDom) => { - let screenWidth = document.body.clientWidth || document.documentElement.clientWidth; - let screenHeight = document.body.clientHeight || document.documentElement.clientHeight; - let defWidth = 1920; - let defHeight = 1080; - let xScale = screenWidth / defWidth; - let yScale = screenHeight / defHeight; - editorDom.style.cssText += ';transform: scale(' + xScale + ',' + yScale + ');transform-origin: 0 0 0'; - - window.addEventListener('resize', () => { - let screenWidth = document.body.clientWidth || document.documentElement.clientWidth; - let screenHeight = document.body.clientHeight || document.documentElement.clientHeight; - xScale = screenWidth / defWidth; - yScale = screenHeight / defHeight; - editorDom.style.cssText += ';transform: scale(' + xScale + ',' + yScale + ');transform-origin: 0 0 0'; - }, false) - } -} - -window.util = util; - -function isJSON(str) { - if (typeof str == 'string') { - try { - var obj = JSON.parse(str); - if (typeof obj == 'object' && obj) { - return true; - } else { - return false; - } - - } catch (e) { - console.log('error:' + str + '!!!' + e); - return false; - } - } - console.log('It is not a string!') -} \ No newline at end of file diff --git a/src/Web/Masa.Alert.Web.Admin/wwwroot/js/vditor/vditor-helper.js b/src/Web/Masa.Alert.Web.Admin/wwwroot/js/vditor/vditor-helper.js deleted file mode 100644 index 35a635ee..00000000 --- a/src/Web/Masa.Alert.Web.Admin/wwwroot/js/vditor/vditor-helper.js +++ /dev/null @@ -1,23 +0,0 @@ -export function upload(element, ossParamter, index = 0) { - let _that = this; - let vditor = element.Vditor; - let fileInput = element.querySelector('input[type=file]') - let files = fileInput.files; - - ossUpload(files[index], ossParamter).then(fileUrl => { - let succFileText = ""; - if (vditor && vditor.vditor.currentMode === "wysiwyg") { - succFileText += `\n ${fileUrl}`; - } else { - succFileText += `\n![${fileUrl}](${fileUrl})`; - } - document.execCommand("insertHTML", false, succFileText); - index += 1; - if (index < files.length) { - _that.upload(element, ossParamter, index); - } - else { - fileInput.value = ''; - } - }); -} \ No newline at end of file From 40df9cee2e2d7cf011eb0da73c963853c3f562eb Mon Sep 17 00:00:00 2001 From: wzh425 Date: Fri, 14 Aug 2026 17:19:54 +0800 Subject: [PATCH 4/6] chore: Clean up appsettings.json by removing commented-out configuration Removed a commented-out entry in appsettings.json to enhance clarity and maintainability of the configuration file. --- src/Services/Masa.Alert.Service/appsettings.json | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Services/Masa.Alert.Service/appsettings.json b/src/Services/Masa.Alert.Service/appsettings.json index 7ad30268..92b7bb11 100644 --- a/src/Services/Masa.Alert.Service/appsettings.json +++ b/src/Services/Masa.Alert.Service/appsettings.json @@ -19,5 +19,4 @@ "DaprGrpcPort": 20601 }, "AppId": "masa-alert-service" - //"masa-alert-servic": "fdgfdg" } From ee54ade6c1671b8c143ed8acce6ef3bb771b8bc9 Mon Sep 17 00:00:00 2001 From: wzh425 Date: Fri, 14 Aug 2026 17:22:20 +0800 Subject: [PATCH 5/6] chore: Update launchSettings.json with new configuration values Replaced placeholder values for DCC_SECRET and ADMIN_PWD with actual credentials. Updated Redis and PostgreSQL connection settings to reflect new server addresses and ports, enhancing the application's configuration for the development environment. --- .../Masa.Alert.Service/Properties/launchSettings.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Services/Masa.Alert.Service/Properties/launchSettings.json b/src/Services/Masa.Alert.Service/Properties/launchSettings.json index 6f3f16fa..7e681c57 100644 --- a/src/Services/Masa.Alert.Service/Properties/launchSettings.json +++ b/src/Services/Masa.Alert.Service/Properties/launchSettings.json @@ -17,8 +17,8 @@ "DAPR_GRPC_PORT": "3601", "DAPR_HTTP_PORT": "3600", "MASA_CLUSTER": "Default", - "DCC_SECRET": "__SET_IN_USER_SECRETS__", - "ADMIN_PWD": "__SET_IN_USER_SECRETS__", + "DCC_SECRET": "masastack.com", + "ADMIN_PWD": "admin123", "DOMAIN_NAME": "masastack.com", "MASA_NAMESPACE": "masastack", "TLS_NAME": "masastack", @@ -26,8 +26,8 @@ "IS_DEMO": "false", "OTLP_URL": "http://otel-collector.masastack:9013", "ELASTIC": "{\"Nodes\": [\"http://es-ydy-new.lonsid.cn:9200\"],\"Index\": \"auth_user_development\"}", - "REDIS": "{\"RedisHost\": \"127.0.0.1\", \"RedisPort\": 6379, \"RedisDb\": 0}", - "CONNECTIONSTRING": "{\"Server\": \"127.0.0.1\", \"Port\": 5432, \"Database\": \"alert_dev\", \"UserId\": \"postgres\", \"DbType\": \"PostgreSql\"}", + "REDIS": "{\"RedisHost\": \"10.130.0.19\", \"RedisPort\": 2135, \"RedisDb\": 3,\"RedisPassword\": \"Hzss@123\"}", + "CONNECTIONSTRING": "{\"Server\": \"10.130.0.19\", \"Port\": 3815,\"Database\":\"pm-dev\",\"UserId\": \"ss\",\"Password\":\"Lsd@2023\",\"DbType\":\"PostgreSql\"}", "MASA_STACK": "[{\"id\":\"pm\",\"service\":{\"id\":\"pm-service-dev\",\"domain\":\"http://pm-service-dev.masastack.com\"},\"web\":{\"id\":\"pm-web-dev\",\"domain\":\"https://pm-dev.masastack.com\"}},{\"id\":\"dcc\",\"service\":{\"id\":\"dcc-service-dev\",\"domain\":\"http://dcc-service-dev.masastack.com\"},\"web\":{\"id\":\"dcc-web-dev\",\"domain\":\"https://dcc-dev.masastack.com\"}},{\"id\":\"tsc\",\"service\":{\"id\":\"tsc-service-dev\",\"domain\":\"http://tsc-service-dev.masastack.com\"},\"web\":{\"id\":\"tsc-web-dev\",\"domain\":\"https://tsc-dev.masastack.com\"}},{\"id\":\"alert\",\"service\":{\"id\":\"alert-service-dev\",\"domain\":\"http://alert-service-dev.masastack.com\"},\"web\":{\"id\":\"alert-web-dev\",\"domain\":\"https://alert-dev.masastack.com\"}},{\"id\":\"scheduler\",\"service\":{\"id\":\"scheduler-service-dev\",\"domain\":\"http://scheduler-service-dev.masastack.com\"},\"worker\":{\"id\":\"scheduler-worker-dev\",\"domain\":\"http://scheduler-worker-dev.masastack.com\"},\"web\":{\"id\":\"scheduler-web-dev\",\"domain\":\"https://scheduler-dev.masastack.com\"}},{\"id\":\"mc\",\"service\":{\"id\":\"mc-service-dev\",\"domain\":\"http://mc-service-dev.masastack.com\"},\"web\":{\"id\":\"mc-web-dev\",\"domain\":\"https://mc-dev.masastack.com\"}},{\"id\":\"auth\",\"service\":{\"id\":\"auth-service-dev\",\"domain\":\"http://auth-service-dev.masastack.com\"},\"web\":{\"id\":\"auth-web-dev\",\"domain\":\"https://auth-dev.masastack.com\"},\"sso\":{\"id\":\"auth-sso-dev\",\"domain\":\"https://auth-sso-dev.masastack.com\"}}]", "MASA_ENVIRONMENT": "Development", "SUFFIX_IDENTITY": "dev" From f5d8191839c8f253aadbc511cf8b3870e6b66871 Mon Sep 17 00:00:00 2001 From: wzh425 Date: Fri, 14 Aug 2026 17:23:20 +0800 Subject: [PATCH 6/6] chore: Enable ITokenGenerater registration in service configuration Uncommented the registration of ITokenGenerater in the service configuration to ensure proper token generation functionality is available in the application. --- src/Services/Masa.Alert.Service/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Services/Masa.Alert.Service/Program.cs b/src/Services/Masa.Alert.Service/Program.cs index 656954e2..48f1924e 100644 --- a/src/Services/Masa.Alert.Service/Program.cs +++ b/src/Services/Masa.Alert.Service/Program.cs @@ -86,7 +86,7 @@ }; builder.Services.AddCache(redisOptions); -//builder.Services.AddScoped(); +builder.Services.AddScoped(); builder.Services.AddAuthClient(masaStackConfig.GetAuthServiceDomain(), redisOptions); builder.Services.AddPmClient(masaStackConfig.GetPmServiceDomain()); builder.Services.AddTscClient(masaStackConfig.GetTscServiceDomain());