AzStackHciRemoteSupport/AzStackHCI.RemoteSupport.psm1
<#############################################################
# # # Copyright (C) Microsoft Corporation. All rights reserved. # # # #############################################################> Import-Module $PSScriptRoot\AzStackHCI.RemoteSupport.Helpers.psm1 -Force -DisableNameChecking -Global Import-Module $PSScriptRoot\..\AzStackHci.EnvironmentChecker.Utilities.psm1 -Force -DisableNameChecking -Global Import-Module $PSScriptRoot\..\AzStackHci.EnvironmentChecker.Reporting.psm1 -Force -DisableNameChecking -Global Import-LocalizedData -BindingVariable lvsTxt -FileName AzStackHCI.RemoteSupport.Strings.psd1 <# .SYNOPSIS Enables Remote Support. .DESCRIPTION Enables Remote Support allows authorized Microsoft Support users to remotely access the device for diagnostics or repair depending on the access level granted. During Remote Support JEA configuration, WinRM will be restarted twice and that can break the PsSession to node if you are installing Remote Support remotely. In that case, connect to remote node again and execute Enable cmdlet again after 4-5 minutes. PS C:\> Enter-PsSession -ComputerName <NodeName> -Credential $cred PS C:\> Enable-AzStackHciRemoteSupport -AccessLevel Diagnostics -ExpireInMinutes 1440 -SasCredential "Sample SAS" -PassThru Processing data from remote server v-host1 failed with the following error message: The I/O operation has been aborted because of either a thread exit or an application request. For more information, see the about_Remote_Troubleshooting Help topic. PS C:\> Enter-PsSession -ComputerName <NodeName> -Credential $cred PS C:\> Enable-AzStackHciRemoteSupport -AccessLevel Diagnostics -ExpireInMinutes 1440 -SasCredential "Sample SAS" -PassThru .PARAMETER AccessLevel Controls the remote operations that can be performed. This can be either Diagnostics or DiagnosticsAndRepair. .PARAMETER ExpireInDays Optional. Defaults to 8 hours. .PARAMETER SasCredential Hybrid Connection SAS Credential. .PARAMETER AgreeToRemoteSupportConsent Optional. If set to true then records user consent as provided and proceeds without prompt. .EXAMPLE The example below enables remote support for diagnostics access level for specified duration. After expiration no more remote access is allowed. During Remote Support JEA configuration, WinRM will be restarted twice and that can break the PsSession to node if you are installing Remote Support remotely. In that case, connect to remote node again and execute Enable cmdlet again after 4-5 minutes. PS C:\> Enter-PsSession -ComputerName <NodeName> -Credential $cred PS C:\> Enable-AzStackHciRemoteSupport -AccessLevel Diagnostics -ExpireInMinutes 1440 -SasCredential "Sample SAS" -PassThru Processing data from remote server v-host1 failed with the following error message: The I/O operation has been aborted because of either a thread exit or an application request. For more information, see the about_Remote_Troubleshooting Help topic. PS C:\> Enter-PsSession -ComputerName <NodeName> -Credential $cred PS C:\> Enable-AzStackHciRemoteSupport -AccessLevel Diagnostics -ExpireInMinutes 1440 -SasCredential "Sample SAS" -PassThru .NOTES Requires Support VM to have stable internet connectivity. #> function Enable-AzStackHciRemoteSupport { param ( [Parameter(Mandatory=$true)] [ValidateSet("Diagnostics","DiagnosticsRepair")] [string] $AccessLevel, [Parameter(Mandatory=$false)] [int] $ExpireInMinutes = 480, [Parameter(Mandatory=$false)] [string] $SasCredential, [Parameter(Mandatory=$false)] [switch] $AgreeToRemoteSupportConsent, [Parameter(Mandatory = $false, HelpMessage = "Return PSObject result.")] [switch] $PassThru, [Parameter(Mandatory = $false, HelpMessage = "Directory path for log and report output")] [string]$OutputPath='Enable', [Parameter(Mandatory = $false, HelpMessage = "Remove all previous progress and create a clean report")] [switch]$CleanReport = $false ) try { $OperationType = $MyInvocation.MyCommand $script:ErrorActionPreference = 'Stop' $LogSource = "AzStackHciEnvironmentChecker/RemoteSupport" $EventID = "18101" Set-AzStackHciOutputPath -Path $OutputPath -Source $LogSource # Ensure we are elevated if (Test-Elevation) { Log-Info -Message ($lvsTxt.ElevationModeInfo) -Type Info } else { Log-Info -Message ($lvsTxt.ElevationModeMsg) -Type Error -ConsoleOut throw $($lvsTxt.ElevationModeErrMsg) } Test-ModuleUpdate -PassThru:$PassThru # Call/Initialise reporting $envcheckerReport = Get-AzStackHciEnvProgress -clean:$CleanReport $envcheckerReport = Add-AzStackHciEnvJob -report $envcheckerReport $cmdResult = AzStackHCI.RemoteSupport.Helpers\Enable-AzStackHCIRemoteSupport -AccessLevel $AccessLevel -ExpireInMinutes $ExpireInMinutes -SasCredential $SasCredential -AgreeToRemoteSupportConsent:$AgreeToRemoteSupportConsent # Feedback results - user scenario if (-not $PassThru) { Write-Host 'Remote Support Results' Write-AzStackHciResult -Title 'EnableRemoteSupport' -Result $cmdResult Write-Summary -Result $cmdResult -Property1 Detail } else { return $cmdResult } } catch { $exception = $_ Trace-Execution "$OperationType failed. $exception" Trace-Execution "$($exception.ScriptStackTrace)" throw $exception } finally { $Script:ErrorActionPreference = 'SilentlyContinue' $enableResult = $($cmdResult.AdditionalData | Format-List | Out-String) # Write result to RemoteSupport channel Write-ETWLog -Source $LogSource -Message "Enable Remote Support: $enableResult `n Service Status : $(Get-Service "RemoteSupportAgent") `n JEA Endpoints: $(Get-PSSessionConfiguration "*SupportDiag*")" -EventId $EventID # Write validation result to report object and close out report $envcheckerReport | Add-Member -MemberType NoteProperty -Name 'EnableRemoteSupport' -Value $enableResult -Force $envcheckerReport = Close-AzStackHciEnvJob -report $envcheckerReport Write-AzStackHciEnvReport -report $envcheckerReport } } <# .SYNOPSIS Gets Remote Support Access. .DESCRIPTION Gets remote support access. .PARAMETER IncludeExpired Optional. Defaults to false. Indicates whether to include past expired entries. .PARAMETER Cluster Optional. Defaults to false. Indicates whether to show remote support sessions across cluster. .EXAMPLE The example below retrieves access level granted for remote support. The result will also include expired consents in the last 30 days. PS C:\> Get-AzStackHciRemoteSupportAccess -IncludeExpired -PassThru .NOTES #> function Get-AzStackHciRemoteSupportAccess { param( [Parameter(Mandatory=$false)] [switch] $IncludeExpired, [Parameter(Mandatory = $false, HelpMessage = "Return PSObject result.")] [switch] $PassThru, [Parameter(Mandatory = $false, HelpMessage = "Directory path for log and report output")] [string]$OutputPath='GetAccess', [Parameter(Mandatory = $false, HelpMessage = "Remove all previous progress and create a clean report")] [switch]$CleanReport = $true ) try { $OperationType = $MyInvocation.MyCommand $script:ErrorActionPreference = 'Stop' $LogSource = "AzStackHciEnvironmentChecker/RemoteSupport" $EventID = "18102" Set-AzStackHciOutputPath -Path $OutputPath -Source $LogSource # Ensure we are elevated if (Test-Elevation) { Log-Info -Message ($lvsTxt.ElevationModeInfo) -Type Info } else { Log-Info -Message ($lvsTxt.ElevationModeMsg) -Type Error -ConsoleOut throw $($lvsTxt.ElevationModeErrMsg) } Test-ModuleUpdate -PassThru:$PassThru # Call/Initialise reporting $envcheckerReport = Get-AzStackHciEnvProgress -clean:$CleanReport $envcheckerReport = Add-AzStackHciEnvJob -report $envcheckerReport $cmdResult = AzStackHCI.RemoteSupport.Helpers\Get-AzStackHCIRemoteSupportAccess -IncludeExpired:$IncludeExpired # Feedback results - user scenario if (-not $PassThru) { Write-Host 'Remote Support Results' Write-AzStackHciResult -Title 'GetRemoteSupportAccess' -Result $cmdResult Write-Summary -Result $cmdResult -Property1 Detail } else { return $cmdResult } } catch { $exception = $_ Trace-Execution "$OperationType failed. $exception" Trace-Execution "$($exception.ScriptStackTrace)" throw $exception } finally { $Script:ErrorActionPreference = 'SilentlyContinue' $accessResult = if (-not [string]::IsNullOrWhiteSpace($($cmdResult.AdditionalData.State))) {$($cmdResult.AdditionalData | Format-List | Out-String)} else {"No remote support access exists."} # Write result to RemoteSupport channel Write-ETWLog -Source $LogSource -Message "Get Remote Support Access: $accessResult" -EventId $EventID # Write validation result to report object and close out report $envcheckerReport | Add-Member -MemberType NoteProperty -Name 'GetRemoteSupportAccess' -Value $accessResult -Force $envcheckerReport = Close-AzStackHciEnvJob -report $envcheckerReport Write-AzStackHciEnvReport -report $envcheckerReport } } <# .SYNOPSIS Gets Remote Support Session History Details. .DESCRIPTION Session history represents all remote accesses made by Microsoft Support for either Diagnostics or DiagnosticsRepair based on the Access Level granted. .PARAMETER SessionId Optional. Session Id to get details for a specific session. If omitted then lists all sessions starting from date 'FromDate'. .PARAMETER IncludeSessionTranscript Optional. Defaults to false. Indicates whether to include complete session transcript. Transcript provides details on all operations performed during the session. .PARAMETER FromDate Optional. Defaults to last 7 days. Indicates date from where to start listing sessions from until now. .EXAMPLE The example below retrieves session history with transcript details for the specified session. PS C:\> Get-AzStackHciRemoteSupportSessionHistory -SessionId 467e3234-13f4-42f2-9422-81db248930fa -IncludeSessionTranscript $true -PassThru .EXAMPLE The example below lists session history starting from last 7 days (default) to now. PS C:\> Get-AzStackHciRemoteSupportSessionHistory -PassThru .NOTES #> function Get-AzStackHciRemoteSupportSessionHistory { param( [Parameter(Mandatory=$false)] [string] $SessionId, [Parameter(Mandatory=$false)] [switch] $IncludeSessionTranscript, [Parameter(Mandatory=$false)] [DateTime] $FromDate = (Get-Date).AddDays(-7), [Parameter(Mandatory = $false, HelpMessage = "Return PSObject result.")] [switch] $PassThru, [Parameter(Mandatory = $false, HelpMessage = "Directory path for log and report output")] [string]$OutputPath = 'GetSessionHistory', [Parameter(Mandatory = $false, HelpMessage = "Remove all previous progress and create a clean report")] [switch]$CleanReport = $false ) try { $OperationType = $MyInvocation.MyCommand $script:ErrorActionPreference = 'Stop' $LogSource = "AzStackHciEnvironmentChecker/RemoteSupport" $EventID = "18103" Set-AzStackHciOutputPath -Path $OutputPath -Source $LogSource # Ensure we are elevated if (Test-Elevation) { Log-Info -Message ($lvsTxt.ElevationModeInfo) -Type Info } else { Log-Info -Message ($lvsTxt.ElevationModeMsg) -Type Error -ConsoleOut throw $($lvsTxt.ElevationModeErrMsg) } Test-ModuleUpdate -PassThru:$PassThru # Call/Initialise reporting $envcheckerReport = Get-AzStackHciEnvProgress -clean:$CleanReport $envcheckerReport = Add-AzStackHciEnvJob -report $envcheckerReport $cmdResult = AzStackHCI.RemoteSupport.Helpers\Get-AzStackHCIRemoteSupportSessionHistory -SessionId $SessionId -FromDate $FromDate -IncludeSessionTranscript:$IncludeSessionTranscript # Feedback results - user scenario if (-not $PassThru) { Write-Host 'Remote Support Results' Write-AzStackHciResult -Title 'GetRemoteSupportSessionHistory' -Result $cmdResult Write-Summary -Result $cmdResult -Property1 Detail } else { return $cmdResult } } catch { $exception = $_ Trace-Execution "$OperationType failed. $exception" Trace-Execution "$($exception.ScriptStackTrace)" throw $exception } finally { $Script:ErrorActionPreference = 'SilentlyContinue' $sessionResult = $($cmdResult.AdditionalData | Format-List | Out-String) # Write result to RemoteSupport channel Write-ETWLog -Source $LogSource -Message "Get Remote Support Session History: $sessionResult" -EventId $EventID # Write validation result to report object and close out report $envcheckerReport | Add-Member -MemberType NoteProperty -Name 'GetRemoteSupportSessionHistory' -Value $sessionResult -Force $envcheckerReport = Close-AzStackHciEnvJob -report $envcheckerReport Write-AzStackHciEnvReport -report $envcheckerReport } } <# .SYNOPSIS Disables Remote Support. .DESCRIPTION Disable Remote Support revokes all access levels previously granted. Any existing support sessions will be terminated, and new sessions can no longer be established. .EXAMPLE The example below disables remote support. PS C:\> Disable-AzStackHCIRemoteSupport -PassThru .NOTES #> function Disable-AzStackHciRemoteSupport { param ( [Parameter(Mandatory = $false, HelpMessage = "Return PSObject result.")] [switch] $PassThru, [Parameter(Mandatory = $false, HelpMessage = "Directory path for log and report output")] [string]$OutputPath = 'Disable', [Parameter(Mandatory = $false, HelpMessage = "Remove all previous progress and create a clean report")] [switch]$CleanReport = $false ) try { $OperationType = $MyInvocation.MyCommand $script:ErrorActionPreference = 'Stop' $LogSource = "AzStackHciEnvironmentChecker/RemoteSupport" $EventID = "18104" Set-AzStackHciOutputPath -Path $OutputPath -Source $LogSource # Ensure we are elevated if (Test-Elevation) { Log-Info -Message ($lvsTxt.ElevationModeInfo) -Type Info } else { Log-Info -Message ($lvsTxt.ElevationModeMsg) -Type Error -ConsoleOut throw $($lvsTxt.ElevationModeErrMsg) } Test-ModuleUpdate -PassThru:$PassThru # Call/Initialise reporting $envcheckerReport = Get-AzStackHciEnvProgress -clean:$CleanReport $envcheckerReport = Add-AzStackHciEnvJob -report $envcheckerReport $cmdResult = AzStackHCI.RemoteSupport.Helpers\Disable-AzStackHCIRemoteSupport # Feedback results - user scenario if (-not $PassThru) { Write-Host 'Remote Support Results' Write-AzStackHciResult -Title 'DisableRemoteSupportAccess' -Result $cmdResult Write-Summary -Result $cmdResult -Property1 Detail } else { return $cmdResult } } catch { $exception = $_ Trace-Execution "$OperationType failed. $exception" Trace-Execution "$($exception.ScriptStackTrace)" throw $exception } finally { $Script:ErrorActionPreference = 'SilentlyContinue' $disableResult = $($cmdResult| Format-List | Out-String) # Write result to RemoteSupport channel Write-ETWLog -Source $LogSource -Message "Disable Remote Support: $disableResult" -EventId $EventID # Write validation result to report object and close out report $envcheckerReport | Add-Member -MemberType NoteProperty -Name 'DisableRemoteSupport' -Value $disableResult -Force $envcheckerReport = Close-AzStackHciEnvJob -report $envcheckerReport Write-AzStackHciEnvReport -report $envcheckerReport } } <# .SYNOPSIS Removes Remote Support. .DESCRIPTION Remove-AzStackHCIRemoteSupport uninstalls Remote Support Deployment module. .EXAMPLE C:\PS> Remove-AzStackHciRemoteSupport -PassThru .NOTES #> function Remove-AzStackHciRemoteSupport { param ( [Parameter(Mandatory = $false, HelpMessage = "Return PSObject result.")] [switch] $PassThru, [Parameter(Mandatory = $false, HelpMessage = "Directory path for log and report output")] [string]$OutputPath = 'Remove', [Parameter(Mandatory = $false, HelpMessage = "Remove all previous progress and create a clean report")] [switch]$CleanReport = $false ) try { $OperationType = $MyInvocation.MyCommand $script:ErrorActionPreference = 'Stop' $LogSource = "AzStackHciEnvironmentChecker/RemoteSupport" $EventID = "18105" Set-AzStackHciOutputPath -Path $OutputPath -Source $LogSource # Ensure we are elevated if (Test-Elevation) { Log-Info -Message ($lvsTxt.ElevationModeInfo) -Type Info } else { Log-Info -Message ($lvsTxt.ElevationModeMsg) -Type Error -ConsoleOut throw $($lvsTxt.ElevationModeErrMsg) } Test-ModuleUpdate -PassThru:$PassThru # Call/Initialise reporting $envcheckerReport = Get-AzStackHciEnvProgress -clean:$CleanReport $envcheckerReport = Add-AzStackHciEnvJob -report $envcheckerReport $cmdResult = AzStackHCI.RemoteSupport.Helpers\Remove-AzStackHCIRemoteSupport # Feedback results - user scenario if (-not $PassThru) { Write-Host 'Remote Support Results' Write-AzStackHciResult -Title 'RemoveRemoteSupport' -Result $cmdResult Write-Summary -Result $cmdResult -Property1 Detail } else { return $cmdResult } } catch { $exception = $_ Trace-Execution "$OperationType failed. $exception" Trace-Execution "$($exception.ScriptStackTrace)" throw $exception } finally { $Script:ErrorActionPreference = 'SilentlyContinue' $removeResult = $($cmdResult | Format-List | Out-String) # Write result to RemoteSupport channel Write-ETWLog -Source $LogSource -Message "Remove Remote Support: $removeResult" -EventId $EventID # Write validation result to report object and close out report $envcheckerReport | Add-Member -MemberType NoteProperty -Name 'RemoveRemoteSupport' -Value $removeResult -Force $envcheckerReport = Close-AzStackHciEnvJob -report $envcheckerReport Write-AzStackHciEnvReport -report $envcheckerReport } } Export-ModuleMember -Function Enable-AzStackHciRemoteSupport Export-ModuleMember -Function Disable-AzStackHciRemoteSupport Export-ModuleMember -Function Get-AzStackHciRemoteSupportAccess Export-ModuleMember -Function Get-AzStackHciRemoteSupportSessionHistory Export-ModuleMember -Function Remove-AzStackHciRemoteSupport # SIG # Begin signature block # MIInvgYJKoZIhvcNAQcCoIInrzCCJ6sCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCD2/OmjMpRPujld # L0Ai48Xb6URAgE/KR33cpGznKdu9RaCCDXYwggX0MIID3KADAgECAhMzAAADrzBA # DkyjTQVBAAAAAAOvMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p # bmcgUENBIDIwMTEwHhcNMjMxMTE2MTkwOTAwWhcNMjQxMTE0MTkwOTAwWjB0MQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB # AQDOS8s1ra6f0YGtg0OhEaQa/t3Q+q1MEHhWJhqQVuO5amYXQpy8MDPNoJYk+FWA # hePP5LxwcSge5aen+f5Q6WNPd6EDxGzotvVpNi5ve0H97S3F7C/axDfKxyNh21MG # 0W8Sb0vxi/vorcLHOL9i+t2D6yvvDzLlEefUCbQV/zGCBjXGlYJcUj6RAzXyeNAN # xSpKXAGd7Fh+ocGHPPphcD9LQTOJgG7Y7aYztHqBLJiQQ4eAgZNU4ac6+8LnEGAL # go1ydC5BJEuJQjYKbNTy959HrKSu7LO3Ws0w8jw6pYdC1IMpdTkk2puTgY2PDNzB # tLM4evG7FYer3WX+8t1UMYNTAgMBAAGjggFzMIIBbzAfBgNVHSUEGDAWBgorBgEE # AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQURxxxNPIEPGSO8kqz+bgCAQWGXsEw # RQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEW # MBQGA1UEBRMNMjMwMDEyKzUwMTgyNjAfBgNVHSMEGDAWgBRIbmTlUAXTgqoXNzci # tW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j # b20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3JsMGEG # CCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3NvZnQu # Y29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3J0 # MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAISxFt/zR2frTFPB45Yd # mhZpB2nNJoOoi+qlgcTlnO4QwlYN1w/vYwbDy/oFJolD5r6FMJd0RGcgEM8q9TgQ # 2OC7gQEmhweVJ7yuKJlQBH7P7Pg5RiqgV3cSonJ+OM4kFHbP3gPLiyzssSQdRuPY # 1mIWoGg9i7Y4ZC8ST7WhpSyc0pns2XsUe1XsIjaUcGu7zd7gg97eCUiLRdVklPmp # XobH9CEAWakRUGNICYN2AgjhRTC4j3KJfqMkU04R6Toyh4/Toswm1uoDcGr5laYn # TfcX3u5WnJqJLhuPe8Uj9kGAOcyo0O1mNwDa+LhFEzB6CB32+wfJMumfr6degvLT # e8x55urQLeTjimBQgS49BSUkhFN7ois3cZyNpnrMca5AZaC7pLI72vuqSsSlLalG # OcZmPHZGYJqZ0BacN274OZ80Q8B11iNokns9Od348bMb5Z4fihxaBWebl8kWEi2O # PvQImOAeq3nt7UWJBzJYLAGEpfasaA3ZQgIcEXdD+uwo6ymMzDY6UamFOfYqYWXk # ntxDGu7ngD2ugKUuccYKJJRiiz+LAUcj90BVcSHRLQop9N8zoALr/1sJuwPrVAtx # HNEgSW+AKBqIxYWM4Ev32l6agSUAezLMbq5f3d8x9qzT031jMDT+sUAoCw0M5wVt # CUQcqINPuYjbS1WgJyZIiEkBMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq # hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x # EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv # bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 # IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQG # EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG # A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg # Q29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC # CgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+laUKq4BjgaBEm6f8MMHt03 # a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv2akr # rnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4Ddato88tt8zpcoRb0Rrrg # OGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy # 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nkkDstrjNYxbc+/jLTswM9 # sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAh # dCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4jiJV3TIUs+UsS1Vz8k # A/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTB # w3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeBe+3W7UvnSSmn # Eyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90 # lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEAAaOCAe0w # ggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRIbmTlUAXTgqoXNzcitW2o # ynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYD # VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBDuRQFTuHqp8cx0SOJNDBa # BgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny # bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3JsMF4GCCsG # AQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29t # L3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3J0MIGfBgNV # HSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3 # dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMuaHRtMEAGCCsG # AQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkAYwB5AF8AcwB0AGEAdABl # AG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou09h0ZyKb # C5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7v0epo/Np22O/IjWll11l # hJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlEPXh6 # I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/KmtYSWMfCWluWpiW5IP0 # wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560 # STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBpmLJZiWhub6e3dMNABQam # ASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGa # J+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7fQccOKO7eZS/sl/ah # XJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA # 9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8MO0ETI7f33Vt # Y5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr # /Xmfwb1tbWrJUnMTDXpQzTGCGZ4wghmaAgEBMIGVMH4xCzAJBgNVBAYTAlVTMRMw # EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN # aWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNp # Z25pbmcgUENBIDIwMTECEzMAAAOvMEAOTKNNBUEAAAAAA68wDQYJYIZIAWUDBAIB # BQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO # MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIFEUjFpUQ654jHEkNu0H0r/m # +aO4a46IkkDE2KC5t85yMEIGCisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8A # cwBvAGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEB # BQAEggEAmweUN95WEs+vp/tgQ6DWoXBMx7p8++MK3J2njPsToZbgAhvK6+A5PNLK # pi+losJNhnSNdsAJ3p1ka3ewYEH0Nyqd/H7Cyg5XQ/JfjrOsheBYPOM7GclCpl8s # T4KXCtPpGL3531eBfF0MaHFd8y4Fp/DaZvKr/Tx5Ge5xDLSiBpHmc2Gmb728lkvN # r54WpPbZFe0LYeBKn3CU7Cm34yLkM6ORdMMbhDwI1IAylF0FurM6iaoEBkF98j4v # kjeKFaO0zFdjWPvnlI49Mo/PEE66mZzeJ1CRtrRsYyPrkDV/ldw1UQHgYYLHrivV # FJLYIzBRZXMf3JGOZ311EUr2ZMNQkqGCFygwghckBgorBgEEAYI3AwMBMYIXFDCC # FxAGCSqGSIb3DQEHAqCCFwEwghb9AgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFYBgsq # hkiG9w0BCRABBKCCAUcEggFDMIIBPwIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFl # AwQCAQUABCDjhFI3VxT6BXfuZH36ItgH9shNbw/HC4405ITj1B5CWgIGZnL1QQSL # GBIyMDI0MDcwOTA4NTQyMi4wNlowBIACAfSggdikgdUwgdIxCzAJBgNVBAYTAlVT # MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK # ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVs # YW5kIE9wZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046 # ODZERi00QkJDLTkzMzUxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNl # cnZpY2WgghF4MIIHJzCCBQ+gAwIBAgITMwAAAd1dVx2V1K2qGwABAAAB3TANBgkq # hkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ # MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u # MSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAeFw0yMzEw # MTIxOTA3MDlaFw0yNTAxMTAxOTA3MDlaMIHSMQswCQYDVQQGEwJVUzETMBEGA1UE # CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z # b2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVy # YXRpb25zIExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNOOjg2REYtNEJC # Qy05MzM1MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIC # IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqE4DlETqLnecdREfiWd8oun7 # 0m+Km5O1y1qKsLExRKs9LLkJYrYO2uJA/5PnYdds3aDsCS1DWlBltMMYXMrp3Te9 # hg2sI+4kr49Gw/YU9UOMFfLmastEXMgcctqIBqhsTm8Um6jFnRlZ0owKzxpyOEdS # Z9pj7v38JHu434Hj7GMmrC92lT+anSYCrd5qvIf4Aqa/qWStA3zOCtxsKAfCyq++ # pPqUQWpimLu4qfswBhtJ4t7Skx1q1XkRbo1Wdcxg5NEq4Y9/J8Ep1KG5qUujzyQb # upraZsDmXvv5fTokB6wySjJivj/0KAMWMdSlwdI4O6OUUEoyLXrzNF0t6t2lbRsF # f0QO7HbMEwxoQrw3LFrAIS4Crv77uS0UBuXeFQq27NgLUVRm5SXYGrpTXtLgIqyp # HeK0tP2o1xvakAniOsgN2WXlOCip5/mCm/5hy8EzzfhtcU3DK13e6MMPbg/0N3zF # 9Um+6aOwFBCQrlP+rLcetAny53WcdK+0VWLlJr+5sa5gSlLyAXoYNY3n8pu94WR2 # yhNUg+jymRaGM+zRDucDn64HFAHjOWMSMrPlZbsEDjCmYWbbh+EGZGNXg1un6fvx # yACO8NJ9OUDoNgFy/aTHUkfZ0iFpGdJ45d49PqEwXQiXn3wsy7SvDflWJRZwBCRQ # 1RPFGeoYXHPnD5m6wwMCAwEAAaOCAUkwggFFMB0GA1UdDgQWBBRuovW2jI9R2kXL # IdIMpaPQjiXD8TAfBgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtTNRnpcjBfBgNV # HR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny # bC9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcmwwbAYI # KwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBodHRwOi8vd3d3Lm1pY3Jvc29mdC5j # b20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAy # MDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI # MA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAgEALlTZsg0uBcgdZsxy # pW5/2ORRP8rzPIsG+7mHwmuphHbP95o7bKjU6hz1KHK/Ft70ZkO7uSRTPFLInUhm # SxlnDoUOrrJk1Pc8SMASdESlEEvxL6ZteD47hUtLQtKZvxchmIuxqpnR8MRy/cd4 # D7/L+oqcJBaReCGloQzAYxDNGSEbBwZ1evXMalDsdPG9+7nvEXFlfUyQqdYUQ0nq # 6t37i15SBePSeAg7H/+Xdcwrce3xPb7O8Yk0AX7n/moGTuevTv3MgJsVe/G2J003 # l6hd1b72sAiRL5QYPX0Bl0Gu23p1n450Cq4GIORhDmRV9QwpLfXIdA4aCYXG4I7N # OlYdqWuql0iWWzLwo2yPlT2w42JYB3082XIQcdtBkOaL38E2U5jJO3Rh6EtsOi+Z # lQ1rOTv0538D3XuaoJ1OqsTHAEZQ9sw/7+91hSpomym6kGdS2M5//voMCFXLx797 # rNH3w+SmWaWI7ZusvdDesPr5kJV2sYz1GbqFQMEGS9iH5iOYZ1xDkcHpZP1F5zz6 # oMeZuEuFfhl1pqt3n85d4tuDHZ/svhBBCPcqCqOoM5YidWE0TWBi1NYsd7jzzZ3+ # Tsu6LQrWDwRmsoPuZo6uwkso8qV6Bx4n0UKpjWwNQpSFFrQQdRb5mQouWiEqtLsX # CN2sg1aQ8GBtDOcKN0TabjtCNNswggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZ # AAAAAAAVMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMK # V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0 # IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0 # ZSBBdXRob3JpdHkgMjAxMDAeFw0yMTA5MzAxODIyMjVaFw0zMDA5MzAxODMyMjVa # MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS # ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMT # HU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG9w0BAQEF # AAOCAg8AMIICCgKCAgEA5OGmTOe0ciELeaLL1yR5vQ7VgtP97pwHB9KpbE51yMo1 # V/YBf2xK4OK9uT4XYDP/XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9 # alKDRLemjkZrBxTzxXb1hlDcwUTIcVxRMTegCjhuje3XD9gmU3w5YQJ6xKr9cmmv # Haus9ja+NSZk2pg7uhp7M62AW36MEBydUv626GIl3GoPz130/o5Tz9bshVZN7928 # jaTjkY+yOSxRnOlwaQ3KNi1wjjHINSi947SHJMPgyY9+tVSP3PoFVZhtaDuaRr3t # pK56KTesy+uDRedGbsoy1cCGMFxPLOJiss254o2I5JasAUq7vnGpF1tnYN74kpEe # HT39IM9zfUGaRnXNxF803RKJ1v2lIH1+/NmeRd+2ci/bfV+AutuqfjbsNkz2K26o # ElHovwUDo9Fzpk03dJQcNIIP8BDyt0cY7afomXw/TNuvXsLz1dhzPUNOwTM5TI4C # vEJoLhDqhFFG4tG9ahhaYQFzymeiXtcodgLiMxhy16cg8ML6EgrXY28MyTZki1ug # poMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH29wb0f2y1BzFa/ZcUlFdEtsluq9QBXps # xREdcu+N+VLEhReTwDwV2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3PmriLq0C # AwEAAaOCAd0wggHZMBIGCSsGAQQBgjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYE # FCqnUv5kxJq+gpE8RjUpzxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJlpxtT # NRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdMg30BATBBMD8GCCsGAQUFBwIBFjNo # dHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5o # dG0wEwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBD # AEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZW # y4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5t # aWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAt # MDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3 # dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0y # My5jcnQwDQYJKoZIhvcNAQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pc # FLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRsfNB1OW27DzHkwo/7bNGhlBgi7ulmZzpT # Td2YurYeeNg2LpypglYAA7AFvonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM9W0j # VOR4U3UkV7ndn/OOPcbzaN9l9qRWqveVtihVJ9AkvUCgvxm2EhIRXT0n4ECWOKz3 # +SmJw7wXsFSFQrP8DJ6LGYnn8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmR # sqlb30mjdAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2kQH2zsZ0/fZMcm8Qq3UwxTSw # ethQ/gpY3UA8x1RtnWN0SCyxTkctwRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5b # RAGOWhmRaw2fpCjcZxkoJLo4S5pu+yFUa2pFEUep8beuyOiJXk+d0tBMdrVXVAmx # aQFEfnyhYWxz/gq77EFmPWn9y8FBSX5+k77L+DvktxW/tM4+pTFRhLy/AsGConsX # HRWJjXD+57XQKBqJC4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU5nR0 # W2rRnj7tfqAxM328y+l7vzhwRNGQ8cirOoo6CGJ/2XBjU02N7oJtpQUQwXEGahC0 # HVUzWLOhcGbyoYIC1DCCAj0CAQEwggEAoYHYpIHVMIHSMQswCQYDVQQGEwJVUzET # MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV # TWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFu # ZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNOOjg2 # REYtNEJCQy05MzM1MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2 # aWNloiMKAQEwBwYFKw4DAhoDFQA2I0cZZds1oM/GfKINsQ5yJKMWEKCBgzCBgKR+ # MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS # ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMT # HU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMA0GCSqGSIb3DQEBBQUAAgUA # 6jcnCDAiGA8yMDI0MDcwOTExMDMzNloYDzIwMjQwNzEwMTEwMzM2WjB0MDoGCisG # AQQBhFkKBAExLDAqMAoCBQDqNycIAgEAMAcCAQACAgZEMAcCAQACAhNJMAoCBQDq # OHiIAgEAMDYGCisGAQQBhFkKBAIxKDAmMAwGCisGAQQBhFkKAwKgCjAIAgEAAgMH # oSChCjAIAgEAAgMBhqAwDQYJKoZIhvcNAQEFBQADgYEAM6Stozv5TgQdD3ZSrTGI # DIJLINROpCkEAt0bs1/Z+gdjS5mPRkUOJ3DEAOCIXVRT64Loow0WlSu0Vn2BvmwK # iY36lKSBhj+ewlNpWOHTtGELyvkUc3ececqrEgCA7yGavIDF1cllXyEODP0khbWt # /WKC4oXu+nKy8JxbMnMQvPoxggQNMIIECQIBATCBkzB8MQswCQYDVQQGEwJVUzET # MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV # TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T # dGFtcCBQQ0EgMjAxMAITMwAAAd1dVx2V1K2qGwABAAAB3TANBglghkgBZQMEAgEF # AKCCAUowGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMC8GCSqGSIb3DQEJBDEi # BCAYQbrxkECSjsJwn6hEvtDPwzWo2uCdm0L2M3sH6+rHTzCB+gYLKoZIhvcNAQkQ # Ai8xgeowgecwgeQwgb0EIGH/Di2aZaxPeJmce0fRWTftQI3TaVHFj5GI43rAMWNm # MIGYMIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO # BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEm # MCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAHdXVcd # ldStqhsAAQAAAd0wIgQgbVF6xlkeWox8xekZrtwG7RDfhG45P4pAtDHEGEB+duww # DQYJKoZIhvcNAQELBQAEggIABfEQSKy/TxHIyNEydujkaiE0/yTj++vf6OfIlBDT # mzJlypjZZrZ4PpqaOWcvBVabIOdQ0lLPKju5CiX/Zw2OmYwjinMD/SXUF+LPjwIy # r6ihWoZpqCwghhn1Wh8ZZe2i9vOBWTGH4xmpsaNFeRned8ltTUEK1dMVXa2nprrn # J5LU0EKL3JcxoLt7MDkZaALQi2lgvbM9o6UjFNsUDp0dkdwJXM7zoYvhcAY5MyrA # r7x3LIihMTAgt8Hk7maU1SSLY6xQIT0HBydg+a9/hL1ZBqJ80jHyd9VJZ+7q4a1O # EbXp+eNjY01gr4pRwdJbCsyXqEVuoZi5teUmrhdNISYgUbJij35Dpb1QIe4qhBjJ # Ghwh/ECejFFDyZ1/YhsvkDjKpqEcmdNzoOoBxmdQPAPKmSkLu9yCMz4zloiaVDDt # QXlK7ZvzDbvCmbS5352uzC8nnC8EmTGGH5cjrv5bf+qSNpaHW4lSHTS1fe/1gwC0 # AEwQ4M+BcuPf01DwKQiqOnAzrNAE2PuwpTcG+yrbS0w0B0tgSVMJXk/QmtxvD5dW # bKTGczddhtpnAHRodBy8BM8vsU0p+yQmKCKikkyGWUgOeW4YB5Sn+CgjmmuTyUf3 # jR489KAhURV+Mk6F05AYnqyCr1NLLNBsf+Y8bx74tn9p3cKSQTtBAiR0caMEGlZd # 8Xs= # SIG # End signature block |