diff --git a/Apps/Admin/Client/Api/ISupportApi.cs b/Apps/Admin/Client/Api/ISupportApi.cs index de9b3cd1cc..bfc6d59395 100644 --- a/Apps/Admin/Client/Api/ISupportApi.cs +++ b/Apps/Admin/Client/Api/ISupportApi.cs @@ -75,12 +75,4 @@ public interface ISupportApi /// The encoded immunization document. [Get("/Patient/Document?phn={phn}")] Task RetrieveVaccineRecordAsync(string phn); - - /// - /// Submitting a completed anti viral screening form. - /// - /// The covid therapy assessment request to use for submission. - /// A CovidAssessmentResponse. - [Post("/CovidAssessment")] - Task SubmitCovidAssessmentAsync(CovidAssessmentRequest request); } diff --git a/Apps/Admin/Client/Components/Details/ProfileTab.razor b/Apps/Admin/Client/Components/Details/ProfileTab.razor index 8f970aad42..1b2a88a2a5 100644 --- a/Apps/Admin/Client/Components/Details/ProfileTab.razor +++ b/Apps/Admin/Client/Components/Details/ProfileTab.razor @@ -44,8 +44,6 @@ else { - - } diff --git a/Apps/Admin/Client/Components/Details/ProfileTab.razor.cs b/Apps/Admin/Client/Components/Details/ProfileTab.razor.cs index fc69d52f8a..8ac0ec208f 100644 --- a/Apps/Admin/Client/Components/Details/ProfileTab.razor.cs +++ b/Apps/Admin/Client/Components/Details/ProfileTab.razor.cs @@ -15,7 +15,6 @@ // ------------------------------------------------------------------------- namespace HealthGateway.Admin.Client.Components.Details { - using System.Collections.Generic; using System.Linq; using Fluxor; using Fluxor.Blazor.Web.Components; @@ -51,15 +50,8 @@ public partial class ProfileTab : FluxorComponent private Address? MailAddress => this.Patient?.PostalAddress ?? this.Patient?.PhysicalAddress; - private string Covid19TreatmentAssessmentPath => $"/covid-19-treatment-assessment?phn={this.Phn}"; - private VaccineDetails? VaccineDetails => this.PatientDetailsState.Value.VaccineDetails; - private CovidAssessmentDetailsResponse? AssessmentInfo => this.PatientDetailsState.Value.Result?.CovidAssessmentDetails; - - private IEnumerable AssessmentDetails => - (this.AssessmentInfo?.PreviousAssessmentDetailsList ?? []).OrderByDescending(a => a.DateTimeOfAssessment); - private bool ImmunizationsAreBlocked => this.VaccineDetails?.Blocked ?? false; private bool PatientSupportDetailsLoading => this.PatientDetailsState.Value.IsLoading; diff --git a/Apps/Admin/Client/Components/Support/AssessmentOptionRadio.razor b/Apps/Admin/Client/Components/Support/AssessmentOptionRadio.razor deleted file mode 100644 index 8fbae041a9..0000000000 --- a/Apps/Admin/Client/Components/Support/AssessmentOptionRadio.razor +++ /dev/null @@ -1,48 +0,0 @@ -@using HealthGateway.Admin.Common.Constants -@inherits Fluxor.Blazor.Web.Components.FluxorComponent - - - - Yes - - - No - - @if (IncludeNotSureOption) - { - - Not Sure - - } - - -@if (SelectedOption == OptionThatIndicatesNoBenefit) -{ - - Citizen would likely not benefit from COVID‑19 treatment. - -} - -@if (SelectedOption == OptionThatIndicatesBenefit) -{ - - Citizen may benefit from COVID‑19 treatment. - -} diff --git a/Apps/Admin/Client/Components/Support/AssessmentOptionRadio.razor.cs b/Apps/Admin/Client/Components/Support/AssessmentOptionRadio.razor.cs deleted file mode 100644 index 8d53d06c46..0000000000 --- a/Apps/Admin/Client/Components/Support/AssessmentOptionRadio.razor.cs +++ /dev/null @@ -1,86 +0,0 @@ -// ------------------------------------------------------------------------- -// Copyright © 2019 Province of British Columbia -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ------------------------------------------------------------------------- -namespace HealthGateway.Admin.Client.Components.Support -{ - using System.Collections.Generic; - using System.Diagnostics.CodeAnalysis; - using Fluxor.Blazor.Web.Components; - using HealthGateway.Admin.Common.Constants; - using Microsoft.AspNetCore.Components; - - /// - /// Backing logic for the COVID-19 treatment assessment options for a question. - /// - public partial class AssessmentOptionRadio : FluxorComponent - { - private CovidTherapyAssessmentOption selectedOption = CovidTherapyAssessmentOption.Unspecified; - - /// - /// Gets or sets the selected assessment option. - /// - [Parameter] - [EditorRequired] - [SuppressMessage("Usage", "BL0007:Component parameters should be auto properties", Justification = "Two-way binding")] - public CovidTherapyAssessmentOption SelectedOption - { - get => this.selectedOption; - - set - { - if (this.selectedOption == value) - { - return; - } - - this.selectedOption = value; - this.SelectedOptionChanged.InvokeAsync(value); - } - } - - /// - /// Gets or sets the event callback that's triggered when changes. - /// - [Parameter] - public EventCallback SelectedOptionChanged { get; set; } - - /// - /// Gets or sets the assessment option that causes a message to display that suggests the citizen would benefit from - /// COVID-19 treatment. - /// - [Parameter] - public CovidTherapyAssessmentOption? OptionThatIndicatesBenefit { get; set; } - - /// - /// Gets or sets the assessment option that causes a message to display that suggests the citizen would not benefit from - /// COVID-19 treatment. - /// - [Parameter] - public CovidTherapyAssessmentOption? OptionThatIndicatesNoBenefit { get; set; } - - /// - /// Gets or sets a value indicating whether the "Not Sure" option should be included. - /// - [Parameter] - public bool IncludeNotSureOption { get; set; } - - /// - /// Gets or sets all attributes added to the component that don't match any of its parameters. - /// They will be splatted onto the underlying element. - /// - [Parameter(CaptureUnmatchedValues = true)] - public IReadOnlyDictionary UnmatchedAttributes { get; set; } = new Dictionary(); - } -} diff --git a/Apps/Admin/Client/Components/Support/AssessmentQuestion.razor b/Apps/Admin/Client/Components/Support/AssessmentQuestion.razor deleted file mode 100644 index 765c67ebdd..0000000000 --- a/Apps/Admin/Client/Components/Support/AssessmentQuestion.razor +++ /dev/null @@ -1,21 +0,0 @@ -@inherits Fluxor.Blazor.Web.Components.FluxorComponent - - - - @if (Number != null) - { -
    -
  1. @Title
  2. -
- } - else - { - @Title - } -
- @if (DisplayAdditionalInfo) - { - @AdditionalInfo - } - @ChildContent -
diff --git a/Apps/Admin/Client/Components/Support/AssessmentQuestion.razor.cs b/Apps/Admin/Client/Components/Support/AssessmentQuestion.razor.cs deleted file mode 100644 index 62f3cfab31..0000000000 --- a/Apps/Admin/Client/Components/Support/AssessmentQuestion.razor.cs +++ /dev/null @@ -1,65 +0,0 @@ -// ------------------------------------------------------------------------- -// Copyright © 2019 Province of British Columbia -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ------------------------------------------------------------------------- -namespace HealthGateway.Admin.Client.Components.Support -{ - using System.Collections.Generic; - using Fluxor.Blazor.Web.Components; - using Microsoft.AspNetCore.Components; - - /// - /// Backing logic for a question on the COVID-19 treatment assessment. - /// - public partial class AssessmentQuestion : FluxorComponent - { - /// - /// Gets or sets the question text. - /// - [Parameter] - [EditorRequired] - public string Title { get; set; } = string.Empty; - - /// - /// Gets or sets the question number. - /// - [Parameter] - public int? Number { get; set; } - - /// - /// Gets or sets additional information that should be displayed. - /// - [Parameter] - public string AdditionalInfo { get; set; } = string.Empty; - - /// - /// Gets or sets a value indicating whether the additional information should be displayed. - /// - [Parameter] - public bool DisplayAdditionalInfo { get; set; } - - /// - /// Gets or sets the child content of this component. - /// - [Parameter] - public RenderFragment? ChildContent { get; set; } - - /// - /// Gets or sets all attributes added to the component that don't match any of its parameters. - /// They will be splatted onto the underlying element. - /// - [Parameter(CaptureUnmatchedValues = true)] - public IReadOnlyDictionary UnmatchedAttributes { get; set; } = new Dictionary(); - } -} diff --git a/Apps/Admin/Client/Components/Support/Covid19AssessmentSection.razor b/Apps/Admin/Client/Components/Support/Covid19AssessmentSection.razor deleted file mode 100644 index 51710b994a..0000000000 --- a/Apps/Admin/Client/Components/Support/Covid19AssessmentSection.razor +++ /dev/null @@ -1,51 +0,0 @@ -@using HealthGateway.Common.Data.Utils -@inherits Fluxor.Blazor.Web.Components.FluxorComponent - - -
Assessment History
- - Start COVID-19 Treatment Assessment - -
- - - - - - - - - - - - Date - - - - - ID - - - - - @DateFormatter.ToShortDateAndTime(ConvertDateTime(context.DateTimeOfAssessment)) - @context.FormId - - - - - diff --git a/Apps/Admin/Client/Components/Support/Covid19AssessmentSection.razor.cs b/Apps/Admin/Client/Components/Support/Covid19AssessmentSection.razor.cs deleted file mode 100644 index a508614a45..0000000000 --- a/Apps/Admin/Client/Components/Support/Covid19AssessmentSection.razor.cs +++ /dev/null @@ -1,89 +0,0 @@ -// ------------------------------------------------------------------------- -// Copyright © 2019 Province of British Columbia -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ------------------------------------------------------------------------- -namespace HealthGateway.Admin.Client.Components.Support -{ - using System; - using System.Collections.Generic; - using System.Linq; - using Fluxor.Blazor.Web.Components; - using HealthGateway.Admin.Common.Models.CovidSupport; - using HealthGateway.Common.Data.Utils; - using Microsoft.AspNetCore.Components; - using Microsoft.Extensions.Configuration; - - /// - /// Backing logic for the COVID-19 treatment assessment section. - /// - public partial class Covid19AssessmentSection : FluxorComponent - { - /// - /// Gets or sets the data with which to populate the table. - /// - [Parameter] - [EditorRequired] - public IEnumerable Data { get; set; } = []; - - /// - /// Gets or sets a value indicating whether data is loading. - /// - [Parameter] - [EditorRequired] - public bool IsLoading { get; set; } = true; - - /// - /// Gets or sets the path for the assessment page. - /// - [Parameter] - [EditorRequired] - public string AssessmentPagePath { get; set; } = string.Empty; - - [Inject] - private IConfiguration Configuration { get; set; } = default!; - - [Inject] - private NavigationManager NavigationManager { get; set; } = default!; - - private IEnumerable Rows => this.Data.Select(a => new AssessmentDetailRow(a)); - - private void NavigateToCovid19TreatmentAssessment() - { - this.NavigationManager.NavigateTo(this.AssessmentPagePath); - } - - private DateTime ConvertDateTime(DateTime utcDateTime) - { - return TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, this.GetTimeZone()); - } - - private TimeZoneInfo GetTimeZone() - { - return DateFormatter.GetLocalTimeZone(this.Configuration); - } - - private sealed record AssessmentDetailRow - { - public AssessmentDetailRow(PreviousAssessmentDetails model) - { - this.FormId = model.FormId; - this.DateTimeOfAssessment = model.DateTimeOfAssessment; - } - - public DateTime DateTimeOfAssessment { get; } - - public string? FormId { get; } - } - } -} diff --git a/Apps/Admin/Client/Pages/Covid19TreatmentAssessmentPage.razor b/Apps/Admin/Client/Pages/Covid19TreatmentAssessmentPage.razor deleted file mode 100644 index 2e408ead44..0000000000 --- a/Apps/Admin/Client/Pages/Covid19TreatmentAssessmentPage.razor +++ /dev/null @@ -1,229 +0,0 @@ -@page "/covid-19-treatment-assessment" -@layout MainLayout -@attribute [Authorize(Roles = $"{Roles.Support},{Roles.Admin}")] -@using HealthGateway.Admin.Client.Components.Support -@using HealthGateway.Admin.Client.Store.PatientDetails -@using HealthGateway.Admin.Client.Store.PatientSupport -@using HealthGateway.Admin.Common.Constants -@using HealthGateway.Common.Ui.Constants -@using System.Globalization -@inherits Fluxor.Blazor.Web.Components.FluxorComponent - -Health Gateway Admin COVID-19 Treatment Assessment - - - - Back - - - -COVID-19 Treatment Assessment - - - @PatientDetailsState.Value.Error?.Message - - - - @PatientSupportState.Value.Error?.Message - - - -
    - @foreach (string warning in PatientSupportState.Value.WarningMessages) - { -
  • @warning
  • - } -
-
- - - @StatusWarning - - -@if (Patient != null && AssessmentInfo != null) -{ - - Patient Information - - - - - - - - - - - - - - @if (Patient.Status is PatientStatus.Default or PatientStatus.NotUser) - { - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Clear - - - - - - @if (SymptomOnsetTooLongAgo) - { - Citizen would likely not benefit from COVID‑19 treatment. - } - - - - - - - - - - - - - - - - @(string.IsNullOrWhiteSpace(Request.PhoneNumber) ? "Not provided" : Request.PhoneNumber) - - - - -
- - Cancel - - - Submit - -
- } -} -else if (PatientsLoaded && PatientDetailsLoaded) -{ - - No user found with the specified HDID. - -} -else -{ - -} diff --git a/Apps/Admin/Client/Pages/Covid19TreatmentAssessmentPage.razor.cs b/Apps/Admin/Client/Pages/Covid19TreatmentAssessmentPage.razor.cs deleted file mode 100644 index d389a842ea..0000000000 --- a/Apps/Admin/Client/Pages/Covid19TreatmentAssessmentPage.razor.cs +++ /dev/null @@ -1,212 +0,0 @@ -//------------------------------------------------------------------------- -// Copyright © 2019 Province of British Columbia -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//------------------------------------------------------------------------- -namespace HealthGateway.Admin.Client.Pages -{ - using System; - using System.Linq; - using System.Threading.Tasks; - using Fluxor; - using Fluxor.Blazor.Web.Components; - using HealthGateway.Admin.Client.Store.PatientDetails; - using HealthGateway.Admin.Client.Store.PatientSupport; - using HealthGateway.Admin.Client.Utils; - using HealthGateway.Admin.Common.Constants; - using HealthGateway.Admin.Common.Models; - using HealthGateway.Admin.Common.Models.CovidSupport; - using HealthGateway.Common.Data.Constants; - using HealthGateway.Common.Data.Models; - using HealthGateway.Common.Data.Utils; - using HealthGateway.Common.Data.Validations; - using Microsoft.AspNetCore.Components; - using Microsoft.AspNetCore.WebUtilities; - using Microsoft.Extensions.Primitives; - using MudBlazor; - using AssessmentAddressConfirmationDialog = HealthGateway.Admin.Client.Components.Support.AddressConfirmationDialog< - HealthGateway.Admin.Client.Store.PatientDetails.PatientDetailsActions.SubmitCovid19TreatmentAssessmentFailureAction, - HealthGateway.Admin.Client.Store.PatientDetails.PatientDetailsActions.SubmitCovid19TreatmentAssessmentSuccessAction>; - - /// - /// Backing logic for the COVID-19 Treatment Assessment page. - /// - public partial class Covid19TreatmentAssessmentPage : FluxorComponent - { - [Inject] - private IDispatcher Dispatcher { get; set; } = default!; - - [Inject] - private IState PatientDetailsState { get; set; } = default!; - - [Inject] - private IState PatientSupportState { get; set; } = default!; - - [Inject] - private IDialogService Dialog { get; set; } = default!; - - [Inject] - private NavigationManager NavigationManager { get; set; } = default!; - - private bool HasPatientSupportDetailsError => this.PatientDetailsState.Value.Error is { Message.Length: > 0 }; - - private bool PatientsLoaded => this.PatientSupportState.Value.Loaded; - - private bool HasPatientsError => this.PatientSupportState.Value.Error is { Message.Length: > 0 }; - - private bool HasPatientsWarning => this.PatientSupportState.Value.WarningMessages.Any(); - - private PatientSupportResult? Patient => - this.PatientSupportState.Value.Result?.SingleOrDefault(x => x.PersonalHealthNumber == this.Phn); - - private bool PatientDetailsLoaded => this.PatientDetailsState.Value.Loaded; - - private CovidAssessmentDetailsResponse? AssessmentInfo => this.PatientDetailsState.Value.Result?.CovidAssessmentDetails; - - private string PatientName => StringManipulator.JoinWithoutBlanks([this.Patient?.PreferredName?.GivenName, this.Patient?.PreferredName?.Surname]); - - private int Age => AgeRangeValidator.CalculateAge(DateTime.UtcNow, this.Patient?.Birthdate?.ToDateTime(TimeOnly.MinValue) ?? DateTime.UtcNow); - - private string? StatusWarning => this.Patient == null ? null : FormattingUtility.FormatPatientStatus(this.Patient.Status); - - private string PatientDetailsUrl => $"/patient-details?phn={this.Phn}"; - - private MudForm Form { get; set; } = default!; - - private MudDatePicker SymptomOnsetDatePicker { get; set; } = default!; - - private string Phn { get; set; } = string.Empty; - - private CovidAssessmentRequest Request { get; } = new(); - - private bool SymptomOnsetTooLongAgo - { - get - { - DateTime? onsetDate = this.Request.SymptomOnsetDate; - if (onsetDate == null) - { - return false; - } - - return DateTime.UtcNow.Date > onsetDate.Value.Date.AddDays(10); - } - } - - /// - protected override void OnInitialized() - { - base.OnInitialized(); - - Uri uri = this.NavigationManager.ToAbsoluteUri(this.NavigationManager.Uri); - if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("phn", out StringValues phn) && phn != StringValues.Empty) - { - this.Phn = phn.ToString(); - this.RetrievePatientDetails(); - } - else - { - this.NavigationManager.NavigateTo("/support"); - } - } - - private static string? ValidatePhoneNumber(string number) - { - if (string.IsNullOrWhiteSpace(number)) - { - return "Required"; - } - - return !AddressUtility.PhoneNumberRegex().IsMatch(number) ? "Invalid phone number" : null; - } - - private static string? ValidateRequiredOption(CovidTherapyAssessmentOption option) - { - return option == CovidTherapyAssessmentOption.Unspecified ? "Required" : null; - } - - private void RetrievePatientDetails() - { - if (this.Patient == null) - { - this.Dispatcher.Dispatch(new PatientSupportActions.ResetStateAction()); - - this.Dispatcher.Dispatch(new PatientSupportActions.LoadAction { QueryType = PatientQueryType.Phn, QueryString = this.Phn }); - } - - if (this.AssessmentInfo == null) - { - this.Dispatcher.Dispatch(new PatientDetailsActions.ResetStateAction()); - this.Dispatcher.Dispatch(new PatientDetailsActions.LoadAction { QueryType = ClientRegistryType.Phn, QueryString = this.Phn, RefreshVaccineDetails = false }); - } - } - - private async Task HandleClickConfirmAsync() - { - await this.Form.Validate(); - if (!this.Form.IsValid) - { - return; - } - - await this.OpenAddressConfirmationDialogAsync(); - } - - private void SubmitAssessment(Address address) - { - this.Request.StreetAddresses = address.StreetLines.ToList(); - this.Request.City = address.City; - this.Request.ProvOrState = address.State; - this.Request.PostalCode = address.PostalCode; - this.Request.Country = address.Country; - - this.Request.Phn = this.Patient?.PersonalHealthNumber ?? string.Empty; - this.Request.FirstName = this.Patient?.LegalName?.GivenName ?? string.Empty; - this.Request.LastName = this.Patient?.LegalName?.Surname ?? string.Empty; - this.Request.Birthdate = this.Patient?.Birthdate?.ToDateTime(TimeOnly.MinValue); - - this.Dispatcher.Dispatch(new PatientDetailsActions.SubmitCovid19TreatmentAssessmentAction { Request = this.Request, Phn = this.Phn }); - } - - private async Task OpenAddressConfirmationDialogAsync() - { - Address? address = this.Patient?.PostalAddress ?? this.Patient?.PhysicalAddress; - - const string title = "Confirm Address"; - DialogParameters parameters = new() - { - [nameof(AssessmentAddressConfirmationDialog.ActionOnConfirm)] = (Action
)this.SubmitAssessment, - [nameof(AssessmentAddressConfirmationDialog.DefaultAddress)] = address, - [nameof(AssessmentAddressConfirmationDialog.ConfirmButtonLabel)] = "Send", - [nameof(AssessmentAddressConfirmationDialog.OutputCountryCodeFormat)] = true, - }; - DialogOptions options = new() - { - DisableBackdropClick = true, - FullWidth = true, - MaxWidth = MaxWidth.Small, - }; - IDialogReference dialog = await this.Dialog - .ShowAsync( - title, - parameters, - options); - - DialogResult result = await dialog.Result; - if (!result.Canceled) - { - this.NavigationManager.NavigateTo(this.PatientDetailsUrl); - } - } - } -} diff --git a/Apps/Admin/Client/Store/PatientDetails/PatientDetailsActions.cs b/Apps/Admin/Client/Store/PatientDetails/PatientDetailsActions.cs index dbe3bf6cbe..f9477f4aa1 100644 --- a/Apps/Admin/Client/Store/PatientDetails/PatientDetailsActions.cs +++ b/Apps/Admin/Client/Store/PatientDetails/PatientDetailsActions.cs @@ -19,7 +19,6 @@ namespace HealthGateway.Admin.Client.Store.PatientDetails using System.Diagnostics.CodeAnalysis; using HealthGateway.Admin.Common.Constants; using HealthGateway.Admin.Common.Models; - using HealthGateway.Admin.Common.Models.CovidSupport; using HealthGateway.Common.Data.Constants; /// @@ -96,38 +95,6 @@ public record BlockAccessSuccessAction /// public record BlockAccessFailureAction : BaseFailureAction; - /// - /// The action representing the initiation of a COVID-19 treatment assessment submission. - /// - public record SubmitCovid19TreatmentAssessmentAction - { - /// - /// Gets the COVID-19 therapy assessment request. - /// - public required CovidAssessmentRequest Request { get; init; } - - /// - /// Gets the PHN associated with the patient. - /// - public required string Phn { get; init; } - } - - /// - /// The action representing a successful COVID-19 treatment assessment submission. - /// - public record SubmitCovid19TreatmentAssessmentSuccessAction - { - /// - /// Gets the PHN associated with the patient. - /// - public required string Phn { get; init; } - } - - /// - /// The action representing a failed COVID-19 treatment assessment submission. - /// - public record SubmitCovid19TreatmentAssessmentFailureAction : BaseFailureAction; - /// /// The action that clears the state. /// diff --git a/Apps/Admin/Client/Store/PatientDetails/PatientDetailsEffects.cs b/Apps/Admin/Client/Store/PatientDetails/PatientDetailsEffects.cs index d39df0692c..8b05414a62 100644 --- a/Apps/Admin/Client/Store/PatientDetails/PatientDetailsEffects.cs +++ b/Apps/Admin/Client/Store/PatientDetails/PatientDetailsEffects.cs @@ -79,36 +79,5 @@ public Task HandleBlockSuccessAction(PatientDetailsActions.BlockAccessSuccessAct }); return Task.CompletedTask; } - - [EffectMethod] - public async Task HandleSubmitCovid19TreatmentAssessmentAction(PatientDetailsActions.SubmitCovid19TreatmentAssessmentAction action, IDispatcher dispatcher) - { - logger.LogInformation("Submitting COVID-19 treatment assessment"); - try - { - await supportApi.SubmitCovidAssessmentAsync(action.Request); - dispatcher.Dispatch(new PatientDetailsActions.SubmitCovid19TreatmentAssessmentSuccessAction { Phn = action.Phn }); - } - catch (Exception e) when (e is ApiException or HttpRequestException) - { - logger.LogError(e, "Error submitting COVID-19 treatment assessment: {Message}", e.Message); - RequestError error = StoreUtility.FormatRequestError(e); - dispatcher.Dispatch(new PatientDetailsActions.SubmitCovid19TreatmentAssessmentFailureAction { Error = error }); - } - } - - [EffectMethod] - public Task HandleSubmitCovid19TreatmentAssessmentSuccessAction(PatientDetailsActions.SubmitCovid19TreatmentAssessmentSuccessAction action, IDispatcher dispatcher) - { - logger.LogInformation("Reload the patient's data for details page"); - dispatcher.Dispatch( - new PatientDetailsActions.LoadAction - { - QueryType = ClientRegistryType.Phn, - QueryString = action.Phn, - RefreshVaccineDetails = false, - }); - return Task.CompletedTask; - } } } diff --git a/Apps/Admin/Client/Store/PatientDetails/PatientDetailsReducers.cs b/Apps/Admin/Client/Store/PatientDetails/PatientDetailsReducers.cs index 6b092ae73d..c9c19d32ee 100644 --- a/Apps/Admin/Client/Store/PatientDetails/PatientDetailsReducers.cs +++ b/Apps/Admin/Client/Store/PatientDetails/PatientDetailsReducers.cs @@ -42,7 +42,6 @@ public static PatientDetailsState ReduceLoadSuccessAction(PatientDetailsState st AgentActions = action.Data.AgentActions?.ToImmutableList(), Dependents = action.Data.Dependents?.ToImmutableList(), VaccineDetails = action.Data.VaccineDetails, - CovidAssessmentDetails = action.Data.CovidAssessmentDetails, }; } @@ -69,7 +68,6 @@ public static PatientDetailsState ReduceResetStateAction(PatientDetailsState sta AgentActions = null, Dependents = null, VaccineDetails = null, - CovidAssessmentDetails = null, }; } diff --git a/Apps/Admin/Client/Store/PatientDetails/PatientDetailsState.cs b/Apps/Admin/Client/Store/PatientDetails/PatientDetailsState.cs index ca8c6c8261..dcfa1c9e72 100644 --- a/Apps/Admin/Client/Store/PatientDetails/PatientDetailsState.cs +++ b/Apps/Admin/Client/Store/PatientDetails/PatientDetailsState.cs @@ -55,11 +55,6 @@ public record PatientDetailsState : BaseRequestState /// public VaccineDetails? VaccineDetails { get; init; } - /// - /// Gets the covid assessment details linked to the patient support details. - /// - public CovidAssessmentDetailsResponse? CovidAssessmentDetails { get; init; } - /// /// Gets the request state for block access requests. /// diff --git a/Apps/Admin/Common/Models/CovidSupport/CovidAssessmentDetailsResponse.cs b/Apps/Admin/Common/Models/CovidSupport/CovidAssessmentDetailsResponse.cs deleted file mode 100644 index bebdf69a90..0000000000 --- a/Apps/Admin/Common/Models/CovidSupport/CovidAssessmentDetailsResponse.cs +++ /dev/null @@ -1,55 +0,0 @@ -//------------------------------------------------------------------------- -// Copyright © 2019 Province of British Columbia -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//------------------------------------------------------------------------- -namespace HealthGateway.Admin.Common.Models.CovidSupport; - -using System.Collections.Generic; -using System.Text.Json.Serialization; - -/// -/// Model object representing citizen details for the COVID-19 therapy assessment. -/// -public class CovidAssessmentDetailsResponse -{ - /// - /// Gets or sets a value indicating whether the citizen has tested positive for COVID-19 in the past 7 days. - /// - [JsonPropertyName("hasKnownPositiveC19Past7Days")] - public bool HasKnownPositiveC19Past7Days { get; set; } - - /// - /// Gets or sets a value indicating whether the citizen is considered immunocompromised. - /// - [JsonPropertyName("citizenIsConsideredImmunoCompromised")] - public bool CitizenIsConsideredImmunoCompromised { get; set; } - - /// - /// Gets or sets a value indicating whether the citizen has had 3 vaccine doses for more than 14 days. - /// - [JsonPropertyName("has3DoseMoreThan14Days")] - public bool Has3DoseMoreThan14Days { get; set; } - - /// - /// Gets or sets a value indicating whether the citizen has a documented chronic condition. - /// - [JsonPropertyName("hasDocumentedChronicCondition")] - public bool HasDocumentedChronicCondition { get; set; } - - /// - /// Gets or sets the list of previous assessment details. - /// - [JsonPropertyName("previousAssessmentDetailsList")] - public IEnumerable? PreviousAssessmentDetailsList { get; set; } -} diff --git a/Apps/Admin/Common/Models/CovidSupport/CovidAssessmentRequest.cs b/Apps/Admin/Common/Models/CovidSupport/CovidAssessmentRequest.cs deleted file mode 100644 index 4d9b312400..0000000000 --- a/Apps/Admin/Common/Models/CovidSupport/CovidAssessmentRequest.cs +++ /dev/null @@ -1,177 +0,0 @@ -//------------------------------------------------------------------------- -// Copyright © 2019 Province of British Columbia -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//------------------------------------------------------------------------- -namespace HealthGateway.Admin.Common.Models.CovidSupport; - -using System; -using System.Collections.Generic; -using System.Text.Json.Serialization; -using HealthGateway.Admin.Common.Constants; - -/// -/// Model representing a request for COVID-19 therapy assessment. -/// -public class CovidAssessmentRequest -{ - /// - /// Gets or sets the patient's PHN. - /// - [JsonPropertyName("phn")] - public string Phn { get; set; } = string.Empty; - - /// - /// Gets or sets the patient's first name. - /// - [JsonPropertyName("firstName")] - public string FirstName { get; set; } = string.Empty; - - /// - /// Gets or sets the patient's last name. - /// - [JsonPropertyName("lastName")] - public string LastName { get; set; } = string.Empty; - - /// - /// Gets or sets the patient's date of birth. - /// - [JsonPropertyName("dob")] - public DateTime? Birthdate { get; set; } - - /// - /// Gets or sets the patient's phone number. - /// - [JsonPropertyName("phoneNumber")] - public string PhoneNumber { get; set; } = string.Empty; - - /// - /// Gets or sets the response to the family doctor or NP question. - /// - [JsonPropertyName("hasAFamilyDoctorOrNp")] - public CovidTherapyAssessmentOption HasAFamilyDoctorOrNp { get; set; } - - /// - /// Gets or sets the response to the over 12 confirmation question. - /// - [JsonPropertyName("confirmsOver12")] - public CovidTherapyAssessmentOption ConfirmsOver12 { get; set; } - - /// - /// Gets or sets the response to the tested positive in past 7 days question. - /// - [JsonPropertyName("testedPositiveInPast7Days")] - public CovidTherapyAssessmentOption TestedPositiveInPast7Days { get; set; } - - /// - /// Gets or sets the response to the severe COVID-19 symptoms question. - /// - [JsonPropertyName("hasSevereCovid19Symptoms")] - public CovidTherapyAssessmentOption HasSevereCovid19Symptoms { get; set; } - - /// - /// Gets or sets the response to the mild or moderate COVID-19 symptoms question. - /// - [JsonPropertyName("hasMildOrModerateCovid19Symptoms")] - public CovidTherapyAssessmentOption HasMildOrModerateCovid19Symptoms { get; set; } - - /// - /// Gets or sets the symptom onset date. - /// - [JsonPropertyName("symptomOnSetDate")] - public DateTime? SymptomOnsetDate { get; set; } - - /// - /// Gets or sets the response to the immunity-compromising medical condition question. - /// - [JsonPropertyName("hasImmunityCompromisingMedicalCondition")] - public CovidTherapyAssessmentOption HasImmunityCompromisingMedicalCondition { get; set; } - - /// - /// Gets or sets the response to the chronic condition diagnoses question. - /// - [JsonPropertyName("hasChronicConditionDiagnoses")] - public CovidTherapyAssessmentOption HasChronicConditionDiagnoses { get; set; } - - /// - /// Gets or sets the response to the consent to update CareConnect question. - /// - [JsonPropertyName("consentToSendCC")] - public CovidTherapyAssessmentOption ConsentToSendCc { get; set; } - - /// - /// Gets or sets the agent comments. - /// - [JsonPropertyName("agentComments")] - public string AgentComments { get; set; } = string.Empty; - - /// - /// Gets or sets the lines of the patient's street address. - /// - [JsonPropertyName("streetAddresses")] - public IEnumerable StreetAddresses { get; set; } = []; - - /// - /// Gets or sets the patient's city. - /// - [JsonPropertyName("city")] - public string City { get; set; } = string.Empty; - - /// - /// Gets or sets the patient's province or state. - /// - [JsonPropertyName("provOrState")] - public string ProvOrState { get; set; } = string.Empty; - - /// - /// Gets or sets the patient's postal code. - /// - [JsonPropertyName("postalCode")] - public string PostalCode { get; set; } = string.Empty; - - /// - /// Gets or sets the patient's country. - /// - [JsonPropertyName("country")] - public string Country { get; set; } = string.Empty; - - /// - /// Gets or sets a value indicating whether a change of address has been flagged. - /// - [JsonPropertyName("changeAddressFlag")] - public bool ChangeAddressFlag { get; set; } - - /// - /// Gets or sets positive COVID-19 lab data. - /// - [JsonPropertyName("positiveCovidLabData")] - public string PositiveCovidLabData { get; set; } = string.Empty; - - /// - /// Gets or sets the COVID-19 vaccination history. - /// - [JsonPropertyName("covidVaccinationHistory")] - public string CovidVaccinationHistory { get; set; } = string.Empty; - - /// - /// Gets or sets CEV group details. - /// - [JsonPropertyName("cevGroupDetails")] - public string CevGroupDetails { get; set; } = string.Empty; - - /// - /// Gets or sets the submission date. - /// - [JsonPropertyName("submitted")] - public DateTime? Submitted { get; set; } -} diff --git a/Apps/Admin/Common/Models/CovidSupport/CovidAssessmentResponse.cs b/Apps/Admin/Common/Models/CovidSupport/CovidAssessmentResponse.cs deleted file mode 100644 index c8e6e92f56..0000000000 --- a/Apps/Admin/Common/Models/CovidSupport/CovidAssessmentResponse.cs +++ /dev/null @@ -1,31 +0,0 @@ -//------------------------------------------------------------------------- -// Copyright © 2019 Province of British Columbia -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//------------------------------------------------------------------------- -namespace HealthGateway.Admin.Common.Models.CovidSupport; - -using System; -using System.Text.Json.Serialization; - -/// -/// Model object representing an anti viral screener support submission response. -/// -public class CovidAssessmentResponse -{ - /// - /// Gets or sets the id for covid therapy assessment response. - /// - [JsonPropertyName("id")] - public Guid Id { get; set; } -} diff --git a/Apps/Admin/Common/Models/PatientSupportDetails.cs b/Apps/Admin/Common/Models/PatientSupportDetails.cs index bbe6167918..cc0413dadb 100644 --- a/Apps/Admin/Common/Models/PatientSupportDetails.cs +++ b/Apps/Admin/Common/Models/PatientSupportDetails.cs @@ -49,10 +49,5 @@ public class PatientSupportDetails /// Gets the vaccine details. /// public VaccineDetails? VaccineDetails { get; init; } - - /// - /// Gets the COVID-19 treatment assessment details. - /// - public CovidAssessmentDetailsResponse? CovidAssessmentDetails { get; init; } } } diff --git a/Apps/Admin/Server/Api/IImmunizationAdminApi.cs b/Apps/Admin/Server/Api/IImmunizationAdminApi.cs index 8b063eac9e..ffcb9ec4bc 100644 --- a/Apps/Admin/Server/Api/IImmunizationAdminApi.cs +++ b/Apps/Admin/Server/Api/IImmunizationAdminApi.cs @@ -17,8 +17,6 @@ namespace HealthGateway.Admin.Server.Api; using System.Threading; using System.Threading.Tasks; -using HealthGateway.Admin.Common.Models.CovidSupport; -using HealthGateway.Admin.Server.Models.CovidSupport; using HealthGateway.Admin.Server.Models.Immunization; using HealthGateway.Common.Data.Models.PHSA; using HealthGateway.Common.Models.PHSA; @@ -29,26 +27,6 @@ namespace HealthGateway.Admin.Server.Api; /// public interface IImmunizationAdminApi { - /// - /// Submit a completed Anti Viral screening form. - /// - /// The covid assessment request to use for submission. - /// The bearer token to authorize the call. - /// to manage the async request. - /// The response to the submitted covid anti viral therapeutic assessment form. - [Post("/api/v1/Support/Immunizations/AntiViralScreenerSubmission")] - Task SubmitCovidAssessmentAsync([Body] CovidAssessmentRequest request, [Authorize] string token, CancellationToken ct = default); - - /// - /// Get details to help support the covid anti viral therapeutic assessment form for a phn. - /// - /// The covid assessment details request to identity the covid therapy assessment. - /// The bearer token to authorize the call. - /// to manage the async request. - /// The details to help support covid anti viral therapeutic assessment. - [Post("/api/v1/Support/Immunizations/AntiViralSupportDetails")] - Task GetCovidAssessmentDetailsAsync([Body] CovidAssessmentDetailsRequest request, [Authorize] string token, CancellationToken ct = default); - /// /// Retrieves a PhsaResult containing the vaccine status of a given patient. /// diff --git a/Apps/Admin/Server/Controllers/SupportController.cs b/Apps/Admin/Server/Controllers/SupportController.cs index 457808e62b..30f8f28bbb 100644 --- a/Apps/Admin/Server/Controllers/SupportController.cs +++ b/Apps/Admin/Server/Controllers/SupportController.cs @@ -200,31 +200,5 @@ public async Task RetrieveVaccineRecord([FromQuery] string phn, Can { return await covidSupportService.RetrieveVaccineRecordAsync(phn, ct); } - - /// - /// Submitting a completed anti viral screening form. - /// - /// The covid therapy assessment request to use for submission. - /// to manage the async request. - /// A covid therapy assessment response. - /// Returns a covid therapy assessment response. - /// The client must authenticate itself to get the requested response. - /// - /// The client does not have access rights to the content; that is, it is unauthorized, so the server - /// is refusing to give the requested resource. Unlike 401, the client's identity is known to the server. - /// - /// The service is unavailable for use. - [HttpPost] - [Produces("application/json")] - [Route("CovidAssessment")] - [Authorize(Roles = "SupportUser,AdminUser")] - [ProducesResponseType(StatusCodes.Status200OK)] - [ProducesResponseType(StatusCodes.Status401Unauthorized)] - [ProducesResponseType(StatusCodes.Status403Forbidden)] - [ProducesResponseType(StatusCodes.Status503ServiceUnavailable)] - public async Task SubmitCovidAssessment([FromBody] CovidAssessmentRequest request, CancellationToken ct) - { - return await covidSupportService.SubmitCovidAssessmentAsync(request, ct); - } } } diff --git a/Apps/Admin/Server/Services/CovidSupportService.cs b/Apps/Admin/Server/Services/CovidSupportService.cs index ff97957125..8951783339 100644 --- a/Apps/Admin/Server/Services/CovidSupportService.cs +++ b/Apps/Admin/Server/Services/CovidSupportService.cs @@ -20,7 +20,6 @@ namespace HealthGateway.Admin.Server.Services using System.Threading.Tasks; using HealthGateway.AccountDataAccess.Patient; using HealthGateway.Admin.Common.Models.CovidSupport; - using HealthGateway.Admin.Server.Api; using HealthGateway.Admin.Server.Delegates; using HealthGateway.Common.AccessManagement.Authentication; using HealthGateway.Common.Constants; @@ -45,7 +44,6 @@ namespace HealthGateway.Admin.Server.Services /// The auth delegate to fetch tokens. /// The injected delegate to get the vaccine proof. /// The injected delegate to get the vaccine status. - /// The api client to use for immunization. /// The injected patient repository. public class CovidSupportService( IConfiguration configuration, @@ -53,7 +51,6 @@ public class CovidSupportService( IAuthenticationDelegate authenticationDelegate, IVaccineProofDelegate vaccineProofDelegate, IVaccineStatusDelegate vaccineStatusDelegate, - IImmunizationAdminApi immunizationAdminApi, IPatientRepository patientRepository) : ICovidSupportService { private readonly BcMailPlusConfig bcmpConfig = configuration.GetSection(BcMailPlusConfig.ConfigSectionKey).Get() ?? new(); @@ -78,15 +75,6 @@ public async Task RetrieveVaccineRecordAsync(string phn, Cancellati return await this.GetVaccineProofReportAsync(vaccineProofResponse.AssetUri, ct); } - /// - public async Task SubmitCovidAssessmentAsync(CovidAssessmentRequest request, CancellationToken ct = default) - { - string accessToken = await this.GetAccessTokenAsync(ct); - - request.Submitted = DateTime.UtcNow; - return await immunizationAdminApi.SubmitCovidAssessmentAsync(request, accessToken, ct); - } - private async Task GetAccessTokenAsync(CancellationToken ct) { string? accessToken = await authenticationDelegate.FetchAuthenticatedUserTokenAsync(ct); diff --git a/Apps/Admin/Server/Services/ICovidSupportService.cs b/Apps/Admin/Server/Services/ICovidSupportService.cs index d4026a87dd..6287cea385 100644 --- a/Apps/Admin/Server/Services/ICovidSupportService.cs +++ b/Apps/Admin/Server/Services/ICovidSupportService.cs @@ -40,13 +40,5 @@ public interface ICovidSupportService /// A cancellation token. /// The encoded document. Task RetrieveVaccineRecordAsync(string phn, CancellationToken ct = default); - - /// - /// Submits a covid therapy assessment request. - /// - /// The request containing the assessment. - /// A cancellation token. - /// Returns the covid therapy assessment response. - Task SubmitCovidAssessmentAsync(CovidAssessmentRequest request, CancellationToken ct = default); } } diff --git a/Apps/Admin/Server/Services/SupportService.cs b/Apps/Admin/Server/Services/SupportService.cs index a0be636d15..08fb58013b 100644 --- a/Apps/Admin/Server/Services/SupportService.cs +++ b/Apps/Admin/Server/Services/SupportService.cs @@ -27,7 +27,6 @@ namespace HealthGateway.Admin.Server.Services using HealthGateway.Admin.Common.Constants; using HealthGateway.Admin.Common.Models; using HealthGateway.Admin.Common.Models.CovidSupport; - using HealthGateway.Admin.Server.Api; using HealthGateway.Admin.Server.Delegates; using HealthGateway.Admin.Server.Models; using HealthGateway.Common.AccessManagement.Authentication; @@ -51,7 +50,6 @@ namespace HealthGateway.Admin.Server.Services /// The user profile delegate to interact with the DB. /// The auth delegate to fetch tokens. /// The injected immunization admin delegate. - /// The injected immunization admin api. /// The injected audit repository. /// The injected cache provider. /// The injected logger provider. @@ -65,7 +63,6 @@ public class SupportService( IUserProfileDelegate userProfileDelegate, IAuthenticationDelegate authenticationDelegate, IImmunizationAdminDelegate immunizationAdminDelegate, - IImmunizationAdminApi immunizationAdminApi, IAuditRepository auditRepository, ICacheProvider cacheProvider, ILogger logger) : ISupportService @@ -89,9 +86,6 @@ public async Task GetPatientSupportDetailsAsync( Task? getVaccineDetails = query.IncludeCovidDetails ? this.GetVaccineDetailsAsync(patient, query.RefreshVaccineDetails, ct) : null; - Task? getCovidAssessmentDetails = - query.IncludeCovidDetails ? immunizationAdminApi.GetCovidAssessmentDetailsAsync(new() { Phn = patient.Phn }, await this.GetAccessTokenAsync(ct), ct) : null; - IEnumerable? messagingVerifications = query.IncludeMessagingVerifications ? await this.GetMessagingVerificationsAsync(patient.Hdid, ct) : null; @@ -111,7 +105,6 @@ public async Task GetPatientSupportDetailsAsync( AgentActions = agentActions, Dependents = dependents, VaccineDetails = getVaccineDetails == null ? null : await getVaccineDetails, - CovidAssessmentDetails = getCovidAssessmentDetails == null ? null : await getCovidAssessmentDetails, }; } diff --git a/Apps/Admin/Tests/Functional/cypress/fixtures/SupportService/patient-details-one-dose.json b/Apps/Admin/Tests/Functional/cypress/fixtures/SupportService/patient-details-one-dose.json index 2446273cd8..613d1b99de 100644 --- a/Apps/Admin/Tests/Functional/cypress/fixtures/SupportService/patient-details-one-dose.json +++ b/Apps/Admin/Tests/Functional/cypress/fixtures/SupportService/patient-details-one-dose.json @@ -31,497 +31,5 @@ "data": "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MCcwMCcpL01vZERhdGUoRDoyMDIzMTAwNTIxMTczMSswMCcwMCcpL1Byb2R1Y2VyKGlUZXh0riBDb3JlIDcuMi4wIFwocHJvZHVjdGlvbiB2ZXJzaW9uXCkgqTIwMDAtMjAyMSBpVGV4dCBHcm91cCBOViwgUHJvdmluY2lhbCBIZWFsdGggU2VydmljZXMgQXV0aG9yaXR5LCBDaGlsZHJlbnMgJiBXb21lbnMgSGVhbHRoIEN0cik+PgplbmRvYmoKMiAwIG9iago8PC9Db3VudCAxL0tpZHNbNCAwIFJdL1R5cGUvUGFnZXM+PgplbmRvYmoKNiAwIG9iago8PC9CYXNlRm9udC9RS1ZJR1crQXJpYWxNVC9EZXNjZW5kYW50Rm9udHNbNyAwIFJdL0VuY29kaW5nL0lkZW50aXR5LUgvU3VidHlwZS9UeXBlMC9Ub1VuaWNvZGUgMTEgMCBSL1R5cGUvRm9udD4+CmVuZG9iago3IDAgb2JqCjw8L0Jhc2VGb250L1FLVklHVytBcmlhbE1UL0NJRFN5c3RlbUluZm88PC9PcmRlcmluZyhJZGVudGl0eSkvUmVnaXN0cnkoQWRvYmUpL1N1cHBsZW1lbnQgMD4+L0NJRFRvR0lETWFwL0lkZW50aXR5L0RXIDEwMDAvRm9udERlc2NyaXB0b3IgOCAwIFIvU3VidHlwZS9DSURGb250VHlwZTIvVHlwZS9Gb250L1dbMyBbMjc3XSAxMCBbMTkwXSAxNiBbMzMzXSAxOCBbMjc3XSAyMCBbNTU2XSAyOCBbNTU2IDI3N10gMzYgWzY2Nl0gMzggWzcyMiA3MjJdIDQzIFs3MjIgMjc3XSA0NyBbNTU2IDgzMyA3MjIgNzc3IDY2NiA3NzcgNzIyIDY2NiA2MTBdIDU3IFs2NjZdIDY4IFs1NTYgNTU2IDUwMCA1NTYgNTU2IDI3NyA1NTYgNTU2IDIyMl0gNzkgWzIyMiA4MzMgNTU2IDU1Nl0gODUgWzMzMyA1MDAgMjc3IDU1NiA1MDBdIDkyIFs1MDBdIDExMiBbNTU2XV0+PgplbmRvYmoKOCAwIG9iago8PC9Bc2NlbnQgNzI4L0NJRFNldCA5IDAgUi9DYXBIZWlnaHQgNzE2L0Rlc2NlbnQgLTIxMC9GbGFncyAzMi9Gb250QkJveFstNjY0IC0zMjQgMjAwMCAxMDM5XS9Gb250RmlsZTIgMTAgMCBSL0ZvbnROYW1lL1FLVklHVytBcmlhbE1UL0l0YWxpY0FuZ2xlIDAvU3RlbVYgODAvU3R5bGU8PC9QYW5vc2U8MDgwNTAyMGIwNjA0MDIwMjAyMDIwMjA0Pj4+L1R5cGUvRm9udERlc2NyaXB0b3I+PgplbmRvYmoKOSAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDE2Pj5zdHJlYW0KeJz7/38UjAIk8AMAp20QBgplbmRzdHJlYW0KZW5kb2JqCjEwIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMzA3NjgvTGVuZ3RoMSA3NDA1Nj4+c3RyZWFtCnic3L15fFTV3TB+zrnr3Nnu7GuSmUwyCZlAQhKWQCTDDrJvY4KkBFlklUWlqCjhURYjKtpK3QVX3MoAAQLamlrrUqXYRa1Wi1VcW5THIq1gZt7vOffeyQTt077P5/3985vJued7zj33rN/9nDtBGCFkRm2IQ9Xz114Refq547dAzrMIiZctWnXpisGPeBMISZVQKH3p8qsW3fZjXIaQ812EUpsXL5y34OMFDaMQWrIAnhm4GDKctYEUpO+FdMniFVes67A+5IR0F0Ij6pavnD9P+K95LyD05GlID14xb90q7/WmPQh9AfWjyKo1C1ft2vfp55CeiJClav6Keauue3kAtH92PULxpVNmVNW4a1puQDjyKZRvFY6gAISg8BgK8HHkRyj7CYRPaZxZkv2U3qcxgRpRpx4Q2o2exkvQ0+g59Dw+BU/tQYdRB3oZ+dAodC9aj36MtiARzYacG9F0+AqQ/2McyHagKrQL5mkXOgplL0LXoSPIi/3Zz9AGtIn7PTy1CVlRMRqOpqKV6GY8MXslmoOO89ejQWgiugytwm3Zpuwt2duzD6NH0GHu5Ww3zHwQzYfv0ewXwh+z76K+8MQd6C50HN9uOoCS0EoblLwPrUF3cy08zl6aPQs9iKIfQh94NAkdxV0kAbUvRJ9gP17PjYRaHsqmsy9AqTBqQYvR3egIHoDHkqgwJzspexR5oY11UOtdaB86CN9O9DP0DrYIp7IPZ0+hAKpE42E8Heg3uIvLdG/MNMKMCTBLfVA93FmJfo5eQq/jGP4FWSlYhBohKVyd/QNyo/5oFvT2MXjyY/wPch18N3Av8mOyI5AN5uU2OtvoV+gvOIir8BScIn3ISnI/twbJ0GJ/+C5AS2C+74Ta/4wT+CCxkGPcQ/yT/DmxIPN+1gYrEkf3oPvQL7AVRhrBl+P/wm/iD8lIMpfcQz7gfsw/zv9Omgej/gFagW5GT6J/YCcejKfhi/FivB5vwbfhu/BR/Dr+lAwnM8ky8iW3mFvN/YwfAd8Z/OX89cJm4Sbx00xT5oXMbzP/yNZkN6NpgA8bofd3oPthZIfRMfQ2fI+jD7CAzdgG3wiO4ln4Gvheh2/GD+Ld+HHcAa28jj/An+Gv8Nf4HEHwFUmIREkxfGNkDfkh+TG5lxyD7+vkb+QbzscVcwluANfANXMroVdbuO3wPcD9hQ/yx/gszHONsEN4QNgtPCk8L5wSLdJ/yUh+7duHuiu6/5xBma2ZHZl9mY7sX5AH1jAIs1CEGqD38+C7FNZ7B2DcHvR7bIG5C+IKPAxPhJmZi5fi1XgdzOQN+G78COv7T/GzMEtv4S+hz1YSZn3uRwaQEWQKfH9AFpLVZDu5nXSQN8lZTuLMnJ3zcBXcWK6FW8hdwV3F7eDS3Gvce9wH3BnuW/hmeYUv4ov5OJ/gx/Jz+Sv5+/lP+E+EOcKrwkeiIq4QN4ud4n9LA6Vh0lRpmtQi3SodlP4gtwJ2/hIdQIdQ3ge/z23kRnMH0C2klg+Q35DfAD7PRQu4SQQwlezGW8m1uIOUCOvEoWQonoxO8XGY6xfJA+QMGcpNwhPwDLSU9NdqE938ExA18L9EJ/lnYWy/gZrXiRZ8HflStKB9GJF6aPNXXDWf4F5F73DHscTvQn/iFezDJ8lj3FTAgp/xw4QmFOXuRT/lVuNr0QEyGiHlnLwN8HgyfgL4wkxcg//JZRFHJgMWDeI+RNejZeSP6CTQ8Vb0E7yAvxTdgmrxevQJehSooo9wmVghevArZAnfTly4AxH+cRhdPS7BnOBGN+AW7m7xS/I2uhId4xX0Z+4p6P0x8lNuEn9KmI4XAwVcizaj1dmN6Cqhif8dvhRxOIVK+feBu63navgoxBuAq8wBnnYQqPsI8IHh3CTI8QPmTAS8mAUc4m743gl8ggcMWgI0fhFwsd+gDnEm6USXCjYMXAch/tXMdDQ7+yi6K3spuix7O+oL/GBLdj3UuBt9hG5Fu/GmzDVoFSoEyvkzniiMIceEMdm+pJ28TWaQHb3XF2a7FPvR5/D9KSSGCc+gdv4tNAM1Zrdl3wDsLgcOexe6BF2ITsAov4AWxnFdqDYzmezNjuFWwXiPo2nZx7JFWEGLs8vRFJBlj0gCmiclYI3T+Hcw3mvQQjI9ewW3MLME5uFWmIUkzNaVwH9u5Ffz1/PfoG1A8zuA3+wEunkCKIfSPkpevOmKy9esXrXyshXLly1dsvjSRQsvaWm6KDVr5pTJw5ONwy5oGDqkfvCgAXW1Nf2rq/r1rUxU9Ckvi5eWxIqjkaLCgnAoGPD7vB63y+lQ7TarxayYZEkUeI5gVDk6NqY1ko63pvl4bNy4vjQdmwcZ8/IyWtMRyBrTu0w60sqKRXqXTELJReeVTGolk7mSWI00oIa+lZHRsUj66KhYpBPPntYE8M2jYs2R9EkGT2LwdgZbAY5G4YHIaP/iUZE0bo2MTo9Zu7h9dOsoqG6vWRkZG7lQ6VuJ9ipmAM0ApX2xVXuxbxhmAPGNHrKXINkKnUoHY6NGpwOxUbQHaa509LwF6anTmkaPCkWjzX0r03jk/NglaRQbkbYnWBE0kjWTFkemJdZMZAkdDbopsreyq31bp4ouaU1YFsQWzJvTlObmNdM2HAlod1Tad/UJf08SKneObNqSfzfEtY/2L4nQZHv7lkh657Sm/LtRem1uhjrgWVI6prV9DDS9DSZxwowItEY2NTel8SZoMkJHQkeljW9hbDTNaV0aSZtiI2KL25e2wtIE29No+lXRfcFg8nD2fRQcHWmf2RSLphtDseZ5o8J73ah9+lX7A8lIoPedvpV7VYc2sXttdh2wWPOBhbl7DGLFKTRhem5mMe1RbDwgRDoyPwI9aYrBmAbTy8LBqH3+YCgGn2YMT6UXwIosSZtGtrarQ2g+fT4tlKqxSPvXCDAgdvJvvXPm6Tliqfo1oiDFkxyqwX0DTicS6YoKiiLSSFhT6OMwlh7Qt3JtJ4nFVqkRiGD60FSY23nNQ6pg+qNRusA3dSbRJZBIt01r0tIRdEloH0pWJZrTpJXe6TLueGbRO23GndzjrTHA5A5EVWBPWo7n/uyq1zV68ZA09v4Ptxdq9yfMiE2YNrspMrq9VZ/bCTN7pbT7g3P3dCjtGtnEhYgOkRDH7gJSzskVpokmS5ovhT+RIfWCTkkGrGQ5ODImrbaO067NSjT6Hz7UmT1Fn2JRz2N6N9NDEr3TQ3ule3XP0s5Bh0G8Tpg5u71d6XUPUE1rcLweAcajmU3RyMg0mgWUWQp/ndmuwTQ0h9JJmLKRtADgn5alJ3sVDOlwM3wodvatHAOMrr19TCwypr21fV5ntu2SWESNtR8mz5Pn21eNbjUQpzN75KZQesy2ZpirxXhI38oYvdPevmAv4kqhmWRoL2bAoJE3NaenJJpj6UsSsWisaSGMZe8QZInObB0JEEEj9sbw1ml7k3jrjNlNh1WwWrbObNpHMBnZOqJ5bwncazocAVHBcgnNpZk0EaEJNAHD1OwjMisfOpxEqI3d5VkGS8/vxIjlyUYeRvM7iZanag3FWUNJUCznd/LanaRRmoc8Wctr00qX66VluKPSO0cQSBzEbmqfvZCY2ZRUBiWHJIcmh5FGAjNCs/ZBzhEoOxSj/cNwIw7thTqns+xO3LZ3aDJ0mNU0XS/ZBiVpXlsuD3pOi+VVBO1pA5/VM4JZs5v2D0NQP7tCiRH0QzktdCKfhhhjonh+UaLJQtonzAAMpDeVwSEl73aEPpjGsfTc2LooHV06FbsqCpmxdAS4NRTai8aGm9vbI/CNwazMTzVpV3oLV4ahpuZ02yVG2VAYcKInaYFHGV7tD1MekmvtGqO1NdAaBdqN5tLzv7c16H0aX0yv7I91f+9AFNPaBymtNdo+p3024GM0XUAb1vsBSVu4mdUAPbmT9QQz4TQfdIJFlJYilMkBm4xduJdMTrAYs7j9wtjoBVCCBhC6A2CxopEFzbRUjBINRfx/WQjnFaKChFXerg41UlhPaeTbnr60d3JxLjmGBtBRSvtpbALGwkg2ml4aSi9vTuSKzKNjbgfaHkIJfAh7eCwNrSB2xqbb5s+DLoK8GT8/BhkXQkak6RJtBqmgbqea0/x58BidZb2l9GWJXlUCT8DAoqAiOpx029RIa3OkFXgIngaTHYqkBYgji0B9is2jfGOqNp6pwPwhmtc+A55FdNlCaQn42aJ5C2OUuaYpvmuzT/vIQ+/QjKY0CrW3xwCHoIulY6AwVB9Pi/HxNIK/VYnYvIVUs1tEFbuFmsoB3WWzQ2sLjY5Fm6EIKWVzCRMHhHYJvcxvp3pjS2sCZsLR7myP1LcDwbcAr+Lj81OtwNciamRMhC31vBCkYBLG01QzVKQVNJXSgvA8+4unVyT2tkilPTnsb2VCKyyzWpkSkZ5qFJHYHwCrE2niGww36eDx9NlMLsBC0ckTSsfD9CYBq0L0aaCimbrY0J4fTx8NGQumPQY5zYYAAHzfW4q3Ts3nhHPSzgnTLw7BxPZlTA4J8EUcktCIDoJPiFInuSvpQgJ/gkOKxJ/AKCCLwgnCPQtGoQnfhfshf0I909DdMFk93TCpuwE1Aqx+C5f+1VFH1FEKFwxM9tsI1/VtUkDnUITvArMFzeb24zLhCDTXkN6UaEp6kMBh4QuCuI0RvB0TvFRc/Ritu+UkajyJHc76+v7VoQM8RkmCkL8xeLS+vrp/s4sbUOvhtvY7Wg31Ob/+OvMF1D0cd5KlZAWM4wJWd2AVWcWRSXgSITiGSFBYBYUC/Kqb/YnJ6okW9WNUNelk/2q0GrdQnQgjf1XwKK18QNQznPTBnQcOUL0m+wmpF34PtS6gtR5GXPbP+9z1pDP752TEXf8TDhPuAW4PR7i1CLthjDChMGvcp4h8ijvx4wcApfZfDUNqUE+fVGFUDY0NW4R+iZZr1Rf6V+OWRCK0H+YUWm9shMY9uBbjx7dnmgLC3866of3jIDnOCV1IwTba/n7FYrF04mRHChmAYjObtRwDUGSrVcvRgGQ0xSWtjrpl/AZyK7lL5p/isQmJAuFMArYQ/GsFgc6QVKKxumqEI9BqZ/b9DlUlswD4POmw2wEKWyxwtVmtLPdUMmC3i7OQarHQq9UK16BFSFrtdQKty0brEnBESApECJiP4Aa8CWkTvzoB65vQPpDQ8KfRV48d9XRCUEsCazdDSeibSUwKgglbTAKdIWc9rBFgBcxUNOYQRWnAwIGDasm5juG/n/mTD6qu4K8Ztr7op2N/PRdwfVb2Ez4AM1eIKshsOnd7RSooD5mL/BiVOvyd2TMddAwAnO6gA/DTYZXTAfkdFprhYKNz+B2VCXN5od1WZJti42w2N5qKMaajtKoOcRbmC8PW4kK3ABjbePKFREsN9LLlZA3D3qpEAv4S6tE/HFXf+xXg8l5yXic+76DTS4FkBZ1caJvO9L9otXdb5zVVld9QcuyQ4ERvMnax96LYIm65d0Xw0tjVwWsLtwVvKrzb+3jw2eDn3o8jZyKuC7z3e5/2ckP6LBBJeeEU21wbsdnCtBH8+6kUF8jiDtps0fCy7GlkQRacRClUlP0KmZFZh/+JrMiqwbgemfPKmbNncuXMeeXMeHDS4U9SNIGZ8Kt+4t9eCQQz+AA6UGqgdqmB0aUaIu9PlV7uMNAr4kg6iGN74qWbGMNInIR5BhI7AzhFQRpglrpbTjSeZLPUvxo0kHRyatMzqAysyVj2/f3RiBjBg+HTjFqADTQ3hw7AFJtt5Z1c1YHlMOdhHqCO5WGruxiAfcvdFAsTjQkHzDade8ouBnm9tTXDyIC6MlGMFUOMamu8TodKIBXHdfFYsehxQ5GBq572rp8349qpA/HAZ1Yc/BZLL9568pqr//vBp94hrz5yxbp9j6+/dheeoV592cQNf1xl8aeWYfmPx7F6d+bDzFeZTzL7f/ocV3fPwRfu3bZnDzAF6m3Bm/k449uTGceL8AISJRMRG3iuAYu8QhqqUCMilKJ3ybvuhHk63bIaeFAjcCKGMzp/FXjZYICNGgsE9grh8NGjR7nmo0e/fezoUUSy3SApmoF7S8hG2mmLwwsQhjU11lrJfpuDTXn5Qh7MG3BHSpb1ZRZ5HZAg5+f6I2c1tIFiotn8c/3Z00YmsRiZuCdTVHR0kbwGS7TogFk0uKWiA4IBmGxGN4wcScs5lMI2OzBB4PVfdejAPxmnAOB0spkyB5OFXgV2rVKr1UvlxaZWdSu3XX1FeFHsUk+pZlloxikyVV1sTqt/t/zd+nebibfwVt7GmRWTwPMWq00WJQk4HC+LFglEDjSTtDN2G5EsbrhFOI7meWgeF+EtbnjKVCgIcqHIiZ1kVdKEZMtnSTCxyBFsRhibk05LBC2UuOlT+WP8cZ7bzmO+E+OkeaqlSzpu4bZbsIWmVbt0TCIbpDaJSD+yv/mWhiIBCPDnBzQJBtSTJwHpG4InG080qCfhj4qvBIivLf38LGaY5Kiv36K+8ILthRe2CFoMzHxC2jxjQroQjGJGebObOng7J0tHsqdArv6TER5es7ol8T98QntlsZPrn7Qsl2WEAU9lCybQn9rGRmi2KgHYGgOZGeOinCvKxctEiSO1vyVN7z3Zfc+ut/F/3zWmOFwrHDk7Bj+bGUVm4x2Hf3jzTUAPi7KfCGtBrhfgKorJB+aTpQUEmPqnHWazSCXcp8m5FIqgGut8tApdUdCGbijYju4WnuQesR7mOqwvWV9HJwr+XuCwOQscBQVchVjuqAhHisZaU+6LPKnAYmFZwTXOm5x3c3fZ7g7vxg+T3Y43bC7kRkHVrQZ5qkLsK69ngiRSXq/aYXghV6GFCxXyJjVuvxDFI8Dxg0U+ouOlz2CHPsXC5LqS8sUjMgaqYUlrSrbQPsuBwvlzqLA9DRJ2EmWEk4EtTjp5+iQTGw4fFbRwq2U1CNsEXhNKKoB1vF1VLXyok6vpWM6bLC4A9i23cBrDg6muBaZXC9ONfSIfKy4BRucsqa3hfVKcsjjicTspk+M7nr8g88uPTmbeumcPHvn8u7hy6HO1z//o8Q/nrPh480MfENL/y3O/wJf97iM8a+/7r/bdefuDmS9veybzWfuzlKfdDxxmNnAYO6yLxtOckSI8Ug4XFAJyO9RCO5J9w9VsJsdPfHlyyAeyxkLlS7KITowJFyWpRDVFqCpjUqicNflZDqVfRrOmYFGBakyrquh6k6oJoKQtpUaYPhTRlaEzTFgzQFeEznYwQu3M/qODqUKUThWmDrUUDp3jz6k6LQ3dcG3Qky2adAKFuZEpzSOvSg7kQpIsyoLMy7wY8Af9RDQrFsWqcKLH6/a6vJwY4nxR7LTBxS+Ho9irOKIoQbWlCvhsBDV2L1I7udqO5UjGBQDsW85IBZYPlq3WEa3xeX1ep8dNbCRWGq0ZOGjgwAF18bJ4LHo//ubJ2dc1X3H55KtvO7opsxfX3/ZI/9GTfrJ88tOZ14QjnoKJl2SOvfBYJvP4vJqnB/Yf/dmjH/+jopBq9A/DihXDipnxGE0/tgI6e12eOp4rNCk7ldcVogiEmGUYWa+Fk/MWTjYW7kBKjkiS2Jn9gk00AF8lzXSmRZVOM6TfT3ooiouYzrbY0mbFVmI2CMRsrKRZI5BDKXNE12dBvYVO/U8LmTSzlZR1+s9bT6+2npaIFUesU62t1lVWfmizH7TXnCKbW98WLadBZUmm7te3VLFFxsDMOAXWJWldznEIA0OTBcKWqLGHm9U6YKUgxOD68PPk7PPPd4vCke5HyeyzY8j+7kkwmudg4jfCnHN4KrMJiDF+zgCIpE8EB8Bwqy4ov8lNODJgKCpYNKTnAMgVPaetByuqwwdT0FWZUPV+/+ALmJq/v7ZOi/tWa3F5Hy2OlWpxQaEW+4OaWVBhVesiwnZhj8BxEeA5t6KdKI34KpREU8HUOYUEZwQytyOOFWdLD8qhtmZ/M9bsC2PNziRVTUyyNXuQf7M5j+BGzmna1waysKV59ZqG7pyQocYGY385CbMfyIXo9hed/eeep/IC5nkHMMUKZq0+zHgRSB7AagHJESpNyWMHJJKbcc5APU7nzbYU9x/zjjPf4R3i9/GOj1s0lkHNCMQZlM66nsMcz47nye+g/39/mlLnnQiJdhiBymmYIleYtcUmABym66vZI4cpCWoEINusDqbqwCwDAOvwRbKcQhYnvS3YLZwJrFzZZLYh2UQUs0jHZ1bpmMwwpoO0lFmFwXxsmJD/NEb+rTZyahEdZRdYi64u9fXXuxxOX30ioa0LCmmWWrJIYgsrsivHrjy7CuwqU+4QoxBhYo8T6SwSW49eprCrZKhtMp3gIgrFwe6NKM46O7sIIOWwzYxkmEyFDpzWxgBWyTMkhZxIJamkFbGGkGgsF6sWYTqW01WnGUtvbGjQBtOSh2VIN2g3IGKX3SQk82stmy0vw1RaxlvG27k+fKm10tbEXcyvta6zbbHKZiLI9daBtilkAjdKSsqTrCNsyp3kLm6HtEPezT0miU5it9mqBeIWBCKDuVotyADKlun26TgJiqAsm0AdtlptNpWuU6uzzUmcR8huIOX++4SI3In7H7CYFENl1vXipCmlRJKWDWZsPgLDtmEzlCWdENkxGq7kGXOI8WwLZbIoYl+lYrWTpA5FhFahTQDqJbv3OyiPDIA+ebqlwd9NEZhpk5AK5iVPtFD8bWhQ875B0DmplrnlWqZkQtS/GuWUyaafIQswJTn7JtgkbzIlckLaAvfKexRNKof+udem0JvACGjyDwej9bbKaL21E8BB9baaQQw80Bdy+9Zr69QM2iha3UJNQUTXy2qmPNomW2Ri19VO+tU4BUhg38BBOAqsGsew405cgi+u9gYG4LlYeCaT2pNpEo6c++q2cVPv4b49O4Z/9dwA/v1zlCPcCzKzCKjSRAijSs5vmD1y9lNtUvelnGZDaMl+ixf0fqqb6sDpZMzhGDFLtrArWAcRSQY7QSYSx8kmnhCTJPMciNtzOXHL5Ylbzsg/ADxKFAWDtQo5cStotA5SMBlkBNcSMeOIeaq51bzK3GYWzLLJ4HemnB0V0eSsFbr8b/ieLmr574panf0pQ/M4eaIl0cDwBYyS82UrWB6Ymh48QxaNb1Af3fuHLI46OQIXWMdmylmoogSY0CEnx9TDFHYdHFMvJ2s0sKZeKg4wn97BAIA1GkhzY5qnzxyrl2xuCC6aPn3QBWCBBhYA6KHgP/d6dCwyHFiM6jVEsnBgvUiATHy+wK/XuDam4h477n2JI0de+jYDWLOR3wAY03aujfpswVJ5T/gDsqEQnsnk0ISgHbtVtzvkC4V4XuXdZp85xD/uO2h70cb5fP4QiRQkHVNcU3zJYJPQZLpIneWY65rtm+tPBS8K3eS7i6iBQo5zFppNnl46mScPSTyGTnYw5YlHJCz93DC04aYEuEiXVzKEMQCnmDSTqEeLrqtkuNUkuuCMKUvBtgJcYDdEpt1AIXvOnLHHKebIOetdy3elkJjHdwPhnHXTY9+05JBlku75aTxJ3Ylg4oCdE9prdjLDxmziAsyw4bicZuxSUbSGp3oxs2sGqai2BjnqCJg1aD7eige+isc82ZE5+NyxzJHdL+OCt/6EQ1d9dttvMm+RX+MV+L7nM4+8ezyz88DLePbPM//IHMN1OLQfm3+U+UizaPhuoHUr8uN+bPUKFzqWuckEdYL7YvViN2+2FAIjRz4/tXCQ7Oy1IM68BXEa3rP9KWdcfgaWh6VA0ZAVugSyqgvF02D8wzzJwUgQw1/QbzVm3GrMuDWnpFj/rZKiE6tFJ9azBrGeMog1kK+rGMrKZHW1tiT6clDFBTRcTRFuQWCr2CygwRxabrPBgmN/vrmS04TBYikEw5JEow6Ac8YK6XP7pOW3N3+ReSWzFV/z7P0tE/vfkLlROGJzLjy44plMd/dTHN62Yc71Hiu1KZuytwhfAP14UDnh2ArcMTf+QJwE/IM8xBzmi/hYKOwucsfECqGvLxEfKjT4hsQnChN94+MtwqxYU3ylcA13tbCN2ybcge7mHkZPcm+gN7wfoY98H/mDYSGBKoShAt8i3O7fEX8jzpd6K+J13vr4eP/48Oii0bEJ8ZTc5JjlmR2eXZAquihyUfESYZFnWfya+C3hW+J/8r8bD5j92AOyaF+oHib2D8nqUD3vd/srhCECTzhvOSeVx/1eAYlRzhUUCE0goaSw0M4RuaRQMgV7IU0wD2mCOZNYSQXjLj9dXZdBtC4mUiwMOMWI1mUQrSuHRq4LSTBS0VZBKqIGGkUNNIrmCDcaBwFhztGr2U9rMzN6NQf69NBrD7lOOq3hi0GtzC/hrKfOJFCfkKNWfUV9pUV3VKA1VCivXhNKegSEJLs/Hi8pLPd6S+wkyXFSCaNtyWQvZLRt12m7VtssqKIXYLH0AmhV6vVJ8TIxz4VBSR9yB+o076AMYFC8jP96y5r6++976FcvZZ7dk8ajX6F84LLuj3eveBLI/+3MBzj07uI5Fy+8ryWxpf6ai7vwnHfexguO/CLzyDsHMsdvrmq5F9fvw8qPMm9loHDmN2VDAxQfd4H0fxo4gh8Vkw0MH6NOsw07B4ZnFy2SVxTxJradIrOrxK4lIKTYQlnp+lDAYgBmA3B2Zj/Y7wzWQXxqf3FZnYOmC8rqVD226zHc/+P+grh2H8qrekzvJ8cDUGq7MHxhZIZ5TnhFeI1pne0q+yZlq/0n1sftnfZPbZ/YVeDlEYfd7XDYHXaLyRki0aBXEZ0O1WoR/CaT1xcMFPp+nu3K88t0aVa7z4eixYzP+QETbXJhL7wtzMPbwh6PQGHcdq9IMVX3CGicibkCAswpINIpElsiJatK2kq4kmK/gad+A0/9OXbn/0/ZnfgvdZPY0N056cP43aR8yz9wwq/7dqgiq3O9RKIbEvVVTrrL5avfYuuXEHL7f3kfpNutSUVO2uvt6hCHcwhVIfBqpsPaQBMJBuodoKs4IdiS4Xq12A2hCEJO+WgO7TMFfEAISfPyQABhO2gduJgRhs5fNV9Dvc5ivV6PW5S8Pq/PFeP6EeCwMcZtKbuNRXeR9hdeu/rXv59UPmti9vTzsy67qG90wl/wrk07Jv/koUy1cGTKy1fd+2ZBacnkKzOrcf8btg02S91XcrWDrhq7eDPM9JzsJ/xfhd+jam442zFwoLK8XaB4HlxqwLBeqr6CAQMIAjC8iJWzgo5soIklDzbnweE8OGTAYJv7dYQgBoA1IFmems/N5y/nruD50rIBXH14JDdemlgwumhUyZiyGVyzNKfgovIbXbYY3QugyFNiAKUGEDeAMgOIMbzSCmtAqQHEDaCMejHGUKjcGi8hJVxZ6UB7XWxU6eiq2ZFUbFbpcvNS6zLbIvdC/1Xmq61X269Vryy5vHQz126+0dpuv1ndVHJ96e3WHfYdnkLdbO4bjTtD8aAp3gfHEeoTdPI1/eNoIbAea9+rQjeGSKjUa+1bWFaKSwWvkHOFCoV9TYWFXo6pTglAkRbKMbWoBVObtuqk9g0l+5aW2KxmIRouKAzJkshzRMSlJcWQJwqFob7BJKWhW0H3OOlFfZmHmxkUKo7gqbgVr8LbsYg7cTpp6VsYcblGzKINC5SkrTRFuwIjuNAE/OF03pZSD38wGchyMGWKoz64D1U7bTYyqw8dDyPhPsGaqOU7EkvbSDwIAsuJ405q+dCnnAYHcOb2XpwzKaMI9J9/MaP2lkknqLBSdW+6IcmYSz0Bf2p3S+IEvZymMwVETtV7DGAzmK50z9v44PwEo/jQIRzCfUPevgJz6fQ1ewuZNuTljM1GIFdtq7GQ1NboTtuSsnh8QN3AgbVAwLoP3uP2eXkfo2cq3uJzDlnnvnztyidmTJ0zNLN82pJLr/vqxw99s1k4Yn/68fSu+sH47aa2qzefu++lzN/vwm+pl9180YjLR42+NOablxj00MKVv1iw5LWNtptu2XjxlNraZeVDD6y98tjlV3xG/UrVoNUeoTuB2McsWNFguZIBiIYHUvq3HkjR8EBK/8YDCfxbIIWAbIgdCTd1ksv3R7SNrUNiBJMqDnMAH8C6z/fTpJnxeVln8l8Z/rYPDG7/rcHdM5onh9YoH7wr3/UGSw8G54mWjyk/1/TY3u7DDiSLHGErxjH+WkPdA1FHdEDUE3UQV6aAb8+EBOvTT5/9O507E8j/MTB3ChnJ5k6o1GdKNJgSD4DO7OReHvOzORj1MsbyPelf5ZidgfPEllsBU/bzHL+VDbgjpbit1p/r9X5sZOISfTeEGIASNPwUtJi+i4tLDJ8zAHkuxaRTAMWe2TQKEkyygIlQ9d5R9b2jjtpapNm/9JhCSZWAK1A5V6pUWaotrZYb5RtN2y1dllMWc8Qy1UJ4YpaJfnTDhC1m5vFsbGSbjvC0YjJFZMEtywKCZSeCmxDBBE19FlGQbFoo44VEZq7k8vqpMm6Tt8uQxjhpJcny+rkE30oeIITQHEdEmCqQaqFV2C50CacEQegkW/ebW3drTqzV9OQKDX5VO8cTDJz0a2d59L1QuhWqOancPY6ofciudGb/e5/JiWkku6lndfDgwbrbqhxKD5xG/VWIndplJiuYR815GJbPKg4KSJYNFwLVZqO4VnND1WIyvPvl3+Fr+xUV98XbXux+Xjhy7q22VevW8X3OjgHmf2H2Uz7MD0PlaBBXzPTOSpPVVBGwBiv6WCsq6q0DPYNCQyrGV7RYWyqWWpdUtFa3Wzf3udt7T/Bxq6fc2Boto3QVoNCjgSfKDwaeKX8hcKz8d573yuVRXlxI2a+DEpXT2bMzPoBy9ikUKvIV+ROVFXX1fH3leH5cZUpuTiySlyTWWrZYXrF8Y/0m4RhUZ8O8WlVS56uJuv1z+6zsQ/qEq2yNtlttD9iyNuEB2x7blzbO9oxxROBQymahFG6jMoASvI12wq2q4iwbO8djE+k5H1tcR2Obn2HsgZTNFuZ8neSJ/X6NBKl+WKkoI2b573CHwxLKjQWNLlNqwpy5zzx1HgKZlO8F/WceTX6rm+TmFBIZhymNllARoysMf9OcayU8ZUOQPgETyoDTbGYBeJdyLIBYh0sM/lTSSS5O2sqSKK7GI/Hq+J64UE8tAiq5QJF4UwOeAZag+wfi/euZJ64wVldd31VPdtbjeh80c4hW7pMNT6+v1F9cZZwVqzJkZZXGN5KOVFXJc+IxkRSJjSIR3QaXcusPiHo9/VKijanmFqaX+5lObqEjE5nPQLQx/ZydpRL7D+7ZMqPHvzQZmkioQFj0RstJQ69mPr9E4qOPqD5yAkQsJE8wxbXn4dWahlLPtBMqZ5mApQcK0OrQIcQlEhaLrU8n15e6GcJlClfDYM7s9/nCbnaiB5aZsuyqWpC09FSPZihSM5HKUCZhB7HvgLoyKmOlsmGEiVyvx+P2+mJxTpRsRDvgA4W4hgWHl+55duzl4wYse+dSXDt664arCtL+y16/cesTU1WTr/jZsO+SF1bOqVmxZPGD8YLrZ415ctPkjZPdNmuwpFS5rO8Fzav9q2+akJx3Yb91p85tumAwfq88rJZPqhrXevGUC35I7cfNQMfUe6yiAuJkdHwNFiz2EmGAMFoQGovSRaSoqDhcGx4RXlW0vUgc4mrwNgQneicGW+QWa5O9xfuD4FJ5uXWx/TLvZcGuorct7/jeCXzg+pvvb4EPC94vyhYFIkKVvcpdLTTak8JE+1RhkfBOwdf8WdWiemy8SFAoLEpY8YRtZj9QQ48K78/T1vyGJEoWp/wlr5uxak6aW81tZl7blTczmjX79X2jM4Y1qzkimFlLicBMjyIyNwJT7Cgqma/ADqIjoUNDwoMpRy1yGm5D3mq4DXnNz8xkey1nYDinH4sMpLhSQrowaKM7cRqfwnwRbsRTMIepQkCJFoBvkwWUvDDDbsz2G7GTYjdm2I3pLhAlK1bUS7uM/bS/2E1bxYHCsYPyzUWGuGsaJlEfNssDtZL5s/MIQnOHADoyEYmY5wMQugMrqs2jHU0z82KIHU0TJXYwtjFRbygeMcBg0AoLiUdFseIyDpTCWuY7A+zFfR/rWLP3kj2rk5mvfvbsMlI367a1Tz1y5dqnhCPdX9865dZfX575MvPmfXjHc7NuOvrq6y8eBX1lavZT7iTIjSCZR7HtWTDnTxnCXzGOcJkMwG4AqgHQJcrXC+psG+zYTtnnVLQKcYh3hs2SP8ybsc0jyXSuJTbXEjsHKal0riVG9Uf/8CIzTtQXWmpoYKccTRZcFB7pGumb4Zrha3W1+u4h93B3Wx9WHw5aZGtAWUqWcEuFKy2rrG3WRy0HTAeVAxaL17LZ8iHhbMVz7SvtG+ycHYMYSMar2T50K3RrO9qJ3kenQFmz282op49h6PpwJQ/N7Tk0t6fsJTaZyZviEGK7ZafzZMMXuWKoxJwowhj0FZy0JTQzNKnjM07qs4YHalw4AlkMz5IMycYx1Aoy1Bof9hjM22Ogtkdn3tGUp+SYhIukRolINuaPV2gFEpPKdII1jduik4/UP1T3Qk7t1dAw73DDGv31ksOgmIOaAnfXnKaeuzVsPYApA+tUW07AH7N2AGGbc4d46dkiJ0gIJ+9nGMubqS8eWK9Zyh2mzDtbJFIPXJ2T2jU5s4YiMNewt+DLn76T+ceaz258+t2iPYENs7c+8fANS2/Bm3yHjuECrDyFycY9u0LLlv/y928+/1/AKccA5h4HTukATulinHK9QnhrqbXOOsoqDHAPCF9EZirT3TPCl5IFwkLTfHdruKvoD8IbrvcCH7k+cn/p+2vgI8YRvUVFiSBloxOClKdK/UAn7ucdQgZYJ5DR1jHu8eGLlJT1UutH4ifes/i0TcUeUL9VO3BKs+RAwCpB5gBC5LPK3DlIfy1Gz/To7ajUYe/FVe3fi24lKXupqr7uwKoj6Wh1tDmAr1JS0birw0nZl4NpMJTPOkRKWA7GbR1sm4/ihMNGccJh7HQ7jB1txzNG74CxXuE0sMxpYJlTw7KDKWeJZHhoqKeSYt7Q1HPSMem4lJV4in1TJE4qZCTMFAOpUCNthpFMOZOCDCMDhXVT8/gkNZKZgZ1jjSyzgdnfwC8bTmhssoGGHkZJd29DeznKJJMKyHlssyHFrHFKs2TXOGVjrbOebfxEB1ARDzJewzbgm9jdwyu5wQtf2PDGlUv/cH3rjqr93ZGnrlz7yO5r1u3afP+2cw89gLn2acOJ7ewY4nzt17948Z3XXqCyeQLI5kLglR7AOC/DOF8RCnvILK5FaDHNMi/klgkrTQvNsodqf2yqAUhOp1BBmF7LnG8LZ91ngnx/55BA//Bw56Tg8PA055zA9PA854rgvPA6cZ3nDDnjV5EX260+31Rvq3eVl/OG7dvVnSpRVT4UViR0hDxBadWQYl1JttQq8Jw7XMDH6CG6U//iEF1um8mXtIJKymxlq7ZnIFLgc4YsVlqpqayiLm3F1mARPeVTGq+j8SGqdhbhIu8zhkJ8MOWtzcmDnuN2siGn1RIpWVJRZ+CLgWY6m0omUvQgSA6FwgyFNKYWZsjDDmhRFOotalsSzDV7AvIAnc4wv8uk3LlwuKGdDG/oXt2gn4bWX0CgSuSaULIAMRHVBtJAqNaBLvQ6EkEgqF6KY9blKlKrVeLiVIV36exNCTH2pkjG0cm5P2ipSjhqq1pW57E4bZfRLUXp8fGBOBpn6iX3gyOVXxz+LPMldr/7Brbhbz9V9m2av637HTLNMjh14/rHccr3UAcuAh3Fgsszf858o0b2HFmM79g8cvGj1LvgAjRsE36PfPgH2m6j24TtgapAdSAZWBW4x3Kv9XGrHLSWW9OBrgAfoItYFCyqK5CtnMUeVrCHJNwunhOR8oAbu7MubbEOpVxJvuf4qcEQfPo5STOYEjziyO2YHQHY339wHTsKkAgX1W1HOJCkLCiQtAILQm7mkilnLpliypRQpe6M+Up3vbt11/vnTK9iB4nYuyad2bOHmDX2kD/wLD6CougMVpA/kTiTzyOoK/50g9rAGMXJxMkW6rNpoMemTtbTN0xGXgWmoUM0SaIMVo1qcoaQQ7SHcAInKjZuxAlgIWtCB5DidVGnTt+O5Zyo2Jn3XMH6tlKNdv4jNqB2QN0g6oEDQUXllKfWE3Pse+ABV/D6tRPnhAbXTB917Bh397bVy+rGXOS8TxnTesm2bxdRPjEiM437HPgEfTelD1unVrNZcFeaS90TzaPdoqkgUFBpjrsrY/Xmge4LzWPcKanJvNh8VvnaY+sXqywbFhtWNrFse+XOSmlgdGCfxsox5jHR0X1mRmf2WSLNj87v01rZVvlO2afRL2Jfljl8XtHTSfZ2lIddEtN01AiqZnpOG0NoMHXJtUlVCIftyujisEXxempLaxXgET18QQG456C/ziNACimlfv/rPqz6kr5WX5uPr4RVJLMqmRTyMSnky0khH5NCPi+7R994YVKIlhJpWpNCPu2cGAAgMM/m8aizepuWlO8KOy5FxUUGQhYZCFmkI6QvVVTynP2Y/bg9a+eL7I32KaDjGWzFrkuqfik7Yyv2IEU7ezHtlT1Me2RnksnOJJM9kKi8IkqFU2JyD2dZrXt/1Xz5xAQU4zhnGoDFnNDfPjnR2KCfRFgN2hAQqZdDyBUWmCYPM26h75YcWg6zLnpc5Yx3uDSrVFPrgUcBBwGU89Hzu8zOLNPeNKFyyzeg1sH8vXFXnvBatMdcM/KKa7f6bXht+k+nLvvtzc9e/ejCP+38+ed3PXrt+t1PX71ud1NwWmnNgtmD0jfhhvfuxHjbnW3fLv3nsXVPchW/7XrutV+++EvKT7YgxNFfiXLjV7TzvV6gb4+vjqMuHWbZl/IDuNHcESvPsjy+QJ1Pdlgcbk7AyB4WJLdZsfTSZyx5WGUxdJtkWcpSakrWDqzLmnCXCXuZMuNNsqPb5ezqpshjom4UBzvEzYw7U5CWM9FdFIZMJub3MVE3PjMW6bFvlj5zkJ0LnOyljMlXN7Au7T3lJau8O71pb9bLe4nbQCK3gShuA7/cpdrRJhW6d4q+FBgBonkf8ew4hL6VeDbpY9yMN04R5x1wOqsZhogw9kWYOTrZM3aqP1/HXp0wjhCvTpzujVX6JnmDZhTWY6fGx2yiTSq1iZYQtsrAwRA9d7QRJegLdKGDZgUpnACcq7pjuUDfKtGMROOQK9s38DhiDoYuosexpeO6rrU/ndBx5bKpNzeAOfjV7S0P39s9l+zacs2MW67tfga41lZAiAZ67hhJRNFOHiu5U6+Geyj3Dg4AwwO6M//bPIdZDyzkwbwBd6SI2bDTDUA0AAmAXKXdedZVDyzkwbwBQ6W8vrqcAYgGIAGQ11NrbtuhBxbyYD7n5huUMg2k6zzFtN2005Q2dZmOm06ZJGQqMq0ytZke0LPeN2VNSpEJDD6JJ5xJ5J7Jduk1VKS46zASBZFXRKlUQPwD/E4+zXfx7/NiF3+KJ4iP8K9Diuc1PwOZxedQjWeoxiu0CzwTmrwhNHljR4OnXgmFoh0/WT4f4dY0sFcvAa0S2js87HUw3LImf4eq9yd0iFcEkb4sxt7GZejE3hYDlNra0dHB//XYsXMePn7uHSCT6wFfBrFz6hu/iy25jZ7vwY3zcCBX9HtW/LyVzav1O+t4KCWw5WIn0gcN1k6m1w3Q4ur+WlysnVxPlgKPswtFwgPCcYGfApdTAlckrBLahKzAw+gVwmlMgdbEmIMHtIEHEO5Cp4BU8jjEP3s4REEeh2DLpus6sq7oGLtQ2ayxL6UvHprM9148unrURaqfZmep76zVfqRodK/T/PUd7GC7xtXFOOgfMW4l25W/HbnymLLa69RZD+zIgwvyZjicB4fy4GAeXJD3bmA4Dw7lwcE82JK38WXNg215sD0PduWpJ2oe7MyDHXmwK08g5QsnZx7syIOt+sEo2TghBSLlj8lJZmtdKX+CP2H6i++jiPCGcCZCfHIkZvKHIiaOixWGRQ/VKCQsxoIBVXm9FG8v3VlKSn2+oK10uwM7eGans3NZDrZDwOx0N3sFmO60+CiaOAiz1i3MWmd7Aw7jIF6Pzd6JW/b75e8cfdGdodaUv3R7CIdYS6FcSyHWUoge8nfQlkJMZIWYrwhyM5oQDVlomyFjPyIETR1EpDZmNBIzRGdM17/cqVgpfh1h6kYjRagRTQGhQavTKIC9LIBU41whXL26pPzW0PlPJ91MZGrozxQNFCgp7cTr9kfH9lbGNIcq07vy3KzsFat8r2v35NELR328eg2i5gBwvUl0H8/h006c6QLV4nbF3RZHCDutHkOgGhbhv2SJSUVVgiBtsWj2gLg9uNwsmTixEMB9y0VNkauhp24MOvSwTXsfvWgCmBkP+aJ4V82jS9f+pOi6X9//xP7YnGGrftzRtGDixiF8/I7Jcy9pOrLnYHcZuW/53CF3PNz9E7Jv3bqpd9/W/bahrX0MdO3FHzOrwiVwoovsVjvVD7lPXKe4My6Rpyc3iwFvr1Lxnerr/vf9WT8fkd02t9cJ2hoWvVbFarPYeqlstjzKt+VUtnDKVuJnGpqfaWtmpqeZmZ5mzulpZsbvzMWsBHPiMwc/09Mg/Y3u1Fd0b/8Z7dihmamCZgx/5sl+yl+DVGfzn/KTVf6d/rS/y8/7OVLr8Rq45zWw0Wvob17Goc90OBz66zbfq6op56lqjjxVjdf5cVfSeb7qN9nHXjXPfTTl7TRT33rdSGhnHNnpgQZ6zDGnv3lFh0mRFUnhRDXuEG0hbFecOtrR9/lWgy4HJoPJqngBuTjByVBKMGyDHDrp+1F5uLTlwSvfa901VVU6KpaNu/wxPv6TPaNXTaq5tvtysvmyFcNvf637WRBSo7Kf8mWALVYUwFmKLwc9fv3w56eMp9gpB1pIoQC74ZSUgGWsOE5Oic3ypeISWa5ThziHeAf4R6sTnBO8o/1zhDmm6WqLs8U73b9CWGFaoK5wrvAu8P8Qe0yiYL2YmynMVC62LOcWCgsVMHl8YV5yAId097I13XkeT3fO1lRT7pIQsytDDN2k3I9TSMyvqW8VGFtIDNAPoJ9iHgT9kDoDupK2ktK6alCMJVWKSJyU2z6lzvDjwCnZqQHqygLYZiCZzcAtm+5oHw40gCw26s1wMq7Gdi1QmCEV81HpzIsxb+RlaJWEpilXJMhwxKOen/XQXauof5C6s5jIb+mFSerqRMuZREtLb/wyTrxTFyg9QmiaIcwwXSJcYuJxSzN7EyG01+zQPKFm3sfMTF7KOwQ/CPAIaUeHUL4pOerhG3/1J+y95q83Hc+cPLxvy+Z9+zdt2UdcuOyWtZm/dB/963/hQmx97dXXfvurV38NFLIJIfIiYJUDS4wHDa1yYZXHMb6OH8nP4BfxV/CiySGbZJPV5TBZESdjM91PFJFiKt8uY7k44sIuUuww6NlhTL7DmCTHv7bHctrWP5OOPCIX2Xr0ki+aSaa9UiBrJplz7AvfZ5KdUFtOrzlBz6wA8dI33Zm2jNRXttjYm0kta3BL6BAVAMD3zZ3cwDy+n8/zNTeRBPS56cFhSxov/sGwESOG/sBdyMd3rR435LGysY2ta7r/QPl4Y/ZTbi/MYTVfyDTnnOstJ9cD9FDPIEYh5XnUkv8THfE8uDQPLsmDY3lwcR4czYMjOYa/PsUXu4uHmC40jSpJFS8sXm+6xXRDyaOuJyuf56wmX9Dvq55Q+aZPCJFZhKg1WPHPkeeY5ihzzHMsc6xL5aWmpcpS81LLUmtHvKPMTg+xlfQZWDJbaTYviC8ovyJ2RUlbyY+Uey23l/+k8o7qh5XHLQ+VPVy+P/6ruLfcULyKDSBmACUGUK4dhtbLUCBmACUGUEDf53EW1s+Wy0otCh+MxD28uV9BkLrFigOVbAsl0BiYEpgb2BM4FhDtgaLAysDxAF8UuDVAAj8DNPIAhjPvetJNi6v0fTsVv44JwiqmPyLQtd/trWNed9XmqMO435yC5QWkIOyReO2wBzPjPjZMtY+TLoqLfLifuSiIgyWBpMtfV0Mfr2GOU792pewl4KXoHIjQJwMR+lSAHawIMBc4vTvcxBYtQC7uORi2PyWVVEB9B8L1r1fgCto0rabCOFVdob0IIFLgczaTFc8Yi74/VRFkfYmWVdS11nTVkMaathpSQ7cSSpBf0+QY+US0ZSCzGEB7SIFDtJMRnVt6U5ESO2PTdjYQe4Q53ajYddOO2Nl7Qrr7TfvJjqQjZS8+jjDVIQkK9Nd9/C2rjRcIGPdLqBCvmWwcI0kkVlNPf576d5JuVULceHI1O0NCLSZ6XpNG2ikS/RAJyOVkWd/CmOCujDtUp+pSObHYGgkhU7kUwkJfuBS6IRm1xUKoOGa1yH2UEC4vMyligg+hIrWASnD6e08N2oUpjhWJjRs3ojyNlVrZLT0ZWFMkEcYF5ni8oB/PXIL9zIFg0FPAeLWn56CKgx5S0TZMtV+fYYdTyvqRAXUDB33nRCh86Us0zEXYuM9+4zXr1w0o/dGLd00ZPrjithnX/my2I225fMn6pV5vVeiG536SWvLitcfexheEl61ZOOqCmL+0ZvzGyWOvKi9KjLvmUv/0OdMHxcIFLqWkdvj6ObMfuOgp4FYl2a9IhXAX8uHLmDUZ6WW9mXsdYeyBpTxYzIMV+v54vM5Eca4EgLYARthiVTCHvKopYVdEb5gz29ViVIytPXuTBmN06i+yFqecpRacleTRptGt0iqpTdou8QhE/U4pLXVJr0sie3lNf4vtNKMDiZ4RZScQNKtKB/T32s4ynKZKRNLM1AlR1yU0ZUk6QpYiPx64d9F5hvrpE+pJ3bV34nQD27XsbqCHeh21teoreS8BhPZyXvYmC2cG+cbVJE3LsWK1OmyKqZPru2+5IlIUqK2pqdKFdqlP28CkWxGOQQ66/eCm+EDU4MSGS5ZX3nDD/gMHXInywl0PqMMWPkjmb8PS8szN27p/NKkySOXM9SBn3qf/FwAf0ry7Qbqp5/HVkYjLS18JOZUMON11CRcukV1eC3Z5zSCmHTD/qNbby0Lw5qlv3jwLwVvq91FVPsjsBB+zEHxOtg2QOxDnYzLal7MNfG59Q0D34fqY+emjtoGVTnnWh7t82Dc5SFHES82C4KkgWRXcGUwHs0GenvvQkMJiIIVF0xz2Ux9zTnEwYWSKmF43vW/iTYbiYMopDrp7WWFOZdo00xdMzC4wMReuaXKgl1NG99N+1wDQlAh2qqdBUx4Ymwnyqs1qtxJR+90PMAJ4SwhZZUcIUROgomIjamF8oQNUC87BTEvO7BUZGjQax320PewyQIJaB1C7lx0QB5hrXP/GDx6aopo7zI7Lpk27ZWjHvR3jVkwZcDm5vXv/zf3HTptx61ZSz/x0QerjByxQyHzthE/eKeK8w8Po+w8PE2/O7YbytAa555QQUXufAPIJMlJkEYu5g8El7PXjqkT++WB2PPjQAAGjYke9QqW21VFvAiO1TqYXAqJqP8RYjxXqjzEVRutQOVwUarmYikvrkBcukHoneV15vzoUgYvd0geVm+JKPRqgjENjlRROkWa5ybQILyJL5CWmdeiH+IfkKnmd6YfKFryFbOZulLbK7ab70J2m25Sn0IPKz9Ahaa/yCvqV8g56Q/kb+lA5h04rlTAcxY+8SjmKK4OUKSipmISk01snABrX6S9nmOipaJEquxTd7RSPFMTkHZ0L9tYdczPBrLBcIggWMz32+F4C5gbC0cTRBKrKHZ8epEiyXGpS3CaTgjhCQDN2YwwdUUCdlmVCsCgpJg5hocqCLcVyMpk0tZmIqROHDiSFNoEIACVNEZLExebPf0fR+WQw0N3S3RL0nzzRov9IWO51Jkd97/fy6dsN+pHLnk/+8WV6Ypmtdf6JZRc9seyqxfinmeU/P1Fa5E/87XDmMj7efcOlK2euJVsZVkYz07gvACuD5FdMB7b7c/szuVNPhulvAHbeOMjuNMw5arPpd60GYMmVz5lzBmA1AMoyjKpy1EAZSj4mFyhuO2fmwgG7UzSLrqTTHjEnLRE709jsgapE8L2g/2gwoNKIGRBMxwjtt4exnaL05eH6cnfKvkfhktakndgj5dV1Kr1IFpPTa/U7y8xlljLrQMtA6wDbXQ5zubPcNc7b7Gx2NXuWOJe4lniuEtdar3Jc7b7as8na7tjm3Oa60X2nstv8rPqM44j7c+UT99fWbvUbdzZc6HT5bbYRs3RM9LrM4RBvH2W/wc7ZA7lBaGaO9soPPWE/yG63qA6nE7Ar4Ha5Sp2KGxJ2i91hKTUroAArLnrU2yzSClBYDZOq8HNhEu4kjQfsMCNJdyeZmTQ3OpNOMtf5nJM4O/GIg3ZcjEaHFHqLzVkyYqm2TLFwUy1ZC4EFGLG/yg4zRBo7QpH1IFBhCrvpT5IBUtIfjfCrp08E6G9Jngz61ZMMAvw6qWEpxVCZnskXAEdtACAYyRab2tAgvzAhbZsxIe3vOZ//jPYOWfZTPHhwczP9BRL2qp07++eDg+qV4kH1NuAkBzz1Dv0Fu2bK2RHgO1jVvXw8CQTyO0B/lSWpLA/Y7YrCZpNhvWZhl2l7t4PoYX2DAsAaBP69wT20smGczxEXzJkVz7+XKC5KfNiRWT68pHp9qi5z6eNqeUlomb2AL+++68qN69eSZede3jOieQbKZrUTR8LzJI7GgUCX0M3o7wihUNJG3o+eipKogsYlCI4eJsWoD5UqLQOo3P8z/wSZIjyPOLRWk/s4+/J+X4Ay1S4a019FSMYB2IDbyHHMreQ2oA0ctxKtxGQKnkoISAyVI9wWzONO0roPeGQnmXEABfi3H2Pq+aTu092osbuF7Xy3MF8F/Xn5nh9ZddVyf970t3f5J7A/Q/9TEf0ZWvHjRd337Lxtrr3hazkks/908eCHZRU0/u19H3af3dN9qYrkaZA0QXms/SsMhKRhmclopIrO7jl7tYr0/NxHvVnUs+j/KdFDmryFfsBfjjwQxksF6IdCCjXhLWg22HXraeAKUJJ/Cq2Bsk9AejjER+izUH4WhOMQGiCkIAT1vEkQ5kGYQdNQ9jB9FupYReth8eVotlyEVgqpbDe0t0N4CS2CcD/AD/Ifot1iPVoB6Yfhued4hAbRMvDMDvEJdCfk3wv350Pe/RA3QXoXwHPguWodNkk3owCNIYiQ3wfquUkfbxn3CzSQvzz7FxhLM9R5IYTN0MZUiMdAmABlXBCPgLAFv4S24peyD8J9iNH10P4Wmg9hlB6Pg3o2wf1GeK4E0tcDHIR+iBDbIUQhlJOnUD1xo2chroLxX6SNG8JLaDEdc25M0H+9T98NWh8n5Ado82cQYqQ++xHEpry+nR+uPy+M52pRG8TLIIQgTCNH0Qp+IsIwX3cJHyGOBsA8Ok9/hnABvwBNhjSGfs4QOtDdNA1hEguXZ7v5e9FO7jQaDPeuFnfAOBbAfPeHcAZVkb+hvmIp2gD4NQrq3wjhfqjzU4YPC9BMaL8fxLX8RwyHNkPYBm19acwTnRtIb4R1nQ5tfUspAp6fAWEsrEsbhOW0P9B+FZ1zuu44lamHsiegzBwaIN/HAoyd4iR9hj4PdZXqePhgT4wehDI3w7y+DzEPwUP7YASGZ3qAey9CPQEIIoQCCP0gfAThQQjLIAyBMAFCObSNoF2O4SvgDMVNhh+AG8JLMIfQN4az2hjuZ+up0cwuvS7aTlR8Ci3TQ5TWSemF4iz0Za9RN6UpijNGzPB7GcP7L+g4KU7lYqA9/q9oLO0Do0HALSOmdAd9pvSwg8xCW1n8FLqe4iztnxHTeaG4xuYEaEKPG/LGWs1oBGIOoZiO69cbsTEXuXgxehjqbBUvAZ6yE43jr0DjuNvQJfwpNIrrg/oJ1ZAH44GyafJXNF3uQrWwllMgfdd58Z00SG/gpUIXjPNJmM830H0wp6v5N0gx/wYWhCeznwkIvyI8Sa5j8Hfi8wPu0u7RmIb8e/+3+f+bQN4UngSe+WT2c+GNbBbGczulCemvuBpCxIghfx+ENggVcgLfKS/DndIspIoInYawkk+iIUISDeK7YH08wOeBFiB/lvAX9Bx3M6z1G9m3cRtqI1CH5EHzyA7gadAWeRNdTwOtH+JVeXjUC+fOxyUjNvD1/JjyfB2niiAWgf5+o4cTejgD4WvAowmAkwEqGyh/ZvIBeDSEzTq+Ls3h5yvoEYhvMvDzPDxdeh5+Ws7Hy/NjJluAvxt0Cm3daIyf8kfK4yiPpHyO8hmj/Plx3vPt5AnAY8qHj6LZOl0X6+FC6OMHOu0DH4b1viibFcdkHxM7srs5Z3a3WAPwHyEI2cdgLtblZGpTNqPL0z6GLNXykdmQo0ItWqHzs4cZv/kK/ZjJ0RTrn0ncgzYI52DdgQey/u7UaRDmE/q9jG+FOb8bbYNxBLgtQI+QD2EOnRO2Fgj5qVygMpG7A+aZyqKb0fXcn0BfoM/WIgeTF43oIuj7KywPZCqNaZ5wEXpQ/Cuq4WcBr+1CC+ha0XHQ/tC1l69EVtkDfOIN1J9/HMp4kALldrI5SKLHGF7QZ5chROdCmo8kwNnJUIbWt4s9k0ROfT4eZnPBngddhOIwnQuoU/Sg6Uyf+Ct6QJiFLgIa2iW1oV1gqiKgi91QxyPw3IW0L/BckMnrO9DFQF9bgTdtBZ6DGP7Pzp7jnoTxrAO+DoFrgzl6EvmFNpjDZWzso3iNx26h9MM9geIUR8Q7gA9TfeIO1M4n0GhxGboZ8m4WgE9CuzdB3g1Avwmg3Rvh+SKdbyNo+0bIp882Ul2G6giUXqQkcoltTA9ArA9UT4H2uc/QLu5CtBXweLh8B8zDJtQX/Uef7FP6/2Oj/yfgN5yKroV4EKlFv4MWzABTGXqY34iW8ClUw/UH2nWgvvxvgVa/QfdwdjSX/zW6h+9E22iad6FyLg3j7wDdkuYfQ1NpPvkdpO9Es/kGeH4ruoyfiy7n9gLu/QEp/CJYa3hOuAXwpASe/wrq1QP+EM3mUkBbmwH+BuQglGNtdGTH08CPQ33Zc3mB9dUI5/WZTIBRXQhrCv2lcK/+Ql9z/TT6+D39Y+Ok9cJztAx/D2qAeXoXQqkWZ6aRm9GTEHaSd9BIbhK6Cu/OHoFJHnNeGJef5gfg9RD68QPQIQgbAa6E+OcQ9mhp0N0GoD9B2AR1d0G8n9oFNJARaCCNIe9+CHdCeNW4lx9oO9+Xnx+EUPZIr/QBkDUQ8OnsERrOLw/zPBDaG8hfkD1CA+DihTSIG5BbWovcXBnkF8Jz56WFENDTAVTCoew//l2f/qcAn/5585jMH6OxHhB7/4Pwbl4cobEuG/7XffvfBlhfB4RqNr9fII+GQ8iF38y+BXEKv4kc3JWAgxAg3Q/SLmM+jXWC/B+x/PPWj4zIZuicn59/fvr8df13abIfzc0PBh7k8OF2NIwGvhHKQzg/Lb+ChtEg/gru/eq7af6xfxNmowrubtonwMGy76bFKaiMBlICfQ3SZ4DmIOTSx4BHQKBl2fNWNJYGSrs0kA6w1yDk7g9Ao2nomVc0kM4rd7d231gfY13OXx/oX3/+N2g4xGUQD4F4BsQXGnE+zZ5Pt+fnGbzk+8qcRxv9/1Wd/38KQDu/hvAShBf/v24LI8BVCCoE8V3QQxpBj3wD9JOL6enhbuAl31ZBeBT40EyI34I8kN6ZPhCsADsg71KI70Po3NcAr4H8N7SQJXwI7dT1ygDkHdSflfX6ZmjPn3sZobOnIezRnj/3BISlAP83BJDn596D+BcQ3wnlP4fnboD4ee1+91xIr4XwLKT/CunlEJoA3g6xB+JKCC4ITnh+Bw1UH/mOHfr/PP5+++M/jUFnmQ/9LKI+L4jXn29D/MexsZ7/Jj7f1jDW/9/FeT6D82JtHsBm+gD0vnS+7fM/2ThGDOuZyQ/8rGw36JQWqkdTXZbqz0x/1GNmvzE9FtpFyG3EVHem+ivVnan+CvEu5jMQWH9mUTuf9UuXG/m8FZ9G90NQIYT0eBmU+YaUZX8DvMcO+P012EYP0wBpwDG6/ca24I6B7LKDrHsO+O7XEB+FdAHEXxsyzeCt3+Gx/0am/b9O/9/KyP+FTK3Rw9zzwr/KN8JgPYz/P+ydeXwVRdb3T1Xv6SQ3hC1Aknuz3MsSZAkqsghJCAEBJcoaZABlGdlEDeqMM0JcEBdAFEUQBARBRZAQFAM4gzMoCm644EIQcFeCgsggGEi/v6rum4QriPM+z+d9/7kJ3z61dVd1dXXVOVXVQRA5Fv+3nG/s/r8ey88xRtcdp/+n/vA4H8bqRtkCI8fZLIjUS3+jB5zHfz4997/1R+od/7U/Qi8J+yP5TXxk2wvrM02paQ0R791/i7At1Bdrdf9wGSLf45r3zfOjjnrWBf1AC28MXQ5+Rp+RAjBGOQ/DP808RdnmWsqG/16AcdHpDsaIOMiL2Wwxvy3+N6jqO+FPUN+WaYd6jDlfe45st0I/l/oh6kz2g3NF+akt6AISwXowOfyshQ2JvA9wjLrCzlWHOf9R3wEROuB55UV0I1gLvw9+H/riBno99Ns59LSYj4eMgYxB/35l7Ryfc1q/TabpI+eWp1Jv9PPXq7vF3JfzqpzTqyafESvXUe7CGOoPz9PB31DMDRkBMV/ilHvzc6P0oxgHh2A8tMTYgXwHyzWhiaqYxz1Kjyg25XtzyA3Cc8lifkqMV3obSpDzGHXnkb+Ebjyc8kF31V2nGiTmX5Sv5VrNTDHvrlxBL3vrW6Uxq2mJ9TotMcdQgTldrjfNVxbTXQhbbMyhxXqWXF8ZFB5XxZh4lrk/MZfZtGZO07vnSJ1Alm849RPzMXXzDZ9nFmAsPSrnodx5zPPoNhjj7wdj3PUK5/jZ5zudt7x5z+u8Mf6WmjE/cp5+OF2pTIPdF56TXQX5EY1Q7wFeHUeWJZwX6uX0uXShsG4C9xA51+eu94g5qPp11uEKZD1/L5/XZeKZaXF4h33i+TubVHd9Lk/9C9JzaqIeBu7co1yfE3PDYAj/FOmX4B29Hu8K2qA6T67h3e2BtM4qed4kd91MHwC6o1zjcN5qsXYUhmbU4nylDqL7JXJezVnOGzibIG/ib8o1Rp+3FthEnUUD5Zxm7ZpgktpCzlu3UAcCPH/wV/gz5b17UtZVDs7z0WXyHsXcXBsixJlKF2+O1EtrvEQFRg7aq00F2gbKVKZAf3kFfV0ynl0fPFcf3aV8QanqJTRaqUdjBKzAeYdVQkJTF/CDCP8U8iH4xdrvxzQivK7mzk9TlWQndAXgreUKxgr4apbmrRMWee4U142wTrRREr7GalpVB6RzvgBV/BHknUdjeDnyWIayIB8lAe9fBDjnWo8WXj691CF4x86kRyQ4V8i2kSBcyGAkXnjTSBAuZF4kCM87SznOle5c5ThXeCgShIf+F8pxrutmRILwjN8pX99IEN73vyjHueo5MxKEZ/5OOa6IBOFXRJYD/RPs2OrtsE3XQH7ijfffQ/aDROurflXMY4Nxnv8TL91jAPavs1Bu8SMnzwN9niNs4JmQhwDsaufKWqp3QCa7c+ThfJx5oBUY7OYlzq3e4uYt8fKs3uCef3ot5BsR/kbgGzc/mbfoezdDZoDHvfu718u31C179bza9NXJ7j3K80prcRRwFc73Qw6opfpFF2cb5PNAzIu+7pVLuFO9+hD3/JK4Vm2/QL+qj6PPGEWEsbqBsdqV6t+on+xz3z1jrLpB9odf0jOyv3PQ93WlbD0OesgTlCf0BtGHa2Nl+ge0MRibCPoJdAWpLxwgTX2Nmmhf00j1espXNkIv7oX+FnnIdRlcW/TbQudQ7qPLgVyrlGtCYu3kLzQz5gWpvyQgTQP1W5R3IW2FzXavNpQYzteNNvDPxbj+JP1F+xvdZk6mrfoRsWZK4zBe+fWR1Em7k3qHbVt9MllaLPQCT5oLaLTRGuGrKaB+Q8nWTOh1u6gQddYxnHfN2r1BDRC+yp1fke0PnMoC/WSZUV7oYSps6wbhfQPan1AnY2R5rpBrTs+SChudtMMYuy+jFoYF3ast3Wsl0TL9OO5Dh56aJdflx3l1306sPxl/pvbaTAqFbXf9K9TzQIoJS7EeF54PgO72pHqd1BcT5bqWNx9QI8PXEOttJTRL7JWI1GvCelSNTuHNEdTMOYTvB1KMnzX378k6+oY7p/AK9NOGlCXW8eScSKT0yiTX8V5BW/L0WWMr9TEUyFU0Tr+HBmiXo17q0wBjGyUavShJ6GeGIfW6yWKM1k5CFx1AITybHgA2hTPBXRdzirx3XMy5fQyG42Uc4YWJuQo8c8dG+CDvXMQ7N7t2hkwj1s/u99w9PMa4acS5pz/z0q+tM1ez30XaIYG6eqq3l+qe38jatXvRfgrOK//gHJp4h8WeqrOs8UfKeZDXhf3Q8/bjHX0Y5waAHtajI6XqrvdPc6XUDYVc6ckVoq0JXS9SRu5fOdd+lt/RY933LCzP3PcSliM8GarZl3MeWXefTK10HM8f/0fn7rw5t6ZheZb9B+6cXK3Uf2M/1ZXymZDi6bFCf+8j1/nF3pzfoWYP151oA2cyWCD2E5wNHSOJwJh0Jp6ef070B3EeMP2ROD8LUOY7XJxFHpUeywUKgy0t/hPYhyJxfpacfX9dvv4E8gXmBS7GDhep//8OqAMyMJKaiVLqYiz8XaBlCIzDHg+EcRxBuN7D9RiuF9zbN7jv62rKHM7fu+7/9Dn+T5/L/9Z9/17Z6+Lt0QtLsXdPP2u58XwkP7vIvTSrqb6HjnrdAp4DOz3mCfCuNBV7lZSxaE9j5X7FmnN+0w5mwzYVeH5v/42uQ7Mzktz3QOz9caGis9WPMdZtf0Zzt57kvh1X9/oa9xHn7bEd5/V9mVYhPentk/WLvgXjrnjP26n/onFn6nzOANeedpZjnNSQvp42lQr4m84K7Tb0CUecN7Tp0AUA8rrbY4fHMlf3c9Z5+yB1uR94NT1bF9i2qQKRxh0nnZWevi302Jtcqr91w2vLFe57lRO4jypqIveX5kj7ulAdD5t+PDVRKhEPfUGsNynXUK4YM5SLoVuJPTd/8fbLirmHfZAucaiXQuWZOu+32F8j9tUAuSdHPKftGANE+u3y/LB930LOL01EP15Bfrn3B3FyTw+uIfY6Cb1IgUWh9Ue7uBJpr3TeUxZA9vY4Aa5HeQfTeH43XaCMgz28C/pOQ4TfCKbAnQTpA0VgMbiF2svwKrSTX5EeKCr8b0FqsO01hJ30mOUi4qW9vZHGQCceg+u56XbLc1x0GsP+LfMao+ThekjHYSkp0CiUhp5bR/wMnLfVtd/FvIJIL+PCaazaNMbtVBAzjgqUuyDbQo/IdTaz76mrOozq4ZnGgYvwrN/x7AdhN70LUFvOEvh38sh9AeF1ck9qa2m8dildoJ2GfrAX7eAAddWO0yKtO7XQCzGOraGb6u5cEvuJ5V7i3c474bnvMPpQami9Rr3wDEns3whL/pz404W430FyPJJ76RmsLXrOvabcP+2+a1LPNfLpLrzHBaC3t+97nLs+Bh0U757q7lNtoa6kFFyJuzZUNWrLEe/DAPQNNXOvQoo9baJtebqg0DHX8PeFXYuyNHU280JK9c692rVLHTFf/QgQc5aL66w/zRf8/17f4hHrUOdaLzrf3ozz7dX4jf+/XFOJ3Ltxvr0c5/VHrLmcb70MbVXoyAUYV7bqq53d8L8EHkL/+pRAJceR86OuvnafYuPdngob9DLK9OZExTxpKvqvVHWWnNO/x70e1UfflOfOzTunvO8c5HyqmJsTeqmSJL+DaOp91yCu38ebv5XfTdTM015Ig0RfK/pUOWaIvd2w09DfjBF9C99BHfgptw9iuyUk+iI5L5mHMuZJKd28lden5JHFO+Be5rkoPmeH7JPi3T5LIVyvXPRnGH/d/ipFaer2X/xDtw/i+5AmzDFwUKzVCHta2tTCNntWjk2/uv2k7AvFPCTc8nsU137yiXdQfAdzPn3J0y2fi5BbwvJ8eqF3znPeOb9N763dYCypL8fk16ml2NtbY3cRdZB7o7+R9kpvxAsdpFbPD8+3y+eEZ+Su7bNIu0Cs54hnG7bp3Xmz6g/ryJEucpwW9fgt9LIYjLv9ZB7o4+R6T7FzzCunsE+aoJ0+UGP7hW25sK1B1EVdQk8pf4Yu1E7sSZLj/ct17NunBHIPyQ5aKfcyQyLsbaTr7Y4bcgx5DewC74EfwUfuPNXpT8W3Q6JeauyhpWL/QPUmbS/qaztZZj9qom929RWlhG4S8+IC8V2BQH47FWa12Fcj90J18fYRCrs+35Poc+ky2c8Xy/WN4Uoi9INCtJMCuhT+9nBfqt4OXb25XKcarP5VfhMzSGmCeqj9vipbhKnTkK6t3N87QP0bDdJeownaBzRaO0GrrD60CnKxwqmLlut+P6HeRAXCToNeMZPHwF4rpiswPsRD95khyiLLg/QiTr63N2JMu48WqNsQ9y3kFGBiHGsL/xFawA7SAqUYzwlplJflvukF6iHI9oif7MkKhE1G/5CAdJ/RQ+p1ZOpF6HOmkKlOAvHk12FToZ8ZjmtcgnPay3y+xZi4jebKMpwNUaYpXpk82EHnGMo0B3Ij2BMuSySyHHUR5Yi8dl2+9coTkZ9A1EVdRL2oR6kN8p8P/gE+RJm6gZlajzPrqy6irDX858xyyzoMI+oyElG3YeK9ej4Lot7rIu97Uu1zqAF1IJ6JfBZeG1CeR97CLe5bpDnillG0AdlGhhEPP3+0yX6y3N/I8i5QgzRBlg35aAXoC/DsURcizVU113Tb0xx5nkiHOPkMRdlEPa+jlrIMr8u21UfkK+JFferHyKdvRJo9yKMR0oymDJm3uPY9bvnkuePRh+Fa+kDE+zFWfY0wQSM3Tpbfu6+asovnL8qOa2pxbtmhSy7AO9pPb4FrpSL936FXijYyCGynAn2dfFaJSgYtQH+QXvd7LdDYCxPfhl0GWoEOnl/IdPke/1HE+/5HOSH7hLosPh+iP4ggOzJMbeSsqesX/Qe4go+HXCndxvmuI/oo0T+dD4xjT4f7r8g8RF8mgA4QX9Ov1WUZDalT/7LuxV5o9Qd6QqDb0Gl20wztS5rBQ+jXQ7huiFqDVDAatAPNQIpHSy8u5PlN0CJ2PhXEx4oxwNkc/76UQvfGG+XAjnEWnU8HjtT1wjpgZDroidvYR85IyO8hZ5xrr8u5/JF7aSL3xJyvXL/RSSP3Nb3gHNDIOaDOd75Tv3K+M4ZDJ9xD2UY8ZH3qZL8k16Jak/hrtEQTQbGQkeX8o/v+/+h9i32CUqd427W5hB0v1wzWePpHMQ2DXSrs/WnwpxjPU6LekJL0K2iJ9k+aaTxLlr6nZg/LPeYsijPqU5IVj3H2HW+NA3a+tgL61xQ5V1pffkss9O902qq0RdvcjH5lKnSpIowriyhG2ofCHtwLHWau+EbUEXM1+UJ3Emv0Qm/1vm0W3zCP17vSanuw82+zj5Nox1I22ln+GTbrR8TZM3Ivf4EbRk35lbDDnqGWdcJ6e7KlJ8Ph10v5m/2WzknehmbLfZcLYStslXa80EV80KHrC9Tmzi8CUee/h1pCmQLlazzDOu7z2osRe/TPuwf/PHvuz/uOvIR3TxB+TyZSgQBtKNXVL4WU81H9IU9Cvuiulzq9ItzkrtsJKeeyMsEQj4cjaOuuDzkXgvZh/V7Y9nW/PRLfDnk2f6vw90FqPnTES0Gk7FnHLeoH6ZXm6AfbUQN2G7XBNW4RcxzaQbS/t8BmKkBbL5DuNdAf3oDcifY9lZ6ScT1ppdqJVhpjaSXa9CK02UXoQ7tqq+h+ed7jtEi3cM4Wekhb7RzSFuLdEtdaQDP1IUj3HeJTvLzQX2q9oOtMhnsijVcDuGYSFWq30yU6bD69CcrbnjbKPShXO39ljztPcj/52R7nBTWZ8vRn6U7olTPVFdCjn4WcDP5MvZXDkAjXhnhxcMMmnKmvhX8I/JPdeOgrBdL9F5oD/53s384KdbLzqrIK9hHi+XZKkHlk0Ej1LnmOyO9OfZWX742Uh7qcKf1/dk6oN+B+fsY9viDf/U18AaWbnCYJtF1UYO6mOyW7XGk3xHnFlGzWfkN3eeR7wEbQvPCcSOTewd/MTeThvHnUOTxuiD0F4htJ7XXnFXWisyJmBZE5B/3JIPQ9MyA9e05HuN4HOk4B1dd1F7UvbMqj1F2/WvwdXfkz6Q/yxtlhqR5LXPgnv49WjlK1OjfmcZeYWUSx3c4krgxma9M6wN6rD9u0Iaz5xiOIkg4QNbuBKBXudLxrGTe4BL/747QsJWodIGqzB+ZeP5jasDUvmkp0Ce6xM8rXdVgtlx4jyn2LqMevMBELa+n1CFG/PKLLMQ4WcqKrFtQy6J//yxz7f8/ge6JEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQo/59hRAmz+YvUlXaSQZwSKIcQozXWDpFGfP3AGbm20lr88nRKIb+SpbRCYr/SqkxP8ZcrLTaEkvy7XlZa0gHAlZZlWSn+TUpzJaWsiz+nXMnYkNgw25d7gRJAVm3lMYDjFLAObAUqjVRSEZ6A43RQAtaBrWAX0IlwFLEBMAUsBQdEjJKiJJcF/Am5zZUmOLcJbsCnNKbDwAEKytkYuTam/mAkeBAsBbpMJ0KmgOlgKzgiY3KUxmUPd0DZG5c9IMWGCZOypfca1zv8T9K7YUiRKy+/0pX5l7nJOrvJ2l/oBrfJc2Xz1q5MDGaXCBkTl/1KbiOlEW6yEQp+A46Mv0o+xshPy5SGVAq4onshOUrihsxQ9tKtikpM4QqjMeR3XlFYWVy97NwY7vDDlEh+/iP/wY3hP2yIr5e9NLcP/4LWga1A4V/g93P+OU3nB0Sd49gdLAVbwbvgMND5Afzux+8+vo98/DNqC7qDkWAp2AoOA4N/hmMC3yuakjwKd3fA+V4cE3gFbqsCRx/fA9cevgdF+6CsY6fsTdKR1dZz+IOeo3Ezz5HYKLucv192siVaVAhPGi1qi5JO3aiDkl4WbI/ml1TWdby/nH+5IZDlX5bbjn9IpYCjJB8i5w8pAArBKHAD0OH6CK6PqATMBctAKUArwzEBBPhO8Bb4iNqBHFAITL6rDNmU83fLQnn+3Eb8Hf46NUaNv83fkPItvl3KN/lrUu6ATIXcybeXpfop10Y84ZwE8VdrINsiXuP/2pCZ6Hdy6/GtqDs/jm1Bd9AfjAQPAp1v5ellY/yJuMgW2mkSUpbR91KuouUm5Uzw54R6oAEGxCHU+VK4cFgaWBriOaH5C+EVh9Cch+ESh9Dds+ASh9Btd8AlDqFJt8AlDqExE+ASh9CwkXCJQ6j/QLhwKOdLXsps7u/YfyIL5Pr4railW1FLt6KWbiWV3yp+6aQqyraorFUr1NjjOVktW/lLNrOSl1nJVaxkOSsZy0qmsZI7WElXVjKClWSxkmRWkspKcljJFnYJqqKE5bxwhrdTThIr2clK1rKSYlYSYiVBVpLJSgKsY045Tyu7rIMUPaXYkCteOshLu6H38fE01Gga2nwa+oStOL4LHOnLQaJAupu4SaqQ6RtadXf9bTpnT8Hrsw0nbsNj2Eb7gYoHtA3NaBsusg0X8OHYHYwEr4DDwAE6Uqej4A/Kow/HtqA7GAmmg8NAl8U5DDhN8Yq4ThZMFLqtV/D+QOXb8JuO3zSelpOSkJyQldBbeTCZ+VJZ/1QnlXekRo2IKLGeWa+cxW38Je7EL3Fk5Vp8Dn9QdN18ricfLDuJrpstKAtt8ec2ZI9RqoqWxzpRiAUhL6Fi6b+Ikk0hL6Rk/hxkdlnyYJzmKwu19m9m8eKsjf6TyV/5v08u53B+l7zF/3GgXGVl/t0IeW6j/8Pk+/w72pabCHk5VM4gNgdk0k3Jl/jX7pRJ70DE42X+aUJs9N+e3Ms/MVlGjHUjRhTDl+PzXxUa5u+N6+UnX+vPKcY1N/q7J4/wd3VTXSTO2ehvhyJkuc5WKGzLZJlpRipCXvBfNGhQx3J2XU5rY74x1OhvXGxkG62NNMNvpBjNjAZmoplgxpuxZoxpmrqpmtwks0G5cyAni/AAG+gJQoi/ystIle4ELo7yT4zjvWYmpz5UWl/py/sOyGN9S18ZTX2vDZQeH5BRzmKuHFaqZeSx0sS+1HdgXuklWX3LDeeq0o5ZfUuNwquHrmdsThFCS/m95YwGDi1njgia0aw0scfQTcRYvRmzmwnZYsbsoiJKanRL96Tuid3qdSrIP8thlHfMqv1JOsOdklc6v++AoWUXrV6dkldUmi3djgN339J5AwLDh25iR9mRnvmb2E9CFA3dpHRjR3teJcKVbvlFRX3L2WCZjgLsJ6RD0/lJpjMxSot0FDBT3XSPu+mCOB/pMoVAOsuioEwXtCyZTmUi3frizJ756zMzZZrGASqWaYobB+qm2RlEmmBQpmlUQjtlmp2NSkSa0m4ySXIykqQmyySsKSXLJMmsqUwyuDZJWy/JfTVJ7pM5Kaw2TbKbJu5AOE3cAaTJ+qM/Y/OystiGLkWjh/ccm9FzVEbPsWBU6QO3XJdUWnJtILB+dJGICJQqoVHXjr5OyGvGlhZljM0vHZ2RH1jfZfhZooeL6C4Z+etpeM+BQ9cPzxmbX9Ylp0vPjGvyizb0Kryw4xl53VeT14WFZ7lYobjYhSKvXh3PEt1RRPcSeXUUeXUUefXK6SXzItnUC4euNymvqMdwV27gdgya7ahmaUV5jRJu6CbbcJe0pGnNNkN1eYbsrKLS2Iy80jggoi7IvSBXROHVElHxCPZ5UUnTuqQ128ye8aISEFwvI4+ypt5cfDMl9Ryf7/4rxg+Cpt4sKtw9ZhWf6wdxPUtzrskvnkrUt7TVgL6l3a8cNnS9YSB0lLil0s7hMNvuWe684ga2QWBnEagoNQlFWFcRZllewt8+/5s92UO8BSV8ywaWk8qmUnGRUpradyBHjzBwGO51+LChm6FYibGiuAg3WMyyWHH4Gl6xs7LI9ZO45zBTb/ZcXl1M9aR7Jk4pDldJzY+orKyaGpsqLyurM2v40Nx45WKlLeVCd24HeQHkBZDZkNlK25zEkF/hHf2W2dFvx+T7DT3fH75qUZb4G3SKR7LoFTEcvQIfXPW3k5r4FLrKzvAY1JmmMYcHeBFfq2Qo/ZVblenK/cos5UnlXeW4Gqf219pqg7WR2kztfu1B7XXtoHZMT9YdY7pZZjopE1ImpmxL2ZnipE5PXZr6k7+hP8Xf03+5f4i/yH+1/0/+2/0v+F/1f+Cv8B/2H/NXB3yB9EAo0C5wYaBzoFsgPzAicEPgr4HpgUcC/wwcSdPS6qc1TktPC6W1SbsibWDaiLS70x5NewZDrZ7uS09Mb5jeNN2f3jI9K713+jXpYzN4RkJGWpCCPBgbTAg2CCYFk4OZwdbBC4Ndg5OCJcG7g/cGZwXnBZ8MrgmWBTcHXw6+Gnwr+G7w0+A3oa6hnFBeaFRodGhcaGJoSuvpbRo/nfb0rJ9ZlV7VuOriqq5V3apyq/Kr/lXlnBp96tjp7qePnj52+nR1RvXU6unVp5xTjvgjlQGorQQ9YBh/XslUCpXblLtRd3OUFcou5Rc1Xi3U2mtF2jXafdps7SFtl3ZEJz3VKDSXmV+lEOpuUsqrKdWplFqSuiz1qD/JH/D39hd6dTfSX+Lf6N/u/8j/mf+o/3iAAomou1aB7ECnQFdZdxMCU1F3cwPLvLpr5NXd5WkD0q5G3c2tqbt6qLsm6ale3Y1KHyPrLnCOuiusqbu5wWXB1TV1txN19wnqrnNN3Y0NTUDdjULdNX76XtQdVdWvSqm6BHWXU9WjqqDqg1MjTh093VXW3a/Vgeobqm+pLhF153xJpB4G78PGvdT7HxfHy/9hRPz9+VZEMbtjPoh5P+a9mHeJTu069Wbt/0Hy48VEh9XDlxNVTif6Bl1SZf3KepW+yrjK2Eq7MqbSqjQq9UqtUqnklXRQPCc6MEMe7wa3Hpog3S8d6kR0aOiB+w/cTrR/wv6/Hthc+faXrQ/MqVyw/5n98/fN37d83wNE+1aJ1Psb77tx30j42u3L2ddhX+begr0993bd22nvxXs77G23t+Xe9L3N9jbYyyp+rKis+K7i64ovxFkV2yu2Vvyz4iW4XqtYWbGuomdFXkVuRWZFekVaRepXC3G9LSJd8iGihv3wOi42FhmPGwvd+0y8iyhuT72WRLEH68WgnkgZLd5gKIakHENNXYuwPtoCbTnkGg01qbcAV9XWlKnL4/XmqpjrYrbHHETnnSpC7KYeg+l3f+xp9mIcN9uwl+w3ZMgb9odS7nFTxCac89xfBfYpz3fi93M648xd9vs17nfOkeZlcc3YWJQgESSHw2ML4rrGPYJ6Wyx8cUvkcZkXqdAKuptmKCNoPn1D99AceoCeoGfpKUqg+1Gxd9E8OkI/0Wx6jO6Frb+XDtMSWk0/01E6RstpDb1B22ktXUujaS5s+500ll6nHfQOvUlv0dv0LY2j9+hd2kXP05/pR3qIPqT36QO6jr6nSrqPJtB4mkiTaRJdT8toCt1IN9BNVEw301S6hW6l7+gvdBv9lf5Gt9Pf6SV6kqbTNCqhO+ggHaJNbD57jHGmMJVpVEWn2AK2kD3OFtFpqmY6M5hJDlvMnmBL2FK2jD3JLBbDbBbLlrMVdJx+YU+xlWwVe5o9w55lq9lzbA1by55n61gpW8/K2AY6QbvZ/ewB9gJ7kW1kLzFYLyyebWKbmY8lsHoskQ7Q56w+a8C2sJdZQ9aIzWL/YP9kW9kr7F/s36wxS6J1VMqasKZsG3uVNWPJLIWlstfYdjpJv9IX9CXzswBLY+nsdfYG28F2sjfZW+xt9g7LYJksyELsXbaLvcfeZx+wD2kza85asJasFX1FX7Pd+v36A/osfbY+R39Qn6s/pD+sz9Mf0R/V5+uP6Qu0TH2h/jit0hfpi/Un9CX6Un2Z/qS+XF+hP6Wv1FfpT6sT1In6M/qz+mr9OX2NvlZ/Xl+nl+rr9TJ9g/6COkmdrL+ob9Rf0sv1TfpmfYv+sv4P/Z/6Vv0V/V/6v/Vt+qv6a/p2/XX9DX2HvlN/U39Lf1t/R39X36WeUk+r1aqjkcY0rimaqmmarhmaqVlajGbr7+nv6x/ou/WP9I/1T/RP9T16hb5X/0zfp+/XD+if61/oX+pf6V/r3+jf6t/p3+sH9Ur9kP6D/iP7iH3MPmGfsj2swk40Eox6RqJR32hgNDQaGY2NJKMJTKZkGE6pMJ8CMKLS7fp2A7uh7bP32wfsz+0v7C/tr+yv7W/sb+3vYv8Tezz2l9gTsSdjf42tij0Vezq2OtaJozgWx40MI9MIGiGjudHCaGm0MrK0oN3IbmyUGHcYdxp3GXcbM4x7jJnGvcZ9xv3GA8YsY7Yxx3jQmGs8ZDxszDMeMR6lj2i/MZ8+MR4zFhgL0ZMtQo/2hLHEWGosM540lhsrjKfoU9pDFbSPPqbPjJXGKuNp4xnjWWO18ZyxxlhrPG+sM0qN9UaZscF4wXjRTrKb2E3tZnaynWKn2n47YKfZ6XaGnWkH7ZDd3G6hPqzOM/PU28weZr7Z0ywwe6lTzd7mZWYfs6/Zz7zcvMLsbxaaV5pXmQPMgeYgc7A5xBxqFpnDzKvN4eafzBHmSHOU+qjd0m5lZ9mt7QvsNnZbu539vX3QrrQP2T/Y7e1su4M525xjPmjONR8yHzbnmY+Yj5rzzcfMBeZC83FzkbnYl+PL9eX5ephPmEt8+b6e5tI4JU6N0yg14e/sMDsCC24vjLmf2TF2nP3CTrCT7FeollXsFDvNqllraGGwXTnnCle5xnVucJNbPIZdwG0ey+N4PPfxBF6PJ/L6vAFrwxvyRqwta8cb8yTehDflzXgyT+Gp3A9tbhZ0knTWnmXzDNaBZ/IgD/HmvAVvyVvxLF+BfaF9kV1h77U/s3+0D9tH7J/M13lrfgFvw9vydrw9z+Yd+IX8In4x72i+Ye7gt/G/8b/z2/k0Pp2X8Dv4nfwufjefYe7k9/CZ5pvmW+bb5jvmu+Yu8z3zffMD80Nzt/mR+bH5ifmpucesMPean5n7zP3mAfNz8wvzS/Mr82vzG/Nb8zvzoFlpHjJ/MH80D5tHzJ/Mo3F55s/mMfM/5nHzF/OEedL8ld/L79MStHpmlXlKS9Tqm6fNaq2B1lBrpDU2HYssZnEtSWtiKZZqaZZuGZZpWVaMZVuxWlOtmZaspWipmt+Ks+Itn5WgBbQ0LV3LsOpZiVZ9q4HV0GpkNbaSrCZWU6uZlWylWKmW3wpYaVa6lRGnW0ErZDW3WlgtrVZWltVay9SC1gVWG6ut1c5qb2VbHawLrYusi62O1iVWJ6uzFtKaW12srtalVjeru5Vj5Vp5Vg8r3+ppFdhH7Z+tXlbvOCPOjLPiYuLsuFjrMquP1dfqZ11uXWH1twqtK62rrAHWQGuQNdgaYg2Ni4uLj/PFJfj6+vr5Lvdd4evvK4zrEZcf1zOuwHel7yrfAN9A3yDfYN8Q31BfkW9Ywu0J0xKmJ5Qk3JFwZ8JdCXdbRdYw62pruPUna4Q10hplXWNda422xlhjrXHWn63rrPH2MWuCNdGaZE22rremWDdYN1o3WcXWVOtm6xY+W8xb8bn8If4wn8cf4Y/y+fZ/+GN8AV/IH+eL+GL+BF/Cl1q32sftX+wT9pP2cnuF/ZSvd8K4+G3xr8a/Fr89/nX7JD9kr7JX2k/bz9jP2qvt5+w1Wgdfui/Dl+kL+kL8h4Sx9q/8R19zfli5Q7lLmaHMVO5TZisPKvOUR5WFyhOwSFYqzyrPKWuVdcp65UVlk/IP5V/Ka8oO5W1flq+tr4Ovo68LP6K8p+xWPlU+Uz5Xvla+V35QDis/8Z/4Uf4zP8b/w4/zX/gJ7RKtk9bZXms/b6+zq+xT9mm72nZiydedn+S/8ip+ip/m1dxRSBEz/IqiJpCiaS201loXravWTcvB+Xlavlag9YYGdoV2FWykYYpfG6Fdq43TJmjXazdptyjNtf/T3rk+dVWtcXzttX7PAtZlPxvMe8IPVO4gN8tKDdNEbgoCamlJiYaKWampec28oHhFs/SYWWmn+8nrKTXBFC0vIKKSmYCiUpLnzBmzTqdz4qzfOM2c/+C82Wtmz361Z8+sme9nnu/nzfMSzIeFsAgWw1IoNQ1qJayGtVAOG2Cjmds2wxYWA1thG2yH98wE9ynsgX2wHw5ABRwxXesk1EAti4M6qIdL0AjNLBFaoBX+DrfhF/gN2jjjflxy5IG8He/IWnln3o2HcC8P5WG8Bw/nkTyax/J4nsB68ySewvvwB3l/nsof4YOYP3+UD+ZpfAhP5xk8k2fxbD6UD+M5PJcP53k8nxfwEXwkH8Uf4487Hj5a7pS7/7gfJphk6u798DG8kBfxYj5R7lVUcSWUrYJUB9VFBaswFa4iVbSKVQkqRfVRfVWqGqSGqCyVo/LVKDVGFaoiVawmqRK70W62W+xW+5b9D/u2fcf+1f4PWsgQ0A8DUGMgtsd3nWL8AD/BXbgP9+Mh/BKP4Qk8hdVOiTPFmepMc2Y6s/EM1uJZrMNzeB4vYD1+gxfxW7yE3+FlbMBGbMIreBWb8RpexxvYgt/jD3jTmSMbdCfd2bpsNViNVpN1xboa0CaIsAQVTHgECC78hL8IEEJIoYQWtkDhiEARJNqJe3A0jtFp+ITVbF3z/Oz5xfNPz6+ef3l+wydxLBbiU/g0jhPtRQfRUXQSnUUX0VXcK7qJYBEivCJUhInuoofoKcJFhIgUUSJaVssaMwvXyrOyTp6T5+UFWS+/kRfp9/QHepO2yiqyk+yiK3iVlUL2kn3kiHWd7CZ7yFEzry8ih8kyNtQ0+uGml+bKelJlrbJWy+NWb0yzbrACNoKNZKNYHsu3J9iH7Aq7yK60D9vjxe/Ct0L7jtUiLUmt+yWTHlrpmU8OSjPISD/pyEBVrWrUGVWL6Zihx+pCXO8scZY6Rc5KWmaawSZyi3xJdpBy62GyxhpgvWits8qt9dZM8pk1VwbobjpYh2ivDtVhurvuoXvqcB2hI3WUTsciHI8TdIbO1Fk6WsfoWB2Hz2AxTsRJOBlLcAo+q+N1L52gE3WuHq7zdL4u0Ek6WY/Q2XqoHqZznGWkglQ6pc5yZ4VTxqfzGXwmPSY/Nz3mgDwov5CHZIWslIfpcfoV/ZqeoCfpKXqaVtMaeobW0rO0jjbQRtpEr9CrtJleo9fpDdpict/P5DwP8qGAhTAvC2VhJu3joAjGGwIMgxzINfkfC4Wm72dAJmRBtknxUaiCYybJp+A0VBsqTIPpMMPwYSo8B8+zCBbJoli04cQcmAvzDCOWG1L4XEuZIccCFsNiDS/WsTgWz3qxBJbIklgySzH5/wnuwM+GBT/CLfibIYBjGBDk+6chQDCfZCgwmZewVnbTPD+axA8wmR+IyyEOV0A8lkEvXAkJuAqScDWugURci+uw3DCmCa7AVcONKEOPCEOPGBjME3iioUlPQ5I4w4+HeF/eD6IgCjfgq7gRX8PXcRNuxj/hFnwDt+KbuA3fwrfxHdyOO1hvdh+7zX5iaWwIS2cZLFOPxFk4m81l8zAYvfI0huICXIgv4yJ8BRfjElyKy7DUtFxO7oor4tvxSe+uEP3f49s87QHu5x8gpNI2OoFB7e5p36Fjp85dut7bLTjEGxrWvUfP8IjIqOiY2Lj4XgmJSckpve+7v88DDz7Ut1//h1MHPDJw0KOD04akZ2RmZQ8dlpM7PC+/YMTIUY89PnrME0+OLXyKPD2uaPyEZ4onTppcMuXZqc89/8K06TNenDlr9ktz5s6bv2Dhy4teWbxk6bLS5SvKVq5avWbtuvL1G17d+NrrmzaTLW9sfXPbW2+/s33Hu39+7/0PPmQfffzJXz7duWv3nr37/vrZ5/sPHPziUEXlYXLkaNWx4199feLkqdPVNWdI7dm6c+cv1JOL31767nJDo2vqXFPnmjrX1LmmzjV1rqlzTZ1r6lxT55o619S5ps41da6pc02da+pcU/f/N3WEsVJrrSm9/oaTyab1dr37ZrVkAg3yByq5h/qOp4nEt1WSWQPNNwG+mpefPdBLUom37d9Q93uulezX39qVSqw2n7HxhIOvcXtJ+/8Cdfy3BAplbmRzdHJlYW0KZW5kb2JqCjExIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNDYwPj5zdHJlYW0KeJxdlN2K2zAQhe/9FLrcXiy2pZHcQBgouxRy0R+a9gEcSQ6GjW0c5yJvX2XOdhZq8Ac69khzTjKuXw6vh2ncTP1zneMxb2YYp7Tm63xbYzanfB6nqrUmjXF7XwnjpV+quhQf79ctXw7TMFf7val/lYfXbb2bpy9pPuVPVf1jTXkdp7N5+vNyLOvjbVne8iVPm2kqZpPyUDb61i/f+0s2tZQ9H1J5Pm7351Lz8cbv+5KNlXWLZuKc8nXpY1776ZyrfVMu3n8tF1d5Sv89Jouq0/DxumOlbViknpW2E6ltWGkTJMtKO0AiVroWUmSl20FKrHS9SFZKQEKhDawkB6ljJRGkEyvpMyQ5CyScWNpTUhTJiRWQYKh0rKQMSdyBBI9OkgI98nIwLPTo3nlWegtJrIAehpxYAT0MlYyUPohExMqA7Uk2BgO2JyQlDNiekJQwYPuSkTJ4SDtWhvcT5acHA/4AhIiFAUFTZGVA0DSwMiBo37AyIGjfsjIgaG9ZGRC0R3jCDh59YGUHjx7hCTt49OIO7ODRI09hB49e+gY7dN9Jk2Deyfz8G5THKD0GXsc03ta1TKh8FWQ0H0M5Tlk/HMu8PKpMuau/748UIAplbmRzdHJlYW0KZW5kb2JqCjEyIDAgb2JqCjw8L0Jhc2VGb250L09ETkdVTytBcmlhbC1Cb2xkTVQvRGVzY2VuZGFudEZvbnRzWzEzIDAgUl0vRW5jb2RpbmcvSWRlbnRpdHktSC9TdWJ0eXBlL1R5cGUwL1RvVW5pY29kZSAxNyAwIFIvVHlwZS9Gb250Pj4KZW5kb2JqCjEzIDAgb2JqCjw8L0Jhc2VGb250L09ETkdVTytBcmlhbC1Cb2xkTVQvQ0lEU3lzdGVtSW5mbzw8L09yZGVyaW5nKElkZW50aXR5KS9SZWdpc3RyeShBZG9iZSkvU3VwcGxlbWVudCAwPj4vQ0lEVG9HSURNYXAvSWRlbnRpdHkvRFcgMTAwMC9Gb250RGVzY3JpcHRvciAxNCAwIFIvU3VidHlwZS9DSURGb250VHlwZTIvVHlwZS9Gb250L1dbMyBbMjc3XSAxNSBbMjc3IDMzM10gMTggWzI3NyA1NTYgNTU2IDU1NiA1NTYgNTU2XSAyNSBbNTU2XSAyNyBbNTU2IDU1NiAzMzNdIDM2IFs3MjIgNzIyIDcyMiA3MjIgNjY2IDYxMF0gNDQgWzI3N10gNDYgWzcyMl0gNDggWzgzMyA3MjIgNzc3IDY2Nl0gNTMgWzcyMiA2NjZdIDU3IFs2NjZdIDU5IFs2NjYgNjY2XSA2OCBbNTU2XSA3MCBbNTU2IDYxMCA1NTZdIDc0IFs2MTAgNjEwIDI3N10gNzkgWzI3NyA4ODkgNjEwIDYxMCA2MTBdIDg1IFszODkgNTU2IDMzMyA2MTBdIDEwMSBbNjY2XSAxMTEgWzU1Nl1dPj4KZW5kb2JqCjE0IDAgb2JqCjw8L0FzY2VudCA3MjgvQ0lEU2V0IDE1IDAgUi9DYXBIZWlnaHQgNzE1L0Rlc2NlbnQgLTIxMC9GbGFncyAyNjIxNzYvRm9udEJCb3hbLTYyNyAtMzc2IDIwMDAgMTA1NV0vRm9udEZpbGUyIDE2IDAgUi9Gb250TmFtZS9PRE5HVU8rQXJpYWwtQm9sZE1UL0l0YWxpY0FuZ2xlIDAvU3RlbVYgODAvU3R5bGU8PC9QYW5vc2U8MDgwNTAyMGIwNzA0MDIwMjAyMDIwMjA0Pj4+L1R5cGUvRm9udERlc2NyaXB0b3I+PgplbmRvYmoKMTUgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxNj4+c3RyZWFtCnic+/9/FIwCJPADAKdtEAYKZW5kc3RyZWFtCmVuZG9iagoxNiAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDI4MTg2L0xlbmd0aDEgNjY2NDg+PnN0cmVhbQp4nNy9CXhURdYGXFV37707vWfrTmclgYSkCQQiuRCIQGSHkICBsC8uLMqiMwIqArIIuLAoCm6A4BJWA+gYd9FxxFEQd0ZRQGVkFJEB0vc/Vfd2CHGb+b7vf/7n+RPePlV169Zy6tSpc6qqA8IIITOajzhUMHbWjSHt5aeuhJTnEJLqJkybeN2+LOcmhOQkhMSuE6+9acL7/+xwFCHb1Qh16jdp/OhxXz894J8IVTwJ7xRPggTX3EAVxI9BPH3SdTfOSX589A6ErpQR6h69durY0dyakTMQurMU4p2uGz1nmn+hOAKht26E/KFpM8ZP4/oXPw3xexFy/jT2utHT5r7QIQ2hT5chlDml/+D8Qk/tyHqEuXOQv07Yh5IYNqMkPhNBG7VjccQma8foM0rJNwjhZB3Gzw70JPoAZ+MQ2onPIx86hwO4PeqNePQzcOIZ1ITuQ240BK3GLpSOvGgo6o15yJOLluEHtFnaSXQFuhs9oj2Lb9O2wvMV6DV0DlrwGY9RR9QP8g9F49FJ7itUo92PZLQIeNwFDcJeNBodht+foA33oHvRX/CftXNQqxvdBuWVom6om/aidhG1Qcv4lcIRZTdahfZjURurTUYpKA0tIbnaYe1zlIlq0KPoSWhTLm7ke6EwugbdgdbiAPcahO5Dj6EYtpBarlx4AWrqjarQ9Wg2WoK2ojexCw8QjgintT9px5GIElA2tGkyOok74L7kcd6iddU+QiPQXvQG9Jf+NvIj+M3CiFiZ9qD2EvKgZ7EJP4dfFAqFu5pu1R7WnkYWaE974Eg/qGcMuh29iA6gf6EfyDxtHuqFBkPNr+JkHMKZwPHDJEDmkrnce6gd9LYWWjsTbUD1MCL70H70PPDmY3QUfYXdOBH3wWPwKvwDsZBx5B3uAW4X9z6P+SeA3xGUATy6ET2O9qC/orfRO1iA8gvwADwFT8Vr8IP4KKkn35GfeZm/nb/ANwmZsaOxC1o/7SfkR0F0FboZzQPePop2ol3ob+gQ+gH9iM5iB+6EJ+GHcT0+ir8jCkkj/ck0spo8Tp7i+nGruBf5Dnx3/hr+bf4jYaGwVBotxS5uit0Teyr2rvas9i7Ijg3Kz0QVwNFbQSoeRy+g96D0D9Gn6AsqP1B+Fzwcj4RabsCL8b34Kfwqfhd/A71E7DeNdCE9oNapZAbw6TZyD7kXan8Hfg+Sj8in5FvyEydwaVwxN517mKvnGriD3Ne8g8/k2/Ht+f78cF6DkSkUrhQGC1uEbcJLwmmxVBwnThNPSLdJC+S/NrVp+iyGYpNi9bGdILsySNLNwImH0CMg97tgDN4Ejv4NWnwUnYFRCOIwzoJ2l+AKXIn74mH4ajwe34YX4bvxWvwAfgQ/DT2APhAJ2p5LupHBZDQZTxaQRWQ52QW/+8gBcpgcIaeg5T4uwuVy7bne3HBuBHc99OFGbi63ADi7itvKvcO9xx3nTnCnYNR8fAo/k7+ZX8dv5nfx7wpXCdfB7yPCC0Kj8K5wUbgoEjEoJon54hRxi/iFJErF0gDpTul96Ud5Gk7CbaDlIdTihwRgDqaQrcTNz8OnICEZ88gOPc+FcRgMs+JHVMbFYFxs9Dm0zUMCfAJ9U1T5enj/RrwfdcCvonki4UBr8kfRDvwJOcq/TK5Ah3AdDvCbueuFN0kYbQNttJI8R/bj7mgXKSVVZD2H8Fd4C/oK5H0Ouhdfg29A2/Ap3Bnfgjvieeh94uUG4wWoVHuE8FjBvfFpBC1At/Lj0Ej0uz+4BH2CTsYe4q38n0E/NaDVMKJPos/xE+g8FrTvQLtxoI1Gg5ZZBvJ+B6Jarxbm2TyYjwHQINeK76BdWASN31Hsyt+MTqN/o5PCPpCo7qBJj8cm8w/xX2odtbYww2CWoS0w7yahK2HGfAVS8jzEaexqmOkm0CWFMKsHoOFoHLoFtN4qrV5br92u3aRNRW/Bu+dxHj6PN8KMaIA3StEb8LsCfYiXwjy88vf7+Vs/sXGoEX2D/TgDF8J8OCXMElYKW4Vdwl+Et8X2wO0F6AGQ6C9Amk3Qg7HoXfQN+hnLMDYBlIei0N5O0PZqdC2p4Z5H5TiIpsGczQY93t3oyQ1Qym3AvfUwn5+HuXEa9MTV6C/oCCbYBz0aC/XLUE4l8HkU5N4EI3g73gkp40Brt0HfQr9tuBO5EepToaTVoLUaoU2foK+B2xprVx7ohR64Csr6GQ1D46CGYjQAb4cR2INKQLP24P4K/E7HDtQdp+HH4L06mKE2lIxKhC8xQXmxflonMpl7HtYYDdI3wuqViK7A06EVduhHE/Lg/qhDbBC04T3M8fX476wV68h4bRE3O3Ytegs9AWOi8rOkHvwM/g7+gtp96BC1rOsVpV06l3Tq2CFaVNi+IL9d27zcNjnZWZkZ6ZG0cCg1JTkpMRjw+7wed4LL6bDbrBazSZElUeA5glFez0hFXag+s66ez4z06tWWxiOjIWF0i4S6+hAkVVyepz5Ux7KFLs+pQs4JrXKqek61OSd2hEpRadu8UM9IqP7tHpFQAx4+sBrCy3tEakL1p1i4LwuvZGErhMNheCHU0z+pR6ge14V61lfMmrSkZ10PKG672VQeKR9vapuHtpvMEDRDqN4XmbYd+7piFiC+np23EyRboVH1wUiPnvWBSA/agnouo+focfUDBlb37JEYDte0zavH5WMjY+pRpHu9PZdlQeWsmnqxvF5i1YQm096gpaHteY1LljU40Ji6XMu4yLjRV1fXc6NraB3OXKi3R73v5mP+S1Eo3FVevajl00RuSU//5BCNLlmyKFTfOLC65dMw/aypgTLgXZJRUbekAqpeBkysHByC2sgdNdX1+A6oMkR7Qnul9298pCdNqZsSqlci3SOTlkypg6EJLqlHg24K7wgG1b3aURTsGVoypDoSri9LjNSM7pG03Y2WDLppZ0ANBS5/0jZvu8OpM3a7zW4ELNaWgfHNz1iIZaehykHNnMW0RZHeIBD1obEhaEl1BPrUiX6M74SWjO0E2eCnBsNb9eNgRCbXK+V1SxydaTp9v17IcERCS35CIAGRU99dnjLaSBEzHD8hGqRy0ixq8Dwers/NrW/ThoqIVA5jCm3syuId2ubNaiDFkWmOEBBgHxoAvB1d0zkf2B8O0wFe2qCiMRCpnz+wWo+H0JjEHUjNz62pJ3X0SWP8iWcofTI//qT59boISPIuRC17T72c2fzP7vAm9JzUuR57f+fxeP155eBI5cDh1aGeS+oM3lYOuSymP+/U/MwI1SeUV3OJxAiRRI49BaG8ujkzjVRb6vkM+CcyoR5Xz4FQsgQcqqh31PXSP2tM4fBvvtMgyS1eatBO07cYufSa0cr6zrmXx7tcFr+sdZYlHLSXzySVQ4YvWWK67FkFKKAlSyoioYoldUtGN2jzx0RCjsiSvWQz2bxkWs+6+IA2aPuWJtZXLKuBTkzCnUFYCeq+PYIXD9yu4sWDh1fvdYC7s3hI9Q6CSXld95rt6fCsei/YKypLJTSVJtJIiEZQJQY530Fklj9xr4rQfPaUZwksPrYBI5Ymx9MwGttA9DSHXlEmq0gFS3NsA68/UeO5eUiT9bT5eu5sI7cMTxz0yT4EOh2xh/oPVRrlQ6pbigObYzVtqclFZUyAX7BAJNR9F8ExUWogZWoCEvgYh0wSH8MoIItCjHDP4UykgOHtR/5cx9nSptJ+jjOlfZtKURmEHRfho31B2Bl2ZsAHhrZeDHGNF1UBXUAhvhHMIDQzthc/jqmVV7Zbkc2iSWrAKWqiuB53MptMM3CmlG5HqSiECuDtgGXiLH8uVFHb91jTKVTW99SZJuwsQc6SkvYFCWGPWxSlrOLijpFlONBm5vCOQ3uRxThw4Obl00I3Jo0ZSuvrhheRyWQj9K1QDRdgFYyBjtBTBxfiCjie6yE4WF0cCvCPX0vrOlbb1/F1Lco/VQtVQE+6kWwwowOx41Ca1qQdJ12E9yB7JzUZYdybcG5C6BIKfMLfkqDAfQsl3cNKOtP3VD/H2b7Q7tKy0kVCu9xbHK+0L5BwEebwNe/FVgWE7867gf+oSjvO24RGsAdC6B61co5psWkz3iptVTbbnlXeUOQqZ423JliVOtE5yTspODFVLiElYrFSbO1Neos9lQrrZuUtckB8RXnF+iH5WHxfed/qdPhDfuJv0BrVDJc36t8kW1Pt+XZiVyFm34SE5CP9wUsLprmPmAPh91661N7ptMGncqdTtC/Atai2Fhf6vE6HJEbSkNPRsdiXJkqi0+H1FhUWdyx2OjIzSeGhOStWzj50OHYePosGeJOj/Yt0IjSu3RUbFavbsxrM5U34oT2rT3Ybcl0Mfl5Uuw25FoaDvNgNxukRGJRM4IGCqlTlGvInshTYyjfgnJ2jBCw0kJHPyoqAkUUBT7saeIZJrWoVEJ/Kh/h6nucDpn14M9isuriU9qWyyRh/pvYUCAuqDYedotShOL1jEZcZO37/u9djUnCMj6zsqaUfWEglpQi8BQu0IBmXqaN2+/cE9ya+yb/uP+g/GDgYlMsTy5PKk6sCD/D3+bfym5JkMRhC2WLHYC++3F8eKA/K6f70QHqQ82byVfxi//rE9Unrk7cmbU2WXSjZkRxKbp88K3lB8srkw8lyMh0Xr9sTTSYOiz2ZiiChUqiCGMGjnTBGqIE8vJNgi70BV6mRVEu+hVjo2Fk2JQjKEa8XzESMgqn2I47ZJJASH8AzbARLS/s6YBCbcqcfg2mZWzu91Okqwc6i3FrQz3tRsta4w1lC27DDzohqc5TwsqNEkJ1AnSW57Kdmu0iVhmpWEgOJJDEBUz8LCoJ/tTVUMioHVj+PEsF+SAIka0c7depUg6fXgrw4w8WujiAbHaKZERCWjOL0okIwPUFseFHiLRezHBu/+0tu5/E11ZPk2IkAll/78NyVfYtiZ6/0YiF24V6sfLy9bNjQkeOn/CnpxJvfPD1255huZwZk0lHqC3MlEUYpB32oFi7yHPCQPyUtTSKbuCeEze493D5hj/sj/6cB2evGy73LfSRssiIe+xK84VSrw2JqwOmqpb8Vq9YVVmK1Ym8DJqo9NSE/gSRQ9iZsShQwsHy3A+QK5A+YUwjJ/KYsa72lEcbA4nUcmZe6InVD6jOpL6QKqUelI/3TcXow13vENxsfQYE2zZPpjDGdQAKdJfm1xoDQDxqdfgpTZpYYLKVcBaYC+1BtQgabW4x7UkdvMxu7kqJCasJLXvhAkbT0vthhnTFw2OwZg4orU2fMqe7da4I51pR43cs3vXPLxPfmrol9/ffXY+fxHeFJ1y+YNuXPnq+4ycP6VI+ry7tjw4gF1y5+8YbE5+54MXb6K5hPwFy+B/DVhKzoc7XEErKWKJaAJdcy2HKN5QuLeMqKRd7LZ/DZ1l7WEdbN1metr1kVTGRkEa2SYDJbJWSxWK0N+Gk1yPFuDpQrsfBWzkp4E5JUa6P1IET242xYpwjetQfxPLyAGnD1LmGFCZvoQLgc0gbpBYmTgvYyMg8W2IBtH74K92Kz+th0x9navjC36cQug2WnqbaUstBVwnjoKqEqlgcda7fb46Lb1nKFpa/lbcunFgHpQgvszYW1qQMuchZ5Ik7sxGRu0xby5+/27Imdjj2Ds85yj14c+XPsQ5KCf4qZgTPDQOLaAGd8KIKeV7tMMc+UF8lrApuFzfITtq0Je217nM8nNDrfSbB6hGJnD8fN3t3k746Dbmk/egde57HkdzkSQzCFqDSlgDQlbrJbU8P5YRKmIhfeVKZgVTmoaAqnNOD+O5/BGEQwrKal8vkggyqTP48AwjU75Uh/C7YEM/xHXIH0Vlr7jD7lz9SeBdnS9TdlDzIkCzqOhUwmSMVFhS4mQKDOEcxM7G4WN5G3x06bhpTX/MkxeX39hdi5dz6LfYHb/HPzx00Pzx3Yb9K0IQOn8YNThgzY2PTn2Jn3/xE7jWvwnfgePG7/xZN33nfz0hV3zAMlNlj7mvcBz/woHRVg6+4COTk1mtmgnVOvhcDrztcTPhA+kPiZjlnuBQ4uE7WxFKMulgp0leV6fqwM65xndtairDXWtf7HrE/4nwhuStmctSnviYK9wWdTfLMTFiYsdC/K4tcAL9aATkhqtxZCuQoNZ3DtKMPK2vVvR9rtI3eBcmpUHV5/dFrS/CSyMQknJYmubDoSCmQryFazSXYDuUu1uqxlaf3TSBp9O42mBEUh9YgyO/dIfzu2BwsDR7jZGUe8gfa/nN9swawta6rNdbCZnXuqNpeyvpaC8d+Y22h6bW4uzszsEC02FCKdyXwkLYsmJbQYBq5FGPe6buxX7717fErdzfNiTR+8cceDs/aO6j+gblS/gXXB2TXDZtxYM3E852v3cN1jhw8/NmFDm/bP/emt2OQ/H5n9Oh44ZOSoIf1H1TVdceNtt8yaeMtd1N7oBqPjNiT6oFrdxVnpHG++Wb5TfkJ4Qt5k25SwG+3ldtsanLsSXkVvOhsTnNGEKnONdZRzUEJdghgQZnvX+T51fO4WJiVgXcBTE/NBwFVduAVHOATCTZnsYAJeoOD+yufKaUPAN+oC3kLHJuoybvUf6e/CrmCGLuuWFjJ+ptk2+Q0ZjzPYUJ4dwVohHaIg3lTII2mZmPHSw/haix2mIT2H3eycsuGpC1h5+3OcEjv8/ZPvk5G3DOo3EWR8Kh6cMnjAxot/wubDn2NnbHNsZuz62PpnuaTFq/+07K475gMXD8By9AWfyazmdmoi1wmLYifepDzDESJm4pBQIBDhGfntbdRSplrLUXoWBKXslG5XwiLpPEDtShzgrJRe/FG3MgndLxNeEPZBuSbcbS+StCOq0rEkKmbDh8REN7tDVFThA2JH1AHhLHgGHzmoDWiqbFO+pRPqKJRZpqApZDw3QZgkTzSd4Ox9RFDXCuZMisJLCsYhJIH5KYkKz4cE0S0IomxSg8ldTbQKczA5asogHCfyMGbPqTZRIgLPYyRbfL4gWCejVXMqZtv588GebSDpqpKq4AJlvkKUfSQd8ZBDCYHtFjCPHGsY8U0BGLcztdP9Tf16ju/xNdhnwJSy0r6nYPzywVLJZWbyolteWdTOT4nkKC1d9MorujbfpUQVaxTlUjVeWW8eXFmfAs7MXsRpsR0yb9qnxYBTF7eLfKdOhiWi2zHhMAe/OJzAccILsb/Mb9pzU+w10gWXtHnzNdw3tlPYd3EJCTUdpf7PauD8GOB8AlhkeeiIWja7DZ5km9Pma/4szythjyJm54UzvK5UT38PKfA84yEejzuSluFKkEPuDIxIYtY0cb5IxMrsrGdAJ1FjTjFHLQ1kGXgf7dR2A9rVtZvWbn67le02tpND7QpASbnTQiiUUAAGSANZurNt+8FxE7YJzLja6WdzdROCeVgUTMUwQ86jzd+RXOKhhlyQkvnbE6jtVgOZWswKnVd24NV2Uwj4Qg2McGEKiasf8KFEIQzmYWHHYqpxsjIjnDNsRDIjq0mfp7ctGj511MKVtQ/P6hP7KmbF2S891eaqYZV98t7dil0bc7sPVm96U9iXfPW6UROfzM16bt6456dbZcK/FntKUIZd2WOoIjTtjc1RLLX9ul/dhlpxo7Xjwkjwo4LosNpvoXKn+07vBrRWfF15n3vf/BOnZCjZlmxrjjvHO1OYqSwUZClB8vkSfL4c0obLEKRsYZ2wRjnAvWoWynB/cCIGORA+ik7D5KEsd/qjjJpAXhrwcNXnb8vLNtXmitoqR9kxVeiqxx8F2zpbTXO1NXH2721V6HvEigoWwCLhydooYbuUKhWANQKjtzNxrjEu0+l6C/rHWHDPgHl9LJdSGqilngamJrAg8pEQVT3hkM/r0xde8JlA+fBlOLV77O3vYp/EFuObcRRbt4wrjH0cfHzWo2+9sXHWVpI44vRJvAIPx9fj+zaMrK+YseCb2PnYN9+tprrhXpDQ0SChDnCS56lF2TDdr/SN58dbhDa+El8vb413klco8RUnLkpcJ6w2C6lOKpYJrgy7Qw5kPSNhyZBJ2is1YX4Yh8IFoKydLpBCR4GDOKgUhn5VCptFkPZyOqZi5PN6wZSQRPob0YWoK6FyA1J0L0l+tu7Whrq2HSf0vX3MY03v4exP/9yx16jS0msHd90t7EvKfCl2/G+7b984trJNKv/SxQ42V9WrW7fumeCyURm5DyzS09BTM1qpXiELvCRniK5UARcIz4BiFRSOzwDn0aRkmJEsiZUc6WVCZmwOhqwFVhVMTV4JYepUgUhAjywte8QGsLTvmdIzpb8yrQSYT8klAswnmFbCZdOKE0AjtS8ocoY9YQP38WUXT5KjTSGuSNh3Lrb/59j0n6H1a6D1C6D1CpqhlkHrRSFDCskF8gvy5zKfL6+UiSwjvQsKtL9M7A9aYxAHpjEJhswFZmK+vP2mX2t/re7iNpW6aON/rX1ruFNNXci4pvW0bY+fa1pFObsMPnZB2zg0lfV2Z2E0KlCxiGQwqpa5fVEkqMIAYb5wVBBShTphmnBa4OcL1F/nkEy4DzFC9ego4hrprKPtPAgxHl3Pt99gTJQZxsZQWSk1P6fPAB5Cw5zLcLaw73wFtGMdyPLLdITxKjUoi9jlMpkEjnA8qCTFpMgmQZEVk9yAn1VzJdEtSSJHlyoTLFUmkwJLk4lTONkMuWFlgoYhs1mWZL6BjNsh9JKBqC6JiQOxEvPlwjD2EjMDlJt+fTrr6xF8BICjoEN9JQgAi5KfeRYsINOA7CiVX+HoZ6m+Ou1WQmZrlGvQ3twhZ8EqRZcpVF6tBjLFLGUlv1bcyNfzjby0QNzCn+DPCrCqakd3dhwUVSjD0yGQIV5hupFbyK3j1in3m7Zy+7gDnOlF7iB30cRdYerOkRmwouHc6bU1TEpF7cROl7lMbNBOqAl2cxlfYPXCh8VdxofMrjJoycGd9oBObT6dQg5GIROjRr4dtoQypC+WWHf9cS0dKRzG8E9yrsPZpArf1XSEVMRujV0Hk7JpJlna9OrFW0n9T7GeMJIgVmAW7kMW4lfNZi5TzjSD/4eh8PmqktQ5agp17hJlPTao+lhSO0iFDxHG+UvlOxOsryZTAkniHUqqKULy+JCSb5pIJvHjlSmm2WQO/5iy1bRb2Wc6q5w3eTfwK5UNpteUA6YPyBH+sPKh6Tg5wX+lfGOyzlbmmG4ny/jblWWmlUSqNo8nU/iJyiTTLHITL/UglXwPpdI0TB6mVJskvynfFiWd+ajSxVRmk6jLKiqKyUOCvE+RDDcylfBgNAkWSSoUbZZCtn1I5AGyNWqmH6yXNhh9WbVlRc30A5LWqw4aMMscNZGJZAK/F0SrrJRKlc7sWpx/yvH+KZoAvmEXtS3UEuJlRSnUHWhiNpkKOQJBAsVwFp4QCwi+IsmpNmxrwNad9ABvH+nEJvGIWn3y+gYPiQqFkirNk7H8/DwYhefNIbOFNJBOqgtmrQoZkQqZUGEqNVGgGGv7mWCkngGTOtdR+k9HaTDgaJreNL006HeAUQYJ4HxD4x1sdugTooWVZlhkCYNBKmXt6HZziJpfteyHzfpcBFILAgXSpEuVcxXej01Yws/FTsU+jX0Z+wyMMD934nwFf9uFuRQgU2tBO0SoBsV/U20KJ8oBzifzLtA9wF1EZZ9r0LtNqdoGesQVSjKoCZmTCZE4BfgFvOJ42mOe9pgvFN9hu4lL1YBqHmCuM3PTzPPNZKO50Ux0rSsrRqFsXtoGD44qhUxzNNK9OaaIZzbrDjBYYXGETp41YkzbUdsL9EZJyaJ2tPPAIV2OqKl6VFVAKuSQLiONzypUaphZm8tURjnLNX+PuYM839yBdeyKYLuoPBg+BM7LFXIqx1dwd8ACslHeIR/jxFe4d+SPZC7E5ctRrovcX76b2yBv5J6R67kXZLPuLhR1iBK1iLkLR1VrfmGUhOiH5O4AKWtUJdwuSobAB8tdkRKCGHzIRJL8hPNJeSRL6kKKpH5Ela4mVZLiJolSX9JTul/aJr1FPiQnyHHp38ScRbKlPtIcabH0JBGpxp+RG/9BcVGoQUwSnPR8wLkWh0g1Toh90LQdBKAt9975Cu65iz2onVMDFuJxsBDtKBE9og5dI6yR11rW2ngZSzbZLvmz/HOU2S5ptnOOZyF/p3ynZaHtDted7sWexb7F/oVBi+QCSQh6XEF30O8JSgltrUqgrcR5s54xYWRymEImzkQtoFBBsppclzwteX7yxmQxlHw6mSQ7sjYiTE8hCtiYL9uZNPflZuOPWUO1+i459eVA0KeDRR0Fe7ljcZFh8iHsdjX77zXlhU9NvHMn7oHviM2NPR/bG5uL23+9ffuXnz777FHy/tG103bkdgb38v7Yg7GpYPhN+ndM07SL5y5QPlAr6BzMAsqH2WqGKOx17/VzVwp4onBYIC5nhtVmQ4kOakfYkez9hYXnTU0uMPonJDvsLVfBpMuNvGYbzzAoLtl5MGBgxBquQiQSINA1w1O4D3+MbYPmbh2zpt+UAy8+8sys8pG9OmwU9nnDnz6zqGGy09P0Af9SrK7dmG4DJllNUDH1sJ6D/nhQGJ1Tbyux97YPk6aYp1joacfGyB7bEcUkyqLJJ3tNxbYKW4Vdkh2K021z292OYlux/Ur7TNtNjvdM5jnKnMCs5MXK4sDCZFHxuhWL3TbYNtO2wHav7VGbYAtZLW6r1WK3eKw+b0aCw43r3BvdxO1GoTBlFzDOg2QbdW6zkNUBRsL7iVkbxXqxUTwo8uKiaREcihRESCTsacm1tJa2A5MFwztjyvGSKca0AGiAWhvYC9hpeGPgHUyvpQwt9Br7P76EMNeORCJO5yWugtM19dtD8196se6WKTtjDx2eMWTkhNKPD00p7d8rfddxYV//N297/IOkTgu3xb7AZdtqwk3ruX7p1d37jLAI1L7ro33N/wBzJw8fVK/Y62xI3pP9Wh4PLpQHXCiPP3e8MD77RnGO9cbsDy2HI5Ya01Db0LSayCTLBNfE8OTsiXmzkxcmrw5bXBG6YqekRilVxweC0YFpAyMvpr0Y4aenTY/cmnZr5B9p/4iIuaY21vS09EiJNRqpNFVae6SVR6ZYx0dust6cdqd1Sdom02brlrQEMOmsYpoYCZgCVm+alBYxWXnsq/KrgVB0qh9P9W/wE/8+Mh4lghayBEtSE3FiWzeHemGqlnoHQ1F6fjcA1+GVeCOux41Yxv/k1WCJg8d82zaK/3vNh31qgi/qq5SyMoPtUrM2OurBo6nE3zv1AQy0/bsh85WDq7cjtVMN863ZMd2Z3BnUoZuee6Y295hOZ+Qeg9VOV13M6EoDfiQmd41Q40mnX+5IKEkD9gCB2IEdLho7qNpdJdaQq8TEYKdpJ1SbBdKsJSY/RUJJbsuf+GGLp7Ops7VDWgfgY29reVpFZJPpiTQT27vWXa7mo4Es9tshWgxKh9cdTEn0uH1enkkW9T774FBww6IVq664Krr3n3WL5n3/BHZjnxQ7knDLLbf2zs/rhOvfmblMQy/Evokdxp8mrVp808Bo70RXuy5VNz097eUJP7xpnT62Q1pJNCN/wnXPL537yTUY01NQDebwEJjDIrbtRByWqafkKmFm0JBg52ijfBgfJh/yHwoCNbnmCGvwarKOXytskGUOmcV8mZp1dfJsLAWQV8xBmWJvdKU4DEmIIySEkRuq0U19tivFNZAxqllEMrXyYeIK+8hoxINIAJPNPJ7Hz+c/54/yPN+AzappHjef+5w7CuYnSM1uyAEG0D5sRoTuRxVgjANSi/0oGOvaM7W1uf5TzfbNqcutm0trd+NOh75q74YFewiYdbVsyWZHXggsZ1Qb1i1mYm46g7vhG/BE3LnpR2HfhZf5K8DhYZc5kDCYeTxd1IedfKJpID/cxG8TNknblMfMH+P3JfEO81p8L3e/sEa6X7nXvAU/xilB7JGycaZUg6ukO7glwhJFieIuEgmYQny+qQd/lWmEaQG/zLSK32DayL/Pf2ayduQ7me7hHzC9zh8wHeQlE1FEs8TJopnnZAGBzykgBUzKEIG1HCKi2RxCghtaJwrggRGwQc1IANX4rKgmeKJiJd0D3CkHrcDK5xABFkAqqTRT5Wk2ppaFsjVA+UqdqdxTEDyrh1B+s191OW/tzUc1u2GmZEV5qm90+uazijNqKoaPuGnE5H/69OloRnus85n+wz/FOuPhOBOH8LBYJ4g9ENsf20eayPOxHPxBU6cmG74QE9jZPfSuGngvo1f3gvj8Re1q7tBowjzHC5zECzwn6OEQwcATzFJCokQXPcxLYH9KPAbnVOGRYJJhJBrIRJBKyi9gGJJN+4kPyhaJbzdYoCEE9rbvWdy8cEzYqVD+0J3ggOMY2NU6OYbKdLlznD2mH2bRlcJX4jSsbLml1wkrYSl4nq+w05zcuH/mJN6m43gErsGD8NCmr8hkbmDTc6THxaea1kHNvbUTfDu+K4qgQjxdnSQF5SQh2Rvsk9grqXfGx47PnUpxoCIwLHNCYGLmwsy7A/cENwX3Jr4efCPRIopWj1cMeLPEHE9NYDZZSDaJu8XXRMsL0Q8dJDm9sL0zz5qu5raLpqtp2fARSI5OTb+YTtIr2Klygc0evSIZ09Pv+uR/J/PJyXm4CKmQSm0rgoaG1SRnWVhNdMCHPxgNN5Abd/OSxWrKoxYMPGMUHjMKOfIgh6q6zSntM+UcJdtak2rZYCHgxWjgyKg2b9QS7B/F0TqYaXfRqV6UEx7lw5/7cH/fKN9UH+cLFE3uFt+dANGcfqqWOv+5euwY3a0AFygXTCAw5tk6wFbzXF1Gd+Qn4+k1p+IKIR3M98Tk6JD0cemkNreG7jbDAHI2RyndgqGHESCwWcX0pMfr4dxeX5hqbFGMpDGt3bG4o3G8Q60qdi7BjszxeC337+8811DJJWbEvjE7JK7XY7WPPV/1wN2vXjVgauUQPLL4m/SO1T2u6lnkMJMv2t1/b82dz8Yalt1xVVLHgFxRsWPx8OWVSRmhpIE9u8T+7ir0Z5V2qSrM7Jg+HrgyFKShDKQhgP6hDqy217hqvJPsk12Tvbf4bwqsIWssrzle83/gOOw/KZ6UTyac9JwTEzoldPL0cfXxVvhrLJMtUmdXR29HPzdbmG1fJCy03xnY4trs3eva41VsbJQSozameN1RW5GVpgRSoozanVHrPswjE4yhy2lGKmRFKuRDRSthrPaB0ufhUcgnYZqKwyjfSgPWcH/wdoOJUtgdCFZ3u3TmWdv3VO6ZU7l0E7b2WK6+BwtU1xTT46ed+olPR0EUm887+faxb21j+0++Zd41AyZ4sDv3zNsnY99i76mXviLfFQ4esmrr8+tHTM3/y0ugVnjwUjM2U0t8CPBuNLPEk9BKta2rRqwx1biqvFX+mqS10jrlnKJMS5mfQjpzUUtnTzTQh+th6ePpEVinKG6Q2x2COUjF12aWbHYYCpMvx2bNxA04R7XbUXBFCk5xhOVAcnVpcw+nny3te6qp9Gtmk+veBrMfy6tV62Rxsmmya4J3gn9yklhbEw53MDoIfocPfCswBC6d6Y6OXei2ffizsQuxl3bchgNNrvweN49evGDiuEXrR9TgLLCjbDhwL3FcnLb1qusff+zZhzewU8ITfBbIihsl4Uf3Iod2Tq0wl6xT7reudmwRNpv2K/utDUFZduNe5EqxwtQ/ZYt1j7gn+LrpDcth0xHLOelnqzXJnuRRYZZ4VJszave84HnHw3mYNKSUMWrzASXLVTDeXQNsdTZi87uovbcnkBjFRS62jZ8c0rfz03J0mttWp/4kRlU7qJSNdHV1QLNHuVzA5p282eWn7E43SyiM8z26EOWnjEqZmrIhhU+xh2XVao8Cww2NkHvZvv4pMPdUt1/Ndpf51RQ7fIAa8lN9xVajsiZmDrqgEZDDRRsDmVyGuqJ0RzwrqBpm4bEXEDxwldBG7/BRUr9TMXVl0W7hsly60tUco1qkllVvU4FLNlqpjVZvU4FZ+mrIDsvAKAUvo4htroItgqmIh8AkpDKOuDAzFBN0u9BHzmN/8clnYt/eMRm73zuFXWKTyt02uvvwLG5O1dWlpRgPyr//4d2rPgVZyI29Hnv+lqW98LU3zysvv4HJfmwgX8dWkXzcTx0zO3lRMnFZrNPaL7TOb8+HMHhJXAEuIkWcistJOTfCXuOuyajKqYKmXmM/5zyX4OpiLfJ2yS7KA/fAW5ndI++0pclnugv0ttliNbexWLNsXp+nrdUCBqw/nUrAbiYBbKBtTsaknWaLTrPb6AIQydBp+6guCIonkSn/UQKdcKn2LEpsprZUEMweyR8Q2+SYM4N+OumUQCAYXNEet4cp2KCaUFF62BUoaJ59Z4z55zjlaDqG9OkHGsbY0YivAYg1jlW+Q7FE2fDp28bU+6OgazZMW1BHtdPZvLVPdk/OmJgzIXdyPsxbVOsTvL647u8gsqsAdAB9HcLg9JJICBaLlhcDbsLd5OTsqus7ZiRY5zYevmUMxi+8Oh9LXaftXxH74YuLt9dNvGvxpPG3V2R18qSEve0jIx94cveKQ9iMg0/dd/HK5/ZNKd17l43c/sSDDz/0+MYHgVl3I8TXgF7zoh1qrh2n4hI6kI7uuLvzM/xvrEiCV0gn1c5JTgFjkuB2uhI4N8F2ytRkTlJMJrfH5EXIbMqUFTWUHn1GwZqClSC7fehNS4+u9G/0k2n+037yvR/7kTvT62HTFvJu9ODTHuwJ+Mp0xoOnZRxwQOisEWP6j1qQp4CnPrbEyqXGlRYnrK8pxOMMO6NM3Ys0iLctfn70+v7JseOhgVdUXF8UA5+56asNvaYtXtG0irTfPLxDjzsXNn0HnQbZvgeMwyfZaYiEZu9FCj3/cJrKVGWAQuYr9UqjclD5XhFSlTplnrIREgROlBBYh6DFVXbqwaFaAh6LIEq8iUiwZjBZDKdH+YBs9OtSP8pKm2qn6wc1DsNQmJEbvxBwj34hgN+D+djFC334zAsfwQhdauFgdl6j5tD2CQMEMl+oFxqFg8L3+iHNPGEjJAj6dVTCZWIUbwkK8L9oiVF3kV6vcSYzFyFxLcz0LNxlL8qBt2uhLtAsFo/otUS5qBz1RyM9SE+5p79HxBLi8nMGK3U583M25DwmbpY2WXaLuy31OQdzjubYUE5+zgB48ELO5zlijhpMipZBfD57KEhhXgome+kENUnU8lNTeMnhdGYlJiVlZpmAnXZHpsupDu9Q58RTgTkNpEK1BxMzk5MgbWoSrkvCSZC2KyMzM4uuojsQymILi1JGqVoM7c6CrFlqN0ApID0rmqV2viKan/VO1udZnD0rNWt+FoeyQlkFWVoWnxXI/rI0bhwabrk+/0vPgg4vBTK9Nrf0kjgydxHUQouz9hm51OzDuQlhD7X7fMz683mZeGY1i+clSZ2LuaWNE1YXVDxy9cxHskFek7MGdpnULnY8pay426S2seN85qonhgwdOmTU1T3WNtWQUQ+1K+21dHWMkIoHhudVLFjXdFE/feFrYMy8aIPqlxJ8CcPlSTLfwGMYLUcPuYf9pEMQ2XR1SjaraDGbwfwgONOL2HQF34jeJf2N6WoyZ1pslL9Wq6V51lrwadDcl89axqlfTFzm+DVbLuHLpiljEkxeviZ2PH1gSe8bc0H4haXv1d7fP5WkPDm+04AFO2KpfOb6XeWTFvyJztVBYJPcDz21ggW7Ru11Ah+Xf0742cO/Tk4IxBUQAgqpcVQlVHlr/GvIWnGtvMbSoBwiHwufKIcsx4Xj4gmrY7P8Fvmr+LL8mkWYKd8pLpA5J5NCs4+yyM1L7hIpWJc4LZEk2sLoMpNz+tnmbd9mja5MdkwAO2yyn8dUnePahKgLuoX0G5qZGS1096AlTev/haOxA9/dHft5CQ6tvv76++67/vrVJG0ZFpfEXv/+X7GXF2hbHtqyZeP6LVtof5fGruXXQH8dYHPer7brlNArgbiiXIm1JCGa2IPrbe2d0CPx34lKlVjVbIuelf6dKMP8CTKjU6K2p+o1mx12my8sB6eBnenMsdnsmQ4HMz7N0xC9zRRILtP7Ob3vqVIYSMexeHf1pS+ub+kaNkGc0NL2pPdJPFTSjZtWWdT8vNTrpVgsenrKXkxiF/dWr+gPQ+y9a8KY2xaOnbgYhnbAuNhnsabY2diHFUObTnJ7d257cOfmRzaAQC5CiOvI+r5FzV4jYMWGBwsThJkCl++qtk2yTXPxJsVuSbWQFRbNQsos/S3E0kBmqzmSBPLNEdGUjRSHUqBMU3glOM+1wUVGuea5nnEddPEuB8rEHOs/IfPxRkxwwFm2FyfpF8intxDns7WBvseQX7fBQbpLCnVWTEeV9b7BlfUd2M2awk417I65zgmfxITciTdSiS6/pkddzbArr+gyKJ/PXHNNjw4/teu2NfYv6GMByLMD+tiGvKQ2ik4xImf5nL7IWtda95qs+9ookrvCTVz7rXttr4e/ipyznk0Tc6xDreOt95nXuDan7bVI3SJqeo/MiWnjMhe5FrkXpt2ernTM7ClWmPtY+9srwt3TpLT0rMyOlg5huqvYIV0STYJTCfutWZa0tLSIlJ6m5t1gmeO+yTMrZ2abxZ4Fbe733NdmV9quiHU+XuFb5l/X5ok29XmiL+xVw5GoV01KjaZ68ede7C2SwwMyVmSQDNWfHM0I5rHDR9C6A/JwQR7Oz8N5KeECB3YUgStnaGb9do6pTF+X6LlXIHdOA2X5RdC2zCM3NAi79UT18ClkbI12EDEWsRdnphWHK8JDcI1vHJ7sO4tN2Ef4YDiNZCdYLSQ7OIrHfEW2eUAQBysSpLImejGTmmRx1E5PpBu5b1ErMtyg0zS20Z1O40d3pqbr8UCQxdVECFxjxcVpFWlrrfemvZL2fpoYTrNYeT6IDDsVFVGLdaevbRk2jHoWT8uIsr3rZFj7ENZ3r/k6PB+fxhzCDraXzbOcCV7IibHaF/F4FH+aJ7QLXhWK9hb5VCjXp0KhPrVDx6iP7rj41Iwc+IBy7b5UtrnB+4YGVdDe9iAeENSCxOg8285mP/SWUu10el9phh7VmWHsPxvXJ+GnVv+WQLp2QFXMrjJ7NnwAH77bYy2xuC0lNLjDQne0v9luLkHGpYGa5puX9NZ/VmZWepZxy/WyrWl6e51ugBTgoOv6sdd1zHB7eseeHDH3o68+ej879rNzVPXUglBSJn6xpvrM9x824fzcQUOzk/JDHrezsmvVuiXP3bW0fdfuqd5IiidpQp/KhXf/vR5mUap2gqwSHoQ14W01J4TAHTHl2Dvb+thq7FLAg/yc14N8rgQ39rmIG/s5RTJJFj9ltx35NvrqfVwdkEYf52vA/A4PpipzJ/LQb0GBv24xK/mmfASezyjQEpBDzfZzmT7XUE+Ze4P7GTdX557vXuk+6D7tFpDb4Q65C9y8OxCcszFuTFTWdwQ90YXdVnRrjZ1qSvvSb0qdqS11nAlQ1XKKfXsKsh6j3wQootuiVMdgT8TpZjz1UabR7X5npENRhwwnubnRnJWU1cc/5s9X3VxiVm69FQf5zKOxIbflJiV+1KZoYM/29+F3jr73WOxO4M9y0DKD+UywD9arvmHOic7VAqeIAbGUlDorSaXzOJGYNe/kzV5k8rjdJkVMcGd6PIgqSJuXWQlerMGc/x0rQZGbzQMZn5ax/NtGvb7EtLIOavUtjEzoZFjvdnExDXL9Oj8/+ZqtV+FA6qCyXjPa4MCGoWNGbl1NNsb8R8d36T/zGG4EM1nT9BtjUgnJRNlgMUtoOR6EJ6A81YND9v72FXYO2UP2DfZn7Eftgh03kPJdvXIxtu8lUZRDN/Brp3eAUobGaukeGaF/H4KW8gkG5wa12YMd4VH6readbLMSOmt1uKNhUxYtJUdmReTm1nYAju/nt4BtTr8nVq4m4JDLE8UhUC8DOMzujsDCU6MqEP4KOQgmDWT0s/h6MNG//nP8azy19As8sNqAGOTmJiSE8f4luEvsFL8FvPND9CQhM1ZLrtTOIB8aoFqz3B3dV7q5zIRoAt1rvkeNeL8IcZhbYfrCbpJGu4IBtk5aOqTCmwF/4OPwo+X+3Nx+9Ht1tcZ31E6dqW06xrRAQgdjGrOvn+g31emXvzInVtXkhrt2U8uD/Ybfcluv0btvjV03yxzyZ6YVuscmXt+/umMl0k85xK8nzP9zwZej7KU/yQGZ/QWAR74sZX/Z5d0Hv2w6f/5ikwPJMyCvAsD6n0hASOoa64fKHej8+fM3O4zzkks/juWikURKDGxFDdxbaBp/A3IBKqRkVCO8jobj4+hqeHYNoJxLRkn8k2go5J8J8RuA3kNKtCbIXwV4BFAE6AvIBIwADDMwGNAN3jkA2ApljKLlMPolmiK9ja6AuhBgNWA04F6hCt0Hz9aIJWgMTYe6lkEZEQivg/QHxa1oFYTXwvMampdR+n4V6gPP8yB8j1CladJyJEEagnATpHuh/rtpm4FmQv038DdopyDcBsruDc8XAR0KdIjRXj8Lf0nfYX2lfbyThoE/cyF9FWAQYClgBPCHvl8A76VCfDmEzdAuBagFYOMRSoM8peQKVA+0LdRfbvQbsX5DP5r7BO1nbfp1DKXtawloE+3XScDbgIMt2tYayy/DDagHV8TGj/bZCuhC3kbdgS8x2i/hK+1nCpC8I9Cv/QCBH4fay0jbCu0sE3ahtRAvBJQy3IAwvx5N5c7AGOxCN4ur0cOQjkh7wFmUQb5DQTEDdQT+VUP5wwDjocyXmTyMo23QvgOayn+FglBWHWAK1H0gzifKG4j3gnGthrwX6YwAvi4ATAYerAXMoO2D+vMpz2Hcf8ZVsScg71Gop5IC6kxlgL7r44pmwvvToSzM6tHHQacAeD4FePo04AXAi7QNcTA5M8DK2oo4slX7EWgCIAh4G7CKyhugDlBC80D9JshvYvIKMkNlk8oHlQ3hdSarg2nb9T6wubDUmDPXwfsjAAFAtvgkutpANuSl/BlDZZbOl3jZVLaozMQpk+lrmNy/QftJZaoFvVdoRANpG1i9IFtxSucdlHsTpZyHtel+7hDr+1oqb3FK+UJljc5HOicMOqBFX/OMOZIH76cwWQdZjNM4L5rpO+h+KLNKXAVy+i3qx3+E+nF/Rf2Em4DeDf3bC2nQH/4Q6LBc1F9uRDkwlv3h3XWt6FoK6RCeAnWt4LcBLw6hBxlfD5E0/hAWhG3aSQHhA8I2MpeFf0FbAzfqzyilaPnsv03/n4AcFrahCRD+RjikadCfu+mckL7FBYBQnEL6DsB8QBs5F6+Vr8EN0lDkEBE6A5jKq6izoKKOfCMq4z1IBT5lQPpQ8Uqmd1dC+a/jb9FyGK+FkgdFuJOgG6EuchjWBwAtH2jfFnJ0mcy1lqU4jctra0plhupdoALQAMy7fYD9gI8M/APwBchjL8CVdG2g+pmtD6CjAcsNeZ3fLJ8H0Hqgd8Xls5Wc/qmVfEqt5bI1pWsL1e9sbYF5CnUtj/ef6keq46iOpHqOrn3x/K1pi/fvA93xAdPDb6PhxrzOARQA8qGM5ww9sp9r0M7AHD0hvqftl8q0/dyb2n5xnbZJukZ7Q9ylrQde5DSvqY26LqPzKb6WUj7RdTG+jgqZaIKhz+5neaF+to5WMT2AxJtg/k1BY6Dcv9J1lc5Dbj3MO+AnlHcbvwVdy3+BVkLb7dwzejo/GPWjOpGfBWFIB51On5u5lez5IP5HNIvPgfAWoA8gpyihWeJL9B3tbZb2pf6MpgnD0RqQu3z+TvSYsB1V07Gi/SAdtDfp2MOcD8rz0YMSAhn+At3Pn4c+N0IfX2f0ASZP9N2d2nnaP6kL8gkc9I/mAdB3wO8JGfxYzXjRyHh0H5Nh4AUtU3yf2RtIOAL5N6BbZBO6X84C/fQTCkqgS1hd29EwWWV859l6/S+YH9+CjA1FiwW39m8m/09qGnce5tC3ML8oMDzzoIDwLXoA5tJixh+dLqXzh/sWeaiMQP+GMHviW5Dxx9EMcRtaJjaC3B2CteAQjNu30JdrUCcIr+K3aRcgb08oA9G6IX0gs0/oOqVqB+l8kRqRX1KhfshD28DsP6gX7OnV3D1oMeiSbvK36FGR3r74j360J3VKLzhpf4MybgHakYxHb0ArCIQxnQv8EzD3HkDduM3IxE8A++EbdBvJR4u4fiB3p2DN4NAtNM7noWzuFKrkzrH1Z5FgQh1ZPi+s4yfQAL4G3m9E4/gdaBynQdgPuA/kEd4TGtBwYSzYWSOhHAOkGN5R0ABxKYTzYa5DPlbHOa03BX8TKmTvtQBraxy0zY+0aDN4StytIA+0vdRratFe2tbmdhpt/LX2sX7ScuE9ludj1A349AkgQ6exgWQ52gbYSD4CO7wRzcWrtX3A5IpW6NUyzs/FiwEDADw/Fz0EtC3QbwCHAOsBzwH+yXdAd0DZjUB3Ur+AgvwFdBdQeP444HnAZ/FnLUHr+bX0luC/1va1jAuFqISC5IFOz7v8Gcv/EIryc2BsCrR9FNwsZKIQbShHklEO+QLSq+C9VnEhG63hp0LeQYj7ozb9HuCnfQs+qi37GB8PoN7/AJ+0oCFKYX61pevz/6Z9/xPA+DoBBYz/G1E7JkMnkEgk7R38HBqJj2rnQZ+LFHocBRk/H4L3jHGC9MUsvdX4gawUU563Tm8dbz2ufxSHcie3RFwO4pAKkUrBfwb5Aa3jsB6oFCKVsbxfxpvr/S0MQVHgUwU/BNryxS/jogPlU5BpEF8Lz79GWRTN8SEoh4LmpQDeRiiA1/soyBcoTMENgmeDWP6uFC34Wk35yjXSd9n7bHzict56fOBdB/8KcnDHwGYegoKtacs523retk6L65Jfy9NqbrT/rTL//wSYO28CXge89v9qPSDnGIGsAhwIbLr3wN6oB1v1UfCz3kLLEWpajNCFFxG6OAr0EOipi09B2lAIZwL9F8APaZOBwmp04SiEp8Gz9wFvAzbyiWiOYVcGIN5Tf7dpk1Fehv4+fe88WDsXivX3LywCPADhvwGGQPhloPcC/Qny18N7NUDnQtptQKMQHwAAebj4LsS7AmDdv9gZcBIA7bwIZszFfHj/IcAsao/8ih/6f0t/w//4T6m+B4Bqmc0J7W3tQ/zHND6ef0Bb+xrx8f8jGvclfkENPoDN9yZFC9/nd32cOIXx/LeBM4Dv+Tu1JrApJWZHgy3LbG5qPxqU2duHmD2JjT1FRqntTO1XajtT+xXoeubnvQPtuQFdRf181q74utFCt5I8NB7gNQB6D5VDnr9De06D7rHD+voT2JYrKdgSi9jfkgVob8HaZQed+wJ+TvsJ6NsQT4a1TImvaXHd+gsd+wdr2v91/L9dI/8Ha2p/A5NbIZ4+wUDr5/kG0ihar8X/Lf5o7f4fr+W/sUa3XKf/t/H4Oh+H0hUVUkgqtFv9pV3a2g74o/gf2bn/bby13dEivp3id56zeGu7JB5vjV88/6Xs6fZMEOZbHK3m3X8LmKfd+anah/H5Gm9D63ncPN+MuDgP9QD0jFO8hZ50xXIAywDgq2oRoLAGajfT9U2+iArlp1AhxGH91Z4BlAFq9LVP8+BdCJGfqRkUuwPiEv82y1ttoOaP5Lm13FL7nNmHwDPW9pUwFmdQPqALwAXYDriueazz6S2P2FEOVl7q53LHtJ+grJ9+yxb8LQp+3gzq70HcDnE76OJEcTtKofsazP9uBP/1S9CLr6PJl/b4tCZxJ8tzNdtb/gj1Az0/AXziqfyX2pPsDMePiDQjfo7C9tbWGWcpiXRvSPqenv1oTxn7c1WSH9bBH9FQsRtKYecQ+l78OMg7lu5NkX/Qv23O9pD9Bm1L96foeiXmsDXG1mIfuTOghi9GbQAlxjnVCO48lP0Ie3cpO5O5gOr5p1AVPQszbUX3Kq+je2Xoj1KFHpSS0IP8DHSPqTNaK9M95CS0iq5X8XUVeB/7lb0/upeZ3mJPk/W5tU3A2lcMerVEe6RlvfH35HLgzSD9bMjYZ/9d2wbK6QhoCzgD+PrX9zu1t419z/nGGj+xec1vvU//EGrH57D69D1ZWLMFC5RjYW1nPG7dlnhdwJem37KF4raJsUdFz9luM87gogC3kTaE2QXd0FUwXv3pnpmwCPn5JWgQ2aq90pwHbCa2x/g3JrNLaDt5/dwuEXAN1xX1IPQi2IfIzfYk32dneHcYmAtyuomdmX3L9sIGidsAdN9RQ4OAV19fAsytZmhf89ugLgp27qe9YuABfiCTz4Ahm4n8OVTJb2Ey4zLOBO38KgDl3TSQ0WIDN9CzN3a+xyjj1bfA9yWoP+sj3ZvbBnIL/OEeYvuDI+J55TI0RLoT5PUZkJ3boN4KlCquBZxBfrED2IdLoN894d3b0GLyL1RIge/SviA8hKEhFBxChTxY5qB7ED37pWfCxrnaTMC90B96tvUjzcfy6me5FG0oyFYcNs4J4+EEPczS3jTwo4FNLQD5tH8ALpBTUHcYyifQrn/qbeIcIKutAO+MMcABkukZID8MeHU5ylsD3qU0vzUgndKM1jDSg60B6ZR2bw1I7/4r7fitfL/Vjt9Kz2wNSM/8P2jHb5UbaQ1Ij/xO+ypbA9Ir/4t2/Baf01sD0tN/px39WgPS+7VuB+gnWMtjL4CPuttY9+cApf8PwRVApwKepvvYgAlG/A0j36RLYPveqQZ6AKgvDeux9h1gPWDgJdC6NI/+Trwe7RoI/wD0Sr0u+m5sv143g1FnbJPR1meB/qVFnLYd6o59odfH6oZ2xPbpdox2P+TZC/EuRr2b9XbHfEBvNOpDeh/Ze5svQYPpp4Eeb6J9G3wJtO0x8P21hw2bqcHg5SN6vU3gJ2oBQFvj+eJLegG9AX7iRNCHJrpWywScNaBU1zKdOxm5W6xVs40z6zVU34nQGr4UJYtgw0EZJmo3UB3O/EnQ+8yf/ICdq49jSId15H2I/wPK2AhyaAO9uQBl0zrYucwN9D6L9gi1Obj30UAKZms0srW6G10PTFegGrEztOkMCkL5idLf0DJxJL1fwtY8szQJ4hPB7qBnZBKaJT+ElklH4DmHKmC9Ko+nx31b8Q5NE/KQOU7ls6hGegvSF6CIEEQRWp/UAdE9nY7xupvP7p+kfi4bdyo7y3VczAVcxdoM7QXqBJoYvzfAeHIAfHIO5bEzpy/gOUZW0Qfz6iLKlhSwL/agxQpB66RRzHfvwm9A0Rb3BdrS8yfx7yhPuB154r67+BHw9ToYQ4PSvZH4foDwILqffwPKehCF2LmWsR/QTONl0PO2b9ED9K5Ea7smbkc12zfGHkFzHUZ/KKVrZ4v+M9rC3tD3FLajYfRsjJ7jMbujFY23iZ7j0bM0KGcks7+6opHSzbC2PoUqxFdQuVAOdnofVC4HUUh6HAWofSZNANmk9hrdwwmhtsIDCOa4Vg4Aydam6Odi1F/QQGq0G2D8PgBcbexPVOlAYL1rZkgfarwLz7WZgHFGHnimLTHC5QbG6Xnou02fGvmfons0Bpr0fRs2Z8/RcAs+r2Y2/S9p/Oz+XsNu/X36H+6h0TlM71T9yhl/a0rPh7vE4zA//66D2nLa3+J2dGtqnPffo1PtW4N+atC3qKxRW681bX1/5bfus/y2HWvMszi9/N5La1rTfC/nDyjf4p7Mr9H/dO+OndeDnorTX94/MPbkmqlhl7e+h3OJ3g122meGHWvT9xXRcnY353fQfIfrR+0H8ceWFHQkgN7p+TWIKZAvBSHpae0H6elLlN0x+B2IK+C9FbC+pGo/yKktKXJTQJtX6tD2AF4BfAb4DrAT0Mhh7Qf2P1+t0n7gV7WksHasYv7Jr92vGyQ+CPU+CPUMhfpgJksHoL0H4D16p+F3ADY7kmAZlsewPv5I18Lfxd+gHrAW5IVQz0J45zzUc57RHynifI/zMc4X6NtxNl7xNsfrN8r9344jlLns9/Db46L9SPF/1e/fa7vwuvYu4FMahrn0ieGXfKLf3YMyLm/zXazdX9PruFDPMB3sLs1W7QcDPwJfvwJ8THWUgZeMO0snqGxxIAMUUI8BqKe1HPxowIjr92+0JvFr7YjUR/uUzgN694eC2lK/xh9pvPYuyOCn0mqgf4N3pjAfidpe9PyZ7t3QO7ajDd0XVt6G9Ws525MJ0bVergfZRqB/XkQTLrf5tMGGDqb3YOmdIpe4Ew3hYmgY+MureAvopMPa1xRQ1wIDBwys0m0/7VXAy8YdSZr+REtw7VAKBYQ76+uk9uCl/Ththg76x51p+qV2Nd+RBEsYfF0EfRsN421n9ss6aNs68MExWkbtBbZG2FFvei8JbEobu3Nj+P1s7+FfQHWEgS9D+LvZndHBDCchH71XA2B3cvR7SgPFdDSQP8ru1+h3fuld388BP8C734HNOfTS3RpaBrUHqV3EfQl8BJ3CPQI+Lv2fOx4FOlQHzwH9M/joM8BG/QzC9YAUSE8DOhswB8KZQG8GjAA8aaT/CRXSv0DDCRCmAF+a36NTzvCrmW/9jg4uBHVAOnkT8i1AUfIDpPUCmAC9DdA8z4GNR591Z/kKyUmo4ypk4hKNcDk8+wgg6/4721f4wXgWz9P9Uh7pFlRhWosqyGagc1CF0E3bh0+iFHqODWNqBcBIxqg/RP0dmDkazFatP+Aheubzi3sB8XNygwpvoBLhblQoetFtQgBVgi/QTbTDOlyNskH/0PvXQ1veXKL3ieldYu6Qvu9t7I+zsHgQtVPAPofnyLhzzCjZpv+ZcTyUrZ3sLj0Gbwtt08tk96dhrsXtXKkOLZceBlvyYTTC0EWjjb0uJ13XIVzC9oRyUHfjDhXQGNhzGp0Pg0E3NO+9UkrvtFHZMmxBamM+yXnpnStoy1rgwxUoxXi3F6A3YK7Bwz5Q7kMtzp/2UPx/fb7V+nzqt86L/uhuxh/d1fhF/L88U2l9d+OP7nL8UfwXZzB/cF7Gf6m9SG1oqkelZBrWDgFe5SBMAbKswbOPQJbCkO92chrm7CewPlxAqcaeaCKku0F/uflzTP4W6eWBfZ7B9lzp3vy0Ft9zWAq26wRql3L7tFeonmP3EBHbs+zdYq+2W/M+bVc0kOla0KnGXu1y6qcxHWRiEKmeoToIn0YmAKJ6hu1L3gjxsK6XaJjMgtlwF4QHwPPeup6iOogbBe+MgrTzus5iOpPqNjoPQV9xKmAkxL8xADqIHAMK4P6it4OcoGc1sbt1MN9sA12bmO4kerlsHxLCxvdR6NpH762Phnzd/sheMuzLuI35Suv4H9mFkOdAS7R+3nyG8zm96w/2wuvIq3/nxfC7jLvRYhHzV5jegbFMbLH/HjX2nKNsvO5ETtApib/wCzg0lY5t3KcHPr1m3C2J01E62DpN+Xic6UqMalkdoOMMuROZXUP9O+o7bNXPIgzfL+7LeQ3Zyoa+rYZ1cDG952+s98/R8xYDj1GwOyQH0Hp2lxkoPQuDfAVGuw4BGgEHAUcuR9Nrhh83otkf2kv/DkDsATER0j9EojwC0j9DIpOJJDSU7otT0O8VUNDzohbgjLtQxcY9QurX9zAo6Fw2V6iez+UfRVdzN6EyfjHqxQ8GfbAItedHAV0KZRfBXKffm1oB4amoirsVdeFvRaWAKv4BkPNb/x/2vjw+imJr+1TVVHX39HR6EkISlqQnCZOQhJAQQFZhEgMiEQmrCaJEFhdAzL0koqiACMpOWAUUCCCIIDJMFNkUFMUNJIILGIQoi0pAXBDFAPOd7pkgl1ev937v9/t9/8zA06e66jy1nFq6znR3BvKxnwbbOuD+wtSbhv76Ksjn5vMjh2GhkgoLUc7Aa0EHvggWB9vYl8bCRFsxTKRjrHstfWl+8H7JaOu7sMGmvplmjQO0lu179IHfxbQfUT6FSEH73ggDeQQsQu4iVgkptvMY3wwWiaaY5kB0R/0ZKPugvIBpj6I/2wD1aqAM91J20QvXm5W4F1oDMuZniL24Z9uKus2gLe+G7Z+JnB+hCddx323W4c9g1umpYJ2CoPn+i1inMpSfI47W1eV6WPW4FmY9rs8bYbbTajfW5fqyTFh2uDGoi/ZA3IDlViJOIn7Eutxu2ogf+lc7XQurjnWAf62vZbs6mDa8FqY9r8X1bQrCtPW1sNpaB7T9VWC7zX6w7F/X79EIMxzod8Nq4y0w0GyT1Zax/tq6Pre1h1utepvv2GDf2+LQDzTrheXwJ+FWs7/5g6gzENsVzDM4hsqstpp6A828/UetupnpnyLfrMMHmI5tNss1001bSs2ASXmoMw11HkWdftDAdilY37Mo6+r/FY5vzEssxr1bf9xjBm1tcV4FYtU/Imj3urqb/W/WHfPky4J1lzB+JwxF/2qR+Az1d+Ee0odx2xEfwi3iK6ufFDYU67gOWl/7jhYiApEQjG+JML+/yQieW9Kau/8pzDn+n+KwtQ5cixl/B3MNCKJdULa4Js6CrYd/6rXn1poxBtsvwUSWZIb9F/8uH3Ndurpv+Degsf4ddWvW9WXgmLAhZPSB9Ktr2bX4DNdbc74E5/M1fWH1g/ksNI6XpSbEs5CK/tlkfhwm0yxYhViIuA3hQtyLaEHNvWwW+qcB5CAaI9yI5ohohKoNg65hWeY1wL9NH2zJoYF7MP5XzPszf7cHvn6vV7cHvF6P7PDvxb3ifShPoZz4V8+6/NX59c/SXP9MzN/V60/25P/6XFMP/4e21f69tk64N13p3ydtRb/0HGRJiSijobV69MpZvM42Q5tcwuviCMRoU15fz//0uf//tN3mc4LWnqLCepalme1liLTe9akXeC8K44bb74Fc20O45vWHxnISuMR30EA8DAvECJguXQSb+M5fa+k+BLPkI+CS5kMDhcNCqQ/uU8z7D4F7HM8Fviu1nlGJMZ+LwevcDFtD3BtH4vX4C+iD87kpb3v1PSwb7jmW8iW4hzafLTC/jyBwi3WP/jtrP2e+2xxlvu8mzYMz6o3+dfIBAPVmaIvjLNd8J+QqqoGStbhfXgtdrfO10JD2gvYoU66J6xaUKUFZFz/KkudhGCIqiHBy3n+ANoeZGL6JLEa/fSf0QPSz7Ubb/ob5I2xDgJngg3GP929gG4m2N9Ee+/Ca8N/6i9fh757B/7tn7q9/hv76c9YOGliomycjIMMEjqG4oE8dF/w+qmfwPsurgful1r3ca8MQuG9nSuu7rCaI24OYex0yAveH/K0QLer295Zvf837Uua7Q0GfP7Xu/SDbI3gd/DuY9kF9lozrYCZEkrHQHPN4yPyOg5/Ca8QbiJ9hKIYHWOHPcF6MhXIzLN0MC6y0GVjWWiiXpkC5aAb38nWokwEdcexPtHinYLpIQO5FPD+JY3cNPGzltQRGiQ8hXyTDQivdjDP1izHPiQF9WzbmeRqvtQ1xr9gP5WIYEHz+pJTs9c+kxP8mHQb30Ez/OltjyJFa4Zw6ifNnGOZzJ/qqpxE/wQDbaxinW/dvrDRTh3aAOVJrTP8Cz009jLPNwv23GT4GY/F8Bu3gX2M77V9vc6OdMZ1FQ4xVxlwYhfsLk2OWN0PKQHkCz3+FAawM8zXPcZ7aamGAWIW+YmfrO8/3WRNIkG0w0gS2L1/ZDzOuhaOh9Y5tpPzHO3Q9rp8HpD9MqftO5PpnB//HdxMboB35Dq+5weuG+UyBzfrbCdimT/1L1aX+35Ul/osi3vwr1YigPyfdi2tzW9xfJGB7+yN64DrVGmJwb5MpnjGfL7Q+I/8XOIJeeWoQE9ATnwTmq1pgwzEs0JWS4gKQeweg/ICrG/pRatlfQ8P2haG/qWMezoUA4X0RP/yBiIcDiMwJIAp1YuYDNEAfseHIABrhrjEu8w8YwwNwnQKIP/LvkXg6AHcSQFIUQNOEAFLQN01FpJX/gWYOgHT0Q5uvA8jA/UDmwgBajAVohfGt0We94b3/Hm3C/kP0/v+EV0L4v0Xb20IIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEII4f8JCIBzJj0AHWE+CKDghAzzr+FJefQt4ECzHdCXbTT/0dYQCwZ7mW1AXYNtqBCxxoRsjb0EGxFIxKMLUY5g4GEvVUhalmcLyohIS/qi0rK2+ndhoH1LKz59ftaEHWw9DIKWGL3e18+MXl/hyc2yZMsOAZnRwpI+OZAsRWYZ2Q2RloGgoAdDPRGzEcsROxECK7QejiH8CMbWspW+rgbmsBoz0rMj2WpsugeP+xF+BMPar8a2rIZzwRgb1mpVheIwi19lsRqxVcjS8ehETEBsROxHcHgQj8sRfgTD0EpMWwmUrWQrfE7DmW1ny2A8grIloBMCBua+qMJp2WZxhV4vy5PtZAsgH0HBy3rALgTFbOcgbQ5QVM/zpbewTJhXYQ/LcqL+dKz0dKzIdCyyHI/EOvcgTP3pFfWizOyf9OnhFu9RX2arQKDCGZOVj1Z4GAgbxkZBInbpOJRxKIegNLt6MBsKmlVPT4XuzJqA5XVG9c6sPqRgcjaLgiyUuawhNLLUSn1hgXJKfU1Ts7DFN7EYS0VnGrRCKTPJl2W4tjOPZfwpFYpq1m+Kz1k/63U2mUkQiVoTUCva0F9nduxZu9WSvhWKllWW7WB9sZl90SwG1pGglUdZGY3yYUbZ4awLawxRmDaCxUJ9lF1ZnCVfYCugK8qlFUmNjV3b2TyLNdfMFIvvFBhanSq0sKxd2QrrhKleNgs7YJZVeFlFUtssyE5iTSETQdHG4zE03hr00zA0DXttGvbUNOypaVipaebvW7KpmDIVdTLYWChmY6AMsRzD5rCq70ODbrUCTZpmbWUNWAwaxrkdTUkwtmGFEmbWLMYXUc9Si6lwhGV1fp2NxnE+GvP0sJKK6JisB7ezVKspzSpiGpmEYh8O19dZdKBrkBhldsnrrDEawjRMLIvz1Te82QaemwPZAEI/oJWmkehB+qnZ3XQ/npvyw6DcF5QfBaR/F60MTAp6wJTV2Y3pScxsEP0SlmOI0u10N2Qi4Qu6xawFPUy3QmeUh/B8KMqtKFui3OaLf8/YQrdUoMC6P+vToszG0t2+tIxgwHAHA9GNgoGIqKxsN32LvgmNMYvPUTZB+SbdBQkod6KMQbmLlsB7KF/FVasDyleC8m26wxzi9DW6GdqirPCFmVXw+iRTbPQJU7zsg8BZfoaxg75M10NDVN3gS2qIsWsrkpoY+nbMj9DVtMQXa0Rk2+kKUkDOo1I5HDIlRNCVvjZmJmW+HS5jKy2jZZ6YNh63J92zhmW6M9Mz1zCX25XuauNa48p20lm4gCynOH/pdDy2ARfF0YPwIMroVJ+tjTf7MrbJbBeFCXgst0JFeCy2QoBH59XUH6xQZzoZeiIo5jEOMR4xAfEE2PA4FvEo4jHE41ZMCaIUMQZXk2JkFCOjGBnFFqMYGcXIKEZGscUotkovRZiMImQUIaMIGUUWowgZRcgoQkaRxTDrW4SMIouRj4x8ZOQjI99i5CMjHxn5yMi3GPnIyEdGvsXwIMODDA8yPBbDgwwPMjzI8FgMDzI8yPBYjExkZCIjExmZFiMTGZnIyERGpsXIREYmMjIthgsZLmS4kOGyGC5kuJDhQobLYriQ4UKGy2I4keFEhhMZTovhRIYTGU5kOC2G0+qfUoTJqEZGNTKqkVFtMaqRUY2MamRUW4xqZFQjo5qO2cQqs99BSiVSKpFSaVEqkVKJlEqkVFqUSqRUIqUy2PQSyxgUh804xHjEBITJ3YXcXcjdhdxdFneXNbxKESbXiwwvMrzI8FoMLzK8yPAiw2sxvMjwIsNrMcqRUY6McmSUW4xyZJQjoxwZ5Raj3Bq4pQiT8d8Pyv+6a+gTpEDGay2dQFIsOR7OWHIcHLLk47DJko/BGks+ChMtORbaWHIMJFkS87NkCRgy8Rlt9OwoXAJ6IgYhHkQsR5ibpJ0IyQrtRxxD+GlrT4JNl3pKy6WN0k6Jb5SqJaqLnmK52Ch2Cr5RVAvqym5ENWsdxaUFZlvH8Xg8h8CLCB47W6HOtBWW2wrX2db4rxVt5Qk/6zqXSvankp2pZGMqmZ1KshV6M7FZK50L2lCsOCnwOJI6GYcQbZKSO+HKNGvzmWjDl3SDsYXsCIgUTxrKM4hNiDWIiYg2iCxEOsKNMKy4VNQv8CQEs9yBSEbEI1xmERAVBQAR4bJnK9XImop3NFDMcpKbIm+7LzkTxRZfck8Ur/mSBxvZCtkMyeauiLyKPbce5UafcQKTNwTESz5jO4q1PqMVijt9yc1R3OFL3mdka6QfGDaT2jco+2C7TdnbZ/RHtV4+IwVFmi85ydROxYLcmJpCCuAESneQ1SRQUqLP6IAiwWe0M7VlSDY7nghIt6rHEaZkFVihc1tJgY14VOOsMc84g/QaNCwOj8OuLTYU+91bSH+P3diRvgyVsw1ftt3Ux+vDpqD0mvJVY417qvEs5kXcm43FRnNjVvoWGaNnYr2nWkX4jImuLXS9p54xwcg0StJPGKON7sbdRm/jTjfG+4yBxg6zmlBICuj6zUY+ZngLtsLtM252b7Gq2NV4xPAYyUY71w7TvtA2kG+b9B2mBSArUHoztG+qe4s5xvu12ULCPanSD1KZdIeUI3WQEqUEKU6KlSLlCNkph8kO2S7LspBtMpVBjtzir/akAQ7bSOE0hflX4wjYrLCTmkfr1xjwUkVkCt3BW4/l0bw+OSTPu2sI5A12eS/0SdxC7L0GeHliDvFG5EFe3xxv27S8LZK/t7dNWp5Xyr+jYBMhswox1kunbCHQt2AL8ZtRkxt5I27CRJg8s9FWIKTB5JmFhRAT9VDnmM4RncLbdc39k0NR8Jj2xyfm2mCsd2FenwLvuthCb5YZ8McW5nmf6OMaWLCV6lTrkruVhpmisGCrrZjqXXqb8bbi3EJUO2Gp4WgOQzVINgWqyTngMtVwPckx1bCPAnpJSEe9eFOgnl2DJEsvya5ZejZi6m065OqSu8nlsnTcAIcsnUNuuEYHRwxyczclJVlaiS5SYGqRgkSXVbEUKyPDQJV0w1IhuK+zMjKIVZg34w8Vd1Cl9VWV1lZZjPyhYwR0IpvW6UQ2RZ20/+VnWE4aqWhROm53l2GJXYoSuwxDFHmnP3RfjHfCYJdr07hSM8HlZUlFg4fcZ8q7h3lLE4flescl5ro2tdj9J8m7zeQWibmbYHeXvgWbdnuG5fpaeFp0Sbw7t7Cic8eC7H8pa+rVsgo6/klmHc3MCsyyOmf/SXK2mdzZLCvbLCvbLKuzp7NVVpf7zXGfX7BJhpzCmwYGZAVV7TiGixrFF+ZEOYs7mQN6a4f4mHGNttmArAU1rdDrSMzxaggzKT07PdtMwnlmJoVhtB5MihnXIb7RNrI2mOTE6PDEHKgzLZhKed7WvfK88X0GFJhDxeu5+8/7bLT5sZJjoMv9ufgfz0ss4L9rNWH0n35K/uxTWlo62jyUpo0GyPOm9snz3tALayJJWFRRbiHGNa+LY8yK26QoXbb4d2FiGlaClJjFmaE0koYW9NjR65JouSiXqOkqlFQ0jM168HW8go9HoB9Hx/gyLPeZjqlIcJv+S0lFRuuARHfVlL6G8VlYQkUbpJrSHZCe8HQMlLnL0svalLvL08vbCIzdvAYjjTXmpdSXsYZBSdroOkNgsKQQjY3VMstb4WscaxVcbgbS0grTRhPLXv/T2KTO6FcNOzqY62gr+5K6DgnEjw5mgj0RKL20jlYaJFmJpRYpkEng7Orhj09JqZmVac/A3xJlQTQ2l2y8mO/CMwzV2wO2iOdxHW+PJxK0h3HET120kG5giawnG8PQB2Yz2Aq2n12wabaePIP354P403wan83f5af5edFY+KXxsk/2xw6PHRG7O/aDWH/c+LjlcT8a9Y1Yo4vRw7jdKDTuMO40HjdeMd42DhpVxjnjvHHFpbsSXEmuTFcrV3tXJ1eu6y5XsesR13jXfNcbrh/ieXy9+Oj4hPik+Obxt8X3jb8rflL8gvi1CTRBJOgJEQn1ExomGAkpCWkJ3RLuThiWSBOdifFucFO3w+10R7pj3I3dTdzN3K3cHd0j3RPck9xT3DPc89wr3C+5fe5t7h3ut9173fvdh92nkjomeZJykoqShiTdkzQi6cFm45tHvxD/woyfSa2oja69obZjbafa7Nrc2jdr/ZeGXDp/ufPlny6fv3z5SuKVkivjr1zyX/Kbf2zYhVthoPF0AH2ZNWH5bCybhLabxVaxSvarLcyWz1vwQn43n8pn8jm8kv8gQMRJ+XK5fCIW0HYjY9+OvRIHcRPiyuN+MmIMl9HNyA/abhDuFTYbe4zPjC+Nn4wLLnBFoO1SXVmudq6Olu2Gu0rQdmWu8qDtooK26xHfJ/4OtF3ZVduFo+0aJMQFbVeUMNSynesvbJd/1XZl7nL3uqu2+wBtdwht1/6q7YYlDUfbFaHtol+YgraD2nq1sbVt0Xae2ptqu9YevHTXpZ8ud7Rs9/sV15XiKw9dmWDazn8cwHYOcQCA3xj85dz7rV+KMn9HJBXA/qn9oP2A/WP7foBLlZc+/OO3pL6/AeCc7VwPgJrxAKdwiaypVxNeo9doNY4atcZeo9RINaKG17AaWgOnzX6C6snWcRJizJnhVvi1M+0AzhRUT6t+HODY8GOPVG+r2Xe8WfWsmkXH1h5beHTh0ZVHpwMcXWNqH4s++o+jg/As86jnaMujTY50PdLlSMcj7Y7ccKTlkcwjKUcSjjQ6EnmEVH1fVVP1bdXJqq9NVtWeqp1Vb1S9hqF3qlZXbazqUpVTlV3VpCqhKr4q7sRizG+7qdf4DED9W3E6Pic9Ky2RFgfaGfEkgPZFeAqA43S4He0EbIg5g0lbnNjn0VKDMa47X8RXonyJoyVFU0TvPywlC+s4Sl5jv8++x34aLyZxZozaMIj+8G8/6jj1OTxuU/fg8T0r5j31E0t+EdBwOP+S+7sJ9VLw7Ld/X9K/MCvVA1fDH/2Fzg4zT4cDaxCBaFwX7+iqddTmo92eM8+0ZdaxPJjIYBVMgsnsLlgIp+ApmAXTYSm8CM+DE6ahYZ+EefAD/Agz4RmYgl7CETgHy2Ad/Aw/wXlYCS/Be7AHNsBgGAJlMBQ+gGHwLrwPH8GHsBf2wTdwD3wM+6ESXoZ74XuYA5/AATgI98F3UANTYTjcDyPgARgJo6AcHoR/QDH8E0ZDKZTAQzAGvoWHYSw8Ao/C4/AYvAYrYDyMgwnwBJyGM7CVLCTPEEoYsaEXUwuXyCKymCwhz8JluEIEkdDX8ZPnyFKyjCwn5WQFUYidqMRBVpJVcAF+Jc+T1WQNeYGsJS+SdWQ9eYlsIC+TjcRLNhEfqYDf4FMyjUwnr5BXyWbyGtlCNBJGtpJtRCdOEk4ioBq+IvVIJNlOdpD6JIrMIK+TN8hOsou8Sd4i0SQGNqJP1IA0JLvJ26QRaUxiSRx5h+yBi/A7fA3HiUFcJJ4kkHfJe+R98gH5kOwl+8hHJJE0IW6SRPaTSvIxOUAOkk9gG0kmTdHPS0U/7yT5VEwT08UMMVPMErNFmZgj5op5Yr5YIBaKZ8Qi3kQsFktgjXhWPCeWimXonJeLFWKlWCWeF6vFGvGCbbhthFgrXhTrxHrxktggXkb33Ss2CZ+oEK/YRtoeEK+KzeI1sUVsFdvEdrFDvC7eQAd/l3hTvCV2i7fFO2KPeFe8J94XH4gPxV6xT3wk9otK2yXbZdsVm58DJ5xyxm2cc8ElLnOF27kqPhYHxEHxqfhMfC4OicPiC1EljogvxVFxTFSLr8TX4rg4IU6KU+Ib8a34TpwWNeKMOCu+J5+Rz8khcph8QarUCMkphUsRUj0pUqovRUnRUozUQGokNUafLk4yJJcULyWo9dRItb6qq8fUavUr9Wv1uHpCPameUr9Rv3X84rjg+NXxm+Oi43dHreOS47LjisOvgUY0it5hE8ktJUnJUlMpRUqV0rhbjVKjpQnSE9JE6UlpkjRZekp6WpoiTZWmSdOlGdJMaZY0G73LOdJcaZ40X1oAn8ExaSEckp6RFkmLcSV7Fle0pdIyablULq2QVkqrpOfhMHwBVXAUPocvpdXSGukFaa30orROWi+9JG2QXpY2Sl5pk+STKqRXpFfVGLWB2lBtpDZWY9U41VBdaryaoCaqTVS3mqQmq01tc23z5BzbWPkmOVfuIneVb7aVyN3kW+Tucp58q9xDvk3uKefLveTech+5r9xP7i/fLhfIhfIA+Q55oHynfJc8SC6yLVBT1FQ1TW2mpqvN1Qw1U/1OPa3WqGfUs2oLNUttKc+UZ8mz5TJ5jjxXnifPlxfIC+Vn5EXyYnmJ/Kz8nO7Rs/Uc/SZ5qbxMz9W7yMs1ptk0DnHOx8g58gP5kRwhP5GfyXlygfxKfiMXye8kjdSSS+QyuUKa4S4MHWtKKaM2yqmgEpWpQu0knarUQTV0VHXqpOE0gtajkaQ5rU+jSAbJpNE0hjagDWkj2pjG0jhq4G5uBu5JEkgLkkUTSUvahLppEk2mTWkKTaVpele1ldparVKPqF+q36vn1B/UH+V3aTOaTpvTDJpJW9As2pK2oq3pDbSN/J78Ph1LH6WP0cfpODqeTqBP0In0STqJTpY/oE/Rp+UP5b3yPvkjeb9cKX8sH5APyp/In8qfyZ/Lh+TD8hdylXxE/lI+Kh+Tq+Wv5K/l4/IJ+aR8Sv5G/lY+LdfIZ+Sz8vfyOfkH+Uf5Jy1H/lk+L/8iX5B/lX+TL8q/0yl0KnfycLlWvsQjeD35snyFR/L6PIpHy34FFKJQHsMbKEyxKVwRiqTIiqLYFVVx8Ia8EW/MY3kcNxRNCVN0xcldPJ4n8EQlXIlQ6imRSn0lSolWYpQGSkOlkdJYiVXiFENxKfFKgpKoCcWtJCnJSlMlRUlV0pRmvAl3K+lKcyVDyVRaKFlKS6WV0lq5QWmjtFXaKe15Ek9WOigdlRuVTkpnxaNkKznKTUqu0kXpqv6k/qzcrHTTJE3WFM2uqZpDuUXpruQptyo9lNuUnkq+0kvprfRR+ir9lP7K7UqBpmlhmq459Tz9Vr2HfpveU8/XbtJytS5aV72X3lvvo/fV++n99dv1Ar1QH+B83DnOOd45wfmEc6LzSeckpVAZoNyhDFTuVO5SBilFyt3KYGWIMlQZptyj3Kvcp9yvnleGKyOUkcoDyijlQaVY+YfyT2W0UqKUKg/RmXQWnU3L6Bw6l86j8+kCulD9hT5DF9HFdAl9lj5Hl9JldLkyRr2g/qr+pq5QV6qr1Of1bs57wnaHvR32TtiesHfVi/SMukZdrb6grlVfVNep69WXeEs9QU/Um+huPYmedQ5Tf6ff68n0HHuCPckms6fZVDaTzWbz2AK2mC1Fj2Q1e5GtZxvYRraJvcq2stfZm+wd9j7bp6fpGXpLvY3egf7APmafssPsS/YVO8m+Y2fZOfYj/ZH+RH+m5+kv9AL9lf7G2/J2vL26QX1Z3ajWqpfUy+oV1e8AvTO9SH+ntfQSvUyvUD8DRhhljNmcwDhvypvxDrwj78Q9yM/hubwr74Y7sNt4b/SRBjCD38UH83v4cD6K/5M/xJL5WD6OT+AT+ST+FJ+CHtQMPouX8bl8Pl+I+7Yl/DmWxpfxcv48X4s7OC9/hW/m2/h2vpPvRl/rQ76ff8zS+UH+Oa/ix/hx1oJ/w2v4Of4z/5XXcr9gQhKq0EW4qCeiWY1oIGKFIVwiXiSIJiJJNBWpoploLjJZa5ElWom2or3oJDwiR+QyWXQRXcXNopu4RXQXeeJW0UPcJnqKfNFL9BZ9RF/RT/QXt4sCUSgGOG3iDnWTWlFnH2ZnKnME7CMGiiIxVNwn7ldfdVCHcNgdYY4IR5SjoSPOkeBIcjR1pDqaOTIdrRxtHR0dHkeuo5vjVke+o6+jwDHQUeQY6rjPMdwxMuxY2PGwb8Jqws6G/Rj2c9gvYRfDLutEZzrXJV3RNT1cr6+vcd6nr9Nf1n36Zn2b/ob+lr5H/0Dfq3/kHOl8wPmgc7RzjPMRvVL/WD+gH9Q/0T/VP9M/1w/ph/Uv9Cr9iP6lflQ/plfrX+lf68f1E/pJ/ZT+jf6t/p1+2vmoelSL0RqQL8lRcoxUk6/I14rfDnZip3Zmt9m5Xdglu2xX7Ha7anfYNXuYXbc77eH2CHs9e6R+hz5Qu1m/kxwnJ2wXbL/afrNdtP1uq9Xv0gfpRfrd+mB9iL2+PcoebY+xN7A3tDeyN7bH2uPsht1lj7cn2BPtTexue5I92d7UnmJPVT9S9+Ne+GP1gHpQ/UT9VP1M/Vw9pB6m39Lv6Glao74Dm8BHp4l3SCt4FTbDbnISKuAVeBv36xPhTXia3YYefW/0S3upn8M7ZCaZpb5LWus3k1OsH+vPbmcFrA/rGzYk7I2wnWF3h+0KezNssP2K3a8C/EK+UYlKSRuVqTa6yzYOdqi4kVEl1amGOz5y7HdUOj7Wb9G7a4O0In2ec7LzKedQ5ww6HT2DxXAW3oLVMJd0htkkmzxE5pC5ZB4ZA1vIY6qixWpxmqG5tHgtQUvUmmhuLUlL1ppqKdot+lB9mH6P1l3L027VUrU0rZmWrt+r36ffrw/XR+gj9Qf0UVpzLUPL1FpovbTeWh+tr9ZPy9Jaav21HtptWk8t3/k07IRdzinOqc5pzumiRJSKMXSPuhX9mO3qDvV19Q11p7pLfZO+S9+j79MP6Id0L91HPzLvnNOP6QF6kB6lx2g1/Yp+TY/TE/QkPUW/wXl/I87zPrwv78cM5mLxLAFn+xA+lA/DFaAnz+e9cP4P4kXo73fnefxW3gNn8dv8Hb4HZ/Jevo9/hKvCaF7CS3F9eJAX83+wZNaUpbBUXCce5Y/xx3GNmIorhfldy3RcOcazNNYM14s5LJ01Zxksk7VgWawla4Xz/zz/hV/AteAMP8u/xxXAiWtAhFkmrgBxYjiuAiPESFbDTiPO4IzPxjl/kz6Vp+vTeHN9Os/QZ/BMfSbP0mfps3kLvUyfo8/FNaaaf8W/xnUjBVePZFw90nhXkSla4GrixpUkHdePDqKjuJGn8BR9vr5AX6g/oy/SF+tL9Gf15/Sl+jJ9uV6ur9BX6qv05/XVrDW7gf3MzrObWTd2C+vO8rTb9Yf1R9hj7HE9Tnep+/R4fbw+QX9Cn6g/qU/SJ+tP6U/rU9DLFRD44go/uC0K/BT0tR9MZDYuJFmxqw4tTHeGR9SLrB8VHdOgYaPGsXGGKz4hsYk7KblpSmpas/TmGZktslq2an1Dm7bt2nfoeGOnzp7snJtyu3S9udst3fNu7XFbz/xevfv07df/9oLCAXcMvPOuQUV3w+AhQ4fdc+999w8fMfKBUQ8W/+Ofo0tKHxrz8CNjH33s8XHjJzwx8clJk596esrUadNnzJw1u2zO3HnzFyx8ZtHiJfDc0mXLy1esXPX86jUvrP0/7di5DgFhFAXgO1uM6CQqjUqp0YtErZB4Bs/gleyMncGIfTfGErsHEeP/4yE0597iVqe9yflS6YyUzeULxZJWrlRr9Uaz1dY73Z7Rp8FwNJ5MZ/PFcrXebMncWfvD8UTny/V2fzwhdZA6SB2kDlIHqYPUQeogdZA6SB2kDlIHqYPUQeogdZC6/0sdSdJe1FnpVdmfDLLW6/1dyaSE6FYV0eWQRT7yiwK2QckIyzh5zYtHIz5ia78V6xMTgo6QoIVJsLnYyH6lRdxtPF+9ZwtQCmVuZHN0cmVhbQplbmRvYmoKMTcgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA0ODc+PnN0cmVhbQp4nF2UzYrjMBCE734KHWcPg22pJScQGoYZBnLYHza7D2DLcjBsbOM4h7z9Kl2zPbAGf6CSW1QXVpevx7fjNG6m/LHO8ZQ2M4xTv6brfFtjMl06j1NRW9OPcftYCeOlXYoyF5/u1y1djtMwF4eDKX/mzeu23s3TSz936UtRfl/7tI7T2Tz9fj3l9em2LH/SJU2bqQpm06chH/S1Xb61l2RKKXs+9nl/3O7Puebzi1/3JRkr6xpm4tyn69LGtLbTORWHKj98eM8PF2nq/9umHaq64fNzx0pbsUgDK20Uqa5YaXtIlpV2gCSngA5n1cRKV0PyrHQWUmClc5AaVjqCtGelC5A6VrodpMhKt4fUs9K1IllxBBJ8WXEEEnxZcQQSfFlxBBJ82R0ryUMSkyDBqo2sJPiyiZXUieQqVhKCzrEpKUGyrCRk7xwrPbJ3iFjo0ZALrPRoyO1Z6WHVIU+hR6oOeQo93BOxMiBCCqwMOJ6QlDAgL0JSwoC8qGVlaCB1rAwwQQhPGD5MDKwM+Fd9xcqACL2EBwZE6C0rAyL0jpUNIvQIT9ggQh9Y2aBHL92BDXr0O1Y26DF4Vka4DwMrUyM39t/VfFzex4jRwRBv65pngswhGQaPMTBOSUfVMi+PKpPf4i8DSywDCmVuZHN0cmVhbQplbmRvYmoKMTggMCBvYmoKPDwvQmFzZUZvbnQvQUNBVE9GK0FyaWFsLUl0YWxpY01UL0Rlc2NlbmRhbnRGb250c1sxOSAwIFJdL0VuY29kaW5nL0lkZW50aXR5LUgvU3VidHlwZS9UeXBlMC9Ub1VuaWNvZGUgMjMgMCBSL1R5cGUvRm9udD4+CmVuZG9iagoxOSAwIG9iago8PC9CYXNlRm9udC9BQ0FUT0YrQXJpYWwtSXRhbGljTVQvQ0lEU3lzdGVtSW5mbzw8L09yZGVyaW5nKElkZW50aXR5KS9SZWdpc3RyeShBZG9iZSkvU3VwcGxlbWVudCAwPj4vQ0lEVG9HSURNYXAvSWRlbnRpdHkvRFcgMTAwMC9Gb250RGVzY3JpcHRvciAyMCAwIFIvU3VidHlwZS9DSURGb250VHlwZTIvVHlwZS9Gb250L1dbMyBbMjc3XSAxMCBbMTkwXSAxNSBbMjc3IDMzMyAyNzddIDE5IFs1NTZdIDIxIFs1NTYgNTU2XSAyNCBbNTU2XSAzNiBbNjY2XSAzOCBbNzIyIDcyMl0gNDQgWzI3N10gNTAgWzc3N10gNTIgWzc3NyA3MjIgNjY2IDYxMF0gNjggWzU1NiA1NTYgNTAwIDU1NiA1NTYgMjc3IDU1NiA1NTYgMjIyXSA3OSBbMjIyIDgzMyA1NTYgNTU2IDU1NiA1NTYgMzMzIDUwMCAyNzcgNTU2IDUwMCA3MjJdIDkyIFs1MDAgNTAwXSAxMDYgWzU1Nl0gMTEyIFs1NTZdXT4+CmVuZG9iagoyMCAwIG9iago8PC9Bc2NlbnQgNzI4L0NJRFNldCAyMSAwIFIvQ2FwSGVpZ2h0IDcxNS9EZXNjZW50IC0yMDcvRmxhZ3MgOTYvRm9udEJCb3hbLTUxNyAtMzI0IDEzNTggOTk3XS9Gb250RmlsZTIgMjIgMCBSL0ZvbnROYW1lL0FDQVRPRitBcmlhbC1JdGFsaWNNVC9JdGFsaWNBbmdsZSAtMTIvU3RlbVYgODAvU3R5bGU8PC9QYW5vc2U8MDgwNTAyMGIwNjA0MDIwMjAyMDkwMjA0Pj4+L1R5cGUvRm9udERlc2NyaXB0b3I+PgplbmRvYmoKMjEgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxNT4+c3RyZWFtCnic+/9/FAwkYAAAMDB+kAplbmRzdHJlYW0KZW5kb2JqCjIyIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMjE3NTEvTGVuZ3RoMSA0ODc4MD4+c3RyZWFtCnic7L13XFTH9zd+Zm7bArt3l4Xdpe0uyyKyICgIokRWARv2gqASsfcotthFTdQYa4qmGU1iS0wUQSMaE01Vk5iY3qslphhNYvJJYtj7O3N3F5G0z/f5fV/P8w+s7z0zc+femTlz5pSZiwABAD1UAQcZo2bPdHbtlXoYS44ACGPHThs35ffJrS4DiImItuMmzx17ruybbQBhwwDSlo4fM2L0GXjvVoDcz/Ge7PFYYOhqnATQ3ob5xPFTZs55Lu753zCfB5ABk6eOGkGjqgYCTGR5fsqIOdOMeRzee58P6zunTR8z7a6R7V7EfAW298qoKSOmbf/xVj3AQ6kAsf4+A9Lb/HRh4T6AZzAPFcJhsKvYAdF8EmCbyleIC4z6Jyjfs2v+qcqX9EusfSCIwM8ROAqroRZ24GcfyISH0TAXbsfPs/ANrIKHYQPZDzNgHmzD9FPkaToNhiCXrDANnocMwimn4XFYSMJBBDOchFNQAhuUdSQCeWmHApgOh7gT3HvK96QLuQkoxEAh9Icnue/hfcLTGwSbMENJAwG08BKcoj2x3yaIhBzoDr1hGPZpJ/b1RfiIJAsFymfgAh8MwJbnwlp4BF4m6+gYOotu404Ig5T7FGwFn6SBJOgCE7DWDLgZ7sNxXCI6EkGeJec4G/+A/0f/bwrOHLSALOgERTALR/MCvAIfwDn4lQwiY6mXDuSm8QI/TolS9mOf46AN9MBPLxgEFbAAFiPHNsM++gi32v+C/z9AUGY4SMNe50B7HP8Q5NUp+JCYiJ14SAvSjQwgE8hWcpVKNJcuodvofziBS8ZPNvcId4D7hPuM+4Hvxs/hz4t6JVkpVsYrc5QtylHlC+SpA5KhJz5zGNwII3BUN8MSWAYrcbYewM9m2ALb4Umog0NwGN6Cz+AL+BH+QwykDelA8shYMpnMIXvIAXKQvE7epOV0BH2YnuLc3BBsexsPfCHfl5/Bv+kHfzv/av8+/2uKQalRjivfKfXITQfy3IMcTYNSGIMt3wob4F5scTfshWr8HIaP4GP4GjmnxY9MLMRKEklLkkbSSTbpS/qRIWQcmUnmkqVkLVlP7iUPkGpSi715hrxIPiQXyGXyI3IG2Uz11EgdNIGm0jTaivam4+gKup4+Tg/QI/g5Td+m79OP6Dn6A/2NM3EW/CRwSVw3rgc3jJvKzeHmcou43cjPV7jPeR7nz8gn86n8Lfx2fi//Ov8t/5ugF9YKdwr3COeEcyKIsniD2FccL94t1okfSJzUTxorLZIWS0ulJzWgcWsehxpcHftwpI1+6DB4CN4iz8CnZAdnobtJX7qTbCQGzgaTuPvJG0Ix3EbzaDXpRaO4n8hsMhsiuUfJFbgCT1Kevk+8/E6yFY7gSlpNJ9E5vJEM5h/l68lM/k2eo2dhB/2etSNa+J3Y2mwAMoV0xNQ4mAIPUgu8QrfhLFTCc/CgqKXrcd7XQRLtBm1JdzY39BJ8i6vDRPJhIq6TevKIMJM+ROZxF2gYlJB6+hnpIMyEsaIMS0gt7c29Qs7iyjuC8lJMxtNcMhLq4Tx5mJyng6AXXQaP8OOEt8knxEt6C+NR/oD/nOvOjaUR9Clo+rMX9uNKOAU9uRMwjNyBq/8U9UJ3OhU2c0+Tr2E/WcCP48ZjL+dQnizDtfA41HLdeD10hv3cfniG7OLeJV7Yy88hN5E7laL6cvhZ3MHv4fYJ2Xys8rL/Y7KdnFYO0x8gR3mZG+QfRx7g7bguF+DqnY4c0sNuvP8B1Bg7QIMpD67HtSivkajbtLjKu6Dm6gk3kh9xxSxDLmWTZOhNE2AS7SQ5RQuA1AIeU9hKvglakg/5XagfDvOV/DL+FwBf50EDffkdb8jr0D63XU7brMw2rTPSW6WlelNaJrdI8iS6E1xOR3xcbEy03WaNirREmE2y0RAeptdpNZIo4PQSSC1yd6lwVidVVPNJ7m7d0ljePQILRjQqqKh2YlGX6+tUOyvUas7ra/qw5tgmNX2Bmr6GmkR25kFeWqqzyO2sPlXodtaRIf1KMb2m0F3mrL6opnupaT5JzYRjxuXCO5xFtvGFzmpS4Syq7jJ7/KqiikJ83j69rsBdMEaXlgr7dHpM6jFVbXVP20esHYmaoNai9vsoaMKxV9XR7sKiaru7kHWhmvMUjRhd3bdfaVFhjMtVlpZaTQpGuUdWg7tztdGrVoECtZlqsaBaUptxTmDDgdud+1KPrVpdJ8PICm/YaPfoEcNKq7kRZawNkxfbLay2zjtru5bFh5sLSlc0vhrDrSqyTXCy7KpVK5zVW/uVNr7qYt9lZfgMvJd6ulSs6oJNr2ZctKVjR1j32VACgxrjLmIlFROd1Vp3Z/f4VRMrcEKiV1VD/7mumuho3yHlc4gucq4aWOp2VefHuMtGFMbus8Cq/nNr7T6n/foraan7ZFOAm/sMxmAiLLxxYkzDNTWlVmep4v4N7CSsR+7uKAbVzlFO7EmpGwfSjn2NaQerRrXDavhTRvCu6tE4DROqtQUVq+T2rJzdXy14ZLdz1c+A0+6++N31JSOCJaJH/hlYkglHg4Dh9VC62uutTklhciEV4ERiHzuq+bZpqbPraLZ7muxEguyDvqV4W1n7dOS5y8Vm9fY6H4zETHVVv9JA3gkjY2rAl+4tq6YV7Mqx0JXIQexKVehKw+0VbhTf/cD8ushqTVLDP6McFVE0vn01ifqHy2MC14sHuIv7DSl1Fq2qCPK2eOB1ucD1dg3XgqnqiIJSLoYGUzSGU6+iJA5rqMwypWHVvAf/iaokj66TNCiKaglxdqmWK7oFvst0Ltd/eVOdcpndpZJrtwW7Wd3ee32+w3X567oXtorDDvNJtHjgkFWrdNdd64J6Z9WqLm5nl1UVq0bUKVUj3U7ZveoQ3U63r5pWVBGa0Trl8O0x1V1Wl+EgxpP2KK0UOu9zk5X99vnIygFDSg/J6O2uHFhaQwktqOhcti8Rr5UecqKqVUspK2WFLONkGSgmKOg1VKPWjzmE/nKVepVXC9T8qDoCapkmVEZgVB0NlMmBhpLUhnzodoyq4wNXfKHaPJZpAmVVgdrJwdoavCKzK4cBVTmoFwM/TFUUDCxtLA/qIitLU50GJmUCftA6StBjHyVPkVboMUs0pwYEvo602s+BTmKJAwTsGlFg1ylwpKBWO/QZm1f+Ja8+r7d8Ja9XfR7kY1r+A79aZ7hMLpMHvwh2+g8nd+wPnwBXwckfQ7eB8FwtNaPvL0ClL88H2wQ6TSACT3giJFNCCnnOwvOcQCh+A08kym/gyHqaDMLbHJeMrT8pgV0ceovN21s+20s+C/nePJDr87zyWfkimMy5ucRktuauMLTyCgvlF7wmtSC3dQYpryQROZkSR/iwrNfaTuBqifnnn/3f4zy09r9PxqOHoIXePlOi1FaikqjlNLzAgThRqqNLa7TA1dH7fGZKSRHouL20iOyFXrop5xkXrtRjL3D0F+W8Xy6arLnEnAvySdZiJrYnilJOds5U72uehHUjTDcnnap9aKO+j6sO2x1O6ugTdAry3+mTyXyge7n7BHywnZ/dmY3vSq+z8i9nIf1i64yIHJc0PIkme0jdAQyUCDAf7CbsMwf2J1mfsEd15Eot35516cpFyMebWPOzvadST53C2cYI6Ct+uXAMY5lEmOaLHGy5WVqODqaJ2Gzhpiw7+3LXKRdqkTqR+tIxcZt8i4sm6efKM11cvi3TNcYywT7OLcQ7RSHKaQw354PdE5OvjU6aO4h1+JdeF1mvWeusfVJeXu7FH6gsj8gyd6SZbdD/YMx1J9AcizUqs01OtrltVpI7QZTws2HqyjvWlOz6ovewbYse2n5mb9oNcyaULFg4d1S3hbn98jLJF4dJ1fmlN/z+3U/f+8+vmUS4kyt6Thi+nArbHlzdY8ji+vcZX+agL7gYR+mCrQd7G3vHTojmDHXKq75eBlNWmBO/WhgToz2xuVy2Mdfsi+scX0an6MdHjI2uiKmIHRU3Mn4+nc+toqu4O2O2i3Wc1eGEuBiTLHBibLTI845wp0VwOnAxP+mCMOcvbvkwLiMTOe7D0DJBl2+Ldt+2pxErrlyUz6trI59JhrVBFpEp5ZkdKUoGfoIsaJGdjRxiLBIFlBqXNCd21LZv1mYVJ1jXjR93n2tf9NWnFr4ydrzPf2L5Mhdd7162b8tTldm9izPzxqxZ92D081+MPzL6jhUD/zNxZd4OxotpOOOzkBcpcK/PkN6CWJxGU5aWMSEKWVKLlGOssWIix9qmRRHtYuUTdCgJXKSR9IA6MshnSg7rYXTqdMmRzliBdyaHo5SBLwzsXinfs9mRbic2xgA7OXnQnO+ITg0Nvv7KxXIUw2vSYM5Nv3hWrj/LFmeIBYwJETlRKAcBFkg5DckQNyItosRYAu6EpGnVltumLn/+jvmGVEe07f6dt40acX9UTervu/d/NnduySD/B6eO/0yqou679diCyWv4Tfymm8asWrMk8cBLH26Z+URu5vryF/2ffcb4shb5cpewAyPI5w50sd5spY465d1a2ZQl1Cmf+3KRHeFZ+GXXtpFvi+BaWD2OLtZNMS9ZBaspyhKZDB4i6znZYDZFRTkjzJaICLM12qAyzFTrMuRH1xF9jbmHqY7M8YVFREblWyJ4yekKx4KrPq2Zy/fYW+jz4+rorbXJbN2E+JSucorp0for9RdVXuWuEFp5UY0xxcZEB1lnysxcYXhBXVxBBoqRFpWHDZyLcEkuLsg+yiPnktpmraujBTN8A/dM3jC7z5obHvyEvuquf+umjsuKdr1/l79+46LnRpBHzC00nZd3nfnplPl39eypp9/v8N+elvbps4/6z9w7/cRoHVDlPVxdl1B7S2CArb4uGlGkokYjCVpdGC9qDGFhkqgxClo5bFMYoU4UjHgpzCJJYTSM5+M5auEw2pCMGHNwcthVtK9ajUsQ68hTPoMkocLnQBP2qHHZUpvXLl8BW36ezD5X2PLJu0hwAaE2X9HKu2LhCyta2byqeld5krtCNrwgvPDCCvVbkvNWyMghN8mMcHMujri4pBai1JLL/+rHZ7rW7/2W5JNzuS5Nmwrh8O9dyA7/EHoDmfbRHYueQNk4rHwlvC+8BTGwpXajhkSgRNTiqrEwyTCgUMhOlBOTE3WjjRW11puyeJvFRpMs+XIXbo7MywZLVKRdNhtzDXfoSe565szx5jQ9Z0/jtTAfVf4In8U43xCVkiGRdIlIWbGGgrisArZuzstXyit7XZQvXmlYNOW4aK6YcIxoVQLrRl04OPHEKoLbCSY5ItvVhrdKSUlupySaLEwU+LeeG+bf+pH/Z//x798mHb4mLuvBuAPr/D/tWP9pzT2/UD7G7/+DdCEZZDXhvvr9LdOWzZde85/78vuXmKUYin5BDc6yEZxwh6+H1YmDjGVfYHFaMizVFt5IjE6qJfpYB4mJdTjTSbpT6ioQpyzHA8GAlTicLkKSKY3IlV3JRtBEp2j6Jch1RPKZjJCObXRxTSOEyNCln82b7s0rJ7gEypnO/IUpjDxvPZxFyy7XQ56wQl0CrTNwyOXllV5vJnG1scZTlG3UkqLbw8wI+zD5b5Hkdg0lbcjhLQPnPFYy6Ymnl4xc53/vwuZ5PbO7tu85dEFF143+euGw1bHl+7v2+T/5ZGG8dUec2Z3WY+TVrTVHHVacrVnIgkk4eg7u8mllgWhJvkBRMxyrTUrJUqnNrVJfC0tkFuW44JBpMqFcMmgo1XLcVtASjO19Znc+AKtrik7IkvHpD/JaHLX1wU02nMQ84p3XW75c7sUgjuXSvfN6yT+wDKZVzwYRVAGtM/AGZEAmySSzSObz/teY9CInn1K+EluhxMrggI2+6BY0WU/nRtxioTY2ZdcmTxVlvZwVz+Q2HgvECG1sVERMLJ9MutkGR3BxaRwXmRaujU4R2SgT22WpNCZBpT5rlDWrSiRiP5cpJQOwfwSynFn9VEeFSS1OHRPNxtZfldRy1FEyuFBSLZI6YQmJaP0DGgutP3UnwFPkRVJAzKRscKeXKjfuqvZ/dvezk96eVfnqQ+U/7z/v30rHkpXknP9+/9vvHrzteHa3XSRt65L35006SqwrPiK8/2YmtU8rpWIG8sEGreAnn6Ws5QRhbPQt0Xy2PSOaRjOr52IckAPUp8WCeMYXD8sVImNET0x0THyUpypJSDa0NLWwLm75OwhJgFqn5fzo2a6vQcyD9jTPXuTl01K9nNvekqNRseinCvaWLVLTvHWkrc/UgkujuZIjDQ1HmqSNTYkK8jIqyMuoBl5Gkah+Ge6UjDCSHkbCstL/gpf1Ki/RQMjoWTJNd80MWJkyqCwPqYPKck8U6oAWjL1JtG0WLoec7EzGdOoJspnHJaM6XUkt0Ojy7/ZYNPjWiXevmOz37xnV/YbnZ95bw6agzn9+7sYr++7yf7/tvjm3TRk8tKJrpwmzS/vPHLygS/8dRHjw6N71b+QWs8n4xH87fyPpXvMpEZ7w17z4nxUTEga0mRfbi81GBeqQ93AVWdHbvORb4mJqM84ZZsoarCfhBoNeNpuNUbZEa4wtKkIrODwRUYlWa3AlmY3GeIPegrXMRj3nMSQ59GardnlUTIXNhc5AJLgTXRgsUKsx2WgwgCYxUWu1zldXnJGp2wMerSPFKWagcSpIYqttXUFgtSFbkbneefKPuMbKAwuu0XpDY+OV8wLaJw91L6qfs/K5QEiRy4KKVl4DrkRckKrxAXMg1pDy8pj9YQj4NUxBMacFnWScaLRBqJaS3G4uwtUmpyPODWZcFSSTjnvyyKRv/Ff7thzWbtpHE3K7txk/6+zKR4nxSO7Utb3b31jpTxAO37CrqvY7d4fcJav83xHTXZOL0+tncSmCvvctPX3DE5g3sx4t1nCU+xz44BCkooSjbUphMs08+jDG8pmtlrak2Xy2pp2L02YTnl3MwosuZsYk9uVJz067S88Zw/Upqa3EqLZxubGQS+Lioghp606L4sS0tloMUOpIB194ixSnOcNMjeZpZmquo5m17bQprZlQ67Cp1sfjUqIrYllWTkjOcsZmxNL02NOxn8dysXX09trcEzgV8s+oxq/UX/GiWJdXNjJ2ptx0DONUHzHoIaLyYCQiR7IE/cQWSeyDHk2DtyxltWiF4i0xP8iqfhjv0e9JXH+M9t6/oPpQ6zafPZE/6sYFlzbW/jKVPK23DLxz6Naywnbds55/MK9vyQYFtv/mf5F8aM4ctKbXfaOKcttVFCd3undk5ZMVc04M1UYaO7pvGJjZLWdo9qCWcSVdkttuqrj55E0fMO4rKOfbVI9oiy87hhInOKVsdHM4rYaIHE0WJSko1QJ1oeMjoYUQRa0kMXl1EGYkmGJwJWSpZiIsNj4rHTKgGs0PsvvFJzWquVh3iFAIWYyg9HqZ1bxegL2BODxoMbzBaDg34Da4iAuDSDTLbxCj3+Hml7r9bv8PQsTOnb9fZJF5Cr+TzlPt3g2+mCqK070OtpJqcgx7Dhj1cxsIGJHUkZ61xM6fOkTnQyBKrS/HCSwnwXYIlxlBLj7/8Ux+J4nwX0RdMES5wGfzHaEFtIVnff2GphGPzqN3h3lS25MeREzX5GoGu8a5+KzUFD2fnpwUzhnBE+9O9nIR4bo20cleb6ou3KLThUclOqzE2j/CES0l6do4OL211IhatI4874tPd4pJ2UZnPJTK7mlu6lbifSZzFsTL8VPjufgjdA4ukCT8Vv2scm+vX8rRz1J7jykmgPkX68vPsn0DQ9Dhzg3xT41ZAiKJ4ugRUceq8peTnZijSmRDvMI22CUOBdHqTopAY2dAlasaOk6+cc+oO/f3Wz7iBjKoR2Sr/LnTN7gOtvvp0IszSu0dYqMOGm9IGjz2waWdJ4wYsqPiln7FT6wou22AOcwQ16N1fmKbMeXyg7tu7DJt0DT/r4v6tLkxi5w3ylqD98bcniOHP8b0bSHyuBvOXgS44Q/fWNXexbMv3tXHMytylelR0yGT2NKU7sn3dI0siRwbKc5zEc5siUyIwE6audhETnREUOomYCEE0JsBLtHhEKWIZNDZHEa91mnOjyUQmx6bH9sn9lKsEBtbR45iLKhFNw91L2gjIupIts+uVb2DfOgDw4EHKElURbhkTCOPhwnwdHR2vmCiKwf08DGWnhe4VlkwrLR2WizJ8ZaXEXV2mGjXn73mDgUjIrbT8wL7CbqHTPlmhmIfA4cT1UKKkNQ5aNhpKCRtDkwpWd3z7uN9Zy+65YYJW9NSppClI4ZvGbtk+MhtOS2Fw/VX+nT69O0132wZnj51+kmyP2Hl2ltJ9M3L79q0eRau+RnI6yiU5xhY7dPlchMs42I2ibwaDwxCM5eru91Eh8VMkBdo58r3agTREmVpqS0gpbRUIxoTDQP0JDEDDeR6tsZ5s0Mv2R28Hkqd6I5TctkQ5ZSSYo2lYJAN1FAc165YDanLg3sr6CBcFxycDe6zqAFBQDLNiWz4LCBIEIMCyLkOFF7d+sR7qwjZvvtEDZlx45StQ+eUlj5ElkUcf/bzk3tI373PbgkbM32V/6ulK1cuR4majKM8qUYBDth1COICvpOZjXI4ypWWEw18nJ2bEFYX/qRBijJY4lpK7siuhsEG0WIl6cSlS40s0Y3VCe1JG11eZDHprOsRKdqMxjC93qINgxiHVjIadBYH1Ye/aigNe1U2DjdONW418sY6kvikS3YKSc6kQ8QT1DKqU9TrLNtswygZgRKQjkZ3oTr35cwX8no9QQ6wtRiRSdxENRvBLRYDhp33P7rp5JZLc14aM2e//7Wd/ozUiT3mj15+y+hOkyZ0u6/ms7efI522HqUdMC58emrVoKrHfl+0tv3t77IVNhH50Qln3Q4JcOwQuJgPiQxxMM8minGllHFFTE643Xa7nbfZu0ZTCQ7YX7RzSVyq/uboFdE8sLoQEw2cmZiMcZAokwpU7EQmfTHBkwF8THSqab15K1pWM+90hElWlAw0snf4YixOTZI7zmn0WZ1ZYJSN04yfIac6JiZ1DIiHNyAfAfaowqHuJJRXng14jNbck14mKtMrmelAWQluDASExSK5xICkEFdwH4HrW53kv/T07BfHPUTg7mfOGP74kb9tVPl+fyIdSFZOmnmUTDAv+27K6Vv3kK5bvnu1d3+H/e7N88i82LCVG7biKilHo1GAfkkUvOSb6JZIMmmpz5U+i/jMIthIkjnbzPGoYvhIzhwZFWXCNAhh+jBOj455VJQbBLSZQh8DMTi1xEJTuQjkCM+JUaiNImZauJkyOoDmmZGR2qioUtDyM9GSspAE6qhlv1X7ymrUNo38vLON7ORZXDfpZ4PWUt1hYNtzlUyxhFS/OVc+KQlyXp6EUPeOUfNnRrhzMnPYNiY62kyTSJmSmyt/9uG4hx22zBmjipa5hnVsm2OxvRz38rPcfas3VY7uFPegre2o6av/GMskqK1/MH8LSlACZJK4Q5AUWFGtg1FJGyZD+Uxjt7a0prwtVzsoaUxSVVvB481oSz1mT2Q+5Dl4dG5SrVadzp4cnmyz2906K1pGK0kEDAApjn6tLzM83WGRbMlWMdkRrhMdcUabTWu3l2qxHnJLa11sJQ5rurXK+rqVH24lgDa1jnr2a91OGX2O132x1LkOvYUX5aR8HQEd0WUlW2WdVZelSxqObEUv2YuO8rHySnIebec5ud4770eMzKcTOyrwoBo/rRKV5VhkTwcbE0uV58zrO3ttg55t3xjkFzQBFa6uYq/VKkYF9odzchqt6JxMzkADYhuBocw1rW6g7Q/SBE/r3tu6pSeb12x56IPd3y18ozJxx7vu6a/cWnVo6FeR8VMLy6qnbJjUecGknApTx46mqEG5R0vWXfyglqTe+9Keq8qjT4/vvLi/nQ6YktOr30Ii3rzs/q4bXmY+XiGq6Q6oCW3E4ru5K0+SJOIIc4RTLfFoupMumsHcCs1rJmmcNE8zD+3sU5qnTCKv5w3UgkEM5aw2Sm02d8AL1IaFucNlS3i4HIG2lVnZcJRorRbLS8O162Qiy9r08PzwxeGvh/NyeJ/w4eFTw/nw8Dq60JcWjaZWa7OhvJsJcx2bGFq7loAcjrY23FrSkVlbL5PuxhYXpb+88R5Dg70NXpFDE2Zr2H7A+QqtjFDgIxkCiwJ/pkN5ZSOLK3HuiKD6ECWOGdpZY/YMu+UO57IDK+K6FY6sGZMyHM3rqZGDbp/ebmP9GrpsdWJW53G1x/3tUHhvwEWSqHqgEkn36XZyL3FfcT9zvJZ5xj3T22X10VZpT2s5hzZdu0W7V3tUq2hFEHiecMhKIFwylSQ3TyysZBTjrSiIUjKvQ65J0k28Vla5hnqEPdCGD6ziT/OU9+mNWfws5mnzQcYFmeatZDsz6Isc4H29WuWrt2nzk/J5X0ePmqstTgqUGjq5sNSSjF9md+BSXEaAxqYHqDVYVWthVeNaqLkauyvf2/in7E9zFFRU7PtiI89eEhppJ28lycmUSEQmR4q8+73+wk8PfMpfPHXqagSfdPVDJsPZyNs4lbd+36AKgfQRqoTTAqchDiFd2CLsFY4KiiBRjnM37GYBh5Kp7mbdFBI4MxyF14FWwWmcLp8e/evxgf2skuEN0QlybXqAaeCzmfMhxDRgTFNzhtgczCGzAvtjavyTE6DIJAgxCRiT1FJkEgS5zejBTuyi23w95xpY9/c7aMip6Wz/LBsFM7h/RqAAQKxCrZxCuvtu6GIiqT6tLmtL6lPuo6mvW0+6v6LivdZ73Xui9iTsTX3KKhYZSjSDDIPNYw2LU0UtSdAkGNpqMg1dNGIq63ifcDmLa5lCaUoK4yRxyrlompChcfHxbofT4mQFTuJwOI1mszvCYrGwAguJiLB4HKLdERamagUxxRHPHO/UOvKmL9xi1JpLLTJEyBEUfexJvnBHnBxfiuraITuog5U4gMoppUS+pg9KvDgxTtlhkSOYUAfWewBslwlJr3r8CiQbp14ggWNV/AkZSQyVhBWtUDMzNYAp2/XJazrBy5SCF01lpqSqBOtfKobG6YJPD3jGbCkfdWtkv9pRt95qXXfgjojOef12lbsnH9god8rq9ejEhAl80t7Kkgk3jh61aHrryvqB9JkST1beyC3b6+vpqe6OLN/IvQ/7dUFNnYtzaYVLvr7qSa6bJmqyaRdNCR0cNpbO1cwxPWY6igr6Vc1Jk4GLslIeo3SrVZ0rn5w7TZ2roJKWsWC6TIK6GgNfv89EKRGTw6zh4WgXmbLV1pGDNWGlMhIfqm1yTWU/RReir0jJ4RprKakjh30RjebGdk1Jqxvf6NaynT8kqs5WHZM8b34e2OWzNlUDBznOdHCA48xPYcFPICxt4Ph1vEYd/Om2FpMOj1hyZ/SKA2siuxfd/kHmOD7p0JTRq2d1WFy/kD40Mr1t5xM/+c24oEejh9sfuWcAJ8w5BCb0RwagPxKjHptqSUXCtAQqCjGRlniuzDIksiS+xDE1ssIhFghkpjzbMj96Xvx+Toh18BIGNXqjE3xp6VmQ5LI7QZKlaRInzUhIGtMomrm2WYxmhG3u48gi5JzGJ1c5zCllB6VBOz/64Kafj317l//SpgWvTDqwfmr76SOLIh0bbhq0urItuZPkvLrr8qsH/S/umvjcho33p1fM7zpq6Pot/R54HdWf8q1/At8Nx2cCF/zuSyhylPA3GodETjIK7SPbOor4XsbukYKHb2X0RubweUZBrlMu+/oZ2P45fpXZ5pC5ttvIJvjVJdptSWHtSDcyTh5vEzUuYjZRLs5KTaag+pRlQ1zAvotWh0FvSgaD1hkN0cOjaXQddfkSWdSsNZnQlK9UNSs7G4CeWkhIZuoUEnSvdGzkapGAK1X+ZzPNFG450otBWx0IlE0YGV2LkwPnhapnhYFSOUcaRIWyiLEFF3SmQr5UJMnc6Si/s/89J27auq3k6IQ5+0z26cUPHFtSUTR7TGf/BOHpu0YUf/LaDv+lHb2fqz/Kdb+5Vae+ZPjBFXd23/AmytEE5PMk5DOqH/jepz8cRubbb4teHsexowd27MyOInwmTERHdYBcQx8YChNBTGAqPi0zi1Ffd2tslhgfFT/YgP6TLIeDJSyGGoxGtxxuwSwLHg3J4SKLHmW2C2zQGo2lsnZaOC5XZKYsy/lyH3m4jJNIRvlkrQmjSdmVHC7LVtmlw7AyCRrztzdGTsyLbeDrn+3IxWvOUEOUwBzX4KZvpbpZ2Sj+jEJ3VQ1AG7xU9pID/fH+tXe9ev8PVSO2tG75gP+1A/57lo7ov3PS8hHDu5a3TZ6z/ovXXyK+rVNuev73Aq7r5k0ribx46V0d+26aGfREuaHIWSNc8c3Xcsu1d2o2aHkxPCp8h+Y4/zX/Oycm0WS+Hcmm3chcchuRDEbK6SnyLeh+lmpEfVAwjQHzjnwDn0HOUvfPzWzOMtjGBEYTFTANDf1l1FcBzcVBiaxa+1cOkbxG25Hlqgs5HU3+IQCcQ4sraMQNVrTT4VEB451mVWlNfNBulwUdUO9f+pzXGB2SX1QPISUXiL84VG5b0/pv7p/dp0d6u+EncofwSR/Mn91iV8Lb/ov+Esav3qjROORXKvx4QJ9ixGidnfQb1RcfPvfZMXF3+AOuBxK42dw8+0b93WG8ni11Z1BO1YOiQkzcyt1u26bfEc534ebqV+q5lLBEV4K7XRjvDNNzcegDIOWJNTGqfwQkEtIy2hEhCY6W+jj2Yo88k6SyEF5LSp2BczOMUX1yGtvLvKxxgkf2UM9l9VzIlNgyC6LkKPp5FIl6tlXJswFlWentdaW8/mw5JqdfRENR2bADpL5SwV4rCWxQQiB8IsFN82t75omBLXMmlYF9IXYUxD6RFlUFJA06kLGkZM6cRI//i+SCwhP7T7zB7+OrZt04Pi1+4enskhHHV9QtWUIm6Xvf1KWiU3pKynx7y6ndFu0/tCmsYlpJmzZJ0dlDsgbc3OeeoUOHqjtk39M7hF0QDSt9KT2MY42zjSuM9xjujdiprY49FnshAo014cBuBLM+1RSGfg+nN142oYWtkWeaDxM/RNCYWkupNqyOxtSEz9QfoTEorDGgRSbpE1NRWGXtOi2nraPramPa1bLXsMq9V85eYafl+H02+CZFvkkN5Zn0eCR1nG2zclgYH5HDseA9sOdBvo3vdMNkX0b0knVx63Je71cTv2++1ZOSd+ddprbJRe5FdMJqIiz0L1pdf2BalDMBx1eFcjWbT0L77vfNsmvs2rv1T0pP6r6KPGeTtBqt9paw5ba7pbt1u7lHRU0LXY5ttjRbNzNslk1MJelyrqm7iY+029DtiLJbotDLWIzTHWVnboegsWgy0O3QEEHQgMYepdVgHG9ENWe36YTo5Ci7RpCtpVHMoTDaSvPtRLb3sQ+3T7XzdowRa2NwhTNfJDbMmSGQ08LnwmWBSxfYEbbdKliFaF27Z4OKrzdbtL0uXmFbiuwURvU8UBmyYOMi+h7o/qnGg7keLFRnDqAa/xkaTuND+i4HI4/g/hE7isecm7MfPTF/U0LVgbXm7l17bpjgioqrOPDpzmPvrxlb8AgdU182KD2voMeikpxV5BUMUQg8jL7bXOSpDjb7is0tOGdYF50vrG/YbdJKbVXYdrJDd5DoRUHQRfEtdO1AwKA5UyNYNBoBx6ahmYF9a61Gw1w0HcbUpaCRNRS5EYlum7q7eplwU8k6QomiP0x6qYcBbEnV/8y2VPMCm0FM7WgaBbuq5UTVtl+jM1uziLfMxWVGoF+bg3EE6buneqgxKqsfGXW0fiufVH+w4oPKO+hidTxbMK7IwfFEY/tJ5+zEGPtZLG1p72q/OWI5V6VfHrY04lZbVfQm7TuWr7QXdBciDLFq2OjKUo/PCvRyloyGzRQeptcbIqOsVovNHh1tZW/tizr23j4a72gwRFgtZpNJr7eO0unYyCMMoyyWaHFUNOgiDtPRYKFjDkbHWq3R5lLTYXII9HR07TEd0dWRQ7W0lKA3MrqWnZrWkWd9WiO6IvaYNavVtysre/1SeV6u/6Xcb//FVm/vXTSm8Lytl/zL98iri8iqiwGOXVTZRsy5JnZgom7IvqAehga/m3yxIMFbXgnljI+MkUxcVIay/Vr1TR1CDFP3ZERQPj6lVf2Lbg1tU3n2QP1vR5J52rKd/ys+ye/2X4kfOnbKGJpSf3Huy8u/J19e/ZBObb9r0oL6jUzvg78fvxB5b4F7fAOcURl6X5gvaoVO0Ibpw6O0Vl2Kvl24qNFoww0GCUgkRBANZ5TlTMlgkSRDuEEnyVy4Brmv02lFjY5zRjDvwkDwn0FXqiWH6R0QSbh9yCj5bPrFdFTL6hGSygrGCfXcKLTHFfAV1BKZf0GTp4qUKSe4v6WKEwoT08P6dm1zElKz2u+r6WszkY+erh868p5R+f6xj8l219DxfMv6r7Zs4QZf7VU9nY0yGVeMHUdpgkO+vsvpqnAq6meRxfw83bTwC3qxiBTraJhepwvnKOEJhiaE5zMDJ2m6mRh7aftIRMrUiCTRaJSBWapMky7Cai3WyjNNLK7RsfBmbo00U1UpeH0vturTG7LgkvmSeixxxasGklfOsgDyytneMhMSyO91sZKx4mx+kArBt7Zkw4qQHEClGo9n5pDsHNHNjiaJKGVnuqTkONrhhuIl7fyznFxbW/2x1iM2tSMPu1bTZYXdwzdNr5+bU6HdoiiBU0XhME1iXhGRoICY2GvzPh0ludHnurVAcoh8Cy3BS7yA9dX9e7V+N7X+GvgyVD8xbDCr775WH83TEH4n/V3dMSnyWUq4cfRmygWOQQmFKkpoHZV8xnW4Yu7jDqXDOnR87Xwd6b1vZeA1DnawyE5GcYWUs6ESlG8y5MhZ/y/Bg1FQJRXE82PvjN0/Yrgx72eNXaP+ytIj0587yugbm88oVz+pH6f7TLqKj9difQLB+6SO/t5QoHvs6ie/99ex30KUGv/SUxiIwao0twEz6Hskkp8BwxETpDg4LpTAQ2QF4elj8AR9TLmTi4Pv+MfRPcmF1lg2HOlsmqvcg/U38DNIOtI5iGmIcsRaxG7Er4h7Eauw/ix2L3tGA2YQXuOAqUKJ8h62VyYch8OIoZgexp+BcjEX+3EcSti9PEAhlg/FZ/UXH4MhWD4arz+FZaVIn8Z8BabX430Kpl/CtF9aQwCffRTTl7C8DT4nHLEH+72SexbrzlAW0cdICj5zCKIQ25iBdDJiItZj42jLyslxuIEcVzR4vQums7H9ArX+DBiNz/iW8Qx5wu7vzXiJ+SpMP4z92MKDUo9ptgmbTB+HSdQCR+jjykAc/7bAuBFs3DjmhjFh/4N9+jMCfZzYGNjmwsa41rc/oaoJDnOZxIT0PoQP0ZGegil8T5y/M9BDOAcDGDRAbMinITjGi/xoWKAB5Qns5x5hP96H+QbMgGL+AQjjrkA7vDZP3Ag/YDnQ1ohfYCf9DtaJHngK5WswPv9exOP4zNmqLIyGgXh/K/U55yAa0w8hWNtJIT4x3uAq2CatgSXI9z/YisD730e8S44TDQLw/ipsfw7jOZt3UlJ/AZ/TD+uMQLiwfKqKGWjucuEQzusPKN/v47NWBuVw2DUKw4Jy2wDWhxBUOQtC5f1jcApxDHES8RHybC2iG6Z7IaoRPsxrsG0bylGSKq8oM0w2VflA2WDyz+ZKldnAGEpVGVPXDBHwfis+5x7Eo+LjMB+xG/Eo1rnA1guTWdbP0LOZbDGZCVFVvifBAXxONhsnk6kGytYewLSGNYiyFaJs3THZZ5T6oB2jXCZkM5ll8haijC9q/3E9sjXRQK+NVcH+xaj0HZgSlPWqEA3xooGuh8Eqv2tgP6bH8tNhJHcLFPFvwWjqh2qhHc7lJGURGxv9Fm7WHAOmKftg/t4m9B4G6R0yUTgG36v8fAc2I63k36EJ/DvoVe9WvhaAnBR200Vq+k+0KcixwDVGGRpf+5+W/5+AvivshrGY/kZ4R1FwPHewNSF9SzIQzhDF8hpEFSJF4yX3aCaROmkQyCLAFZGtBR+0F3yQw6N/z0eiHgDwYPkg4VOYxa2BDvy3MIZUoS14h0RKkWgDNqI5w7bou7CMgT0f6bRGcnSdzDWVpRANyWtTynR+UKZUyuSZ6eA/U+VjXL8bmW1g+lm1D6ijVajyqmxrkM+TMBJp95B8Xi+nyp5G8vkdPt/WVC6bUtW2oH4PrVO2NkLjZ/qR6TimI5meo7kkOVS/Kb12P8nEdXKvqodPwZDg2r4LcSdiFF5Lwn5+jut2PtNl2NbbYh8YJb4I47lYGCkOwfa+gwoxE2Jw3N832NQble+C9rRNyJYyPuH170J2VMgAjarPXoXBqr55FdJUO4p9Y/ZT3A71YhRIwXsvsXWorsFKKGLzwI+Fjfwdytc4jge5A8hvLOcHw1L1GkAed1k5xY9EHwttInenqoNG83crZ7mzKHvs3huVKcKb8IDYAUY3PI/VQcrKWP/FZ+ArHscoPKra/PUhfczmXrNC+Ub6GMf/LJzjD2KdOPhKeJmNBXnQVh1TmXrvw8pi9iypRDnIfw2jhENYhlDvWaB8G+RHSWNeqDLMeIHPFIepNvuo8AZeGwUfSeUwWBqJ7VbCV5IVy1hba3D+WyGdqbys2usqtG9pMJr7EWVrsiqLE4UlyotcHThCdpg7jutumfK+sADpOAQbu0pR7+P6Uf0N5g7uRf+M+RN3oo1PhE3iNpgrvg5z+V9hrnAG67eFfO4SriMe012UC0G9XcSJWP4fGMHkO+DLBPwZqZvyvrhFba9I7QPzU2bAQu4yDKYHIR91ST/NYygrw+BxAGUc4i7EnUHc1QjBMhgVyBMn0mROhh+QnqGZsBSA+wTT7+KcTeGXQBxfopznWqNcmNDOvwEl5Dfowxmhln8ZdXUd3I75I3wEPMpVg8Tth2q1/HVwk9+UX+mbymX+HrRjecpb/Ep4gB8Omdw+2Mu9rfyEMsOx+4S16H8lKl8g3/sgjjCQMyifJfCguBz64PPvZ/UQ67j9yjkGvpvyhXpfI6h9DaFJn2kxtOJ6QHvWX0z3ua6/2NeGfq5EP4n18S/6x8atPhfvY3X4+yEH+fQxwhOg/n6NaNR/gY8bUTYPH+OcbmN2QVyEOu9d1H1l6LOYoQqfeQWgvhPiINYrRfodlnXAdCtEO0xrsWw20lqkBsRYLMc6ygtYVsjH4FoJ6Kn5WDYRr9dh+ctIT2A+DelxgD8wnPnDEEC9BekGxALEHYguCAjQq58E+qP0RboIy/B5f9yN9/wH85mYvhfxG+ISYgvidrznU7yeiijG/BzEeCbbf/Jr/tfpX9uz/5Y2smPtcB1eaGqT/msams9/oU1tV2j+/4028kGb0AAfQuNoZEv/0WaGKLD/VKgRUDd3RB2Vx/Qy041MH6v6KEhVPyCgF79hNgTpCtSDV5guZvoQdfFLqA+XIJ0V9EGfRTo71C9cYw+jXNXRI6iFfoTVqj/wPqxm+lpNh+hx2NrIdxkqdlHrdFB95unq+AvRbozlzygpzFfhfoPbJK0aH2YjL0aG/A+WZzYPbTP60kpGyC8Wf0S7Mhj59D7rg/Ktal9KYCneM5jZXLTrJ9CnOYv2ZqsaR6LdQbt7VI0xnoY3VP3c4B8rzC5lYtqEPPidZ/F3JHTnloAOyyax57N4guuNevRxmM6ep0NdrsVxaXA8GhZHt0cffi1kY9loaS3KS3s1bpwdml/k2W9/4dMwH01s8NWCY24qm2r/QNnD7EzjdkP3abrgnP4AfIN/9i9rLGjvs4N04V/7cY3ijaayd338MYIfprzLLVIONPiaQ5DiWlER5HHTvoTawmlo+3drMrRGML2SD+wlFPKBvYU8hBwsY6gUHobZzI9SfYGLCDPGNLkKi63aqhiHfaGwg7+kxtYLQs9C+XIgOlL2awbHldcRlzEv8UshA32FKUEUoAzI6j2PBnwK0YnoENgLQF+yuhEuIs8iGd8Qs/gueE8X6ITz9x4doLSjlYh+UEZPKJnIOy8iFp/RGW3iUNVXA+UtlPO3kH7Cx8PdqnyOQOD8I17F/MuI44gchFvllQ3bMKNfNi7g69BSxcHa4+5WxzgB6zHfcZk0CSZLHRHHYbJwI/KrGtfmbvSJKJQLCRiPHsW19iU+ox1E0JuhPQP8rjxMnoX2iHhEC7oZbbQF3qIn0e6zPa33SGRovyDgdxOM2ckTyM9PEe802qN6ggGvfRDY/yApCBfy627k041IryIvpqF/3x/zV4PY0QgygiIextj0XXgG4/970ZffhxTbQf9oY1Ng3ZEBKMeD+wjvoi+9sQkKmgLvZTS9KbCcUU9TBMujmwLLGe3cFFje+S/68Xf1/q4ff1ee1BRYnvS/0I+/e667KbDc/Q/9K24KLC/+H/Tj7/ic2BRYnvgP/ejdFFjeu2k/UG/PCfhjfmb30HeDfKT3sz1tpMyXP41p9MOA+ZiWQB21HvqLwPbKixCf4f3M79yJ+BJxGessRDyFQJ/Lz3zFrxFnED5EDJa7kKIv538J8RUC2/T/jOUYF/jZNebbTUAkIUYHYQ/cX4/3+8sR6PP5H8X8PUjRj/WPDLbH7v8I0R7z6GPCQExPAfY6QuD/D5yK6fCA7+u/ihTbqF+D6W8CfWHXQ/CzZ+P46h2Yb43wIgYA+5UtUAjiJF5nsQv6rEocIgLzXwT6oGBfldcQPTF/OqAXlK9xnfbhdbgGx0KecBguSQZYwKiqd5nOXaq81chWnVB14Rko50SMmxWM0/LQlw6H/fxm+Fl8UTkrPoaxyChgvnsNUi9vV04wX0H1Fz7H+O9FWCn8B593E8aW/SGTfooxN7bBP4xtof/C7C5rj1uB11eASd3PPKT6OSwmrNJNxHufgxGiBX2TDlAo5UIBxiSFQqmyHfXw05IInYXpUCA+BHHCfCjQtMb0B6r/052rU+rF7SQaY/YXG+yfBfwYBz0coppP4SmpDMu3QF/0beJ1nTFPme30vxxqu9GeZC7yc0ggBgGUEWiDvjzOyR89g32uUn00jG9D+6FCMq6/LLU/o1T7GfIVf4Cv+FUwV3JBiXA/xrC16LMcVH3I27GtfsE2J6u+FdpIqRXWx3iaxfNqTH0KfIIFHCHK/I2QXyrw2GYypLC9AjVeP475cZgP+qcNz2D7CBjLsz3gpn5NyI9q5FOovmqD7xsaD1JmPxvGH6R/8jfWwBAW87P9CdU3b0qDfVL3J86o/OvO/A9pM3QXdyNdTDRiLNq6r4kG262T3le+FV9Q3tdEozxuh3zVX0MbLXwMiuYb9kasfzPOE8ZdYAnE++yNIP++gM5Q2DWMJxW2VqqR1mN5PfO9A7pBucLCULZuEOcRNQiMKf1nsRzjTsD15j/E/KuALmK6yv9IUB/d1ChmEIO4CzGTlTXy1coC/mQT2sivZ+NvQoc3yZf8t7EcW8PsrOjv9i6vUaUe5fana3uaShE57v855M+G/OimlA/sY15oQhMC1M9keAiT46a06b783+3T/4MfWxqKUVR6nX+t/NiE5jacN/wLDfrfM4K0HdKTyItdSNm53LQmfvvCv40lS1DPsDO2IP3zvmowNmygQb+86flCiAb2mWcEzuxU/32Iet7Bzhz+AQ1nU0uhDvFmI3qGQfXv/wJiPCxF7Jb2wHbE0RBV907/AeI6vG8d7NY4YDviaCN6muHa/t5fgyOwFLGb3wDbEUcb0dMq/vrccLS4GdvdjO2mYXtp2N+T2N+TeB/z//8ByAM2xqMaszrGM8wW/iPmwSQGjQ7b0eE9O7CdHSr9mCHE9xAfQ3wJja+hz6H2g8/9/zuPfCXq/H/Av83L/9a4/6nvjYF+yTjmkwTpMfXs9ro+M75hv5fCG4gF4k9If0KfhZ0RPAZ1QZz5OzkK7b9zY+ANxAKs+2YQZ/4kB3crZ1UE84FzBbiE7T4qnse2cR0Ez2dHsBjrr/gjYTsofwukzkgZr9h5RCAmW4/zzXyJdUzHB3VfgVYHFdIaSFf16Bl4BO3ueyxO5Z+FsUF/bwQC/QwlGE8rGt6rPKTuyYgwmQ5RHIIGdcIJZY0wCGYxYP/ig+gbRAbicdR/fsRriPnIk4PYp+UBsDMbjDlaKc8gjuD1E0E71wPbRf/b/1zAV1XRKVg+P+CL+h8O6V5OUd4UjigPqufmRD2fm4HzV4hoyb0IhcxfwP6/y/WFSPW85W5IUM8SqoNnCWzvYQZk4Pj/g7yIZefn3C617Cb1ejcW76NtYXF/HLwSPH9xCndjTIT02rsMkMzaQgzmP1J+ZecKKk/Z3hw+A/3Bt5lfxH2PsfnT0I17COapOI3YHMS38DD3Oswj3WEefRzz9yIozOOnIj2JeAXxG9YxwipuCaZ3IlLhU24NPCI44Rv0c29CbKRvow57GrbQRdAer+/m7AHQviiLfaGCS4Bl6M576HK8rkB7OgtpMl5/D9Yg3YmopZfAQtZjbP42rOOOoO5rC3Pox/AqtxJu4jIgmV6GD7kw7MsSuJcLU66ConxJVijVWD8M6/XjMpSDWOdGTqt8jXXMWGeG8AT6yzfAQ0I92vmPQUJfvVr4BfoI+SjrfZUv+MeBnaM8gNjEwN5jQBn5jr6Dc4ECoAm8K6JSupv9aigAGaTaI/VdHXIfFuwOvMmjvp8RkPn+6JN+I/WCKsmEPl0YTAi+V8LOi5bjvTfwZ5Rn8bkViCR+O7zEfo8LZewcogzY/ySPModrdF1oD5RRdmbG9iaDPlkF1smnb0IiO+sJ7kVNRpt9GmMVtBtKHSIWZXwrQ+BdGOVYwLYqlzg9zvFMEEQb8jCwf+VQz7fGouwsAVej5y0TlkLbwD6qMvTauzbKt/hc9u5Gb86mtFP3gQPv1jDbPaTRvtrEwJ6aUov+++zAGaTyCh2gML+rih+mnOW0UEU/hJ2I8VxL2MHkhWyHTWS78g2TG/ou7EfZKUaMDKKYfIHTokBHlIHX6BSMqTCNGEJnKVNRtnKRL/1RpvYhdtFjkINycgZlqxtea8floI6YBTMQlSg3XekW6KniMuIIeLEP7PwFY1llLUKHWIZzPRXl3Igy3RqfmYFyqMe0W30nKnC2q55NouyY/822/ZtP8G82/N/qc1thPvbHgf2Zw86VMY3zgXIXPJcXdapPOQGvh2F/M/H6luA7UXmqLkOq+lpDlGUYD49o6ruxPXc2pyjj7/C7lfeRP+WILQiM45XjiBREi2AckcnOyqTbwY26Rh/UfQn4/NbYp++DfEtn8oqyltPgn4f87ZA/yPbQT0MJtwxjpnYwNRjLsP2SVxG7ENVsX0Q9bzqJ8QI7Rz8JT2DZseA+SC3iMIKdieH8+p9GfIB4EXGExTXsvTXGlwafdSSU4L23qPw6DVs1PQmIh2EzysJmrgpeJSvQv1uh+rv3MtBckoJIxeuncW2sxL6/gM97AjGXM+Pa7Qsc6nT2fpcb0+zdnW18C2Br9w5+rhoXbUCZup2/9u4eOz9Zyy+CY3w6fMmzd/fmwyrhRbTBYXBQ+BVKtSUYR/4KtRzFee4EQ4PxwmSc57Pcr1BEdeq7VRNwTS1GmoSYh3iI1WfXVPmpVA7xt2Es8Dws5L+CPqj7e/MajBHSse5l6E2+wTU+A1KwTh/Uy32QN7357/B6a5jPTwnSj7BsCo5JRjvwCSzlx8NysQx1wlRlIz8Zx2BQDokblL2oP+bjM9riPbzazld4z/OQqfbhr8D6xOo1AutPY4T60hRqPxqD9aPpsxuDjZ31p0l7DIwXjcH4wv/YtC/KAUaFguv51Risrw34+fp+qzwMgfGyKWS0AYy/DIYgn/8CjO+NoY47BJyHBlQG5kSdi6AMcHuwj5XKYXXcrM7lQB9VPuN4UCccCs0/n65cUPt9HstRDngPJKh9w3aELoxvykbkxUKs41Sfz54ZlCf1PlYPr6nPZn1jfN4Lj6l9OI7zgWMO8ZbxU7yinBefxDofwm98FNYZhfH+ebW/h/jl0Kuh/xOU9exZ4kDUTw7oyp/D5zOwe1Yq59X+B8fV0Hc2/6zv+EwhHG0/k9uPsXwhbBKToRf6xL2ECbBd+ArbGYR4CfqIe/Hej5QTnJv59ep54WaEFpEYpC5ENmIiIgERjXgIsRaxi63j/xZsvf+3YHqhCWr/DUwf/Cs+RH+zUZ7pD6pTnqeDkW5naYj/t2cwHdXIN/hboP46E9JfahsTrrVB+yqPI+7hABajXhsQ1GvXsBWKkb9ViDuD76PuV23HUVy3Z9B/xLy6f3da3X9j/TmDeBXTZukwxmAa5X3xIeTbEeVr6X7llORBOQ/YozzNarz+kvK+5lRgP469lxTcawy9G9dBfVd5JvQVXRiPpeO6PYc6eRHO4wblIr9AKVL3I0vgMtqVwShTKBvKY8zvR/sYB78rJvRJ/gi+O90GbeJ5vMbikPzG77qwd1WC7/d8KfLwMsr0COEwPCc8gv7iCXhFeA37b8FY9CUYIc5Sr00WusEEPhdGSINgrGiCOmETkfmTMErYgTptO953AOsKcFJ4Cn37x+CIcLvqe44Q7oFz4kR4EuVkjGhTY7tX0Cd8VOgKq4XxmJ8Ey3knPtOGMr0QItSz9V4wn7YmM8lxIpM5kIF+cifqIFbyIfIrlgwUa2EBP0e5xD+CfXoI/cmFqLtY2qmek14S7sRrh2EKpi+ST5XvxIPKD+iXsr2EJfx0rJ+OPs1M9A9GQiXml5C3FBnjryXcR8oRtD2F9LTyiNpGK+Vn/j7Vl13Fros17NxW+Z6fgLLqgs5q/i5lAT5rtPATlAnHYIkaS98DXTUUqhDLBGb7z8CSxtA9BqPwmTHMpxKOKy5+nKLTdVEWaxLwOe8qY7GNitC+NMbVdwrnlPf5jhiH/YT4HeWjD5SLDugmzmb/P7j6M/O/A9H8BaoQ6MOQ7wPAiEgF9zl6db8GILb5n0GyBKCxAWij/gIv/TV0rwXA/rZVOOaNhQCy4X+I8QAm9Osi2gFY4gEiWwFE3QhgnQZgTwaIXg8Q8901xIkA8W8CONkfBLgMkFAK4K4BSPwSw6shAC3aowuJvnxLfEbKhwF40S9Mfeb/AN//NdLi/x9gaTOa0YxmNKMZzWhGM5rRjGY0oxnNaEYzmtGMZjSjGc1oRjOa0YxmNKMZzWhGM5rRjGY0oxnNaEYzmtGMZjTj/zII+0sA8CPkwU0gAAUZ0tlvH9L1tBfwQDuFwUBawz6E/ZaIg+6j1VjXQatrxThHxlP0Mfb3HuiumtxMXx3dVStHtmG0RmLZR2vDzG0WdzLRHbAXcRRxCcFDBn73QQxHcHj7jpp1rP6OmuEqqe3dr00Voz17tVHzvm4BqgsPUG37AM3IZPW21RbNYflttW3aB/IprQP5RA82L9Nt2MdL6rcRv9MR+YjFCB4b31YbGRe4TWthtz1SGx3TxniUPoI1HsH7HlG7+IhPh5fNfcQ+Er3UKQe5QWCL+r1Y/R6ufuer3+nqtzF49RvWuvp9VP3eq36nq9/56ncf9Xuq+q3WJxfx8x1+vsXPN+QbnxlSCTiInEpkB/GlEp+DHCJaoq/JcmyoI3pfTpajlbPA0QaR6ezqSEXqQMxP6eZIQ7hSCh05BNgfvyEUNGC1AoDZpPHVkccP+leE168IB20dya9J6enopCXt4TDPmstG3Ifga1KmO57Bu51qFsBJd9c4rqbVkZIax++OOg2pcfzmqKPEF+H41XHW8R/HU46fHT0cJ1N2Ow5hrftqHHWOOh5rbU2po7t9Rsftjv7YubOOOY7Jjpuc6qXJLiQ+vWMU3jQkZYij1FnHWuntVFvp6sDHPOkowouFKXWEPOnwOW5zZKapt7Zhtz7paO2Y7mjlUJtLDTTXMtC3ZEaedLTAxhLUVoocg8K14dqc9R9L63dJ63dI6xdJ6ztJ6ztI67Ol9W2l9RnS+nRpvVda75HWx0kWjVkjawyaMI1Oo9GIGl5DNaCxsD/9xf4OCFhEmRGRZ9+8mpYp+6aBP8RBiYZCD6iO4Ipp8YDOpLj62CgoHums/mWAu47o+g2pFtydSbW5GIoHdrZVt/MW10lK/+ocb3G11Hdo6T5C1pZhaTVdWUdgYGkdsbOiW2OqzQWlh3BW7beuiWFUuXVNWRlEzc635Zs7mnK7FP7FV0Xwu9FfRbVd/0dSi/vOPYSzXForOW6QMDsAs+tZdj3L2uKqNxYPKK1+LK6sug1LKHFlxdV3DnAOKz1E9pDHiwoPkScYKSs9xKWSPUX9WTmXWlhWVoxTo9ZDsd/D6u1hBOtp3oV8Vg/yNe+q9XgSqOdW66HYBepFOcGt1nNHOa+rF0+eYPVSGMF61s8hXq0Xb/28Ub19h91Fhfvc7tCzDqt1DgeeVZ2nVnE4sIrLoVbBpeJQqzgIVat0uVYlLVilVUOVVmpLHLlWxxGoE+4M1QlnLXn/q58xnb3eoglMVvqW7tNA57KCYQEaJU/rqM57uL3j9pjD8Cb77XZvWbXO3bla7+4M+fk2r5xH0sWwahGLJASr3cFlWxRzmAeyS60dhsXhwUtpndI6sUsoveySAYuNwUu2RR1cMYfJruAlGYtN2Eajfs6cOQt/wFY0obDh34zgz6wgnQnF1SkDiqvz+w0p3SdJRdW+isIyLMsIlen1RXXKsUBhKyzMY4Uc11CxoUyrDVZEbjzZJ5X0cZAc7EKZdwZ2BRtqzMGZM9Rv1lm1e14I/B9lKmIDf/rGoMMcpowy8OHsd9hi2Z/NwauLiEKdtIw+wbm5PtzN3GJuFbeae4h7nfuFD+f7COlCiTBcWCGsEtYJx4VvhCtxE+MmxT0f93KcEr84fkv8D45IR5yjyNHLMdhR5hjqKHcsdOx3vOB4y/GR45LjisPvNDoTnEnODGeWs72zo7PQeaNzmnOuc7HzLuczzssuwRXhsroSXEmuVq7eroGuG123uO527UqgCWKCMcGcEJkQneBIaJngTeiWMCJhjJu6ZbfLAx7qCfPIHovH5on1JHpSPVmePM9kT5XnFs9Kz2rPnZ6HPI97ajyHPUc8L3he9bzu+cBzPikvyZfUOakiaVTS2KRJSVNTF7ey7nTtXP0TuSpetV7Nvpp3tePVTlcLr/bxu5U/FEX9H9m2UqAuOoTu4RK5vtw87hbkzlruEe409x/ewPcVWgtlwgjhNmGNsEE4LVyOA+TO5LgX4vzxEF8VvzX+R4fN4XR0c/QNcme4o8rxpOMlx7uOTxw/On5xgtOM3ElxtnHmOvNU7kx0zkTurHduDXInKsidXq4BrqHInfUN3DEhd+wJ8UHuVCSMVrnj/Bvu9G3gznrPVs9jDdx5GbnzPnKnfQN3xiRNRO5UIHesO1cid+BqxNW4q+2QO76rBVe7+J2MO8oZVPcehAYxI/ALlux/usQc+//uUgDE4WK5OEwcKpYB/HH6j1e+nQzw7fZvvwO4cADg7D1Iu1/oeqHoQsGFzhc6XfBdyP//2jvr5yqWLACfc7rnTHcagjsEd3d/uLu7uz3c3QPBJUBwd3cPFkgIEhzuJQl+0eBO2AmPerVbW2//gK10Vff0zHTPnTtV3ef7fun2lPaU8pT0FPcU8xTxxKyIB5ETf5UTnDz4qflV3++54/T8FDk1ciRARPeIoZGHPD3vBUbO8BSN2BDhH+4fvircDyB8XUzriGThfcPbOGf5wsuGFwzP5K7sruQu5S7uLuIu6M7nzu7O4E7lTuxG1yvXc5fH9ch1P6aXK8h13HXMtd+pnXGtdW13VXKVd5VzZXJlcKV3+dy75FxvGdMuuS9A/BvOQFpiL7YD7EX2Qq904te+VJjSGX7OHVkRwMplDbOcf2DNsPY4X8XLyYXg72R7/jqq2r/K6r/zJPifSW1ToU75TH10ys+/rnzWMUuMgPb6q4Uu+099dY6YrHP9Psv2v3/pP3qCpr/fIPof3uxFzDN1Kacs7+Sa/9VAwGqYABPpO/jDY5gEM8APlsJGWOMQ+VTn042HufAa3sB0WAC+Doq5IQqWwSZ457D7e1gFW+AcBMFWaA8dYBZ0hBDoBGchGC7CeQiFC/AEOkMYXILLsA26wCuYDdfgClyFrvAUnsMU6A7doAf0gp6OB6yA3tAX+kA/6A8DYQAMgsHggSEwDIbCcBgJI2A/rITRMArGwFh4Bi/gIPrjAiQUKNGCb/AdF+IiDMDF8AOikdFGBT9xCS7FZbgcV+BKB1690GAcXIWr4SN8wjW4FtfhetyAG3ETbsYtDkVsw+24A3fiLtwNn+E6TkU/3IN7cR/uxwMYF70dCD6E8TA+JsCEEAn3MBEmxsN4BJNgUpyGR/EYHsdAPIEnMRkmh+2wA1NgSjyFpzGVM9enQR88g0HwBb7CfXiAaTEdpscMeBbPYTCG4HkMxQt4ETNiJsyMWfASXsYwvIJX8RocwqyYDbNjDngIj/C6CBQnxElxSpwWZ0SQOCvOiWARIs6LUHFBXBQHnMhxGdaJMHFFXBXXxHVxQ9wUt8RtcUe4hFvcpWj6KcJFhIgU98R98UA8FI/EY/FEeMRT8ezXrnLPxQvxUrwSUeK1eCPeinfivfggPopP4rP4Ir6Kb+K7+CGixU8nlKMkKaSUlmQxS8wWc8RcMU/MF/5igVgoFokAsVgsEUvFMrFc2lJJLY2M40Q2bxlPxpcJZEKZSCaWSWRSmUwmlylkSplKppZppI9MK9PJ9DKDzCgz4Q28ibfwNt5Bl6oqK8sqsqqsJqvLGrKmrCVryzqynqwvG8iGspFsLJvIpqqaqq5qqErqk/qsvqiv6pv6rn6oaPXTGUPz9HztrxfohXqRDtCL9RK9VC/Ty/UKvVI2k81lC9lStpKtZRvZVrYTB1VNVUvuk/vlAXlQHpKH5RF5VB6Tx2WgPCFPylPytDwjg+RZeU4GyxB5Hm5AhAyFW/KCvCgvycsyTF6RV+U1eV3ekDflLXlb3oHbcAdcEA434a50Sbe8K8NlhIyU9+R9+UA+lI/kY/lEeuRT+Uw+V7VVHVVX1VP1VQPVUDVSjVUT1VQ1U81VC9VStVKtRRaR1RoivK2hzlw33BphjRTKGmWNtsZYY61x1nhrgjXRmuRwhK8TK6daftY0J2LOcJhilhM351hzrXnWfMtfZFdtVFvVTrVXHVRH1Ul11qhJCy21pbqorqqbdco6bZ2xghwWOWcFWyHWeSvUumBdtC450TfMumKameamhWlpXbWumVamtXVdr9Kr9RrwMVEYha/xDbrxLb7D9/gRP+Fn/IJfMSd+w+/4A6Mxl0NDjsQQkSBJFjHZpEiTF+YmQ3EoLnlTPIpPCSghJaLEmIeSUFLMi/koGSWnFJSSUlFqSkM+lNahqmkOOWTA/FiAMmJBykSZKQtlpWyUnXJQTtNGdVc91Dv1Xn3QrH9tlWv9oFyUm/JQXspH+akAFaRCVJiKUFEr2vpJw2g4jaCRNIpG0xgaS+NoPE2giQw0iSYzMrFgyRYz26xYsxcbjsNx2ZvjcXxOwAk5ESfmJJyUk3FyTsEpORWn5jTsw+k4PWfgjJyJM3MWzsrZ9D3Ozjk4J+fi3JyH83I+8qUpYo1Yy/m5gFgn1nNBLiQ2iI1ik9jMhbkIF+ViYovYysW5BJfkUlya/+AyXJbLcXmxTWwXO8ROsUvs5gpckStxZbFH7BX7xH6uwlW5GlfnGlyTa3FtrsN1uR7X5wbckBtxY27CTbmZXutwREuHJ1o7VNGW23F7Z6Y5yB24I3fiztyFu3I37s49uCf34j+5N/cRh8Rh7sv9uD8P4IE8iAfzEB7Kw3g4j9Be2vBIHqXX6fV6g96oN+nNPJrH8Fgex+N5Ak/kSTyZfXkKT2U/nsbTeYbeorfqbXq76WA6mk6ms+liuur7+oF+qB+Zbqa76WF6ml7mT9Pb9DF9TT/z2rwxb8078958MB/NJ57Js3g2z+G5PI/nsz8v4IW8iAN4MS/hpbyMl+s4vIJX8ipezWt4La/j9byBN/Im3sxbaDrNoJk0i2bTHJpL82g++eu4tIAW0iIKoMW0hJbSMlrOW7W3jqfjq496vz6AdzEcIzAS7+F9u7BdxC5qF7OL2yXsknYpu7T9h13GLmuXs8vbFeyKdiW7sl3FrmpXs6ub/maAfmwG4gN86PiAn8O80x3qnWkGmcFmiBlqhpnhdg27pl3Lrm3Xseva9ez6dgO7od3Ibmw3sZvazezmdgu7pd3Kbm23sduqx+qJ8qinDq88Vy/US/VKRanX6g156Ck9o+fqAeyEXTRVfMNCsBf2wSl8BLthD5xWD2EcnIDJ9IJe0mt6RVEqCs7gdJyhHmFh0xYf0zt6Tx/oI72ht14/TCPT2OubaWKaen1XhVRhVQQ+4BNVVBXDoqq4KkGBIiEcUSVVKVVaVVZVdG/dR/fV/Uw7015/1J+Mr/lsvphX5if5qbewCF7CSVgLc7AMzMRyOAhn4xyci4PhAI5QZfQRfVQf08d1oD6hT+pT+rQ+o4P0WX1Oe8wIM9KM0k/1M/1cB+sQfV6HmtFmjBlrxpnxZoKZaCbpC/qivqQv69f6jX6r3+n3Okxf0R/0C/1Sv9JR5isch0DzzXw3P0y0OCKOiuMUpG6qW+q2uqNcyq3uqnAVQWfpHAVTCJ2nULpAF+kSXaYwukJXHRJl+L37acwKiPTXAov/npybQlpsK+1l4sT1jhc/QcJEiZMkTZY8RcpUqdP4pE2XPkPGTJmzZM2WPUfOXLnz5M2Xv0DBQoWLFC1WvETJUqX/KFO2XPkKFStVrlK1WvUaNWvVrlO3Xv0GDRs1btK0WfMWLVu1btO2HbTv0LFT5y5du3Xv0bPXn7379O3Xf8DAQYOHDB02fMTIUaPHjB03fsLESZN9p0z1mzZ9xsxZs+fMnTfff8HCRQGwZOmy5StWrlq9Zu269Rs2btostmzdtn3Hzl279+zdt//AwUOHjxw9djzwBJw6fSbo7LngkPOhFy5eugxhV65eu37jJty+43LfDY+Idd5Y54113ljnjXXeWOeNdd5Y54113ljnjXXeWOeNdd7/T+cFIXxxFligrACrIPhgql/H5iIMOlNCZZFh6cx3mmQkeDvOM6QC/JbkhrUqpHNqDu1bV6ObYEH7D9xVFvB4xCeHa7NYhyDGj+S/ALayXkUKZW5kc3RyZWFtCmVuZG9iagoyMyAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDQ2Nz4+c3RyZWFtCnicXZTdauMwEIXv/RS67F4U25JGaiEMlJZCLvaHze4DOJYcDBvbOM5F3n6VOd0prMEf6NgzGp1hVL/u3/bTuJn6xzr3h7yZYZzSmi/zde2zOebTOFWtNWnst4+VsD93S1WX4MPtsuXzfhrmarcz9c/y8bKtN/PwkuZj/lLV39eU13E6mYffr4eyPlyX5U8+52kzTcVsUh5Koq/d8q07Z1NL2OM+le/jdnssMZ9//Lot2VhZtyimn1O+LF2f12465WrXlId37+XhKk/pv8/eIeo4fP7uWGkbFqljpY2QBlbaXqS2YaVNkFpW2gxJEoMO6VtipbOQAiudg/TESkciWc9K30KSENAjsFSs9B5Sz0r/LFLZWOkHSJIYJKR3xEpCqQ5FCgk7OtkLJOzoPSsDcnnJAgbk8qhbGJDLo25h+MglHoABTpRDKEOAJO0CA5rmj6wMT5DggTDACT+wMqC1JE0FA1pLLSsDWkuWlQEWkmNlRLfJszLCCYKfwggnCH4KI5wg+CmMcILEAzDCCRIPwAgnSDwAI5wgOTAYcWxKrIydSAHmCTOqjw0r87OM1L/ZuU/X/Q7Qye2v61qGVi4Kmdb7nI5T1rtkmZd7lClv9Rf3fhfLCmVuZHN0cmVhbQplbmRvYmoKMjQgMCBvYmoKPDwvQkJveFswIDAgNzEuMjUgMTguNzVdL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNTQvUmVzb3VyY2VzPDwvWE9iamVjdDw8L0ZtMSAyNSAwIFI+Pj4+L1N1YnR5cGUvRm9ybS9UeXBlL1hPYmplY3Q+PnN0cmVhbQp4nDNUMABCXUMgYWihZ26qkJzLpapQXJauUJSfX8JVyGUIVgAhgXL6brmGCi75XIFcAG9dDMIKZW5kc3RyZWFtCmVuZG9iagoyNSAwIG9iago8PC9CQm94WzAgMCA3MS4yNSAxOC43NV0vRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA1ODI0L1Jlc291cmNlczw8Pj4vU3VidHlwZS9Gb3JtL1R5cGUvWE9iamVjdD4+c3RyZWFtCniclVvNji29Tp33U/SE6VblP3kMRneMWsAd9EFwxfsLrx/Xrv4EQq0jnV6unUocx3ZsJ3V9Xp+rvOr4LPu1xuc//vXjbx//8fFfH9drn6t+Xq859sbfMvdsn//4949/+vzPf/nvv3+0/pobb7X1+edjzlcz8X0T0d/3u91Pig3//vFvH//MwUpbwcMVjFxnx9/OUR+jzVc9n+u1ewwmYr/K+AzYSsBxADuerv35hSZzBRGdBTzz87xiNm1hpoTRJDoofh5vzWgdrAnGQEVNSBQ2afszRmvocA9BDhR/83mwNdEu4RhqkrxjyiLHK+aXU5mva3EqQHx7+WG8vV5rgWjkIV4MkqhjXmQSOOYSTednw7tgcQlKFu/nI9q9OEavQP2eRBDTnLfXKYb9dc17EuSakxivET9NrL0xGByxcO5nULBo/4VVXySsAWQt2gTEWFi8aNEEv9BhRTejoxu2qJySEGXSix8vrvFrTAiFU1qWykaHJ/o40JTOeRlq1iSCZcpzdYj2ABbLWzoCQgpQO2Cn9KEAJQdCE3B8XhNNoEaEsR5FAwUR6sVeNpQOvCysNSHFa6y1CLg4+Sr4JSnn42Aq4IbYdr376Ji6mnTMJ+bX2ARavtXi4M2Lphgz3zAR9jgC7S208Ozrsca/sdQe/EOUo4VqiCAzgBXdlc8+sDb9NcBTEJPEjGGCiIcdL+N5oE6APhpbT6hjEOcz+2bXcxNFg5Bq0dMl9UXTsKG7hwVP5AZrebAFBSUTbDGK2Ptmf81su+vVDTnJHHJDHb5v4oxPvUppq8tYDzNQtTZsvrAi8a4Y41qS3wPPxubx5LyaB1UDztjrLkHk82uqMaWWfUCWakABHyiQBE8+2GKTAE9cKfHNrjUbQyr9Y5F/oxsDuwr62KEbSUTfATHFYH0UmJYEFRhcF3gcYCr0QBPyDXdUNJvm5sViQNf7hmOlpIKoK59bIIdmJTGdV5/34969LmpRqlqsbTGhs2quA857KoRlezxo655uDyKY/wmlX03d+/E3cF0i+saG02kG4UXowMjvhu/qcIABG9xzYZMG3WxVTSp8XGy3AQvWrLHDgiZ0LGjCzUSv0jYmIIyruEWHdcB1bjjdG45Hk3FkVWa2Q3DVVjmqjB87YOAluw20i+wy4GG/R60P5BAyHI1qmBBPa3ETOorqVwcWCJCz9Zh8znFi1RKxwVCDxRcXnk9IMhQy4LglDL4xzOTza3vNCjZUrxnUruSiSfFyYff5Cbd1Im3gV6bDidutiqAnGpQZ/VMIaJV0q0GM9KqB+5CjA1wSftNKNrc+Tb4y+2bXY+QCdk0sng4aBZsO2FZ2MbC/uQUdNoYbUgv61SAoTPrV6DDZdteazN7pVkXYrSaB5e1yFuNTHdpZcCR71WHnF6+KLZn8kCtobl/kKdW1WnDG6SwoCD2neNiYUss+KMxs0Yf8KiVvt6olsb/gSolxdp2zqSXd6mORf6UbSzOIJfkDogwRY0JxD4YNSL4L+Wbsp+ERdNK8A1VImIHCYBCyEcKhMRwa9jtH2NdQk8lXG56fbXH7b/y+EdHpYUyakfm4IYVDzPgNsCBcivGYGyz5ppjMQES1KcAF9ieUCYMrFiNKjZl0n7GRDQb6HV52bGldNVPz/fxQeTE4DWGKp1as3Qdzo0Kf120HxwEKeaYXOMdw5KwwC7gY9LDlfAf3k6GcAYPQ4y7Lo0OuY4vnfjTxls+XDBKtl/RD2mcCdrOwFpOqtbCsE1tTTnfCMr4/OM1JAztYisVtgnArI0piUyZXtRa9tevrF0o5qzIb6OQsyCeAA20+LYZLhiLCXjGJ2ATwZtMmO+vb2gPPktYOYkrTAB0DAKahBmbE3DyoGjh4oLEHUfPFS0FyA5rvPi4NqRZTtg7U09iDuIMD9MfggEPWfs+GkMGBiIHA8NsEk6CA6dHR40qPHsSY6dJBVPlYQOkp0E5/rGmQyM675yxVlij4lOKh0gcc5e6iakS2GA6VAe9QGWuy0qVrlTvUP/teKXFOM8ecsLXvmxhcCyoIV5Bqw947RgX+BoYA0YKmoNcMm1vDRCzPrtmDga5oAmzRoFKeXVY43D2ThcH2FmdXNNTcmhlC06gW3JC3oDidx/Cp8445Feeph5n9OhPCWFNBnoQZDu2WpfdQMO2OMRXClOWQAy7ZvlnJvPmFM2CPthiMngbjhAEGk9mmmL2Dac6BNjDuaFuzTYOhEPS8v2wvXcG7euivdv/ODAb20jWc7IWrYXvJzLR5UTUVw7Lv9V2eglceWmPN4EDUlyPNtPv5VZnpQhhc+P+fj4YEJIjYBlrF/4GDldag9MKRJTfEu/6Fi1oup+CHbzeXNC71VZm/t+x3wIkLq/BRQU39Em/QGTRuHIFXd6sDiul6bPaAhRUXPlb9Q8MXFskY1mCQAeZr4i/MMHy7f7kQq8QboZzGTcG9qQGVijdikImhIIdtzAExd/0STTteaKzgYEAH1I06VFipULUImBOJrbJkZWZAToVtMcUDrG4Hh1ie4cgB+WJRoYahZMnyTEcEEVTkOMEweQ93Ad6rcTSi1/Mvxa9XwItDL0sBy86sqR5MpzBTMm5Se1OVrF9ewmj11KzfbKOd3j16P9hITVXWAA9MAL0Plr62Mctj8/5lwocEPitxe7mgB0IluAXthcgKS2HFWKWrYcqDc9WebH2pHogFaIgd/iRV4Q4aqxaF+2H0PRN/YTI9qV6oF5V9C7uQZ4paFG8UrVPPvqaSPdTPTv6i0ZnYPfn6jdgjSyMLVYUKsoZA67KNIWM51D/mgkzd+QO2yQPOgSuLB8IuMDQpxFGG37g0nbmyLLwJczGzKDFFNQ653Ao1hG3MrFKS1S+7+g1kp3dXIDh8YxVFuAtXs8WuTjPLzGhX82QG4wtg1VX4fDqp7dIyZrvAyrmFIce7ESvF329qspnWuLHcApcU66bJy3pVb4BHU9Vv2/U01/x2y19YLiusx3buD3AdXTWrTmtGKY/VbHi0ldi1B1MVi/KdVGF1YFrggzVJiXhkea29l3VYSqiiMCv1snJfvpeVFWYvK89L1CjNtZnl0/OXmFi2Xx4hC4SzvRtpjM564rwXtS/b2nCFT6o7OKLG0BRP9+Tv0Tt8+XdSg8WiRW2dyBFQ+UksbV2mZDeqrxB2Z463bf0qyT1UywGDNIQnHrLCwUTnoh4PbTVTBjLgohAZd7MVeN/8Tlqsf6g0icFIS5i1NeUPpJoyGKo0o//eBZk8wTZBmL9Gj5F4HzfiJDDz+6fYJP68qa4O2HEn6zGqnitp4CidwXyka3i/Jq53mL24vovBf9HKk18tu8Uz7+clbTzwpcfjPSkKyQwW1mwSr/6eFSfiiVV6gLo0sUrNXXyvpJuM5DTNiZnqqGbhG1Q/1t3BIqc927bTcRpNyPScsK6UVlH5YF7WbfxCo5DRYA0piO7VrZpYd/4DR3bjCj+lZIjUYZJSJHnmN7N5RSh5UUNrQqil4iJm1gTRNybtLFmWfoOXWbJWL2ZE3OjiHeSbw5jTa8eUV4pxDkoQhl8pfv2wuVB0jiP3zyyMjPFuZadbiM8dco3t2IgHSOhZ7pUlhVoVpd1QtaaHLvzqGKlip2UB6w9igNNFdC0TS8iG1FQRQ6cFIpgNdNdqkfdVJXxyiE1lWzxvKlLuhCwZsgkJVEYbVIXSwYtgjAF7dMmjYAxRaa3k8c07Yo7OwJwnCDEVVxsL/TDDVmRAXad0BDwQYkwdBAuM4YA7c6vNekDkU59bJ6GdPmLB032DYOkMdeqm08oNZpgeKZhqYIpn4+iw69xSME+zuo7VpqTBnLeiFx6x6VChIlzU8wJvqUxagZxss9Py9PxiVQ6NLyW+zdGfig58LjhuqA3IBJbxUueD/amM7CbH9TjAacYJh3d0EtsbugkUKoole+ls7nLjJDqTMq4J7cynd0z0fCrV6Th1mnap7FrJyF0i7pdyZrKdp3s34u/LRaiQ3+UT3l50AqfzmaLKtp7v7KTq9oK10PgbuHrAeg9NF5YcVRetqRrd9dpePVmvb70PA6vne494nSeU5fkcDBBKeuoNtZAkFpbw+ybKuC346NXj3L1zX+Eti87dduIErbtctKdYHMPPq2rEh1q6cV+Dbj20d7kER9NYR+eHvcnoGvReRU6p/VopQ57YucW5z1Ov95ks/UweqPLUUQeqaee/yvAqE+SK7elPUoyrgXsmFQWzAW7WifoO54q3yJh3L946G4U3+r1dwonesSj9sVvVjFGHBHtK/tK8W+ONpmhSXTVuQ9lozhy8OQtRWNycFAwr5rknw6O5e5KnevoanpuHYs6kBtVPW+LCMMrLWSwAl4rzKn5p2qAK8NnGXF8HpnK23RtXZyEJOBeWv2yueOOAQ3G8YllfWRgMFAuj+lUd5d64+kh9ZREjcNc2yr7aujdeaVhJP6w0vPb3TGq3uh9T36kjaqdV1fslax1OnPt5t+rL9RHrztRJT2e9SJyp51t+GoWSuXGxv7k19jd7+uwYs9Dr/ElKdt9hXVKOaU2jogfRbz0PomXYBpy5LBqVWzmD2pkK32OgVbc6Us+nqkT6ZbhE0Vi8ffY1MmhkK9dYNnG7FX0OB5DDpUmn/6x3ahTNcXXP/h5/KBC4KTXDgny616n7Vx6Rq8Zyb8+CjXnkOpv7jA81L+rGzKpY7SkJ65ZlpF8kO73RfvQleWerNqxNWiArk5bOuuQ1nbkInpxgKe+RKZFfnnfO7XF44Dmbg1KcF4qD/gPztEwWoF8yGcQ5mwQ/1agysdzsqvKX0d6458EbF1In00mpt1oy1eH5GpZer7TMqswJbRU8rlvZn9R3zquYgR94O1X68tnvXa1Zzstw7rjsZBvH3Mu1Xb6z0pmjtwcebyf/pL4/dJb8oEZSYzplEpa9dJ/gz2U/yVsI2ht8JeEabgic2xSuhOw3CyXrXU13gHZSgdcDewpV78zcwEYxmxBHcWlkuBSmDHD4dtE+Kd4c8y9Yl0FKLmJ1vW6SZ8LjuyuXiqRLd10u7huhvyM9NU7SGTPduvmgRvrwS+wbspEKW3QAo3gLKOy4pmkOVUszqytp6LxZNdO0n1iyeL/u3YTT8m6Uk9/vX8bOrioz2+zqQXH2e+fw1bsxsPbvZLJxz9X4jYUWTau52KsbCfWVG6g6TsncQ/4F8xXJBQJXwMMSnNfRm/moVvPjy0kul3dd2WjKapupDBtGtzu8iPt4M3qfg2zfJ1EJajBJyWIkjAbD7GFrmn+l6Gwe1OBlDXWxee+hU8+OL2PII+uWRkllekO2uVYKStXH6Vs0J0XLezHroWYjz1Iq2q2MOsZ47fcCMkTw0nrEOp5QDO73D/MuVUwf4lS7nHJXIVZWJMYPzFbz8cvKggic3HxztZIrulnVPUr1dYZ7tR5bya9CGd6WLR29RygjV9sVngW1j6m5fMqCClRipqVvSr+w0ooN9cZotF094SXcub3VoG6EOzSFWRvgNOYrvbx/6dxgkWXt13BP0ehQF8itISugPJnF2P2Bt14QhSKUqkia30MOSHpWoS+nqv0hVe960bpcogpqqTJH1QQmBPvrSjOZ+KFL9zewjM9z1GbUJZWZuQywCn7EqpJTaWaWFPWLozpOpqtiziIfM8rCy5M8J9/FvnyyyCNPPmeaddM7/S4hT8f2l872x219T2pOezkf0ddnlHd+RHlS1cJbADuj+TksvOprA1eawD1KHT+wuJzvX6T0lRwfQ+rkdf+w3rtK4N7fXT2omcGX8HqwtXIr4PsKK6XfTjiWWo1xa8hcPoe9xnvMq//AfMeiZG9XzSJ/Yn4BclOT7yvs7LS1QsfZPJdG/V3L4/NUl53pcDqkBpa3MTVJ5s3sZ7KS4naqdSZubLWHzGdSY7pNbjJ/HTSzxY0pQsYb86MJU9OG6Vi2sefUHra6qXkyRBB+ZA8n/b39iDw+luNeo/NWI9n7rS45xF8wW43H+7tad8JY3VeVSeu0SL/MTD3S7tnVgwhPkRsHntbExXMgg6AyalnF8UTM5+mA3lWY6C/+Pe55ZHkd1WV5ABI4jpz4PAnryKKO8NdHVfxDqg5m0Izp63LAxVpYUD2Vq1qZQkKCTedSJDiLWtBnbDa9rOpD6qRCuFCsJPH9VdlT7yWRPd40QwxUSqduKjT01/rub4O7IngoMoDY2HiXS1N/iORZvfp/vgKr3FAKjyX+fNTm2ywbalY7d6JLtZxny+9fDIBo6qCS8uejqOrIKmJRWVJdq4bKi1NVdb4BBvBi56cu+tKm8z1+xTAnccfVW2afupdy+WSDGnGxyeAFpEI8UVxUZKhvNbYwP+nZarPx2c9Q96G7vMcZGk37v5Sl4esOXflZr+3rQut9iyiiEn28VvhFlG7A3eDr44Y8qdyQAS7r+4bm1qUq3uUdU7d/eQ3U5Vpeq+CdG8iFFw1pcmCct3y/P3ylvA1iluwrnvOyry+c8X5ikzA6hKGvuzYGXr7iDd/TnGHhOg0X4OhmcW/EHYPyStjA0wqG531F0h81dB5qoIP6ROEEbrx101b61vnlFbxK4Z1JHZdf2PQWFR4nwEvevLAAv6QnCg0VbG2eg+rqbGEgMiGWb7sLxAvA8GZQKTbiIRXXnl8eFh5xy43o2lqhD2Nwgx8GbPnsviWMBXM95ZyqppOzPSb4IeLjB2MwrxPb0yQc1CJ4IQ4iLL6UeemCBzjx0aohm9zPma8yxjystePnxn2CWyCPeCf3JaymT5Vw9wmt+YVnYdnoQeiwLjCzwVD2mHDTb+GRQFc3xaGwFqLwvA2GcWhiOCsV3aiJ8HxY7wM9K90drSY7ZbT9eFmfj7hnHhBx1OnGez256vq2b/UnMf5PYpqYD4LngIv+eKbkWNWb+iBTVwwUKqXg3zB+fzz3p3KqIkycQfLbPAUJy88PzlOuzEGXDL1AYIe7R3BFiyqy72iGApWlt1l0evFSgj7TLXaxWP8pWy481ij6bLfgQKRYnjx7nHIQRXeVXtMEXBrEzb54eVPv/CCWvgJA4MfymYpgC35n6RObwsMvfL9TL31Iiit4bxh76psojFBUE91gmt8JQxwIiPgfPj+m36mAdEEs7FVuh01BWq36alau/NipNP2Cy3Ry/pXW0SzLw68pKL3a+AEVdbvyEkDXVlCOPmW5/AvXl0IKgieY/Ma2HJ0tXvt/IXi3HAt6Xv5WtBzdjm9LE7m4M7TPqgQzdos3+vp4PK36IKMw4Dl0jpLXoQtDCgxZX9u3V+vl26ssP9bxcJ9B8Phtcv5MyAqPcINS1gevQqJwI1lqt3RPVoS2QRb8qr/zHiYa/PwqWoKqK7RLlDZvM8FPIBUNDJ1w1iOCB5Vdvel7GGMfsGoO2M3H0C+6tMlSjEO9S+pdh75zC+Yqb4ZejMd6/MXGFFvF9elrCHQ47WranZg04iT8QuxMGvNdhUHBQRDURpfsjsK7US9d2uVGgRC6XuRrcV53iPSbCgbCxJOXXv/8JLNYdoY0O8tMuoozfFFFH/J3aiHOCbdONmBFJqqOwLj/1uUjC4b7VdUP7u3ACr1v7O/STVW4y5rl6Dk+nytBHeTZNS21Np/FcCuousx7WYX4HYTEVvg1ZOGB8RPT+2J+tMHhUvvyJnTWHcSp4p9Fuyclv9cUrGqr5HHHeSVeHK/I8d0QcR8vwasMqPNofsWgYXkt44ZfEXYd2oDjtCJrK4zreAeAeorfd6vWJtKRAPS3rtU+5pu6VtsPLS3XVHF/U8FZd73u9bm4r8Vr19pSk0GVe2tSphL/A+hEn3UKZW5kc3RyZWFtCmVuZG9iagoyNiAwIG9iago8PC9CQm94WzAgMCA4MSAxOC43NV0vRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA1NC9SZXNvdXJjZXM8PC9YT2JqZWN0PDwvRm0xIDI3IDAgUj4+Pj4vU3VidHlwZS9Gb3JtL1R5cGUvWE9iamVjdD4+c3RyZWFtCnicM1QwAEJdQyBhaKFnbqqQnMulqlBclq5QlJ9fwlXIZQhWACGBcvpuuYYKLvlcgVwAb10MwgplbmRzdHJlYW0KZW5kb2JqCjI3IDAgb2JqCjw8L0JCb3hbMCAwIDgxIDE4Ljc1XS9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDE2NTcvUmVzb3VyY2VzPDw+Pi9TdWJ0eXBlL0Zvcm0vVHlwZS9YT2JqZWN0Pj5zdHJlYW0KeJydV8uOJCcQvNdXcPFxUUFCAp/hk89Wy/Yeaix75f+XIyKp7l7Lc7A1Uk8kJEkS+YA605lmSWXm0dO3X46fjt+PP48z8e/bb8cP6Y+f//p6FM+1J89W0sdRep6eToy4zXRJhlhKqZ4gdE6Wc4z6lEL1QdVuqXCwWC4dU83naKnUbNSbBYOPo+XV05eSrcGNlm3g38qlYuqkUWzUcqXXjnEPAPOWVwkBHp+TqqsRj8kNTyl5noMbDk60Lihs/lLq+cTMkJGSp9HquVKBj4EHtJykUajJctdxwZDlRmcLFIy0lVwrN2mevpj8gVcONmsJd06D0IwuVCI5c/P9OL4evx4//ltQFpUGSENQaiGdnnuqWJbkmdCid49DmHsVRCyEkVdNdcrFmfskZirA4uKKmdekBNrr4i6cacRFqxFJaZFbrFyp4viY0dlr21qyRe0EF5cYrmNzjhEx4/LQsk9KCC4wEgBkz7nxYmSltHjmjh2wjtBoBnpED/Jw7tEzG0d7o0vL0uSWD9FmDGpVJBirUyo3mWQci1eEtpPcqrSdOr7RFpPIb9zpTvhmOgA55tFTadkLbQfdPb3b/TyyhqM1OAO/sPnKrUBApl4UKoWenmgR4ndkJ9V2kvKRBxLxzCitmcvYEJHxUBltJ/91S6BMcW6KJtI+NgAuOxtcEvKU+wnb/A7DcstjbemitMaWrG89rMf4VPFGjTQmJfbHmKEpyBfsuTG8bNQKqfOQG5/Mz3d8a8HVwU2cPDRYdVagIFS0UYwvaoMq37AoOtBZr62vW1LymyqfscQOMKLDBqkqFOaIc8PXwVUCN0GtsuhugpqpNYCUBIhmx4lCfGp5ZUa3ktlJ4aYl4B79zF9Y/GzpZPu6toQpbo/CcRYIvPIWEO52Zpdz0rT1YFckf55m9B0KzDDUMRISpTsYqLfc/DyBvW3KQNDH4RYtGmnsVWU3WfJ+5j42fhwdCbi21CON1AQ3Nu4NrZBOOtWdLdXZeVw5LPjg5iiHGG/cYpHtgNEkAhsPcm2hkFI4SuvswsYULGzNUK+sDWxhCxHxwqkTzWqhX2FuvSToui4tFAu2vygWiT5RbJCw1T+l1aePWEpHOhm6bsmZBMBLdKKp++Tp7rKENMQnShV455ZwjBtz07vuLo09Dzx5VuBIu96JixKte3D0DOGFQIPiuZ4dEcd+StCsWmc3rDQtE5AmCz/0B++2MCSIeMLnwF29d7FwAsLKbJEYLKDOjib1veubP58nYkPDYOLiyvk4mo7mPFGvNOesqYBr55eEwhraUPWDtHOlMIjrfR9XVwUkpu1gqXR1J84YcRd9vYZWkbOovV4UmsWQ9HNryVbT84XXZGdDoq2qSh/qvZW/sHUqmFXFcerRcrJ2A4PA0DHXNdEWO4IobDNuBt3IsNnucWe4dJ83Ze/kpg9x13RRqvFMkQT4opS8w5CJGkyB4qlMVeuiE2pQs9+4k/twT2++Gk2QpwPDNL0pb+nd7ufxHYWtUsf4OEZl9jjzbUzmsvpkwBV2QuA7iFtvaeh1cO6mi+oCdouMfhwQ4hkEHZS+otWpsvRA7C105CtoHHyHFT1WR986aiJLF2zhRYV6VDzxchpGx4qaKtxD1oiXwcV8WEWxCC+Wt3TGjHCNxsoZLHjY2ehBHuY9TI6V9mAK3WNGZQ69khha1MNgPkeavNgk5SMexpNTYBetQk8XvpO6Xr56SW/cI9O3VGnz4qHPeAVVGt9ke3q3/BZcxGFUfhTUZmqbtU9c1m/hhgr7Z63GRy+6nL4hQr627LybrtB9xy+9/7Dh4nFeO47xZmaMp32pfSf8r91sX0VssRAWv53WsEjW4J+PAQkoICQmAREruOkbJIoXwqS2hzLSucZ1N3Q7qrcCotxq1lLIdS/tylQm4UWhcab3LUwaMkYdQ3q6A4Z5rnXWSWUJSh0n0CviTahbwNskR40k2wm/CCOFXa9W9lZpI6yNPUUCWNa1RTgJnRCGG93TASqFsQ8P4zq0BFniS6Ax15+QH5S+iUMnJzEXQ4D4vAlb6yWwsIz1eMNO6FGEWHY7UWlI7oXg8VUblQqoiphxRpXnID1N+xa2J2NRhjApqFjFF78CypPbWOzPEMTnFDushBZpQNRimJAx1dfcUEC1Rmfkh1yegWtkivEbr/KLmGPKBnUUU0chC9KG64U1HsKIXLX4+p9qV5Hp7Hosj78BNO8qFwplbmRzdHJlYW0KZW5kb2JqCjI4IDAgb2JqCjw8L0JpdHNQZXJDb21wb25lbnQgOC9Db2xvclNwYWNlL0RldmljZUdyYXkvRmlsdGVyL0RDVERlY29kZS9IZWlnaHQgMjA2L0xlbmd0aCAyNjI0Ni9TdWJ0eXBlL0ltYWdlL1R5cGUvWE9iamVjdC9XaWR0aCAyMDY+PnN0cmVhbQr/2P/gABBKRklGAAEBAgAlACUAAP/bAEMAAwICAgICAwICAgMDAwMEBgQEBAQECAYGBQYJCAoKCQgJCQoMDwwKCw4LCQkNEQ0ODxAQERAKDBITEhATDxAQEP/AAAsIAM4AzgEBEQD/xAAYAAADAQEAAAAAAAAAAAAAAAAGBwgACf/EAFYQAAACCAQFAgQEAgUHCQQLAAIDAQQFBgcSExQIERUWABciIyQhJQkYMzQmJzI1MTcoNkJUcxk4QUdiY4IpQ0VGVWFyg4RIUWV0VlhkZnGGh5WjpPD/2gAIAQEAAD8A6p8bjcbjcbjcbjcbjcbjcbjcbjcbjcbjcbjcbjcbjcQBGCMEdue2IP8ApicnYbQd2n/q+U3h/dlMv/YuPuP8T639kIOFU+GJCO3ImIMa4KfEm5i8utJ1NmcnVNkffrgVYnvLJX+KLpAP6eSZZkJ4tSKWJV+4dP204ZqUEdZeRs0eWSluUlX3vSJAc1+4koRbNsixpF5IkV8sis0py4FecHKj+bGMTVORP82vy+oazrX7J9AArejUL+0qT5d2TNPGxR/EXgThr3M6eo7jiS7ll+EqK4p17igZ97bGK4ZVc+t/FOcsnoJPpP6jiCxYvW/cEMJK7H/YkbVrcvM07arNalnKSlfZHSgtCoZOphQjxjemp3esMvGd3Hq/b1uI92MlgRWunbcSw3BAzQiQWd6clnKv4iGroMMnMClf7ZQpcqAskdXGUcQWLGJ+E6CDfhpH+1ja/e5bJ39qs0e8LJpJAZ5RxYVRn2imWMzqQGtnKjMeXBX888dnkjtyn5XbOiS53+qTW1Nob8u1Ov8AvduhXZdirhvP1CuJ6PoJGXCqfD4i8dsF0dogwUjW0ee2l6TpjToqbr2tVTCsndlWVjp5rkoPUNOVDNGU6UIasdMW+OyFGiRrezCZs6GznXO7WZvxjtDWbukrKXeLJEsK9FYMCLtAFPPkPIKM+CqFvxJcJzqOIzGBEvFxvt5FWtevBsJpMu8mOGMvxSVVJZchYgF9KeqnMn1EnhVQtil8Sdmv2zFJdbvN55HSrczYZWrAYGg3RI0sj3dAKa1XLSha8aanRpG5JFxsPr/YsY0uJCtvt/4hO0nki9rm33f5TM1fq6UcaBa8oAQFhyLKQZ3EF5zyhmSj1lV3fi04sWa4j3MBvvdrLyNmw2+8FgzVfQaRyRrXigU6a1XLSgvuJRTymDmlPFAPh8UfWYExBf8AdOOe3IkvHpO0of7ZvNqW64Epd9zMVEK69dK6BLHdCijNTBmJGfFqYasYriYpn7iSwIaKd07biaPZPBUOBq96ScMzxTiCzFekYQMvqSKfKZGSMsxV8PnsbMdoguA6f4chs8ek7SiB7OubUt1MJq77YZksL10sIEr90SKM1QGYUZcCmGpexYxpcSJK6pYp9Zdts6Pyyibsdmq9Wkcchr+0JkMDkYUlV8nLPKqVmhPrKuDrGL8SeNL9rDfYCnzedt0pNwO/UYDAq3RKwBV8oZADA5GFJM7aBZ0ZRZIF6tXD7j1fvEFixhWpMCK1q7b965uCGWhEj21ZM01Kr7uNXAYu3JhKVrty0s6Qs0fxy9jFxYuphOjewIlqe2I2wT21evBUZq7eaw0kDL8UkhKoXIpiAX0pMmmmTINCeNFKNz9wWftpwziX8WvRnkY1G9UuQxKxSqkgOL7hJYyxZlmgF0iTlnknJKEoRQGEh8I7c9o7wUjXGLmLy62vpjT28psj79TPWTuyrB/wg9Qx/TzRLMlHFVcbjlXiQfCBPPbGJBSNcYuXXMXl9pjT28uNf7BTJWTuyrB/wg9QwfUzRNKlHE/ry9hOgthOjfDOGmKfmU8kSttWSlsdpMalp7SQcZ3DpyxZlmjF1CBlTyRMkSEIqrFi7riRPfvEswF2IvJN23Y2bzNeDSDnk3hckkDZHioSExn2hhaC/GSmtWmNyQDhVYanifvCy4kSW/iKh1rzyYTdH2Y7+rkqukboOOAv+UqIMLWKpZ5JneQfJLKCmlKclU7ru4sYLOI9zfb8RdlPJg/sNvu/pDNaVLdZyQLXlASMsWZZqDO4g/KeUNJKPSgMc/8A1J5sf0i/l01Lm1/1R/f7bRPof+X9pV+37slRPGh3HSOzZ5uQU+Jc6244bO5oG9WnfKantS4nWWf2WMWhYXrpYQpB7I00Zcx5BSNHE/r2Gp+40v3G+JmOKN3LV5Ia7a3Qu7aJbNXUCUEqfbZhoCw5FlKoe0EedTMUqQiSmqoMrz94fcWOIuJkeMU907bibR32u7HJBuW9ZphLO7arOYpWxhxQewEVXLMeSM0oK4wY547QEjtiD/K7mLDaHW0/+m1Nkbcv1Mv/AOzjWFy4WDf9ulT/ALIRek/4gsHWE5pP3FRgMBc5CO3ATQ9wPBTaT069rZJQ1XxRn1FWgYhJfbSbUrzCkQDhqxShbhOjS/bTxFYpGFy1eSGtHnQ5l00mzV1AkCowPPURgLDkWUQd4ZY86kh0qQiSkrjByJgJHbEHjW/mLEmHW0/wz5jI25fqZbN+761dcuFc2r9EdKnL0iFMiVcUcC9+wJeaNcWHpscSMK7Lm0zLGrqWprhCsxO8QYFQJps8BYvEAObPI2UzNPDVjBDv+nZiDxL/ADF8neTu0/e9o7h/dmOWpfbzf8H0zPrTdMk3BVBlefvCy4mIvDq38U+2HbgntHb757HJXdI1g4xbWvABUMWKph6Ce4YZJNOGRCMkCr4RE0aO0Qcaz2YdNgRJw9aTu12d3aruvXlMLNUvLLClXUbVXSE3tEm1qko5BBm42Eh8I7QEgTHeCka4xcneTu19Mae3lN4duasuHrJ3ZVgjvLiqUHqGZSrZolkShDVxRufgTbMdnmeyLEHdx7csubT27hbCntS4UyC2J4RAkX11kWT4iE0ZZzcs08T+/wAouI6mE7FjDNgYWOSbyOxsTcClvg55Ly5aQTlXuDzLLkLEkXbEmatkLJIMuKAZcO4E4R/me5KYi+VdjsrU/wAIrjc2VPnR+5EbqV7cG/pzoVfX9KMlU+H4C+E9EHDQ9ngxJhXpO7WJ9XTdTeUK6peQXMrnVFcYR9owcuco5RdPCqxRsvAniUjs80a/ns25uOy9s5YNhcoW6mQrfWzLmmoTfoRlNl65ZptTBNFJxI04scU0TIaN3WXbbOyLJdtTlerSZqySZ2zgAMDkYUMPUFGeWaM0JQlNq8bjmriCxYv26mLGKkM2/jh5Ju27Gh7fUuWhLyXlyzSjlruAJSYXIYJAu4JM1bIOSAZcFfOCO0BIE/01cYnLqJMRf6tfl8ptfblgueX+2gGrrlwrmq31JKVTpmEEWU/wtxiv2e4jMxbRLU/mBeSGFa9KqEupy21I4agX1EkU2xqJciekodrb+sqRpFw1cBTu4scUz9uNi2xFRFunbcTU9mFaQzQavekrSgv9SoksxXpGEEp7xQp8ujJGYklfyuQJ57fLRAJxvy2/9oBiamuf3O9dnyFo24+4rD8Az/ZP6cg8NVz8LmBPDXHaH203G25El49W2l7m2FyvbqYr36hpiuGVXPF9XLObozEj0lVlvhAmFEdsT0FPiBRi3jvHZVw09vLjP1m0U0rIeyygit6NRUD6DDPJn65jRwKYanJcSCziRJiZh1+JloztsbR95rvJk5YpVTjiVDtrYhmCzMNOD2QpyzzHkhCEoFfh0Phz7x2Kka41xi/MnuaYzNvf1j9nW1Y7vKwQK6nbq5RQuoHd/gjqzSkqil8PbCc9biNPFtDTEtsSCS1RsidmtJqWcpwFAzqOWULZk64EaeorpqenQFAuCuBcROT0dm3zrw6bAhth6ttM/F2q8sdeUza32wRrDa1NYMK/VVtanpIEKeCrD7FL4k71uJCvEUwG7zsdt59c3A5lqwHbs7Y41UVfPGBBhk5gUndstEtGQWaB58KrAViVcRpOI40M1KCO7Y2wh1PlkpblOUNe1U5aOa/cSVaKtBTQkXkiMqSZFSjTlwV4546R2Y2yY1v+63y9RJcDUuX7MvlN7N131srNPvFFpV1G1V0gF5ABVrjIuURaU8aMEC47YFPmDjXhoenlXDZR2nojMsVNubgnpqyx3l0w5YVLdYWjxdYE1KuQekIUoFHdjc4jqP290TGB8Wu1eR+7DcC7yGOHeWRKSVXtjLSWXIWJIe2EM2eYs0+vGw1O6/eCZxIk4toaRF33BJV0eyJ0gll7+mOOUDOo5Jy2yrBcWhp6ivIp+nQJAkFfPSBMHvzrw0OtzohtBf8AZGZfLjucsdX8ZY7y6WNYbWprBh4usBlrRyDIEYU8P94niftpP26OLbFtDrkI7cBL+iVq5L069rZKFAXUoIqKtAxCun1KNqV/7CACFxADxQtwnOo4joxMhCwvmAduGF/zgXbppOpeakcglhdtYGkwuQwRgfECOa3zOlQNCeCtz8c8doH8vsS72QuvuamrbtbetqZXMTTJlJS8ctXHpGn1Qg7RYLnKYc36kP8Aik8WLHBM/bTjwuw6327arR5mv3q7NZe/piQKrI9uQg4xlWBi0gjxgeRTqG+gs0bD7j1fuJ7iQrUmBFbfcbVXXNwQy0Ill7wmONSq+7jVwqjPtFMtK12/rU6QusXFqwL57MbW3AjX+I9uW2mRA8NT3XcVTTvbFbOxtcylfqEmtLURlmlHDV43EAMt8OVGOzE9Gt7IxbOhs52yt2szb2oazdsdKspd4sIlhXorBgRdoAp58h5BRnxAGFx8I7NnbL2c4tgQ2w9Xv4t28ptXamvVy/spULC9dLCKP8DaNSfoCHgqxBPE4mEBxIqYCmBDrWXkbOh7giLq5yvqlI4pqKvtQ0GlkUi1hKt2zkT5VBZpTIgViJ89mC7lHv8A/B2ztf5f/s7QtbuTU/pVp5rkH3E2U/byyTk/3ixBYTnJft0WBAeP+jO2xr/YjwbVaSxylqkoG0fFWi0mN7VjBGl99KbPOYGSEI4qqKTgv3imcRpt/EV8Pa6eRxKOzHf5skg1e9OABf8AKVBFlq9IsgkzvIFPlKDJOeaAwufIm7eOx2flo/GO8b3RP3hn7DtGOfcfe56pfTH/AK5beTpzzDxP+PXGK4mIJ+35YCkp77dtV0zlk8FQ5l7amJVRtfxUkAMXLkwlJfkp7VOYr0F6tXAU8WE7FM4jjYScRUOrp5HE1PZhurtIGr3py0vr/SqILLV6RZBKO8aKfLoyTmFNAfKR8tcCdp4l8We48NzufvbpbDs69wuVFfzVI4xfDK0DyDuhKc5ZBZFpFkKPFC1+3rcR0VLHqwudkbXnv+XUMrol27O2OQlq+7ssaFQydTCqLXkZS0aReYxj4K8LkYIE4LoEuzv/ABibxhs+N7y//L5cZ9raLh+p/SAcsDmWFkH3EuUnbzClOWfCOnyXY7IgvZGt1tLhtHbSdMe2+r2uiscJZ3hKxZywOZYWSiepBeWc6JwoTlsUcRIEwEgS82GhwMOnMWG0OrLmAxN3LjI25frhC6zPINCNYXLhYNGPxzB0qcpkoRICiVfh0YXI7OFjsVN2ONY8q6m7fc1M3TdTY63ZfTNFWqTh+lPLn1y8CkLcSr94HH7ZkM8RUEd2vJCGtsxS3KSobX1UkZy/3FQo4teui1okXeEZSkyBKlKUItVqcifh4fLC4Ea/xHtzeumRA8xT0O4yNO9sVq9zXvClfqEmnLURlmlCH+8TxOI0sWLosCL0OtGeRjX/ACfeDVzljXqrNQNu+KropqtAtBZflpTUzmJyShPHNaHeKOO0BI7RccDEu/PLqJMRdA1uIGmKbX25YKYzVf2xSKGrrlwrmkK/QIFKpUFMIIkIasC/h0QJxWwJbca3TZ3LrmLbbSZlZca+zbBcNVl3vGLJWo3luIXdAChUyBNLmkqhbhqwnQWftmYdYaRu0bFqxq1k+e2mksUqpI1szwDjRswWbKNGT1GJyznRkahCEZ4sSr9upixdFShDBG1ja/d/zghluUkd5ZM1CWF7usFJVC5FMRi14ks2dI7MeXCAh3gs+WuBMXI141cMm49uaBtpmb0s69wuDVlvvM08yWWurC7gE5y5ByzElHSnDUvP2zX7iTDOJeKfm88jpaPeqWxyWBoN0SccX3Ce2tVy0gF0iFTo5JySJKOKA43EVOS7r9vXixxmMCGkRdiPItcu7J4NIJalnKzRDM8U5KCzJywjL6k9NSZHqFHCA3hAmB/4sw0Ri+WaGz7/ALI9u3lx8+Ydn21jwl0I1hkaesGnk9aA3NzOHMJYchR3VHFjiCft7oZ4tsLHzAvJDCwoqW+Ga6m2tSJScLuKEha5clkq4vUQ6Vvl0pGJCaAZcRI7OFjsxPclMOnNS+2Vqf4uU2HpsjHTR+5CKtUnN/TlLS9f1I4FPiSwtft63Ej3EyLzCunbcTa3J9duiQWd6cpkt3tq40GGTmBLD5YRS5Zk5IzTxl7GLixxBP3G9gYHVPfbtqu2trvBUZrL21MSga54rTIAYuXJhK0X3U9qnMH0EHPPE4LiYHHEdHFswPh7aM8jGv8AcBXNk5Y2vVOQoKvUMRxa9dFrSU9spNLPqySiZGw1YCn7jS/cSYmfEhhTrLyNnR9HXddJV6tIk4k/tsdYAWHIspSD1hRnlmjNKRpSqozQtcTEFhOw6RLYDC5JwSdjd24F26OeTbVy0iyVXtjGBbXLlcJSHthTSrZiyADNLVxBRSfuJ+LGKmFtvt3fbtquh7fgvaksveEzNKXlr38AAmM+0MLQu9wzvU6IfQUvGd3DU/eKbFi92OKA8btiO2tWGxHo20S1NXlZqWY0fDWjSzFekYQaV3yeupMD0CgSVVC14viT4WXEZmElSh1avI/dblkbq7AHpFkcNfa/SlBhaxVLPSjyTQyZ9rNPSjL0LXEh1ixjfhbhowtZdts7asoL3RyvvekzULxnv5wxGM2yMGNd6jEV8qKM0JQHiqsPqi4mFl+4VwzYGFjlg8mIDXNwKW+Dm3pGhEmnKvcHULWKpZ6RdsRUlXIU6Q5IVUUsJz94v37aa7EvA9yheR7aN7E3mWS39LtSQIL9oJOKLPqlq4FXplkrVU5pCnNq4fV5xMUz9wriYwMU/M95MP8Arm4F3Y5zE1fXSTSVXtjplq9IshIe2E2elmKRIs0oCHeFzbfNx/8ADQ42zsSLnaBokP8AU9Q2HdzlLHua6alQal8zxHrHWEVvPTDkYgKeCqFqi/cOsJzMwO4isLGsvI2a2zHX3wSr73pNIbTX/MVJi2bZFjJN7xyK+UoM0pSHhqu7jFfuIr9vc38JKn8x7tmWFZ36hLn7IyJSAPlL5ATGlemAWDPRHYtpf4GB4VUUoMuJhZftpx4xFY0LWNr90dmP3y6OHpFkSBVX/blQZiosVVM8kjvADJnUBmPNKCvHOy9hR2cmNb/47OVdjqXL9mcsNc02dTVlZp94pIq1ScAvIAmWrkX+lKeNjngXv2OzktJ/3p5qX2pcv4JWOh6lIpqwWn+ICjA0acgF7yMpqVAv9SeNjTjpz750fD9dN1vzJ/Dm0le+/rH9u1V3qMLArqdurlCT3T+7/Y6uhJV8MaFriM1xHjxFQ0YW0nbi9Z2TmXRy/oOlHLioZ55w6i1XMSM7qLLpzyImQhCeLV43EAY54iR257OS4EJ8On5k+5cpYgbuU/7mrGtv2w8Nv9vUV/LF/vCurJHE/wCJXEFhOevFjDaPGHWP+xHkWtY3m/e1Wk1LOVmkqqh7ctloLMnLCcR2QdNSoP1ChPDVwdYlX7dRxFjFJHiCNq7b9yb7jRuUkd5ZHLCizvYFUpJhchgilLsFhmzrDzRmLgVxR4XNt7mcB/3G2dhuc6y5fxA1PUNh3dA1p+2FGpX2pfNAQFfyBCt56heRaEo42Hj57P6XP/1kfwD/ANj/AO9/9B+3/wD+qcaHbnwJcLHZFz4fvJ2+htFTQPH3CuFabpjHG1f1TCWDqiwPP64Jcv7QejgqgzFJ+4YOJiLhm3278sTtwn2jt9StSX12fqhxhy13AAEY0LswxAu4IdG5yDKgvLhVYOsJ2LHCy/axExv4Ht9vIqybfXeZbNZekTErBK12wHGFrFUs9Ae4Hop5h9RZo0UsQT9xPcRpx4hpH/Xnkwm0bJ+9qkqu8N0HAVTPbjiwls+0LLGR1APrS1EU0pQniqndXnEdT4k73KTAxT2ryP3Ybghlsc4d5ZMBKVX3ceZZchYkrXblmzpCzTxAEUsHTiYgn7abf+G8ub7dtVo6w79M5l7amJAAjymweAxcuTCV0zoR2qcqfQQM+lWz4EuFgT2niXg7yrhso/vbpbhXG5ps7YqK/mqQhLB1RYGQd0JTLVkF0hFxP7u4OnEZriPdAdvrnzRvJA2w2+4lM5yNB1k5K0te4gPprVctKD+4Myna0wyJMy4FcFkdI7QogTBd7HsdbZ2G5ztx7te2+U2hrN2uLBal4RZYl9XotAwJPaQKeeceRaOCrGLjF+GxGlxFdvt9T5vPI6U+33fqN9gVbo5XAteUAgBYciykGdxAs6Mocki9StqciXC+WHEvBTwcN0K966m2/MN03U8lInx1mZfOqNAZoOkscucyZS8hcbHPyJwXQJcnlP8Ag6JLnalyl+8aFrdritrf16yuOZXWTPu5sp+1kJCMlVHR8IEu3AliQUdOMWl4bo7XO0mnt5cP2Hoq4UsrvZMClfal80BCD3Rl2+eYJy0ZcKpz8LkCWNy+iw9jjbjw3O5q27YtamuKe67iYhS9kLNSvqNq0EhU+0FNaWsPItOfGg/hcgTFeO2Hx/8AY2lw2jtuz8v9TXD9G0VTMK/c6oVhYrLBdx+kuTOn1hRnwVYal5xIi/DYiTDSJeKfRnbY2j3qlsc5Y2RVb5xxfcJlMaV6YAAukSaGeSckISjhqvEvfEnhg4joxMjxin2I7a1f77XdjsBqbPlOQSzu2qzGNC7MMKD2A9mpmP0ClPCqilgmcSNOLFpw0iXj41mNrZo3qlysOV6tJmgOL7hJ4FQOSmUAXSJGeWScxpShNAfCkgXyE5oum9j0/mT7Ju10rH+rn3xil5pZg1dcuFc0J3aT2v0D6v4X/wAbjkBjFw1OJiC+JOrw0YEbrV5H7n3ApbaOHtqyYCucq9wZoC125LJSLtiDSzyFmn0TVWILEE/cFn7iowIvR/5Qu29uh8n3g2qS36VqSUNu+KrljMFmYaWX5aQ5Vpic0BTkgHwc+BPPaIODxpQd5i8utJ5JQ33CuMj79TC0Hg91CL/8FnzTR/TpkyzS8FUUopfEnjS/bTiZgdbuswSbNHa67asBXq0iQErnbaYALYclwpaD3QozyzDmBIUpVS9hqxYxpcSN6kuxu1mNrZ21zNhltpmq9WkchLI93QaBUDkplIWvGyzypG5jT67ErFLFj8OlxIbYdYaN3RnbY2sWT52rNWN21TiVszwDgHmKFoYuDJ6jE1s50ZIQhCGrC1RfvHG/bMiYu4WNpQSi9W5mru+CV/dGlEjJZHbRRW1G1XFVAfGCXVnzNmAjNOhbhqwnNJ+2YpQ0jdUgliPrWUMttNJGvbfJGkz3c427VaC4ga11Uqn0kVAZcaKTxYscfr9tPCSuw65Ju27FHmabq7NeSW5JAvsjpQggxOZiohHjGp+t3ckAlSVufyJY3L7Eu6f9IXEi/wDq20m35jp7rsZlJd8czNQUbVnpEDulhrW8wJjDJuJ/wdPE/caX7WGBgKh18uDtlycxXg1cl8KuZKwNleK1EAMDkYUtl+On1uZjPQsGZXijwubM3Nhow0ONy65i2WiMTU9X5q2FBdWPIXTU6Hpcx4+swF3UlDNKEPCqgXB+OzG1vDQzcHe49uW3O1icwVNT3XcVV13/ACBDTY2uaR+EYmtLKdlnLxoP4o4E89sPmJeLD8/mT+LObTb0xc/uZikxPHIKt/t6YPEL/wBo3qzFw/8A41kLX7etxHBiYwGFdO24mq7gXbokFnenM4lV7YxoMMnMCkPbCKXLMWSPXhVO68T9xFft7viHt+HXKF23tsNvxV1clv7ItSUsla9mAgJjSvTAIVO4QGhWqhzQGfigIdwL+WuO0XGlgqence3NA3LBKxs69wpjCqfiBpGGSy11le7eectAWWYcp/xiuC/bSftXxbR4+HtoztsaffZXNklY16qSrqDO6lUVRVoGIKT2Ck1M+vJCEi4FdL1mBPJRwMdm48NzufzAafLCz2pcLlyzOyalC+vXTQQMPjjTRlzMyLShHFVcxIEu3Hb5l4sYdNnRJc7+bTb3cuNDYd2p2TE8cgKVdqXyuIsHiFit55jchISLgUeJewnYpsWLoxLwk4p9iRtWr+su7HaTU1eVmoJD21+mqK9JTIWA+geupn+sIUpoDFHAuBLG3NGuLD07chs8dlzaZliuLm67egrMTvEGJWFG1WEli8QCK02RuYUJTxADnvhyox2Q+xhxrjFvGGz46tpkSNvafrNoxxM872pWCJYV6KwYUrdRQZ5KiMwpSLjqpAuOnPvW3sdN1vy28baT2339Y/qlrvhGFgWFO3WChE91Hd/WDp/i1eNxyr+IvhIgTz2W41xrxZ8uuYtPTGZsNca/2CmqKx3eVjv8IXUAH1MkTSpTwKYal7FjBZxIkwziXin5CO3ATR71S2OzXppa2cccX3CZzBZmGgF0iNyr5JkQBKEFcO46R2w147IuQU2t8wsSX/0D3O+U3Tr2LHGs/RpmK4ZVc+X9Yc7fPqEZkgUxi4anEw+v2r4isW0budjyPPPRczbRzt7ltiVdUF56gaMtTtizlc71LRVoyeqRiShVYaser9w6fuJOIqJcVtZeRs6PeuZoRKvvekScqF+eSriLZtkWMB3SWivlInNKUp4v/D7C1xMfuE6FcTMWzC328irrlFdujmXLM0jSRdtQGQWnMtUVw+of+bz/AIiElMV4t3w5UYE4EQUgpGLeMNnx3RqbT29p+s2jYIWSeyshEsK9FYMND0jDPJmnMKUI40C2X+9vY6eOzQobYWLbaT28sLr+stUtd8IxNx9xMT3UHfqnBTCjjQ7gX8ikdouRr3Tvf5ZtA9ssdN3BuJTGrfWqHWlvdTfoOqSZdvPNBU8UUnEw+v26Pw3o8N26gk4l/vtsWpwNy3pKGwzuwqgGtqVsuHFA7CwKrlmPIGYEFfxF46R2ivAlbdNmuts7Z1Pna6V8ptDRrtcVDHf80RYbitTSd4SRSTyHZZcFWH14nExxuJCtgY9Yday8jZ1zl08GrnK+6KRxo2r4rLQSWo2paqqF+QlFXKYvNKR5ir4Yt4E40YExBjXGvCZqnInSdMZm/Fwi61pcCrHd5WJJkltihdQDM8skSZpSlVPhz2x18wX/AMK3nc1NJ5pw/wDDK2/pkpTG9zXqN3cWp6x4oQU8qZs3SlOh2+HzKR2i58QLnF8vWwNA8jb27KF8pjZX6ZS5pqGX0BZXH9mnOlq4SIFwJhRHaO/w/Y1vTvHeO19MV7FcZ+s2ime1TupWMFb0ahSeo8M8npnmkHBU4MLX7xBOJhOiZhJYXJN23Y33WXbol5NtXJwiQ9tfGAxcuTCVgPoFNKtn6IAFKRWIn9NHAnCPf/4xxIvjr/L/AP6PurRsA1P6VFQBKz1YH3EucnbzMSnNq4XHPx2OFHZ2XT5O8q8Nyje/hLcLHbmmzqZ5n3swl86o0B1v4plqyfTDxKsdIPwJbOBNiYl4KYO9ubjudTbfMFcXNqW7YKUifHWRovrrI0HSWijNMnPJAuCp4sBTiPW/bo4isJMKedkEnnv6zma6c7dnbEoVA+evrCFsydcCsHehaJaMnqAYU8bDUvYsYLOJEmGcS8U/IR24CaPeqWx2a9NLWzjji+4TOYLMw0AukRuVfJMiAJQhAPhgY2FHaILgPZFGxhtCvSd2xA0SrpupqYTVL2wtYEsHVFgYVftCHLnUHKH046qYGP8Artyn/wA2723lL/8A2db+v5/7hU+7/wDK7eXFVcbjmrjFw1P29eLFXhmwI3aC7eLKfcCltolas9rs1XOVe4M1Bhk5gUi7YiJZshVEIy4FWXDv5a47YnuSmIv5eobOBsrU/wAI7sr3ymmj9yIxYDKsHm/pmzuPWUJaMtAvDx8ykdm3iXgp8RXccSXcttTbfKKzoXCmapE+OsmFq4plcg0HSWnKWZOQkoEkqhbFJ+4LfEmZmB2Gjd0aCTGrWTr2pKxSqsAbTM8w4A1sWa4aM3qOTlnKjICEBQVx0iJAl/dE/wAqBh05V2Nzsf8AFy43NSnpaj+yBDRpyKP185qvR+kfApiCxKv29eLGKmB1vwR52O28+h7fdfcpLt2dszSmmteYApBhk5gUG9w5EtGUOaBy8CsdMUeBNsx2YkWIKPztyJLx3Opxb0xsLm1LdTKIJ9kWSkK69dK6DVPpCijNWTmJCE8KrS/8nhHbko4GOzbm4/5gNPlheaHbqdyzOyak+5r3gw+ONFObMzPJCEKqHb4R2xcc3HT5xX0SYqaB+EtvKZW9dMnM+9lKV2bZK6vW/iCvlJ1C/jVWKOHfITczgYl8Reu/NPZa3EDaNrtzbVA1X9sUhDvLiqQr9AiaUtQVTMSET+8TuuIzfhsOi34vRF1l5Gzf8n3f0g5X0Gk30AbvlK6aa1XLSWZ5aEU8pSc0pTw1cQWH1+8OWE6KjfYEANpO3F7Q9wO/uolf5faU0igKvlDMMMa2oGHJM7aC7aeUUyEehXET/kgOUewPxjvHX+YH/R+6LSTTPq3VlbaiP7eWrJ3M80Sv/Eqo4sWlixhtEyGmFjdrtwh1iyXd8M1Q17VWaSSZ2zu4q0DEDD1BMqSZolQlCeJVf7EE/bSfvFji2wkx/wBGdtjbErFbVJWNeqkhUA9S+XUVaBiFhPoUmpn/AKEICLgriJgY/p2Qj+ZeKPOLnFr+t+ybe/aWOC3+yWP8D9FP6PVNOLhqwL5EtnHY23/jX+HMSLx22mQ/8xc2pbsc0o73NWyUF66Z6CljqCijNTRmYhKeNB/kTHuO2HzGt/LqJMRd2fhnzGvuOwUzGb930K6nbq5VX6IKtSXqEGZIph9ik/eMpxIVwzxbN21dt+9coqVqSPmnZHGnC7igAoxh6WYrK4vUQbvPL1RMhKAg/AvnhAnD5BR/3pvuam7OX7TsaXLzTFwxZafZKMBq+oUgB8gYLbLMub1QlVPg58Cee0QY1wUg7zFw3Q60nU2ZuFcZH36mFWJ7yyK//cKoukA/p5JlLEhPFVYGGXHbEpvaNbgY7NuRJePTeYDM5YKa5Qt7lWZneNSWrimVyBi8cCMpsjMxIQlKqc9z8dkKMdkPo1xrg7vGJL46tpjM3Cx2frNoxxKx3eVhCV1eirmFC6gBnkyRmJKU8Wp8MZRcRpOI8cTIaYWOULtvbZ2S7vg5v69anLhJnbO7irQMQMPUENStmjNAUJ4tXjccq/ijvhAls8zXTf8AjFuOJLuaLy/dLby4p7UuLIxp+aUFCuvXSugB3kJTRlkLyElPAphqd1+8PriRJYC7EX5YnkhPo/M14NIJfXcuqHHDZHioSMtStizkF+MkdW5mNlSX6WrB/wDKj5fIT/yJ1Tdn5Sf1o1mlUP8A3vqt6NS8/UievR9ZMuJ/d3AVhOetxHuxFQHhTzsdt57DYjma60nbs7Y5Ko0fPWlhBhk5gTTu+WiWjIDNA0J4FcJGEiO0KI7R3gpBTFns7Z219Taew1NoazdqZ6yT2Vk4VvRqGh6RinnzTlkhHEqufB/Ro7Q+w0PZg73HEl3NW3axOYNnuu4UxLql5BY0q6jaq6Qj7Ria0so8hJl4qr5o+a+BP5l986piRgT/ANN6ZQ0bWmxZfb0gqCxWZ5cn0zJMpugxM3CqxR4LOT0CXmjX8sm3Nx2Xtm9LzljbrhCt9auPWtTqTfoRazZeuWfDVZeFz5647Ynudbjcq4kqOytM9z1zb86mmt9saSrrdwrqpX6s6dX06gpzFHieL4MbNft0WAwIday7bZv9wPBq71q+g0iUDVfFGiotVzEpL7aUU8phZoTwV454wbkwJuT/AExN47x1L/V9p+/LRsK3+wjS7GX/AGbiT/TnwVYxV5+z8WKvExgYp9sO3BOfcC7scld5bawzVclV7Y+42NRMzD2wmWs2YpEIz45rfntCiBP/AGXDaO3/AMmfrOirn/EsK9FYM/3c+f8AbCji/wCHb4QJxcc3MK3OK+iTFTQPzT28uFb10yde/ZpSldm2Sur2n1AV8qvULpTo6fkfHZiOBjD86G0VLnmRED6XMTTFMo1le2M+dYZGnrBqsr+OIFzlUMmDMhDV5F84YE863Aen5hd//wAwGZY7T5nWK5bMzvGmA0XTKYxeOAN1b5GTVEJ4lWImKOO3PaEbgYl355OxJg7r+txA0xTeH92UwGq/tikVb/b0FfoEZ9aoKUQBI4asdId88I7MTBTGvEXzUiSvXOmPNtHQ+XkimU0jvEVhAV2vqCuUUV1HItqUyOoSQp0dI6QJhRHZifD9ex1tnYbnOud2q98uNDWbtTKaql1FliX1ei0DAp7R4p5+vItEnCqfDC58WF/eYO7HGvuamk7t9zdorUtMlsvpmho05A/Skmy65uH+8WMXFjBZxHRhDi2U+ULyPbf0YwVGa36VqchYF7EoEDLFmWarqfqIOVat6pCJCCuMEdOR8dsQca3Adax5V7T5gMy+q8w9TUy1Zmd40sekafVGLxwDuc8jJfRKJVZcO4Ev78z3JTEXyrw3KOytT/CK43NSnzo/ciCvk02gA39Oc1X17YUcdKcBTuuI6mE5xmBDSIu+3bVdTsng0g5l3kzSWhmeKclJhchghl9SeqnMj0EjigONxAGOeHcdnbjs5OJf5i9nQ2c7Uve9oqbQ2HdqaspfbzJWGpfLApPpit55vQKJuBSKWIJxHUftpt9dj/8AKbG1vUeZrv7VOfu8oEgAyPKQWlULkUxIM8ZCJruU3MZXCAwMQL37Al9mk4D081L7TeYEErHQ9SkXFkLM/EBpgaNOQa94+U1KgZ+pHE/vE7r94v37dFvsCIvMqNsSr/cDv6QSxtL08lAFXyhpKVD6qmrpM7aASU5RTDF69KviL89n9wJrb/vZ+VdjT3bD/wANualO2FQpS9zLlo05ArHaCmarTH+nPiVcc+FyBPPZycNGCpxvzJ9y3KxNTXP7mrLqp5DSNt/t7kfbM/2RdUoeGrHSOkCYUQJYj2YenW2ds65+Xd7b5caGs3a4UW9HhLZYrejUOJ9wQKeedXyyRwVYlYzOJhZwnQ2gPEvBfau2/esXricxTh6RZNIlaL9xJAYYsVTDwH9IwyZ005ozQiAHid1+8ID9ujHiA8RdZdts3+xH70glX1SkShVaPty0k0wikYsGkd8CJ8qgM0JQlDVeJRwnOpixdGGceMLHJN23Yv8AfalvhpPJeXLNQczu4q5mFyGCKF2BJmrZDyQBKOEBHR8Oa+iRreyMW8Ykvjc7tZm3tP0a0pKyl3iwhV1isrlhF2gBkkyHmJOfF/8AyMfOj/NiKOzsSLnfza9k1C6u/wBk+gsEqAJWerF/aTZz93IxCc9AuHeswJbfyeYi+dESYL23Lf8ACO3NqauuG6r+4CQrr10roWfuKlGj25BDDwVYxVF+8U2LFXhmwMLHM928P8+4FLfBLE1fXWarnKvcHTMV6RhCRdsRs9LIUiBZJzxRmcTCA4jot+L2C/lq8kNb/k+7/MU5s6pqByAN3ylcBpZFItYLM8tA56kpMqQpyqrEq8TiPW/cNsJMS4dbnduNmsXpurnKVno5JK+X0koQYZOYECOk0uWX1nQlIeIrfDFHzhgTEHdj886IbQX0ndvtm3OZ2rrgbL6ZQFhi6YsFh+lUuqPXIEfFVRgc+OzG+YN7MNEHduRJePaeiPbuFTXN129MtY8JdElXUbVXSeT1oRWmnDmJAeFVijfDAmxo7PM6cWIxbc3HZc2nS282FzddupkGMTzSApsbXMs7xEorTSG55J4iqDODpxGa4mItgYtlzlq8kNdo0XgpnNnQdQOMGLxVA+mtVy0q5fqkdOpN0pCLiqsHTuuJhjxYrGElgRF0Z5GNJuA7SDljmhVZqwvqvSNJhbE0ws9KO2am7z6skolQVvhjngS4XMHEvhWhdzUvtJ5ptvW1xh6bJKpMbx15XFWqTng8UtEtKY39QRcT/FKFriYcnEacM4lsL5o3bgbRvVK6Ocjl9rJwDi+4SMwxragYcAXSIy2tckyIMShFq4GIFwJcLe0a8ND030NoqabojMsVwrTdMuVZY7y6YJYOqLAzxdYAS5ZBmDKniquNxFWMWKTiQwftXhni2bu54JRsnoqVqcpbP0clXOF3FAAltoXa4Yri9RF0ZcusCRI4gCFsUn7jS/bMxSLrd5avJDWtzNjRaktmrqBI1FkewIAAsORZSFLxix51KxsqQzJ2JV3XEie/cNn5iXEW1dt+9YvY9aQcPeFkSSUX+GyUhMZ9oYWBn9IQ1s7hOaM08Kp3YpYscUz9vdDNgN3c7yRssNwKVqzVLV9HJScq9wYCy1ekWQkXbEXPLkKdKck9KodtTfsCYuYPPkTseVegflvzPq6lqa4NofuuQaNOS5+qObOn0/p4FHBeJxIiuJhOYEB4dcoXke3fexHg1c5v7ItThDaPirSAltK9LAaX30hoVpgZpCjhVQtd1+8UziMyA6lEX5f4JRPrcsnE0gl69X004a01/cUpLW1ekuEJP8kYJ7imVMAGSbViI58CcI/KN7OTtjDaFev/AIt3CuG7K1OQv7KY1YaV6sLFH+A6Gc/SH+EVRSxK4sfidOI04Z4dYI6M7bGo7zUtys1Yv6pwDlDuLZSuYVTMUThdkSZs8h5IQhAkBHSOkdoUQJYnw/XsdbZ2zrndqvfKbQ1m7XCmqpdRZYrejUCntHinn68spOLUxYu64kMMJ2JaA8NIi3TtuJs2ycTSDgbPvWkQtGe4nJEY0LswwZ/UMVHKmjJGSOGq/wA8T94QH7xY4tm/DrWXbbOxNvlauSr6pSJCoLXUBBphFIxYQnuFIny6c0JmQgORcCWz/TDxLvT8wsNn/wD3uJFiuOntSx9vV/alIxCwvXSwghW6Cg0beoKYJghcP93XdfvE4/b3N9vxF5axthrYbfd/SCWzyv1AlIFrygJLVG3qamQgzuIHaVJQyjD6qp4nixYtJxHRYHxD4daNBJjX/NV4NXZqxr1U5A2N4rJRdqtBcQpl+KlNTOY3ICB8IBz8LkdsNfL6LD2ON8vWwNW3bFvU1N7K99MQpeyFmmSy1wqfaCLO4rDlp5otSKTu4TvipuI02BDSIt08jiUbJ4NIaQNEvTgDM8U5KsWs1i1AZfUkVPKZGScpkBgYc+BLhY7H2dN/4O8q4kqOm8v3S3CuNzTZ2OsmNPzShCVzqiuMB3kJTLVkL6gp4qqBeKPRoEtuLEa353HDZ3LbTIt6ZZ7ruFw0g72RWKSsKNqsJKU+oKa0tZGQUpTwqsUcO47O3Al5nAxL4i94w2fGy1uIG0VNn7DtFwg1X9sUhJWGpfLAiFfoEG3kqCzCkSOCrB1FJxHUwnLGOKPDdtXkfuTfb0Wpw7yyaSwzGd4aqBJZchYiiuwSGbOYeacxcSrg6hbixdR+1jDrCFhck3kdiTnA+d0zXkvLklYW2F4CwNJZchYjCfEMTNWnOySBCOKAgXyJx163iXgp+VeJFRttTbfmNzb89VSJ8dZoqC3cM9VNB0lpp1Zk9wKBJqrC5z25Euz8y/8AMnzdb+z/AL4fb/ZeP9vQ/R/xdU3DV43EAYo4Px2eSOzzbAwd7xhs+NlzA/MFTZ+/LRTI0z6o0LDLsVgI/t5biTuZhSjhVci47Qe/ph4l3p25El4/3uJFiprnLG39vV/alIwau2tTVzCFboKRazVBZiQIXBViVxKv3hAfuG2IpdgjtJ5IvaxzNczcpK/qmlEkqjI89BRpZFItYQd4xZc88hsyUZo0GYpP29eLHEXDRvt35f42xP2jt9StSXrs9NZphy13AAQqGTqYUC7ggS3GQZhgy4K8UeG/fsdnmez/ACbPNS+svxbzi0PUpFMgv7KqGjTko/wRNSn/ALXDVakRNZjthh514dNuRJePeumfi682pbqaK32wUK69dK6Cv1ZUZvTMSE8QBB/kTHuBOHyE/wDMWJMOt2flJ5jI3Hfrhh/730K6nbq5V5+odWnR6RCyS/4pPE4jqYTmnhJxFQ6+U1229R2Ydq5z93lBpAX1/pVEJMLkMESjvGomu+jNBSQ8Ff5Eu3Hb/Jo/1xhs+P8A1K8xn7DtFPWf3D1WGpfLAq/3AbeST1CmTiVeRfPCBPJTDQ9PzM7I/ZGnY7M5eXi5crHZXTAavqFI8PWMVtbZhyqBQl/vE7uLHEa4jo4ScW0ReULyPbf0TdIZrf5g2pyF8XSoJLLZOnlkq6PU0NzW/wBKQiClAfMhv2O27H/+JNY8q/5fvbydq6lqanTafhFFBo05AE+Qgc2c5cvrw/3iilhOwsuI6OIpxm7vt21W/wCQrmWrSZekTHIVHk880BhixVMPGd55fRTkI9BIShVY9YpOJGlxH5iZg2busu22dM55rtqcr1aRyqS7vbaIAGByMKWQ+CFGeWZ+aEhSm1Y6PhAnBdAliQUdOMXInVLnaTT28uPRa0lwpZXeyYE6ea5EHujRlXzBnJkiAI6REgS4WifOHh05qYkV655kfi5cYemyUtK/bwiUDqjPGrfb5S0u53BC4FMYruuJhycRXwkt+IvN55HSn2+bpBzA5fXRyuvrXSBJhbW1As5CO4aK2o9OSRSooDFHhcx2RX3M/wC4DjaXz2suYEP9TY5+jaLQKZnuZpobitTGseOEuTOmZPkhPCq5iR2eSBPzLxYw6bxhs+P82m3u5TZ+/LRcsmJ45AULDLsVgJYPELDcSTG5hSkXGfCBfKjmD8QLB49OzobOdpPLdYsdQ1m7lZTV6WgYJYV6KwYso8ggU8/byCgI+H+vYgnEhhhOje38Dsf7p23E21td39qnA2fetJAFzymmWIxoXZhi0Z3UCo5ShyRLwqsHTuv3hjftYb8B4i8ynbiVJsR39IJY3NDTyVgDR8paSYYxNMMPNM76AXdOUEyBIyK4FvhAn4fcdm3BR7IxbO2dbbtae3lxocy7tTNWVLslhP0bTbwIe0MV1PmPLLJD/wDh7PFhOaT9xkYGEmHWjO2xtu1ng1dpLGvVSVsYfFX0VFWgYhYL9EpqZzeiEB4tXjcc1cYruuJhAxYq+PVvxF1l5GzPt+HWkHK+qUmarsta91Ak0sikWsIWe4SifKmHNKZ0KqFsGX7hg4jMb8S8aHKd5MMVa9d/l0S3dn7jOGAvyiRiLaF2WYAzpQdRqypppCngrfCBcCXkgTEF7IKPTyJw3NTSdTe2xXHo35SXAlk+EsmIX2XYtAJpPShFxXnTmWBHBVFLB04mFl+2m311ctcJT90eZrv0zh6RZEgAyPKQeY01iq1T0GeMgMmcpuZX8BX5XNt/0l/houNvHeP9Sm3qen7DtPCaHjtk1OqX0y6DvFht5JgZ5gFxP6jFJ+4iv3BBSwOt3RnkY25drwytSVjZFUlKVz3dpgCW0r0sC0td3OhnSDklAeKAiI+ECcI+OyEbp84rGG0K9f8Awlt5cN2VqbHAZ97KasNK9WFit/EdDOTpD/AUw1YCsWMOnEiSpRLhTrLttnR72GWus1X3vSOOSX7uSsCMZtkYMC105V8qSc0JTw1ceq8/cFsJz8wzxFYp+ZTyRK0zZilscljUtPaSqcv9xUnLFmWaSLvCBlTyBMkSUIQEO4PwJduO0XPmXwd7Ohs52ga3+YK40Nh3amO3+yGlYal8sCI/RNbz9WQUC4KsHWApxHrftYXW/CnnZBJ55NvxN10527O2JWELXtAFhC2ZOuBQq9zKWjVDmAfFVYfXifuNL9wrflvw65vO26Wubfj1q5LAq3RJpS1+GwIAYHIwpDP7gRZ0bgOSBZpVWIKKT94gnEiout9u2uEp+9D2/E21JHtqyOKQte0AABprty1SUKvclpZ1Q5lfxFYFx0gTASOzbdP4frrc4ucVtbulfLjvbc0lTNMF5rVLHeXFVbO9Ul0qMnVODJq/Do5E4lLTEu9n4jxIu5U3a2/MU6FxdqSl45dNQFMzyAg7RacpZh5GJmSqo6OfAnkSxIKYqYO/KxoVzysae4Vx+PrLhSy2eyoi/wAAPlDT91mVlTEjhVYLHPx2fkvGt04O8xYbQ63HtJmbhY7I+/uFZd7xgrj7iYXdAP6eQJQiz4FHdilhOhg4j3YioDt3YkbVqw2I5lq0mps+U5Ko0fPWgCVGhdqZhp3fL7NSQHWFCeKAg/8A5ieHzmx/m3fizm1/+8GaJ9Dz/wBwp/af+b28+BTHrjFft1HEfnAVEtT328irpl7EWoSy7yY5VahftRJCSy5CxAVuk7qp1E+okg4Fd4azAn/J+4aIxfMLv/8AZFfb209qWK5qqx1LoUX11kenrPDRt+maoEHDVh3HSO0D+bka4sOtYxJhXoHNpmXymbzD1OdWYneILGrsjT1c0sXiAHc55GyizSjYo8acdoH7mgp8zdjEmFdl7nstTN5h6nQWfo0Bq7I09XNl/WO5zz6ReiL/AMLnInkS7Py0fy283RPvP74fcfe+R9xX/X/w9MvDV43EVL2IJ+3rxYxvwkqUf9iPItba5ZHbVJalnKzUL7X6UloLMnLClHkm9NTteoZeFUvYsX7jS/cb4mQ0xw8tYJQ121ZLvLQls1dQJQSZ2ziQLYclwoYeoI86maJQBQlMV403wjtCiO0aIKPZGLeO8dubtae3lNn6zaKausqXZLCK3o1Ah7QwzyZjzzy4qqD8C4Ev7gTw+RrxLvTYw2hXuzW2ZYrhupam2DFZX7ykYFYJprACBdABzZ5ClDMnif8AD7hqfuGDiQrxxMCN2xHbWtc3A9G2iWps+U41mKvhjNEY0LswxJXbJ7NSYXoGbgriI5/zKR2hH8P3k78vWwNf8fcO7KF8pgav6pi5pqGf1xZXH9mnIl/xSd3FjiC+JO02BDSIu2HbgnRsng0hmru2tYYABmeKckBi5cmEjL6kmUppkSIQjMVjAy47P78wcFMS+OyxhtCvaettPlgpm6lqdNZV+ypJCsE01gBAegY5s8xShmRxod/lRzc+Gi//AOe2l6By/cr+q+s1Z2y0/cCprejUAf5CwmehIXlOkHDVwuOf/k8IEuy9kWIO7c3He82nt3DeaHbrh5bE8IgR9zXvCyfEQinNObnknKKseruuI9fxJ35YES4i7Edta0y9eDSDmpZysBVGX4pKUGGTmBAX0p6akyfQKeM8WMXFjhAcR0cJLAU+WryQ1v8AcBtRmtnVNQOQvqvSMg0sikWsJR2zRz1OqVIZUCr4QLjtASBMQXTZr0/9k87XSsVP8OeYEx3/ADRGDvLiqk7wk9r9B3/d0pik7r9xPcRp4tvhvRFtXkfujrBWkEj3hZHAUCOpsJCWz7QstdT0FBrZ+uaZBcRXAt8Oa+txrdOMXy2Q2w2W20mZt7eOjbhqqy73jAhWFissFiF3QGyXOQKYS8+CqDMUnE+FY/eIuGbfbu+3kVdo7fUrU5l63MSYctdwAFktWolr6BdwXcp5B9RZBaqivP3EV+4ILqlin5lPJErcvLKJuxyWNsjTyUoa/tCZS2lelgSq+TJQp1Spki4VULYW4sYdOIzF34bzC1l22zW1iJt0zVfe9I4aCPaGwMRjNsjBrqr0ZV8qqc0JBxKsUndfuJ7iNPFtiKiLavI/dHZhWkEj3hZHAUF/qVEhLZ9oWWSnvFBrZ9GacxcdKo6QL5r6Jip+IE9OzobOdc3ELLHUNGu6SiH3llGBWFissFqi36FiknpegUDFwqsUcO8Cf4mcDEviL/pI+FrcQNotj/cGq/tikKw/b6Cv0C/3gu5Mjif174eziOo/cb2BEvEtth24J7avXg2acu3msEoGX4pKykwuQwQC+lJk00yZEITxQGHj/k1/m5/1i8utg/8Awi/v6v8A8xSkvf8Abmp/2ZvSqsDERP67YaPl05O8ndN9k3duH92uV37iX/j+oZ9aXpkl4qrjccq/iBwLgS2fmpjXunccSXc2P7ZYrintS4tVb61RCuvXSuib9CaMuXoJOfGh3DvHZCjm5iXxL4i+ROqaBrbb2ix3o1mlOpK/jqQhW9GoQDoLRPXmFnIIXGgXgsjtFeOzbez4gWGTeO8ba4e3eimz9GtFM0sPhMo8NxWpqhPogMkk/rmPjYh//ZG/yaP/AN/tlf8A8WofvP8A6363/B/Y4KsQULX7w+4sYqfEhb7CunbcTQ9vse6JBuW9ZpTHWu+AYzFK2MOQPuK4quWQckdaJVhbg6xY4WX7ZkeIlrnJN23YrXr902a8mkXJI1Uv24k8wxYqmHgI6QJkrVE5IAlKEBHSBfITRHTex6fzJ8ndrpWP9XPpGKXmlmDV1y4VzQndpPa/QPq/h0pxBLz9uo4kVPiQ4ScU9q7b96HWY+xyR3lkcUxw99fzMLkMEsD9FcM2eXqiUfAr8Ohz47RXjsqYw41wd3jvGppkSNwqbP0a0U1tnne1Kwg3FamUrdRQZJKiM80i4n93cYuLGIriPdHhvqe7XkhDYbffuozVDZGqnJVVr24BAS2lelgQR3AGUJKgZUpz4qqFuIJxIYP2zG/h1j/dYSnErbzd/apwNn3pIwKHlLZYmm0LtqmHGdlAqOUo8isuEBi3xp/yIeyCmJvmLEmHW6NTe3Zekff0CyfCWSLf7eqT0oH9OdMohI4KndhbixxTP293xIYDsLYjyLVhsRj3TNamrykpY7R760MstXpFkGj76v11MgeoUDSKxEjpgTf2BMI2ltax5V6/+SV82DdS1NcAH+sFMNGnJff25s6HTwVRSxBP26jiNPHrDSP/ACweTEBRsodbVJbd5oRwGWZ7qcWksuQsQ1nqJKmq00TpCgfFAQ7wMR257Rciw/8AFH8yfYOX8W9EU/7mMhp+yFLFv9vIp+QH/fF9WaeFV8VuBcduRMLnsex6eYvLrW92vbYqbI+/XFEtS8Isz/wk9pA/pzjlm4VTUc/cnywwUdODvPaGzL3rtJp7h2vvyrksrvZMEhYZdisBEHujTcUMwZBHlwVYOndfvHG/axHhgRF5axthrJuB+9IJbO6NQJWFVV9uGklUUbVTVUkdsA6tSoKUYc0qp3V5+3r+Gy9ykwMU907biWG4IZbHJBZ3rfSlV93HkYZOYFK125pcqQskcFcRGX8ykCYRxrxq47Nubj1/bTM5YXlC3XAKy33makuaagrC7gEZTZBzyElIphqf5xMPr9xJYENPiE7Edta0eyeDlMc1NyyknDM8U4IzFO2MOGX1J7tSZHoFGWilg6xYvW/bTjxjiXNiO2tUd0P3TZrUs5SQKqn7czD0GGTmBVSO0DpqVBegRJ47Uwtha4kFnEZkM4aMLRnbY1ayUro5YpVThnGdw4YzBZmGjF1CTlnkjJCEIQV8biKsQTuv2zX7ipHiL0ReWrtw10Pk+/ekEtnQdQJKVW77crpqLVcxJZHlgHTqVCZUBSnhVO7ixfuGDiPdDPFtjh2JG1asKKly0Jamz5TknC7igSJUaF2pmK4vUXZqZfrCJHCqXsQXxJ3UcSN7fiXH/bDyQT21eu/tVgLt5rByAF+USWksuQsQDOlBk00qZEoTxVS87r94fXEje/MS4i7EeRa21ex60glqbllOQUX+GyUjLU7Ys4DP6Q92pcJ9QpSiAFHErhOZuE6CEM4lwR5vPI6W5b1S3K0mBoN00knF9wkqmtVy0gF0iFTo5JySJKOKAxRwLgS4W5oKQCenlXDZRsvmAadiuNzTZ6Cy7PZWjBLB1RYGcHwBplq5n9IUI40RIFx2cLlHjDiw9PKuJKjr/NqJFiptzTZ5GexPaiDBK51RXGWreIUmWrUN6gpFxsW+FzfsCYEQndNxuVcSVHdG0oSanrmpTrhB6772YaFXJpq4BLndEmarRB1By4auLd8MdkKOREFIKRi3jEl8d0am09vMdn6zaUFknsrIRK6vRVzDQ9IwzyZpzElCOIqilC3CczX7aa6pMLaUEovUeWUTbppL+g6USBDX9oSO7Wq64lKr5NOnPVKmAjigIFxE5PR2bfOvDpsCG2Hq20z8Xaryx15TNrfbBGsNrU1gwr9VW1qekgQp4FIpYxX7wBYsWnAeGindQScSjZOJUJBNes0C0Z7icQetoyXFsZ/UMX8KaMgZIRsE0LXEaTiYpoZw0YXzHu2ZsiyUro5z9eyOWTjO4cOoq0DEDF1C7ltkj0MQjigIiR0x2OFAmEcFNrX2JGKmv+53zHK03TFwCz9GmJQOqM8cv6wS5Z9RnpxKsdIF818djE+H66b07Ohs51ztJXsdQ0a7Y5TVXeowwKwsVlgsSe6eKSfoyCiTiqod8iXbgTFyE+Jf8HQ2c7QNbhJ5jQ2Hdrgz1f3tSzWGpfLAiFzoEK3noiyCgSOGrHTAx8ykdmI/8a4o7jhs7lzpkP8ARLOhcKZRR3uassFrAplggpY6gpylpoyClKUz+7q9hOPcR7omQHxT7YduCdhsRd2O0l3ltrBySWj21ruNjUTKoe+Ey1mzBIhCE8ICOnPb4oWiP/BT8R7cudTh/wCGp7GuKRRPuazbanfWJqx0hTby005ZoSKqnPg/HbDXy+f/AArYO9ubj1bmnD/mCprle3mKY3ua8MyWWueseKFGc1M3PIKUaMEdNGgTiDxh4aHW25uPaeiRIvrzdduuFs9Y9qXS02NrmerdZSK01QOeQRcCkZoWv26jiYdFKA7C5Jxtdjd2xIZXRLyXlycWlo+7rQ0qhcimI1a7+c1akDIYEcaFsUn7gthOZmB2Gjd0bFqxq1k69qSsUqrSG0zPMOANmCzZRozeo5OWcqMjUICi1Ydx037HaLkFNrWPKvQPc76rqWpqY1n6NMNGnJL+sc2efT/Dhq8bjmrFKKT9tL4k7TUlJu7teSENHllDK1JUNe1VgAS1/d0gpqtAtCVryalSSkVKlPCqhbC1xMOTiMxdXWFy1jbDWtzNibdHNnl9qBw0Mj2hAzFRragpnIVfGntqlU2UYfQVgXi35963BR7MJnOKJMYrbdrT35t7cek1VlS7JZIFdTt1coIe0MurRzHMIeSWrz0js4WOzUnAda+iTFT+YEEr5TK03TGPKzPxAaWJXOqK4xr3jyS5UDJhZcNWBcO47NnW4sQUxF7/APmFttTi3tFTZW1NBqkE+yLIkX11kap9ISqNOsmeZCeBR4sPriYQMWLox4YEAOWsEoa3+4H73Uc2dU1BmoVVX24Zhq2RSXFhJHbAOepUFKAOaGq8WH1+404TnRb+LaAHN6NrpX9F391EsCrdNJABeUoGAVA5KZSuZ6oFnRl9BiFmgHwwuY7HCjtEGLDpuNzUiSvaTtKLepsdh6bIphIXfZDDRK51RXGJT7oUS0qwOoWfGiJDv+Ufwk3AxF/9v8wFvaP/AIG8zOg0X/jR461/3mf6C+CrAU/ziOo/bjQHhp8Qnfbtqup2TicpjmXeTErS0Z7icFJhchghn9Q+qnTR6CQjhAQLwuR2Y2t8lHG2BiRw9W2p+5qbV3Xr1Wj9yalQUbVnpN/TVrVPWQwKON8PyBewo7YVo17pvuam+PbLGlpumKa0rfWqCrVJ5v0Alyy6v48FWGpecTCA4kScRWHXFPzedt0tH3m5mxzmBql0ccqKHnrdUwikYsHHdksU9GQeSBISjYasYuE568WMScW2IpT2I8i1o+zCajSalnKzTlBf6lQhBZk5YSU94rpqdHqFIuKAjpHTAnCjRPiBOm628Ykvjc7SWL5sM/WbSkyl3pMLErq9FXMEjukBnk6MxJn4lXFHz2hRAl5oTv8A/kTDZqWXL+EnhvRrNJcIPafvZUywr0VgwC55AkT16JeYQJRxsUcO4E4UoEvNhocDEX+ZPhcwGJtFc/GXmELrM8g0RquzrNXWBj8czv8A6TOrIKGr8OiHfPCBKptPEXYxJhXU2l+EavLvU1xbvfqCArtfUFcoX1Z7bPolF/Fq4GMLkdsF0CX2f/Y28Ykvjpv5f6mps+1tFxZK/c6pyuOZXWbj9IcpKfqJOaIA3hHZs/8AKBOBGLccSXc/mAsbeU1Palx7UzOk0KFdeuldA0eOQmjL3MhJQPi1MNTxOJiC+JPEmPENIdb7dtV0eyfrVzmXtqZgHKpntxyAGLlyYSMjqB2qdRHoJCUivy3x2f38WYl/hs81Ikr3729vOJTYepSdtX8JSNCrk01cBBPQhE1KcXUIXBU8WIJxI0uI6LAfmP8Azegk6V/z6eDapzAq3RyBu34pRYFsOS4UAvwEizozH5AEnO1Yd89ue0XN/wD8tvYOX/2f9zHqf0vI+4k+4/8AL6c+GrxuIqxsu6/b14scLLAhpEXYjyLW97J4NIJalnKzVYZninJQWZOWEZfUnpqTI9Qo4VWMVewnOpixV4lsDFPyTja7E+4F3Y7SeS8uWarkqvbHmqFyKYkh7YUzVsxZDBnxKsUsYriPW/bTi8uqe53bjZR5mwfqHKVno5IFdke+oIQYZOYFC54wS5ZaJs6E58X+7uJVxHUwnPd8SFgQRtXkfuw3Ax9ynDvLJpJY6r3xlJLLkLEkfbVwzZ5CzT18SqvRScSIriRvw6w0bujYSmNtqyfO1OWNkVTkLZngHAC02letUAyeoxNDOdGRSEI4K/kYx2fPZzY5o/8A6taIx/8Aseh+yXH/AKP9P++/7+GrjnfDHZhrgS5L2OBGLce3NS5gPbt5jqde4XFYtmeEaEyWWuMnx0JzlnMyzRkKO7FLCdgmxYvdDNgN3km7bsWG4FK1aTyb+uWak5V7gwHGMqwMWki7Yk3FbIWSAZIzuqL9/CscR7l1gYWN9u2q2G4Im74JZetzHJQq+0DuTFaiYvpVe39SnVF6C6UA+HInCPjsiC4Dp/lXY6TtKIHmNzZU7HCau+2GVdSvbgSv3RJoVagP05Iv98Px7AmIOJf4fvnRJippNu2/palpi4FSF47VlVyaauBbB6lgmym6hSC45Vvh/S4gTEHEu9ngxJhXpO7W39XeuprgVJS8cukrs2yV1cIO0WOvnMOUXUlq4XHw1mOzs4VoTxi3Hty95SxT29Z7UuFM9ebfsx4UX11kYqeWYmjLVKyzQHjpTg6eJxGk4iwwIDw60aCTGk2I8GrnLGvVTlgbR8VaRdqtBcQaX30pqZzAyAhHHNaD74YE8NcdsPj2OBGLce3N2cwHt282FOvcKZhbM8I0JkstcZPjoTnLOZlmjJ/4xcYriM1xFdvt9T5a4tYaz7fd+oc2dB1A5XAteUAjTFquykoM7iB06koZTQ8FcdOe2GvRHAgp/R6w3OBc6nEDw3sr31I0n2xZqL4ZWgear9IhZ3FRMpZaEIn93fiE4TmlhOe6A7fw06M7bGsNvuJvJpLGvVWklaWvcQK1RVoGIQf3BpqZ0w5IRlxQGBjFvv2BL7OnhowmWPKvTdEdLflXUtTXFkxY81dJDRpyHndaRzZyBl6eBSFrxOI9b9szHqpQ63PG2NlbllDrVzlKz0ckbLa/uqUIVDJ1MKVnySS5ZaZU40z8FcH4F7Cjth8go4D073+WbdnMBp2Om6buJTMWWZ2TTBVqk4w+OM6WTMynmhHEVYasWL9tJ+4kxMiXjh5QvI9uj3q7y0Jb+vWpJxJfbJJpqtAtAA9IQ1K2ac0hSniqoWwtfuHT9syGcNGF8lbyRBrWSldExH3vYEjOM7hwxFs2yLGMXUINe9yRMklCOLVgXAvkJrbpum9P5beNtJ0rH+rn1TF3zTDBrC5cLBoju6ntfoB0/wAGrxuIAxR4XIE4rY7PM4DgON+ZPhcwIgamufg3wyDWZ7YaaUrtG8V1cav44ux9QzqyQmVYF4GI7Ya9bxLxrij8vWwLbTG3oim9le+qqR3jqywZLLXKB1FizuJkS00iQKKPwxn7Zr9wQhnEt9NpPJF7ct6paaSv6DpRKTi+4StU1quWkAukRdOfJMyUJRxQEdPwFAliP/8AFA/NSJK9c7Hh/wDsemyLhRTR9zYkyudUVxqKx3wolpUwdQhp4VUdI6fJdojp4VnW5ExJalzzTdK+3Ra0qRjG81eLOVxzK6yed4qUZV5DcxADlVTL+Iv/AJz0a3TaPMWG0OtlbSZlHSPv81Zd7xitcfcTC7oB/TyBKEWfCqgXiQgTASBLbgo6fxJv7ttJp8nVz8OeYasrvZMKHeXFUQe6PtfxB/7kbmJjswXYE9gfLps7Z3+sDdzHaFrdtir+2SnTzXNv+oWU9T0yyQqsUcC/lrgS80FI+vTuPbll8v7TsbOvcLhCy83ZVTDJZa5IfPGnOXMjLNKEVVhcc/kfHZ2XT5O/LNve9/CW4d58w7NTPM+9mHpGn1a38Q3NzJ60/Sf3dXnE+G8/b3YdWBintXkfuw3A+exzh7FsiUrar4A7gtp3xa6kntmBt85xZp9ENWMyi/eFlxMOmIpgYWNsO3BPd24HM3wSu6RrBxaoq+eOoYsVTD0ndssySaQUiEZoQGFyHcCYUR2dl/8ADRiL57RJZd7okP8AaK46+s1VM8pY9zXRCV1eirmHrHWFM9CmHIQwp4ar4QLgS8kdog/D9go9PInVNJ1NXsVx6N+UlMLVJ6lkxGl2Mpqek9FxX9c5EA4FPicxScTEa4juRMUm7oztsa85ZLtqcscwapymS1+2kBZjJ08wlIfJCm5zzKyQjNJXh4jB/ncxY+cT/wCgP5t8vv8AFI/ZJP8A0f6f99/38KqMEO4EwojtiDw0fMXyJhs1Np+ybRXHo1mkplrv3EwlhXorBk/1ET15fUIJeGrETAxyo5Rwnf8Aijz20vX+X8JNE2vrNWQ9p+9lLArejUAueQJM9CiXlOlHDVxzxEjtz2clwIT4dPzJ9y5SxA3cp/3NWNbfth4bf7eor+WL/eFdWSOFVB/C58qXy+P/ALG/pI/iz8v9T/rl9Qr9zqmqDOs2esXH6e/9P6nqhVY5+e0KI7OT86v57Q2Zepba+zdfWaqmrXf7bMsK9FYMVvqZz0OnIIxcP/GK8TiM1xFf4h+EmHWsvI2Z60VdXOV9BpHK7JD7MvoprVctKwqehCKeVX1SkI+BX5b4EuF+LMS/w2eVcNlH97e3nEuNzTZ+2r+EpGiWDqiwMgnoQmWrOLpCLi1MHUUn7xBOIsYim+3bV237k2+5lqSPbVkcsKi154AAMXbkwlB3cLDSzkDmj1TQHG4ipewFOJGnFjG+JmIqFOsu22dtbMXddOV6tJmoJX+2qLADA5GFEh7wUZ5ZgzQlKU7GLFJxD37V11gN3bDyQTn3BE21OXeW2sEq6FX2gYKbY1EvNV7dS1mqikSjiAHdwnP29biPdh1YGB66ja4lhuB8+ZZILO9OStqvgDOQqGTqYUk9swUuU4sh+nGd2KWE6J7iPdDNgN35TXbb1huBStWk/e8KByTlXuDAExn2hhaRdsSK13kLNBWXGeJ4nEh04jowHxbQ6pvJhwv6Liaucne+4DkLQvcVBAi2bZFjVz/UZtf6fbTMjjpVhcjpHaOG2Y17WvobRUvfbL5TK5eaZXVvrUwLDX1BYKm/QC2yy6g+qYqhbFJxIdOIzImQ0bvyVu3EGtZLtqdEfe9gcMkztnAEYzbIwYw9QQ173NEyCUJ4K4iQLgS4XKOCkWHp3vDbDNr/ADaadiuM3TdxSLLE7JBglg6osDLD4gzpZMzaYUpRwKYfXdwnM3CdCtv49Yi6y7bZ1zl07+kNJX0Gk0jQNXymWmotVzEqhnkIRTylLzQkfFVO7FJxMPuE57scTAbvOx5HnsNwPRanO3uW2aSWYq+GMAy1O2LOSV2yUVaMws0jmQgNUgSxvyUw0YE9/wANsQv7I0+Z64yt16D5Kx2V1CVhRtVhJ4esZVanmGcIgo40dHwjtjRgSxGk6cYtL57XO0oJbeUz7rRVwoK7+IDAkyS2wl7u0886AJ8vXYXHwgS4WOx2XTwVRivobRUvdyult5cK03TGOeYqea0giWDqiwNZO7aQS5SCmDLwKQtxi/EndRxGZi2iWp77gkq1r0mowGXeTHDUC+okhK2XIuCAnpK6qfr0CSLgVh3HTnhHaLmMPa3Kux0D8yL7XOXc6mNn/tVMGr6hStvpJtqtT+zMmquReBPDXHbnW4D07A+Xr+YDMsWw1a+vKdszO8aYZLLXGLxwG51MjJJUJRoFvh+9tL4fsYuYsNodW1vBLb2kff1Qi/EDVDcfcXa96z/TodIRA4n+KWDrCc9biNNv4W1zc7yRso8l3fptJSs9HOABv+UvHoLMnLCeZ5iC5ZZSZ0pDxar4fEXgTyJiDGuCjR5i8utJ1NmUVxkffrgVYnvLKt/ii6QD+nkmWZCeJV+HRDvAm4UdlTaeIvmpEleqbS/CLYYemyKa3e/UEJXOqK4xfVylpdHULiVXP/AUCYfYl8K3gxJhXq3NNt/V03U1wSkxvHXplc6orjPB4pY5c5jZRSi4f687r94pnEjfAfA7EW6gk4m2truJpBINXvTkLS57i00lravSXCFo/ujFPlTDkCVCSuOkRMCbZgSxOSmHTnRDaC9zqf4ubDubU1dcKo/chQsL10sIN/TUo0fWQI0cNX4Uj4c1+aMa3sjFvGJL46Ju1mbe0/RrS+VlLvFhCrrFZXLCLtADJJkPMSc+L/43HNXGKvYTnUxYq8S2Bin5JxtdifcC7sdpPJeXLNVyVXtjzVC5FMSQ9sKZq2Yshgz4Fd4fCecL8WYaIxcq4kqP7I9u3nlbmmz9tY8JdCJXOqK4zyetCZas4eoIeGrDuOny1x2i4zYsOtuPbmgc2o231nXuFMYmJ+HyCzJZa5aj4mectc3LNOSqjA+ECY4fMG9jgRivobRU2nzAe3by4Vy80ymWzPCNCBYa+oLBQyfHQC2ynMmDlnsW+KPfsdoERYdN+eVcNlHdG0ot6ZrmpTqZBC77IYUFYJprABKfdCmarWB0hz4FMBWGpxGbixcaJmHWN3N523S1Pea7to5gaDdM1aJUO2tm1FquYk4PZCKnRzHkgSE8CsO+RMBIExc2B/Snhs3dA5gfeOPtyiuD0z6s6wuXCwaP7fKla9zMJiMip3Xdftmv29zfb8RflTdvCnYbfd/SCX50HcxKQLXlATUWq5iUGdxB1O6lDTQVwqndeJxPhi4sXuYDfh1zeeR0rDb7waucwNPumaka14oELBZtQteQX3EilozBySLpasLYpOJGn4zjMiXDRu6y7bZrWS7anK9Wk6gyTO2cABgcjChh6gozyzRmhKEpasLYWv20sJzMXcLbC3a8kIa3JeJt0Soa9qrSGhv+0Lw6arQLQeq+ZUqSVSZUpDwV4XIiR2hRAl2XAw0YdOe0NmXe6JEDdym6+s1Vw81Y9sXQiWFeisGHq/WJM9CoHIIwo4VXIuBLG9yw0PTv+G2IX9kglYrjK3XoPSsfiBdMSsKNqsJPXuulWp0AzhEHgUik8T9wwcRpx4wtw6uoJOJR5Lv3q5INn3pwFVv+3LyBLbQu1ww8jzACo5VCcgSp4K4dxgx2fm58y+MTk7yd0DW/y+Y7w/u09v8AZA/wP0VPrdUsguGrAuHcdn9x2NvnXiL3v8s1tpn4RU2bqW4mObW+2EGjTkK/VWmk9KeaeIqwdYlX7dTFisKWEmCNq7b9yVoZblJHeWTNWEh93XykmFyGCWFr0lmzpeqJeCvHO5+/Y7OT8P3DRB2x5V6loivuGrqWpqas1VjqXRBo05D09Z45s+mXpBxajuvE/cOn7e6A+EmHVN28OFhWcTVyU733ASlaD7ivoEYzbIwawf6DNr/T7aJUcQBiCik/b14sYqQzjw3fl/duJ+h77UrUl67PTWaUczu4qgQYZOYEoXYECW4yHMgCUcaKSi/eL9+2nExSwsVHkxH0eWS7vglGl7fJAS1+2mkWfVLV0h8kJUn8SqifVJXAuHcdnC1vnXiL5H/KTbaZ+EVN5tN3RVrfbCFWqTlfqry1/SlIngUXnicTAE/cb8JMS4dc7HbefbV6bq5ztzWxKF8vpJQeYjIxbAjpNR9H1zQNIUdf8Lj4b9gS7L2c4ual9e/i3b2h6lIuHl/ZSho05KP8ETUp/wC1w1eNxzVjdFJ+4LP3jyiZDRu6M8jG5XWS7akrFKqSWSZ2zgDLFmWaMPUFOWeaMkoQlCAZeKOO2JTAnie51vzuPbmytM9sU1OhcNhNb7YouaagV+rPKX0yzTn0pgzFJ+3rxY4i4Zt9u3TtuJtHb6lakgs71mmHLXcABBhk5gUC7ghS5ZByR6cQBBmKWLF637xFruElu87HkefaNaJtqzXbs7YkxAfaF8CCzJywrCr6ZS0avqkYeKqwdYgn7iK/awwGBH/5j3bMk3A8G1SXP2RkSsDVfFGWExpXpgEl9tPYtphehnEqu68T9s1+3ugPHiHXPuNse7DfbiauS62g6ISlaZ3uKqi0Wq6mko/sDKp0KY5xjSjigI6Yt+VGiRrxU4TNnRJc655WMzfmoazd0lZs95RJErq9FXMIF5QBTz5FZCQJPEVYOndxYw6cRYb8B4i7SeSL0mxHf0hmr+99KOWANHylpIi2bZFjNM76C688oJkoRwVvhAvHY8nMF041vTpcSY7aTpjpWLHP35osph3mqxiFdl2KuEo7qSXcZyInEhPDVc/C5zwjtD6E72ONYw2hXq27YSanV5d6mpiPUveyzQLDX1BYKCudoQ7bOiOUPokqw+49X7etxIVxMfmK107bia5z6XdCJBZ3pxpLt9spXQYZOYEAfACKXLM/JGaeFUvRScRmuJG+JmFtu03bw4ba5LrtqcnQdwHIJb/bXgVFquYk8PmBNp/xJpolTwqozYan7etxMOkM4Dxu52O28+7tiKW2iXbs7Y4s5o9xaNQYZOYE0XfEiWjkDNA0I4oDC5hc5UbZcB/3G5E4kWpe8v4ganujWaVc1p+2FGiUFeizzAK/kCRPXqF5mASjgqw1OS/caX7iTEzDr8TLWXkbOj7zXeTJKvVpEnEqHbWxALDkWUcHshRnlmPNKUJSgId89o9x2i5sD+lPDZu6BzA+zcfcdFTHpn1ZFhTt1gof2+VW17mYTEZimIL4Yz94fXEipExvvpdO24mh7fXdNJBuW9OKJWu2BaGYpWxhyA9wIquWYckeqLVc98Mdn5fRrgpGL5p4bN3VtTZm3mO4/wBGZWJ7yyG4+4qi6QI+1yTmExCeNDvHPAnGjAmLnzLwu2dDZztA1v3tcaF1drg7f7JXJWASrCsR+ibOfqyCgWYph9w+uJDrFjCtvt+AHy4PIXrm33f3Uc+G982aaBa8oBgi2bZFjQZ3Ed+5lD6l8FcC4dwJcLW/k8xF7I+Zm25b/hFcaWm7dq6r+4CFWqTrP3FGWft1Mg8SrAvns2dbf/4X/wCHNx22+If+GubUt6pTO9zbeV9dZLyx2AoozUx55ATwqt4R2Y3/ACgT/wAYtuRJeP8Al+sbeU1zddv7U0+koKVdRtVdIEeQQitN28xISPjunC2FriQWcRmQzhowtGdtjVrJSujlilVOGcZ3DhjMFmYaMXUJOWeSMkIQhBXxuJVfDCRHbntEGNcFMWfLrmLpOpszYam1/sFMKsT3lk7/ABRdIAfUyTNKhPApFLBNixjS4jThnEvHxrLttmjeqXKxmq9WkcA4vuEngMDkYUAXSJGeWSc0JShJX8jH9Oz51eaP/wCWtE/+D6b93cf+b9H/AGf9rgUeL4ez9tJ+3RjwwMS2jRtY1/uB+9mkrGvVSUKqr7cNZtFWgpoSR2wJqZ1BZDRnwVwLwMfLXAltuBBSKO3IkvHbanEDRLyvbrhppPtiysGK4ZVc81X6RIzmqJzEhCEKqBfwpOQmtvY6cevzJ8baT27W/q59Utd8IxbGrrlwrmiJ7qO1+sHV/DOf8KT+Xzpxrj1zFhtDrVtMdLa2kffzGHearLdx9xSO6kj+nIiUIk8WpC2FriQWcRmQzhowtGdtjVrJSujlilVOGcZ3DhjMFmYaMXUJOWeSMkIQhCAiJgY/lH8tEUeTvJ3X9E9k3D+7SXH3qx/j/rqfW6ZZA8FUUsBWE6NL9tOJkS4U6y8jZo3q7rrSV6tIkBJfbJWAFhyLKAHpCjPLNOaUpSkVjphIjtHuBLEgo9mLP+87taew1P8AEfmFLKl2SzgWdvSCHtD7v8R/+5Io8XwxnEevCc6OHVvvpdPI4l/t989NOBZ3rSQtrXgAWkFmTlhQT3DBS5ThyT6cCsdPg6wJf3ROSjY5V2Nzqfjrjc1KelR+5XQ0achv6c5qvr+lHBVg6+GM4mFl+1iJjffTfbyKsm313TTmXpExKwStdsC0YWsVSz0B7geinmH1Fmgr+UiOzG/FjgYs9uRJeP8AmA9uw1Nc3Xb9tmeEaclXUbVXSMnx0IrTTmZiQjjYo8DHzW7m3/FH+5cv/ZP6m/Q1P6SwVqN5bg+4+h/zf+nMUeL4ez9tLCc6OElgYltGdtjX+4DtmkrGvVWkhfVekazUVaBiEo7ZqamfVkhEvBW5+BjRoEw+w0PZFHccNnc1bdrE0Sz3XcLgl1S8gtYSsKNqsJCPtGJrSyjyCmXgUil8PZ+4nuI02Au4lrV5H7o8zXg2aSPeFkcAbI8VCyEtn2hZaC/GSGtnMbmnjKPw9n7dRxIIMCGmJbbDyQT3LZPBs0ldvNYOSMzxTllJZchYhl9STJppkSJQjhqxSwdOI9b9tOPENFzYkbVqjZP3TOalnKSBVM9uOPQqGTqYRkdQOmpUR1hQnjO7hqfuGDiPdDOA8btiO2tWGxFLbRLU2fKck5o9xaNEY0Lsww0XfF2amQPQKEcSrC34KbiOo/bMb8S4u77dtVrXrv6Acy7yYkYC/KJXkmFyGCAZ0o6qcqfQSeL/AIWu6/bqOIzGBEuIu+3kVa168GkEsu8mOGMvxSUpLLkLEAvpT1U5k+ok8FfG43G43G43G43G43G43G43G43G43G43G43G43G43H/2QplbmRzdHJlYW0KZW5kb2JqCnhyZWYKMCAyOQowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDE3MTMgMDAwMDAgbiAKMDAwMDAwMTk5NSAwMDAwMCBuIAowMDAwMDAxNzU4IDAwMDAwIG4gCjAwMDAwMDE1MTUgMDAwMDAgbiAKMDAwMDAwMDAxNSAwMDAwMCBuIAowMDAwMDAyMDQ2IDAwMDAwIG4gCjAwMDAwMDIxNzQgMDAwMDAgbiAKMDAwMDAwMjYxNiAwMDAwMCBuIAowMDAwMDAyODUzIDAwMDAwIG4gCjAwMDAwMDI5MzUgMDAwMDAgbiAKMDAwMDAzMzc4NyAwMDAwMCBuIAowMDAwMDM0MzE1IDAwMDAwIG4gCjAwMDAwMzQ0NTAgMDAwMDAgbiAKMDAwMDAzNDkzOSAwMDAwMCBuIAowMDAwMDM1MTg3IDAwMDAwIG4gCjAwMDAwMzUyNzAgMDAwMDAgbiAKMDAwMDA2MzU0MCAwMDAwMCBuIAowMDAwMDY0MDk1IDAwMDAwIG4gCjAwMDAwNjQyMzIgMDAwMDAgbiAKMDAwMDA2NDY4OCAwMDAwMCBuIAowMDAwMDY0OTM1IDAwMDAwIG4gCjAwMDAwNjUwMTcgMDAwMDAgbiAKMDAwMDA4Njg1MiAwMDAwMCBuIAowMDAwMDg3Mzg3IDAwMDAwIG4gCjAwMDAwODc1OTMgMDAwMDAgbiAKMDAwMDA5MzU0OCAwMDAwMCBuIAowMDAwMDkzNzUxIDAwMDAwIG4gCjAwMDAwOTU1MzYgMDAwMDAgbiAKdHJhaWxlcgo8PC9JRCBbPDFmMzExYWY5NDhiNzZhZjgzZDUyNjNmMmNmZDE5NTc2PjwxZjMxMWFmOTQ4Yjc2YWY4M2Q1MjYzZjJjZmQxOTU3Nj5dL0luZm8gMyAwIFIvUm9vdCAxIDAgUi9TaXplIDI5Pj4KJWlUZXh0LUNvcmUtNy4yLjAKc3RhcnR4cmVmCjEyMTkzOQolJUVPRgo=" } } - }, - "covidAssessmentDetails": { - "hasKnownPositiveC19Past7Days": false, - "citizenIsConsideredImmunoCompromised": true, - "has3DoseMoreThan14Days": false, - "hasDocumentedChronicCondition": false, - "previousAssessmentDetailsList": [ - { - "dateTimeOfAssessment": "2023-10-04T13:37:32.7034242", - "formId": "8432264d-8fcd-4101-8957-0513f10ef03b" - }, - { - "dateTimeOfAssessment": "2023-09-21T23:40:11.6077464", - "formId": "ee227d53-e405-470b-8435-06c9843e9fbb" - }, - { - "dateTimeOfAssessment": "2023-09-22T17:48:18.6256521", - "formId": "fb12aa7a-8abf-4f9c-9440-06e0444fa036" - }, - { - "dateTimeOfAssessment": "2023-08-31T23:07:26.5449878", - "formId": "a81aa087-891a-441e-9f96-09ddae71f9db" - }, - { - "dateTimeOfAssessment": "2023-09-26T22:18:44.9363453", - "formId": "67abd123-8466-4691-acc5-09e27b898a9e" - }, - { - "dateTimeOfAssessment": "2023-09-20T01:26:26.4246666", - "formId": "bcf8f06f-167f-41e7-b3a3-0a0f3e2e3fa5" - }, - { - "dateTimeOfAssessment": "2023-09-27T20:33:43.3976415", - "formId": "efad79e2-96d4-439a-bff5-0d2d4d500e9a" - }, - { - "dateTimeOfAssessment": "2023-09-20T01:19:03.870187", - "formId": "974dea06-e262-41cc-9ee7-10d174781a93" - }, - { - "dateTimeOfAssessment": "2023-09-28T13:35:11.7332903", - "formId": "5222c996-a313-48d6-bad0-1357b6ba6070" - }, - { - "dateTimeOfAssessment": "2023-09-29T17:32:36.1815382", - "formId": "02276d8a-24ad-41a3-98bb-149b34fed5ce" - }, - { - "dateTimeOfAssessment": "2023-09-18T23:48:57.5657437", - "formId": "43c9d2ca-cc63-4ca7-b9b9-154c75284f26" - }, - { - "dateTimeOfAssessment": "2023-10-04T23:11:24.8373306", - "formId": "ea831b42-35fa-4a0d-b8b2-19b7eade8664" - }, - { - "dateTimeOfAssessment": "2023-10-04T22:04:45.9363222", - "formId": "997df23d-ae61-4f0e-b32d-1bc94cb5a43d" - }, - { - "dateTimeOfAssessment": "2023-08-31T20:40:04.293842", - "formId": "af840bcd-bd21-4a85-a77c-1f76c5255772" - }, - { - "dateTimeOfAssessment": "2023-09-18T23:42:10.6093456", - "formId": "d06298c6-a5f3-42e0-abdf-1f8e8c70ca8a" - }, - { - "dateTimeOfAssessment": "2023-09-30T00:38:45.1845964", - "formId": "a12d248a-94d7-4a9a-8acb-207123e2e22f" - }, - { - "dateTimeOfAssessment": "2023-10-05T02:56:19.2588754", - "formId": "a13f2a84-d6b2-496f-8959-222bb477ba9e" - }, - { - "dateTimeOfAssessment": "2023-10-03T17:02:09.9979857", - "formId": "4dcc3ec1-02e0-4821-ad79-2592d018e9a3" - }, - { - "dateTimeOfAssessment": "2023-10-03T19:10:16.1569305", - "formId": "7b7b9f15-219e-407b-bbdd-27dfdfabf86e" - }, - { - "dateTimeOfAssessment": "2023-09-19T17:20:20.444731", - "formId": "3070b7f6-79eb-4581-a81d-29f9b9b01936" - }, - { - "dateTimeOfAssessment": "2023-09-27T13:35:19.0330226", - "formId": "e905e2cc-161b-4f8d-b24c-2bd08e0b49a3" - }, - { - "dateTimeOfAssessment": "2023-09-28T19:50:29.393988", - "formId": "3a9c2643-c33b-4cf8-b6fc-2c836ef3eb68" - }, - { - "dateTimeOfAssessment": "2023-09-18T22:58:34.2216583", - "formId": "65be61e6-400b-4fb6-9c39-2ca655df0cf9" - }, - { - "dateTimeOfAssessment": "2023-09-26T21:49:01.52789", - "formId": "4a343536-adf6-4cab-8818-2d2f16e50e2c" - }, - { - "dateTimeOfAssessment": "2023-09-21T20:20:57.7271968", - "formId": "96da1da9-b5d8-4a56-b370-2dfff57854fa" - }, - { - "dateTimeOfAssessment": "0001-01-01T00:00:00", - "formId": "8bcf96f2-44fe-4092-8978-2fcd91152d93" - }, - { - "dateTimeOfAssessment": "2023-09-18T22:57:04.6527569", - "formId": "a06e0d12-8ca9-4ea6-8502-35b47e244b76" - }, - { - "dateTimeOfAssessment": "2022-08-23T15:45:53.4824614", - "formId": "5315ff1c-0144-4a8e-8611-3842f5c1e48a" - }, - { - "dateTimeOfAssessment": "2023-09-28T19:41:45.2163207", - "formId": "6d1dc648-e9dd-44aa-b16a-389ede46cf19" - }, - { - "dateTimeOfAssessment": "2023-10-03T22:09:20.1443278", - "formId": "38c3012b-2cd3-42f2-be34-3a66bd2cbcf3" - }, - { - "dateTimeOfAssessment": "2023-09-27T21:29:48.4287953", - "formId": "5841b15c-5f18-45c4-abf8-3b66ab8ad45b" - }, - { - "dateTimeOfAssessment": "2023-09-19T22:51:24.2568709", - "formId": "0636b966-9a9e-4c1c-a4e8-40a1182a6874" - }, - { - "dateTimeOfAssessment": "2023-10-05T11:12:09.1597417", - "formId": "42111441-6ec9-4278-b33a-42a84e9fdf95" - }, - { - "dateTimeOfAssessment": "2023-09-18T22:53:36.3467699", - "formId": "cbe68e1e-2938-4291-875d-43cb7d5cc34b" - }, - { - "dateTimeOfAssessment": "2023-09-22T13:36:52.1934512", - "formId": "b04763b0-44a9-46b6-be34-43e19031bc2a" - }, - { - "dateTimeOfAssessment": "2023-09-19T23:55:51.0487055", - "formId": "9fbfc462-ac15-454b-94db-45e7e0b5c3a1" - }, - { - "dateTimeOfAssessment": "2023-09-29T01:22:02.2547899", - "formId": "e338fbce-9b44-4f3a-b697-4843addd6779" - }, - { - "dateTimeOfAssessment": "2023-10-05T02:49:11.0462311", - "formId": "bd1aad79-ad01-451d-8319-4aba26d61e3a" - }, - { - "dateTimeOfAssessment": "2023-09-22T22:39:30.441972", - "formId": "da0663a9-2f69-4f3b-8fea-4cfcd109e4c8" - }, - { - "dateTimeOfAssessment": "2023-10-04T22:01:31.8444382", - "formId": "5cf9d175-9d4d-4210-8e87-5009a2741702" - }, - { - "dateTimeOfAssessment": "0001-01-01T00:00:00", - "formId": "d0d7329d-83aa-48bb-b092-58289b50c9d1" - }, - { - "dateTimeOfAssessment": "2023-09-18T21:57:37.4534231", - "formId": "f427a354-a792-452d-b5da-5a1aacb41047" - }, - { - "dateTimeOfAssessment": "2023-09-19T17:25:40.8330347", - "formId": "aeb2085e-b01d-4822-8a76-5a8cc4059c26" - }, - { - "dateTimeOfAssessment": "2023-09-19T00:06:56.8972675", - "formId": "837c1193-447d-46ac-b50e-5a9bc58d6d10" - }, - { - "dateTimeOfAssessment": "2023-09-21T01:26:18.4929095", - "formId": "c39791f6-8ba4-4057-9315-5d48ec64be43" - }, - { - "dateTimeOfAssessment": "2023-09-29T13:36:58.0562286", - "formId": "694c5aa6-4d52-48af-9bd9-5e2a6d43ac2a" - }, - { - "dateTimeOfAssessment": "2023-09-18T22:57:10.4881385", - "formId": "61278cea-9c32-4f3a-81d6-5ee6d8c02861" - }, - { - "dateTimeOfAssessment": "2023-09-27T22:19:47.0930824", - "formId": "c954e5c3-012a-4661-8948-5f3b754b471a" - }, - { - "dateTimeOfAssessment": "2023-10-05T07:24:57.1014181", - "formId": "a9dd222f-ced0-49a5-a5c2-6baf7a8da74f" - }, - { - "dateTimeOfAssessment": "2023-10-03T19:07:29.2607612", - "formId": "90a83b70-9ff8-4da2-97b5-6bce5e3d501c" - }, - { - "dateTimeOfAssessment": "2023-09-18T20:57:37.7818313", - "formId": "b55fbe59-6681-4274-88d7-6ddaa6152c7f" - }, - { - "dateTimeOfAssessment": "2023-09-21T22:19:59.2840293", - "formId": "72203396-f624-4bb7-874f-73fd6afe9e48" - }, - { - "dateTimeOfAssessment": "2023-09-29T19:40:00.6753488", - "formId": "70cdb6eb-00d4-48aa-9c1f-7753fd6a48a7" - }, - { - "dateTimeOfAssessment": "2023-10-04T16:10:33.7376396", - "formId": "e93bf5bf-1ae4-4f82-a18b-78a4ab093b7d" - }, - { - "dateTimeOfAssessment": "2023-10-03T19:14:39.1537376", - "formId": "603de19d-fd7b-4958-86ff-7ee234edb4ab" - }, - { - "dateTimeOfAssessment": "2023-09-28T13:26:55.5845116", - "formId": "e17f6338-41e0-4502-a051-863b96063e05" - }, - { - "dateTimeOfAssessment": "2023-09-28T22:22:58.3380488", - "formId": "0631ee16-000f-4c28-a812-88120d0b930b" - }, - { - "dateTimeOfAssessment": "2023-10-02T13:37:39.9730478", - "formId": "1b169037-a059-4b70-95db-89417c068b0c" - }, - { - "dateTimeOfAssessment": "2023-09-18T22:52:13.2540298", - "formId": "61e52d3e-0a5e-417c-a374-8aaec0d523fb" - }, - { - "dateTimeOfAssessment": "2023-08-31T20:52:51.0871478", - "formId": "c2bdbefb-54ce-4d24-a981-8ae371adce8e" - }, - { - "dateTimeOfAssessment": "2023-10-03T22:42:57.7760246", - "formId": "5338fbae-ad2c-4375-8a25-8bd2599a619d" - }, - { - "dateTimeOfAssessment": "2023-09-18T22:47:19.9680081", - "formId": "6d399bd1-d9c6-4921-a9aa-8c255e637623" - }, - { - "dateTimeOfAssessment": "2023-10-03T19:03:20.931116", - "formId": "9bfde957-0248-47ef-825d-907dcb7e51b3" - }, - { - "dateTimeOfAssessment": "2022-03-21T21:50:00.2204511", - "formId": "792ac2e7-d3f4-41f2-9d0b-91294696029d" - }, - { - "dateTimeOfAssessment": "2023-10-03T18:31:51.1900271", - "formId": "9d9a586e-236d-40bc-b136-91330cf803c6" - }, - { - "dateTimeOfAssessment": "2023-09-18T20:50:59.4479548", - "formId": "acfe23c4-7e41-473b-aa2a-93a09b4d8df2" - }, - { - "dateTimeOfAssessment": "2023-09-27T23:54:18.902849", - "formId": "5d736aa0-96b3-48cd-a422-93a10c877d2c" - }, - { - "dateTimeOfAssessment": "2023-10-03T18:58:17.86721", - "formId": "710fe91d-1889-44e6-a4b9-97177174c7b3" - }, - { - "dateTimeOfAssessment": "2023-10-03T13:37:19.0602725", - "formId": "0c22065e-6b98-468a-9a0c-991b01d20a94" - }, - { - "dateTimeOfAssessment": "2023-09-27T17:47:12.4938407", - "formId": "2258fd8c-73f7-4cb9-ab51-998da1c9b10f" - }, - { - "dateTimeOfAssessment": "2023-09-18T20:54:10.320258", - "formId": "c0a20a90-2417-4259-8f13-9ff83996f7f5" - }, - { - "dateTimeOfAssessment": "2022-03-22T21:38:09.202412", - "formId": "bb6728c9-283e-48d0-bccd-a0cec97457df" - }, - { - "dateTimeOfAssessment": "2023-09-18T21:22:05.272122", - "formId": "9d0e1d83-649d-4659-a2fd-a2c81aa2d5df" - }, - { - "dateTimeOfAssessment": "2023-09-19T16:57:37.473131", - "formId": "5af1aa12-9c35-41c1-a420-a71aa3f20278" - }, - { - "dateTimeOfAssessment": "2023-09-28T22:40:17.7585303", - "formId": "8c2bdb62-c414-4297-8f84-a82a2af06b0d" - }, - { - "dateTimeOfAssessment": "2023-09-19T00:28:24.3214058", - "formId": "7edd25a0-31d1-41e4-8dc9-aaf602a06c83" - }, - { - "dateTimeOfAssessment": "2023-09-21T20:46:44.4014224", - "formId": "c169c64d-3bf7-48f6-bb71-abe50d060a40" - }, - { - "dateTimeOfAssessment": "2023-09-26T16:19:52.5890654", - "formId": "d38654ec-c2a5-4cf9-ba66-ac356deeb86e" - }, - { - "dateTimeOfAssessment": "2023-09-28T18:24:07.5748731", - "formId": "b232ffd6-af64-41ae-9cf6-adf98a049e83" - }, - { - "dateTimeOfAssessment": "2023-10-04T23:09:30.0358548", - "formId": "341ba9bb-1abf-47a6-845f-afe240e2c07c" - }, - { - "dateTimeOfAssessment": "2023-09-29T22:21:34.0502535", - "formId": "f45b5d65-ce8d-475e-940d-b31d1c2bee88" - }, - { - "dateTimeOfAssessment": "2023-09-18T23:44:26.1012254", - "formId": "94bec943-b2ee-41de-b42e-b33d9fa87fc8" - }, - { - "dateTimeOfAssessment": "2023-09-25T23:02:23.5531822", - "formId": "a5f18933-4f1e-4aa2-901c-b5b23dd47f68" - }, - { - "dateTimeOfAssessment": "2023-09-26T13:35:15.9748526", - "formId": "3cb1f760-3365-4afd-b430-b6f882ae6497" - }, - { - "dateTimeOfAssessment": "2023-10-04T01:11:16.023469", - "formId": "fd657928-0bfd-419a-8a77-b89d6cbd9ccb" - }, - { - "dateTimeOfAssessment": "2023-09-18T23:02:00.1520937", - "formId": "7c54f2c5-9927-4b9b-a7cf-bab3113f1cc6" - }, - { - "dateTimeOfAssessment": "2023-10-05T17:36:03.5244232", - "formId": "91f01ccf-3559-4955-bb7a-bbf0728baf3a" - }, - { - "dateTimeOfAssessment": "2023-10-03T21:25:19.106469", - "formId": "2626b310-566c-44b1-8f11-bc32910dc4c3" - }, - { - "dateTimeOfAssessment": "2023-09-25T13:35:19.138485", - "formId": "c943e4f9-2bf1-44a9-9a68-bd00914e379e" - }, - { - "dateTimeOfAssessment": "2023-09-28T18:02:11.0949155", - "formId": "f909d800-4e0f-4b74-9606-c0b5602360b7" - }, - { - "dateTimeOfAssessment": "2023-09-28T22:29:33.046724", - "formId": "404f9626-dfad-429a-b078-c32562c8f204" - }, - { - "dateTimeOfAssessment": "2023-09-21T13:35:18.2442849", - "formId": "093a0175-cf94-4291-8f6a-c5bf7b8273ee" - }, - { - "dateTimeOfAssessment": "2023-09-30T01:09:07.4778961", - "formId": "fd67bc58-1e5f-4b79-abcd-c680008066eb" - }, - { - "dateTimeOfAssessment": "2023-09-26T18:19:41.4508579", - "formId": "94dc3b4d-1fde-4914-96fa-c7a10d20e5d3" - }, - { - "dateTimeOfAssessment": "2023-10-05T03:55:43.0797489", - "formId": "8e854d92-90c0-42c3-84bb-c806bbbb53b6" - }, - { - "dateTimeOfAssessment": "2023-10-03T19:48:02.2724964", - "formId": "55669980-a7f1-4eaf-b210-d01d76af3452" - }, - { - "dateTimeOfAssessment": "2023-09-18T22:56:04.1519734", - "formId": "bfb5ed99-73de-4dde-be32-d0577e50d8e6" - }, - { - "dateTimeOfAssessment": "2023-09-18T22:54:45.9930665", - "formId": "9dde5f17-53c6-49b7-8584-d1058131b0d0" - }, - { - "dateTimeOfAssessment": "2023-09-18T19:15:26.1542771", - "formId": "aa1f0e35-f45f-488e-8503-d3712367feea" - }, - { - "dateTimeOfAssessment": "0001-01-01T00:00:00", - "formId": "4bdfa9c4-ab45-4ffb-9de7-d37532e6f71b" - }, - { - "dateTimeOfAssessment": "2023-09-18T20:55:49.1926856", - "formId": "8c17a1be-40d7-4e0e-8a55-d4de273e7915" - }, - { - "dateTimeOfAssessment": "2023-09-29T23:28:36.4165759", - "formId": "7e4b6209-5f16-4bc3-8cf0-d682388667c1" - }, - { - "dateTimeOfAssessment": "2023-08-31T20:42:52.3595297", - "formId": "34fbc192-a912-42dc-9cac-d71f00314c1e" - }, - { - "dateTimeOfAssessment": "2023-09-28T20:42:23.925835", - "formId": "3a192fc9-4882-4941-b444-daad194172b1" - }, - { - "dateTimeOfAssessment": "2023-09-20T13:35:38.1868822", - "formId": "847f6b99-6fce-4c90-bc8c-daee8b52e106" - }, - { - "dateTimeOfAssessment": "2023-09-19T00:05:15.7355431", - "formId": "1e708a1c-bce2-41fa-a5a8-db72ee10975b" - }, - { - "dateTimeOfAssessment": "2023-09-28T20:27:46.8945619", - "formId": "6ec6a8e5-d252-41cb-a95f-dc8c5bf01df5" - }, - { - "dateTimeOfAssessment": "2023-09-26T20:21:14.3291272", - "formId": "fff1d574-6b23-4c1e-806b-ddab44616111" - }, - { - "dateTimeOfAssessment": "2023-09-29T03:33:23.0140597", - "formId": "26f5753e-d920-45ef-83b7-de492e63de2c" - }, - { - "dateTimeOfAssessment": "2023-09-22T13:35:11.8241404", - "formId": "1a8838d2-7f98-462a-a7a5-df0fdde0d1f9" - }, - { - "dateTimeOfAssessment": "2023-09-29T03:17:39.5101449", - "formId": "b815a903-5931-43f7-9d7d-dfce443f66ce" - }, - { - "dateTimeOfAssessment": "2023-09-28T19:06:16.6336515", - "formId": "56089c62-e067-44f4-b434-e14774bd05bf" - }, - { - "dateTimeOfAssessment": "2022-08-09T21:26:15.6058959", - "formId": "4d25818d-9bf3-425d-8609-e328fca90b21" - }, - { - "dateTimeOfAssessment": "2023-09-25T19:47:21.2473521", - "formId": "7364712b-4e9a-4b1e-bb9d-e33417239aa8" - }, - { - "dateTimeOfAssessment": "2023-09-19T22:15:33.3853824", - "formId": "fb9f3259-1eea-43cb-9a18-ebcb7fb03453" - }, - { - "dateTimeOfAssessment": "2023-09-29T20:20:18.9043078", - "formId": "65bc972f-a74f-4715-8bb9-ef9907c5ff4f" - }, - { - "dateTimeOfAssessment": "2023-09-28T19:08:20.3143469", - "formId": "c77e3281-9215-4598-a8aa-f7882314b3ee" - }, - { - "dateTimeOfAssessment": "2023-09-21T17:36:55.9712567", - "formId": "51c4caf6-d3ba-433b-97d9-f98b3966c5ff" - }, - { - "dateTimeOfAssessment": "2023-09-30T00:15:39.9885048", - "formId": "cfee32db-0672-480a-90a8-fa1eb6bb91b6" - }, - { - "dateTimeOfAssessment": "2023-09-20T20:58:32.8805394", - "formId": "27d57d56-03b5-4b5c-ab62-fc5d2b37b3db" - }, - { - "dateTimeOfAssessment": "2022-02-22T16:44:58.517698", - "formId": "4e6acced-4897-4f3e-b683-ff67bc51866e" - } - ] } } diff --git a/Apps/Admin/Tests/Functional/cypress/fixtures/SupportService/patient-details.json b/Apps/Admin/Tests/Functional/cypress/fixtures/SupportService/patient-details.json index 3321b731eb..701aab1115 100644 --- a/Apps/Admin/Tests/Functional/cypress/fixtures/SupportService/patient-details.json +++ b/Apps/Admin/Tests/Functional/cypress/fixtures/SupportService/patient-details.json @@ -101,497 +101,5 @@ "data": "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MCcwMCcpL01vZERhdGUoRDoyMDIzMTAwNTIxMTczMSswMCcwMCcpL1Byb2R1Y2VyKGlUZXh0riBDb3JlIDcuMi4wIFwocHJvZHVjdGlvbiB2ZXJzaW9uXCkgqTIwMDAtMjAyMSBpVGV4dCBHcm91cCBOViwgUHJvdmluY2lhbCBIZWFsdGggU2VydmljZXMgQXV0aG9yaXR5LCBDaGlsZHJlbnMgJiBXb21lbnMgSGVhbHRoIEN0cik+PgplbmRvYmoKMiAwIG9iago8PC9Db3VudCAxL0tpZHNbNCAwIFJdL1R5cGUvUGFnZXM+PgplbmRvYmoKNiAwIG9iago8PC9CYXNlRm9udC9RS1ZJR1crQXJpYWxNVC9EZXNjZW5kYW50Rm9udHNbNyAwIFJdL0VuY29kaW5nL0lkZW50aXR5LUgvU3VidHlwZS9UeXBlMC9Ub1VuaWNvZGUgMTEgMCBSL1R5cGUvRm9udD4+CmVuZG9iago3IDAgb2JqCjw8L0Jhc2VGb250L1FLVklHVytBcmlhbE1UL0NJRFN5c3RlbUluZm88PC9PcmRlcmluZyhJZGVudGl0eSkvUmVnaXN0cnkoQWRvYmUpL1N1cHBsZW1lbnQgMD4+L0NJRFRvR0lETWFwL0lkZW50aXR5L0RXIDEwMDAvRm9udERlc2NyaXB0b3IgOCAwIFIvU3VidHlwZS9DSURGb250VHlwZTIvVHlwZS9Gb250L1dbMyBbMjc3XSAxMCBbMTkwXSAxNiBbMzMzXSAxOCBbMjc3XSAyMCBbNTU2XSAyOCBbNTU2IDI3N10gMzYgWzY2Nl0gMzggWzcyMiA3MjJdIDQzIFs3MjIgMjc3XSA0NyBbNTU2IDgzMyA3MjIgNzc3IDY2NiA3NzcgNzIyIDY2NiA2MTBdIDU3IFs2NjZdIDY4IFs1NTYgNTU2IDUwMCA1NTYgNTU2IDI3NyA1NTYgNTU2IDIyMl0gNzkgWzIyMiA4MzMgNTU2IDU1Nl0gODUgWzMzMyA1MDAgMjc3IDU1NiA1MDBdIDkyIFs1MDBdIDExMiBbNTU2XV0+PgplbmRvYmoKOCAwIG9iago8PC9Bc2NlbnQgNzI4L0NJRFNldCA5IDAgUi9DYXBIZWlnaHQgNzE2L0Rlc2NlbnQgLTIxMC9GbGFncyAzMi9Gb250QkJveFstNjY0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+5cv/ZP6m/Q1P6SwVqN5bg+4+h/zf+nMUeL4ez9tLCc6OElgYltGdtjX+4DtmkrGvVWkhfVekazUVaBiEo7ZqamfVkhEvBW5+BjRoEw+w0PZFHccNnc1bdrE0Sz3XcLgl1S8gtYSsKNqsJCPtGJrSyjyCmXgUil8PZ+4nuI02Au4lrV5H7o8zXg2aSPeFkcAbI8VCyEtn2hZaC/GSGtnMbmnjKPw9n7dRxIIMCGmJbbDyQT3LZPBs0ldvNYOSMzxTllJZchYhl9STJppkSJQjhqxSwdOI9b9tOPENFzYkbVqjZP3TOalnKSBVM9uOPQqGTqYRkdQOmpUR1hQnjO7hqfuGDiPdDOA8btiO2tWGxFLbRLU2fKck5o9xaNEY0Lsww0XfF2amQPQKEcSrC34KbiOo/bMb8S4u77dtVrXrv6Acy7yYkYC/KJXkmFyGCAZ0o6qcqfQSeL/AIWu6/bqOIzGBEuIu+3kVa168GkEsu8mOGMvxSUpLLkLEAvpT1U5k+ok8FfG43G43G43G43G43G43G43G43G43G43G43G43G43H/2QplbmRzdHJlYW0KZW5kb2JqCnhyZWYKMCAyOQowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDE3MTMgMDAwMDAgbiAKMDAwMDAwMTk5NSAwMDAwMCBuIAowMDAwMDAxNzU4IDAwMDAwIG4gCjAwMDAwMDE1MTUgMDAwMDAgbiAKMDAwMDAwMDAxNSAwMDAwMCBuIAowMDAwMDAyMDQ2IDAwMDAwIG4gCjAwMDAwMDIxNzQgMDAwMDAgbiAKMDAwMDAwMjYxNiAwMDAwMCBuIAowMDAwMDAyODUzIDAwMDAwIG4gCjAwMDAwMDI5MzUgMDAwMDAgbiAKMDAwMDAzMzc4NyAwMDAwMCBuIAowMDAwMDM0MzE1IDAwMDAwIG4gCjAwMDAwMzQ0NTAgMDAwMDAgbiAKMDAwMDAzNDkzOSAwMDAwMCBuIAowMDAwMDM1MTg3IDAwMDAwIG4gCjAwMDAwMzUyNzAgMDAwMDAgbiAKMDAwMDA2MzU0MCAwMDAwMCBuIAowMDAwMDY0MDk1IDAwMDAwIG4gCjAwMDAwNjQyMzIgMDAwMDAgbiAKMDAwMDA2NDY4OCAwMDAwMCBuIAowMDAwMDY0OTM1IDAwMDAwIG4gCjAwMDAwNjUwMTcgMDAwMDAgbiAKMDAwMDA4Njg1MiAwMDAwMCBuIAowMDAwMDg3Mzg3IDAwMDAwIG4gCjAwMDAwODc1OTMgMDAwMDAgbiAKMDAwMDA5MzU0OCAwMDAwMCBuIAowMDAwMDkzNzUxIDAwMDAwIG4gCjAwMDAwOTU1MzYgMDAwMDAgbiAKdHJhaWxlcgo8PC9JRCBbPDFmMzExYWY5NDhiNzZhZjgzZDUyNjNmMmNmZDE5NTc2PjwxZjMxMWFmOTQ4Yjc2YWY4M2Q1MjYzZjJjZmQxOTU3Nj5dL0luZm8gMyAwIFIvUm9vdCAxIDAgUi9TaXplIDI5Pj4KJWlUZXh0LUNvcmUtNy4yLjAKc3RhcnR4cmVmCjEyMTkzOQolJUVPRgo=" } } - }, - "covidAssessmentDetails": { - "hasKnownPositiveC19Past7Days": false, - "citizenIsConsideredImmunoCompromised": true, - "has3DoseMoreThan14Days": false, - "hasDocumentedChronicCondition": false, - "previousAssessmentDetailsList": [ - { - "dateTimeOfAssessment": "2023-10-04T13:37:32.7034242", - "formId": "8432264d-8fcd-4101-8957-0513f10ef03b" - }, - { - "dateTimeOfAssessment": "2023-09-21T23:40:11.6077464", - "formId": "ee227d53-e405-470b-8435-06c9843e9fbb" - }, - { - "dateTimeOfAssessment": "2023-09-22T17:48:18.6256521", - "formId": "fb12aa7a-8abf-4f9c-9440-06e0444fa036" - }, - { - "dateTimeOfAssessment": "2023-08-31T23:07:26.5449878", - "formId": "a81aa087-891a-441e-9f96-09ddae71f9db" - }, - { - "dateTimeOfAssessment": "2023-09-26T22:18:44.9363453", - "formId": "67abd123-8466-4691-acc5-09e27b898a9e" - }, - { - "dateTimeOfAssessment": "2023-09-20T01:26:26.4246666", - "formId": "bcf8f06f-167f-41e7-b3a3-0a0f3e2e3fa5" - }, - { - "dateTimeOfAssessment": "2023-09-27T20:33:43.3976415", - "formId": "efad79e2-96d4-439a-bff5-0d2d4d500e9a" - }, - { - "dateTimeOfAssessment": "2023-09-20T01:19:03.870187", - "formId": "974dea06-e262-41cc-9ee7-10d174781a93" - }, - { - "dateTimeOfAssessment": "2023-09-28T13:35:11.7332903", - "formId": "5222c996-a313-48d6-bad0-1357b6ba6070" - }, - { - "dateTimeOfAssessment": "2023-09-29T17:32:36.1815382", - "formId": "02276d8a-24ad-41a3-98bb-149b34fed5ce" - }, - { - "dateTimeOfAssessment": "2023-09-18T23:48:57.5657437", - "formId": "43c9d2ca-cc63-4ca7-b9b9-154c75284f26" - }, - { - "dateTimeOfAssessment": "2023-10-04T23:11:24.8373306", - "formId": "ea831b42-35fa-4a0d-b8b2-19b7eade8664" - }, - { - "dateTimeOfAssessment": "2023-10-04T22:04:45.9363222", - "formId": "997df23d-ae61-4f0e-b32d-1bc94cb5a43d" - }, - { - "dateTimeOfAssessment": "2023-08-31T20:40:04.293842", - "formId": "af840bcd-bd21-4a85-a77c-1f76c5255772" - }, - { - "dateTimeOfAssessment": "2023-09-18T23:42:10.6093456", - "formId": "d06298c6-a5f3-42e0-abdf-1f8e8c70ca8a" - }, - { - "dateTimeOfAssessment": "2023-09-30T00:38:45.1845964", - "formId": "a12d248a-94d7-4a9a-8acb-207123e2e22f" - }, - { - "dateTimeOfAssessment": "2023-10-05T02:56:19.2588754", - "formId": "a13f2a84-d6b2-496f-8959-222bb477ba9e" - }, - { - "dateTimeOfAssessment": "2023-10-03T17:02:09.9979857", - "formId": "4dcc3ec1-02e0-4821-ad79-2592d018e9a3" - }, - { - "dateTimeOfAssessment": "2023-10-03T19:10:16.1569305", - "formId": "7b7b9f15-219e-407b-bbdd-27dfdfabf86e" - }, - { - "dateTimeOfAssessment": "2023-09-19T17:20:20.444731", - "formId": "3070b7f6-79eb-4581-a81d-29f9b9b01936" - }, - { - "dateTimeOfAssessment": "2023-09-27T13:35:19.0330226", - "formId": "e905e2cc-161b-4f8d-b24c-2bd08e0b49a3" - }, - { - "dateTimeOfAssessment": "2023-09-28T19:50:29.393988", - "formId": "3a9c2643-c33b-4cf8-b6fc-2c836ef3eb68" - }, - { - "dateTimeOfAssessment": "2023-09-18T22:58:34.2216583", - "formId": "65be61e6-400b-4fb6-9c39-2ca655df0cf9" - }, - { - "dateTimeOfAssessment": "2023-09-26T21:49:01.52789", - "formId": "4a343536-adf6-4cab-8818-2d2f16e50e2c" - }, - { - "dateTimeOfAssessment": "2023-09-21T20:20:57.7271968", - "formId": "96da1da9-b5d8-4a56-b370-2dfff57854fa" - }, - { - "dateTimeOfAssessment": "0001-01-01T00:00:00", - "formId": "8bcf96f2-44fe-4092-8978-2fcd91152d93" - }, - { - "dateTimeOfAssessment": "2023-09-18T22:57:04.6527569", - "formId": "a06e0d12-8ca9-4ea6-8502-35b47e244b76" - }, - { - "dateTimeOfAssessment": "2022-08-23T15:45:53.4824614", - "formId": "5315ff1c-0144-4a8e-8611-3842f5c1e48a" - }, - { - "dateTimeOfAssessment": "2023-09-28T19:41:45.2163207", - "formId": "6d1dc648-e9dd-44aa-b16a-389ede46cf19" - }, - { - "dateTimeOfAssessment": "2023-10-03T22:09:20.1443278", - "formId": "38c3012b-2cd3-42f2-be34-3a66bd2cbcf3" - }, - { - "dateTimeOfAssessment": "2023-09-27T21:29:48.4287953", - "formId": "5841b15c-5f18-45c4-abf8-3b66ab8ad45b" - }, - { - "dateTimeOfAssessment": "2023-09-19T22:51:24.2568709", - "formId": "0636b966-9a9e-4c1c-a4e8-40a1182a6874" - }, - { - "dateTimeOfAssessment": "2023-10-05T11:12:09.1597417", - "formId": "42111441-6ec9-4278-b33a-42a84e9fdf95" - }, - { - "dateTimeOfAssessment": "2023-09-18T22:53:36.3467699", - "formId": "cbe68e1e-2938-4291-875d-43cb7d5cc34b" - }, - { - "dateTimeOfAssessment": "2023-09-22T13:36:52.1934512", - "formId": "b04763b0-44a9-46b6-be34-43e19031bc2a" - }, - { - "dateTimeOfAssessment": "2023-09-19T23:55:51.0487055", - "formId": "9fbfc462-ac15-454b-94db-45e7e0b5c3a1" - }, - { - "dateTimeOfAssessment": "2023-09-29T01:22:02.2547899", - "formId": "e338fbce-9b44-4f3a-b697-4843addd6779" - }, - { - "dateTimeOfAssessment": "2023-10-05T02:49:11.0462311", - "formId": "bd1aad79-ad01-451d-8319-4aba26d61e3a" - }, - { - "dateTimeOfAssessment": "2023-09-22T22:39:30.441972", - "formId": "da0663a9-2f69-4f3b-8fea-4cfcd109e4c8" - }, - { - "dateTimeOfAssessment": "2023-10-04T22:01:31.8444382", - "formId": "5cf9d175-9d4d-4210-8e87-5009a2741702" - }, - { - "dateTimeOfAssessment": "0001-01-01T00:00:00", - "formId": "d0d7329d-83aa-48bb-b092-58289b50c9d1" - }, - { - "dateTimeOfAssessment": "2023-09-18T21:57:37.4534231", - "formId": "f427a354-a792-452d-b5da-5a1aacb41047" - }, - { - "dateTimeOfAssessment": "2023-09-19T17:25:40.8330347", - "formId": "aeb2085e-b01d-4822-8a76-5a8cc4059c26" - }, - { - "dateTimeOfAssessment": "2023-09-19T00:06:56.8972675", - "formId": "837c1193-447d-46ac-b50e-5a9bc58d6d10" - }, - { - "dateTimeOfAssessment": "2023-09-21T01:26:18.4929095", - "formId": "c39791f6-8ba4-4057-9315-5d48ec64be43" - }, - { - "dateTimeOfAssessment": "2023-09-29T13:36:58.0562286", - "formId": "694c5aa6-4d52-48af-9bd9-5e2a6d43ac2a" - }, - { - "dateTimeOfAssessment": "2023-09-18T22:57:10.4881385", - "formId": "61278cea-9c32-4f3a-81d6-5ee6d8c02861" - }, - { - "dateTimeOfAssessment": "2023-09-27T22:19:47.0930824", - "formId": "c954e5c3-012a-4661-8948-5f3b754b471a" - }, - { - "dateTimeOfAssessment": "2023-10-05T07:24:57.1014181", - "formId": "a9dd222f-ced0-49a5-a5c2-6baf7a8da74f" - }, - { - "dateTimeOfAssessment": "2023-10-03T19:07:29.2607612", - "formId": "90a83b70-9ff8-4da2-97b5-6bce5e3d501c" - }, - { - "dateTimeOfAssessment": "2023-09-18T20:57:37.7818313", - "formId": "b55fbe59-6681-4274-88d7-6ddaa6152c7f" - }, - { - "dateTimeOfAssessment": "2023-09-21T22:19:59.2840293", - "formId": "72203396-f624-4bb7-874f-73fd6afe9e48" - }, - { - "dateTimeOfAssessment": "2023-09-29T19:40:00.6753488", - "formId": "70cdb6eb-00d4-48aa-9c1f-7753fd6a48a7" - }, - { - "dateTimeOfAssessment": "2023-10-04T16:10:33.7376396", - "formId": "e93bf5bf-1ae4-4f82-a18b-78a4ab093b7d" - }, - { - "dateTimeOfAssessment": "2023-10-03T19:14:39.1537376", - "formId": "603de19d-fd7b-4958-86ff-7ee234edb4ab" - }, - { - "dateTimeOfAssessment": "2023-09-28T13:26:55.5845116", - "formId": "e17f6338-41e0-4502-a051-863b96063e05" - }, - { - "dateTimeOfAssessment": "2023-09-28T22:22:58.3380488", - "formId": "0631ee16-000f-4c28-a812-88120d0b930b" - }, - { - "dateTimeOfAssessment": "2023-10-02T13:37:39.9730478", - "formId": "1b169037-a059-4b70-95db-89417c068b0c" - }, - { - "dateTimeOfAssessment": "2023-09-18T22:52:13.2540298", - "formId": "61e52d3e-0a5e-417c-a374-8aaec0d523fb" - }, - { - "dateTimeOfAssessment": "2023-08-31T20:52:51.0871478", - "formId": "c2bdbefb-54ce-4d24-a981-8ae371adce8e" - }, - { - "dateTimeOfAssessment": "2023-10-03T22:42:57.7760246", - "formId": "5338fbae-ad2c-4375-8a25-8bd2599a619d" - }, - { - "dateTimeOfAssessment": "2023-09-18T22:47:19.9680081", - "formId": "6d399bd1-d9c6-4921-a9aa-8c255e637623" - }, - { - "dateTimeOfAssessment": "2023-10-03T19:03:20.931116", - "formId": "9bfde957-0248-47ef-825d-907dcb7e51b3" - }, - { - "dateTimeOfAssessment": "2022-03-21T21:50:00.2204511", - "formId": "792ac2e7-d3f4-41f2-9d0b-91294696029d" - }, - { - "dateTimeOfAssessment": "2023-10-03T18:31:51.1900271", - "formId": "9d9a586e-236d-40bc-b136-91330cf803c6" - }, - { - "dateTimeOfAssessment": "2023-09-18T20:50:59.4479548", - "formId": "acfe23c4-7e41-473b-aa2a-93a09b4d8df2" - }, - { - "dateTimeOfAssessment": "2023-09-27T23:54:18.902849", - "formId": "5d736aa0-96b3-48cd-a422-93a10c877d2c" - }, - { - "dateTimeOfAssessment": "2023-10-03T18:58:17.86721", - "formId": "710fe91d-1889-44e6-a4b9-97177174c7b3" - }, - { - "dateTimeOfAssessment": "2023-10-03T13:37:19.0602725", - "formId": "0c22065e-6b98-468a-9a0c-991b01d20a94" - }, - { - "dateTimeOfAssessment": "2023-09-27T17:47:12.4938407", - "formId": "2258fd8c-73f7-4cb9-ab51-998da1c9b10f" - }, - { - "dateTimeOfAssessment": "2023-09-18T20:54:10.320258", - "formId": "c0a20a90-2417-4259-8f13-9ff83996f7f5" - }, - { - "dateTimeOfAssessment": "2022-03-22T21:38:09.202412", - "formId": "bb6728c9-283e-48d0-bccd-a0cec97457df" - }, - { - "dateTimeOfAssessment": "2023-09-18T21:22:05.272122", - "formId": "9d0e1d83-649d-4659-a2fd-a2c81aa2d5df" - }, - { - "dateTimeOfAssessment": "2023-09-19T16:57:37.473131", - "formId": "5af1aa12-9c35-41c1-a420-a71aa3f20278" - }, - { - "dateTimeOfAssessment": "2023-09-28T22:40:17.7585303", - "formId": "8c2bdb62-c414-4297-8f84-a82a2af06b0d" - }, - { - "dateTimeOfAssessment": "2023-09-19T00:28:24.3214058", - "formId": "7edd25a0-31d1-41e4-8dc9-aaf602a06c83" - }, - { - "dateTimeOfAssessment": "2023-09-21T20:46:44.4014224", - "formId": "c169c64d-3bf7-48f6-bb71-abe50d060a40" - }, - { - "dateTimeOfAssessment": "2023-09-26T16:19:52.5890654", - "formId": "d38654ec-c2a5-4cf9-ba66-ac356deeb86e" - }, - { - "dateTimeOfAssessment": "2023-09-28T18:24:07.5748731", - "formId": "b232ffd6-af64-41ae-9cf6-adf98a049e83" - }, - { - "dateTimeOfAssessment": "2023-10-04T23:09:30.0358548", - "formId": "341ba9bb-1abf-47a6-845f-afe240e2c07c" - }, - { - "dateTimeOfAssessment": "2023-09-29T22:21:34.0502535", - "formId": "f45b5d65-ce8d-475e-940d-b31d1c2bee88" - }, - { - "dateTimeOfAssessment": "2023-09-18T23:44:26.1012254", - "formId": "94bec943-b2ee-41de-b42e-b33d9fa87fc8" - }, - { - "dateTimeOfAssessment": "2023-09-25T23:02:23.5531822", - "formId": "a5f18933-4f1e-4aa2-901c-b5b23dd47f68" - }, - { - "dateTimeOfAssessment": "2023-09-26T13:35:15.9748526", - "formId": "3cb1f760-3365-4afd-b430-b6f882ae6497" - }, - { - "dateTimeOfAssessment": "2023-10-04T01:11:16.023469", - "formId": "fd657928-0bfd-419a-8a77-b89d6cbd9ccb" - }, - { - "dateTimeOfAssessment": "2023-09-18T23:02:00.1520937", - "formId": "7c54f2c5-9927-4b9b-a7cf-bab3113f1cc6" - }, - { - "dateTimeOfAssessment": "2023-10-05T17:36:03.5244232", - "formId": "91f01ccf-3559-4955-bb7a-bbf0728baf3a" - }, - { - "dateTimeOfAssessment": "2023-10-03T21:25:19.106469", - "formId": "2626b310-566c-44b1-8f11-bc32910dc4c3" - }, - { - "dateTimeOfAssessment": "2023-09-25T13:35:19.138485", - "formId": "c943e4f9-2bf1-44a9-9a68-bd00914e379e" - }, - { - "dateTimeOfAssessment": "2023-09-28T18:02:11.0949155", - "formId": "f909d800-4e0f-4b74-9606-c0b5602360b7" - }, - { - "dateTimeOfAssessment": "2023-09-28T22:29:33.046724", - "formId": "404f9626-dfad-429a-b078-c32562c8f204" - }, - { - "dateTimeOfAssessment": "2023-09-21T13:35:18.2442849", - "formId": "093a0175-cf94-4291-8f6a-c5bf7b8273ee" - }, - { - "dateTimeOfAssessment": "2023-09-30T01:09:07.4778961", - "formId": "fd67bc58-1e5f-4b79-abcd-c680008066eb" - }, - { - "dateTimeOfAssessment": "2023-09-26T18:19:41.4508579", - "formId": "94dc3b4d-1fde-4914-96fa-c7a10d20e5d3" - }, - { - "dateTimeOfAssessment": "2023-10-05T03:55:43.0797489", - "formId": "8e854d92-90c0-42c3-84bb-c806bbbb53b6" - }, - { - "dateTimeOfAssessment": "2023-10-03T19:48:02.2724964", - "formId": "55669980-a7f1-4eaf-b210-d01d76af3452" - }, - { - "dateTimeOfAssessment": "2023-09-18T22:56:04.1519734", - "formId": "bfb5ed99-73de-4dde-be32-d0577e50d8e6" - }, - { - "dateTimeOfAssessment": "2023-09-18T22:54:45.9930665", - "formId": "9dde5f17-53c6-49b7-8584-d1058131b0d0" - }, - { - "dateTimeOfAssessment": "2023-09-18T19:15:26.1542771", - "formId": "aa1f0e35-f45f-488e-8503-d3712367feea" - }, - { - "dateTimeOfAssessment": "0001-01-01T00:00:00", - "formId": "4bdfa9c4-ab45-4ffb-9de7-d37532e6f71b" - }, - { - "dateTimeOfAssessment": "2023-09-18T20:55:49.1926856", - "formId": "8c17a1be-40d7-4e0e-8a55-d4de273e7915" - }, - { - "dateTimeOfAssessment": "2023-09-29T23:28:36.4165759", - "formId": "7e4b6209-5f16-4bc3-8cf0-d682388667c1" - }, - { - "dateTimeOfAssessment": "2023-08-31T20:42:52.3595297", - "formId": "34fbc192-a912-42dc-9cac-d71f00314c1e" - }, - { - "dateTimeOfAssessment": "2023-09-28T20:42:23.925835", - "formId": "3a192fc9-4882-4941-b444-daad194172b1" - }, - { - "dateTimeOfAssessment": "2023-09-20T13:35:38.1868822", - "formId": "847f6b99-6fce-4c90-bc8c-daee8b52e106" - }, - { - "dateTimeOfAssessment": "2023-09-19T00:05:15.7355431", - "formId": "1e708a1c-bce2-41fa-a5a8-db72ee10975b" - }, - { - "dateTimeOfAssessment": "2023-09-28T20:27:46.8945619", - "formId": "6ec6a8e5-d252-41cb-a95f-dc8c5bf01df5" - }, - { - "dateTimeOfAssessment": "2023-09-26T20:21:14.3291272", - "formId": "fff1d574-6b23-4c1e-806b-ddab44616111" - }, - { - "dateTimeOfAssessment": "2023-09-29T03:33:23.0140597", - "formId": "26f5753e-d920-45ef-83b7-de492e63de2c" - }, - { - "dateTimeOfAssessment": "2023-09-22T13:35:11.8241404", - "formId": "1a8838d2-7f98-462a-a7a5-df0fdde0d1f9" - }, - { - "dateTimeOfAssessment": "2023-09-29T03:17:39.5101449", - "formId": "b815a903-5931-43f7-9d7d-dfce443f66ce" - }, - { - "dateTimeOfAssessment": "2023-09-28T19:06:16.6336515", - "formId": "56089c62-e067-44f4-b434-e14774bd05bf" - }, - { - "dateTimeOfAssessment": "2022-08-09T21:26:15.6058959", - "formId": "4d25818d-9bf3-425d-8609-e328fca90b21" - }, - { - "dateTimeOfAssessment": "2023-09-25T19:47:21.2473521", - "formId": "7364712b-4e9a-4b1e-bb9d-e33417239aa8" - }, - { - "dateTimeOfAssessment": "2023-09-19T22:15:33.3853824", - "formId": "fb9f3259-1eea-43cb-9a18-ebcb7fb03453" - }, - { - "dateTimeOfAssessment": "2023-09-29T20:20:18.9043078", - "formId": "65bc972f-a74f-4715-8bb9-ef9907c5ff4f" - }, - { - "dateTimeOfAssessment": "2023-09-28T19:08:20.3143469", - "formId": "c77e3281-9215-4598-a8aa-f7882314b3ee" - }, - { - "dateTimeOfAssessment": "2023-09-21T17:36:55.9712567", - "formId": "51c4caf6-d3ba-433b-97d9-f98b3966c5ff" - }, - { - "dateTimeOfAssessment": "2023-09-30T00:15:39.9885048", - "formId": "cfee32db-0672-480a-90a8-fa1eb6bb91b6" - }, - { - "dateTimeOfAssessment": "2023-09-20T20:58:32.8805394", - "formId": "27d57d56-03b5-4b5c-ab62-fc5d2b37b3db" - }, - { - "dateTimeOfAssessment": "2022-02-22T16:44:58.517698", - "formId": "4e6acced-4897-4f3e-b683-ff67bc51866e" - } - ] } } diff --git a/Apps/Admin/Tests/Functional/cypress/integration/e2e/patient-details.cy.js b/Apps/Admin/Tests/Functional/cypress/integration/e2e/patient-details.cy.js index 0979eb665d..2b5e4f51d4 100644 --- a/Apps/Admin/Tests/Functional/cypress/integration/e2e/patient-details.cy.js +++ b/Apps/Admin/Tests/Functional/cypress/integration/e2e/patient-details.cy.js @@ -111,190 +111,6 @@ function validateMailAddressFormSubmission() { cy.get("[data-testid=address-confirmation-form]").should("not.exist"); } -function validateCovid19TreatmentAssessmentFormBackCancel() { - cy.get("[data-testid=start-covid-19-treatment-assessment-button]").click(); - cy.url().should("include", "/covid-19-treatment-assessment"); - setupPatientDetailsAliases(); - cy.get("[data-testid=back-button]").click(); - waitForPatientDetailsDataLoad(); - cy.get("[data-testid=patient-details-back-button]").should("be.visible"); - cy.url().should("include", "/patient-details"); - cy.get("[data-testid=start-covid-19-treatment-assessment-button]").click(); - cy.url().should("include", "/covid-19-treatment-assessment"); - cy.scrollTo("bottom", { ensureScrollable: false }); - cy.get("[data-testid=cancel-covid-19-treatment-assessment]").click(); - cy.url().should("include", "/patient-details"); -} - -function validateCovid19TreatmentAssessmentInfoMessageForRadioSelection() { - cy.get("[data-testid=start-covid-19-treatment-assessment-button]").click(); - - cy.get("[data-testid=assessment-question-1]").within(() => { - cy.get("[data-testid=assessment-option-yes]").click(); - cy.get("[data-testid=treatment-benefit-not-indicated]").should( - "not.exist" - ); - cy.get("[data-testid=assessment-option-no]").click(); - cy.get("[data-testid=treatment-benefit-not-indicated]").should( - "be.visible" - ); - }); - - cy.get("[data-testid=assessment-question-2]").within(() => { - cy.get("[data-testid=assessment-option-yes]").click(); - cy.get("[data-testid=treatment-benefit-not-indicated]").should( - "not.exist" - ); - cy.get("[data-testid=assessment-option-no]").click(); - cy.get("[data-testid=treatment-benefit-not-indicated]").should( - "be.visible" - ); - }); - - cy.scrollTo("bottom", { ensureScrollable: false }); - - cy.get("[data-testid=assessment-question-6]").within(() => { - cy.get("[data-testid=assessment-option-yes]").click(); - cy.get("[data-testid=treatment-benefit-indicated]").should( - "be.visible" - ); - cy.get("[data-testid=assessment-option-no]").click(); - cy.get(" [data-testid=treatment-benefit-indicated]").should( - "not.exist" - ); - cy.get("[data-testid=assessment-option-not-sure]").click(); - cy.get("[data-testid=treatment-benefit-indicated]").should("not.exist"); - }); - - cy.get("[data-testid=assessment-question-7]").within(() => { - cy.get("[data-testid=assessment-option-yes]").click(); - cy.get(" [data-testid=treatment-benefit-indicated]").should( - "be.visible" - ); - cy.get("[data-testid=assessment-option-no]").click(); - cy.get("[data-testid=treatment-benefit-indicated]").should("not.exist"); - cy.get("[data-testid=assessment-option-not-sure]").click(); - cy.get("[data-testid=treatment-benefit-indicated]").should("not.exist"); - }); - - cy.get("[data-testid=cancel-covid-19-treatment-assessment]").click(); - cy.url().should("include", "/patient-details"); -} - -function validateCovid19TreatmentAssessmentFormRequiredInputs() { - cy.get("[data-testid=start-covid-19-treatment-assessment-button]").click(); - cy.url().should("include", "/covid-19-treatment-assessment"); - cy.scrollTo("bottom", { ensureScrollable: false }); - cy.get("[data-testid=submit-covid-19-treatment-assessment]").click(); - - cy.scrollTo("top", { ensureScrollable: false }); - validateCovid19InputContainsError("[data-testid=phone-number-input]"); - cy.get("[data-testid=assessment-question-]") - .contains("Do you have a family doctor or nurse practitioner?") - .parent() - .within(() => { - cy.get("div").contains("Required").should("not.exist"); - }); - cy.get("[data-testid=assessment-question-1] div") - .contains("Required") - .should("be.visible"); - cy.get("[data-testid=assessment-question-2] div") - .contains("Required") - .should("be.visible"); - cy.get("[data-testid=assessment-question-3] div") - .contains("Required") - .should("be.visible"); - cy.get("[data-testid=assessment-question-4] div") - .contains("Required") - .should("be.visible"); - - cy.get("[data-testid=assessment-question-4]").scrollIntoView(); - cy.get("[data-testid=assessment-question-5] div") - .contains("Required") - .should("not.exist"); - cy.get("[data-testid=assessment-question-6] div") - .contains("Required") - .should("be.visible"); - cy.get("[data-testid=assessment-question-7] div") - .contains("Required") - .should("not.exist"); - - cy.scrollTo("bottom", { ensureScrollable: false }); - cy.get("[data-testid=assessment-question-8] div") - .contains("Required") - .should("be.visible"); - - cy.get("[data-testid=cancel-covid-19-treatment-assessment]").click(); - cy.url().should("include", "/patient-details"); -} - -function validateCovid19TreatmentAssessmentFormSubmission() { - cy.get("[data-testid=start-covid-19-treatment-assessment-button]").click(); - cy.url().should("include", "/covid-19-treatment-assessment"); - - cy.get("[data-testid=phone-number-input]").clear().type("2505556000"); - - cy.get("[data-testid=assessment-question-]") - .contains("Do you have a family doctor or nurse practitioner?") - .parent() - .within(() => { - cy.get( - "[data-testid=assessment-option-input] [data-testid=assessment-option-yes]" - ).click(); - }); - - cy.get( - "[data-testid=assessment-question-1] [data-testid=assessment-option-no]" - ).click(); - cy.get( - "[data-testid=assessment-question-2] [data-testid=assessment-option-no]" - ).click(); - cy.get( - "[data-testid=assessment-question-3] [data-testid=assessment-option-no]" - ).click(); - cy.get( - "[data-testid=assessment-question-4] [data-testid=assessment-option-not-sure]" - ).click(); - - cy.scrollTo("bottom", { ensureScrollable: false }); - - cy.get( - '[data-testid=assessment-question-5] button[aria-label="Open Date Picker"]' - ).click(); - cy.get( - "[data-testid=assessment-question-5] .mud-picker-container .mud-picker-content .mud-picker-calendar-container .mud-picker-calendar-transition .mud-picker-calendar" - ).within(() => { - cy.get( - "button.mud-current.mud-button-outlined.mud-button-outlined-primary" - ).click(); - }); - - cy.get( - "[data-testid=assessment-question-6] [data-testid=assessment-option-yes]" - ).click(); - cy.get( - "[data-testid=assessment-question-7] [data-testid=assessment-option-yes]" - ).click(); - cy.get( - "[data-testid=assessment-question-8] [data-testid=assessment-option-no]" - ).click(); - - cy.get("[data-testid=notes-input]") - .clear() - .type("Test Covid19 Treatment Assessment Note Input."); - - cy.get("[data-testid=submit-covid-19-treatment-assessment]").click(); - cy.get("[data-testid=address-confirmation-form]").should("be.visible"); - - cy.intercept("POST", "**/Support/CovidAssessment").as( - "postCovidAssessment" - ); - cy.get("[data-testid=address-confirmation-button]").click(); - cy.wait("@postCovidAssessment", { timeout: defaultTimeout }); - cy.get("[data-testid=address-confirmation-form]").should("not.exist"); - cy.url().should("include", "/patient-details"); -} - function validatePrintVaccineCardSubmission() { cy.intercept("GET", `**/Document?phn=${phnWithInvalidDoses}`).as( "getVaccineCard" @@ -487,7 +303,7 @@ describe("Patient details page as admin user", () => { validateDatasetAccess(); }); - it("Verify covid immunization section (not blocked), assessment section, contains invalid dose, mails address submission, prints vaccine card and submits covid19 treatment assessment", () => { + it("Verify covid immunization section (not blocked), contains invalid dose, mails address submission and prints vaccine card", () => { performSearch("PHN", phnWithInvalidDoses); selectPatientTab("Profile"); @@ -503,27 +319,16 @@ describe("Patient details page as admin user", () => { 0 ); cy.get("[data-testid=invalid-dose-alert").should("be.visible"); - getTableRows("[data-testid=assessment-history-table]").should( - "have.length.greaterThan", - 0 - ); cy.get("[data-testid=mail-button]").should("be.visible", "be.enabled"); cy.get("[data-testid=print-button]").should("be.visible", "be.enabled"); - cy.get( - "[data-testid=start-covid-19-treatment-assessment-button]" - ).should("be.visible", "be.enabled"); validateMailAddressFormCancel(); validateMailAddressFormRequiredInputs(); - validateCovid19TreatmentAssessmentFormBackCancel(); - validateCovid19TreatmentAssessmentFormRequiredInputs(); - validateCovid19TreatmentAssessmentInfoMessageForRadioSelection(); validateMailAddressFormSubmission(); - validateCovid19TreatmentAssessmentFormSubmission(); validatePrintVaccineCardSubmission(); }); - it("Verify covid immunization section (not blocked), assessment section and contains valid dose", () => { + it("Verify covid immunization section (not blocked) and contains valid dose", () => { performSearch("PHN", phnWithValidDoses); selectPatientTab("Profile"); @@ -537,10 +342,6 @@ describe("Patient details page as admin user", () => { "have.length.greaterThan", 0 ); - getTableRows("[data-testid=assessment-history-table]").should( - "have.length.greaterThan", - 0 - ); cy.get("[data-testid=invalid-dose-alert").should("not.exist"); }); }); @@ -585,7 +386,7 @@ describe("Patient Details as Support", () => { ); }); - it("Verify covid immunization section (not blocked), assessment section and contains invalid dose", () => { + it("Verify covid immunization section (not blocked) and contains invalid dose", () => { performSearch("PHN", phnWithInvalidDoses); selectPatientTab("Profile"); @@ -604,18 +405,11 @@ describe("Patient Details as Support", () => { 0 ); cy.get("[data-testid=invalid-dose-alert").should("be.visible"); - getTableRows("[data-testid=assessment-history-table]").should( - "have.length.greaterThan", - 0 - ); cy.get("[data-testid=mail-button]").should("be.visible", "be.enabled"); cy.get("[data-testid=print-button]").should("be.visible", "be.enabled"); - cy.get( - "[data-testid=start-covid-19-treatment-assessment-button]" - ).should("be.visible", "be.enabled"); }); - it("Verify covid immunization section (not blocked), assessment section and contains valid dose", () => { + it("Verify covid immunization section (not blocked) and contains valid dose", () => { performSearch("PHN", phnWithValidDoses); selectPatientTab("Profile"); @@ -632,14 +426,10 @@ describe("Patient Details as Support", () => { "have.length.greaterThan", 0 ); - getTableRows("[data-testid=assessment-history-table]").should( - "have.length.greaterThan", - 0 - ); cy.get("[data-testid=invalid-dose-alert").should("not.exist"); }); - it("Verify covid immunization and assessment sections blocked", () => { + it("Verify covid immunization blocked", () => { performSearch("PHN", phnWithBlockedImmunizations); selectPatientTab("Profile"); @@ -653,7 +443,6 @@ describe("Patient Details as Support", () => { cy.get("[data-testid=patient-hdid]").should("not.exist"); cy.get("[data-testid=immunization-table]").should("not.exist"); - cy.get("[data-testid=assessment-history-table]").should("not.exist"); cy.get("[data-testid=blocked-immunization-alert").should("be.visible"); }); diff --git a/Apps/Admin/Tests/Services/CovidSupportServiceTests.cs b/Apps/Admin/Tests/Services/CovidSupportServiceTests.cs index e92716ae4c..13781fc03d 100644 --- a/Apps/Admin/Tests/Services/CovidSupportServiceTests.cs +++ b/Apps/Admin/Tests/Services/CovidSupportServiceTests.cs @@ -23,7 +23,6 @@ namespace HealthGateway.Admin.Tests.Services using System.Threading.Tasks; using HealthGateway.AccountDataAccess.Patient; using HealthGateway.Admin.Common.Models.CovidSupport; - using HealthGateway.Admin.Server.Api; using HealthGateway.Admin.Server.Delegates; using HealthGateway.Admin.Server.Services; using HealthGateway.Common.AccessManagement.Authentication; @@ -82,15 +81,11 @@ public async Task RetrieveVaccineRecordAsyncThrowsReportHasEmptyPayload() ResourcePayload = null, }; - Guid covidAssessmentId = Guid.NewGuid(); - CovidAssessmentResponse covidAssessmentResponse = GenerateCovidAssessmentResponse(covidAssessmentId); - ICovidSupportService service = CreateCovidSupportService( GetPatientRepositoryMock((query, patient)), GetAuthenticationDelegateMock(AccessToken), GetVaccineStatusDelegateMock(vaccineStatusResult), - GetVaccineProofDelegateMock(vaccineProofResult, expected), - GetImmunizationAdminApiMock(covidAssessmentResponse)); + GetVaccineProofDelegateMock(vaccineProofResult, expected)); // Act and Assert NotFoundException exception = await Assert.ThrowsAsync(Actual); @@ -134,15 +129,11 @@ public async Task RetrieveVaccineRecordAsyncThrowsReportHasResultError() }, }; - Guid covidAssessmentId = Guid.NewGuid(); - CovidAssessmentResponse covidAssessmentResponse = GenerateCovidAssessmentResponse(covidAssessmentId); - ICovidSupportService service = CreateCovidSupportService( GetPatientRepositoryMock((query, patient)), GetAuthenticationDelegateMock(AccessToken), GetVaccineStatusDelegateMock(vaccineStatusResult), - GetVaccineProofDelegateMock(vaccineProofResult, expected), - GetImmunizationAdminApiMock(covidAssessmentResponse)); + GetVaccineProofDelegateMock(vaccineProofResult, expected)); // Act and Assert UpstreamServiceException exception = await Assert.ThrowsAsync(Actual); @@ -317,7 +308,7 @@ public async Task RetrieveVaccineRecordAsyncThrowsVaccineStatusMaximumRetryAttem ICovidSupportService service = CreateCovidSupportService( GetPatientRepositoryMock((query, patient)), GetAuthenticationDelegateMock(AccessToken), - GetVaccineStatusDelegateMock()); // this will setup maximum retry attempts reached + GetVaccineStatusDelegateMock()); // this will set up maximum retry attempts reached // Act and Assert UpstreamServiceException exception = await Assert.ThrowsAsync(Actual); @@ -331,7 +322,7 @@ async Task Actual() } /// - /// Mail vaccine card async throws exception given given vaccine status result payload is empty. + /// Mail vaccine card async throws exception given vaccine status result payload is empty. /// /// A representing the asynchronous unit test. [Fact] @@ -494,15 +485,11 @@ public async Task ShouldMailVaccineCardAsync() Result = vaccineStatus, LoadState = new PhsaLoadState { Queued = false, RefreshInProgress = false }, }; - Guid covidAssessmentId = Guid.NewGuid(); - CovidAssessmentResponse covidAssessmentResponse = GenerateCovidAssessmentResponse(covidAssessmentId); - ICovidSupportService service = CreateCovidSupportService( GetPatientRepositoryMock((query, patient)), GetAuthenticationDelegateMock(AccessToken), GetVaccineStatusDelegateMock(vaccineStatusResult), - GetVaccineProofDelegateMock(vaccineProofResult), - GetImmunizationAdminApiMock(covidAssessmentResponse)); + GetVaccineProofDelegateMock(vaccineProofResult)); MailDocumentRequest request = GenerateMailDocumentRequest(); @@ -552,15 +539,11 @@ public async Task ShouldRetrieveVaccineRecordAsync(string status) }, }; - Guid covidAssessmentId = Guid.NewGuid(); - CovidAssessmentResponse covidAssessmentResponse = GenerateCovidAssessmentResponse(covidAssessmentId); - ICovidSupportService service = CreateCovidSupportService( GetPatientRepositoryMock((query, patient)), GetAuthenticationDelegateMock(AccessToken), GetVaccineStatusDelegateMock(vaccineStatusResult), - GetVaccineProofDelegateMock(vaccineProofResult, expected), - GetImmunizationAdminApiMock(covidAssessmentResponse)); + GetVaccineProofDelegateMock(vaccineProofResult, expected)); // Act ReportModel actual = await service.RetrieveVaccineRecordAsync(Phn); @@ -569,78 +552,16 @@ public async Task ShouldRetrieveVaccineRecordAsync(string status) Assert.Equal(expected.ResourcePayload, actual); } - /// - /// Should submit covid assessment async successfully. - /// - /// bool indicating whether access token exists or not. - /// A representing the asynchronous unit test. - [Theory] - [InlineData(true)] - [InlineData(false)] - public async Task ShouldSubmitCovidAssessmentAsyncAsync(bool accessTokenExists) - { - // Arrange - Guid covidAssessmentId = Guid.NewGuid(); - CovidAssessmentResponse expected = GenerateCovidAssessmentResponse(covidAssessmentId); - string? accessToken = accessTokenExists ? AccessToken : null; - - ICovidSupportService service = CreateCovidSupportService( - GetAuthenticationDelegateMock(accessToken), - GetImmunizationAdminApiMock(expected)); - - CovidAssessmentRequest request = new() - { - Phn = Phn, - }; - - if (accessTokenExists) - { - // Act - CovidAssessmentResponse actual = await service.SubmitCovidAssessmentAsync(request); - - // Assert - Assert.Equal(expected, actual); - } - else - { - // Act - async Task Actual() - { - await service.SubmitCovidAssessmentAsync(request); - } - - // Assert - UnauthorizedAccessException exception = await Assert.ThrowsAsync(Actual); - Assert.Equal(ErrorMessages.CannotFindAccessToken, exception.Message); - } - } - - private static ICovidSupportService CreateCovidSupportService( - Mock authenticationDelegateMock, - Mock immunizationAdminApiMock) - { - return new CovidSupportService( - Configuration, - new Mock>().Object, - authenticationDelegateMock.Object, - new Mock().Object, - new Mock().Object, - immunizationAdminApiMock.Object, - new Mock().Object); - } - private static ICovidSupportService CreateCovidSupportService( Mock? patientRepositoryMock = null, Mock? authenticationDelegateMock = null, Mock? vaccineStatusDelegateMock = null, - Mock? vaccineProofDelegateMock = null, - Mock? immunizationAdminApiMock = null) + Mock? vaccineProofDelegateMock = null) { patientRepositoryMock ??= new Mock(); authenticationDelegateMock ??= new Mock(); vaccineStatusDelegateMock ??= new Mock(); vaccineProofDelegateMock ??= new Mock(); - immunizationAdminApiMock ??= new Mock(); return new CovidSupportService( Configuration, @@ -648,18 +569,9 @@ private static ICovidSupportService CreateCovidSupportService( authenticationDelegateMock.Object, vaccineProofDelegateMock.Object, vaccineStatusDelegateMock.Object, - immunizationAdminApiMock.Object, patientRepositoryMock.Object); } - private static CovidAssessmentResponse GenerateCovidAssessmentResponse(Guid id) - { - return new() - { - Id = id, - }; - } - private static MailDocumentRequest GenerateMailDocumentRequest() { return new() @@ -720,13 +632,6 @@ private static Mock GetAuthenticationDelegateMock(strin return mock; } - private static Mock GetImmunizationAdminApiMock(CovidAssessmentResponse response) - { - Mock mock = new(); - mock.Setup(d => d.SubmitCovidAssessmentAsync(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(response); - return mock; - } - private static Mock GetPatientRepositoryMock(params (PatientDetailsQuery Query, PatientModel? Patient)[] pairs) { Mock mock = new(); diff --git a/Apps/Admin/Tests/Services/SupportServiceTests.cs b/Apps/Admin/Tests/Services/SupportServiceTests.cs index f0be256392..e5adde882e 100644 --- a/Apps/Admin/Tests/Services/SupportServiceTests.cs +++ b/Apps/Admin/Tests/Services/SupportServiceTests.cs @@ -29,9 +29,7 @@ namespace HealthGateway.Admin.Tests.Services using HealthGateway.Admin.Common.Constants; using HealthGateway.Admin.Common.Models; using HealthGateway.Admin.Common.Models.CovidSupport; - using HealthGateway.Admin.Server.Api; using HealthGateway.Admin.Server.Delegates; - using HealthGateway.Admin.Server.Models.CovidSupport; using HealthGateway.Admin.Server.Services; using HealthGateway.Admin.Tests.Utils; using HealthGateway.Common.AccessManagement.Authentication; @@ -125,7 +123,6 @@ public async Task ShouldGetPatientSupportDetailsAsync( IList messagingVerifications = GenerateMessagingVerifications(SmsNumber, Email); VaccineDetails vaccineDetails = GenerateVaccineDetails(GenerateVaccineDose()); - CovidAssessmentDetailsResponse covidAssessmentDetailsResponse = GenerateCovidAssessmentDetailsResponse(); AgentAuditQuery auditQuery = new(Hdid); IEnumerable agentAudits = new[] { GenerateAgentAudit() }; IEnumerable blockedDataSources = new[] @@ -150,7 +147,6 @@ public async Task ShouldGetPatientSupportDetailsAsync( null, GetAuthenticationDelegateMock(AccessToken), GetImmunizationAdminDelegateMock(vaccineDetails), - GetImmunizationAdminApiMock(covidAssessmentDetailsResponse), GetAuditRepositoryMock((auditQuery, agentAudits))); // Act @@ -174,7 +170,6 @@ await supportService.GetPatientSupportDetailsAsync( Assert.Equal(expectedBlockedDataSourceCount, actualResult.BlockedDataSources?.Count()); Assert.Equal(expectedDependentCount, actualResult.Dependents?.Count()); Assert.Equal(expectedCovidDetails, actualResult.VaccineDetails == null); - Assert.Equal(expectedCovidDetails, actualResult.CovidAssessmentDetails == null); } /// @@ -202,6 +197,11 @@ public async Task GetPatientSupportDetailsAsyncThrowsInvalidPhnDob() null, GetAuthenticationDelegateMock(AccessToken)); + // Verify + InvalidDataException exception = await Assert.ThrowsAsync(Actual); + Assert.Equal(ErrorMessages.PhnOrDateOfBirthInvalid, exception.Message); + return; + // Act async Task Actual() { @@ -218,10 +218,6 @@ await supportService.GetPatientSupportDetailsAsync( RefreshVaccineDetails = false, }); } - - // Verify - InvalidDataException exception = await Assert.ThrowsAsync(Actual); - Assert.Equal(ErrorMessages.PhnOrDateOfBirthInvalid, exception.Message); } /// @@ -775,22 +771,6 @@ private static AgentAudit GenerateAgentAudit( }; } - private static CovidAssessmentDetailsResponse GenerateCovidAssessmentDetailsResponse() - { - return new() - { - Has3DoseMoreThan14Days = false, - HasDocumentedChronicCondition = false, - HasKnownPositiveC19Past7Days = false, - CitizenIsConsideredImmunoCompromised = true, - PreviousAssessmentDetailsList = new[] - { - new PreviousAssessmentDetails - { DateTimeOfAssessment = DateTime.Now, FormId = "a81aa087-891a-441e-9f96-09ddae71f9db" }, - }, - }; - } - private static PatientModel GeneratePatientModel( string phn, string hdid, @@ -911,13 +891,6 @@ private static Mock GetImmunizationAdminDelegateMock return mock; } - private static Mock GetImmunizationAdminApiMock(CovidAssessmentDetailsResponse response) - { - Mock mock = new(); - mock.Setup(d => d.GetCovidAssessmentDetailsAsync(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(response); - return mock; - } - private static ISupportService CreateSupportService( Mock? messagingVerificationDelegateMock = null, Mock? patientRepositoryMock = null, @@ -925,7 +898,6 @@ private static ISupportService CreateSupportService( Mock? userProfileDelegateMock = null, Mock? authenticationDelegateMock = null, Mock? immunizationAdminDelegateMock = null, - Mock? immunizationAdminApiMock = null, Mock? auditRepositoryMock = null) { userProfileDelegateMock ??= new Mock(); @@ -934,7 +906,6 @@ private static ISupportService CreateSupportService( resourceDelegateDelegateMock ??= new Mock(); authenticationDelegateMock ??= new Mock(); immunizationAdminDelegateMock ??= new Mock(); - immunizationAdminApiMock ??= new Mock(); auditRepositoryMock ??= new Mock(); return new SupportService( @@ -946,7 +917,6 @@ private static ISupportService CreateSupportService( userProfileDelegateMock.Object, authenticationDelegateMock.Object, immunizationAdminDelegateMock.Object, - immunizationAdminApiMock.Object, auditRepositoryMock.Object, new Mock().Object, new Mock>().Object); diff --git a/Apps/Database/src/Delegates/DbMessagingVerificationDelegate.cs b/Apps/Database/src/Delegates/DbMessagingVerificationDelegate.cs index b3a8baa6bb..ba5b565313 100644 --- a/Apps/Database/src/Delegates/DbMessagingVerificationDelegate.cs +++ b/Apps/Database/src/Delegates/DbMessagingVerificationDelegate.cs @@ -121,11 +121,11 @@ public async Task UpdateAsync(MessagingVerification messageVerification, bool co } /// - public async Task ExpireAsync(MessagingVerification messageVerification, bool markDeleted, CancellationToken ct = default) + public async Task ExpireAsync(MessagingVerification messageVerification, bool markDeleted, bool commit = true, CancellationToken ct = default) { messageVerification.ExpireDate = DateTime.UtcNow; messageVerification.Deleted = markDeleted; - await this.UpdateAsync(messageVerification, ct: ct); + await this.UpdateAsync(messageVerification, commit, ct); this.logger.LogDebug("Finished Expiring messaging verification from DB"); } diff --git a/Apps/Database/src/Delegates/IMessagingVerificationDelegate.cs b/Apps/Database/src/Delegates/IMessagingVerificationDelegate.cs index bb02e92256..f62cceff7b 100644 --- a/Apps/Database/src/Delegates/IMessagingVerificationDelegate.cs +++ b/Apps/Database/src/Delegates/IMessagingVerificationDelegate.cs @@ -67,9 +67,10 @@ public interface IMessagingVerificationDelegate /// /// The message verification to expire. /// Mark the verification as deleted. + /// If commit is set to true the change will be persisted immediately. /// A cancellation token. /// A representing the asynchronous operation. - Task ExpireAsync(MessagingVerification messageVerification, bool markDeleted, CancellationToken ct = default); + Task ExpireAsync(MessagingVerification messageVerification, bool markDeleted, bool commit = true, CancellationToken ct = default); /// /// Retrieves a list of messaging verifications matching the query. diff --git a/Apps/GatewayApi/src/Controllers/UserProfileControllerV2.cs b/Apps/GatewayApi/src/Controllers/UserProfileControllerV2.cs index 58ff59f1ec..7966eece4a 100644 --- a/Apps/GatewayApi/src/Controllers/UserProfileControllerV2.cs +++ b/Apps/GatewayApi/src/Controllers/UserProfileControllerV2.cs @@ -259,16 +259,16 @@ public async Task GetLastTermsOfService(CancellationToken c } /// - /// Validates an email address. + /// Verifies an email address. /// /// The user hdid. /// The email verification key. /// to manage the async request. - /// A boolean value indicating whether the validation was successful. - /// Returns a boolean value indicating whether the validation was successful. + /// A boolean value indicating whether the verification was successful. + /// Returns a boolean value indicating whether the verification was successful. /// The client must authenticate itself to get the requested response. /// The verification key was not found. - /// The validation has already been performed. + /// The verification has already been performed. /// Internal server error. [HttpGet] [Route("{hdid}/email/validate/{verificationKey}")] @@ -280,25 +280,25 @@ public async Task GetLastTermsOfService(CancellationToken c [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status409Conflict)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - public async Task ValidateEmail(string hdid, Guid verificationKey, CancellationToken ct) + public async Task VerifyEmailAddress(string hdid, Guid verificationKey, CancellationToken ct) { - return await this.userEmailService.ValidateEmailAsync(hdid, verificationKey, ct); + return await this.userEmailService.VerifyEmailAddressAsync(hdid, verificationKey, ct); } /// - /// Validates an SMS number. + /// Verifies an SMS number. /// /// The user hdid. - /// The SMS validation code. + /// The SMS verification code. /// to manage the async request. - /// A boolean value indicating whether the validation was successful. - /// Returns a boolean value indicating whether the validation was successful. + /// A boolean value indicating whether the verification was successful. + /// Returns a boolean value indicating whether the verification was successful. /// The client must authenticate itself to get the requested response. /// User profile was not found. /// Internal server error. /// Upstream error. [HttpGet] - [Route("{hdid}/sms/validate/{validationCode}")] + [Route("{hdid}/sms/validate/{verificationCode}")] [Authorize(Policy = UserProfilePolicy.Write)] [Produces("application/json")] [ProducesResponseType(StatusCodes.Status200OK)] @@ -307,16 +307,16 @@ public async Task ValidateEmail(string hdid, Guid verificationKey, Cancell [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status502BadGateway)] - public async Task ValidateSms(string hdid, string validationCode, CancellationToken ct) + public async Task VerifySmsNumber(string hdid, string verificationCode, CancellationToken ct) { - return await this.userSmsService.ValidateSmsAsync(hdid, validationCode, ct); + return await this.userSmsService.VerifySmsNumberAsync(hdid, verificationCode, ct); } /// /// Updates a user's email address. /// /// The user HDID. - /// The new email. + /// The new email address. /// to manage the async request. /// An empty result. /// The user's email address has been successfully updated. @@ -338,9 +338,9 @@ public async Task ValidateSms(string hdid, string validationCode, Cancella [ProducesResponseType(StatusCodes.Status403Forbidden)] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - public async Task UpdateUserEmail(string hdid, [FromBody] string emailAddress = "", CancellationToken ct = default) + public async Task UpdateUserEmailAddress(string hdid, [FromBody] string emailAddress = "", CancellationToken ct = default) { - await this.userEmailService.UpdateUserEmailAsync(hdid, emailAddress, ct); + await this.userEmailService.UpdateEmailAddressAsync(hdid, emailAddress, ct); return this.Ok(); } @@ -372,7 +372,7 @@ public async Task UpdateUserEmail(string hdid, [FromBody] string [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task UpdateUserSmsNumberAsync(string hdid, [FromBody] string smsNumber, CancellationToken ct) { - await this.userSmsService.UpdateUserSmsAsync(hdid, smsNumber, ct); + await this.userSmsService.UpdateSmsNumberAsync(hdid, smsNumber, ct); return this.Ok(); } diff --git a/Apps/GatewayApi/src/Services/IUserEmailServiceV2.cs b/Apps/GatewayApi/src/Services/IUserEmailServiceV2.cs index 76679808ec..7e8bc8a6c2 100644 --- a/Apps/GatewayApi/src/Services/IUserEmailServiceV2.cs +++ b/Apps/GatewayApi/src/Services/IUserEmailServiceV2.cs @@ -18,6 +18,7 @@ namespace HealthGateway.GatewayApi.Services using System; using System.Threading; using System.Threading.Tasks; + using HealthGateway.Database.Models; /// /// The user email service. @@ -25,32 +26,35 @@ namespace HealthGateway.GatewayApi.Services public interface IUserEmailServiceV2 { /// - /// Validates an email address using the given invite key. + /// Verifies an email address using the given invite key. /// /// The requested user hdid. /// The email invite key. /// A cancellation token. - /// Returns a boolean value indicating whether the validation was successful. - Task ValidateEmailAsync(string hdid, Guid inviteKey, CancellationToken ct = default); + /// A boolean value indicating whether the verification was successful. + Task VerifyEmailAddressAsync(string hdid, Guid inviteKey, CancellationToken ct = default); /// - /// Initializes user's email address. + /// Updates user's email address. /// /// The user hdid. /// Email address to be set for the user. - /// Indicates whether the email address is verified. - /// If set to true the changes to database are persisted immediately. /// A cancellation token. - /// returns true if the email was successfully created. - Task CreateUserEmailAsync(string hdid, string emailAddress, bool isVerified, bool commit = true, CancellationToken ct = default); + /// A representing the asynchronous operation. + Task UpdateEmailAddressAsync(string hdid, string emailAddress, CancellationToken ct = default); /// - /// Updates the user email. + /// Generates a messaging verification and email template using the provided HDID, email address, and invite key. /// /// The user hdid. - /// Email address to be set for the user. + /// Email address to verify. + /// The email invite key. + /// + /// If the address is already verified, the verification will be marked as already validated + /// and the generated email will be marked as already sent. + /// /// A cancellation token. - /// A representing the asynchronous operation. - Task UpdateUserEmailAsync(string hdid, string emailAddress, CancellationToken ct = default); + /// The generated messaging verification. + Task GenerateMessagingVerificationAsync(string hdid, string emailAddress, Guid inviteKey, bool isVerified, CancellationToken ct = default); } } diff --git a/Apps/GatewayApi/src/Services/IUserSmsServiceV2.cs b/Apps/GatewayApi/src/Services/IUserSmsServiceV2.cs index 23ba278094..dee685116c 100644 --- a/Apps/GatewayApi/src/Services/IUserSmsServiceV2.cs +++ b/Apps/GatewayApi/src/Services/IUserSmsServiceV2.cs @@ -25,30 +25,30 @@ namespace HealthGateway.GatewayApi.Services public interface IUserSmsServiceV2 { /// - /// Validates the SMS number that matches the given validation code. + /// Verifies an SMS number for a user with the given verification code. /// - /// The requested user hdid. - /// The SMS validation code. + /// The user hdid. + /// The SMS verification code. /// A cancellation token. - /// Returns a request result containing true if the SMS verification was found and validated. - Task ValidateSmsAsync(string hdid, string validationCode, CancellationToken ct = default); + /// A value indicating whether the verification was successful. + Task VerifySmsNumberAsync(string hdid, string verificationCode, CancellationToken ct = default); /// - /// Create the user SMS number. + /// Updates the user SMS number. /// /// The user hdid. /// SMS number to be set for the user. /// A cancellation token. - /// returns true if the sms number was successfully created. - Task CreateUserSmsAsync(string hdid, string sms, CancellationToken ct = default); + /// A representing the asynchronous operation. + Task UpdateSmsNumberAsync(string hdid, string sms, CancellationToken ct = default); /// - /// Updates the user SMS number. + /// Generates a messaging verification using the provided HDID and SMS number. /// /// The user hdid. - /// SMS number to be set for the user. - /// A cancellation token. - /// A representing the asynchronous operation. - Task UpdateUserSmsAsync(string hdid, string sms, CancellationToken ct = default); + /// SMS number to verify. + /// If set to true, the provided SMS number will be sanitized before being used. + /// The generated messaging verification. + MessagingVerification GenerateMessagingVerification(string hdid, string sms, bool sanitize = true); } } diff --git a/Apps/GatewayApi/src/Services/UserEmailService.cs b/Apps/GatewayApi/src/Services/UserEmailService.cs index 607aed3503..167e050942 100644 --- a/Apps/GatewayApi/src/Services/UserEmailService.cs +++ b/Apps/GatewayApi/src/Services/UserEmailService.cs @@ -141,7 +141,7 @@ public async Task> ValidateEmailAsync(string hdid, Guid invi if (matchingVerification.Validated) { - this.logger.LogDebug("Email already validated"); + this.logger.LogDebug("Email already verified"); // Verification already verified return new RequestResult @@ -190,7 +190,7 @@ public async Task> ValidateEmailAsync(string hdid, Guid invi public async Task CreateUserEmailAsync(string hdid, string emailAddress, bool isVerified, bool commit = true, CancellationToken ct = default) { this.logger.LogTrace("Creating user email..."); - await this.AddVerificationEmailAsync(hdid, emailAddress, Guid.NewGuid(), isVerified, commit, ct); + await this.AddVerificationEmailAsync(hdid, emailAddress, Guid.NewGuid(), isVerified, ct); this.logger.LogDebug("Finished creating user email"); return true; } @@ -225,7 +225,7 @@ public async Task UpdateUserEmailAsync(string hdid, string emailAddress, C { this.logger.LogInformation("Expiring old email validation for user {Hdid}", hdid); bool isDeleted = string.IsNullOrEmpty(emailAddress); - await this.messageVerificationDelegate.ExpireAsync(lastEmailVerification, isDeleted, ct); + await this.messageVerificationDelegate.ExpireAsync(lastEmailVerification, isDeleted, ct: ct); if (!isDeleted) { this.logger.LogInformation("Sending new email verification for user {Hdid}", hdid); @@ -252,7 +252,7 @@ public async Task UpdateUserEmailAsync(string hdid, string emailAddress, C } [ExcludeFromCodeCoverage] - private async Task AddVerificationEmailAsync(string hdid, string toEmail, Guid inviteKey, bool isVerified = false, bool commit = true, CancellationToken ct = default) + private async Task AddVerificationEmailAsync(string hdid, string toEmail, Guid inviteKey, bool isVerified = false, CancellationToken ct = default) { float verificationExpiryHours = (float)this.emailVerificationExpirySeconds / 3600; @@ -273,13 +273,12 @@ private async Task AddVerificationEmailAsync(string hdid, string toEmail, Guid i ExpireDate = DateTime.UtcNow.AddSeconds(this.emailVerificationExpirySeconds), Email = this.emailQueueService.ProcessTemplate(toEmail, emailTemplate, keyValues), EmailAddress = toEmail, - Validated = isVerified, }; if (isVerified) { messageVerification.Email.EmailStatusCode = EmailStatus.Processed; - await this.messageVerificationDelegate.InsertAsync(messageVerification, commit, ct); + await this.messageVerificationDelegate.InsertAsync(messageVerification, ct: ct); await this.ValidateEmailAsync(hdid, inviteKey, ct); } else diff --git a/Apps/GatewayApi/src/Services/UserEmailServiceV2.cs b/Apps/GatewayApi/src/Services/UserEmailServiceV2.cs index 2efcebe79b..ac2597c042 100644 --- a/Apps/GatewayApi/src/Services/UserEmailServiceV2.cs +++ b/Apps/GatewayApi/src/Services/UserEmailServiceV2.cs @@ -17,7 +17,6 @@ namespace HealthGateway.GatewayApi.Services { using System; using System.Collections.Generic; - using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Threading; using System.Threading.Tasks; @@ -42,17 +41,18 @@ namespace HealthGateway.GatewayApi.Services public class UserEmailServiceV2 : IUserEmailServiceV2 { private const int MaxVerificationAttempts = 5; + private const string EmailConfigExpirySecondsKey = "EmailVerificationExpirySeconds"; + private const string WebClientConfigSection = "WebClient"; - private readonly string emailConfigExpirySecondsKey = "EmailVerificationExpirySeconds"; private readonly IEmailQueueService emailQueueService; - private readonly int emailVerificationExpirySeconds; private readonly ILogger logger; private readonly IMessagingVerificationDelegate messageVerificationDelegate; private readonly INotificationSettingsService notificationSettingsService; private readonly IUserProfileDelegate profileDelegate; - private readonly string webClientConfigSection = "WebClient"; - private readonly bool notificationsChangeFeedEnabled; private readonly IMessageSender messageSender; + + private readonly int emailVerificationExpirySeconds; + private readonly bool notificationsChangeFeedEnabled; private readonly EmailTemplateConfig emailTemplateConfig; /// @@ -79,41 +79,29 @@ public UserEmailServiceV2( this.profileDelegate = profileDelegate; this.emailQueueService = emailQueueService; this.notificationSettingsService = notificationSettingsService; - this.emailVerificationExpirySeconds = configuration.GetSection(this.webClientConfigSection).GetValue(this.emailConfigExpirySecondsKey, 5); - this.messageSender = messageSender; - ChangeFeedOptions? changeFeedConfiguration = configuration.GetSection(ChangeFeedOptions.ChangeFeed) - .Get(); - this.notificationsChangeFeedEnabled = changeFeedConfiguration?.Notifications.Enabled ?? false; + + this.emailVerificationExpirySeconds = configuration.GetSection(WebClientConfigSection).GetValue(EmailConfigExpirySecondsKey, 5); + this.notificationsChangeFeedEnabled = configuration.GetSection(ChangeFeedOptions.ChangeFeed).Get()?.Notifications.Enabled ?? false; this.emailTemplateConfig = configuration.GetSection(EmailTemplateConfig.ConfigurationSectionKey).Get() ?? new(); } /// - public async Task ValidateEmailAsync(string hdid, Guid inviteKey, CancellationToken ct = default) + public async Task VerifyEmailAddressAsync(string hdid, Guid inviteKey, CancellationToken ct = default) { - this.logger.LogTrace("Validating email... {InviteKey}", inviteKey); + this.logger.LogTrace("Verifying email address... {InviteKey}", inviteKey); MessagingVerification? matchingVerification = await this.messageVerificationDelegate.GetLastByInviteKeyAsync(inviteKey, ct); UserProfile userProfile = await this.profileDelegate.GetUserProfileAsync(hdid, ct: ct) ?? throw new NotFoundException(ErrorMessages.UserProfileNotFound); - if (matchingVerification == null || - matchingVerification.UserProfileId != hdid || - matchingVerification.Deleted) + if (matchingVerification == null || matchingVerification.UserProfileId != hdid || matchingVerification.Deleted) { this.logger.LogDebug("Invalid email verification"); - - MessagingVerification? lastEmailVerification = await this.messageVerificationDelegate.GetLastForUserAsync(hdid, MessagingVerificationType.Email, ct); - if (lastEmailVerification is { Validated: false }) - { - lastEmailVerification.VerificationAttempts++; - await this.messageVerificationDelegate.UpdateAsync(lastEmailVerification, ct: ct); - } - + await this.IncrementEmailVerificationAttempts(hdid, ct); return false; } - if (matchingVerification.VerificationAttempts >= MaxVerificationAttempts || - matchingVerification.ExpireDate < DateTime.UtcNow) + if (matchingVerification.VerificationAttempts >= MaxVerificationAttempts || matchingVerification.ExpireDate < DateTime.UtcNow) { this.logger.LogDebug("Email verification expired"); return false; @@ -121,89 +109,73 @@ public async Task ValidateEmailAsync(string hdid, Guid inviteKey, Cancella if (matchingVerification.Validated) { - this.logger.LogDebug("Email already validated"); - throw new AlreadyExistsException("Email already validated"); + this.logger.LogDebug("Email already verified"); + throw new AlreadyExistsException("Email already verified"); } - matchingVerification.Validated = true; - await this.messageVerificationDelegate.UpdateAsync(matchingVerification, false, ct); + await this.SetAddressValidated(userProfile, matchingVerification, true, ct); + await this.NotifyVerificationSuccessful(hdid, matchingVerification.Email!.To, ct); + await this.QueueNotificationSettingsRequest(userProfile, ct); - userProfile.Email = matchingVerification.Email!.To; // Gets the user email from the email sent. - DbResult dbResult = await this.profileDelegate.UpdateAsync(userProfile, true, ct); - if (dbResult.Status != DbStatusCode.Updated) - { - throw new DatabaseException(dbResult.Message); - } - - if (this.notificationsChangeFeedEnabled) - { - MessageEnvelope[] events = [new(new NotificationChannelVerifiedEvent(hdid, NotificationChannel.Email, matchingVerification.Email!.To), hdid)]; - await this.messageSender.SendAsync(events, ct); - } - - // Update the notification settings - await this.notificationSettingsService.QueueNotificationSettingsAsync(new NotificationSettingsRequest(userProfile, userProfile.Email, userProfile.SmsNumber), ct); - - this.logger.LogDebug("Email validated"); + this.logger.LogDebug("Email verified"); return true; } /// - [ExcludeFromCodeCoverage] - public async Task CreateUserEmailAsync(string hdid, string emailAddress, bool isVerified, bool commit = true, CancellationToken ct = default) - { - this.logger.LogTrace("Creating user email..."); - await this.AddVerificationEmailAsync(hdid, emailAddress, Guid.NewGuid(), isVerified, commit, ct); - this.logger.LogDebug("Finished creating user email"); - return true; - } - - /// - [ExcludeFromCodeCoverage] - public async Task UpdateUserEmailAsync(string hdid, string emailAddress, CancellationToken ct = default) + public async Task UpdateEmailAddressAsync(string hdid, string emailAddress, CancellationToken ct = default) { this.logger.LogTrace("Updating user email..."); + bool isEmpty = string.IsNullOrEmpty(emailAddress); + Guid inviteKey = Guid.NewGuid(); await new OptionalEmailAddressValidator().ValidateAndThrowAsync(emailAddress, ct); UserProfile userProfile = await this.profileDelegate.GetUserProfileAsync(hdid, true, ct) ?? throw new NotFoundException(ErrorMessages.UserProfileNotFound); - this.logger.LogInformation("Removing email from user {Hdid}", hdid); - userProfile.Email = null; - userProfile.BetaFeatureCodes = []; - DbResult dbResult = await this.profileDelegate.UpdateAsync(userProfile, ct: ct); - if (dbResult.Status != DbStatusCode.Updated) - { - throw new DatabaseException(dbResult.Message); - } - - // Update the notification settings - await this.notificationSettingsService.QueueNotificationSettingsAsync(new NotificationSettingsRequest(userProfile, userProfile.Email, userProfile.SmsNumber), ct); - - bool isEmpty = string.IsNullOrEmpty(emailAddress); - Guid inviteKey = Guid.NewGuid(); - + // expire previous email verification in DB without committing changes MessagingVerification? lastEmailVerification = await this.messageVerificationDelegate.GetLastForUserAsync(hdid, MessagingVerificationType.Email, ct); if (lastEmailVerification != null) { this.logger.LogInformation("Expiring old email validation for user {Hdid}", hdid); - await this.messageVerificationDelegate.ExpireAsync(lastEmailVerification, isEmpty, ct); - if (emailAddress.Equals(lastEmailVerification.Email?.To, StringComparison.OrdinalIgnoreCase)) + await this.messageVerificationDelegate.ExpireAsync(lastEmailVerification, isEmpty, false, ct); + if (string.Equals(emailAddress, lastEmailVerification.Email?.To, StringComparison.OrdinalIgnoreCase)) { + // reuse same invite key if the last verification was for the same email address inviteKey = lastEmailVerification.InviteKey!.Value; } } + // add new messaging verification to DB without committing changes + MessagingVerification? messagingVerification = null; if (!isEmpty) + { + messagingVerification = await this.GenerateMessagingVerificationAsync(hdid, emailAddress, inviteKey, false, ct); + await this.messageVerificationDelegate.InsertAsync(messagingVerification, false, ct); + } + + this.logger.LogInformation("Removing email from user {Hdid}", hdid); + userProfile.Email = null; + userProfile.BetaFeatureCodes = []; + + // update user profile in DB and commit changes + DbResult dbResult = await this.profileDelegate.UpdateAsync(userProfile, true, ct); + if (dbResult.Status != DbStatusCode.Updated) + { + throw new DatabaseException(dbResult.Message); + } + + if (messagingVerification != null) { this.logger.LogInformation("Sending new email verification for user {Hdid}", hdid); - await this.AddVerificationEmailAsync(hdid, emailAddress, inviteKey, ct: ct); + await this.emailQueueService.QueueNewEmailAsync(messagingVerification.Email, true, ct); } + await this.QueueNotificationSettingsRequest(userProfile, ct); + this.logger.LogDebug("Finished updating user email"); } - [ExcludeFromCodeCoverage] - private async Task AddVerificationEmailAsync(string hdid, string toEmail, Guid inviteKey, bool isVerified = false, bool commit = true, CancellationToken ct = default) + /// + public async Task GenerateMessagingVerificationAsync(string hdid, string emailAddress, Guid inviteKey, bool isVerified, CancellationToken ct = default) { float verificationExpiryHours = (float)this.emailVerificationExpirySeconds / 3600; @@ -217,27 +189,62 @@ private async Task AddVerificationEmailAsync(string hdid, string toEmail, Guid i EmailTemplate emailTemplate = await this.emailQueueService.GetEmailTemplateAsync(EmailTemplateName.RegistrationTemplate, ct) ?? throw new DatabaseException(ErrorMessages.EmailTemplateNotFound); - MessagingVerification messageVerification = new() + MessagingVerification messagingVerification = new() { InviteKey = inviteKey, UserProfileId = hdid, ExpireDate = DateTime.UtcNow.AddSeconds(this.emailVerificationExpirySeconds), - Email = this.emailQueueService.ProcessTemplate(toEmail, emailTemplate, keyValues), - EmailAddress = toEmail, + Email = this.emailQueueService.ProcessTemplate(emailAddress, emailTemplate, keyValues), + EmailAddress = emailAddress, Validated = isVerified, }; if (isVerified) { - messageVerification.Email.EmailStatusCode = EmailStatus.Processed; - await this.messageVerificationDelegate.InsertAsync(messageVerification, commit, ct); - await this.ValidateEmailAsync(hdid, inviteKey, ct); + // for verified email addresses, mark verification email as already sent + messagingVerification.Email.EmailStatusCode = EmailStatus.Processed; + } + + return messagingVerification; + } + + private async Task IncrementEmailVerificationAttempts(string hdid, CancellationToken ct) + { + MessagingVerification? latestEmailVerification = await this.messageVerificationDelegate.GetLastForUserAsync(hdid, MessagingVerificationType.Email, ct); + if (latestEmailVerification is { Validated: false }) + { + latestEmailVerification.VerificationAttempts++; + await this.messageVerificationDelegate.UpdateAsync(latestEmailVerification, true, ct); } - else + } + + private async Task SetAddressValidated(UserProfile userProfile, MessagingVerification matchingVerification, bool commit = true, CancellationToken ct = default) + { + // update Validated value in MessagingVerification + matchingVerification.Validated = true; + await this.messageVerificationDelegate.UpdateAsync(matchingVerification, false, ct); + + // add email address to UserProfile + userProfile.Email = matchingVerification.Email!.To; + DbResult dbResult = await this.profileDelegate.UpdateAsync(userProfile, commit, ct); + if (commit && dbResult.Status != DbStatusCode.Updated) { - await this.messageVerificationDelegate.InsertAsync(messageVerification, ct: ct); - await this.emailQueueService.QueueNewEmailAsync(messageVerification.Email, ct: ct); + throw new DatabaseException(dbResult.Message); } } + + private async Task NotifyVerificationSuccessful(string hdid, string emailAddress, CancellationToken ct) + { + if (this.notificationsChangeFeedEnabled) + { + MessageEnvelope[] events = [new(new NotificationChannelVerifiedEvent(hdid, NotificationChannel.Email, emailAddress), hdid)]; + await this.messageSender.SendAsync(events, ct); + } + } + + private async Task QueueNotificationSettingsRequest(UserProfile userProfile, CancellationToken ct) + { + await this.notificationSettingsService.QueueNotificationSettingsAsync(new NotificationSettingsRequest(userProfile, userProfile.Email, userProfile.SmsNumber), ct); + } } } diff --git a/Apps/GatewayApi/src/Services/UserProfileService.cs b/Apps/GatewayApi/src/Services/UserProfileService.cs index 1815f6c1b1..0f439b52d3 100644 --- a/Apps/GatewayApi/src/Services/UserProfileService.cs +++ b/Apps/GatewayApi/src/Services/UserProfileService.cs @@ -259,15 +259,15 @@ await this.messageSender.SendAsync( UserProfile dbModel = insertResult.Payload; string? requestedSmsNumber = createProfileRequest.Profile.SmsNumber; string? requestedEmail = createProfileRequest.Profile.Email; + bool isEmailVerified = !string.IsNullOrWhiteSpace(requestedEmail) && requestedEmail.Equals(jwtEmailAddress, StringComparison.OrdinalIgnoreCase); UserProfileModel userProfileModel = await this.BuildUserProfileModelAsync(dbModel, ct: ct); - NotificationSettingsRequest notificationRequest = new(dbModel, requestedEmail, requestedSmsNumber); + NotificationSettingsRequest notificationRequest = new(dbModel, isEmailVerified ? requestedEmail : string.Empty, requestedSmsNumber); // Add email verification if (!string.IsNullOrWhiteSpace(requestedEmail)) { - bool isEmailVerified = requestedEmail.Equals(jwtEmailAddress, StringComparison.OrdinalIgnoreCase); await this.userEmailService.CreateUserEmailAsync(hdid, requestedEmail, isEmailVerified, !this.notificationsChangeFeedEnabled, ct); userProfileModel.Email = requestedEmail; userProfileModel.IsEmailVerified = isEmailVerified; diff --git a/Apps/GatewayApi/src/Services/UserProfileServiceV2.cs b/Apps/GatewayApi/src/Services/UserProfileServiceV2.cs index 3a7946b619..ec4b9c6a44 100644 --- a/Apps/GatewayApi/src/Services/UserProfileServiceV2.cs +++ b/Apps/GatewayApi/src/Services/UserProfileServiceV2.cs @@ -164,23 +164,16 @@ public async Task GetUserProfileAsync(string hdid, DateTime jw } IList userProfileHistoryList = await this.userProfileDelegate.GetUserProfileHistoryListAsync(hdid, this.userProfileHistoryRecordLimit, ct); - UserProfileModel userProfileModel = await this.BuildUserProfileModelAsync(userProfile, userProfileHistoryList, ct); - if (!userProfileModel.IsEmailVerified) - { - this.logger.LogTrace("Retrieving last email invite... {Hdid}", hdid); - MessagingVerification? emailInvite = await this.messageVerificationDelegate.GetLastForUserAsync(hdid, MessagingVerificationType.Email, ct); - this.logger.LogDebug("Finished retrieving email invite... {Hdid}", hdid); - userProfileModel.Email = emailInvite?.Email?.To; - } + string? emailAddress = !string.IsNullOrEmpty(userProfile.Email) + ? userProfile.Email + : (await this.messageVerificationDelegate.GetLastForUserAsync(hdid, MessagingVerificationType.Email, ct))?.Email?.To; - if (!userProfileModel.IsSmsNumberVerified) - { - this.logger.LogTrace("Retrieving last sms invite... {Hdid}", hdid); - MessagingVerification? smsInvite = await this.messageVerificationDelegate.GetLastForUserAsync(hdid, MessagingVerificationType.Sms, ct); - this.logger.LogDebug("Finished retrieving sms invite... {Hdid}", hdid); - userProfileModel.SmsNumber = smsInvite?.SmsNumber; - } + string? smsNumber = !string.IsNullOrEmpty(userProfile.SmsNumber) + ? userProfile.SmsNumber + : (await this.messageVerificationDelegate.GetLastForUserAsync(hdid, MessagingVerificationType.Sms, ct))?.SmsNumber; + + UserProfileModel userProfileModel = await this.BuildUserProfileModelAsync(userProfile, userProfileHistoryList, emailAddress, smsNumber, ct); return userProfileModel; } @@ -188,23 +181,31 @@ public async Task GetUserProfileAsync(string hdid, DateTime jw /// public async Task CreateUserProfileAsync(CreateUserRequest createProfileRequest, DateTime jwtAuthTime, string? jwtEmailAddress, CancellationToken ct = default) { + this.logger.LogTrace("Creating user profile... {Hdid}", createProfileRequest.Profile.HdId); string hdid = createProfileRequest.Profile.HdId; - this.logger.LogTrace("Creating user profile... {Hdid}", hdid); - - await new SmsNumberValidator().ValidateAndThrowAsync(createProfileRequest.Profile.SmsNumber, ct); + string? requestedEmail = createProfileRequest.Profile.Email; + string? requestedSmsNumber = createProfileRequest.Profile.SmsNumber; + bool isEmailVerified = !string.IsNullOrWhiteSpace(requestedEmail) && string.Equals(requestedEmail, jwtEmailAddress, StringComparison.OrdinalIgnoreCase); + // validate provided SMS number and patient age + await new SmsNumberValidator().ValidateAndThrowAsync(requestedSmsNumber, ct); PatientDetails patient = await this.patientDetailsService.GetPatientAsync(hdid, ct: ct); if (this.minPatientAge > 0) { await new AgeRangeValidator(this.minPatientAge).ValidateAndThrowAsync(patient.Birthdate.ToDateTime(TimeOnly.MinValue), ct); } + // add SMS and email messaging verifications to DB without committing changes + MessagingVerification? smsVerification = await this.AddSmsVerification(hdid, requestedSmsNumber, ct); + MessagingVerification? emailVerification = await this.AddEmailVerification(hdid, requestedEmail, isEmailVerified, ct); + + // initialize user profile UserProfile profile = new() { HdId = hdid, IdentityManagementId = null, TermsOfServiceId = createProfileRequest.Profile.TermsOfServiceId, - Email = string.Empty, + Email = isEmailVerified ? requestedEmail : string.Empty, SmsNumber = null, CreatedBy = hdid, UpdatedBy = hdid, @@ -214,41 +215,26 @@ public async Task CreateUserProfileAsync(CreateUserRequest cre LastLoginClientCode = this.authenticationDelegate.FetchAuthenticatedUserClientType(), }; - DbResult dbResult = await this.userProfileDelegate.InsertUserProfileAsync(profile, ct: ct); + // add user profile to DB and commit changes + DbResult dbResult = await this.userProfileDelegate.InsertUserProfileAsync(profile, true, ct); if (dbResult.Status != DbStatusCode.Created) { this.logger.LogError("Error creating user profile... {Hdid}", hdid); throw new DatabaseException(dbResult.Message); } - UserProfileModel userProfileModel = await this.BuildUserProfileModelAsync(dbResult.Payload, [], ct); - - string? requestedEmail = createProfileRequest.Profile.Email; - bool isEmailVerified = !string.IsNullOrWhiteSpace(requestedEmail) && requestedEmail.Equals(jwtEmailAddress, StringComparison.OrdinalIgnoreCase); - if (!string.IsNullOrWhiteSpace(requestedEmail)) - { - userProfileModel.Email = requestedEmail; - userProfileModel.IsEmailVerified = isEmailVerified; - - // Add email verification - await this.userEmailService.CreateUserEmailAsync(hdid, requestedEmail, isEmailVerified, !this.notificationsChangeFeedEnabled, ct); - } - - string? requestedSmsNumber = createProfileRequest.Profile.SmsNumber; - NotificationSettingsRequest notificationRequest = new(dbResult.Payload, requestedEmail, requestedSmsNumber); - if (!string.IsNullOrWhiteSpace(requestedSmsNumber)) + // queue verification email + if (emailVerification != null && !isEmailVerified) { - userProfileModel.SmsNumber = requestedSmsNumber; - - // Add SMS verification - MessagingVerification smsVerification = await this.userSmsService.CreateUserSmsAsync(hdid, requestedSmsNumber, ct); - notificationRequest.SmsVerificationCode = smsVerification.SmsValidationCode; + await this.emailQueueService.QueueNewEmailAsync(emailVerification.Email, true, ct); } - await this.NotifyAccountCreated(hdid, notificationRequest, isEmailVerified, ct); - - this.logger.LogDebug("Finished creating user profile... {Hdid}", dbResult.Payload.HdId); + // notify partners about new account + await this.NotifyAccountCreated(profile, requestedEmail, requestedSmsNumber, isEmailVerified, smsVerification?.SmsValidationCode, ct); + // build and return model + UserProfileModel userProfileModel = await this.BuildUserProfileModelAsync(dbResult.Payload, [], requestedEmail, requestedSmsNumber, ct); + this.logger.LogTrace("Finished creating user profile... {Hdid}", dbResult.Payload.HdId); return userProfileModel; } @@ -332,10 +318,17 @@ public async Task IsPhoneNumberValidAsync(string phoneNumber, Cancellation return (await new SmsNumberValidator().ValidateAsync(phoneNumber, ct)).IsValid; } - private async Task BuildUserProfileModelAsync(UserProfile userProfile, ICollection historyCollection, CancellationToken ct = default) + private async Task BuildUserProfileModelAsync( + UserProfile userProfile, + ICollection historyCollection, + string emailAddress, + string smsNumber, + CancellationToken ct = default) { Guid? termsOfServiceId = await this.legalAgreementService.GetActiveLegalAgreementId(LegalAgreementType.TermsOfService, ct); UserProfileModel userProfileModel = this.mappingService.MapToUserProfileModel(userProfile, termsOfServiceId); + userProfileModel.Email = emailAddress; + userProfileModel.SmsNumber = smsNumber; DateTime? latestTourChangeDateTime = await this.applicationSettingsService.GetLatestTourChangeDateTimeAsync(ct); userProfileModel.HasTourUpdated = historyCollection.Count != 0 && @@ -349,19 +342,47 @@ private async Task BuildUserProfileModelAsync(UserProfile user return userProfileModel; } - private async Task NotifyAccountCreated(string hdid, NotificationSettingsRequest notificationRequest, bool isEmailVerified, CancellationToken ct) + private async Task AddSmsVerification(string hdid, string? requestedSmsNumber, CancellationToken ct) + { + MessagingVerification? smsVerification = null; + if (!string.IsNullOrWhiteSpace(requestedSmsNumber)) + { + smsVerification = this.userSmsService.GenerateMessagingVerification(hdid, requestedSmsNumber); + await this.messageVerificationDelegate.InsertAsync(smsVerification, false, ct); + } + + return smsVerification; + } + + private async Task AddEmailVerification(string hdid, string? requestedEmail, bool isEmailVerified, CancellationToken ct) + { + MessagingVerification? emailVerification = null; + if (!string.IsNullOrWhiteSpace(requestedEmail)) + { + emailVerification = await this.userEmailService.GenerateMessagingVerificationAsync(hdid, requestedEmail, Guid.NewGuid(), isEmailVerified, ct); + await this.messageVerificationDelegate.InsertAsync(emailVerification, false, ct); + } + + return emailVerification; + } + + private async Task NotifyAccountCreated(UserProfile profile, string requestedEmail, string requestedSmsNumber, bool isEmailVerified, string smsVerificationCode, CancellationToken ct) { + // notify account was created if (this.accountsChangeFeedEnabled) { - await this.messageSender.SendAsync([new MessageEnvelope(new AccountCreatedEvent(hdid, DateTime.UtcNow), hdid)], ct); + await this.messageSender.SendAsync([new MessageEnvelope(new AccountCreatedEvent(profile.HdId, DateTime.UtcNow), profile.HdId)], ct); } + // notify email verification was successful if (isEmailVerified && this.notificationsChangeFeedEnabled) { - await this.messageSender.SendAsync([new(new NotificationChannelVerifiedEvent(hdid, NotificationChannel.Email, notificationRequest.EmailAddress), hdid)], ct); + await this.messageSender.SendAsync([new(new NotificationChannelVerifiedEvent(profile.HdId, NotificationChannel.Email, requestedEmail), profile.HdId)], ct); } - await this.notificationSettingsService.QueueNotificationSettingsAsync(notificationRequest, ct); + // queue notification settings job + NotificationSettingsRequest notificationSettingsRequest = new(profile, profile.Email, requestedSmsNumber) { SmsVerificationCode = smsVerificationCode }; + await this.notificationSettingsService.QueueNotificationSettingsAsync(notificationSettingsRequest, ct); } private async Task SendEmailAsync(string? emailAddress, string emailTemplateName, CancellationToken ct) diff --git a/Apps/GatewayApi/src/Services/UserSmsService.cs b/Apps/GatewayApi/src/Services/UserSmsService.cs index 11cac0f4c6..6b15032b33 100644 --- a/Apps/GatewayApi/src/Services/UserSmsService.cs +++ b/Apps/GatewayApi/src/Services/UserSmsService.cs @@ -159,7 +159,7 @@ public async Task UpdateUserSmsAsync(string hdid, string sms, Cancellation if (lastSmsVerification != null) { this.logger.LogInformation("Expiring old sms validation for user {Hdid}", hdid); - await this.messageVerificationDelegate.ExpireAsync(lastSmsVerification, isDeleted, ct); + await this.messageVerificationDelegate.ExpireAsync(lastSmsVerification, isDeleted, ct: ct); } NotificationSettingsRequest notificationRequest = new(userProfile, userProfile.Email, sanitizedSms); diff --git a/Apps/GatewayApi/src/Services/UserSmsServiceV2.cs b/Apps/GatewayApi/src/Services/UserSmsServiceV2.cs index 3cd6518736..46953e0e09 100644 --- a/Apps/GatewayApi/src/Services/UserSmsServiceV2.cs +++ b/Apps/GatewayApi/src/Services/UserSmsServiceV2.cs @@ -79,15 +79,15 @@ public UserSmsServiceV2( } /// - public async Task ValidateSmsAsync(string hdid, string validationCode, CancellationToken ct = default) + public async Task VerifySmsNumberAsync(string hdid, string verificationCode, CancellationToken ct = default) { - this.logger.LogTrace("Validating sms... {ValidationCode}", validationCode); + this.logger.LogTrace("Verifying sms... {ValidationCode}", verificationCode); UserProfile userProfile = await this.profileDelegate.GetUserProfileAsync(hdid, ct: ct) ?? throw new NotFoundException(ErrorMessages.UserProfileNotFound); MessagingVerification? smsVerification = await this.messageVerificationDelegate.GetLastForUserAsync(hdid, MessagingVerificationType.Sms, ct); if (smsVerification is not { Validated: false, Deleted: false, VerificationAttempts: < MaxVerificationAttempts } || - smsVerification.SmsValidationCode != validationCode || + smsVerification.SmsValidationCode != verificationCode || smsVerification.ExpireDate < DateTime.UtcNow) { if (smsVerification is { Validated: false }) @@ -96,7 +96,7 @@ public async Task ValidateSmsAsync(string hdid, string validationCode, Can await this.messageVerificationDelegate.UpdateAsync(smsVerification, ct: ct); } - this.logger.LogDebug("Finished validating sms"); + this.logger.LogDebug("Finished verifying sms"); return false; } @@ -119,22 +119,33 @@ public async Task ValidateSmsAsync(string hdid, string validationCode, Can // Update the notification settings await this.notificationSettingsService.QueueNotificationSettingsAsync(new NotificationSettingsRequest(userProfile, userProfile.Email, userProfile.SmsNumber), ct); - this.logger.LogDebug("Finished validating sms"); + this.logger.LogDebug("Finished verifying sms"); return true; } /// - public async Task CreateUserSmsAsync(string hdid, string sms, CancellationToken ct = default) + public MessagingVerification GenerateMessagingVerification(string hdid, string sms, bool sanitize = true) { - this.logger.LogInformation("Adding new sms verification for user {Hdid}", hdid); - string sanitizedSms = SanitizeSms(sms); - MessagingVerification messagingVerification = await this.AddVerificationSmsAsync(hdid, sanitizedSms, ct); - this.logger.LogDebug("Finished updating user sms"); + this.logger.LogInformation("Generating new sms verification for user {Hdid}", hdid); + if (sanitize) + { + sms = SanitizeSms(sms); + } + + MessagingVerification messagingVerification = new() + { + UserProfileId = hdid, + SmsNumber = sms, + SmsValidationCode = CreateVerificationCode(), + VerificationType = MessagingVerificationType.Sms, + ExpireDate = DateTime.UtcNow.AddDays(VerificationExpiryDays), + }; + return messagingVerification; } /// - public async Task UpdateUserSmsAsync(string hdid, string sms, CancellationToken ct = default) + public async Task UpdateSmsNumberAsync(string hdid, string sms, CancellationToken ct = default) { this.logger.LogTrace("Removing user sms number {Hdid}", hdid); string sanitizedSms = SanitizeSms(sms); @@ -155,14 +166,15 @@ public async Task UpdateUserSmsAsync(string hdid, string sms, CancellationToken if (lastSmsVerification != null) { this.logger.LogInformation("Expiring old sms validation for user {Hdid}", hdid); - await this.messageVerificationDelegate.ExpireAsync(lastSmsVerification, isDeleted, ct); + await this.messageVerificationDelegate.ExpireAsync(lastSmsVerification, isDeleted, ct: ct); } NotificationSettingsRequest notificationRequest = new(userProfile, userProfile.Email, sanitizedSms); if (!isDeleted) { this.logger.LogInformation("Adding new sms verification for user {Hdid}", hdid); - MessagingVerification messagingVerification = await this.AddVerificationSmsAsync(hdid, sanitizedSms, ct); + MessagingVerification messagingVerification = this.GenerateMessagingVerification(hdid, sanitizedSms, false); + await this.messageVerificationDelegate.InsertAsync(messagingVerification, true, ct); notificationRequest.SmsVerificationCode = messagingVerification.SmsValidationCode; } @@ -195,21 +207,5 @@ private static string SanitizeSms(string smsNumber) [GeneratedRegex("[^0-9]")] private static partial Regex NonDigitRegex(); - - private async Task AddVerificationSmsAsync(string hdid, string sms, CancellationToken ct = default) - { - this.logger.LogInformation("Sending new sms verification for user {Hdid}", hdid); - MessagingVerification messagingVerification = new() - { - UserProfileId = hdid, - SmsNumber = sms, - SmsValidationCode = CreateVerificationCode(), - VerificationType = MessagingVerificationType.Sms, - ExpireDate = DateTime.UtcNow.AddDays(VerificationExpiryDays), - }; - - await this.messageVerificationDelegate.InsertAsync(messagingVerification, ct: ct); - return messagingVerification; - } } } diff --git a/Apps/GatewayApi/src/Validations/OptionalEmailAddressValidator.cs b/Apps/GatewayApi/src/Validations/OptionalEmailAddressValidator.cs index 8365006b7b..af15192845 100644 --- a/Apps/GatewayApi/src/Validations/OptionalEmailAddressValidator.cs +++ b/Apps/GatewayApi/src/Validations/OptionalEmailAddressValidator.cs @@ -17,11 +17,12 @@ namespace HealthGateway.GatewayApi.Validations { using System.Net.Mail; using FluentValidation; + using HealthGateway.Common.Data.Validations; /// /// Class encapsulating validation for email addresses. /// - public class OptionalEmailAddressValidator : AbstractValidator + public class OptionalEmailAddressValidator : AbstractNullableValidator { /// /// Initializes a new instance of the class. diff --git a/Apps/GatewayApi/test/unit/Services.Test/UserEmailServiceV2Tests.cs b/Apps/GatewayApi/test/unit/Services.Test/UserEmailServiceV2Tests.cs new file mode 100644 index 0000000000..81ad7e0973 --- /dev/null +++ b/Apps/GatewayApi/test/unit/Services.Test/UserEmailServiceV2Tests.cs @@ -0,0 +1,821 @@ +//------------------------------------------------------------------------- +// Copyright © 2019 Province of British Columbia +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//------------------------------------------------------------------------- +namespace HealthGateway.GatewayApiTests.Services.Test +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using DeepEqual.Syntax; + using HealthGateway.Common.Constants; + using HealthGateway.Common.ErrorHandling.Exceptions; + using HealthGateway.Common.Messaging; + using HealthGateway.Common.Models; + using HealthGateway.Common.Models.Events; + using HealthGateway.Common.Services; + using HealthGateway.Database.Constants; + using HealthGateway.Database.Delegates; + using HealthGateway.Database.Models; + using HealthGateway.Database.Wrapper; + using HealthGateway.GatewayApi.Services; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.Logging; + using Moq; + using Xunit; + + /// + /// Unit Tests for UserEmailServiceV2Tests. + /// + public class UserEmailServiceV2Tests + { + private const string Hdid = "hdid-mock"; + private const string InvalidHdid = "Does not match hdid-mock"; + private const string MainEmailAddress = "main@healthgateway.gov.bc.ca"; + private const string SecondaryEmailAddress = "secondary@healthgateway.gov.bc.ca"; + private const string EmailTemplateHost = "https://www.healthgateway.gov.bc.ca"; + private const int EmailVerificationExpirySeconds = 43200; + + /// + /// ValidateEmailAsync - Happy path scenario. + /// + /// + /// The bool value indicating whether change feed on notifications is enabled or not. + /// + /// A representing the asynchronous unit test. + [Theory] + [InlineData(true)] + [InlineData(false)] + public async Task ValidateEmail(bool changeFeedEnabled) + { + // Arrange + VerifyEmailAddressMock mock = SetupVerifyEmailAddressMock(changeFeedEnabled); + + // Act + bool actual = await mock.Service.VerifyEmailAddressAsync(mock.Hdid, mock.InviteKey, CancellationToken.None); + + // Assert and Verify + actual.ShouldDeepEqual(mock.Expected); + Verify(mock.Verify); + } + + /// + /// ValidateEmailAsync - Too many attempts. + /// + /// A representing the asynchronous unit test. + [Fact] + public async Task ValidateEmailTooManyAttempts() + { + // Arrange + VerifyEmailAddressMock mock = SetupVerifyEmailAddressTooManyAttemptsMock(); + + // Act + bool actual = await mock.Service.VerifyEmailAddressAsync(mock.Hdid, mock.InviteKey, CancellationToken.None); + + // Assert and Verify + actual.ShouldDeepEqual(mock.Expected); + Verify(mock.Verify); + } + + /// + /// ValidateEmailAsync - Already validated. + /// + /// A representing the asynchronous unit test. + [Fact] + public async Task ValidateEmailAlreadyValidated() + { + // Arrange + VerifyEmailAddressThrowsExceptionMock mock = SetupVerifyEmailAddressThrowsAlreadyExistsExceptionMock(); + + // Act and assert + await Assert.ThrowsAsync( + mock.Expected, // AlreadyExistsException + async () => { await mock.Service.VerifyEmailAddressAsync(mock.Hdid, mock.InviteKey); }); + } + + /// + /// ValidateEmailAsync - invalid invite. + /// + /// The hdid associated with the verification by invite key. + /// + /// The bool value indicating whether a matching verification exists. + /// + /// The matching verification's deleted value. + /// A representing the asynchronous unit test. + [Theory] + [InlineData(InvalidHdid, true, false)] // User Profile Hdid does not match hdid in matching verification. + [InlineData(Hdid, false, false)] // Matching verification does not exist. + [InlineData(Hdid, true, true)] // Matching verification is deleted. + public async Task InvalidInviteLastSent(string hdid, bool verificationExists, bool deleted) + { + // Arrange + VerifyEmailAddressMock mock = SetupVerifyEmailAddressInvalidInviteMock( + hdid, + deleted, + verificationExists); + + // Act + bool actual = await mock.Service.VerifyEmailAddressAsync(mock.Hdid, mock.InviteKey); + + // Assert and Verify + actual.ShouldDeepEqual(mock.Expected); + Verify(mock.Verify); + } + + /// + /// ValidateEmailAsync - Update UserProfile database exception. + /// + /// A representing the asynchronous unit test. + [Fact] + public async Task ValidateEmailThrowsDatabaseException() + { + // Arrange + VerifyEmailAddressThrowsExceptionMock mock = SetupVerifyEmailAddressThrowsDatabaseExceptionMock(); + + // Act and Assert + await Assert.ThrowsAsync( + mock.Expected, + async () => { await mock.Service.VerifyEmailAddressAsync(mock.Hdid, mock.InviteKey); }); + } + + /// + /// GenerateMessagingVerificationAsync. + /// + /// The bool value indicating whether the messaging verification is verified or not. + /// A representing the asynchronous unit test. + [Theory] + [InlineData(true)] + [InlineData(false)] + public async Task GenerateMessagingVerificationAsync(bool isVerified) + { + // Arrange + GenerateMessagingVerificationMock mock = SetupGenerateMessagingVerificationMock(isVerified); + + // Act + MessagingVerification actual = await mock.Service.GenerateMessagingVerificationAsync(mock.Hdid, mock.EmailAddress, mock.InviteKey, isVerified); + + // Assert + Assert.Equal(mock.Expected.InviteKey, actual.InviteKey); + Assert.Equal(mock.Expected.UserProfileId, actual.UserProfileId); + Assert.Equal(mock.Expected.Validated, actual.Validated); + Assert.Equal(mock.Expected.EmailAddress, actual.EmailAddress); + Assert.Equal( + TruncateToSeconds(mock.Expected.ExpireDate), + TruncateToSeconds(actual.ExpireDate) + ); + actual.Email.ShouldDeepEqual(mock.Expected.Email); + return; + + static DateTime TruncateToSeconds(DateTime dateTime) + { + return new DateTime( + dateTime.Year, + dateTime.Month, + dateTime.Day, + dateTime.Hour, + dateTime.Minute, + dateTime.Second, + dateTime.Kind + ); + } + } + + /// + /// UpdateEmailAddressAsync. + /// + /// + /// The bool value indicating whether the latest messaging verification exists or + /// not. + /// + /// The email address to update. + /// A representing the asynchronous unit test. + [Theory] + [InlineData(true, MainEmailAddress)] + [InlineData(true, null)] + [InlineData(true, "")] + [InlineData(false, MainEmailAddress)] + [InlineData(true, SecondaryEmailAddress)] + [InlineData(false, SecondaryEmailAddress)] + public async Task UpdateEmailAddressAsync(bool latestVerificationExists, string? emailAddress) + { + // Arrange + UpdateEmailAddressMock mock = SetupUpdateEmailAddressMock( + latestVerificationExists, + emailAddress: emailAddress); + + // Act and Verify + await mock.Service.UpdateEmailAddressAsync(mock.Hdid, mock.EmailAddress); + Verify(mock.Verify); + } + + /// + /// UpdateEmailAddressAsync throws exception. + /// + /// + /// The bool value indicating whether the user profile exists or not. + /// + /// The status returned when user profile is updated. + /// A representing the asynchronous unit test. + [Theory] + [InlineData(false, DbStatusCode.Updated)] // Throws NotFoundException + [InlineData(true, DbStatusCode.Error)] // Throws DatabaseException + public async Task UpdateEmailAddressThrowsExceptionAsync(bool userProfileExists, DbStatusCode userProfileUpdateStatus) + { + // Arrange + UpdateEmailAddressThrowsExceptionMock mock = SetupUpdateEmailAddressThrowsExceptionMock( + userProfileExists, + userProfileUpdateStatus); + + // Act and Assert + await Assert.ThrowsAsync( + mock.Expected, + async () => { await mock.Service.UpdateEmailAddressAsync(mock.Hdid, mock.EmailAddress); }); + } + + private static void Verify(VerifyMock mock) + { + mock.MessagingVerificationDelegateMock.Verify( + s => s.UpdateAsync( + It.Is( + mv => mv.Validated == true), + It.IsAny(), + It.IsAny()), + mock.ExpectedValidVerificationUpdateTimes); + + mock.MessagingVerificationDelegateMock.Verify( + s => s.UpdateAsync( + It.Is( + mv => mv.Validated == false && + mv.VerificationAttempts == 1), + It.IsAny(), + It.IsAny()), + mock.ExpectedInvalidVerificationUpdateTimes); + + mock.MessagingVerificationDelegateMock.Verify( + s => s.ExpireAsync( + It.IsAny(), + It.IsAny(), + It.IsAny(), + It.IsAny()), + mock.ExpectedVerificationExpireTimes); + + mock.MessagingVerificationDelegateMock.Verify( + s => s.InsertAsync( + It.IsAny(), + It.IsAny(), + It.IsAny()), + mock.ExpectedVerificationInsertTimes); + + mock.UserProfileDelegateMock + .Verify( + s => s.UpdateAsync( + It.IsAny(), + It.IsAny(), + It.IsAny()), + mock.ExpectedUserProfileUpdateTimes); + + mock.NotificationSettingsServiceMock + .Verify( + s => s.QueueNotificationSettingsAsync( + It.IsAny(), + It.IsAny()), + mock.ExpectedQueueNotificationSettingsTimes); + + mock.MessageSenderMock.Verify( + m => m.SendAsync( + It.Is>( + envelopes => envelopes.First().Content is NotificationChannelVerifiedEvent), + CancellationToken.None), + mock.ExpectedMessageSenderSendTimes); + + mock.EmailQueueServiceMock + .Verify( + s => s.QueueNewEmailAsync( + It.IsAny(), + It.IsAny(), + It.IsAny()), + mock.ExpectedQueueNewEmailTimes); + } + + private static IConfiguration GetConfiguration(bool changeFeedEnabled) + { + const string changeFeedKey = $"{ChangeFeedOptions.ChangeFeed}:Notifications:Enabled"; + const string emailVerificationExpirySecondsKey = "WebClient:EmailVerificationExpirySeconds"; + const string emailTemplateHostKey = "EmailTemplate:Host"; + + Dictionary myConfiguration = new() + { + { changeFeedKey, changeFeedEnabled.ToString() }, + { emailVerificationExpirySecondsKey, EmailVerificationExpirySeconds.ToString(CultureInfo.InvariantCulture) }, + { emailTemplateHostKey, EmailTemplateHost }, + }; + + return new ConfigurationBuilder() + .AddInMemoryCollection(myConfiguration.ToList()) + .Build(); + } + + private static IUserEmailServiceV2 GetUserEmailService( + Mock? messagingVerificationDelegateMock = null, + Mock? userProfileDelegateMock = null, + Mock? notificationSettingsServiceMock = null, + Mock? messageSenderMock = null, + Mock? emailQueueServiceMock = null, + bool changeFeedEnabled = false) + { + messagingVerificationDelegateMock ??= new(); + userProfileDelegateMock ??= new(); + notificationSettingsServiceMock ??= new(); + messageSenderMock ??= new(); + emailQueueServiceMock ??= new(); + + return new UserEmailServiceV2( + new Mock>().Object, + messagingVerificationDelegateMock.Object, + userProfileDelegateMock.Object, + emailQueueServiceMock.Object, + notificationSettingsServiceMock.Object, + GetConfiguration(changeFeedEnabled), + messageSenderMock.Object); + } + + private static Email GenerateEmail(Guid? emailId = null, string toEmailAddress = MainEmailAddress) + { + return new() + { + Id = emailId ?? Guid.NewGuid(), + To = toEmailAddress, + }; + } + + private static MessagingVerification GenerateMessagingVerification( + string userProfileId = Hdid, + string emailAddress = MainEmailAddress, + int verificationAttempts = 0, + bool validated = false, + bool deleted = false, + Email? email = null, + Guid? inviteKey = null, + DateTime? expireDate = null) + { + return new() + { + UserProfileId = userProfileId, + VerificationAttempts = verificationAttempts, + InviteKey = inviteKey ?? Guid.NewGuid(), + ExpireDate = expireDate ?? DateTime.UtcNow.AddSeconds(EmailVerificationExpirySeconds), + Validated = validated, + Deleted = deleted, + EmailAddress = emailAddress, + Email = email ?? GenerateEmail(toEmailAddress: emailAddress), + }; + } + + private static Mock SetupMessagingVerificationDelegateMock( + string userProfileId = Hdid, + bool setupMatchingVerification = true, + Guid? matchingVerificationInviteKey = null, + bool matchingVerificationExists = true, + int matchingVerificationAttempts = 0, + bool matchingVerificationValidated = false, + bool matchingVerificationDeleted = false, + string matchingVerificationEmailAddress = MainEmailAddress, + bool setupLatestVerification = false, + Guid? latestVerificationInviteKey = null, + bool latestVerificationExists = true, + string latestVerificationEmailAddress = MainEmailAddress) + { + matchingVerificationInviteKey ??= Guid.NewGuid(); + latestVerificationInviteKey ??= Guid.NewGuid(); + Mock messagingVerificationDelegateMock = new(); + + if (setupMatchingVerification) + { + Email email = GenerateEmail(toEmailAddress: matchingVerificationEmailAddress); + + MessagingVerification? matchingVerification = + matchingVerificationExists + ? GenerateMessagingVerification( + userProfileId, + email: email, + inviteKey: matchingVerificationInviteKey, + verificationAttempts: matchingVerificationAttempts, + validated: matchingVerificationValidated, + deleted: matchingVerificationDeleted) + : null; + + messagingVerificationDelegateMock.Setup( + s => s.GetLastByInviteKeyAsync( + It.IsAny(), + It.IsAny())) + .ReturnsAsync(matchingVerification); + } + + if (setupLatestVerification) + { + Email email = GenerateEmail(toEmailAddress: latestVerificationEmailAddress); + + MessagingVerification? latestEmailVerification = + latestVerificationExists + ? GenerateMessagingVerification( + userProfileId, + inviteKey: latestVerificationInviteKey, + email: email, + deleted: false) + : null; + + messagingVerificationDelegateMock.Setup( + s => s.GetLastForUserAsync( + It.IsAny(), + It.IsAny(), + It.IsAny())) + .ReturnsAsync(latestEmailVerification); + } + + return messagingVerificationDelegateMock; + } + + private static Mock SetupUserProfileDelegateMock(bool userProfileExists = true, DbStatusCode? dbUpdateStatus = null) + { + UserProfile? userProfile = userProfileExists ? new() : null; + Mock userProfileDelegateMock = new(); + + userProfileDelegateMock.Setup( + u => u.GetUserProfileAsync( + It.IsAny(), + It.IsAny(), + It.IsAny())) + .ReturnsAsync(userProfile); + + if (dbUpdateStatus != null) + { + userProfileDelegateMock.Setup( + s => s.UpdateAsync( + It.IsAny(), + It.IsAny(), + It.IsAny())) + .ReturnsAsync( + new DbResult + { Status = dbUpdateStatus.Value }); + } + + return userProfileDelegateMock; + } + + private static VerifyMock SetupVerifyMock( + Mock? messagingVerificationDelegateMock = null, + Mock? userProfileDelegateMock = null, + Mock? notificationSettingsServiceMock = null, + Mock? emailQueueServiceMock = null, + Mock? messageSenderMock = null, + bool expectValidVerificationUpdate = false, + bool expectInvalidVerificationUpdate = false, + bool expectVerificationExpire = false, + bool expectVerificationInsert = false, + bool expectUserProfileUpdate = false, + bool expectQueueNotificationSettings = false, + bool expectQueueNewEmail = false, + bool expectMessageSenderSend = false) + { + messagingVerificationDelegateMock ??= new(); + userProfileDelegateMock ??= new(); + notificationSettingsServiceMock ??= new(); + emailQueueServiceMock ??= new(); + messageSenderMock ??= new(); + + return new( + messagingVerificationDelegateMock, + userProfileDelegateMock, + notificationSettingsServiceMock, + emailQueueServiceMock, + messageSenderMock, + Convert(expectValidVerificationUpdate), // ExpectedValidVerificationUpdateTimes + Convert(expectInvalidVerificationUpdate), // ExpectedInvalidVerificationUpdateTimes + Convert(expectVerificationExpire), // ExpectedVerificationExpireTimes + Convert(expectVerificationInsert), // ExpectedVerificationInsertTime + Convert(expectUserProfileUpdate), // ExpectedUserProfileUpdateTimes + Convert(expectQueueNotificationSettings), // ExpectedQueueNotificationSettingsTimes + Convert(expectQueueNewEmail), // ExpectedQueueNewEmailTimes + Convert(expectMessageSenderSend)); // ExpectedMessageSenderSendTimes + + static Times Convert(bool expect) + { + return expect ? Times.Once() : Times.Never(); + } + } + + private static VerifyEmailAddressMock SetupVerifyEmailAddressMock(bool changeFeedEnabled) + { + Guid inviteKey = Guid.NewGuid(); + Mock messagingVerificationDelegateMock = SetupMessagingVerificationDelegateMock(matchingVerificationInviteKey: inviteKey); + Mock userProfileDelegateMock = SetupUserProfileDelegateMock(dbUpdateStatus: DbStatusCode.Updated); + Mock notificationSettingsServiceMock = new(); + Mock messageSenderMock = new(); + + IUserEmailServiceV2 service = GetUserEmailService( + messagingVerificationDelegateMock, + userProfileDelegateMock, + notificationSettingsServiceMock, + messageSenderMock, + changeFeedEnabled: changeFeedEnabled); + + VerifyMock verifyMock = SetupVerifyMock( + messagingVerificationDelegateMock, + userProfileDelegateMock, + notificationSettingsServiceMock, + messageSenderMock: messageSenderMock, + expectValidVerificationUpdate: true, + expectUserProfileUpdate: true, + expectQueueNotificationSettings: true, + expectMessageSenderSend: changeFeedEnabled); + + return new( + service, + Hdid, + inviteKey, + true, // Valid email + verifyMock); + } + + private static VerifyEmailAddressMock SetupVerifyEmailAddressTooManyAttemptsMock() + { + Guid inviteKey = Guid.NewGuid(); + Mock + messagingVerificationDelegateMock = + SetupMessagingVerificationDelegateMock(matchingVerificationInviteKey: inviteKey, matchingVerificationAttempts: 1000000000); // This will cause too many attempts error. + Mock userProfileDelegateMock = SetupUserProfileDelegateMock(); + + IUserEmailServiceV2 service = GetUserEmailService( + messagingVerificationDelegateMock, + userProfileDelegateMock); + + VerifyMock verifyMock = SetupVerifyMock( + messagingVerificationDelegateMock, + userProfileDelegateMock); + + return new( + service, + Hdid, + inviteKey, + false, // Invalid email + verifyMock); + } + + private static VerifyEmailAddressThrowsExceptionMock SetupVerifyEmailAddressThrowsAlreadyExistsExceptionMock() + { + Guid inviteKey = Guid.NewGuid(); + Mock + messagingVerificationDelegateMock = + SetupMessagingVerificationDelegateMock(matchingVerificationInviteKey: inviteKey, matchingVerificationValidated: true); // This will cause an AlreadyExistsException to be thrown. + Mock userProfileDelegateMock = SetupUserProfileDelegateMock(); + + IUserEmailServiceV2 service = GetUserEmailService( + messagingVerificationDelegateMock, + userProfileDelegateMock); + + return new( + service, + Hdid, + inviteKey, + typeof(AlreadyExistsException)); // Invalid email - exception is thrown + } + + private static VerifyEmailAddressMock SetupVerifyEmailAddressInvalidInviteMock( + string userProfileId = Hdid, + bool matchingVerificationDeleted = false, + bool matchingVerificationExists = true) + { + Guid inviteKey = Guid.NewGuid(); + + Mock + messagingVerificationDelegateMock = SetupMessagingVerificationDelegateMock( + matchingVerificationInviteKey: inviteKey, + userProfileId: userProfileId, // See if (matchingVerification == null || matchingVerification.UserProfileId != hdid || matchingVerification.Deleted) + matchingVerificationExists: matchingVerificationExists, // if (matchingVerification == null || matchingVerification.UserProfileId != hdid || matchingVerification.Deleted) + matchingVerificationDeleted: matchingVerificationDeleted, // See if (matchingVerification == null || matchingVerification.UserProfileId != hdid || matchingVerification.Deleted) + setupLatestVerification: true); + + Mock userProfileDelegateMock = SetupUserProfileDelegateMock(); + + IUserEmailServiceV2 service = GetUserEmailService( + messagingVerificationDelegateMock, + userProfileDelegateMock); + + VerifyMock verifyMock = SetupVerifyMock( + messagingVerificationDelegateMock, + userProfileDelegateMock, + expectInvalidVerificationUpdate: true); + + return new( + service, + Hdid, + inviteKey, + false, // Invalid email + verifyMock); + } + + private static VerifyEmailAddressThrowsExceptionMock SetupVerifyEmailAddressThrowsDatabaseExceptionMock() + { + Guid inviteKey = Guid.NewGuid(); + Mock messagingVerificationDelegateMock = SetupMessagingVerificationDelegateMock(matchingVerificationInviteKey: inviteKey); + Mock userProfileDelegateMock = SetupUserProfileDelegateMock(dbUpdateStatus: DbStatusCode.Error); // This will cause a DatabaseException to be thrown. + + IUserEmailServiceV2 service = GetUserEmailService( + messagingVerificationDelegateMock, + userProfileDelegateMock); + + return new( + service, + Hdid, + inviteKey, + typeof(DatabaseException)); // Invalid email - exception is thrown + } + + private static EmailQueueServiceMock SetupEmailQueueServiceMock( + string toEmailAddress, + string? emailAddress = null, + bool isVerified = true) + { + Guid inviteKey = Guid.NewGuid(); + Guid emailId = Guid.NewGuid(); + Guid emailTemplateId = Guid.NewGuid(); + + Email email = GenerateEmail(emailId, toEmailAddress); + EmailTemplate emailTemplate = new() + { + Id = emailTemplateId, + Name = EmailTemplateName.RegistrationTemplate, + }; + + Mock emailQueueServiceMock = new(); + emailQueueServiceMock.Setup( + s => s.GetEmailTemplateAsync( + It.IsAny(), + It.IsAny())) + .ReturnsAsync(emailTemplate); + + emailQueueServiceMock.Setup( + s => s.ProcessTemplate( + It.IsAny(), + It.IsAny(), + It.IsAny>())) + .Returns(email); + + MessagingVerification expected = GenerateMessagingVerification( + inviteKey: inviteKey, + validated: isVerified, + email: email); + + return new(emailQueueServiceMock, Hdid, inviteKey, emailAddress, expected); + } + + private static GenerateMessagingVerificationMock SetupGenerateMessagingVerificationMock(bool isVerified) + { + EmailQueueServiceMock emailQueueServiceMock = SetupEmailQueueServiceMock(MainEmailAddress, MainEmailAddress, isVerified); + IUserEmailServiceV2 service = GetUserEmailService(emailQueueServiceMock: emailQueueServiceMock.Service); + + return new( + service, + emailQueueServiceMock.Hdid, + emailQueueServiceMock.InviteKey, + emailQueueServiceMock.EmailAddress, + emailQueueServiceMock.Expected); + } + + private static UpdateEmailAddressMock SetupUpdateEmailAddressMock( + bool latestVerificationExists, + DbStatusCode userProfileUpdateStatus = DbStatusCode.Updated, + string? emailAddress = null) + { + Mock messagingVerificationDelegateMock = + SetupMessagingVerificationDelegateMock( + setupMatchingVerification: false, + setupLatestVerification: true, + latestVerificationExists: latestVerificationExists, + latestVerificationEmailAddress: MainEmailAddress); + + Mock userProfileDelegateMock = SetupUserProfileDelegateMock(dbUpdateStatus: userProfileUpdateStatus); + EmailQueueServiceMock emailQueueServiceMock = SetupEmailQueueServiceMock(MainEmailAddress, emailAddress); + Mock notificationSettingsServiceMock = new(); + + IUserEmailServiceV2 service = GetUserEmailService( + messagingVerificationDelegateMock, + userProfileDelegateMock, + notificationSettingsServiceMock, + emailQueueServiceMock: emailQueueServiceMock.Service); + + VerifyMock verifyMock = SetupVerifyMock( + messagingVerificationDelegateMock, + userProfileDelegateMock, + notificationSettingsServiceMock, + emailQueueServiceMock.Service, + expectVerificationExpire: latestVerificationExists, + expectVerificationInsert: !string.IsNullOrEmpty(emailAddress), + expectUserProfileUpdate: true, + expectQueueNotificationSettings: true, + expectQueueNewEmail: !string.IsNullOrEmpty(emailAddress)); + + return new( + service, + emailQueueServiceMock.Hdid, + emailQueueServiceMock.EmailAddress, + verifyMock); + } + + private static UpdateEmailAddressThrowsExceptionMock SetupUpdateEmailAddressThrowsExceptionMock( + bool userProfileExists = true, // if false, NotFoundException is thrown + DbStatusCode userProfileUpdateStatus = DbStatusCode.Updated) // if DbStatusCode.Error, DatabaseException is thrown + { + Mock messagingVerificationDelegateMock = + SetupMessagingVerificationDelegateMock( + setupMatchingVerification: false, + setupLatestVerification: true); + + Mock userProfileDelegateMock = SetupUserProfileDelegateMock(userProfileExists, userProfileUpdateStatus); + EmailQueueServiceMock emailQueueServiceMock = SetupEmailQueueServiceMock(MainEmailAddress, MainEmailAddress); + Mock notificationSettingsServiceMock = new(); + + IUserEmailServiceV2 service = GetUserEmailService( + messagingVerificationDelegateMock, + userProfileDelegateMock, + notificationSettingsServiceMock, + emailQueueServiceMock: emailQueueServiceMock.Service); + + Type expected = !userProfileExists ? typeof(NotFoundException) : typeof(DatabaseException); + + return new( + service, + Hdid, + MainEmailAddress, + expected); + } + + private sealed record EmailQueueServiceMock( + Mock Service, + string Hdid, + Guid InviteKey, + string EmailAddress, + MessagingVerification Expected); + + private sealed record VerifyEmailAddressMock( + IUserEmailServiceV2 Service, + string Hdid, + Guid InviteKey, + bool Expected, + VerifyMock Verify); + + private sealed record VerifyEmailAddressThrowsExceptionMock( + IUserEmailServiceV2 Service, + string Hdid, + Guid InviteKey, + Type Expected); + + private sealed record GenerateMessagingVerificationMock( + IUserEmailServiceV2 Service, + string Hdid, + Guid InviteKey, + string EmailAddress, + MessagingVerification Expected); + + private sealed record UpdateEmailAddressMock( + IUserEmailServiceV2 Service, + string Hdid, + string EmailAddress, + VerifyMock Verify); + + private sealed record UpdateEmailAddressThrowsExceptionMock( + IUserEmailServiceV2 Service, + string Hdid, + string EmailAddress, + Type Expected); + + private sealed record VerifyMock( + Mock MessagingVerificationDelegateMock, + Mock UserProfileDelegateMock, + Mock NotificationSettingsServiceMock, + Mock EmailQueueServiceMock, + Mock MessageSenderMock, + Times ExpectedValidVerificationUpdateTimes, + Times ExpectedInvalidVerificationUpdateTimes, + Times ExpectedVerificationExpireTimes, + Times ExpectedVerificationInsertTimes, + Times ExpectedUserProfileUpdateTimes, + Times ExpectedQueueNotificationSettingsTimes, + Times ExpectedQueueNewEmailTimes, + Times ExpectedMessageSenderSendTimes); + } +} diff --git a/Apps/GatewayApi/test/unit/Services.Test/UserProfileServiceV2Tests.cs b/Apps/GatewayApi/test/unit/Services.Test/UserProfileServiceV2Tests.cs new file mode 100644 index 0000000000..53fac8e39f --- /dev/null +++ b/Apps/GatewayApi/test/unit/Services.Test/UserProfileServiceV2Tests.cs @@ -0,0 +1,1386 @@ +//------------------------------------------------------------------------- +// Copyright © 2019 Province of British Columbia +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//------------------------------------------------------------------------- +namespace HealthGateway.GatewayApiTests.Services.Test +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using DeepEqual.Syntax; + using FluentValidation; + using HealthGateway.AccountDataAccess.Patient; + using HealthGateway.Common.AccessManagement.Authentication; + using HealthGateway.Common.Constants; + using HealthGateway.Common.Data.Constants; + using HealthGateway.Common.Data.Models; + using HealthGateway.Common.Delegates; + using HealthGateway.Common.ErrorHandling.Exceptions; + using HealthGateway.Common.Messaging; + using HealthGateway.Common.Models; + using HealthGateway.Common.Models.Events; + using HealthGateway.Common.Services; + using HealthGateway.Database.Constants; + using HealthGateway.Database.Delegates; + using HealthGateway.Database.Models; + using HealthGateway.Database.Wrapper; + using HealthGateway.GatewayApi.Models; + using HealthGateway.GatewayApi.Services; + using HealthGateway.GatewayApiTests.Utils; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.Logging; + using Moq; + using Xunit; + using UserProfileHistory = HealthGateway.Database.Models.UserProfileHistory; + + /// + /// UserProfileServiceV2's Unit Tests. + /// + public class UserProfileServiceV2Tests + { + private const string AuthenticatedUserId = "d45acc23-ab01-4f7d-a5b9-1076a20f3a5a"; + private const string Hdid = "hdid-mock"; + private const string EmailAddress = "user@HealthGateway.ca"; + private const string SmsNumber = "2505556000"; + private const string SmsVerificationCode = "12345"; + private const string InvalidSmsNumber = "xxx000xxxx"; + + private static readonly IGatewayApiMappingService MappingService = new GatewayApiMappingService(MapperUtil.InitializeAutoMapper(), new Mock().Object); + private static readonly Guid TermsOfServiceGuid = Guid.Parse("c99fd839-b4a2-40f9-b103-529efccd0dcd"); + + /// + /// CloseUserProfileAsync. + /// + /// A representing the asynchronous unit test. + [Fact] + public async Task CloseUserProfileAsync() + { + // Arrange + BaseUserProfileServiceMock baseMock = SetupCloseUserProfileMock(profileUpdateStatus: DbStatusCode.Updated); + + if (baseMock is CloseUserProfileMock mock) + { + // Act + await mock.Service.CloseUserProfileAsync(mock.Hdid); + + // Verify + Verify(mock.Verify); + } + else + { + Assert.Fail("Expected CloseUserProfileMock but got a different type."); + } + } + + /// + /// CloseUserProfileAsync when user profile is already closed. + /// + /// A representing the asynchronous unit test. + [Fact] + public async Task CloseUserProfileAlreadyClosed() + { + // Arrange + BaseUserProfileServiceMock baseMock = SetupCloseUserProfileMock(closedDateTime: DateTime.UtcNow); + + if (baseMock is CloseUserProfileMock mock) + { + // Act + await mock.Service.CloseUserProfileAsync(mock.Hdid); + + // Verify + Verify(mock.Verify); + } + else + { + Assert.Fail("Expected CloseUserProfileMock but got a different type."); + } + } + + /// + /// CloseUserProfileAsync throws NotFoundException + /// + /// The value indicating whether user profile exists or not. + /// The db status returned when user profile is updated in the database. + /// A representing the asynchronous unit test. + [Theory] + [InlineData(false, null)] // NotFoundException + [InlineData(true, DbStatusCode.Error)] // DatabaseException + public async Task CloseUserProfileThrowsException(bool userProfileExists, DbStatusCode? profileUpdateStatus) + { + // Arrange + BaseUserProfileServiceMock baseMock = SetupCloseUserProfileMock(userProfileExists, profileUpdateStatus: profileUpdateStatus); + + if (baseMock is CloseUserProfileThrowsExceptionMock mock) + { + // Act and Assert + await Assert.ThrowsAsync( + mock.Expected, + async () => { await mock.Service.CloseUserProfileAsync(mock.Hdid); }); + } + else + { + Assert.Fail("Expected CloseUserProfileThrowsExceptionMock but got a different type."); + } + } + + /// + /// CreateUserProfileAsync. + /// + /// The value representing the requested sms number. + /// The value representing the requested email address. + /// The value representing the jwt email address. + /// The value representing the valid minimum age to create a profile. + /// The value representing the patient's age. + /// The value indicates whether accounts change feed has been enabled or not. + /// + /// The value indicates whether notification change feed has been enabled or + /// not. + /// + /// A representing the asynchronous unit test. + [Theory] + [InlineData(SmsNumber, EmailAddress, EmailAddress, 18, 18, true, true)] // Happy path + [InlineData(SmsNumber, EmailAddress, EmailAddress, 18, 19, false, false)] // Happy path + [InlineData(null, null, EmailAddress, 18, 18, true, true)] // Both sms and email are null in request + [InlineData("", "", EmailAddress, 18, 18, true, true)] // Both sms and email are empty string in request + [InlineData(SmsNumber, EmailAddress, null, 18, 18, true, true)] // Jwt email address is null + [InlineData(SmsNumber, EmailAddress, "", 18, 18, true, true)] // Jwt email address is empty string + public async Task CreateUserProfileAsync( + string? requestedSmsNumber, + string? requestedEmailAddress, + string? jwtEmailAddress, + int minPatientAge, + int patientAge, + bool accountsChangeFeedEnabled, + bool notificationsChangeFeedEnabled) + { + // Arrange + CreateUserProfileMock mock = SetupCreateUserProfileMock( + requestedSmsNumber, + requestedEmailAddress, + jwtEmailAddress, + minPatientAge, + patientAge, + accountsChangeFeedEnabled, + notificationsChangeFeedEnabled); + + // Act + UserProfileModel actual = await mock.Service.CreateUserProfileAsync( + mock.CreateProfileRequest, + mock.JwtAuthTime, + mock.JwtEmailAddress); + + // Assert and Verify + actual.ShouldDeepEqual(mock.Expected); + Verify(mock.Verify); + } + + /// + /// CreateUserProfileAsync throws Exception. + /// + /// The value representing the requested sms number. + /// The value representing the valid minimum age to create a profile. + /// The value representing the patient's age. + /// The db status returned when user profile is inserted in the database + /// A representing the asynchronous unit test. + [Theory] + [InlineData(InvalidSmsNumber, 18, 18, null)] // ValidationException + [InlineData(SmsNumber, 18, 17, null)] // ValidationException + [InlineData(SmsNumber, 18, 18, DbStatusCode.Error)] // DatabaseException + public async Task CreateUserProfileAsyncThrowsException( + string? requestedSmsNumber, + int minPatientAge, + int patientAge, + DbStatusCode? profileInsertStatus) + { + // Arrange + CreateUserProfileThrowsExceptionMock mock = SetupCreateUserProfileThrowsExceptionMock( + requestedSmsNumber, + minPatientAge, + patientAge, + profileInsertStatus); + + // Act and assert + await Assert.ThrowsAsync( + mock.Expected, + async () => + { + await mock.Service.CreateUserProfileAsync( + mock.CreateProfileRequest, + mock.JwtAuthTime, + mock.JwtEmailAddress); + }); + } + + /// + /// GetUserProfileAsync. + /// + /// The value indicating whether user profile exists or not. + /// The value indicating whether jwt auth time is different from last login or not. + /// The value indicating whether email address exists or not. + /// The value indicating whether sms number exists or not. + /// The value indicating whether tour change date is latest or not. + /// A representing the asynchronous unit test. + [Theory] + [InlineData(true, true, true, true, true)] // Happy path + [InlineData(true, false, true, true, true)] // jwt auth time is not different + [InlineData(true, true, true, true, false)] // Tour change is not latest + [InlineData(true, false, false, false, true)] // Profile email and sms do not exist; look at messaging verification + [InlineData(false, false, false, false, false)] // Cannot get profile because user profile does not exist + public async Task GetUserProfileAsync( + bool userProfileExists, + bool jwtAuthTimeIsDifferent, + bool emailAddressExists, + bool smsNumberExists, + bool tourChangeDateIsLatest) + { + // Arrange + UserProfileMock mock = SetupUserProfileMock( + userProfileExists, + jwtAuthTimeIsDifferent, + emailAddressExists, + smsNumberExists, + tourChangeDateIsLatest); + + // Act + UserProfileModel actual = await mock.Service.GetUserProfileAsync(mock.Hdid, mock.JwtAuthTime); + + // Assert and Verify + actual.ShouldDeepEqual(mock.Expected); + Verify(mock.Verify); + } + + /// + /// IsPhoneNumberValidAsync. + /// + /// The phone number to validate. + /// A representing the asynchronous unit test. + [InlineData("3345678901")] + [InlineData("2507001000")] + [Theory] + public async Task PhoneNumberIsValidAsync(string phoneNumber) + { + // Arrange + PhoneNumberValidMock mock = SetupPhoneNumberValidMock(phoneNumber, true); + + // Act + bool actual = await mock.Service.IsPhoneNumberValidAsync(mock.PhoneNumber); + + // Assert + actual.ShouldDeepEqual(mock.Expected); + } + + /// + /// IsPhoneNumberValidAsync. + /// + /// The phone number to validate. + /// A representing the asynchronous unit test. + [InlineData("xxx3277465")] + [InlineData("abc")] + [Theory] + public async Task PhoneNumberIsNotValidAsync(string phoneNumber) + { + // Arrange + PhoneNumberValidMock mock = SetupPhoneNumberValidMock(phoneNumber, false); + + // Act + bool actual = await mock.Service.IsPhoneNumberValidAsync(mock.PhoneNumber); + + // Assert + Assert.Equal(mock.Expected, actual); + } + + /// + /// RecoverUserProfile - Happy Path. + /// + /// A representing the asynchronous unit test. + [Fact] + public async Task RecoverUserProfile() + { + // Arrange + BaseUserProfileServiceMock baseMock = SetupRecoverUserProfileMock( + profileClosedDateTime: DateTime.UtcNow, + profileUpdateStatus: DbStatusCode.Updated); + + if (baseMock is RecoverUserProfileMock mock) + { + // Act + await mock.Service.RecoverUserProfileAsync(mock.Hdid); + + // Verify + Verify(mock.Verify); + } + else + { + Assert.Fail("Expected RecoverUserProfileMock but got a different type."); + } + } + + /// + /// RecoverUserProfile already recovered. + /// + /// A representing the asynchronous unit test. + [Fact] + public async Task RecoverUserProfileAlreadyRecovered() + { + // Arrange + BaseUserProfileServiceMock baseMock = SetupRecoverUserProfileMock(profileClosedDateTime: null); + + if (baseMock is RecoverUserProfileMock mock) + { + // Act + await mock.Service.RecoverUserProfileAsync(mock.Hdid); + + // Verify + Verify(mock.Verify); + } + else + { + Assert.Fail("Expected RecoverUserProfileMock but got a different type."); + } + } + + /// + /// RecoverUserProfile already recovered. + /// + /// The value indicating whether user profile exists or not. + /// The db status returned when user profile is updated in the database. + /// A representing the asynchronous unit test. + [InlineData(false, null)] // NotFoundException + [InlineData(true, DbStatusCode.Error)] // DatabaseException + [Theory] + public async Task RecoverUserProfileThrowsException(bool userProfileExists, DbStatusCode? profileUpdateStatus) + { + // Arrange + BaseUserProfileServiceMock baseMock = SetupRecoverUserProfileMock( + userProfileExists, + DateTime.UtcNow, + profileUpdateStatus); + + if (baseMock is RecoverUserProfileThrowsExceptionMock mock) + { + // Act and Assert + await Assert.ThrowsAsync( + mock.Expected, + async () => { await mock.Service.RecoverUserProfileAsync(mock.Hdid); }); + } + else + { + Assert.Fail("Expected RecoverUserProfileThrowsExceptionMock but got a different type."); + } + } + + /// + /// UpdateAcceptedTermsAsync. + /// + /// A representing the asynchronous unit test. + [Fact] + public async Task UpdateAcceptedTermsAsync() + { + // Arrange + BaseUserProfileServiceMock baseMock = SetupUpdateAcceptedTermsMock(DbStatusCode.Updated); + + if (baseMock is UpdateAcceptedTermsMock mock) + { + // Act + await mock.Service.UpdateAcceptedTermsAsync(mock.Hdid, mock.TermsOfServiceId); + + // Verify + Verify(mock.Verify); + } + else + { + Assert.Fail("Expected UpdateAcceptedTermsMock but got a different type."); + } + } + + /// + /// UpdateAcceptedTermsAsync throws DatabaseException + /// + /// A representing the asynchronous unit test. + [Fact] + public async Task UpdateAcceptedTermsAsyncThrowsDatabaseException() + { + // Arrange + BaseUserProfileServiceMock baseMock = SetupUpdateAcceptedTermsMock(DbStatusCode.Error); + + if (baseMock is UpdateAcceptedTermsThrowsExceptionMock mock) + { + // Act and Assert + await Assert.ThrowsAsync( + mock.Expected, + async () => { await mock.Service.UpdateAcceptedTermsAsync(mock.Hdid, mock.TermsOfServiceId); }); + } + else + { + Assert.Fail("Expected UpdateAcceptedTermsThrowsExceptionMock but got a different type."); + } + } + + /// + /// ValidateEligibilityAsync. + /// + /// The minimum patient age to validate against. + /// The patient age to validate. + /// A representing the asynchronous unit test. + [InlineData(0, 0)] + [InlineData(19, 19)] + [InlineData(19, 20)] + [InlineData(19, 18)] + [Theory] + public async Task ValidateEligibilityAsync(int minPatientAge, int patientAge) + { + // Arrange + ValidateEligibilityMock mock = SetupValidateEligibilityMock(minPatientAge, patientAge); + + // Act + bool actual = await mock.Service.ValidateEligibilityAsync(mock.Hdid); + + // Assert + actual.ShouldDeepEqual(mock.Expected); + } + + private static void Verify(VerifyMock mock) + { + mock.MessagingVerificationDelegateMock.Verify( + v => v.InsertAsync( + It.Is( + x => !string.IsNullOrWhiteSpace(x.SmsNumber) + && x.Email == null + && string.IsNullOrWhiteSpace(x.EmailAddress)), + It.IsAny(), + It.IsAny()), + mock.ExpectedSmsVerificationInsertTimes); + + mock.MessagingVerificationDelegateMock.Verify( + v => v.InsertAsync( + It.Is( + x => string.IsNullOrWhiteSpace(x.SmsNumber) + && x.Email != null + && !string.IsNullOrWhiteSpace(x.EmailAddress)), + It.IsAny(), + It.IsAny()), + mock.ExpectedEmailVerificationInsertTimes); + + mock.UserProfileDelegateMock.Verify( + v => v.UpdateAsync( + It.IsAny(), + It.IsAny(), + It.IsAny()), + mock.ExpectedUserProfileUpdateTimes); + + mock.EmailQueueServiceMock.Verify( + v => v.QueueNewEmailAsync( + It.IsAny(), + It.IsAny(), + It.IsAny>(), + It.IsAny(), + It.IsAny()), + mock.ExpectedQueueNewEmailByTemplateTimes); + + mock.EmailQueueServiceMock.Verify( + v => v.QueueNewEmailAsync( + It.IsAny(), + It.IsAny(), + It.IsAny()), + mock.ExpectedQueueNewEmailByEntityTimes); + + mock.MessageSenderMock.Verify( + v => v.SendAsync( + It.Is>( + envelopes => envelopes.First().Content is AccountCreatedEvent), + It.IsAny()), + mock.ExpectedSendAccountCreatedEventTimes); + + mock.MessageSenderMock.Verify( + v => v.SendAsync( + It.Is>( + envelopes => envelopes.First().Content is NotificationChannelVerifiedEvent), + It.IsAny()), + mock.ExpectedSendNotificationChannelVerifiedEventTimes); + + mock.NotificationSettingsServiceMock.Verify( + v => v.QueueNotificationSettingsAsync( + It.IsAny(), + It.IsAny()), + mock.ExpectedQueueNotificationSettingsTimes); + } + + private static DateTime GenerateBirthDate(int patientAge = 18) + { + DateTime currentUtcDate = DateTime.UtcNow.Date; + return currentUtcDate.AddYears(-patientAge); + } + + private static Email GenerateEmail(Guid? emailId = null, string toEmailAddress = EmailAddress) + { + return new() + { + Id = emailId ?? Guid.NewGuid(), + To = toEmailAddress, + }; + } + + private static MessagingVerification GenerateMessagingVerification( + string smsVerificationCode = SmsVerificationCode, + bool validated = true, + Guid? inviteKey = null, + string? emailAddress = null, + string? smsNumber = null) + { + return new() + { + Id = Guid.NewGuid(), + InviteKey = inviteKey ?? Guid.NewGuid(), + SmsNumber = smsNumber, + SmsValidationCode = smsVerificationCode, + EmailAddress = emailAddress, + Validated = validated, + Email = emailAddress != null ? GenerateEmail(toEmailAddress: emailAddress) : null, + }; + } + + private static UserProfile GenerateUserProfile( + string hdid = Hdid, + DateTime? loginDate = null, + DateTime? closedDateTime = null, + int daysFromLoginDate = 0, + string? email = null, + string? smsNumber = null, + BetaFeature? betaFeature = null) + { + DateTime lastLoginDateTime = loginDate?.Date ?? DateTime.UtcNow.Date; + + return new() + { + HdId = hdid, + TermsOfServiceId = TermsOfServiceGuid, + Email = email, + SmsNumber = smsNumber, + ClosedDateTime = closedDateTime, + LastLoginDateTime = lastLoginDateTime.AddDays(-daysFromLoginDate), + BetaFeatureCodes = + [ + new BetaFeatureCode + { Code = betaFeature ?? BetaFeature.Salesforce }, + ], + }; + } + + private static UserProfileHistory GenerateUserProfileHistory( + string hdid = Hdid, + DateTime? loginDate = null, + int daysFromLoginDate = 0) + { + DateTime lastLoginDateTime = loginDate?.Date ?? DateTime.UtcNow.Date; + + return new() + { + HdId = hdid, + Id = Guid.NewGuid(), + LastLoginDateTime = lastLoginDateTime.AddDays(-daysFromLoginDate), + }; + } + + private static PatientDetails GeneratePatientDetails(string hdid = Hdid, DateOnly? birthDate = null) + { + return new() + { + HdId = hdid, + Birthdate = birthDate ?? DateOnly.FromDateTime(GenerateBirthDate()), + }; + } + + private static DbResult GenerateUserProfileDbResult( + DbStatusCode status, + UserProfile? userProfile = null) + { + return new() + { + Status = status, + Payload = userProfile!, + }; + } + + private static IConfigurationRoot GetIConfiguration( + int minPatientAge = 12, + int profileHistoryRecordLimit = 2, + bool accountsChangeFeedEnabled = false, + bool notificationsChangeFeedEnabled = false) + { + Dictionary myConfiguration = new() + { + { "WebClient:MinPatientAge", minPatientAge.ToString(CultureInfo.InvariantCulture) }, + { "WebClient:UserProfileHistoryRecordLimit", profileHistoryRecordLimit.ToString(CultureInfo.InvariantCulture) }, + { "ChangeFeed:Accounts:Enabled", accountsChangeFeedEnabled.ToString() }, + { "ChangeFeed:Notifications:Enabled", notificationsChangeFeedEnabled.ToString() }, + }; + + return new ConfigurationBuilder() + .AddInMemoryCollection(myConfiguration.ToList()) + .Build(); + } + + private static Mock SetupApplicationSettingsServiceMock(DateTime latestTourChangeDateTime) + { + Mock applicationSettingsServiceMock = new(); + applicationSettingsServiceMock.Setup( + s => s.GetLatestTourChangeDateTimeAsync( + It.IsAny())) + .ReturnsAsync(latestTourChangeDateTime); + + return applicationSettingsServiceMock; + } + + private static Mock SetupAuthenticationDelegateMock( + UserLoginClientType userLoginClientType = UserLoginClientType.Web, + string authenticatedUserId = AuthenticatedUserId) + { + Mock authenticationDelegateMock = new(); + + authenticationDelegateMock.Setup( + s => s.FetchAuthenticatedUserClientType()) + .Returns(userLoginClientType); + + authenticationDelegateMock.Setup( + s => s.FetchAuthenticatedUserId()) + .Returns(authenticatedUserId); + + return authenticationDelegateMock; + } + + private static Mock SetupLegalAgreementServiceMock(Guid latestTermsOfServiceId) + { + Mock legalAgreementServiceMock = new(); + legalAgreementServiceMock.Setup( + s => s.GetActiveLegalAgreementId( + It.Is(x => x == LegalAgreementType.TermsOfService), + It.IsAny())) + .ReturnsAsync(latestTermsOfServiceId); + + return legalAgreementServiceMock; + } + + private static Mock SetupMessagingVerificationDelegateMock( + MessagingVerification emailAddressInvite, + MessagingVerification smsNumberInvite) + { + Mock messagingVerificationDelegateMock = new(); + + messagingVerificationDelegateMock.Setup( + s => s.GetLastForUserAsync( + It.IsAny(), + It.Is(x => x == MessagingVerificationType.Email), + It.IsAny())) + .ReturnsAsync(emailAddressInvite); + + messagingVerificationDelegateMock.Setup( + s => s.GetLastForUserAsync( + It.IsAny(), + It.Is(x => x == MessagingVerificationType.Sms), + It.IsAny())) + .ReturnsAsync(smsNumberInvite); + + return messagingVerificationDelegateMock; + } + + private static Mock SetupPatientDetailsServiceMock(PatientDetails patientDetails) + { + Mock patientDetailsServiceMock = new(); + patientDetailsServiceMock.Setup( + s => s.GetPatientAsync( + It.Is(x => x == Hdid), + It.IsAny(), + It.IsAny(), + It.IsAny())) + .ReturnsAsync(patientDetails); + + return patientDetailsServiceMock; + } + + private static Mock SetupUserPreferenceServiceMock( + Dictionary userPreferences) + { + Mock userPreferenceServiceMock = new(); + userPreferenceServiceMock.Setup( + s => s.GetUserPreferencesAsync( + It.Is(x => x == Hdid), + It.IsAny())) + .ReturnsAsync(userPreferences); + + return userPreferenceServiceMock; + } + + private static Mock SetupUserEmailServiceMock(MessagingVerification messagingVerification) + { + Mock userEmailServiceMock = new(); + + userEmailServiceMock.Setup( + s => s.GenerateMessagingVerificationAsync( + It.IsAny(), + It.IsAny(), + It.IsAny(), + It.IsAny(), + It.IsAny())) + .ReturnsAsync(messagingVerification); + + return userEmailServiceMock; + } + + private static Mock SetupUserSmsServiceMock(MessagingVerification messagingVerification) + { + Mock userSmsServiceMock = new(); + + userSmsServiceMock.Setup( + s => s.GenerateMessagingVerification( + It.IsAny(), + It.IsAny(), + It.IsAny())) + .Returns(messagingVerification); + + return userSmsServiceMock; + } + + private static Mock SetupUserPreferencesServiceMock() + { + Mock userPreferenceServiceMock = new(); + userPreferenceServiceMock.Setup( + s => s.GetUserPreferencesAsync( + It.IsAny(), + It.IsAny())) + .ReturnsAsync([]); + + return userPreferenceServiceMock; + } + + private static Mock SetupUserProfileDelegateMock( + UserProfile? userProfile, + IList? userProfileHistoryList = null) + { + Mock userProfileDelegateMock = new(); + userProfileDelegateMock.Setup( + s => s.GetUserProfileAsync( + It.IsAny(), + It.IsAny(), + It.IsAny())) + .ReturnsAsync(userProfile); + + if (userProfile != null) + { + userProfileHistoryList ??= + [ + GenerateUserProfileHistory(loginDate: userProfile.LastLoginDateTime, daysFromLoginDate: 1), + GenerateUserProfileHistory(loginDate: userProfile.LastLoginDateTime, daysFromLoginDate: 2), + ]; + + userProfileDelegateMock.Setup( + s => s.GetUserProfileHistoryListAsync( + It.IsAny(), + It.IsAny(), + It.IsAny())) + .ReturnsAsync(userProfileHistoryList); + } + + return userProfileDelegateMock; + } + + private static Mock SetupUserProfileDelegateMock( + Mock? userProfileDelegateMock = null, + DbResult? insertProfileResult = null, + DbResult? updateProfileResult = null) + { + userProfileDelegateMock ??= new(); + + if (insertProfileResult != null) + { + userProfileDelegateMock.Setup( + s => s.InsertUserProfileAsync( + It.IsAny(), + It.IsAny(), + It.IsAny())) + .ReturnsAsync(insertProfileResult); + } + + if (updateProfileResult != null) + { + userProfileDelegateMock.Setup( + s => s.UpdateAsync( + It.IsAny(), + It.IsAny(), + It.IsAny())) + .ReturnsAsync(updateProfileResult); + } + + return userProfileDelegateMock; + } + + private static BaseUserProfileServiceMock SetupUpdateAcceptedTermsMock(DbStatusCode profileUpdateStatus) + { + UserProfile userProfile = GenerateUserProfile(); + Mock userProfileDelegateMock = SetupUserProfileDelegateMock(userProfile); + + DbResult updateProfileResult = GenerateUserProfileDbResult(profileUpdateStatus, userProfile); + SetupUserProfileDelegateMock(userProfileDelegateMock, updateProfileResult: updateProfileResult); + + IUserProfileServiceV2 service = GetUserProfileService( + userProfileDelegateMock: userProfileDelegateMock); + + if (profileUpdateStatus == DbStatusCode.Updated) + { + VerifyMock verifyMock = SetupVerifyMock( + userProfileDelegateMock: userProfileDelegateMock, + expectUserProfileUpdate: true); + + return new UpdateAcceptedTermsMock(service, Hdid, TermsOfServiceGuid, verifyMock); + } + + return new UpdateAcceptedTermsThrowsExceptionMock(service, Hdid, TermsOfServiceGuid, typeof(DatabaseException)); + } + + private static BaseUserProfileServiceMock SetupCloseUserProfileMock( + bool userProfileExists = true, + DateTime? closedDateTime = null, + DbStatusCode? profileUpdateStatus = null) + { + UserProfile? userProfile = + userProfileExists ? GenerateUserProfile(closedDateTime: closedDateTime, email: EmailAddress) : null; + Mock userProfileDelegateMock = SetupUserProfileDelegateMock(userProfile); + + if (profileUpdateStatus != null) + { + DbResult updateProfileResult = GenerateUserProfileDbResult(profileUpdateStatus.Value, userProfile); + SetupUserProfileDelegateMock(userProfileDelegateMock, updateProfileResult: updateProfileResult); + } + + Mock authenticationDelegateMock = SetupAuthenticationDelegateMock(); + Mock emailQueueServiceMock = new(); + + IUserProfileServiceV2 service = GetUserProfileService( + userProfileDelegateMock: userProfileDelegateMock, + authenticationDelegateMock: authenticationDelegateMock, + emailQueueServiceMock: emailQueueServiceMock); + + if (closedDateTime != null || profileUpdateStatus == DbStatusCode.Updated) + { + VerifyMock verifyMock = SetupVerifyMock( + userProfileDelegateMock: userProfileDelegateMock, + emailQueueServiceMock: emailQueueServiceMock, + expectUserProfileUpdate: closedDateTime == null, + expectQueueNewEmailByTemplate: closedDateTime == null); + + return new CloseUserProfileMock(service, Hdid, verifyMock); + } + + Type expectedType = userProfileExists ? typeof(DatabaseException) : typeof(NotFoundException); + + return new CloseUserProfileThrowsExceptionMock(service, Hdid, expectedType); + } + + private static CreateUserProfileMock SetupCreateUserProfileMock( + string? requestedSmsNumber, + string? requestedEmailAddress, + string? jwtEmailAddress, + int minPatientAge, + int patientAge, + bool accountsChangeFeedEnabled, + bool notificationsChangeFeedEnabled) + { + DateTime currentUtcDate = DateTime.UtcNow.Date; + + CreateUserRequest createUserRequest = new() + { + Profile = new(Hdid, Guid.NewGuid(), requestedSmsNumber, requestedEmailAddress), + }; + + PatientDetails patientDetails = GeneratePatientDetails(birthDate: DateOnly.FromDateTime(GenerateBirthDate(patientAge))); + Mock patientDetailsServiceMock = SetupPatientDetailsServiceMock(patientDetails); + + MessagingVerification emailVerification = GenerateMessagingVerification(emailAddress: requestedEmailAddress); + Mock userEmailServiceMock = SetupUserEmailServiceMock(emailVerification); + + MessagingVerification smsVerification = GenerateMessagingVerification(smsNumber: requestedSmsNumber); + Mock userSmsServiceMock = SetupUserSmsServiceMock(smsVerification); + + Mock emailQueueServiceMock = new(); + + UserProfile insertUserProfile = GenerateUserProfile( + loginDate: currentUtcDate, + email: requestedEmailAddress, + smsNumber: requestedSmsNumber); + DbResult insertProfileResult = GenerateUserProfileDbResult(DbStatusCode.Created, insertUserProfile); + Mock userProfileDelegateMock = SetupUserProfileDelegateMock(insertProfileResult: insertProfileResult); + + Mock userPreferenceServiceMock = SetupUserPreferencesServiceMock(); + + Mock messagingVerificationDelegateMock = new(); + Mock messageSenderMock = new(); + + Mock notificationSettingsServiceMock = new(); + + IConfigurationRoot configuration = GetIConfiguration( + minPatientAge, + accountsChangeFeedEnabled: accountsChangeFeedEnabled, + notificationsChangeFeedEnabled: notificationsChangeFeedEnabled); + + IUserProfileServiceV2 service = GetUserProfileService( + patientDetailsServiceMock, + userSmsServiceMock: userSmsServiceMock, + userEmailServiceMock: userEmailServiceMock, + emailQueueServiceMock: emailQueueServiceMock, + notificationSettingsServiceMock: notificationSettingsServiceMock, + userProfileDelegateMock: userProfileDelegateMock, + userPreferenceServiceMock: userPreferenceServiceMock, + messagingVerificationDelegateMock: messagingVerificationDelegateMock, + messageSenderMock: messageSenderMock, + configurationRoot: configuration); + + UserProfileModel expected = new() + { + HdId = Hdid, + TermsOfServiceId = TermsOfServiceGuid, + Email = requestedEmailAddress, + IsEmailVerified = !string.IsNullOrWhiteSpace(requestedEmailAddress), + AcceptedTermsOfService = true, + SmsNumber = requestedSmsNumber, + IsSmsNumberVerified = !string.IsNullOrWhiteSpace(requestedSmsNumber), + HasTermsOfServiceUpdated = true, + HasTourUpdated = false, + LastLoginDateTime = currentUtcDate, + LastLoginDateTimes = [currentUtcDate], + BetaFeatures = [GatewayApi.Constants.BetaFeature.Salesforce], + }; + + bool isEmailVerified = + !string.IsNullOrWhiteSpace(requestedEmailAddress) + && string.Equals(requestedEmailAddress, jwtEmailAddress, StringComparison.OrdinalIgnoreCase); + + VerifyMock verifyMock = SetupVerifyMock( + messagingVerificationDelegateMock, + userProfileDelegateMock, + notificationSettingsServiceMock, + emailQueueServiceMock, + messageSenderMock, + !string.IsNullOrWhiteSpace(requestedSmsNumber), + !string.IsNullOrWhiteSpace(requestedEmailAddress), + expectQueueNotificationSettings: true, + expectQueueNewEmailByEntity: !isEmailVerified && !string.IsNullOrWhiteSpace(requestedEmailAddress), + expectSendAccountCreated: accountsChangeFeedEnabled, + expectSendNotificationChannelVerifiedEvent: isEmailVerified && notificationsChangeFeedEnabled); + + return new(service, createUserRequest, DateTime.Today, jwtEmailAddress, expected, verifyMock); + } + + private static CreateUserProfileThrowsExceptionMock SetupCreateUserProfileThrowsExceptionMock( + string? requestedSmsNumber, + int minPatientAge, + int patientAge, + DbStatusCode? profileInsertStatus) + { + CreateUserRequest createUserRequest = new() + { + Profile = new(Hdid, Guid.NewGuid(), requestedSmsNumber, EmailAddress), + }; + + PatientDetails patientDetails = GeneratePatientDetails(birthDate: DateOnly.FromDateTime(GenerateBirthDate(patientAge))); + Mock patientDetailsServiceMock = SetupPatientDetailsServiceMock(patientDetails); + + MessagingVerification emailVerification = GenerateMessagingVerification(emailAddress: EmailAddress); + Mock userEmailServiceMock = SetupUserEmailServiceMock(emailVerification); + + MessagingVerification smsVerification = GenerateMessagingVerification(smsNumber: requestedSmsNumber); + Mock userSmsServiceMock = SetupUserSmsServiceMock(smsVerification); + + Mock emailQueueServiceMock = new(); + + UserProfile? insertUserProfile = profileInsertStatus == DbStatusCode.Created ? GenerateUserProfile() : null; + DbResult? insertProfileResult = + profileInsertStatus != null ? GenerateUserProfileDbResult(profileInsertStatus.Value, insertUserProfile) : null; + Mock userProfileDelegateMock = SetupUserProfileDelegateMock(insertProfileResult: insertProfileResult); + + Mock userPreferenceServiceMock = SetupUserPreferencesServiceMock(); + + Mock messagingVerificationDelegateMock = new(); + Mock messageSenderMock = new(); + + Mock notificationSettingsServiceMock = new(); + + IConfigurationRoot configuration = GetIConfiguration( + minPatientAge: minPatientAge); + + IUserProfileServiceV2 service = GetUserProfileService( + patientDetailsServiceMock, + userSmsServiceMock: userSmsServiceMock, + userEmailServiceMock: userEmailServiceMock, + emailQueueServiceMock: emailQueueServiceMock, + notificationSettingsServiceMock: notificationSettingsServiceMock, + userProfileDelegateMock: userProfileDelegateMock, + userPreferenceServiceMock: userPreferenceServiceMock, + messagingVerificationDelegateMock: messagingVerificationDelegateMock, + messageSenderMock: messageSenderMock, + configurationRoot: configuration); + + Type expected = profileInsertStatus == DbStatusCode.Error ? typeof(DatabaseException) : typeof(ValidationException); + + return new(service, createUserRequest, DateTime.Today, EmailAddress, expected); + } + + private static PhoneNumberValidMock SetupPhoneNumberValidMock(string phoneNumber, bool valid) + { + IUserProfileServiceV2 service = GetUserProfileService(configurationRoot: GetIConfiguration()); + return new(service, phoneNumber, valid); + } + + private static BaseUserProfileServiceMock SetupRecoverUserProfileMock( + bool userProfileExists = true, + DateTime? profileClosedDateTime = null, + DbStatusCode? profileUpdateStatus = null) + { + UserProfile? userProfile = userProfileExists + ? GenerateUserProfile(closedDateTime: profileClosedDateTime, email: EmailAddress) + : null; + + Mock userProfileDelegateMock = SetupUserProfileDelegateMock(userProfile: userProfile); + + if (profileUpdateStatus != null) + { + DbResult updateProfileResult = GenerateUserProfileDbResult(profileUpdateStatus.Value, userProfile); + SetupUserProfileDelegateMock(userProfileDelegateMock, updateProfileResult: updateProfileResult); + } + + Mock emailQueueServiceMock = new(); + + IUserProfileServiceV2 service = GetUserProfileService( + emailQueueServiceMock: emailQueueServiceMock, + userProfileDelegateMock: userProfileDelegateMock); + + VerifyMock verifyMock = SetupVerifyMock( + userProfileDelegateMock: userProfileDelegateMock, + emailQueueServiceMock: emailQueueServiceMock, + expectUserProfileUpdate: profileUpdateStatus == DbStatusCode.Updated, + expectQueueNewEmailByTemplate: profileUpdateStatus == DbStatusCode.Updated); + + if (userProfileExists) + { + if (profileUpdateStatus == DbStatusCode.Error) + { + return new RecoverUserProfileThrowsExceptionMock(service, Hdid, typeof(DatabaseException)); + } + + return new RecoverUserProfileMock(service, Hdid, verifyMock); + } + + return new RecoverUserProfileThrowsExceptionMock(service, Hdid, typeof(NotFoundException)); + } + + private static UserProfileMock SetupUserProfileMock( + bool userProfileExists = true, + bool jwtAuthTimeIsDifferent = true, + bool profileEmailAddressExists = true, + bool profileSmsNumberExists = true, + bool tourChangeDateIsLatest = true) + { + string? smsNumber = profileSmsNumberExists ? SmsNumber : null; + string? emailAddress = profileEmailAddressExists ? EmailAddress : null; + + Guid latestTermsOfServiceId = Guid.NewGuid(); + DateTime currentUtcDate = DateTime.UtcNow.Date; + DateTime birthDate = GenerateBirthDate(); + + DateTime jwtAuthTime = jwtAuthTimeIsDifferent + ? currentUtcDate.AddHours(1) + : currentUtcDate; + + DateTime latestTourChangeDateTime = tourChangeDateIsLatest + ? currentUtcDate + : currentUtcDate.AddDays(-5); + + UserProfile? userProfile = userProfileExists + ? GenerateUserProfile(loginDate: currentUtcDate, email: emailAddress, smsNumber: smsNumber) + : null; + + IList userProfileHistoryList = + [ + GenerateUserProfileHistory(loginDate: currentUtcDate, daysFromLoginDate: 1), + GenerateUserProfileHistory(loginDate: currentUtcDate, daysFromLoginDate: 2), + ]; + + Mock userProfileDelegateMock = + SetupUserProfileDelegateMock( + userProfile, + userProfileHistoryList); + + Mock authenticationDelegateMock = SetupAuthenticationDelegateMock(); + + PatientDetails patientDetails = GeneratePatientDetails(birthDate: DateOnly.FromDateTime(birthDate)); + Mock patientDetailsServiceMock = SetupPatientDetailsServiceMock(patientDetails); + + Mock userPreferenceServiceMock = SetupUserPreferenceServiceMock([]); + + Mock applicationSettingsServiceMock = + SetupApplicationSettingsServiceMock(latestTourChangeDateTime); + + Mock legalAgreementServiceMock = + SetupLegalAgreementServiceMock(latestTermsOfServiceId); + + MessagingVerification emailAddressVerification = GenerateMessagingVerification(emailAddress: EmailAddress); + MessagingVerification smsNumberVerification = GenerateMessagingVerification(smsNumber: SmsNumber); + Mock messagingVerificationDelegateMock = + SetupMessagingVerificationDelegateMock(emailAddressVerification, smsNumberVerification); + + IConfigurationRoot configuration = GetIConfiguration(); + + Mock userEmailServiceMock = new(); + Mock notificationSettingsServiceMock = new(); + Mock messageSenderMock = new(); + + IUserProfileServiceV2 service = GetUserProfileService( + patientDetailsServiceMock, + userEmailServiceMock, + notificationSettingsServiceMock: notificationSettingsServiceMock, + userProfileDelegateMock: userProfileDelegateMock, + legalAgreementServiceMock: legalAgreementServiceMock, + messagingVerificationDelegateMock: messagingVerificationDelegateMock, + userPreferenceServiceMock: userPreferenceServiceMock, + configurationRoot: configuration, + authenticationDelegateMock: authenticationDelegateMock, + applicationSettingsServiceMock: applicationSettingsServiceMock, + messageSenderMock: messageSenderMock); + + UserProfileModel expected = userProfileExists + ? new UserProfileModel + { + HdId = Hdid, + TermsOfServiceId = TermsOfServiceGuid, + Email = EmailAddress, + AcceptedTermsOfService = true, + IsEmailVerified = emailAddress != null, + IsSmsNumberVerified = smsNumber != null, + SmsNumber = SmsNumber, + HasTermsOfServiceUpdated = true, + HasTourUpdated = tourChangeDateIsLatest, + LastLoginDateTime = jwtAuthTimeIsDifferent ? jwtAuthTime : currentUtcDate, + LastLoginDateTimes = + [ + jwtAuthTimeIsDifferent ? jwtAuthTime : currentUtcDate, + userProfileHistoryList[0].LastLoginDateTime, + userProfileHistoryList[1].LastLoginDateTime, + ], + BetaFeatures = [GatewayApi.Constants.BetaFeature.Salesforce], + } + : new(); + + VerifyMock verifyMock = SetupVerifyMock( + userProfileDelegateMock: userProfileDelegateMock, + expectUserProfileUpdate: jwtAuthTimeIsDifferent); + + return new(service, Hdid, jwtAuthTime, expected, verifyMock); + } + + private static ValidateEligibilityMock SetupValidateEligibilityMock( + int minPatientAge = 0, + int patientAge = 0) + { + IConfigurationRoot configuration = GetIConfiguration( + minPatientAge: minPatientAge); + + DateTime birthDate = GenerateBirthDate(patientAge); + PatientDetails patientDetails = GeneratePatientDetails(birthDate: DateOnly.FromDateTime(birthDate)); + Mock patientDetailsServiceMock = SetupPatientDetailsServiceMock(patientDetails); + + IUserProfileServiceV2 service = GetUserProfileService( + patientDetailsServiceMock, + configurationRoot: configuration); + + bool expected = minPatientAge == 0 || patientAge >= minPatientAge; + + return new(service, Hdid, expected); + } + + private static VerifyMock SetupVerifyMock( + Mock? messagingVerificationDelegateMock = null, + Mock? userProfileDelegateMock = null, + Mock? notificationSettingsServiceMock = null, + Mock? emailQueueServiceMock = null, + Mock? messageSenderMock = null, + bool expectSmsVerificationInsert = false, + bool expectEmailVerificationInsert = false, + bool expectUserProfileUpdate = false, + bool expectQueueNotificationSettings = false, + bool expectQueueNewEmailByTemplate = false, + bool expectQueueNewEmailByEntity = false, + bool expectSendAccountCreated = false, + bool expectSendNotificationChannelVerifiedEvent = false) + { + messagingVerificationDelegateMock ??= new(); + userProfileDelegateMock ??= new(); + notificationSettingsServiceMock ??= new(); + emailQueueServiceMock ??= new(); + messageSenderMock ??= new(); + + return new( + messagingVerificationDelegateMock, + userProfileDelegateMock, + notificationSettingsServiceMock, + emailQueueServiceMock, + messageSenderMock, + Convert(expectSmsVerificationInsert), // ExpectedSmsVerificationInsertTime + Convert(expectEmailVerificationInsert), // ExpectedEmailVerificationInsertTime + Convert(expectUserProfileUpdate), // ExpectedUserProfileUpdateTimes + Convert(expectQueueNotificationSettings), // ExpectedQueueNotificationSettingsTimes + Convert(expectQueueNewEmailByTemplate), // ExpectedQueueNewEmailByTemplateTimes + Convert(expectQueueNewEmailByEntity), // ExpectedQueueNewEmailByEntityTimes + Convert(expectSendAccountCreated), // ExpectedSendAccountCreatedEventTimes + Convert(expectSendNotificationChannelVerifiedEvent)); // ExpectedSendNotificationChannelVerifiedEventTimes + + static Times Convert(bool expect) + { + return expect ? Times.Once() : Times.Never(); + } + } + + private static IUserProfileServiceV2 GetUserProfileService( + Mock? patientDetailsServiceMock = null, + Mock? userEmailServiceMock = null, + Mock? userSmsServiceMock = null, + Mock? emailQueueServiceMock = null, + Mock? notificationSettingsServiceMock = null, + Mock? userProfileDelegateMock = null, + Mock? userPreferenceServiceMock = null, + Mock? legalAgreementServiceMock = null, + Mock? messagingVerificationDelegateMock = null, + Mock? authenticationDelegateMock = null, + Mock? applicationSettingsServiceMock = null, + Mock? patientRepositoryMock = null, + Mock? messageSenderMock = null, + IConfigurationRoot? configurationRoot = null) + { + patientDetailsServiceMock = patientDetailsServiceMock ?? new(); + userEmailServiceMock = userEmailServiceMock ?? new(); + userSmsServiceMock = userSmsServiceMock ?? new(); + emailQueueServiceMock = emailQueueServiceMock ?? new(); + notificationSettingsServiceMock = notificationSettingsServiceMock ?? new(); + userProfileDelegateMock = userProfileDelegateMock ?? new(); + userPreferenceServiceMock = userPreferenceServiceMock ?? new(); + legalAgreementServiceMock = legalAgreementServiceMock ?? new(); + messagingVerificationDelegateMock = messagingVerificationDelegateMock ?? new(); + authenticationDelegateMock = authenticationDelegateMock ?? new(); + applicationSettingsServiceMock = applicationSettingsServiceMock ?? new(); + patientRepositoryMock = patientRepositoryMock ?? new(); + messageSenderMock = messageSenderMock ?? new(); + configurationRoot = configurationRoot ?? GetIConfiguration(); + + return new UserProfileServiceV2( + new Mock>().Object, + patientDetailsServiceMock.Object, + userEmailServiceMock.Object, + userSmsServiceMock.Object, + emailQueueServiceMock.Object, + notificationSettingsServiceMock.Object, + userProfileDelegateMock.Object, + userPreferenceServiceMock.Object, + legalAgreementServiceMock.Object, + messagingVerificationDelegateMock.Object, + new Mock().Object, + configurationRoot, + MappingService, + authenticationDelegateMock.Object, + applicationSettingsServiceMock.Object, + patientRepositoryMock.Object, + messageSenderMock.Object); + } + + private abstract record BaseUserProfileServiceMock; + + private sealed record UserProfileMock( + IUserProfileServiceV2 Service, + string Hdid, + DateTime JwtAuthTime, + UserProfileModel Expected, + VerifyMock Verify); + + private sealed record CreateUserProfileMock( + IUserProfileServiceV2 Service, + CreateUserRequest CreateProfileRequest, + DateTime JwtAuthTime, + string? JwtEmailAddress, + UserProfileModel Expected, + VerifyMock Verify); + + private sealed record CreateUserProfileThrowsExceptionMock( + IUserProfileServiceV2 Service, + CreateUserRequest CreateProfileRequest, + DateTime JwtAuthTime, + string? JwtEmailAddress, + Type Expected); + + private sealed record UpdateAcceptedTermsMock( + IUserProfileServiceV2 Service, + string Hdid, + Guid TermsOfServiceId, + VerifyMock Verify) : BaseUserProfileServiceMock; + + private sealed record UpdateAcceptedTermsThrowsExceptionMock( + IUserProfileServiceV2 Service, + string Hdid, + Guid TermsOfServiceId, + Type Expected) : BaseUserProfileServiceMock; + + private sealed record CloseUserProfileMock( + IUserProfileServiceV2 Service, + string Hdid, + VerifyMock Verify) : BaseUserProfileServiceMock; + + private sealed record CloseUserProfileThrowsExceptionMock( + IUserProfileServiceV2 Service, + string Hdid, + Type Expected) : BaseUserProfileServiceMock; + + private sealed record PhoneNumberValidMock( + IUserProfileServiceV2 Service, + string PhoneNumber, + bool Expected); + + private sealed record RecoverUserProfileMock( + IUserProfileServiceV2 Service, + string Hdid, + VerifyMock Verify) : BaseUserProfileServiceMock; + + private sealed record ValidateEligibilityMock( + IUserProfileServiceV2 Service, + string Hdid, + bool Expected); + + private sealed record RecoverUserProfileThrowsExceptionMock( + IUserProfileServiceV2 Service, + string Hdid, + Type Expected) : BaseUserProfileServiceMock; + + private sealed record VerifyMock( + Mock MessagingVerificationDelegateMock, + Mock UserProfileDelegateMock, + Mock NotificationSettingsServiceMock, + Mock EmailQueueServiceMock, + Mock MessageSenderMock, + Times ExpectedSmsVerificationInsertTimes, + Times ExpectedEmailVerificationInsertTimes, + Times ExpectedUserProfileUpdateTimes, + Times ExpectedQueueNotificationSettingsTimes, + Times ExpectedQueueNewEmailByTemplateTimes, + Times ExpectedQueueNewEmailByEntityTimes, + Times ExpectedSendAccountCreatedEventTimes, + Times ExpectedSendNotificationChannelVerifiedEventTimes); + } +} diff --git a/Apps/GatewayApi/test/unit/Services.Test/UserSmsServiceTests.cs b/Apps/GatewayApi/test/unit/Services.Test/UserSmsServiceTests.cs index 84c454bc0f..23c4f93c85 100644 --- a/Apps/GatewayApi/test/unit/Services.Test/UserSmsServiceTests.cs +++ b/Apps/GatewayApi/test/unit/Services.Test/UserSmsServiceTests.cs @@ -149,7 +149,7 @@ public async Task ShouldValidateUpdate(bool userProfileExists, string sms, bool messagingVerificationDelegateMock .Verify( - s => s.ExpireAsync(It.IsAny(), It.IsAny(), It.IsAny()), + s => s.ExpireAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); messagingVerificationDelegateMock @@ -220,7 +220,8 @@ private static IUserSmsService GetUserSmsService( userProfileDelegateMock ??= new(); userProfileDelegateMock.Setup(s => s.GetUserProfileAsync(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(userProfile); - userProfileDelegateMock.Setup(s => s.UpdateAsync(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(new DbResult { Status = DbStatusCode.Updated }); + userProfileDelegateMock.Setup(s => s.UpdateAsync(It.IsAny(), It.IsAny(), It.IsAny())) + .ReturnsAsync(new DbResult { Status = DbStatusCode.Updated }); messageSenderMock ??= new(); notificationSettingsServiceMock ??= new(); diff --git a/Apps/JobScheduler/src/Tasks/FinalizeIncompleteUserRegistrations.cs b/Apps/JobScheduler/src/Tasks/FinalizeIncompleteUserRegistrations.cs new file mode 100644 index 0000000000..b02b88f439 --- /dev/null +++ b/Apps/JobScheduler/src/Tasks/FinalizeIncompleteUserRegistrations.cs @@ -0,0 +1,175 @@ +// ------------------------------------------------------------------------- +// Copyright © 2019 Province of British Columbia +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ------------------------------------------------------------------------- +namespace HealthGateway.JobScheduler.Tasks +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using HealthGateway.Common.Data.Constants; + using HealthGateway.Common.Messaging; + using HealthGateway.Common.Models; + using HealthGateway.Common.Models.Events; + using HealthGateway.Common.Services; + using HealthGateway.Database.Context; + using HealthGateway.Database.Models; + using Microsoft.EntityFrameworkCore; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.Logging; + + /// + /// Resolves issues relating to registrations that failed after creating the user profile. + /// + /// The injected DB context. + /// The injected logger. + /// The injected configuration. + /// The injected message sender. + /// The injected notification settings service. + public class FinalizeIncompleteUserRegistrations( + GatewayDbContext dbContext, + ILogger logger, + IConfiguration configuration, + IMessageSender messageSender, + INotificationSettingsService notificationSettingsService) : IOneTimeTask + { + private const string BatchSizeKey = "BatchSize"; + private const string JobKey = "OneTime"; + private static readonly DateTime StartDateTime = new(2024, 6, 27, 21, 49, 6, DateTimeKind.Utc); + private static readonly DateTime HotfixDateTime = new(2024, 6, 28, 21, 33, 21, DateTimeKind.Utc); + private static readonly DateTime CurrentDateTime = DateTime.UtcNow; + + private readonly int batchSize = configuration.GetValue($"{JobKey}:{BatchSizeKey}", 5000); + + /// + public async Task RunAsync(CancellationToken ct = default) + { + logger.LogDebug("Performing Task {Name} started", nameof(FinalizeIncompleteUserRegistrations)); + + await this.SendAccountCreatedEventsAsync(ct); + await this.UpdateEmailAddressesAsync(ct); + await this.QueueNotificationSettingsRequestsAsync(ct); + + logger.LogDebug("Performing Task {Name} finished", nameof(FinalizeIncompleteUserRegistrations)); + } + + private async Task SendAccountCreatedEventsAsync(CancellationToken ct) + { + logger.LogInformation("Sending AccountCreatedEvents"); + DateTime extendedStartDateTime = StartDateTime.AddMinutes(-5); + DateTime extendedHotfixDateTime = HotfixDateTime.AddMinutes(5); + + IList profiles = await dbContext.UserProfile + .AsNoTracking() + .Where(p => p.CreatedDateTime > extendedStartDateTime && p.CreatedDateTime < extendedHotfixDateTime) + .ToListAsync(ct); + + foreach (UserProfile profile in profiles) + { + await this.SendAccountCreatedEventAsync(profile.HdId, profile.CreatedDateTime, ct); + } + + logger.LogInformation("Sent AccountCreatedEvents for {Count} profiles", profiles.Count); + } + + private async Task UpdateEmailAddressesAsync(CancellationToken ct) + { + DateTime extendedHotfixDateTime = HotfixDateTime.AddMinutes(-5); + + int iteration = 0; + IList profiles; + do + { + profiles = await dbContext.UserProfile + .Where(p => p.CreatedDateTime > extendedHotfixDateTime && p.CreatedDateTime < CurrentDateTime) + .Where(p => string.IsNullOrEmpty(p.Email)) + .Skip(iteration * this.batchSize) + .Take(this.batchSize) + .Include(p => p.Verifications) + .ToListAsync(ct); + + foreach (UserProfile profile in profiles) + { + MessagingVerification? lastEmailVerification = profile.Verifications + .Where(v => v.VerificationType == MessagingVerificationType.Email) + .MaxBy(v => v.UpdatedDateTime); + + if (lastEmailVerification is { Validated: false, Deleted: false } && lastEmailVerification.CreatedDateTime == lastEmailVerification.UpdatedDateTime) + { + logger.LogInformation("Setting validated email address for {Hdid}", profile.HdId); + lastEmailVerification.Validated = true; + profile.Email = lastEmailVerification.EmailAddress; + } + } + + logger.LogInformation("Addressed potentially empty email addresses for {Count} profiles", profiles.Count); + await dbContext.SaveChangesAsync(ct); // commit after every iteration + iteration++; + } + while (profiles.Count == this.batchSize); + } + + private async Task QueueNotificationSettingsRequestsAsync(CancellationToken ct) + { + logger.LogInformation("Queuing NotificationSettingsRequests"); + DateTime extendedStartDateTime = StartDateTime.AddMinutes(-5); + + int iteration = 0; + IList profiles; + do + { + profiles = await dbContext.UserProfile + .AsNoTracking() + .Where(p => p.CreatedDateTime > extendedStartDateTime && p.CreatedDateTime < CurrentDateTime) + .Skip(iteration * this.batchSize) + .Take(this.batchSize) + .Include(p => p.Verifications) + .ToListAsync(ct); + + foreach (UserProfile profile in profiles) + { + MessagingVerification? lastSmsVerification = profile.Verifications + .Where(v => v.VerificationType == MessagingVerificationType.Sms) + .MaxBy(v => v.UpdatedDateTime); + + NotificationSettingsRequest request = new(profile, profile.Email, profile.SmsNumber); + if (string.IsNullOrEmpty(profile.SmsNumber) && lastSmsVerification is { Validated: false, Deleted: false }) + { + request.SmsVerificationCode = lastSmsVerification.SmsValidationCode; + } + + await this.QueueNotificationSettingsRequestAsync(request, ct); + } + + logger.LogInformation("Queued NotificationSettingsRequests for {Count} profiles", profiles.Count); + iteration++; + } + while (profiles.Count == this.batchSize); + } + + private async Task SendAccountCreatedEventAsync(string hdid, DateTime createdDateTime, CancellationToken ct) + { + logger.LogInformation("Sending AccountCreatedEvent for {Hdid}", hdid); + await messageSender.SendAsync([new MessageEnvelope(new AccountCreatedEvent(hdid, createdDateTime), hdid)], ct); + } + + private async Task QueueNotificationSettingsRequestAsync(NotificationSettingsRequest request, CancellationToken ct) + { + logger.LogInformation("Queuing NotificationSettingsRequest for {Hdid}", request.SubjectHdid); + await notificationSettingsService.QueueNotificationSettingsAsync(request, ct); + } + } +} diff --git a/Testing/functional/tests/cypress/db/seed-test.sql b/Testing/functional/tests/cypress/db/seed-test.sql new file mode 100644 index 0000000000..b965252e71 --- /dev/null +++ b/Testing/functional/tests/cypress/db/seed-test.sql @@ -0,0 +1,1746 @@ +/* Data Cleanup */ +TRUNCATE gateway."AuditEvent"; +TRUNCATE gateway."UserProfile" CASCADE; +TRUNCATE gateway."UserProfileHistory" CASCADE; +TRUNCATE gateway."Communication" CASCADE; +TRUNCATE gateway."ResourceDelegate" CASCADE; +TRUNCATE gateway."ResourceDelegateHistory" CASCADE; +TRUNCATE gateway."UserPreference" CASCADE; +TRUNCATE gateway."Comment" CASCADE; +TRUNCATE gateway."MessagingVerification" CASCADE; +TRUNCATE gateway."Note" CASCADE; +TRUNCATE gateway."Rating" CASCADE; +TRUNCATE gateway."Email" CASCADE; +TRUNCATE gateway."AdminTag" CASCADE; +TRUNCATE gateway."UserFeedback" CASCADE; +TRUNCATE gateway."Dependent" CASCADE; +TRUNCATE gateway."AgentAudit" CASCADE; +TRUNCATE gateway."BlockedAccess" CASCADE; +TRUNCATE gateway."BetaFeatureAccess" CASCADE; +TRUNCATE gateway."Outbox" CASCADE; + + +/* Registered HealthGateway User - Keycloak User (healthgateway) */ +INSERT INTO gateway."UserProfile"( + "UserProfileId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "TermsOfServiceId", + "Email", + "ClosedDateTime", + "IdentityManagementId", + "LastLoginDateTime", + "EncryptionKey", + "SMSNumber", + "YearOfBirth", + "LastLoginClientCode") +VALUES ( + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + 'System', + current_timestamp - INTERVAL '2 day', + 'System', + current_timestamp, + 'f5acf1de-2f5f-431e-955d-a837d5854182', + 'nobody@healthgateway.gov.bc.ca', + null, + null, + current_timestamp, + 'CwqU7+gCkL3jMWWcUpq80Oh42QejXOwI+Ov0tmsVWBI=', + null, + '1967', + 'Salesforce' +); + +/* Protected User - Keycloak User (protected) */ +INSERT INTO gateway."UserProfile"( + "UserProfileId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "TermsOfServiceId", + "Email", + "ClosedDateTime", + "IdentityManagementId", + "LastLoginDateTime", + "EncryptionKey", + "SMSNumber", + "YearOfBirth", + "LastLoginClientCode") +VALUES ( + 'RD33Y2LJEUZCY2TCMOIECUTKS3E62MEQ62CSUL6Q553IHHBI3AWQ', + 'System', + current_timestamp, + 'System', + current_timestamp, + 'f5acf1de-2f5f-431e-955d-a837d5854182', + 'somebody@healthgateway.gov.bc.ca', + null, + null, + current_timestamp, + 'iHa5atSWqppGzWsR1Z8nbL9OHJamPHLMwYqdKmsf4jU=', + null, + '1995', + 'iOS' +); + +/* Invaliddoses - Keycloak User (hthgtwy20) */ +INSERT INTO gateway."UserProfile"( + "UserProfileId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "TermsOfServiceId", + "Email", + "ClosedDateTime", + "IdentityManagementId", + "LastLoginDateTime", + "EncryptionKey", + "SMSNumber", + "YearOfBirth", + "LastLoginClientCode") +VALUES ( + 'DEV4FPEGCXG2NB5K2USBL52S66SC3GOUHWRP3GTXR2BTY5HEC4YA', + 'System', + current_timestamp - INTERVAL '120 day', + 'System', + current_timestamp, + '2fab66e7-37c9-4b03-ba25-e8fad604dc7f', + 'nobody@healthgateway.gov.bc.ca', + null, + null, + current_timestamp, + 'CwqU7+gCkL3jMWWcUpq80Oh42QejXOwI+Ov0tmsVWBI=', + null, + null, + 'Web' +); + +/* Labratory Queued - Keycloak User (hthgtwy09) */ +INSERT INTO gateway."UserProfile"( + "UserProfileId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "TermsOfServiceId", + "Email", + "ClosedDateTime", + "IdentityManagementId", + "LastLoginDateTime", + "EncryptionKey", + "SMSNumber", + "YearOfBirth", + "LastLoginClientCode") +VALUES ( + '3ZQCSNNC6KVP2GYLA4O3EFZXGUAPWBQHU6ZEB7FXNZJ2WYCLPH3A', + 'System', + current_timestamp, + 'System', + current_timestamp, + '2fab66e7-37c9-4b03-ba25-e8fad604dc7f', + null, + null, + null, + current_timestamp, + 'CwqU7+gCkL3jMWWcUpq80Oh42QejXOwI+Ov0tmsVWBI=', + null, + '1967', + null +); + +/* Notfound - Keycloak User - Keycloak User (hthgtwy03) */ +INSERT INTO gateway."UserProfile"( + "UserProfileId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "TermsOfServiceId", + "Email", + "ClosedDateTime", + "IdentityManagementId", + "LastLoginDateTime", + "EncryptionKey", + "SMSNumber", + "YearOfBirth", + "LastLoginClientCode") +VALUES ( + 'R43YCT4ZY37EIJLW2O5LV2I77BZA3K3M25EUJGWAVGVJ7JKBDKCQ', + 'System', + current_timestamp - INTERVAL '2 day', + 'System', + current_timestamp, + '2fab66e7-37c9-4b03-ba25-e8fad604dc7f', + null, + null, + null, + current_timestamp, + 'KtBm7JYegayKpx5fjwM2RUGZf79JOnNC21NhUrIAzmg=', + null, + '1988', + 'Mobile' +); + +/* User without the latest accepted terms of service - Keycloak User - Keycloak User (hthgtwy04) */ +INSERT INTO gateway."UserProfile"( + "UserProfileId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "TermsOfServiceId", + "Email", + "ClosedDateTime", + "IdentityManagementId", + "LastLoginDateTime", + "EncryptionKey", + "SMSNumber", + "YearOfBirth", + "LastLoginClientCode") +VALUES ( + 'K6HL4VX67CZ2PGSZ2ZOIR4C3PGMFFBW5CIOXM74D6EQ7RYYL7P4A', + 'System', + current_timestamp - INTERVAL '3 day', + 'System', + current_timestamp, + 'c99fd839-b4a2-40f9-b103-529efccd0dcd', + null, + null, + null, + current_timestamp, + 'CwqU7+gCkL3jMWWcUpq80Oh42QejXOwI+Ov0tmsVWBI=', + null, + '2001', + 'Android' +); + +/* PHN: 9735352535 used for admin covid assessment and blocked dataset tests */ +INSERT INTO gateway."UserProfile"( + "UserProfileId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "TermsOfServiceId", + "Email", + "ClosedDateTime", + "IdentityManagementId", + "LastLoginDateTime", + "EncryptionKey", + "SMSNumber", + "YearOfBirth", + "LastLoginClientCode") +VALUES ( + 'GO4DOSMRJ7MFKPPADDZ3FK2MOJ45SFKONJWR67XNLMZQFNEHDKDA', + 'System', + current_timestamp - INTERVAL '1000 day', + 'System', + current_timestamp - INTERVAL '1000 day', + 'c99fd839-b4a2-40f9-b103-529efccd0dcd', + null, + null, + null, + current_timestamp - INTERVAL '1000 day', + 'CwqU7+gCkL3jMWWcUpq80Oh42QejXOwI+Ov0tmsVWBI=', + null, + null, + 'Web' +); + +/* PHN: 9874359198 used for Warning: The person returned is the subject of an potential duplicate */ +INSERT INTO gateway."UserProfile"( + "UserProfileId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "TermsOfServiceId", + "Email", + "ClosedDateTime", + "IdentityManagementId", + "LastLoginDateTime", + "EncryptionKey", + "SMSNumber", + "YearOfBirth", + "LastLoginClientCode") +VALUES ( + 'NW55426', + 'System', + current_timestamp - INTERVAL '1000 day', + 'System', + current_timestamp - INTERVAL '1000 day', + 'c99fd839-b4a2-40f9-b103-529efccd0dcd', + null, + null, + null, + current_timestamp - INTERVAL '1000 day', + 'CwqU7+gCkL3jMWWcUpq80Oh42QejXOwI+Ov0tmsVWBI=', + null, + null, + 'Web' +); + + +/* User (hthgtwy04) - last logged in 1 day ago */ +INSERT INTO gateway."UserProfileHistory"( + "UserProfileHistoryId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "UserProfileId", + "AcceptedTermsOfService", + "Email", + "ClosedDateTime", + "IdentityManagementId", + "LastLoginDateTime", + "Operation", + "OperationDateTime", + "EncryptionKey", + "SMSNumber", + "TermsOfServiceId", + "YearOfBirth", + "LastLoginClientCode") +VALUES ( + uuid_generate_v4(), + 'System', + current_timestamp - INTERVAL '3 day', + 'System', + current_timestamp - INTERVAL '1 day', + 'K6HL4VX67CZ2PGSZ2ZOIR4C3PGMFFBW5CIOXM74D6EQ7RYYL7P4A', + null, + null, + null, + null, + current_timestamp - INTERVAL '1 day', + 'UPDATE_LOGIN', + current_timestamp, + 'CwqU7+gCkL3jMWWcUpq80Oh42QejXOwI+Ov0tmsVWBI=', + null, + 'f5acf1de-2f5f-431e-955d-a837d5854182', + '2001', + 'Web' +); + +/* User (hthgtwy04) - last logged in 2 days ago */ +INSERT INTO gateway."UserProfileHistory"( + "UserProfileHistoryId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "UserProfileId", + "AcceptedTermsOfService", + "Email", + "ClosedDateTime", + "IdentityManagementId", + "LastLoginDateTime", + "Operation", + "OperationDateTime", + "EncryptionKey", + "SMSNumber", + "TermsOfServiceId", + "YearOfBirth", + "LastLoginClientCode") +VALUES ( + uuid_generate_v4(), + 'System', + current_timestamp - INTERVAL '3 day', + 'System', + current_timestamp - INTERVAL '2 day', + 'K6HL4VX67CZ2PGSZ2ZOIR4C3PGMFFBW5CIOXM74D6EQ7RYYL7P4A', + null, + null, + null, + null, + current_timestamp - INTERVAL '2 day', + 'UPDATE_LOGIN', + current_timestamp, + 'CwqU7+gCkL3jMWWcUpq80Oh42QejXOwI+Ov0tmsVWBI=', + null, + 'f5acf1de-2f5f-431e-955d-a837d5854182', + '2001', + 'Web' +); + +/* User (hthgtwy04) - last logged in 3 days ago */ +INSERT INTO gateway."UserProfileHistory"( + "UserProfileHistoryId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "UserProfileId", + "AcceptedTermsOfService", + "Email", + "ClosedDateTime", + "IdentityManagementId", + "LastLoginDateTime", + "Operation", + "OperationDateTime", + "EncryptionKey", + "SMSNumber", + "TermsOfServiceId", + "YearOfBirth", + "LastLoginClientCode") +VALUES ( + uuid_generate_v4(), + 'System', + current_timestamp - INTERVAL '3 day', + 'System', + current_timestamp - INTERVAL '3 day', + 'K6HL4VX67CZ2PGSZ2ZOIR4C3PGMFFBW5CIOXM74D6EQ7RYYL7P4A', + null, + null, + null, + null, + current_timestamp - INTERVAL '3 day', + 'UPDATE_LOGIN', + current_timestamp, + 'CwqU7+gCkL3jMWWcUpq80Oh42QejXOwI+Ov0tmsVWBI=', + null, + 'f5acf1de-2f5f-431e-955d-a837d5854182', + '2001', + 'Mobile' +); + +/* User keycloak (hthgtwy11) - last logged in 1 day ago */ +INSERT INTO gateway."UserProfileHistory"( + "UserProfileHistoryId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "UserProfileId", + "AcceptedTermsOfService", + "Email", + "ClosedDateTime", + "IdentityManagementId", + "LastLoginDateTime", + "Operation", + "OperationDateTime", + "EncryptionKey", + "SMSNumber", + "TermsOfServiceId", + "YearOfBirth", + "LastLoginClientCode") +VALUES ( + uuid_generate_v4(), + 'System', + current_timestamp - INTERVAL '2 day', + 'System', + current_timestamp - INTERVAL '1 day', + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + null, + null, + null, + null, + current_timestamp - INTERVAL '1 day', + 'UPDATE_LOGIN', + current_timestamp, + 'CwqU7+gCkL3jMWWcUpq80Oh42QejXOwI+Ov0tmsVWBI=', + null, + 'f5acf1de-2f5f-431e-955d-a837d5854182', + '1967', + 'Web' +); + +/* User keycloak (hthgtwy11) - last logged in 2 days ago */ +INSERT INTO gateway."UserProfileHistory"( + "UserProfileHistoryId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "UserProfileId", + "AcceptedTermsOfService", + "Email", + "ClosedDateTime", + "IdentityManagementId", + "LastLoginDateTime", + "Operation", + "OperationDateTime", + "EncryptionKey", + "SMSNumber", + "TermsOfServiceId", + "YearOfBirth", + "LastLoginClientCode") +VALUES ( + uuid_generate_v4(), + 'System', + current_timestamp - INTERVAL '2 day', + 'System', + current_timestamp - INTERVAL '2 day', + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + null, + null, + null, + null, + current_timestamp - INTERVAL '2 day', + 'UPDATE_LOGIN', + current_timestamp, + 'CwqU7+gCkL3jMWWcUpq80Oh42QejXOwI+Ov0tmsVWBI=', + null, + 'f5acf1de-2f5f-431e-955d-a837d5854182', + '1967', + 'Web' +); + +/* Notfound - Keycloak User - Last logged in 2 days ago */ +INSERT INTO gateway."UserProfileHistory"( + "UserProfileHistoryId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "UserProfileId", + "AcceptedTermsOfService", + "Email", + "ClosedDateTime", + "IdentityManagementId", + "LastLoginDateTime", + "Operation", + "OperationDateTime", + "EncryptionKey", + "SMSNumber", + "TermsOfServiceId", + "YearOfBirth", + "LastLoginClientCode") +VALUES ( + uuid_generate_v4(), + 'System', + current_timestamp - INTERVAL '2 day', + 'System', + current_timestamp - INTERVAL '2 day', + 'R43YCT4ZY37EIJLW2O5LV2I77BZA3K3M25EUJGWAVGVJ7JKBDKCQ', + null, + null, + null, + null, + current_timestamp - INTERVAL '2 day', + 'UPDATE_LOGIN', + current_timestamp, + 'CwqU7+gCkL3jMWWcUpq80Oh42QejXOwI+Ov0tmsVWBI=', + null, + 'f5acf1de-2f5f-431e-955d-a837d5854182', + '1988', + 'Mobile' +); + +/* Invaliddoses - Keycloak User - Last logged in 120 days ago */ +INSERT INTO gateway."UserProfileHistory"( + "UserProfileHistoryId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "UserProfileId", + "AcceptedTermsOfService", + "Email", + "ClosedDateTime", + "IdentityManagementId", + "LastLoginDateTime", + "Operation", + "OperationDateTime", + "EncryptionKey", + "SMSNumber", + "TermsOfServiceId", + "YearOfBirth", + "LastLoginClientCode") +VALUES ( + uuid_generate_v4(), + 'System', + current_timestamp - INTERVAL '120 day', + 'System', + current_timestamp - INTERVAL '120 day', + 'DEV4FPEGCXG2NB5K2USBL52S66SC3GOUHWRP3GTXR2BTY5HEC4YA', + null, + null, + null, + null, + current_timestamp - INTERVAL '120 day', + 'UPDATE_LOGIN', + current_timestamp, + 'CwqU7+gCkL3jMWWcUpq80Oh42QejXOwI+Ov0tmsVWBI=', + null, + 'f5acf1de-2f5f-431e-955d-a837d5854182', + null, + 'Web' +); + +INSERT INTO gateway."UserProfileHistory"( + "UserProfileHistoryId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "UserProfileId", + "AcceptedTermsOfService", + "Email", + "ClosedDateTime", + "IdentityManagementId", + "LastLoginDateTime", + "Operation", + "OperationDateTime", + "EncryptionKey", + "SMSNumber", + "TermsOfServiceId", + "YearOfBirth", + "LastLoginClientCode") +VALUES ( + 'd139c62d-c899-43fb-84f2-45c654ca3270', + 'System', + '2023-09-29 19:11:01.637456 +00:00', + 'System', + '2023-10-04 19:40:02.282833 +00:00', + 'UF3PZJUD45R7GJFWEVZ6USVANSIRGXOZK7JZI2XBYTG5P4CBAUAA', + null, + null, + '2023-10-31 19:40:02.282237 +00:00', + 'b5a687c7-2915-4d3f-bb14-a3cf0504a2b2', + '2023-10-31 19:39:28.000000 +00:00', + 'DELETE', + '2023-12-01 19:41:29.067450 +00:00', + 'CwqU7+gCkL3jMWWcUpq80Oh42QejXOwI+Ov0tmsVWBI=', + null, + '2fab66e7-37c9-4b03-ba25-e8fad604dc7f', + '1994', + 'Web' +); + +INSERT INTO gateway."BetaFeatureAccess" ( + "UserProfileId", + "BetaFeatureCode", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime") +VALUES ( + 'RD33Y2LJEUZCY2TCMOIECUTKS3E62MEQ62CSUL6Q553IHHBI3AWQ', + 'Salesforce', + 'System', + current_timestamp - INTERVAL '1 day', + 'System', + current_timestamp - INTERVAL '1 day'); + +INSERT INTO gateway."Rating"( + "RatingId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "RatingValue", + "Skip") +VALUES ( + uuid_generate_v4(), + 'System', + current_timestamp - INTERVAL '3 day', + 'System', + current_timestamp - INTERVAL '2 day', + 5, + FALSE +); + +INSERT INTO gateway."Rating"( + "RatingId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "RatingValue", + "Skip") +VALUES ( + uuid_generate_v4(), + 'System', + current_timestamp - INTERVAL '3 day', + 'System', + current_timestamp - INTERVAL '2 day', + 3, + FALSE +); + +/* Communication Banner */ +INSERT INTO gateway."Communication"( + "CommunicationId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "Text", + "Subject", + "EffectiveDateTime", + "ExpiryDateTime", + "CommunicationStatusCode", + "CommunicationTypeCode", + "Priority", + "ScheduledDateTime" +) VALUES ( + 'f3ce0b06-9372-495f-baff-784c38b09480', + 'System', + current_timestamp, + 'System', + current_timestamp, + '

Test Banner - healthgateway@gov.bc.ca

', + 'Test Banner', + current_timestamp, + current_timestamp + INTERVAL '1 day', + 'New', + 'Banner', + 10, + null +); + +/* In-App Communication Banner */ +INSERT INTO gateway."Communication"( + "CommunicationId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "Text", + "Subject", + "EffectiveDateTime", + "ExpiryDateTime", + "CommunicationStatusCode", + "CommunicationTypeCode", + "Priority", + "ScheduledDateTime" +) VALUES ( + 'f3ce0b06-9372-495f-baff-784c38b09481', + 'System', + current_timestamp, + 'System', + current_timestamp, + '

In-App Banner - healthgateway@gov.bc.ca

', + 'In-App Banner', + current_timestamp, + current_timestamp + INTERVAL '1 day', + 'New', + 'InApp', + 10, + null +); + +/* Mobile Communication */ +INSERT INTO gateway."Communication"( + "CommunicationId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "Text", + "Subject", + "EffectiveDateTime", + "ExpiryDateTime", + "CommunicationStatusCode", + "CommunicationTypeCode", + "Priority", + "ScheduledDateTime" +) VALUES ( + '70e79659-70c7-4021-85eb-dc6b46a874de', + 'System', + current_timestamp, + 'System', + current_timestamp, + '

Mobile Communication - healthgateway@gov.bc.ca

', + 'Seeded Mobile Comm', + current_timestamp, + current_timestamp + INTERVAL '1 day', + 'New', + 'Mobile', + 10, + null +); + +/* User Preferences */ +INSERT INTO gateway."UserPreference"( + "UserProfileId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "Preference", + "Value") +VALUES ( + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + 'System', + current_timestamp, + 'System', + current_timestamp, + 'quickLinks', + '[{"name":"Medications","filter":{"modules":["Medication"]}},{"name":"My Notes","filter":{"modules":["Note"]}}]' +); + +/* Add Resource Delegates */ +INSERT INTO gateway."ResourceDelegate"( + "ResourceOwnerHdid", + "ProfileHdid", + "ReasonCode", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "ReasonObjectType", + "ReasonObject") +VALUES ( + '232434345442257', + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + 'Guardian', + 'System', + current_timestamp, + 'System', + current_timestamp, + 'System.DateTime, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e', + '"2021-01-20T00:00:00"' +); +INSERT INTO gateway."ResourceDelegate"( + "ResourceOwnerHdid", + "ProfileHdid", + "ReasonCode", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "ReasonObjectType", + "ReasonObject") +VALUES ( + '162346565465464564565463257', + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + 'Guardian', + 'System', + current_timestamp, + 'System', + current_timestamp, + 'System.DateTime, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e', + '"2021-01-20T00:00:00"' +); +/* Dependent with special authority - phn: 9746208843 */ +INSERT INTO gateway."ResourceDelegate"( + "ResourceOwnerHdid", + "ProfileHdid", + "ReasonCode", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "ReasonObjectType", + "ReasonObject") +VALUES ( + 'IASGH65211V6WHXKGQDSEJAHYMYR', + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + 'Guardian', + 'System', + current_timestamp, + 'System', + current_timestamp, + 'System.DateTime, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e', + '"2021-01-20T00:00:00"' +); +/* Dependent PHN:9874307208 (BNV554213556), Guardian PHN: 9735353315 (P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A) */ +INSERT INTO gateway."ResourceDelegate"( + "ResourceOwnerHdid", + "ProfileHdid", + "ReasonCode", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "ReasonObjectType", + "ReasonObject") +VALUES ( + 'BNV554213556', + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + 'Guardian', + 'System', + current_timestamp, + 'System', + current_timestamp, + 'System.DateTime, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e', + '"2023-03-27T00:00:00"' +); +/* Dependent PHN:9872868095 (727302800477298080), Guardian PHN: 9735353315 (P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A) */ +INSERT INTO gateway."ResourceDelegate"( + "ResourceOwnerHdid", + "ProfileHdid", + "ReasonCode", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "ReasonObjectType", + "ReasonObject") +VALUES ( + '727302800477298080', + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + 'Guardian', + 'System', + current_timestamp, + 'System', + current_timestamp, + 'System.DateTime, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e', + '"2021-01-20T00:00:00"' +); +/* Dependent PHN:9872868095 (727302800477298080), Guardian PHN: 9735352495 (3ZQCSNNC6KVP2GYLA4O3EFZXGUAPWBQHU6ZEB7FXNZJ2WYCLPH3A) */ +INSERT INTO gateway."ResourceDelegate"( + "ResourceOwnerHdid", + "ProfileHdid", + "ReasonCode", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "ReasonObjectType", + "ReasonObject") +VALUES ( + '727302800477298080', + '3ZQCSNNC6KVP2GYLA4O3EFZXGUAPWBQHU6ZEB7FXNZJ2WYCLPH3A', + 'Guardian', + 'System', + current_timestamp, + 'System', + current_timestamp, + 'System.DateTime, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e', + '"2021-01-20T00:00:00"' +); + +INSERT INTO gateway."Email"( + "EmailId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "From", + "To", + "Subject", + "Body", + "FormatCode", + "Priority", + "SentDateTime", + "LastRetryDateTime", + "Attempts", + "SmtpStatusCode", + "EmailStatusCode") +VALUES ( + 'a86b1a95-42c1-49e4-9d48-6080cf2a223d', + 'System', + current_timestamp - INTERVAL '31 day', + 'System', + now(), + 'HG_Donotreply@gov.bc.ca', + 'fakeemail@healthgateway.gov.bc.ca', + 'Health Gateway Email Verification hgdev', + ' + + + Email Validation + + + + + + + + + + + + + + + + +
+
+ Health Gateway Logo +
+
+

Almost there!

+

+ We''ve received a request to register your email address + for a Health Gateway account. +

+

+ To activate your account, please verify your email by + clicking the link: +

+ + Health Gateway Account Verification + +

+ This email verification link will expire in + 12 hours. +

+
+ + ', + 'HTML', + 10, + '2022-07-05 00:47:05.828812+00', + null, + 1, + 250, + 'Processed' +); + +INSERT INTO gateway."Email"( + "EmailId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "From", + "To", + "Subject", + "Body", + "FormatCode", + "Priority", + "SentDateTime", + "LastRetryDateTime", + "Attempts", + "SmtpStatusCode", + "EmailStatusCode") +VALUES ( + '8986a8b9-02e1-4756-a660-3e1ed4fa81ce', + 'System', + current_timestamp - INTERVAL '31 day', + 'System', + now(), + 'HG_Donotreply@gov.bc.ca', + 'nobody@healthgateway.gov.bc.ca', + 'Health Gateway Email Verification hgdev', + ' + + + Email Validation + + + + + + + + + + + + + + + + +
+
+ Health Gateway Logo +
+
+

Almost there!

+

+ We''ve received a request to register your email address + for a Health Gateway account. +

+

+ To activate your account, please verify your email by + clicking the link: +

+ + Health Gateway Account Verification + +

+ This email verification link will expire in + 12 hours. +

+
+ + ', + 'HTML', + 10, + '2022-07-05 00:47:05.828812+00', + null, + 1, + 250, + 'Processed' +); + +INSERT INTO gateway."Email"( + "EmailId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "From", + "To", + "Subject", + "Body", + "FormatCode", + "Priority", + "SentDateTime", + "LastRetryDateTime", + "Attempts", + "SmtpStatusCode", + "EmailStatusCode") +VALUES ( + '0e2b5d66-dfac-4396-82c1-aec3be4bb6f6', + 'System', + current_timestamp - INTERVAL '31 day', + 'System', + now(), + 'HG_Donotreply@gov.bc.ca', + 'nobody@healthgateway.gov.bc.ca', + 'Health Gateway Email Verification hgdev', + ' + + + Email Validation + + + + + + + + + + + + + + + + +
+
+ Health Gateway Logo +
+
+

Almost there!

+

+ We''ve received a request to register your email address + for a Health Gateway account. +

+

+ To activate your account, please verify your email by + clicking the link: +

+ + Health Gateway Account Verification + +

+ This email verification link will expire in + 12 hours. +

+
+ + ', + 'HTML', + 10, + '2022-07-05 00:47:05.828812+00', + null, + 1, + 250, + 'Processed' +); + +/* Registered HealthGateway User - Keycloak User (healthgateway) */ +INSERT INTO gateway."MessagingVerification"( + "MessagingVerificationId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "HdId", + "Validated", + "EmailId", + "InviteKey", + "ExpireDate", + "SMSNumber", + "SMSValidationCode", + "VerificationType", + "Deleted", + "VerificationAttempts") +VALUES ( + uuid_generate_v4(), + 'System', + now(), + 'System', + now(), + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + true, + null, + '00000000-0000-0000-0000-000000000000', + now()+INTERVAL '1 day', + '2506715000', + '654321', + 'SMS', + false, + 0 +); + +/* Registered HealthGateway User - Keycloak User (healthgateway) */ +INSERT INTO gateway."MessagingVerification"( + "MessagingVerificationId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "HdId", + "Validated", + "EmailId", + "InviteKey", + "ExpireDate", + "SMSNumber", + "SMSValidationCode", + "VerificationType", + "Deleted", + "VerificationAttempts") +VALUES ( + uuid_generate_v4(), + 'System', + now()- INTERVAL '1 hour', + 'System', + now()- INTERVAL '1 hour', + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + false, + null, + '00000000-0000-0000-0000-000000000000', + now()+INTERVAL '1 day', + '2506715000', + '123456', + 'SMS', + false, + 0 +); + +/* Registered HealthGateway User - Keycloak User (healthgateway) */ +INSERT INTO gateway."MessagingVerification"( + "MessagingVerificationId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "HdId", + "Validated", + "EmailId", + "InviteKey", + "ExpireDate", + "SMSNumber", + "SMSValidationCode", + "VerificationType", + "Deleted", + "VerificationAttempts", + "EmailAddress") +VALUES ( + uuid_generate_v4(), + 'System', + now()- INTERVAL '1 hour', + 'System', + now()- INTERVAL '1 hour', + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + true, + '0e2b5d66-dfac-4396-82c1-aec3be4bb6f6', + '00000000-0000-0000-0000-000000000000', + now()+INTERVAL '1 day', + null, + null, + 'Email', + false, + 0, + 'nobody@healthgateway.gov.bc.ca' +); + +/* Registered HealthGateway User - Keycloak User (healthgateway) */ +INSERT INTO gateway."MessagingVerification"( + "MessagingVerificationId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "HdId", + "Validated", + "EmailId", + "InviteKey", + "ExpireDate", + "SMSNumber", + "SMSValidationCode", + "VerificationType", + "Deleted", + "VerificationAttempts") +VALUES ( + uuid_generate_v4(), + 'System', + now(), + 'System', + now(), + 'RD33Y2LJEUZCY2TCMOIECUTKS3E62MEQ62CSUL6Q553IHHBI3AWQ', + false, + null, + '00000000-0000-0000-0000-000000000000', + now()+INTERVAL '1 day', + '2506715000', + '567890', + 'SMS', + false, + 0 +); + +/* Keycloak User (hthgtwy03) */ +INSERT INTO gateway."MessagingVerification"( + "MessagingVerificationId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "HdId", + "Validated", + "EmailId", + "InviteKey", + "ExpireDate", + "SMSNumber", + "SMSValidationCode", + "VerificationType", + "Deleted", + "VerificationAttempts", + "EmailAddress") +VALUES ( + uuid_generate_v4(), + 'System', + now(), + 'System', + now(), + 'R43YCT4ZY37EIJLW2O5LV2I77BZA3K3M25EUJGWAVGVJ7JKBDKCQ', + false, + 'a86b1a95-42c1-49e4-9d48-6080cf2a223d', + '00000000-0000-0000-0000-000000000000', + now()+INTERVAL '1 day', + null, + '123456', + 'Email', + false, + 0, + 'fakeemail@healthgateway.gov.bc.ca' +); + +/* Keycloak User (hthgtwy20) */ +INSERT INTO gateway."MessagingVerification"( + "MessagingVerificationId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "HdId", + "Validated", + "EmailId", + "InviteKey", + "ExpireDate", + "SMSNumber", + "SMSValidationCode", + "VerificationType", + "Deleted", + "VerificationAttempts", + "EmailAddress") +VALUES ( + uuid_generate_v4(), + 'System', + now()- INTERVAL '1 hour', + 'System', + now()- INTERVAL '1 hour', + 'DEV4FPEGCXG2NB5K2USBL52S66SC3GOUHWRP3GTXR2BTY5HEC4YA', + true, + '8986a8b9-02e1-4756-a660-3e1ed4fa81ce', + '00000000-0000-0000-0000-000000000000', + now()+INTERVAL '1 day', + null, + '123456', + 'Email', + false, + 0, + 'nobody@healthgateway.gov.bc.ca' +); + +/* User hthgtwy20 */ +INSERT INTO gateway."Note"( + "NoteId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "UserProfileId", + "Title", + "Text", + "JournalDate") +VALUES ( + uuid_generate_v4(), + 'DEV4FPEGCXG2NB5K2USBL52S66SC3GOUHWRP3GTXR2BTY5HEC4YA', + now(), + 'DEV4FPEGCXG2NB5K2USBL52S66SC3GOUHWRP3GTXR2BTY5HEC4YA', + now(), + 'DEV4FPEGCXG2NB5K2USBL52S66SC3GOUHWRP3GTXR2BTY5HEC4YA', + 'Z5/Z7ZkAF8t5HpJq07QGBw==', + 'W/rhf01ikEQrN9v1wX5sfA==', + now() +); + +/* User hthgtwy20 */ +INSERT INTO gateway."Note"( + "NoteId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "UserProfileId", + "Title", + "Text", + "JournalDate") +VALUES ( + uuid_generate_v4(), + 'DEV4FPEGCXG2NB5K2USBL52S66SC3GOUHWRP3GTXR2BTY5HEC4YA', + '2022-01-17 00:48:01.11617', + 'DEV4FPEGCXG2NB5K2USBL52S66SC3GOUHWRP3GTXR2BTY5HEC4YA', + '2022-01-17 00:48:01.11617', + 'DEV4FPEGCXG2NB5K2USBL52S66SC3GOUHWRP3GTXR2BTY5HEC4YA', + 'Z5/Z7ZkAF8t5HpJq07QGBw==', + 'W/rhf01ikEQrN9v1wX5sfA==', + '2022-01-17' +); + +/* User hthgtwy20 */ +INSERT INTO gateway."Note"( + "NoteId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "UserProfileId", + "Title", + "Text", + "JournalDate") +VALUES ( + uuid_generate_v4(), + 'DEV4FPEGCXG2NB5K2USBL52S66SC3GOUHWRP3GTXR2BTY5HEC4YA', + '2022-01-16 00:48:01.11617', + 'DEV4FPEGCXG2NB5K2USBL52S66SC3GOUHWRP3GTXR2BTY5HEC4YA', + '2022-01-16 00:48:01.11617', + 'DEV4FPEGCXG2NB5K2USBL52S66SC3GOUHWRP3GTXR2BTY5HEC4YA', + 'Z5/Z7ZkAF8t5HpJq07QGBw==', + 'W/rhf01ikEQrN9v1wX5sfA==', + '2022-01-16' +); + +INSERT INTO gateway."UserFeedback"( + "UserFeedbackId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "IsSatisfied", + "Comment", + "IsReviewed", + "UserProfileId") +VALUES ( + '6913821b-8c8c-4273-8cd8-afe6fdd05194', + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + '2022-07-06 15:30:43.095652+00', + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + '2022-07-06 15:30:43.095652+00', + false, + 'The database seed script should populate some rows in the feedback table.', + false, + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A' +); + +INSERT INTO gateway."UserFeedback"( + "UserFeedbackId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "IsSatisfied", + "Comment", + "IsReviewed", + "UserProfileId", + "ClientCode") +VALUES ( + '57abe4d7-2f83-43fd-9037-cc11ab9c9a12', + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + '2022-07-06 15:31:18.492904+00', + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + '2022-07-06 15:31:18.492904+00', + false, + 'I''d like to receive an email when I have a new health record.', + false, + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + 'Web' +); + +INSERT INTO gateway."UserFeedback"( + "UserFeedbackId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "IsSatisfied", + "Comment", + "IsReviewed", + "UserProfileId", + "ClientCode") +VALUES ( + '487ce155-1cd7-43b7-abf3-4cffb6b94b48', + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + '2024-03-11 15:32:18.492904+00', + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + '2024-03-11 15:32:18.492904+00', + false, + 'I''d like to be able to view and create notes and comments on my health records in the mobile app.', + false, + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + 'Mobile' +); + +INSERT INTO gateway."UserFeedback"( + "UserFeedbackId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime", + "IsSatisfied", + "Comment", + "IsReviewed", + "UserProfileId", + "ClientCode") +VALUES ( + '4bb2e090-8657-4057-b10d-8df4b75b0268', + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + '2024-03-12 15:33:18.492904+00', + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + '2024-03-12 15:33:18.492904+00', + false, + 'Did Health Gateway get an update?', + false, + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + 'Salesforce' +); + +/* PHN: 9872868103 (508820774378599978) will have no Allowed Delegation record(s) */ +INSERT INTO gateway."Dependent"( + "HdId", + "Protected", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime") +VALUES ( + '508820774378599978', + true, + 'System', + current_timestamp, + 'System', + current_timestamp +); + +/* PHN: 9872868128 (35224807075386271) */ +INSERT INTO gateway."Dependent"( + "HdId", + "Protected", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime") +VALUES ( + '35224807075386271', + true, + 'System', + current_timestamp, + 'System', + current_timestamp +); + +/* Dependent PHN: 9872868128 (35224807075386271), Delegate PHN: 9735353315 (P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A) */ +INSERT INTO gateway."AllowedDelegation"( + "DependentHdId", + "DelegateHdId", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime") +VALUES ( + '35224807075386271', + 'P6FFO433A5WPMVTGM7T4ZVWBKCSVNAYGTWTU3J2LWMGUMERKI72A', + 'System', + current_timestamp, + 'System', + current_timestamp +); + +/* Dependent PHN: 9872868128 (35224807075386271) */ +INSERT INTO gateway."AgentAudit"( + "AgentAuditId", + "Hdid", + "AgentUsername", + "Reason", + "OperationCode", + "GroupCode", + "TransactionDateTime", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime") +VALUES ( + uuid_generate_v4(), + '35224807075386271', + 'admin_agent@idir', + 'Protecting dependent', + 'ProtectDependent', + 'Dependent', + current_timestamp, + 'System', + current_timestamp, + 'System', + current_timestamp +); + +/* Dependent PHN: 9872868128 (35224807075386271) */ +INSERT INTO gateway."AgentAudit"( + "AgentAuditId", + "Hdid", + "AgentUsername", + "Reason", + "OperationCode", + "GroupCode", + "TransactionDateTime", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime") +VALUES ( + uuid_generate_v4(), + '35224807075386271', + 'support_agent@idir', + 'Unprotecting dependent', + 'UnprotectDependent', + 'Dependent', + current_timestamp - INTERVAL '1 day', + 'System', + current_timestamp - INTERVAL '1 day', + 'System', + current_timestamp - INTERVAL '1 day' +); + +/* Dependent PHN: 9872868128 (35224807075386271) */ +INSERT INTO gateway."AgentAudit"( + "AgentAuditId", + "Hdid", + "AgentUsername", + "Reason", + "OperationCode", + "GroupCode", + "TransactionDateTime", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime") +VALUES ( + uuid_generate_v4(), + '35224807075386271', + 'reviewer_agent@idir', + 'Protecting dependent', + 'ProtectDependent', + 'Dependent', + current_timestamp - INTERVAL '2 day', + 'System', + current_timestamp - INTERVAL '2 day', + 'System', + current_timestamp - INTERVAL '2 day' +); + + +INSERT INTO gateway."BlockedAccess"( + "Hdid", + "DataSources", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime") +VALUES ( + 'GO4DOSMRJ7MFKPPADDZ3FK2MOJ45SFKONJWR67XNLMZQFNEHDKDA', + '["ClinicalDocument","Covid19TestResult"]', + 'System', + current_timestamp - INTERVAL '2 day', + 'System', + current_timestamp - INTERVAL '2 day' +); + +INSERT INTO gateway."BlockedAccess"( + "Hdid", + "DataSources", + "CreatedBy", + "CreatedDateTime", + "UpdatedBy", + "UpdatedDateTime") +VALUES ( + 'S22BPV6WHS5TRLBL4XKGQDBVDUKLPIRSBGYSEJAHYMYRP22SP2TA', + '[]', + 'System', + current_timestamp - INTERVAL '2 day', + 'System', + current_timestamp - INTERVAL '2 day' +); \ No newline at end of file diff --git a/Tools/Dev/Postgres/init/01_init-to-RemoveDateTrunc.sql b/Tools/Dev/Postgres/init/01_init-to-Jul10-AddEmailTemplate.sql similarity index 89% rename from Tools/Dev/Postgres/init/01_init-to-RemoveDateTrunc.sql rename to Tools/Dev/Postgres/init/01_init-to-Jul10-AddEmailTemplate.sql index 8cb99c7b76..ddd5ee30f7 100644 --- a/Tools/Dev/Postgres/init/01_init-to-RemoveDateTrunc.sql +++ b/Tools/Dev/Postgres/init/01_init-to-Jul10-AddEmailTemplate.sql @@ -100,8 +100,8 @@ BEGIN "CreatedDateTime" timestamp with time zone NOT NULL, "UpdatedBy" character varying(60) NOT NULL, "UpdatedDateTime" timestamp with time zone NOT NULL, - "ScheduleDesc" character varying(40) NULL, - "ScheduleDescFrench" character varying(80) NULL, + "ScheduleDesc" character varying(40), + "ScheduleDescFrench" character varying(80), "DrugProductId" uuid NOT NULL, CONSTRAINT "PK_Schedule" PRIMARY KEY ("ScheduleId") ); @@ -118,7 +118,7 @@ BEGIN "UpdatedBy" character varying(60) NOT NULL, "UpdatedDateTime" timestamp with time zone NOT NULL, "IsSatisfied" boolean NOT NULL, - "Comment" character varying(500) NULL, + "Comment" character varying(500), CONSTRAINT "PK_UserFeedback" PRIMARY KEY ("UserFeedbackId") ); END IF; @@ -134,7 +134,7 @@ BEGIN "UpdatedBy" character varying(60) NOT NULL, "UpdatedDateTime" timestamp with time zone NOT NULL, "AcceptedTermsOfService" boolean NOT NULL, - "Email" character varying(254) NULL, + "Email" character varying(254), CONSTRAINT "PK_UserProfile" PRIMARY KEY ("UserProfileId") ); END IF; @@ -155,7 +155,7 @@ BEGIN "Body" text NOT NULL, "Priority" integer NOT NULL, "EffectiveDate" timestamp with time zone NOT NULL, - "ExpiryDate" timestamp with time zone NULL, + "ExpiryDate" timestamp with time zone, "FormatCode" character varying(4) NOT NULL, CONSTRAINT "PK_EmailTemplate" PRIMARY KEY ("EmailTemplateId"), CONSTRAINT "FK_EmailTemplate_EmailFormatCode_FormatCode" FOREIGN KEY ("FormatCode") REFERENCES gateway."EmailFormatCode" ("FormatCode") ON DELETE CASCADE @@ -178,8 +178,8 @@ BEGIN "Body" text NOT NULL, "FormatCode" character varying(4) NOT NULL, "Priority" integer NOT NULL, - "SentDateTime" timestamp with time zone NULL, - "LastRetryDateTime" timestamp with time zone NULL, + "SentDateTime" timestamp with time zone, + "LastRetryDateTime" timestamp with time zone, "Attempts" integer NOT NULL, "SmtpStatusCode" integer NOT NULL, "EmailStatusCode" character varying(10) NOT NULL, @@ -201,13 +201,13 @@ BEGIN "UpdatedDateTime" timestamp with time zone NOT NULL, "AuditEventDateTime" timestamp with time zone NOT NULL, "ClientIP" character varying(15) NOT NULL, - "ApplicationSubject" character varying(100) NULL, + "ApplicationSubject" character varying(100), "ApplicationType" character varying(10) NOT NULL, "TransactionName" character varying(100) NOT NULL, - "TransactionVersion" character varying(5) NULL, - "Trace" character varying(200) NULL, + "TransactionVersion" character varying(5), + "Trace" character varying(200), "TransactionResultCode" character varying(10) NOT NULL, - "TransactionDuration" bigint NULL, + "TransactionDuration" bigint, CONSTRAINT "PK_AuditEvent" PRIMARY KEY ("AuditEventId"), CONSTRAINT "FK_AuditEvent_ProgramTypeCode_ApplicationType" FOREIGN KEY ("ApplicationType") REFERENCES gateway."ProgramTypeCode" ("ProgramCode") ON DELETE CASCADE, CONSTRAINT "FK_AuditEvent_AuditTransactionResultCode_TransactionResultCode" FOREIGN KEY ("TransactionResultCode") REFERENCES gateway."AuditTransactionResultCode" ("ResultCode") ON DELETE RESTRICT @@ -262,19 +262,19 @@ BEGIN "UpdatedBy" character varying(60) NOT NULL, "UpdatedDateTime" timestamp with time zone NOT NULL, "DrugCode" character varying(8) NOT NULL, - "ProductCategorization" character varying(80) NULL, - "DrugClass" character varying(40) NULL, - "DrugClassFrench" character varying(80) NULL, - "DrugIdentificationNumber" character varying(29) NULL, - "BrandName" character varying(200) NULL, - "BrandNameFrench" character varying(300) NULL, - "Descriptor" character varying(150) NULL, - "DescriptorFrench" character varying(200) NULL, - "PediatricFlag" character varying(1) NULL, - "AccessionNumber" character varying(5) NULL, - "NumberOfAis" character varying(10) NULL, + "ProductCategorization" character varying(80), + "DrugClass" character varying(40), + "DrugClassFrench" character varying(80), + "DrugIdentificationNumber" character varying(29), + "BrandName" character varying(200), + "BrandNameFrench" character varying(300), + "Descriptor" character varying(150), + "DescriptorFrench" character varying(200), + "PediatricFlag" character varying(1), + "AccessionNumber" character varying(5), + "NumberOfAis" character varying(10), "LastUpdate" timestamp with time zone NOT NULL, - "AiGroupNumber" character varying(10) NULL, + "AiGroupNumber" character varying(10), "FileDownloadId" uuid NOT NULL, CONSTRAINT "PK_DrugProduct" PRIMARY KEY ("DrugProductId"), CONSTRAINT "FK_DrugProduct_FileDownload_FileDownloadId" FOREIGN KEY ("FileDownloadId") REFERENCES gateway."FileDownload" ("FileDownloadId") ON DELETE CASCADE @@ -292,29 +292,29 @@ BEGIN "UpdatedBy" character varying(60) NOT NULL, "UpdatedDateTime" timestamp with time zone NOT NULL, "DINPIN" character varying(8) NOT NULL, - "Plan" character varying(2) NULL, + "Plan" character varying(2), "EffectiveDate" Date NOT NULL, "EndDate" Date NOT NULL, - "BenefitGroupList" character varying(60) NULL, - "LCAIndicator" character varying(2) NULL, - "PayGenericIndicator" character varying(1) NULL, - "BrandName" character varying(80) NULL, - "Manufacturer" character varying(6) NULL, - "GenericName" character varying(60) NULL, - "DosageForm" character varying(20) NULL, - "TrialFlag" character varying(1) NULL, - "MaximumPrice" decimal(8,4) NULL, - "LCAPrice" decimal(8,4) NULL, - "RDPCategory" character varying(4) NULL, - "RDPSubCategory" character varying(4) NULL, - "RDPPrice" decimal(8,4) NULL, - "RDPExcludedPlans" character varying(20) NULL, - "CFRCode" character varying(1) NULL, - "PharmaCarePlanDescription" character varying(80) NULL, - "MaximumDaysSupply" integer NULL, - "QuantityLimit" integer NULL, + "BenefitGroupList" character varying(60), + "LCAIndicator" character varying(2), + "PayGenericIndicator" character varying(1), + "BrandName" character varying(80), + "Manufacturer" character varying(6), + "GenericName" character varying(60), + "DosageForm" character varying(20), + "TrialFlag" character varying(1), + "MaximumPrice" decimal(8,4), + "LCAPrice" decimal(8,4), + "RDPCategory" character varying(4), + "RDPSubCategory" character varying(4), + "RDPPrice" decimal(8,4), + "RDPExcludedPlans" character varying(20), + "CFRCode" character varying(1), + "PharmaCarePlanDescription" character varying(80), + "MaximumDaysSupply" integer, + "QuantityLimit" integer, "FormularyListDate" Date NOT NULL, - "LimitedUseFlag" character varying(1) NULL, + "LimitedUseFlag" character varying(1), "FileDownloadId" uuid NOT NULL, CONSTRAINT "PK_PharmaCareDrug" PRIMARY KEY ("PharmaCareDrugId"), CONSTRAINT "FK_PharmaCareDrug_FileDownload_FileDownloadId" FOREIGN KEY ("FileDownloadId") REFERENCES gateway."FileDownload" ("FileDownloadId") ON DELETE CASCADE @@ -332,19 +332,19 @@ BEGIN "UpdatedBy" character varying(60) NOT NULL, "UpdatedDateTime" timestamp with time zone NOT NULL, "ActiveIngredientCode" integer NOT NULL, - "Ingredient" character varying(240) NULL, - "IngredientFrench" character varying(400) NULL, - "IngredientSuppliedInd" character varying(1) NULL, - "Strength" character varying(20) NULL, - "StrengthUnit" character varying(40) NULL, - "StrengthUnitFrench" character varying(80) NULL, - "StrengthType" character varying(40) NULL, - "StrengthTypeFrench" character varying(80) NULL, - "DosageValue" character varying(20) NULL, - "Base" character varying(1) NULL, - "DosageUnit" character varying(40) NULL, - "DosageUnitFrench" character varying(80) NULL, - "Notes" character varying(2000) NULL, + "Ingredient" character varying(240), + "IngredientFrench" character varying(400), + "IngredientSuppliedInd" character varying(1), + "Strength" character varying(20), + "StrengthUnit" character varying(40), + "StrengthUnitFrench" character varying(80), + "StrengthType" character varying(40), + "StrengthTypeFrench" character varying(80), + "DosageValue" character varying(20), + "Base" character varying(1), + "DosageUnit" character varying(40), + "DosageUnitFrench" character varying(80), + "Notes" character varying(2000), "DrugProductId" uuid NOT NULL, CONSTRAINT "PK_ActiveIngredient" PRIMARY KEY ("ActiveIngredientId"), CONSTRAINT "FK_ActiveIngredient_DrugProduct_DrugProductId" FOREIGN KEY ("DrugProductId") REFERENCES gateway."DrugProduct" ("DrugProductId") ON DELETE CASCADE @@ -361,23 +361,23 @@ BEGIN "CreatedDateTime" timestamp with time zone NOT NULL, "UpdatedBy" character varying(60) NOT NULL, "UpdatedDateTime" timestamp with time zone NOT NULL, - "ManufacturerCode" character varying(5) NULL, + "ManufacturerCode" character varying(5), "CompanyCode" integer NOT NULL, - "CompanyName" character varying(80) NULL, - "CompanyType" character varying(40) NULL, - "AddressMailingFlag" character varying(1) NULL, - "AddressBillingFlag" character varying(1) NULL, - "AddressNotificationFlag" character varying(1) NULL, - "AddressOther" character varying(1) NULL, - "SuiteNumber" character varying(20) NULL, - "StreetName" character varying(80) NULL, - "CityName" character varying(60) NULL, - "Province" character varying(40) NULL, - "ProvinceFrench" character varying(100) NULL, - "Country" character varying(40) NULL, - "CountryFrench" character varying(100) NULL, - "PostalCode" character varying(20) NULL, - "PostOfficeBox" character varying(15) NULL, + "CompanyName" character varying(80), + "CompanyType" character varying(40), + "AddressMailingFlag" character varying(1), + "AddressBillingFlag" character varying(1), + "AddressNotificationFlag" character varying(1), + "AddressOther" character varying(1), + "SuiteNumber" character varying(20), + "StreetName" character varying(80), + "CityName" character varying(60), + "Province" character varying(40), + "ProvinceFrench" character varying(100), + "Country" character varying(40), + "CountryFrench" character varying(100), + "PostalCode" character varying(20), + "PostOfficeBox" character varying(15), "DrugProductId" uuid NOT NULL, CONSTRAINT "PK_Company" PRIMARY KEY ("CompanyId"), CONSTRAINT "FK_Company_DrugProduct_DrugProductId" FOREIGN KEY ("DrugProductId") REFERENCES gateway."DrugProduct" ("DrugProductId") ON DELETE CASCADE @@ -395,8 +395,8 @@ BEGIN "UpdatedBy" character varying(60) NOT NULL, "UpdatedDateTime" timestamp with time zone NOT NULL, "PharmaceuticalFormCode" integer NOT NULL, - "PharmaceuticalForm" character varying(40) NULL, - "PharmaceuticalFormFrench" character varying(80) NULL, + "PharmaceuticalForm" character varying(40), + "PharmaceuticalFormFrench" character varying(80), "DrugProductId" uuid NOT NULL, CONSTRAINT "PK_Form" PRIMARY KEY ("FormId"), CONSTRAINT "FK_Form_DrugProduct_DrugProductId" FOREIGN KEY ("DrugProductId") REFERENCES gateway."DrugProduct" ("DrugProductId") ON DELETE CASCADE @@ -413,13 +413,13 @@ BEGIN "CreatedDateTime" timestamp with time zone NOT NULL, "UpdatedBy" character varying(60) NOT NULL, "UpdatedDateTime" timestamp with time zone NOT NULL, - "UPC" character varying(12) NULL, - "PackageType" character varying(40) NULL, - "PackageTypeFrench" character varying(80) NULL, - "PackageSizeUnit" character varying(40) NULL, - "PackageSizeUnitFrench" character varying(80) NULL, - "PackageSize" character varying(5) NULL, - "ProductInformation" character varying(80) NULL, + "UPC" character varying(12), + "PackageType" character varying(40), + "PackageTypeFrench" character varying(80), + "PackageSizeUnit" character varying(40), + "PackageSizeUnitFrench" character varying(80), + "PackageSize" character varying(5), + "ProductInformation" character varying(80), "DrugProductId" uuid NOT NULL, CONSTRAINT "PK_Packaging" PRIMARY KEY ("PackagingId"), CONSTRAINT "FK_Packaging_DrugProduct_DrugProductId" FOREIGN KEY ("DrugProductId") REFERENCES gateway."DrugProduct" ("DrugProductId") ON DELETE CASCADE @@ -436,7 +436,7 @@ BEGIN "CreatedDateTime" timestamp with time zone NOT NULL, "UpdatedBy" character varying(60) NOT NULL, "UpdatedDateTime" timestamp with time zone NOT NULL, - "PharmaceuticalStdDesc" text NULL, + "PharmaceuticalStdDesc" text, "DrugProductId" uuid NOT NULL, CONSTRAINT "PK_PharmaceuticalStd" PRIMARY KEY ("PharmaceuticalStdId"), CONSTRAINT "FK_PharmaceuticalStd_DrugProduct_DrugProductId" FOREIGN KEY ("DrugProductId") REFERENCES gateway."DrugProduct" ("DrugProductId") ON DELETE CASCADE @@ -454,8 +454,8 @@ BEGIN "UpdatedBy" character varying(60) NOT NULL, "UpdatedDateTime" timestamp with time zone NOT NULL, "AdministrationCode" integer NOT NULL, - "Administration" character varying(40) NULL, - "AdministrationFrench" character varying(80) NULL, + "Administration" character varying(40), + "AdministrationFrench" character varying(80), "DrugProductId" uuid NOT NULL, CONSTRAINT "PK_Route" PRIMARY KEY ("RouteId"), CONSTRAINT "FK_Route_DrugProduct_DrugProductId" FOREIGN KEY ("DrugProductId") REFERENCES gateway."DrugProduct" ("DrugProductId") ON DELETE CASCADE @@ -472,12 +472,12 @@ BEGIN "CreatedDateTime" timestamp with time zone NOT NULL, "UpdatedBy" character varying(60) NOT NULL, "UpdatedDateTime" timestamp with time zone NOT NULL, - "CurrentStatusFlag" character varying(1) NULL, - "StatusDesc" character varying(40) NULL, - "StatusDescFrench" character varying(80) NULL, - "HistoryDate" timestamp with time zone NULL, - "LotNumber" character varying(80) NULL, - "ExpirationDate" timestamp with time zone NULL, + "CurrentStatusFlag" character varying(1), + "StatusDesc" character varying(40), + "StatusDescFrench" character varying(80), + "HistoryDate" timestamp with time zone, + "LotNumber" character varying(80), + "ExpirationDate" timestamp with time zone, "DrugProductId" uuid NOT NULL, CONSTRAINT "PK_Status" PRIMARY KEY ("StatusId"), CONSTRAINT "FK_Status_DrugProduct_DrugProductId" FOREIGN KEY ("DrugProductId") REFERENCES gateway."DrugProduct" ("DrugProductId") ON DELETE CASCADE @@ -494,12 +494,12 @@ BEGIN "CreatedDateTime" timestamp with time zone NOT NULL, "UpdatedBy" character varying(60) NOT NULL, "UpdatedDateTime" timestamp with time zone NOT NULL, - "AtcNumber" character varying(8) NULL, - "Atc" character varying(120) NULL, - "AtcFrench" character varying(240) NULL, - "AhfsNumber" character varying(20) NULL, - "Ahfs" character varying(80) NULL, - "AhfsFrench" character varying(160) NULL, + "AtcNumber" character varying(8), + "Atc" character varying(120), + "AtcFrench" character varying(240), + "AhfsNumber" character varying(20), + "Ahfs" character varying(80), + "AhfsFrench" character varying(160), "DrugProductId" uuid NOT NULL, CONSTRAINT "PK_TherapeuticClass" PRIMARY KEY ("TherapeuticClassId"), CONSTRAINT "FK_TherapeuticClass_DrugProduct_DrugProductId" FOREIGN KEY ("DrugProductId") REFERENCES gateway."DrugProduct" ("DrugProductId") ON DELETE CASCADE @@ -516,9 +516,9 @@ BEGIN "CreatedDateTime" timestamp with time zone NOT NULL, "UpdatedBy" character varying(60) NOT NULL, "UpdatedDateTime" timestamp with time zone NOT NULL, - "Species" character varying(80) NULL, - "SpeciesFrench" character varying(160) NULL, - "SubSpecies" character varying(80) NULL, + "Species" character varying(80), + "SpeciesFrench" character varying(160), + "SubSpecies" character varying(80), "DrugProductId" uuid NOT NULL, CONSTRAINT "PK_VeterinarySpecies" PRIMARY KEY ("VeterinarySpeciesId"), CONSTRAINT "FK_VeterinarySpecies_DrugProduct_DrugProductId" FOREIGN KEY ("DrugProductId") REFERENCES gateway."DrugProduct" ("DrugProductId") ON DELETE CASCADE @@ -530,7 +530,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."AuditTransactionResultCode" ("ResultCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Ok', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'Success', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('Ok', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Success', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -538,7 +538,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."AuditTransactionResultCode" ("ResultCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Fail', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'Failure', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('Fail', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Failure', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -546,7 +546,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."AuditTransactionResultCode" ("ResultCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('NotAuth', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'Unauthorized', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('NotAuth', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Unauthorized', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -554,7 +554,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."AuditTransactionResultCode" ("ResultCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Err', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'System Error', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('Err', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'System Error', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -562,7 +562,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."EmailFormatCode" ("FormatCode", "CreatedBy", "CreatedDateTime", "UpdatedBy", "UpdatedDateTime") - VALUES ('Text', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('Text', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -570,7 +570,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."EmailFormatCode" ("FormatCode", "CreatedBy", "CreatedDateTime", "UpdatedBy", "UpdatedDateTime") - VALUES ('HTML', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('HTML', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -578,7 +578,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."EmailStatusCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Processed', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'An email that has been sent', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('Processed', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'An email that has been sent', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -586,7 +586,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."EmailStatusCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Error', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'An Email that will not be sent', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('Error', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'An Email that will not be sent', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -594,7 +594,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."EmailStatusCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('New', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'A newly created email', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('New', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'A newly created email', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -602,7 +602,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."EmailStatusCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Pending', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'An email pending batch pickup', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('Pending', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'An email pending batch pickup', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -610,7 +610,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."ProgramTypeCode" ("ProgramCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('PAT', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'Patient Service', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('PAT', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Patient Service', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -618,7 +618,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."ProgramTypeCode" ("ProgramCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('FED-DRUG-A', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'Federal Approved Drug Load', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('FED-DRUG-A', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Federal Approved Drug Load', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -626,7 +626,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."ProgramTypeCode" ("ProgramCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('FED-DRUG-M', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'Federal Marketed Drug Load', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('FED-DRUG-M', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Federal Marketed Drug Load', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -634,7 +634,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."ProgramTypeCode" ("ProgramCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('FED-DRUG-C', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'Federal Cancelled Drug Load', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('FED-DRUG-C', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Federal Cancelled Drug Load', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -642,7 +642,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."ProgramTypeCode" ("ProgramCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('FED-DRUG-D', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'Federal Dormant Drug Load', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('FED-DRUG-D', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Federal Dormant Drug Load', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -650,7 +650,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."ProgramTypeCode" ("ProgramCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('PROV-DRUG', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'Provincial Pharmacare Drug Load', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('PROV-DRUG', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Provincial Pharmacare Drug Load', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -658,7 +658,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."ProgramTypeCode" ("ProgramCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('CFG', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'Configuration Service', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('CFG', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Configuration Service', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -666,7 +666,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."ProgramTypeCode" ("ProgramCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('WEB', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'Web Client', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('WEB', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Web Client', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -674,7 +674,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."ProgramTypeCode" ("ProgramCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('IMM', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'Immunization Service', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('IMM', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Immunization Service', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -682,7 +682,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."ProgramTypeCode" ("ProgramCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('MED', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'Medication Service', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('MED', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Medication Service', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -719,7 +719,7 @@ BEGIN - ', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', TIMESTAMPTZ '2019-05-01 00:00:00Z', NULL, 'HTML', 'donotreply@gov.bc.ca', 'Registration', 10, 'Health Gateway Email Verification ${Environment}', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + ', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', TIMESTAMPTZ '2019-05-01T00:00:00Z', NULL, 'HTML', 'donotreply@gov.bc.ca', 'Registration', 10, 'Health Gateway Email Verification ${Environment}', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -860,7 +860,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191119083157_InitialCreate') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20191119083157_InitialCreate', '7.0.13'); + VALUES ('20191119083157_InitialCreate', '8.0.6'); END IF; END $EF$; COMMIT; @@ -880,7 +880,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191120010543_UpdateRegistrationEmail') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20191120010543_UpdateRegistrationEmail', '7.0.13'); + VALUES ('20191120010543_UpdateRegistrationEmail', '8.0.6'); END IF; END $EF$; COMMIT; @@ -899,7 +899,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191128232437_ChangeEmailInviteToNullableHdid') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20191128232437_ChangeEmailInviteToNullableHdid', '7.0.13'); + VALUES ('20191128232437_ChangeEmailInviteToNullableHdid', '8.0.6'); END IF; END $EF$; COMMIT; @@ -978,7 +978,7 @@ BEGIN - ', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', TIMESTAMPTZ '2019-05-01 00:00:00Z', NULL, 'HTML', 'HG_Donotreply@gov.bc.ca', 'Invite', 1, 'Health Gateway Private Invitation', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + ', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', TIMESTAMPTZ '2019-05-01T00:00:00Z', NULL, 'HTML', 'HG_Donotreply@gov.bc.ca', 'Invite', 1, 'Health Gateway Private Invitation', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -986,7 +986,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191203232803_AddUpdateEmailTemplate') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20191203232803_AddUpdateEmailTemplate', '7.0.13'); + VALUES ('20191203232803_AddUpdateEmailTemplate', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1035,7 +1035,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191204191457_UpdateEmailVerificationTemplate') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20191204191457_UpdateEmailVerificationTemplate', '7.0.13'); + VALUES ('20191204191457_UpdateEmailVerificationTemplate', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1122,7 +1122,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20191204211020_UpdateEmailTemplateLogo') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20191204211020_UpdateEmailTemplateLogo', '7.0.13'); + VALUES ('20191204211020_UpdateEmailTemplateLogo', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1155,7 +1155,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200107171825_NullableReferenceTypes') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200107171825_NullableReferenceTypes', '7.0.13'); + VALUES ('20200107171825_NullableReferenceTypes', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1182,7 +1182,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200115203341_AddBetaRequest') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200115203341_AddBetaRequest', '7.0.13'); + VALUES ('20200115203341_AddBetaRequest', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1201,7 +1201,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200117220253_UpdateEmailInviteExpire') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200117220253_UpdateEmailInviteExpire', '7.0.13'); + VALUES ('20200117220253_UpdateEmailInviteExpire', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1241,7 +1241,7 @@ BEGIN - ', 'System', TIMESTAMP '2019-05-01 00:00:00', TIMESTAMP '2019-05-01 00:00:00', NULL, 'HTML', 'HG_Donotreply@gov.bc.ca', 'BetaConfirmation', 1, 'Health Gateway Waitlist Confirmation', 'System', TIMESTAMP '2019-05-01 00:00:00'); + ', 'System', TIMESTAMP '2019-05-01T00:00:00', TIMESTAMP '2019-05-01T00:00:00', NULL, 'HTML', 'HG_Donotreply@gov.bc.ca', 'BetaConfirmation', 1, 'Health Gateway Waitlist Confirmation', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -1249,7 +1249,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200123030013_UpdateBetaConfirmationTemplate') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200123030013_UpdateBetaConfirmationTemplate', '7.0.13'); + VALUES ('20200123030013_UpdateBetaConfirmationTemplate', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1261,7 +1261,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200129233249_UpdateProgramTypes') THEN INSERT INTO gateway."ProgramTypeCode" ("ProgramCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('ADMIN', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Admin Client', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('ADMIN', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Admin Client', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -1269,7 +1269,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200129233249_UpdateProgramTypes') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200129233249_UpdateProgramTypes', '7.0.13'); + VALUES ('20200129233249_UpdateProgramTypes', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1288,7 +1288,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200218200745_UpdateUserFeedbackReviewed') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200218200745_UpdateUserFeedbackReviewed', '7.0.13'); + VALUES ('20200218200745_UpdateUserFeedbackReviewed', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1333,7 +1333,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200221211918_LegalAgreements') THEN INSERT INTO gateway."LegalAgreementTypeCode" ("LegalAgreementCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('ToS', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Terms of Service', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('ToS', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Terms of Service', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -1341,7 +1341,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200221211918_LegalAgreements') THEN INSERT INTO gateway."LegalAgreement" ("LegalAgreementsId", "CreatedBy", "CreatedDateTime", "EffectiveDate", "LegalAgreementCode", "LegalText", "UpdatedBy", "UpdatedDateTime") - VALUES ('f5acf1de-2f5f-431e-955d-a837d5854182', 'System', TIMESTAMP '2019-05-01 00:00:00', TIMESTAMP '2019-12-06 00:00:00', 'ToS', '

HealthGateway Terms of Service

+ VALUES ('f5acf1de-2f5f-431e-955d-a837d5854182', 'System', TIMESTAMP '2019-05-01T00:00:00', TIMESTAMP '2019-12-06T00:00:00', 'ToS', '

HealthGateway Terms of Service

Use of this service is governed by the following terms and conditions. Please read these terms and conditions carefully, as by using this website you will be deemed to have agreed to them. If you do not agree with these terms @@ -1388,7 +1388,7 @@ BEGIN website to which this site is linked, including, without limitation, any lost profits, business interruption, or loss of programs or information, even if the Government of British Columbia has been specifically advised of the possibility of such damages. -

', 'System', TIMESTAMP '2019-05-01 00:00:00'); +

', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -1403,7 +1403,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200221211918_LegalAgreements') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200221211918_LegalAgreements', '7.0.13'); + VALUES ('20200221211918_LegalAgreements', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1423,7 +1423,7 @@ BEGIN "Application" character varying(10) NOT NULL, "Component" character varying(50) NOT NULL, "Key" text NOT NULL, - "Value" text NULL, + "Value" text, CONSTRAINT "PK_ApplicationSetting" PRIMARY KEY ("ApplicationSettingsId"), CONSTRAINT "FK_ApplicationSetting_ProgramTypeCode_Application" FOREIGN KEY ("Application") REFERENCES gateway."ProgramTypeCode" ("ProgramCode") ON DELETE RESTRICT ); @@ -1433,7 +1433,7 @@ END $EF$; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200224231036_ApplicationSettings') THEN - UPDATE gateway."LegalAgreement" SET "EffectiveDate" = TIMESTAMP '2019-05-01 00:00:00' + UPDATE gateway."LegalAgreement" SET "EffectiveDate" = TIMESTAMP '2019-05-01T00:00:00' WHERE "LegalAgreementsId" = 'f5acf1de-2f5f-431e-955d-a837d5854182'; END IF; END $EF$; @@ -1442,7 +1442,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200224231036_ApplicationSettings') THEN INSERT INTO gateway."ProgramTypeCode" ("ProgramCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('JOBS', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Job Scheduler', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('JOBS', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Job Scheduler', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -1450,7 +1450,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200224231036_ApplicationSettings') THEN INSERT INTO gateway."ApplicationSetting" ("ApplicationSettingsId", "Application", "Component", "CreatedBy", "CreatedDateTime", "Key", "UpdatedBy", "UpdatedDateTime", "Value") - VALUES ('5f279ba2-8e7b-4b1d-8c69-467d94dcb7fb', 'JOBS', 'NotifyUpdatedLegalAgreementsJob', 'System', TIMESTAMP '2019-05-01 00:00:00', 'ToS-Last-Checked', 'System', TIMESTAMP '2019-05-01 00:00:00', '05/01/2019'); + VALUES ('5f279ba2-8e7b-4b1d-8c69-467d94dcb7fb', 'JOBS', 'NotifyUpdatedLegalAgreementsJob', 'System', TIMESTAMP '2019-05-01T00:00:00', 'ToS-Last-Checked', 'System', TIMESTAMP '2019-05-01T00:00:00', '05/01/2019'); END IF; END $EF$; @@ -1465,7 +1465,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200224231036_ApplicationSettings') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200224231036_ApplicationSettings', '7.0.13'); + VALUES ('20200224231036_ApplicationSettings', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1476,21 +1476,21 @@ START TRANSACTION; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200226012259_UserProfileHistory') THEN - ALTER TABLE gateway."UserProfile" ADD "ClosedDateTime" timestamp without time zone NULL; + ALTER TABLE gateway."UserProfile" ADD "ClosedDateTime" timestamp without time zone; END IF; END $EF$; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200226012259_UserProfileHistory') THEN - ALTER TABLE gateway."UserProfile" ADD "IdentityManagementId" uuid NULL; + ALTER TABLE gateway."UserProfile" ADD "IdentityManagementId" uuid; END IF; END $EF$; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200226012259_UserProfileHistory') THEN - ALTER TABLE gateway."UserProfile" ADD "LastLoginDateTime" timestamp without time zone NULL; + ALTER TABLE gateway."UserProfile" ADD "LastLoginDateTime" timestamp without time zone; END IF; END $EF$; @@ -1505,10 +1505,10 @@ BEGIN "UpdatedDateTime" timestamp without time zone NOT NULL, "UserProfileId" character varying(52) NOT NULL, "AcceptedTermsOfService" boolean NOT NULL, - "Email" character varying(254) NULL, - "ClosedDateTime" timestamp without time zone NULL, - "IdentityManagementId" uuid NULL, - "LastLoginDateTime" timestamp without time zone NULL, + "Email" character varying(254), + "ClosedDateTime" timestamp without time zone, + "IdentityManagementId" uuid, + "LastLoginDateTime" timestamp without time zone, "Operation" text NOT NULL, "OperationDateTime" timestamp without time zone NOT NULL, CONSTRAINT "PK_UserProfileHistory" PRIMARY KEY ("UserProfileHistoryId") @@ -1555,7 +1555,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200226012259_UserProfileHistory') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200226012259_UserProfileHistory', '7.0.13'); + VALUES ('20200226012259_UserProfileHistory', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1615,7 +1615,7 @@ BEGIN - ', 'System', TIMESTAMP '2019-05-01 00:00:00', TIMESTAMP '2019-05-01 00:00:00', NULL, 'HTML', 'HG_Donotreply@gov.bc.ca', 'TermsOfService', 1, 'Health Gateway Updated Terms of Service ', 'System', TIMESTAMP '2019-05-01 00:00:00'); + ', 'System', TIMESTAMP '2019-05-01T00:00:00', TIMESTAMP '2019-05-01T00:00:00', NULL, 'HTML', 'HG_Donotreply@gov.bc.ca', 'TermsOfService', 1, 'Health Gateway Updated Terms of Service ', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -1630,7 +1630,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200226200434_ToSTemplate') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200226200434_ToSTemplate', '7.0.13'); + VALUES ('20200226200434_ToSTemplate', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1674,7 +1674,7 @@ BEGIN - ', 'System', TIMESTAMP '2019-05-01 00:00:00', TIMESTAMP '2019-05-01 00:00:00', NULL, 'HTML', 'HG_Donotreply@gov.bc.ca', 'AccountClosed', 10, 'Health Gateway Account Closed ', 'System', TIMESTAMP '2019-05-01 00:00:00'); + ', 'System', TIMESTAMP '2019-05-01T00:00:00', TIMESTAMP '2019-05-01T00:00:00', NULL, 'HTML', 'HG_Donotreply@gov.bc.ca', 'AccountClosed', 10, 'Health Gateway Account Closed ', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."EmailTemplate" ("EmailTemplateId", "Body", "CreatedBy", "CreatedDateTime", "EffectiveDate", "ExpiryDate", "FormatCode", "From", "Name", "Priority", "Subject", "UpdatedBy", "UpdatedDateTime") VALUES ('2fe8c825-d4de-4884-be6a-01a97b466425', ' @@ -1708,7 +1708,7 @@ BEGIN - ', 'System', TIMESTAMP '2019-05-01 00:00:00', TIMESTAMP '2019-05-01 00:00:00', NULL, 'HTML', 'HG_Donotreply@gov.bc.ca', 'AccountRecovered', 10, 'Health Gateway Account Recovered', 'System', TIMESTAMP '2019-05-01 00:00:00'); + ', 'System', TIMESTAMP '2019-05-01T00:00:00', TIMESTAMP '2019-05-01T00:00:00', NULL, 'HTML', 'HG_Donotreply@gov.bc.ca', 'AccountRecovered', 10, 'Health Gateway Account Recovered', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."EmailTemplate" ("EmailTemplateId", "Body", "CreatedBy", "CreatedDateTime", "EffectiveDate", "ExpiryDate", "FormatCode", "From", "Name", "Priority", "Subject", "UpdatedBy", "UpdatedDateTime") VALUES ('d9898318-4e53-4074-9979-5d24bd370055', ' @@ -1742,7 +1742,7 @@ BEGIN - ', 'System', TIMESTAMP '2019-05-01 00:00:00', TIMESTAMP '2019-05-01 00:00:00', NULL, 'HTML', 'HG_Donotreply@gov.bc.ca', 'AccountRemoved', 10, 'Health Gateway Account Closure Complete', 'System', TIMESTAMP '2019-05-01 00:00:00'); + ', 'System', TIMESTAMP '2019-05-01T00:00:00', TIMESTAMP '2019-05-01T00:00:00', NULL, 'HTML', 'HG_Donotreply@gov.bc.ca', 'AccountRemoved', 10, 'Health Gateway Account Closure Complete', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -1750,7 +1750,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200226230220_AccountClosureTemplates') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200226230220_AccountClosureTemplates', '7.0.13'); + VALUES ('20200226230220_AccountClosureTemplates', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1786,7 +1786,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200227234222_ChangeEmailTemplatePriority') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200227234222_ChangeEmailTemplatePriority', '7.0.13'); + VALUES ('20200227234222_ChangeEmailTemplatePriority', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1840,7 +1840,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200228193314_ToSTemplateUpdate') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200228193314_ToSTemplateUpdate', '7.0.13'); + VALUES ('20200228193314_ToSTemplateUpdate', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1858,8 +1858,8 @@ BEGIN "UpdatedBy" character varying(60) NOT NULL, "UpdatedDateTime" timestamp without time zone NOT NULL, "UserProfileId" character varying(52) NOT NULL, - "Title" character varying(100) NULL, - "Text" character varying(1000) NULL, + "Title" character varying(100), + "Text" character varying(1000), "JournalDateTime" timestamp without time zone NOT NULL, CONSTRAINT "PK_Note" PRIMARY KEY ("NoteId"), CONSTRAINT "FK_Note_UserProfile_UserProfileId" FOREIGN KEY ("UserProfileId") REFERENCES gateway."UserProfile" ("UserProfileId") ON DELETE CASCADE @@ -1878,7 +1878,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200304212452_Notes') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200304212452_Notes', '7.0.13'); + VALUES ('20200304212452_Notes', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1927,7 +1927,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200304214641_UpdateVerifyEmailTemplate') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200304214641_UpdateVerifyEmailTemplate', '7.0.13'); + VALUES ('20200304214641_UpdateVerifyEmailTemplate', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1953,7 +1953,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200312180332_CompositeNoteKeys') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200312180332_CompositeNoteKeys', '7.0.13'); + VALUES ('20200312180332_CompositeNoteKeys', '8.0.6'); END IF; END $EF$; COMMIT; @@ -1965,7 +1965,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200317223800_ToSUpdate4Notes') THEN INSERT INTO gateway."LegalAgreement" ("LegalAgreementsId", "CreatedBy", "CreatedDateTime", "EffectiveDate", "LegalAgreementCode", "LegalText", "UpdatedBy", "UpdatedDateTime") - VALUES ('ec438d12-f8e2-4719-8444-28e35d34674c', 'System', TIMESTAMP '2020-03-18 00:00:00', TIMESTAMP '2020-03-18 00:00:00', 'ToS', '

HealthGateway Terms of Service

+ VALUES ('ec438d12-f8e2-4719-8444-28e35d34674c', 'System', TIMESTAMP '2020-03-18T00:00:00', TIMESTAMP '2020-03-18T00:00:00', 'ToS', '

HealthGateway Terms of Service

Use of the Health Gateway service (the “Service”) is governed by the following terms and conditions. Please read these terms and conditions carefully, as by using the Service you will be deemed to have agreed to them. If you do @@ -2060,7 +2060,7 @@ BEGIN terms and conditions will prevail. These terms and conditions are governed by and to be construed in accordance with the laws of British Columbia and the federal laws of Canada applicable therein. -

', 'System', TIMESTAMP '2020-03-18 00:00:00'); +

', 'System', TIMESTAMP '2020-03-18T00:00:00'); END IF; END $EF$; @@ -2068,7 +2068,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200317223800_ToSUpdate4Notes') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200317223800_ToSUpdate4Notes', '7.0.13'); + VALUES ('20200317223800_ToSUpdate4Notes', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2099,7 +2099,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200330230502_GenericCache') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200330230502_GenericCache', '7.0.13'); + VALUES ('20200330230502_GenericCache', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2110,7 +2110,7 @@ START TRANSACTION; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200413234129_AddHDID2Feedback') THEN - ALTER TABLE gateway."UserFeedback" ADD "UserProfileId" character varying(52) NULL; + ALTER TABLE gateway."UserFeedback" ADD "UserProfileId" character varying(52); END IF; END $EF$; @@ -2132,7 +2132,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200413234129_AddHDID2Feedback') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200413234129_AddHDID2Feedback', '7.0.13'); + VALUES ('20200413234129_AddHDID2Feedback', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2150,7 +2150,7 @@ BEGIN "UpdatedBy" character varying(60) NOT NULL, "UpdatedDateTime" timestamp without time zone NOT NULL, "UserProfileId" character varying(52) NOT NULL, - "Text" character varying(1000) NULL, + "Text" character varying(1000), "EntryTypeCode" character varying(3) NOT NULL, "ParentEntryId" character varying(32) NOT NULL, CONSTRAINT "PK_Comment" PRIMARY KEY ("CommentId"), @@ -2170,7 +2170,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200421223141_Comment') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200421223141_Comment', '7.0.13'); + VALUES ('20200421223141_Comment', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2181,14 +2181,14 @@ START TRANSACTION; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200422234729_SupportEncryption') THEN - ALTER TABLE gateway."UserProfileHistory" ADD "EncryptionKey" character varying(44) NULL; + ALTER TABLE gateway."UserProfileHistory" ADD "EncryptionKey" character varying(44); END IF; END $EF$; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200422234729_SupportEncryption') THEN - ALTER TABLE gateway."UserProfile" ADD "EncryptionKey" character varying(44) NULL; + ALTER TABLE gateway."UserProfile" ADD "EncryptionKey" character varying(44); END IF; END $EF$; @@ -2240,7 +2240,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200422234729_SupportEncryption') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200422234729_SupportEncryption', '7.0.13'); + VALUES ('20200422234729_SupportEncryption', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2257,8 +2257,8 @@ BEGIN "CreatedDateTime" timestamp without time zone NOT NULL, "UpdatedBy" character varying(60) NOT NULL, "UpdatedDateTime" timestamp without time zone NOT NULL, - "Text" character varying(1000) NULL, - "Subject" character varying(1000) NULL, + "Text" character varying(1000), + "Subject" character varying(1000), "EffectiveDateTime" timestamp without time zone NOT NULL, "ExpiryDateTime" timestamp without time zone NOT NULL, CONSTRAINT "PK_Communication" PRIMARY KEY ("CommunicationId") @@ -2270,7 +2270,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200423173644_Communication') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200423173644_Communication', '7.0.13'); + VALUES ('20200423173644_Communication', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2282,7 +2282,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200512223446_AddLaboratoryApplication') THEN INSERT INTO gateway."ProgramTypeCode" ("ProgramCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('LAB', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Laboratory Service', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('LAB', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Laboratory Service', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -2290,7 +2290,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200512223446_AddLaboratoryApplication') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200512223446_AddLaboratoryApplication', '7.0.13'); + VALUES ('20200512223446_AddLaboratoryApplication', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2309,7 +2309,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200514220748_UpdateCommentModel') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200514220748_UpdateCommentModel', '7.0.13'); + VALUES ('20200514220748_UpdateCommentModel', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2320,7 +2320,7 @@ START TRANSACTION; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200515154544_UpdateProfile') THEN - ALTER TABLE gateway."UserProfile" ADD "PhoneNumber" character varying(20) NULL; + ALTER TABLE gateway."UserProfile" ADD "PhoneNumber" character varying(20); END IF; END $EF$; @@ -2328,7 +2328,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200515154544_UpdateProfile') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200515154544_UpdateProfile', '7.0.13'); + VALUES ('20200515154544_UpdateProfile', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2382,7 +2382,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200521185337_RenameEmailInviteDB') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200521185337_RenameEmailInviteDB', '7.0.13'); + VALUES ('20200521185337_RenameEmailInviteDB', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2401,7 +2401,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200521185607_RenameEmailInviteModel') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200521185607_RenameEmailInviteModel', '7.0.13'); + VALUES ('20200521185607_RenameEmailInviteModel', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2412,21 +2412,21 @@ START TRANSACTION; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200526063610_SMSVerification') THEN - ALTER TABLE gateway."MessagingVerification" ADD "SMSNumber" text NULL; + ALTER TABLE gateway."MessagingVerification" ADD "SMSNumber" text; END IF; END $EF$; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200526063610_SMSVerification') THEN - ALTER TABLE gateway."MessagingVerification" ADD "SMSValidationCode" character varying(6) NULL; + ALTER TABLE gateway."MessagingVerification" ADD "SMSValidationCode" character varying(6); END IF; END $EF$; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200526063610_SMSVerification') THEN - ALTER TABLE gateway."MessagingVerification" ADD "VerificationType" character varying(10) NULL; + ALTER TABLE gateway."MessagingVerification" ADD "VerificationType" character varying(10); END IF; END $EF$; @@ -2449,9 +2449,9 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200526063610_SMSVerification') THEN INSERT INTO gateway."MessagingVerificationTypeCode" ("MessagingVerificationCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Email', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Email Verification Type Code', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Email', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Email Verification Type Code', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."MessagingVerificationTypeCode" ("MessagingVerificationCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('SMS', 'System', TIMESTAMP '2019-05-01 00:00:00', 'SMS Verification Type Code', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('SMS', 'System', TIMESTAMP '2019-05-01T00:00:00', 'SMS Verification Type Code', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -2490,7 +2490,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200526063610_SMSVerification') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200526063610_SMSVerification', '7.0.13'); + VALUES ('20200526063610_SMSVerification', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2509,7 +2509,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200526203427_MissingMigrationNullable') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200526203427_MissingMigrationNullable', '7.0.13'); + VALUES ('20200526203427_MissingMigrationNullable', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2534,7 +2534,7 @@ END $EF$; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200529202233_PhoneBugfix') THEN - ALTER TABLE gateway."UserProfileHistory" ADD "SMSNumber" character varying(10) NULL; + ALTER TABLE gateway."UserProfileHistory" ADD "SMSNumber" character varying(10); END IF; END $EF$; @@ -2565,7 +2565,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200529202233_PhoneBugfix') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200529202233_PhoneBugfix', '7.0.13'); + VALUES ('20200529202233_PhoneBugfix', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2598,7 +2598,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200601194243_UpdateMessagingVerification') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200601194243_UpdateMessagingVerification', '7.0.13'); + VALUES ('20200601194243_UpdateMessagingVerification', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2624,7 +2624,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200609144240_UpdateMessagingVerificationAttempts') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200609144240_UpdateMessagingVerificationAttempts', '7.0.13'); + VALUES ('20200609144240_UpdateMessagingVerificationAttempts', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2644,7 +2644,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200619221413_CommunicationDateConstraint') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200619221413_CommunicationDateConstraint', '7.0.13'); + VALUES ('20200619221413_CommunicationDateConstraint', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2656,7 +2656,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200622183501_ToSUpdateCovid') THEN INSERT INTO gateway."LegalAgreement" ("LegalAgreementsId", "CreatedBy", "CreatedDateTime", "EffectiveDate", "LegalAgreementCode", "LegalText", "UpdatedBy", "UpdatedDateTime") - VALUES ('1d94c170-5118-4aa6-ba31-e3e07274ccbd', 'System', TIMESTAMP '2020-06-22 00:00:00', TIMESTAMP '2020-06-22 00:00:00', 'ToS', '

HealthGateway Terms of Service

+ VALUES ('1d94c170-5118-4aa6-ba31-e3e07274ccbd', 'System', TIMESTAMP '2020-06-22T00:00:00', TIMESTAMP '2020-06-22T00:00:00', 'ToS', '

HealthGateway Terms of Service

Use of the Health Gateway service (the "Service") is governed by the following terms and conditions. Please read these terms and conditions carefully, as by using the Service you will @@ -2767,7 +2767,7 @@ BEGIN

These terms of service are governed by and to be construed in accordance with the laws of British Columbia and the federal laws of Canada applicable therein. -

', 'System', TIMESTAMP '2020-06-22 00:00:00'); +

', 'System', TIMESTAMP '2020-06-22T00:00:00'); END IF; END $EF$; @@ -2775,7 +2775,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200622183501_ToSUpdateCovid') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200622183501_ToSUpdateCovid', '7.0.13'); + VALUES ('20200622183501_ToSUpdateCovid', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2786,7 +2786,7 @@ START TRANSACTION; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200630213031_MvToSEffDt') THEN - UPDATE gateway."LegalAgreement" SET "EffectiveDate" = TIMESTAMP '2020-07-31 00:00:00' + UPDATE gateway."LegalAgreement" SET "EffectiveDate" = TIMESTAMP '2020-07-31T00:00:00' WHERE "LegalAgreementsId" = '1d94c170-5118-4aa6-ba31-e3e07274ccbd'; END IF; END $EF$; @@ -2795,7 +2795,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200630213031_MvToSEffDt') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200630213031_MvToSEffDt', '7.0.13'); + VALUES ('20200630213031_MvToSEffDt', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2823,7 +2823,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200710203326_AddUserPreference') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200710203326_AddUserPreference', '7.0.13'); + VALUES ('20200710203326_AddUserPreference', '8.0.6'); END IF; END $EF$; COMMIT; @@ -2920,15 +2920,15 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200724222252_NewComms') THEN INSERT INTO gateway."CommunicationStatusCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('New', 'System', TIMESTAMP '2019-05-01 00:00:00', 'A newly created Communication', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('New', 'System', TIMESTAMP '2019-05-01T00:00:00', 'A newly created Communication', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."CommunicationStatusCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Pending', 'System', TIMESTAMP '2019-05-01 00:00:00', 'A Communication pending batch pickup', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Pending', 'System', TIMESTAMP '2019-05-01T00:00:00', 'A Communication pending batch pickup', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."CommunicationStatusCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Processing', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Communication is being processed', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Processing', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Communication is being processed', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."CommunicationStatusCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Processed', 'System', TIMESTAMP '2019-05-01 00:00:00', 'A Communication which has been sent', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Processed', 'System', TIMESTAMP '2019-05-01T00:00:00', 'A Communication which has been sent', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."CommunicationStatusCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Error', 'System', TIMESTAMP '2019-05-01 00:00:00', 'A Communication that will not be sent', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Error', 'System', TIMESTAMP '2019-05-01T00:00:00', 'A Communication that will not be sent', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -2936,9 +2936,9 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200724222252_NewComms') THEN INSERT INTO gateway."CommunicationTypeCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Banner', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Banner communication type', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Banner', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Banner communication type', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."CommunicationTypeCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Email', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Email communication type', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Email', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Email communication type', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -2995,7 +2995,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200724222252_NewComms') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200724222252_NewComms', '7.0.13'); + VALUES ('20200724222252_NewComms', '8.0.6'); END IF; END $EF$; COMMIT; @@ -3006,7 +3006,7 @@ START TRANSACTION; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200724230921_UpdateCommunicationAddScheduledDate') THEN - ALTER TABLE gateway."Communication" ADD "ScheduledDateTime" timestamp without time zone NULL; + ALTER TABLE gateway."Communication" ADD "ScheduledDateTime" timestamp without time zone; END IF; END $EF$; @@ -3014,7 +3014,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200724230921_UpdateCommunicationAddScheduledDate') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200724230921_UpdateCommunicationAddScheduledDate', '7.0.13'); + VALUES ('20200724230921_UpdateCommunicationAddScheduledDate', '8.0.6'); END IF; END $EF$; COMMIT; @@ -3076,7 +3076,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200803222317_PushBannerChange') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200803222317_PushBannerChange', '7.0.13'); + VALUES ('20200803222317_PushBannerChange', '8.0.6'); END IF; END $EF$; COMMIT; @@ -3104,7 +3104,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200817213421_AddRatingsTable') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200817213421_AddRatingsTable', '7.0.13'); + VALUES ('20200817213421_AddRatingsTable', '8.0.6'); END IF; END $EF$; COMMIT; @@ -3116,7 +3116,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200901174715_UpdateProgramTypeCode') THEN INSERT INTO gateway."ProgramTypeCode" ("ProgramCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('ENC', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Encounter Service', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('ENC', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Encounter Service', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -3124,7 +3124,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200901174715_UpdateProgramTypeCode') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200901174715_UpdateProgramTypeCode', '7.0.13'); + VALUES ('20200901174715_UpdateProgramTypeCode', '8.0.6'); END IF; END $EF$; COMMIT; @@ -3136,7 +3136,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200922192259_AddCommunicationStatusCodeDraft') THEN INSERT INTO gateway."CommunicationStatusCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Draft', 'System', TIMESTAMP '2019-05-01 00:00:00', 'A draft Communication which has not been published', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Draft', 'System', TIMESTAMP '2019-05-01T00:00:00', 'A draft Communication which has not been published', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -3144,7 +3144,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200922192259_AddCommunicationStatusCodeDraft') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200922192259_AddCommunicationStatusCodeDraft', '7.0.13'); + VALUES ('20200922192259_AddCommunicationStatusCodeDraft', '8.0.6'); END IF; END $EF$; COMMIT; @@ -3172,7 +3172,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20200926222603_ModifyUniqueDateRangeConstraint') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20200926222603_ModifyUniqueDateRangeConstraint', '7.0.13'); + VALUES ('20200926222603_ModifyUniqueDateRangeConstraint', '8.0.6'); END IF; END $EF$; COMMIT; @@ -3199,7 +3199,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20201008222443_UserDelegate') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20201008222443_UserDelegate', '7.0.13'); + VALUES ('20201008222443_UserDelegate', '8.0.6'); END IF; END $EF$; COMMIT; @@ -3225,7 +3225,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20201017085954_GenericCacheIndexes') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20201017085954_GenericCacheIndexes', '7.0.13'); + VALUES ('20201017085954_GenericCacheIndexes', '8.0.6'); END IF; END $EF$; COMMIT; @@ -3258,7 +3258,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20201018001236_GenericCacheUnique') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20201018001236_GenericCacheUnique', '7.0.13'); + VALUES ('20201018001236_GenericCacheUnique', '8.0.6'); END IF; END $EF$; COMMIT; @@ -3323,7 +3323,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20201021193628_AddUserDelegateHistory') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20201021193628_AddUserDelegateHistory', '7.0.13'); + VALUES ('20201021193628_AddUserDelegateHistory', '8.0.6'); END IF; END $EF$; COMMIT; @@ -3419,7 +3419,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20201118002050_AddResourceDelegate') THEN INSERT INTO gateway."ResourceDelegateReasonCode" ("ReasonTypeCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('COVIDLab', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Resource Delegation for Covid Laboratory', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('COVIDLab', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Resource Delegation for Covid Laboratory', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -3476,7 +3476,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20201118002050_AddResourceDelegate') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20201118002050_AddResourceDelegate', '7.0.13'); + VALUES ('20201118002050_AddResourceDelegate', '8.0.6'); END IF; END $EF$; COMMIT; @@ -3495,7 +3495,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20201208231819_RemoveBetaRequest') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20201208231819_RemoveBetaRequest', '7.0.13'); + VALUES ('20201208231819_RemoveBetaRequest', '8.0.6'); END IF; END $EF$; COMMIT; @@ -3507,7 +3507,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20201224092706_UpdatedTermsOfService') THEN INSERT INTO gateway."LegalAgreement" ("LegalAgreementsId", "CreatedBy", "CreatedDateTime", "EffectiveDate", "LegalAgreementCode", "LegalText", "UpdatedBy", "UpdatedDateTime") - VALUES ('2947456b-2b67-42b9-b239-13c4ed86060b', 'System', TIMESTAMP '2020-12-24 00:00:00', TIMESTAMP '2020-12-24 00:00:00', 'ToS', '

HealthGateway Terms of Service

+ VALUES ('2947456b-2b67-42b9-b239-13c4ed86060b', 'System', TIMESTAMP '2020-12-24T00:00:00', TIMESTAMP '2020-12-24T00:00:00', 'ToS', '

HealthGateway Terms of Service

Use of the Health Gateway service (the "Service") is governed by the following terms and conditions. Please read these terms and @@ -3708,7 +3708,7 @@ BEGIN with the laws of British Columbia and the federal laws of Canada applicable therein.

- ', 'System', TIMESTAMP '2020-12-24 00:00:00'); + ', 'System', TIMESTAMP '2020-12-24T00:00:00'); END IF; END $EF$; @@ -3716,7 +3716,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20201224092706_UpdatedTermsOfService') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20201224092706_UpdatedTermsOfService', '7.0.13'); + VALUES ('20201224092706_UpdatedTermsOfService', '8.0.6'); END IF; END $EF$; COMMIT; @@ -3736,7 +3736,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20201224191731_FixTermsOfService') THEN INSERT INTO gateway."LegalAgreement" ("LegalAgreementsId", "CreatedBy", "CreatedDateTime", "EffectiveDate", "LegalAgreementCode", "LegalText", "UpdatedBy", "UpdatedDateTime") - VALUES ('c99fd839-b4a2-40f9-b103-529efccd0dcd', 'System', TIMESTAMP '2020-12-24 00:00:00', TIMESTAMP '2020-12-24 00:00:00', 'ToS', '

HealthGateway Terms of Service

+ VALUES ('c99fd839-b4a2-40f9-b103-529efccd0dcd', 'System', TIMESTAMP '2020-12-24T00:00:00', TIMESTAMP '2020-12-24T00:00:00', 'ToS', '

HealthGateway Terms of Service

Use of the Health Gateway service (the "Service") is governed by the following terms and conditions. Please read these terms and @@ -3948,7 +3948,7 @@ BEGIN with the laws of British Columbia and the federal laws of Canada applicable therein.

- ', 'System', TIMESTAMP '2020-12-24 00:00:00'); + ', 'System', TIMESTAMP '2020-12-24T00:00:00'); END IF; END $EF$; @@ -3956,7 +3956,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20201224191731_FixTermsOfService') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20201224191731_FixTermsOfService', '7.0.13'); + VALUES ('20201224191731_FixTermsOfService', '8.0.6'); END IF; END $EF$; COMMIT; @@ -3967,7 +3967,7 @@ START TRANSACTION; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210105213714_UpdateToSDate') THEN - UPDATE gateway."LegalAgreement" SET "EffectiveDate" = TIMESTAMP '2020-01-06 00:00:00', "UpdatedDateTime" = TIMESTAMP '2020-01-05 00:00:00' + UPDATE gateway."LegalAgreement" SET "EffectiveDate" = TIMESTAMP '2020-01-06T00:00:00', "UpdatedDateTime" = TIMESTAMP '2020-01-05T00:00:00' WHERE "LegalAgreementsId" = 'c99fd839-b4a2-40f9-b103-529efccd0dcd'; END IF; END $EF$; @@ -3976,7 +3976,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210105213714_UpdateToSDate') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210105213714_UpdateToSDate', '7.0.13'); + VALUES ('20210105213714_UpdateToSDate', '8.0.6'); END IF; END $EF$; COMMIT; @@ -4002,7 +4002,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210105220604_UpdateFeedbackFK') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210105220604_UpdateFeedbackFK', '7.0.13'); + VALUES ('20210105220604_UpdateFeedbackFK', '8.0.6'); END IF; END $EF$; COMMIT; @@ -4013,7 +4013,7 @@ START TRANSACTION; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210106170417_UpdateToSDate2') THEN - UPDATE gateway."LegalAgreement" SET "EffectiveDate" = TIMESTAMP '2021-01-07 00:00:00', "UpdatedDateTime" = TIMESTAMP '2021-01-06 00:00:00' + UPDATE gateway."LegalAgreement" SET "EffectiveDate" = TIMESTAMP '2021-01-07T00:00:00', "UpdatedDateTime" = TIMESTAMP '2021-01-06T00:00:00' WHERE "LegalAgreementsId" = 'c99fd839-b4a2-40f9-b103-529efccd0dcd'; END IF; END $EF$; @@ -4022,7 +4022,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210106170417_UpdateToSDate2') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210106170417_UpdateToSDate2', '7.0.13'); + VALUES ('20210106170417_UpdateToSDate2', '8.0.6'); END IF; END $EF$; COMMIT; @@ -4098,7 +4098,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210107205552_UserProfileHistoryLogin') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210107205552_UserProfileHistoryLogin', '7.0.13'); + VALUES ('20210107205552_UserProfileHistoryLogin', '8.0.6'); END IF; END $EF$; COMMIT; @@ -4152,7 +4152,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210107212709_UpdateToSEmail') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210107212709_UpdateToSEmail', '7.0.13'); + VALUES ('20210107212709_UpdateToSEmail', '8.0.6'); END IF; END $EF$; COMMIT; @@ -4173,7 +4173,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210111203912_UserProfileHistoryNullValue') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210111203912_UserProfileHistoryNullValue', '7.0.13'); + VALUES ('20210111203912_UserProfileHistoryNullValue', '8.0.6'); END IF; END $EF$; COMMIT; @@ -4202,7 +4202,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210119080944_EventLog') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210119080944_EventLog', '7.0.13'); + VALUES ('20210119080944_EventLog', '8.0.6'); END IF; END $EF$; COMMIT; @@ -4239,15 +4239,15 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210122215516_AddCommentEntryTypeCode') THEN INSERT INTO gateway."CommentEntryTypeCode" ("CommentEntryCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('NA', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Comment for an Unknown type Entry', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('NA', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Comment for an Unknown type Entry', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."CommentEntryTypeCode" ("CommentEntryCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Med', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Comment for a Medication Entry', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Med', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Comment for a Medication Entry', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."CommentEntryTypeCode" ("CommentEntryCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Imm', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Comment for an Immunization Entry', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Imm', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Comment for an Immunization Entry', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."CommentEntryTypeCode" ("CommentEntryCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Lab', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Comment for a Laboratory Entry', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Lab', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Comment for a Laboratory Entry', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."CommentEntryTypeCode" ("CommentEntryCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Enc', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Comment for an Encounter Entry', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Enc', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Comment for an Encounter Entry', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -4269,7 +4269,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210122215516_AddCommentEntryTypeCode') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210122215516_AddCommentEntryTypeCode', '7.0.13'); + VALUES ('20210122215516_AddCommentEntryTypeCode', '8.0.6'); END IF; END $EF$; COMMIT; @@ -4319,7 +4319,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210211202508_UpdateEmailValidationTemplate') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210211202508_UpdateEmailValidationTemplate', '7.0.13'); + VALUES ('20210211202508_UpdateEmailValidationTemplate', '8.0.6'); END IF; END $EF$; COMMIT; @@ -4358,7 +4358,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210316172822_FixMessagingVerification') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210316172822_FixMessagingVerification', '7.0.13'); + VALUES ('20210316172822_FixMessagingVerification', '8.0.6'); END IF; END $EF$; COMMIT; @@ -4370,7 +4370,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210317235519_AddSpecialAuthorityCommentEntryTypeCode') THEN INSERT INTO gateway."CommentEntryTypeCode" ("CommentEntryCode", "Description", "CreatedBy", "CreatedDateTime", "UpdatedBy", "UpdatedDateTime") - VALUES ('SAR', 'Comment for a Special Authority Request Entry', 'System', TIMESTAMP '2019-05-01 00:00:00', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('SAR', 'Comment for a Special Authority Request Entry', 'System', TIMESTAMP '2019-05-01T00:00:00', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -4378,7 +4378,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210317235519_AddSpecialAuthorityCommentEntryTypeCode') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210317235519_AddSpecialAuthorityCommentEntryTypeCode', '7.0.13'); + VALUES ('20210317235519_AddSpecialAuthorityCommentEntryTypeCode', '8.0.6'); END IF; END $EF$; COMMIT; @@ -5113,7 +5113,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210330184059_UpdatedAssets') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210330184059_UpdatedAssets', '7.0.13'); + VALUES ('20210330184059_UpdatedAssets', '8.0.6'); END IF; END $EF$; COMMIT; @@ -5999,7 +5999,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210420220008_UpdateAssets') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210420220008_UpdateAssets', '7.0.13'); + VALUES ('20210420220008_UpdateAssets', '8.0.6'); END IF; END $EF$; COMMIT; @@ -6065,7 +6065,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210510213821_CreateAdminTag') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210510213821_CreateAdminTag', '7.0.13'); + VALUES ('20210510213821_CreateAdminTag', '8.0.6'); END IF; END $EF$; COMMIT; @@ -6110,10 +6110,10 @@ BEGIN "WalletConnectionId" uuid NOT NULL, "UserProfileId" character varying(54) NOT NULL, "Status" character varying(15) NOT NULL, - "AgentId" uuid NULL, - "InvitationEndpoint" text NULL, - "ConnectedDateTime" timestamp without time zone NULL, - "DisconnectedDateTime" timestamp without time zone NULL, + "AgentId" uuid, + "InvitationEndpoint" text, + "ConnectedDateTime" timestamp without time zone, + "DisconnectedDateTime" timestamp without time zone, "CreatedBy" character varying(60) NOT NULL, "CreatedDateTime" timestamp without time zone NOT NULL, "UpdatedBy" character varying(60) NOT NULL, @@ -6134,11 +6134,11 @@ BEGIN "ResourceId" text NOT NULL, "ResourceType" text NOT NULL, "Status" character varying(10) NOT NULL, - "AddedDateTime" timestamp without time zone NULL, - "RevokedDateTime" timestamp without time zone NULL, + "AddedDateTime" timestamp without time zone, + "RevokedDateTime" timestamp without time zone, "ExchangeId" uuid NOT NULL, - "RevocationId" text NULL, - "RevocationRegistryId" text NULL, + "RevocationId" text, + "RevocationRegistryId" text, "CreatedBy" character varying(60) NOT NULL, "CreatedDateTime" timestamp without time zone NOT NULL, "UpdatedBy" character varying(60) NOT NULL, @@ -6154,11 +6154,11 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210601235231_SetupWallet') THEN INSERT INTO gateway."WalletConnectionStatusCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Pending', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Wallet Connection is Pending', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Pending', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Wallet Connection is Pending', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."WalletConnectionStatusCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Connected', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Wallet Connection has been created and added', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Connected', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Wallet Connection has been created and added', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."WalletConnectionStatusCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Disconnected', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Wallet Connection has been revoked', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Disconnected', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Wallet Connection has been revoked', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -6166,11 +6166,11 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210601235231_SetupWallet') THEN INSERT INTO gateway."WalletCredentialStatusCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Created', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Wallet Credential has been created', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Created', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Wallet Credential has been created', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."WalletCredentialStatusCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Added', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Credential has been added to Wallet', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Added', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Credential has been added to Wallet', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."WalletCredentialStatusCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Revoked', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Credential has been revoked', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Revoked', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Credential has been revoked', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -6206,7 +6206,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210601235231_SetupWallet') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210601235231_SetupWallet', '7.0.13'); + VALUES ('20210601235231_SetupWallet', '8.0.6'); END IF; END $EF$; COMMIT; @@ -6236,7 +6236,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210604003608_AddRequiredCredentialsAttributes') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210604003608_AddRequiredCredentialsAttributes', '7.0.13'); + VALUES ('20210604003608_AddRequiredCredentialsAttributes', '8.0.6'); END IF; END $EF$; COMMIT; @@ -6262,7 +6262,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210607193749_UpdateCredFieldsRegd') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210607193749_UpdateCredFieldsRegd', '7.0.13'); + VALUES ('20210607193749_UpdateCredFieldsRegd', '8.0.6'); END IF; END $EF$; COMMIT; @@ -6284,7 +6284,7 @@ BEGIN

${feedback}

- ', 'System', TIMESTAMP '2019-05-01 00:00:00', TIMESTAMP '2019-05-01 00:00:00', NULL, 'HTML', 'HG_Donotreply@gov.bc.ca', 'AdminFeedback', 1, 'Health Gateway Feedback Received', 'System', TIMESTAMP '2019-05-01 00:00:00'); + ', 'System', TIMESTAMP '2019-05-01T00:00:00', TIMESTAMP '2019-05-01T00:00:00', NULL, 'HTML', 'HG_Donotreply@gov.bc.ca', 'AdminFeedback', 1, 'Health Gateway Feedback Received', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -6292,7 +6292,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210618155609_AdminFeedbackEmail') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210618155609_AdminFeedbackEmail', '7.0.13'); + VALUES ('20210618155609_AdminFeedbackEmail', '8.0.6'); END IF; END $EF$; COMMIT; @@ -6304,7 +6304,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210618185129_AddInAppCommsType') THEN INSERT INTO gateway."CommunicationTypeCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('InApp', 'System', TIMESTAMP '2019-05-01 00:00:00', 'In-App communication type', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('InApp', 'System', TIMESTAMP '2019-05-01T00:00:00', 'In-App communication type', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -6364,7 +6364,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210618185129_AddInAppCommsType') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210618185129_AddInAppCommsType', '7.0.13'); + VALUES ('20210618185129_AddInAppCommsType', '8.0.6'); END IF; END $EF$; COMMIT; @@ -6395,7 +6395,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210621184624_UpdateAdminFeedbackTemplate') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210621184624_UpdateAdminFeedbackTemplate', '7.0.13'); + VALUES ('20210621184624_UpdateAdminFeedbackTemplate', '8.0.6'); END IF; END $EF$; COMMIT; @@ -6421,7 +6421,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210621225608_UserProfileVerifications') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210621225608_UserProfileVerifications', '7.0.13'); + VALUES ('20210621225608_UserProfileVerifications', '8.0.6'); END IF; END $EF$; COMMIT; @@ -6456,7 +6456,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20210726205526_FixMVConstraint') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20210726205526_FixMVConstraint', '7.0.13'); + VALUES ('20210726205526_FixMVConstraint', '8.0.6'); END IF; END $EF$; COMMIT; @@ -6504,13 +6504,13 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20211027211258_VaccineProofRequestCache') THEN INSERT INTO gateway."VaccineProofTemplateCode" ("TemplateCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('BCProvincial', 'System', TIMESTAMP '2019-05-01 00:00:00', 'The Provincial template (single page)', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('BCProvincial', 'System', TIMESTAMP '2019-05-01T00:00:00', 'The Provincial template (single page)', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."VaccineProofTemplateCode" ("TemplateCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Federal', 'System', TIMESTAMP '2019-05-01 00:00:00', 'The Federal template (single page)', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Federal', 'System', TIMESTAMP '2019-05-01T00:00:00', 'The Federal template (single page)', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."VaccineProofTemplateCode" ("TemplateCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Combined', 'System', TIMESTAMP '2019-05-01 00:00:00', 'The Combined Federal and Provincial template', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('Combined', 'System', TIMESTAMP '2019-05-01T00:00:00', 'The Combined Federal and Provincial template', 'System', TIMESTAMP '2019-05-01T00:00:00'); INSERT INTO gateway."VaccineProofTemplateCode" ("TemplateCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('CombinedCover', 'System', TIMESTAMP '2019-05-01 00:00:00', 'The Combined Federal and Provincial template with a cover page', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('CombinedCover', 'System', TIMESTAMP '2019-05-01T00:00:00', 'The Combined Federal and Provincial template with a cover page', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -6525,7 +6525,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20211027211258_VaccineProofRequestCache') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20211027211258_VaccineProofRequestCache', '7.0.13'); + VALUES ('20211027211258_VaccineProofRequestCache', '8.0.6'); END IF; END $EF$; COMMIT; @@ -6544,7 +6544,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20211028175602_VPAddAssetEndpoint') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20211028175602_VPAddAssetEndpoint', '7.0.13'); + VALUES ('20211028175602_VPAddAssetEndpoint', '8.0.6'); END IF; END $EF$; COMMIT; @@ -6598,7 +6598,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20211103205732_CleanupVCVP') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20211103205732_CleanupVCVP', '7.0.13'); + VALUES ('20211103205732_CleanupVCVP', '8.0.6'); END IF; END $EF$; COMMIT; @@ -6626,7 +6626,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20211109195934_AdminAllowOverlapMultipleStatus') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20211109195934_AdminAllowOverlapMultipleStatus', '7.0.13'); + VALUES ('20211109195934_AdminAllowOverlapMultipleStatus', '8.0.6'); END IF; END $EF$; COMMIT; @@ -6645,7 +6645,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20211206215849_AddIndexToUserProfileHistory') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20211206215849_AddIndexToUserProfileHistory', '7.0.13'); + VALUES ('20211206215849_AddIndexToUserProfileHistory', '8.0.6'); END IF; END $EF$; COMMIT; @@ -6659,7 +6659,7 @@ BEGIN CREATE TABLE gateway."AdminUserProfile" ( "AdminUserProfileId" uuid NOT NULL, "Username" character varying(255) NOT NULL, - "Email" character varying(255) NULL, + "Email" character varying(255), "LastLoginDateTime" timestamp without time zone NOT NULL, "CreatedBy" character varying(60) NOT NULL, "CreatedDateTime" timestamp without time zone NOT NULL, @@ -6681,7 +6681,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20211221220853_CreateAdminUserProfile') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20211221220853_CreateAdminUserProfile', '7.0.13'); + VALUES ('20211221220853_CreateAdminUserProfile', '8.0.6'); END IF; END $EF$; COMMIT; @@ -6700,7 +6700,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220112050257_DropEmailFromAdminUserProfile') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220112050257_DropEmailFromAdminUserProfile', '7.0.13'); + VALUES ('20220112050257_DropEmailFromAdminUserProfile', '8.0.6'); END IF; END $EF$; COMMIT; @@ -6720,7 +6720,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220127215846_AddAllLaboratoryOrdersCommentEntryType') THEN INSERT INTO gateway."CommentEntryTypeCode" ("CommentEntryCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('ALO', 'System', TIMESTAMP '2019-05-01 00:00:00', 'Comment for a Laboratory Entry', 'System', TIMESTAMP '2019-05-01 00:00:00'); + VALUES ('ALO', 'System', TIMESTAMP '2019-05-01T00:00:00', 'Comment for a Laboratory Entry', 'System', TIMESTAMP '2019-05-01T00:00:00'); END IF; END $EF$; @@ -6728,7 +6728,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220127215846_AddAllLaboratoryOrdersCommentEntryType') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220127215846_AddAllLaboratoryOrdersCommentEntryType', '7.0.13'); + VALUES ('20220127215846_AddAllLaboratoryOrdersCommentEntryType', '8.0.6'); END IF; END $EF$; COMMIT; @@ -7562,7 +7562,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220419231412_EF6Upgrade') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220419231412_EF6Upgrade', '7.0.13'); + VALUES ('20220419231412_EF6Upgrade', '8.0.6'); END IF; END $EF$; COMMIT; @@ -7581,7 +7581,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220420211930_NoteJournalType') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220420211930_NoteJournalType', '7.0.13'); + VALUES ('20220420211930_NoteJournalType', '8.0.6'); END IF; END $EF$; COMMIT; @@ -7600,7 +7600,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220420212201_RenameNoteJournal') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220420212201_RenameNoteJournal', '7.0.13'); + VALUES ('20220420212201_RenameNoteJournal', '8.0.6'); END IF; END $EF$; COMMIT; @@ -7628,7 +7628,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220503003723_AddDateTruncate') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220503003723_AddDateTruncate', '7.0.13'); + VALUES ('20220503003723_AddDateTruncate', '8.0.6'); END IF; END $EF$; COMMIT; @@ -7647,7 +7647,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220510181145_UpdateParentEntryIdPrecision') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220510181145_UpdateParentEntryIdPrecision', '7.0.13'); + VALUES ('20220510181145_UpdateParentEntryIdPrecision', '8.0.6'); END IF; END $EF$; COMMIT; @@ -7665,7 +7665,7 @@ END $EF$; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220518183026_UserProfileToSFK') THEN - ALTER TABLE gateway."UserProfileHistory" ADD "TermsOfServiceId" uuid NULL; + ALTER TABLE gateway."UserProfileHistory" ADD "TermsOfServiceId" uuid; END IF; END $EF$; @@ -7694,7 +7694,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220518183026_UserProfileToSFK') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220518183026_UserProfileToSFK', '7.0.13'); + VALUES ('20220518183026_UserProfileToSFK', '8.0.6'); END IF; END $EF$; COMMIT; @@ -7763,7 +7763,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220518211625_UserRemoveAcceptedToS') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220518211625_UserRemoveAcceptedToS', '7.0.13'); + VALUES ('20220518211625_UserRemoveAcceptedToS', '8.0.6'); END IF; END $EF$; COMMIT; @@ -7791,7 +7791,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220519190920_ToSJobCleanup') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220519190920_ToSJobCleanup', '7.0.13'); + VALUES ('20220519190920_ToSJobCleanup', '8.0.6'); END IF; END $EF$; COMMIT; @@ -7803,7 +7803,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220519201544_ToSUpdate051922') THEN INSERT INTO gateway."LegalAgreement" ("LegalAgreementsId", "CreatedBy", "CreatedDateTime", "EffectiveDate", "LegalAgreementCode", "LegalText", "UpdatedBy", "UpdatedDateTime") - VALUES ('eafeee76-8a64-49ee-81ba-ddfe2c01deb8', 'System', TIMESTAMPTZ '2022-05-19 00:00:00Z', TIMESTAMPTZ '2022-05-19 00:00:00Z', 'ToS', '

HealthGateway Terms of Service

+ VALUES ('eafeee76-8a64-49ee-81ba-ddfe2c01deb8', 'System', TIMESTAMPTZ '2022-05-19T00:00:00Z', TIMESTAMPTZ '2022-05-19T00:00:00Z', 'ToS', '

HealthGateway Terms of Service

Use of the Health Gateway service (the "Service") is governed by the following terms and conditions. Please read these terms and @@ -8014,7 +8014,7 @@ BEGIN with the laws of British Columbia and the federal laws of Canada applicable therein.

- ', 'System', TIMESTAMPTZ '2022-05-19 00:00:00Z'); + ', 'System', TIMESTAMPTZ '2022-05-19T00:00:00Z'); END IF; END $EF$; @@ -8022,7 +8022,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220519201544_ToSUpdate051922') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220519201544_ToSUpdate051922', '7.0.13'); + VALUES ('20220519201544_ToSUpdate051922', '8.0.6'); END IF; END $EF$; COMMIT; @@ -8034,7 +8034,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220606211634_RevampTermsOfService') THEN INSERT INTO gateway."LegalAgreement" ("LegalAgreementsId", "CreatedBy", "CreatedDateTime", "EffectiveDate", "LegalAgreementCode", "LegalText", "UpdatedBy", "UpdatedDateTime") - VALUES ('2fab66e7-37c9-4b03-ba25-e8fad604dc7f', 'System', TIMESTAMPTZ '2022-06-07 00:00:00Z', TIMESTAMPTZ '2022-06-07 00:00:00Z', 'ToS', '

Health Gateway Terms of Service

+ VALUES ('2fab66e7-37c9-4b03-ba25-e8fad604dc7f', 'System', TIMESTAMPTZ '2022-06-07T00:00:00Z', TIMESTAMPTZ '2022-06-07T00:00:00Z', 'ToS', '

Health Gateway Terms of Service

Last updated: June 7, 2022

Health Gateway service (the "Service") is governed by the @@ -8274,7 +8274,7 @@ BEGIN information, even if the Government of British Columbia has been specifically advised of the possibility of such damages.

- ', 'System', TIMESTAMPTZ '2022-06-07 00:00:00Z'); + ', 'System', TIMESTAMPTZ '2022-06-07T00:00:00Z'); END IF; END $EF$; @@ -8282,7 +8282,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220606211634_RevampTermsOfService') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220606211634_RevampTermsOfService', '7.0.13'); + VALUES ('20220606211634_RevampTermsOfService', '8.0.6'); END IF; END $EF$; COMMIT; @@ -8309,7 +8309,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220607220711_RemoveCommunicationEmail') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220607220711_RemoveCommunicationEmail', '7.0.13'); + VALUES ('20220607220711_RemoveCommunicationEmail', '8.0.6'); END IF; END $EF$; COMMIT; @@ -8349,7 +8349,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220819210700_UpdateResourceDelegate') THEN INSERT INTO gateway."ResourceDelegateReasonCode" ("ReasonTypeCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Guardian', 'System', TIMESTAMPTZ '2022-08-01 00:00:00Z', 'Resource Delegation for attested guardian', 'System', TIMESTAMPTZ '2022-08-01 00:00:00Z'); + VALUES ('Guardian', 'System', TIMESTAMPTZ '2022-08-01T00:00:00Z', 'Resource Delegation for attested guardian', 'System', TIMESTAMPTZ '2022-08-01T00:00:00Z'); END IF; END $EF$; @@ -8357,7 +8357,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220819210700_UpdateResourceDelegate') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220819210700_UpdateResourceDelegate', '7.0.13'); + VALUES ('20220819210700_UpdateResourceDelegate', '8.0.6'); END IF; END $EF$; COMMIT; @@ -8616,7 +8616,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220822182613_ToSUpdate') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220822182613_ToSUpdate', '7.0.13'); + VALUES ('20220822182613_ToSUpdate', '8.0.6'); END IF; END $EF$; COMMIT; @@ -8635,7 +8635,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220823003707_RemoveGenericCache') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220823003707_RemoveGenericCache', '7.0.13'); + VALUES ('20220823003707_RemoveGenericCache', '8.0.6'); END IF; END $EF$; COMMIT; @@ -8647,7 +8647,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220825002518_ClinicalDocCommentEntry') THEN INSERT INTO gateway."CommentEntryTypeCode" ("CommentEntryCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('CDO', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z', 'Comment for Clinical Documents Entry', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z'); + VALUES ('CDO', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z', 'Comment for Clinical Documents Entry', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z'); END IF; END $EF$; @@ -8655,7 +8655,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220825002518_ClinicalDocCommentEntry') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220825002518_ClinicalDocCommentEntry', '7.0.13'); + VALUES ('20220825002518_ClinicalDocCommentEntry', '8.0.6'); END IF; END $EF$; COMMIT; @@ -8667,7 +8667,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220830055608_NewCDOAppType') THEN INSERT INTO gateway."ProgramTypeCode" ("ProgramCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('CDO', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z', 'Clinical Document Service', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z'); + VALUES ('CDO', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z', 'Clinical Document Service', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z'); END IF; END $EF$; @@ -8675,7 +8675,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220830055608_NewCDOAppType') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220830055608_NewCDOAppType', '7.0.13'); + VALUES ('20220830055608_NewCDOAppType', '8.0.6'); END IF; END $EF$; COMMIT; @@ -8687,7 +8687,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220903162916_AddMobileComms') THEN INSERT INTO gateway."CommunicationTypeCode" ("StatusCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Mobile', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z', 'Mobile communication type', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z'); + VALUES ('Mobile', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z', 'Mobile communication type', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z'); END IF; END $EF$; @@ -8751,7 +8751,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20220903162916_AddMobileComms') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20220903162916_AddMobileComms', '7.0.13'); + VALUES ('20220903162916_AddMobileComms', '8.0.6'); END IF; END $EF$; COMMIT; @@ -8762,14 +8762,14 @@ START TRANSACTION; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20221005233413_AddYearOfBirthToUserProfile') THEN - ALTER TABLE gateway."UserProfileHistory" ADD "YearOfBirth" character varying(4) NULL; + ALTER TABLE gateway."UserProfileHistory" ADD "YearOfBirth" character varying(4); END IF; END $EF$; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20221005233413_AddYearOfBirthToUserProfile') THEN - ALTER TABLE gateway."UserProfile" ADD "YearOfBirth" character varying(4) NULL; + ALTER TABLE gateway."UserProfile" ADD "YearOfBirth" character varying(4); END IF; END $EF$; @@ -8808,7 +8808,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20221005233413_AddYearOfBirthToUserProfile') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20221005233413_AddYearOfBirthToUserProfile', '7.0.13'); + VALUES ('20221005233413_AddYearOfBirthToUserProfile', '8.0.6'); END IF; END $EF$; COMMIT; @@ -8820,7 +8820,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20221019215540_HospitalVisitCommentEntry') THEN INSERT INTO gateway."CommentEntryTypeCode" ("CommentEntryCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Hos', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'Comment for Hospital Visits Entry', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('Hos', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Comment for Hospital Visits Entry', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -8828,7 +8828,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20221019215540_HospitalVisitCommentEntry') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20221019215540_HospitalVisitCommentEntry', '7.0.13'); + VALUES ('20221019215540_HospitalVisitCommentEntry', '8.0.6'); END IF; END $EF$; COMMIT; @@ -8854,7 +8854,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20221208194329_AddUserProfileToUserFeedback') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20221208194329_AddUserProfileToUserFeedback', '7.0.13'); + VALUES ('20221208194329_AddUserProfileToUserFeedback', '8.0.6'); END IF; END $EF$; COMMIT; @@ -8865,14 +8865,14 @@ START TRANSACTION; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20221209222859_AddLastLoginClientCodeToUserProfile') THEN - ALTER TABLE gateway."UserProfileHistory" ADD "LastLoginClientCode" character varying(10) NULL; + ALTER TABLE gateway."UserProfileHistory" ADD "LastLoginClientCode" character varying(10); END IF; END $EF$; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20221209222859_AddLastLoginClientCodeToUserProfile') THEN - ALTER TABLE gateway."UserProfile" ADD "LastLoginClientCode" character varying(10) NULL; + ALTER TABLE gateway."UserProfile" ADD "LastLoginClientCode" character varying(10); END IF; END $EF$; @@ -8895,9 +8895,9 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20221209222859_AddLastLoginClientCodeToUserProfile') THEN INSERT INTO gateway."UserLoginClientTypeCode" ("UserLoginClientCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Mobile', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'Code for a login from the hg mobile app', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('Mobile', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Code for a login from the hg mobile app', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); INSERT INTO gateway."UserLoginClientTypeCode" ("UserLoginClientCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Web', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z', 'Code for a login from the hg web app', 'System', TIMESTAMPTZ '2019-05-01 00:00:00Z'); + VALUES ('Web', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Code for a login from the hg web app', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); END IF; END $EF$; @@ -8964,7 +8964,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20221209222859_AddLastLoginClientCodeToUserProfile') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20221209222859_AddLastLoginClientCodeToUserProfile', '7.0.13'); + VALUES ('20221209222859_AddLastLoginClientCodeToUserProfile', '8.0.6'); END IF; END $EF$; COMMIT; @@ -8990,7 +8990,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230104233040_OnDeleteSetNullUserFeedbackUserProfile') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20230104233040_OnDeleteSetNullUserFeedbackUserProfile', '7.0.13'); + VALUES ('20230104233040_OnDeleteSetNullUserFeedbackUserProfile', '8.0.6'); END IF; END $EF$; COMMIT; @@ -9010,7 +9010,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230313212610_ResolveMigrationIssueForCommentEntryType') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20230313212610_ResolveMigrationIssueForCommentEntryType', '7.0.13'); + VALUES ('20230313212610_ResolveMigrationIssueForCommentEntryType', '8.0.6'); END IF; END $EF$; COMMIT; @@ -9053,7 +9053,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230314220815_CreateDependentDelegationTables') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20230314220815_CreateDependentDelegationTables', '7.0.13'); + VALUES ('20230314220815_CreateDependentDelegationTables', '8.0.6'); END IF; END $EF$; COMMIT; @@ -9064,7 +9064,7 @@ START TRANSACTION; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230323175128_AddExpiryDateToResourceDelegate') THEN - ALTER TABLE gateway."ResourceDelegate" ADD "ExpiryDate" date NULL; + ALTER TABLE gateway."ResourceDelegate" ADD "ExpiryDate" date; END IF; END $EF$; @@ -9072,7 +9072,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230323175128_AddExpiryDateToResourceDelegate') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20230323175128_AddExpiryDateToResourceDelegate', '7.0.13'); + VALUES ('20230323175128_AddExpiryDateToResourceDelegate', '8.0.6'); END IF; END $EF$; COMMIT; @@ -9119,9 +9119,9 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230412022509_CreateDependentAuditTables') THEN INSERT INTO gateway."DependentAuditOperationCode" ("Code", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Protect', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z', 'Protect Dependent Operation Code', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z'); + VALUES ('Protect', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z', 'Protect Dependent Operation Code', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z'); INSERT INTO gateway."DependentAuditOperationCode" ("Code", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Unprotect', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z', 'Unprotect Dependent Operation Code', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z'); + VALUES ('Unprotect', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z', 'Unprotect Dependent Operation Code', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z'); END IF; END $EF$; @@ -9136,7 +9136,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230412022509_CreateDependentAuditTables') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20230412022509_CreateDependentAuditTables', '7.0.13'); + VALUES ('20230412022509_CreateDependentAuditTables', '8.0.6'); END IF; END $EF$; COMMIT; @@ -9148,7 +9148,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230421214103_TourChangeInitial') THEN INSERT INTO gateway."ApplicationSetting" ("ApplicationSettingsId", "Application", "Component", "CreatedBy", "CreatedDateTime", "Key", "UpdatedBy", "UpdatedDateTime", "Value") - VALUES ('bfcb45f6-27f9-4c0c-b494-80b147bcba8e', 'WEB', 'Tour', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z', 'latestChangeDateTime', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z', '2023-05-03T22:00:00.0000000Z'); + VALUES ('bfcb45f6-27f9-4c0c-b494-80b147bcba8e', 'WEB', 'Tour', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z', 'latestChangeDateTime', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z', '2023-05-03T22:00:00.0000000Z'); END IF; END $EF$; @@ -9156,7 +9156,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230421214103_TourChangeInitial') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20230421214103_TourChangeInitial', '7.0.13'); + VALUES ('20230421214103_TourChangeInitial', '8.0.6'); END IF; END $EF$; COMMIT; @@ -9174,7 +9174,7 @@ END $EF$; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230428053159_ReworkMessageVerfications') THEN - ALTER TABLE gateway."MessagingVerification" ADD "EmailAddress" character varying(254) NULL; + ALTER TABLE gateway."MessagingVerification" ADD "EmailAddress" character varying(254); END IF; END $EF$; @@ -9195,21 +9195,21 @@ END $EF$; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230428053159_ReworkMessageVerfications') THEN - ALTER TABLE gateway."Email" ADD "NotificationId" uuid NULL; + ALTER TABLE gateway."Email" ADD "NotificationId" uuid; END IF; END $EF$; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230428053159_ReworkMessageVerfications') THEN - ALTER TABLE gateway."Email" ADD "Personalization" jsonb NULL; + ALTER TABLE gateway."Email" ADD "Personalization" jsonb; END IF; END $EF$; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230428053159_ReworkMessageVerfications') THEN - ALTER TABLE gateway."Email" ADD "Template" character varying(60) NULL; + ALTER TABLE gateway."Email" ADD "Template" character varying(60); END IF; END $EF$; @@ -9224,7 +9224,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230428053159_ReworkMessageVerfications') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20230428053159_ReworkMessageVerfications', '7.0.13'); + VALUES ('20230428053159_ReworkMessageVerfications', '8.0.6'); END IF; END $EF$; COMMIT; @@ -9243,7 +9243,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230501202904_RemoveRequiredInviteKey') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20230501202904_RemoveRequiredInviteKey', '7.0.13'); + VALUES ('20230501202904_RemoveRequiredInviteKey', '8.0.6'); END IF; END $EF$; COMMIT; @@ -9269,7 +9269,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230504184240_CreateMessagingOutbox') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20230504184240_CreateMessagingOutbox', '7.0.13'); + VALUES ('20230504184240_CreateMessagingOutbox', '8.0.6'); END IF; END $EF$; COMMIT; @@ -9374,9 +9374,9 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230508204917_CreateBlockedAccessTable') THEN INSERT INTO gateway."AuditGroupCode" ("Code", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('BlockedAccess', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z', 'Audit Blocked Access Group Code', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z'); + VALUES ('BlockedAccess', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z', 'Audit Blocked Access Group Code', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z'); INSERT INTO gateway."AuditGroupCode" ("Code", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('Dependent', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z', 'Audit Dependent Group Code', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z'); + VALUES ('Dependent', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z', 'Audit Dependent Group Code', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z'); END IF; END $EF$; @@ -9384,11 +9384,11 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230508204917_CreateBlockedAccessTable') THEN INSERT INTO gateway."AuditOperationCode" ("Code", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('ChangeDataSourceAccess', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z', 'Change Data Source Access Operation Code', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z'); + VALUES ('ChangeDataSourceAccess', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z', 'Change Data Source Access Operation Code', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z'); INSERT INTO gateway."AuditOperationCode" ("Code", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('ProtectDependent', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z', 'Protect Dependent Operation Code', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z'); + VALUES ('ProtectDependent', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z', 'Protect Dependent Operation Code', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z'); INSERT INTO gateway."AuditOperationCode" ("Code", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('UnprotectDependent', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z', 'Unprotect Dependent Operation Code', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z'); + VALUES ('UnprotectDependent', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z', 'Unprotect Dependent Operation Code', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z'); END IF; END $EF$; @@ -9429,7 +9429,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230508204917_CreateBlockedAccessTable') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20230508204917_CreateBlockedAccessTable', '7.0.13'); + VALUES ('20230508204917_CreateBlockedAccessTable', '8.0.6'); END IF; END $EF$; COMMIT; @@ -9440,21 +9440,21 @@ START TRANSACTION; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230524201808_AddColumnsPharmaCareDrug') THEN - ALTER TABLE gateway."PharmaCareDrug" ADD "PharmacyAssessmentTitle" character varying(250) NULL; + ALTER TABLE gateway."PharmaCareDrug" ADD "PharmacyAssessmentTitle" character varying(250); END IF; END $EF$; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230524201808_AddColumnsPharmaCareDrug') THEN - ALTER TABLE gateway."PharmaCareDrug" ADD "PrescriptionProvided" boolean NULL; + ALTER TABLE gateway."PharmaCareDrug" ADD "PrescriptionProvided" boolean; END IF; END $EF$; DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230524201808_AddColumnsPharmaCareDrug') THEN - ALTER TABLE gateway."PharmaCareDrug" ADD "RedirectedToHealthCareProvider" boolean NULL; + ALTER TABLE gateway."PharmaCareDrug" ADD "RedirectedToHealthCareProvider" boolean; END IF; END $EF$; @@ -9462,7 +9462,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230524201808_AddColumnsPharmaCareDrug') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20230524201808_AddColumnsPharmaCareDrug', '7.0.13'); + VALUES ('20230524201808_AddColumnsPharmaCareDrug', '8.0.6'); END IF; END $EF$; COMMIT; @@ -9474,7 +9474,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230526034844_AddNewProgramTypeCode') THEN INSERT INTO gateway."ProgramTypeCode" ("ProgramCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('PHAR-ASSMT', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z', 'Pharmacy Assessment', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z'); + VALUES ('PHAR-ASSMT', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z', 'Pharmacy Assessment', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z'); END IF; END $EF$; @@ -9482,7 +9482,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230526034844_AddNewProgramTypeCode') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20230526034844_AddNewProgramTypeCode', '7.0.13'); + VALUES ('20230526034844_AddNewProgramTypeCode', '8.0.6'); END IF; END $EF$; COMMIT; @@ -9503,7 +9503,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230530175319_UpdateExpiryDateToRequired') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20230530175319_UpdateExpiryDateToRequired', '7.0.13'); + VALUES ('20230530175319_UpdateExpiryDateToRequired', '8.0.6'); END IF; END $EF$; COMMIT; @@ -9515,7 +9515,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230811223424_AddDiagnosticImagingCommentEntryTypeCode') THEN INSERT INTO gateway."CommentEntryTypeCode" ("CommentEntryCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('DIA', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z', 'Comment for a Diagnostic Imaging Entry', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z'); + VALUES ('DIA', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z', 'Comment for a Diagnostic Imaging Entry', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z'); END IF; END $EF$; @@ -9523,7 +9523,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230811223424_AddDiagnosticImagingCommentEntryTypeCode') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20230811223424_AddDiagnosticImagingCommentEntryTypeCode', '7.0.13'); + VALUES ('20230811223424_AddDiagnosticImagingCommentEntryTypeCode', '8.0.6'); END IF; END $EF$; COMMIT; @@ -9535,7 +9535,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230824180327_AddCancerScreeningCommentEntryTypeCode') THEN INSERT INTO gateway."CommentEntryTypeCode" ("CommentEntryCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") - VALUES ('CNS', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z', 'Comment for a Cancer Screening Entry', 'System', TIMESTAMPTZ '2019-05-01 07:00:00Z'); + VALUES ('CNS', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z', 'Comment for a Cancer Screening Entry', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z'); END IF; END $EF$; @@ -9543,7 +9543,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20230824180327_AddCancerScreeningCommentEntryTypeCode') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20230824180327_AddCancerScreeningCommentEntryTypeCode', '7.0.13'); + VALUES ('20230824180327_AddCancerScreeningCommentEntryTypeCode', '8.0.6'); END IF; END $EF$; COMMIT; @@ -9569,7 +9569,7 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20231031220124_ProfileIndexes') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20231031220124_ProfileIndexes', '7.0.13'); + VALUES ('20231031220124_ProfileIndexes', '8.0.6'); END IF; END $EF$; COMMIT; @@ -9588,7 +9588,544 @@ DO $EF$ BEGIN IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20231103223810_RemoveDateTruncate') THEN INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") - VALUES ('20231103223810_RemoveDateTruncate', '7.0.13'); + VALUES ('20231103223810_RemoveDateTruncate', '8.0.6'); + END IF; +END $EF$; +COMMIT; + +START TRANSACTION; + + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240115221144_AddIndicesToDrugTables') THEN + CREATE INDEX "IX_PharmaCareDrug_DINPIN" ON gateway."PharmaCareDrug" ("DINPIN"); + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240115221144_AddIndicesToDrugTables') THEN + CREATE INDEX "IX_DrugProduct_DrugIdentificationNumber" ON gateway."DrugProduct" ("DrugIdentificationNumber"); + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240115221144_AddIndicesToDrugTables') THEN + INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") + VALUES ('20240115221144_AddIndicesToDrugTables', '8.0.6'); + END IF; +END $EF$; +COMMIT; + +START TRANSACTION; + + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240119003540_UseDateColumnTypeForDrugTableDates') THEN + ALTER TABLE gateway."DrugProduct" ALTER COLUMN "LastUpdate" TYPE Date; + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240119003540_UseDateColumnTypeForDrugTableDates') THEN + INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") + VALUES ('20240119003540_UseDateColumnTypeForDrugTableDates', '8.0.6'); + END IF; +END $EF$; +COMMIT; + +START TRANSACTION; + + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240311193221_AddSalesforceUserLoginClientTypeCode') THEN + UPDATE gateway."UserLoginClientTypeCode" SET "Description" = 'Code for a login from the HG mobile app' + WHERE "UserLoginClientCode" = 'Mobile'; + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240311193221_AddSalesforceUserLoginClientTypeCode') THEN + UPDATE gateway."UserLoginClientTypeCode" SET "Description" = 'Code for a login from the HG web app' + WHERE "UserLoginClientCode" = 'Web'; + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240311193221_AddSalesforceUserLoginClientTypeCode') THEN + INSERT INTO gateway."UserLoginClientTypeCode" ("UserLoginClientCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") + VALUES ('Salesforce', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Code for a login from the HG Salesforce app', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240311193221_AddSalesforceUserLoginClientTypeCode') THEN + INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") + VALUES ('20240311193221_AddSalesforceUserLoginClientTypeCode', '8.0.6'); + END IF; +END $EF$; +COMMIT; + +START TRANSACTION; + + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240311220606_AddClientCodeToUserFeedback') THEN + ALTER TABLE gateway."UserFeedback" ADD "ClientCode" character varying(10); + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240311220606_AddClientCodeToUserFeedback') THEN + CREATE INDEX "IX_UserFeedback_ClientCode" ON gateway."UserFeedback" ("ClientCode"); + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240311220606_AddClientCodeToUserFeedback') THEN + ALTER TABLE gateway."UserFeedback" ADD CONSTRAINT "FK_UserFeedback_UserLoginClientTypeCode_ClientCode" FOREIGN KEY ("ClientCode") REFERENCES gateway."UserLoginClientTypeCode" ("UserLoginClientCode") ON DELETE RESTRICT; + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240311220606_AddClientCodeToUserFeedback') THEN + INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") + VALUES ('20240311220606_AddClientCodeToUserFeedback', '8.0.6'); + END IF; +END $EF$; +COMMIT; + +START TRANSACTION; + + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240313200110_CreateBetaFeatureAccessTable') THEN + CREATE TABLE gateway."BetaFeatureCode" ( + "Code" character varying(50) NOT NULL, + "Description" character varying(50) NOT NULL, + "CreatedBy" character varying(60) NOT NULL, + "CreatedDateTime" timestamp with time zone NOT NULL, + "UpdatedBy" character varying(60) NOT NULL, + "UpdatedDateTime" timestamp with time zone NOT NULL, + CONSTRAINT "PK_BetaFeatureCode" PRIMARY KEY ("Code") + ); + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240313200110_CreateBetaFeatureAccessTable') THEN + CREATE TABLE gateway."BetaFeatureAccess" ( + "UserProfileId" character varying(52) NOT NULL, + "BetaFeatureCode" character varying(50) NOT NULL, + "CreatedBy" character varying(60) NOT NULL, + "CreatedDateTime" timestamp with time zone NOT NULL, + "UpdatedBy" character varying(60) NOT NULL, + "UpdatedDateTime" timestamp with time zone NOT NULL, + CONSTRAINT "PK_BetaFeatureAccess" PRIMARY KEY ("UserProfileId", "BetaFeatureCode"), + CONSTRAINT "FK_BetaFeatureAccess_BetaFeatureCode_BetaFeatureCode" FOREIGN KEY ("BetaFeatureCode") REFERENCES gateway."BetaFeatureCode" ("Code") ON DELETE RESTRICT, + CONSTRAINT "FK_BetaFeatureAccess_UserProfile_UserProfileId" FOREIGN KEY ("UserProfileId") REFERENCES gateway."UserProfile" ("UserProfileId") ON DELETE CASCADE + ); + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240313200110_CreateBetaFeatureAccessTable') THEN + INSERT INTO gateway."BetaFeatureCode" ("Code", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") + VALUES ('Salesforce', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z', 'Salesforce Beta Feature Code', 'System', TIMESTAMPTZ '2019-05-01T07:00:00Z'); + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240313200110_CreateBetaFeatureAccessTable') THEN + CREATE INDEX "IX_BetaFeatureAccess_BetaFeatureCode" ON gateway."BetaFeatureAccess" ("BetaFeatureCode"); + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240313200110_CreateBetaFeatureAccessTable') THEN + INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") + VALUES ('20240313200110_CreateBetaFeatureAccessTable', '8.0.6'); + END IF; +END $EF$; +COMMIT; + +START TRANSACTION; + + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240503192135_UpdateDatabaseAssets') THEN + UPDATE gateway."EmailTemplate" SET "Body" = ' + + + Email Validation + + + + + + + + + + + + + + + + +
+
+ Health Gateway Logo +
+
+

Almost there!

+

+ We''ve received a request to register your email address + for a Health Gateway account. +

+

+ To activate your account, please verify your email by + clicking the link: +

+ + Health Gateway Account Verification + +

+ This email verification link will expire in + ${ExpiryHours} hours. +

+
+ + + ' + WHERE "EmailTemplateId" = '040c2ec3-d6c0-4199-9e4b-ebe6da48d52a'; + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240503192135_UpdateDatabaseAssets') THEN + UPDATE gateway."EmailTemplate" SET "Body" = ' + + + Account Recovered + + + + + + + + + + + + + + + + +
+
+ Health Gateway Logo +
+
+

Hi,

+

+ You have successfully recovered your Health Gateway + account. You may continue to use the service as you did + before. +

+

Thanks,

+

Health Gateway Team

+
+ + + ' + WHERE "EmailTemplateId" = '2fe8c825-d4de-4884-be6a-01a97b466425'; + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240503192135_UpdateDatabaseAssets') THEN + UPDATE gateway."EmailTemplate" SET "Body" = ' + + + Account Closed + + + + + + + + + + + + + + + + +
+
+ Health Gateway Logo +
+
+

Hi,

+

+ You have closed your Health Gateway account. If you + would like to recover your account, please login to + Health Gateway within the next 30 days and click + “Recover Account”. No further action is required if you + want your account and personally entered information to + be removed from the Health Gateway after this time + period. +

+

Thanks,

+

Health Gateway Team

+
+ + + ' + WHERE "EmailTemplateId" = '79503a38-c14a-4992-b2fe-5586629f552e'; + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240503192135_UpdateDatabaseAssets') THEN + UPDATE gateway."EmailTemplate" SET "Body" = ' + + + Account Removed + + + + + + + + + + + + + + + + +
+
+ Health Gateway Logo +
+
+

Hi,

+

+ Your Health Gateway account closure has been completed. + Your account and personally entered information have + been removed from the application. You are welcome to + register again for the Health Gateway in the future. +

+

Thanks,

+

Health Gateway Team

+
+ + + ' + WHERE "EmailTemplateId" = 'd9898318-4e53-4074-9979-5d24bd370055'; + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240503192135_UpdateDatabaseAssets') THEN + INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") + VALUES ('20240503192135_UpdateDatabaseAssets', '8.0.6'); + END IF; +END $EF$; +COMMIT; + +START TRANSACTION; + + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240521174320_AddMobileUserLoginClientCodes') THEN + INSERT INTO gateway."UserLoginClientTypeCode" ("UserLoginClientCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") + VALUES ('Android', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Code for a login from the HG Android mobile app', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); + INSERT INTO gateway."UserLoginClientTypeCode" ("UserLoginClientCode", "CreatedBy", "CreatedDateTime", "Description", "UpdatedBy", "UpdatedDateTime") + VALUES ('iOS', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', 'Code for a login from the HG iOS mobile app', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240521174320_AddMobileUserLoginClientCodes') THEN + INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") + VALUES ('20240521174320_AddMobileUserLoginClientCodes', '8.0.6'); + END IF; +END $EF$; +COMMIT; + +START TRANSACTION; + + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240529224631_AddEmailTemplateForAddDependentMismatch') THEN + INSERT INTO gateway."EmailTemplate" ("EmailTemplateId", "Body", "CreatedBy", "CreatedDateTime", "EffectiveDate", "ExpiryDate", "FormatCode", "From", "Name", "Priority", "Subject", "UpdatedBy", "UpdatedDateTime") + VALUES ('491dabc6-f799-427c-ace4-b49ece2d612c', ' + + + Health Gateway Debug Info: Add Dependent Mismatch + + + + Hi Health Gateway Team, +

+ Find debug information below relating to a failed request to add a + dependent due to mismatched data. +

+ + + + + + + +
Delegate HDID +
${delegateHdid}
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RequestResponse
PHN
${requestPhn}
${responsePhn}
Given Name(s)
${requestFirstName}
${responseFirstName}
Last Name
${requestLastName}
${responseLastName}
Birthdate
${requestBirthdate}
${responseBirthdate}
+ + + ', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z', TIMESTAMPTZ '2019-05-01T00:00:00Z', NULL, 'HTML', 'HG_Donotreply@gov.bc.ca', 'AdminAddDependentMismatch', 1, 'Health Gateway Debug Info: Add Dependent Mismatch', 'System', TIMESTAMPTZ '2019-05-01T00:00:00Z'); + END IF; +END $EF$; + +DO $EF$ +BEGIN + IF NOT EXISTS(SELECT 1 FROM gateway."__EFMigrationsHistory" WHERE "MigrationId" = '20240529224631_AddEmailTemplateForAddDependentMismatch') THEN + INSERT INTO gateway."__EFMigrationsHistory" ("MigrationId", "ProductVersion") + VALUES ('20240529224631_AddEmailTemplateForAddDependentMismatch', '8.0.6'); END IF; END $EF$; COMMIT;