CLI/HealthAndAlertManagement.psm1
#################################################################################### ## © 2020,2021 Hewlett Packard Enterprise Development LP ## ## Permission is hereby granted, free of charge, to any person obtaining a ## copy of this software and associated documentation files (the "Software"), ## to deal in the Software without restriction, including without limitation ## the rights to use, copy, modify, merge, publish, distribute, sublicense, ## and/or sell copies of the Software, and to permit persons to whom the ## Software is furnished to do so, subject to the following conditions: ## ## The above copyright notice and this permission notice shall be included ## in all copies or substantial portions of the Software. ## ## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ## THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR ## OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ## ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ## OTHER DEALINGS IN THE SOFTWARE. ## ## File Name: HealthandAlertManagement.psm1 ## Description: Health and Alert Management cmdlets ## ## Created: November 2019 ## Last Modified: November 2019 ## History: v3.0 - Created ##################################################################################### $Info = "INFO:" $Debug = "DEBUG:" $global:VSLibraries = Split-Path $MyInvocation.MyCommand.Path [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 ############################################################################################################################################ ## FUNCTION Test-CLIObject ############################################################################################################################################ Function Test-CLIObject { Param( [string]$ObjectType, [string]$ObjectName , [string]$ObjectMsg = $ObjectType, $SANConnection = $global:SANConnection ) $IsObjectExisted = $True $ObjCmd = $ObjectType -replace ' ', '' $Cmds = "show$ObjCmd $ObjectName" $Result = Invoke-CLICommand -Connection $SANConnection -cmds $Cmds if ($Result -like "no $ObjectMsg listed") { $IsObjectExisted = $false } return $IsObjectExisted } # End FUNCTION Test-CLIObject ########################################################################## ######################### FUNCTION Get-Alert ######################### ########################################################################## Function Get-Alert() { <# .SYNOPSIS Get-Alert - Display system alerts. .DESCRIPTION The Get-Alert command displays the status of system alerts. When issued without options, all new customer alerts are displayed. .EXAMPLE Get-Alert -N .EXAMPLE Get-Alert -F .EXAMPLE Get-Alert -All .PARAMETER N Specifies that only new customer alerts are displayed. This is the default. .PARAMETER A Specifies that only acknowledged alerts are displayed. .PARAMETER F Specifies that only fixed alerts are displayed. .PARAMETER All Specifies that all customer alerts are displayed. The format of the alert display is controlled by the following options: .PARAMETER D Specifies that detailed information is displayed. Cannot be specified with the -oneline option. .PARAMETER Oneline Specifies that summary information is displayed in a tabular form with one line per alert. For customer alerts, the message text will be truncated if it is too long unless the -wide option is also specified. .PARAMETER Svc Specifies that only service alerts are displayed. This option can only be used with the -d or -oneline formatting options. .PARAMETER Wide Do not truncate the message text. Only valid for customer alerts and if the -oneline option is also specified. .Notes NAME: Get-Alert LASTEDIT 19/11/2019 KEYWORDS: Get-Alert .Link http://www.hpe.com #Requires PS -Version 3.0 #> [CmdletBinding()] param( [Parameter(Position=0, Mandatory=$false, ValueFromPipeline=$true)] [switch] $N, [Parameter(Position=1, Mandatory=$false, ValueFromPipeline=$true)] [switch] $A, [Parameter(Position=2, Mandatory=$false, ValueFromPipeline=$true)] [switch] $F, [Parameter(Position=3, Mandatory=$false, ValueFromPipeline=$true)] [switch] $All, [Parameter(Position=4, Mandatory=$false, ValueFromPipeline=$true)] [switch] $D, [Parameter(Position=5, Mandatory=$false, ValueFromPipeline=$true)] [switch] $Oneline, [Parameter(Position=6, Mandatory=$false, ValueFromPipeline=$true)] [switch] $Svc, [Parameter(Position=7, Mandatory=$false, ValueFromPipeline=$true)] [switch] $Wide, [Parameter(Position=8, Mandatory=$false, ValueFromPipeline=$true)] $SANConnection = $global:SANConnection ) Write-DebugLog "Start: In Get-Alert - validating input values" $Debug #check if connection object contents are null/empty if(!$SANConnection) { #check if connection object contents are null/empty $Validate1 = Test-CLIConnection $SANConnection if($Validate1 -eq "Failed") { #check if global connection object contents are null/empty $Validate2 = Test-CLIConnection $global:SANConnection if($Validate2 -eq "Failed") { Write-DebugLog "Connection object is null/empty or the array address (FQDN/IP Address) or user credentials in the connection object are either null or incorrect. Create a valid connection object using New-CLIConnection or New-PoshSshConnection" " ERR: " Write-DebugLog "Stop: Exiting Get-Alert since SAN connection object values are null/empty" $Debug Return "Unable to execute the cmdlet Get-Alert since no active storage connection session exists. `nUse New-PoshSSHConnection or New-CLIConnection to start a new storage connection session." } } } $plinkresult = Test-PARCli -SANConnection $SANConnection if($plinkresult -match "FAILURE :") { write-debuglog "$plinkresult" Return $plinkresult } $Cmd = " showalert " if($N) { $Cmd += " -n " } if($A) { $Cmd += " -a " } if($F) { $Cmd += " -f " } if($All) { $Cmd += " -all " } if($D) { $Cmd += " -d " } if($Svc) { $Cmd += " -svc " } if($Wide) { $Cmd += " -wide " } if($Oneline) { $Cmd += " -oneline " } $Result = Invoke-CLICommand -Connection $SANConnection -cmds $Cmd Write-DebugLog "Executing Function : Get-Alert Command -->" INFO: Return $Result } ## End-of Get-Alert ########################################################################## ######################### FUNCTION Get-EventLog ########################## ########################################################################## Function Get-EventLog() { <# .SYNOPSIS Get-EventLog - Show the system event log. .DESCRIPTION The Get-EventLog command displays the current system event log. .EXAMPLE .PARAMETER Min Specifies that only events occurring within the specified number of minutes are shown. The <number> is an integer from 1 through 2147483647. .PARAMETER More Specifies that you can page through several events at a time. .PARAMETER Oneline Specifies that each event is formatted as one line. .PARAMETER D Specifies that detailed information is displayed. .PARAMETER Startt Specifies that only events after a specified time are to be shown. The time argument can be specified as either <timespec>, <datespec>, or both. If you would like to specify both a <timespec> and <datespec>, you must place quotation marks around them; for example, -startt "2012-10-29 00:00". <timespec> Specified as the hour (hh), as interpreted on a 24 hour clock, where minutes (mm) and seconds (ss) can be optionally specified. Acceptable formats are hh:mm:ss or hhmm. <datespec> Specified as the month (mm or month_name) and day (dd), where the year (yy) can be optionally specified. Acceptable formats are mm/dd/yy, month_name dd, dd month_name yy, or yy-mm-dd. If the syntax yy-mm-dd is used, the year must be specified. .PARAMETER Endt Specifies that only events before a specified time are to be shown. The time argument can be specified as either <timespec>, <datespec>, or both. See -startt for descriptions of <timespec> and <datespec>. The <pattern> argument in the following options is a regular expression pattern that is used to match against the events each option produces. (See help on sub,regexpat.) For each option, the pattern argument can be specified multiple times by repeating the option and <pattern>. For example: showeventlog -type Disk.* -type <tpdtcl client> -sev Major The "-sev Major" displays all events of severity Major and with a type that matches either the regular expression Disk.* or <tpdtcl client>. .PARAMETER Sev Specifies that only events with severities that match the specified pattern(s) are displayed. The supported severities include Fatal, Critical, Major, Minor, Degraded, Informational and Debug .PARAMETER Nsev Specifies that only events with severities that do not match the specified pattern(s) are displayed. The supported severities include Fatal, Critical, Major, Minor, Degraded, Informational and Debug. .PARAMETER Class Specifies that only events with classes that match the specified pattern(s) are displayed. .PARAMETER Nclass Specifies that only events with classes that do not match the specified pattern(s) are displayed. .PARAMETER Node Specifies that only events from nodes that match the specified pattern(s) are displayed. .PARAMETER Nnode Specifies that only events from nodes that do not match the specified pattern(s) are displayed. .PARAMETER Type Specifies that only events with types that match the specified pattern(s) are displayed. .PARAMETER Ntype Specifies that only events with types that do not match the specified pattern(s) are displayed. .PARAMETER Msg Specifies that only events, whose messages match the specified pattern(s), are displayed. .PARAMETER Nmsg Specifies that only events, whose messages do not match the specified pattern(s), are displayed. .PARAMETER Comp Specifies that only events, whose components match the specified pattern(s), are displayed. .PARAMETER Ncomp Specifies that only events, whose components do not match the specified pattern(s), are displayed. .Notes NAME: Get-EventLog LASTEDIT 19/11/2019 KEYWORDS: Get-EventLog .Link http://www.hpe.com #Requires PS -Version 3.0 #> [CmdletBinding()] param( [Parameter(Position=0, Mandatory=$false, ValueFromPipeline=$true)] [System.String] $Min, [Parameter(Position=1, Mandatory=$false, ValueFromPipeline=$true)] [switch] $More, [Parameter(Position=2, Mandatory=$false, ValueFromPipeline=$true)] [switch] $Oneline, [Parameter(Position=3, Mandatory=$false, ValueFromPipeline=$true)] [switch] $D, [Parameter(Position=4, Mandatory=$false, ValueFromPipeline=$true)] [System.String] $Startt, [Parameter(Position=5, Mandatory=$false, ValueFromPipeline=$true)] [System.String] $Endt, [Parameter(Position=6, Mandatory=$false, ValueFromPipeline=$true)] [System.String] $Sev, [Parameter(Position=7, Mandatory=$false, ValueFromPipeline=$true)] [System.String] $Nsev, [Parameter(Position=8, Mandatory=$false, ValueFromPipeline=$true)] [System.String] $Class, [Parameter(Position=9, Mandatory=$false, ValueFromPipeline=$true)] [System.String] $Nclass, [Parameter(Position=10, Mandatory=$false, ValueFromPipeline=$true)] [System.String] $Node, [Parameter(Position=11, Mandatory=$false, ValueFromPipeline=$true)] [System.String] $Nnode, [Parameter(Position=12, Mandatory=$false, ValueFromPipeline=$true)] [System.String] $Type, [Parameter(Position=13, Mandatory=$false, ValueFromPipeline=$true)] [System.String] $Ntype, [Parameter(Position=14, Mandatory=$false, ValueFromPipeline=$true)] [System.String] $Msg, [Parameter(Position=15, Mandatory=$false, ValueFromPipeline=$true)] [System.String] $Nmsg, [Parameter(Position=16, Mandatory=$false, ValueFromPipeline=$true)] [System.String] $Comp, [Parameter(Position=17, Mandatory=$false, ValueFromPipeline=$true)] [System.String] $Ncomp, [Parameter(Position=18, Mandatory=$false, ValueFromPipeline=$true)] $SANConnection = $global:SANConnection ) Write-DebugLog "Start: In Get-EventLog - validating input values" $Debug #check if connection object contents are null/empty if(!$SANConnection) { #check if connection object contents are null/empty $Validate1 = Test-CLIConnection $SANConnection if($Validate1 -eq "Failed") { #check if global connection object contents are null/empty $Validate2 = Test-CLIConnection $global:SANConnection if($Validate2 -eq "Failed") { Write-DebugLog "Connection object is null/empty or the array address (FQDN/IP Address) or user credentials in the connection object are either null or incorrect. Create a valid connection object using New-CLIConnection or New-PoshSshConnection" " ERR: " Write-DebugLog "Stop: Exiting Get-EventLog since SAN connection object values are null/empty" $Debug Return "Unable to execute the cmdlet Get-EventLog since no active storage connection session exists. `nUse New-PoshSSHConnection or New-CLIConnection to start a new storage connection session." } } } $plinkresult = Test-PARCli -SANConnection $SANConnection if($plinkresult -match "FAILURE :") { write-debuglog "$plinkresult" Return $plinkresult } $Cmd = " showeventlog " if($Min) { $Cmd += " -min $Min " } if($More) { $Cmd += " -more " } if($Oneline) { $Cmd += " -oneline " } if($D) { $Cmd += " -d " } if($Startt) { $Cmd += " -startt $Startt " } if($Endt) { $Cmd += " -endt $Endt " } if($Sev) { $Cmd += " -sev $Sev " } if($Nsev) { $Cmd += " -nsev $Nsev " } if($Class) { $Cmd += " -class $Class " } if($Nclass) { $Cmd += " -nclass $Nclass " } if($Node) { $Cmd += " -node $Node " } if($Nnode) { $Cmd += " -nnode $Nnode " } if($Type) { $Cmd += " -type $Type " } if($Ntype) { $Cmd += " -ntype $Ntype " } if($Msg) { $Cmd += " -msg $Msg " } if($Nmsg) { $Cmd += " -nmsg $Nmsg " } if($Comp) { $Cmd += " -comp $Comp " } if($Ncomp) { $Cmd += " -ncomp $Ncomp " } $Result = Invoke-CLICommand -Connection $SANConnection -cmds $Cmd Write-DebugLog "Executing Function : Get-EventLog Command -->" INFO: Return $Result } ## End-of Get-EventLog ########################################################################## ############################ FUNCTION Get-Health ######################### ########################################################################## Function Get-Health() { <# .SYNOPSIS Get-Health - Check the current health of the system. .DESCRIPTION The Get-Health command checks the status of system hardware and software components, and reports any issues .EXAMPLE .PARAMETER Component Indicates the component to check. Use -list option to get the list of components. .PARAMETER Lite Perform a minimal health check. .PARAMETER Svc Perform a thorough health check. This is the default option. .PARAMETER Full Perform the maximum health check. This option cannot be used with the -lite option. .PARAMETER List List all components that will be checked. .PARAMETER Quiet Do not display which component is currently being checked. Do not display the footnote with the -list option. .PARAMETER D Display detailed information regarding the status of the system. .Notes NAME: Get-Health LASTEDIT 19/11/2019 KEYWORDS: Get-Health .Link http://www.hpe.com #Requires PS -Version 3.0 #> [CmdletBinding()] param( [Parameter(Position=0, Mandatory=$false, ValueFromPipeline=$true)] [switch] $Lite, [Parameter(Position=1, Mandatory=$false, ValueFromPipeline=$true)] [switch] $Svc, [Parameter(Position=2, Mandatory=$false, ValueFromPipeline=$true)] [switch] $Full, [Parameter(Position=3, Mandatory=$false, ValueFromPipeline=$true)] [switch] $List, [Parameter(Position=4, Mandatory=$false, ValueFromPipeline=$true)] [switch] $Quiet, [Parameter(Position=5, Mandatory=$false, ValueFromPipeline=$true)] [switch] $D, [Parameter(Position=6, Mandatory=$false, ValueFromPipeline=$true)] [System.String] $Component, [Parameter(Position=7, Mandatory=$false, ValueFromPipeline=$true)] $SANConnection = $global:SANConnection ) Write-DebugLog "Start: In Get-Health - validating input values" $Debug #check if connection object contents are null/empty if(!$SANConnection) { #check if connection object contents are null/empty $Validate1 = Test-CLIConnection $SANConnection if($Validate1 -eq "Failed") { #check if global connection object contents are null/empty $Validate2 = Test-CLIConnection $global:SANConnection if($Validate2 -eq "Failed") { Write-DebugLog "Connection object is null/empty or the array address (FQDN/IP Address) or user credentials in the connection object are either null or incorrect. Create a valid connection object using New-CLIConnection or New-PoshSshConnection" " ERR: " Write-DebugLog "Stop: Exiting Get-Health since SAN connection object values are null/empty" $Debug Return "Unable to execute the cmdlet Get-Health since no active storage connection session exists. `nUse New-PoshSSHConnection or New-CLIConnection to start a new storage connection session." } } } $plinkresult = Test-PARCli -SANConnection $SANConnection if($plinkresult -match "FAILURE :") { write-debuglog "$plinkresult" Return $plinkresult } $Cmd = " checkhealth " if($Lite) { $Cmd += " -lite " } if($Svc) { $Cmd += " -svc " } if($Full) { $Cmd += " -full " } if($List) { $Cmd += " -list " } if($Quiet) { $Cmd += " -quiet " } if($D) { $Cmd += " -d " } if($Component) { $Cmd += " $Component " } $Result = Invoke-CLICommand -Connection $SANConnection -cmds $Cmd Write-DebugLog "Executing Function : Get-Health Command -->" INFO: Return $Result } ## End-of Get-Health ########################################################################## ######################### FUNCTION Remove-Alerts ######################### ########################################################################## Function Remove-Alerts() { <# .SYNOPSIS Remove-Alerts - Remove one or more alerts. .DESCRIPTION The Remove-Alerts command removes one or more alerts from the system. .EXAMPLE .PARAMETER Alert_ID Indicates a specific alert to be removed from the system. This specifier can be repeated to remove multiple alerts. If this specifier is not used, the -a option must be used. .PARAMETER All Specifies all alerts from the system and prompts removal for each alert. If this option is not used, then the <alert_ID> specifier must be used. .PARAMETER F Specifies that the command is forced. If this option is not used and there are alerts in the "new" state, the command requires confirmation before proceeding with the operation. .Notes NAME: Remove-Alerts LASTEDIT 19/11/2019 KEYWORDS: Remove-Alerts .Link http://www.hpe.com #Requires PS -Version 3.0 #> [CmdletBinding()] param( [Parameter(Position=0, Mandatory=$false, ValueFromPipeline=$true)] [switch] $All, [Parameter(Position=1, Mandatory=$false, ValueFromPipeline=$true)] [switch] $F, [Parameter(Position=2, Mandatory=$false, ValueFromPipeline=$true)] [System.String] $Alert_ID, [Parameter(Position=3, Mandatory=$false, ValueFromPipeline=$true)] $SANConnection = $global:SANConnection ) Write-DebugLog "Start: In Remove-Alerts - validating input values" $Debug #check if connection object contents are null/empty if(!$SANConnection) { #check if connection object contents are null/empty $Validate1 = Test-CLIConnection $SANConnection if($Validate1 -eq "Failed") { #check if global connection object contents are null/empty $Validate2 = Test-CLIConnection $global:SANConnection if($Validate2 -eq "Failed") { Write-DebugLog "Connection object is null/empty or the array address (FQDN/IP Address) or user credentials in the connection object are either null or incorrect. Create a valid connection object using New-CLIConnection or New-PoshSshConnection" " ERR: " Write-DebugLog "Stop: Exiting Remove-Alerts since SAN connection object values are null/empty" $Debug Return "Unable to execute the cmdlet Remove-Alerts since no active storage connection session exists. `nUse New-PoshSSHConnection or New-CLIConnection to start a new storage connection session." } } } $plinkresult = Test-PARCli -SANConnection $SANConnection if($plinkresult -match "FAILURE :") { write-debuglog "$plinkresult" Return $plinkresult } $Cmd = " removealert " if($F) { $Cmd += " -f " } if($All) { $Cmd += " -a " } elseif($Alert_ID) { $Cmd += " $Alert_ID " } else { Return "Please Select At-least One from [ All | Alert_ID ]..." } $Result = Invoke-CLICommand -Connection $SANConnection -cmds $Cmd Write-DebugLog "Executing Function : Remove-Alerts Command -->" INFO: Return $Result } ## End-of Remove-Alerts ########################################################################## ######################### FUNCTION Set-Alert ######################### ########################################################################## Function Set-Alert() { <# .SYNOPSIS Set-Alert - Set the status of system alerts. .DESCRIPTION The Set-Alert command sets the status of system alerts. .EXAMPLE .PARAMETER Alert_ID Specifies that the status of a specific alert be set. This specifier can be repeated to indicate multiple specific alerts. Up to 99 alerts can be specified in one command. If not specified, the -a option must be specified on the command line. .PARAMETER All Specifies that the status of all alerts be set. If not specified, the Alert_ID specifier must be specified. .PARAMETER New Specifies that the alert(s), as indicated with the <alert_ID> specifier or with option -a, be set as "New"(new), "Acknowledged"(ack), or "Fixed"(fixed). .PARAMETER Ack Specifies that the alert(s), as indicated with the <alert_ID> specifier or with option -a, be set as "New"(new), "Acknowledged"(ack), or "Fixed"(fixed). .PARAMETER Fixed Specifies that the alert(s), as indicated with the <alert_ID> specifier or with option -a, be set as "New"(new), "Acknowledged"(ack), or "Fixed"(fixed). .Notes NAME: Set-Alert LASTEDIT 19/11/2019 KEYWORDS: Set-Alert .Link http://www.hpe.com #Requires PS -Version 3.0 #> [CmdletBinding()] param( [Parameter(Position=0, Mandatory=$false, ValueFromPipeline=$true)] [switch] $New, [Parameter(Position=1, Mandatory=$false, ValueFromPipeline=$true)] [switch] $Ack, [Parameter(Position=2, Mandatory=$false, ValueFromPipeline=$true)] [switch] $Fixed, [Parameter(Position=3, Mandatory=$false, ValueFromPipeline=$true)] [switch] $All, [Parameter(Position=4, Mandatory=$false, ValueFromPipeline=$true)] [System.String] $Alert_ID, [Parameter(Position=5, Mandatory=$false, ValueFromPipeline=$true)] $SANConnection = $global:SANConnection ) Write-DebugLog "Start: In Set-Alert - validating input values" $Debug #check if connection object contents are null/empty if(!$SANConnection) { #check if connection object contents are null/empty $Validate1 = Test-CLIConnection $SANConnection if($Validate1 -eq "Failed") { #check if global connection object contents are null/empty $Validate2 = Test-CLIConnection $global:SANConnection if($Validate2 -eq "Failed") { Write-DebugLog "Connection object is null/empty or the array address (FQDN/IP Address) or user credentials in the connection object are either null or incorrect. Create a valid connection object using New-CLIConnection or New-PoshSshConnection" " ERR: " Write-DebugLog "Stop: Exiting Set-Alert since SAN connection object values are null/empty" $Debug Return "Unable to execute the cmdlet Set-Alert since no active storage connection session exists. `nUse New-PoshSSHConnection or New-CLIConnection to start a new storage connection session." } } } $plinkresult = Test-PARCli -SANConnection $SANConnection if($plinkresult -match "FAILURE :") { write-debuglog "$plinkresult" Return $plinkresult } $Cmd = " setalert " if($New) { $Cmd += " new " } elseif($Ack) { $Cmd += " ack " } elseif($Fixed) { $Cmd += " fixed " } else { Return "Please Select At-least One from [ New | Ack | Fixed ]..." } if($All) { $Cmd += " -a " } elseif($Alert_ID) { $Cmd += " $Alert_ID " } else { Return "Please Select At-least One from [ All | Alert_ID ]..." } $Result = Invoke-CLICommand -Connection $SANConnection -cmds $Cmd Write-DebugLog "Executing Function : Set-Alert Command -->" INFO: Return $Result } ## End-of Set-Alert Export-ModuleMember Get-Alert , Get-EventLog , Get-Health , Remove-Alerts , Set-Alert # SIG # Begin signature block # MIIhzwYJKoZIhvcNAQcCoIIhwDCCIbwCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAmwAnT2lGgd4w3 # rvMoPtyE3mtvg8eHhD5hToJWG8tcUKCCEKswggUpMIIEEaADAgECAhB4Lu4fcD9z # xUgD+jf1OoqlMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAkdCMRswGQYDVQQI # ExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoT # D1NlY3RpZ28gTGltaXRlZDEkMCIGA1UEAxMbU2VjdGlnbyBSU0EgQ29kZSBTaWdu # aW5nIENBMB4XDTIxMDUyODAwMDAwMFoXDTIyMDUyODIzNTk1OVowgZAxCzAJBgNV # BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRIwEAYDVQQHDAlQYWxvIEFsdG8x # KzApBgNVBAoMIkhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIENvbXBhbnkxKzAp # BgNVBAMMIkhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIENvbXBhbnkwggEiMA0G # CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDmclZSXJBXA55ijwwFymuq+Y4F/quF # mm2vRdEmjFhzRvTpnGjIYtVcG11ka4JGCROmNVDZGAelnqcXn5DKO710j5SICTBC # 5gXOLwga7usifs21W+lVT0BsZTiUnFu4hEhuFTlahJIEvPGVgO1GBcuItD2QqB4q # 9j15GDI5nGBSzIyJKMctcIalxsTSPG1kiDbLkdfsIivhe9u9m8q6NRqDUaYYQTN+ # /qGCqVNannMapH8tNHqFb6VdzUFI04t7kFtSk00AkdD6qUvA4u8mL2bUXAYz8K5m # nrFs+ckx5Yqdxfx68EO26Bt2qbz/oTHxE6FiVzsDl90bcUAah2l976ebAgMBAAGj # ggGQMIIBjDAfBgNVHSMEGDAWgBQO4TqoUzox1Yq+wbutZxoDha00DjAdBgNVHQ4E # FgQUlC56g+JaYFsl5QWK2WDVOsG+pCEwDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB # /wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwMwEQYJYIZIAYb4QgEBBAQDAgQQMEoG # A1UdIARDMEEwNQYMKwYBBAGyMQECAQMCMCUwIwYIKwYBBQUHAgEWF2h0dHBzOi8v # c2VjdGlnby5jb20vQ1BTMAgGBmeBDAEEATBDBgNVHR8EPDA6MDigNqA0hjJodHRw # Oi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29SU0FDb2RlU2lnbmluZ0NBLmNybDBz # BggrBgEFBQcBAQRnMGUwPgYIKwYBBQUHMAKGMmh0dHA6Ly9jcnQuc2VjdGlnby5j # b20vU2VjdGlnb1JTQUNvZGVTaWduaW5nQ0EuY3J0MCMGCCsGAQUFBzABhhdodHRw # Oi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAY+1n2UUlQU6Z # VoEVaZKqZf/zrM/d7Kbx+S/t8mR2E+uNXStAnwztElqrm3fSr+5LMRzBhrYiSmea # w9c/0c7qFO9mt8RR2q2uj0Huf+oAMh7TMuMKZU/XbT6tS1e15B8ZhtqOAhmCug6s # DuNvoxbMpokYevpa24pYn18ELGXOUKlqNUY2qOs61GVvhG2+V8Hl/pajE7yQ4diz # iP7QjMySms6BtZV5qmjIFEWKY+UTktUcvN4NVA2J0TV9uunDbHRt4xdY8TF/Clgz # Z/MQHJ/X5yX6kupgDeN2t3o+TrColetBnwk/SkJEsUit0JapAiFUx44j4w61Qanb # Zmi0tr8YGDCCBYEwggRpoAMCAQICEDlyRDr5IrdR19NsEN0xNZUwDQYJKoZIhvcN # AQEMBQAwezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3Rl # cjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQx # ITAfBgNVBAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0xOTAzMTIwMDAw # MDBaFw0yODEyMzEyMzU5NTlaMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKTmV3 # IEplcnNleTEUMBIGA1UEBxMLSmVyc2V5IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VS # VFJVU1QgTmV0d29yazEuMCwGA1UEAxMlVVNFUlRydXN0IFJTQSBDZXJ0aWZpY2F0 # aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIAS # ZRc2DsPbCLPQrFcNdu3NJ9NMrVCDYeKqIE0JLWQJ3M6Jn8w9qez2z8Hc8dOx1ns3 # KBErR9o5xrw6GbRfpr19naNjQrZ28qk7K5H44m/Q7BYgkAk+4uh0yRi0kdRiZNt/ # owbxiBhqkCI8vP4T8IcUe/bkH47U5FHGEWdGCFHLhhRUP7wz/n5snP8WnRi9UY41 # pqdmyHJn2yFmsdSbeAPAUDrozPDcvJ5M/q8FljUfV1q3/875PbcstvZU3cjnEjpN # rkyKt1yatLcgPcp/IjSufjtoZgFE5wFORlObM2D3lL5TN5BzQ/Myw1Pv26r+dE5p # x2uMYJPexMcM3+EyrsyTO1F4lWeL7j1W/gzQaQ8bD/MlJmszbfduR/pzQ+V+DqVm # sSl8MoRjVYnEDcGTVDAZE6zTfTen6106bDVc20HXEtqpSQvf2ICKCZNijrVmzyWI # zYS4sT+kOQ/ZAp7rEkyVfPNrBaleFoPMuGfi6BOdzFuC00yz7Vv/3uVzrCM7LQC/ # NVV0CUnYSVgaf5I25lGSDvMmfRxNF7zJ7EMm0L9BX0CpRET0medXh55QH1dUqD79 # dGMvsVBlCeZYQi5DGky08CVHWfoEHpPUJkZKUIGy3r54t/xnFeHJV4QeD2PW6WK6 # 1l9VLupcxigIBCU5uA4rqfJMlxwHPw1S9e3vL4IPAgMBAAGjgfIwge8wHwYDVR0j # BBgwFoAUoBEKIz6W8Qfs4q8p74Klf9AwpLQwHQYDVR0OBBYEFFN5v1qqK0rPVIDh # 2JvAnfKyA2bLMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MBEGA1Ud # IAQKMAgwBgYEVR0gADBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsLmNvbW9k # b2NhLmNvbS9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDA0BggrBgEFBQcBAQQo # MCYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmNvbW9kb2NhLmNvbTANBgkqhkiG # 9w0BAQwFAAOCAQEAGIdR3HQhPZyK4Ce3M9AuzOzw5steEd4ib5t1jp5y/uTW/qof # nJYt7wNKfq70jW9yPEM7wD/ruN9cqqnGrvL82O6je0P2hjZ8FODN9Pc//t64tIrw # kZb+/UNkfv3M0gGhfX34GRnJQisTv1iLuqSiZgR2iJFODIkUzqJNyTKzuugUGrxx # 8VvwQQuYAAoiAxDlDLH5zZI3Ge078eQ6tvlFEyZ1r7uq7z97dzvSxAKRPRkA0xdc # Ods/exgNRc2ThZYvXd9ZFk8/Ub3VRRg/7UqO6AZhdCMWtQ1QcydER38QXYkqa4Ux # FMToqWpMgLxqeM+4f452cpkMnf7XkQgWoaNflTCCBfUwggPdoAMCAQICEB2iSDBv # myYY0ILgln0z02owDQYJKoZIhvcNAQEMBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwGA1UEChMV # VGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3QgUlNBIENl # cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE4MTEwMjAwMDAwMFoXDTMwMTIzMTIz # NTk1OVowfDELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3Rl # cjEQMA4GA1UEBxMHU2FsZm9yZDEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSQw # IgYDVQQDExtTZWN0aWdvIFJTQSBDb2RlIFNpZ25pbmcgQ0EwggEiMA0GCSqGSIb3 # DQEBAQUAA4IBDwAwggEKAoIBAQCGIo0yhXoYn0nwli9jCB4t3HyfFM/jJrYlZilA # hlRGdDFixRDtsocnppnLlTDAVvWkdcapDlBipVGREGrgS2Ku/fD4GKyn/+4uMyD6 # DBmJqGx7rQDDYaHcaWVtH24nlteXUYam9CflfGqLlR5bYNV+1xaSnAAvaPeX7Wpy # vjg7Y96Pv25MQV0SIAhZ6DnNj9LWzwa0VwW2TqE+V2sfmLzEYtYbC43HZhtKn52B # xHJAteJf7wtF/6POF6YtVbC3sLxUap28jVZTxvC6eVBJLPcDuf4vZTXyIuosB69G # 2flGHNyMfHEo8/6nxhTdVZFuihEN3wYklX0Pp6F8OtqGNWHTAgMBAAGjggFkMIIB # YDAfBgNVHSMEGDAWgBRTeb9aqitKz1SA4dibwJ3ysgNmyzAdBgNVHQ4EFgQUDuE6 # qFM6MdWKvsG7rWcaA4WtNA4wDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYB # Af8CAQAwHQYDVR0lBBYwFAYIKwYBBQUHAwMGCCsGAQUFBwMIMBEGA1UdIAQKMAgw # BgYEVR0gADBQBgNVHR8ESTBHMEWgQ6BBhj9odHRwOi8vY3JsLnVzZXJ0cnVzdC5j # b20vVVNFUlRydXN0UlNBQ2VydGlmaWNhdGlvbkF1dGhvcml0eS5jcmwwdgYIKwYB # BQUHAQEEajBoMD8GCCsGAQUFBzAChjNodHRwOi8vY3J0LnVzZXJ0cnVzdC5jb20v # VVNFUlRydXN0UlNBQWRkVHJ1c3RDQS5jcnQwJQYIKwYBBQUHMAGGGWh0dHA6Ly9v # Y3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcNAQEMBQADggIBAE1jUO1HNEphpNve # aiqMm/EAAB4dYns61zLC9rPgY7P7YQCImhttEAcET7646ol4IusPRuzzRl5ARokS # 9At3WpwqQTr81vTr5/cVlTPDoYMot94v5JT3hTODLUpASL+awk9KsY8k9LOBN9O3 # ZLCmI2pZaFJCX/8E6+F0ZXkI9amT3mtxQJmWunjxucjiwwgWsatjWsgVgG10Xkp1 # fqW4w2y1z99KeYdcx0BNYzX2MNPPtQoOCwR/oEuuu6Ol0IQAkz5TXTSlADVpbL6f # ICUQDRn7UJBhvjmPeo5N9p8OHv4HURJmgyYZSJXOSsnBf/M6BZv5b9+If8AjntIe # Q3pFMcGcTanwWbJZGehqjSkEAnd8S0vNcL46slVaeD68u28DECV3FTSK+TbMQ5Lk # uk/xYpMoJVcp+1EZx6ElQGqEV8aynbG8HArafGd+fS7pKEwYfsR7MUFxmksp7As9 # V1DSyt39ngVR5UR43QHesXWYDVQk/fBO4+L4g71yuss9Ou7wXheSaG3IYfmm8SoK # C6W59J7umDIFhZ7r+YMp08Ysfb06dy6LN0KgaoLtO0qqlBCk4Q34F8W2WnkzGJLj # tXX4oemOCiUe5B7xn1qHI/+fpFGe+zmAEc3btcSnqIBv5VPU4OOiwtJbGvoyJi1q # V3AcPKRYLqPzW0sH3DJZ84enGm1YMYIQejCCEHYCAQEwgZAwfDELMAkGA1UEBhMC # R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9y # ZDEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSQwIgYDVQQDExtTZWN0aWdvIFJT # QSBDb2RlIFNpZ25pbmcgQ0ECEHgu7h9wP3PFSAP6N/U6iqUwDQYJYIZIAWUDBAIB # BQCgfDAQBgorBgEEAYI3AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIB # BDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQg # YBMJHDcnOr8ubLF50k3TUb+pbYHvUDAIkHQL0LENnsMwDQYJKoZIhvcNAQEBBQAE # ggEAMKHH0LwsdZvREu3Oz9zy6xFC/KLSRiV7pJUsNE0dkE2v3Hl4HuCj45VuoAbz # +WU3SUNRMQxeZxLUVFntAaj4AMwTPZGP8RQVZ2qvCI/ulmoY5hbSu0hqFJMG3so+ # vP1uABdtwxNvo0fzE6z5fbxNdp35s9ptv7N/ljUzbgO9aTpeSJ/h5WWQJ0KI4th3 # 6rRuzSbdI0vEyZTzFBmADRokJo8xNDV+oV0JUHoJX6wPsNtnqQM0y592VQmrC5+R # jSzjvgmYqXsDo1d6F8UUriauJ1orxbosIErEQUx1LpqLQCxTwnQL58dwWJtLS+iN # 1wRag+f3kIJS+mWxwOZC/4Z05aGCDjwwgg44BgorBgEEAYI3AwMBMYIOKDCCDiQG # CSqGSIb3DQEHAqCCDhUwgg4RAgEDMQ0wCwYJYIZIAWUDBAIBMIIBDgYLKoZIhvcN # AQkQAQSggf4EgfswgfgCAQEGC2CGSAGG+EUBBxcDMDEwDQYJYIZIAWUDBAIBBQAE # ILRa0Vapw6SYc2HQTPHQAU+zaQTrSZMqBw92Zk2M7V7VAhRMk3TG/tbqJKIVtpIc # Ljgklzx7mBgPMjAyMTA2MTkwNDA5MzBaMAMCAR6ggYakgYMwgYAxCzAJBgNVBAYT # AlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3lt # YW50ZWMgVHJ1c3QgTmV0d29yazExMC8GA1UEAxMoU3ltYW50ZWMgU0hBMjU2IFRp # bWVTdGFtcGluZyBTaWduZXIgLSBHM6CCCoswggU4MIIEIKADAgECAhB7BbHUSWhR # RPfJidKcGZ0SMA0GCSqGSIb3DQEBCwUAMIG9MQswCQYDVQQGEwJVUzEXMBUGA1UE # ChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv # cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv # cml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290 # IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE2MDExMjAwMDAwMFoXDTMxMDEx # MTIzNTk1OVowdzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBv # cmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSgwJgYDVQQD # Ex9TeW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIENBMIIBIjANBgkqhkiG9w0B # AQEFAAOCAQ8AMIIBCgKCAQEAu1mdWVVPnYxyXRqBoutV87ABrTxxrDKPBWuGmicA # MpdqTclkFEspu8LZKbku7GOz4c8/C1aQ+GIbfuumB+Lef15tQDjUkQbnQXx5HMvL # rRu/2JWR8/DubPitljkuf8EnuHg5xYSl7e2vh47Ojcdt6tKYtTofHjmdw/SaqPSE # 4cTRfHHGBim0P+SDDSbDewg+TfkKtzNJ/8o71PWym0vhiJka9cDpMxTW38eA25Hu # /rySV3J39M2ozP4J9ZM3vpWIasXc9LFL1M7oCZFftYR5NYp4rBkyjyPBMkEbWQ6p # PrHM+dYr77fY5NUdbRE6kvaTyZzjSO67Uw7UNpeGeMWhNwIDAQABo4IBdzCCAXMw # DgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwZgYDVR0gBF8wXTBb # BgtghkgBhvhFAQcXAzBMMCMGCCsGAQUFBwIBFhdodHRwczovL2Quc3ltY2IuY29t # L2NwczAlBggrBgEFBQcCAjAZGhdodHRwczovL2Quc3ltY2IuY29tL3JwYTAuBggr # BgEFBQcBAQQiMCAwHgYIKwYBBQUHMAGGEmh0dHA6Ly9zLnN5bWNkLmNvbTA2BgNV # HR8ELzAtMCugKaAnhiVodHRwOi8vcy5zeW1jYi5jb20vdW5pdmVyc2FsLXJvb3Qu # Y3JsMBMGA1UdJQQMMAoGCCsGAQUFBwMIMCgGA1UdEQQhMB+kHTAbMRkwFwYDVQQD # ExBUaW1lU3RhbXAtMjA0OC0zMB0GA1UdDgQWBBSvY9bKo06FcuCnvEHzKaI4f4B1 # YjAfBgNVHSMEGDAWgBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsF # AAOCAQEAdeqwLdU0GVwyRf4O4dRPpnjBb9fq3dxP86HIgYj3p48V5kApreZd9KLZ # VmSEcTAq3R5hF2YgVgaYGY1dcfL4l7wJ/RyRR8ni6I0D+8yQL9YKbE4z7Na0k8hM # kGNIOUAhxN3WbomYPLWYl+ipBrcJyY9TV0GQL+EeTU7cyhB4bEJu8LbF+GFcUvVO # 9muN90p6vvPN/QPX2fYDqA/jU/cKdezGdS6qZoUEmbf4Blfhxg726K/a7JsYH6q5 # 4zoAv86KlMsB257HOLsPUqvR45QDYApNoP4nbRQy/D+XQOG/mYnb5DkUvdrk08Pq # K1qzlVhVBH3HmuwjA42FKtL/rqlhgTCCBUswggQzoAMCAQICEHvU5a+6zAc/oQEj # BCJBTRIwDQYJKoZIhvcNAQELBQAwdzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5 # bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3 # b3JrMSgwJgYDVQQDEx9TeW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIENBMB4X # DTE3MTIyMzAwMDAwMFoXDTI5MDMyMjIzNTk1OVowgYAxCzAJBgNVBAYTAlVTMR0w # GwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMg # VHJ1c3QgTmV0d29yazExMC8GA1UEAxMoU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFt # cGluZyBTaWduZXIgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB # AK8Oiqr43L9pe1QXcUcJvY08gfh0FXdnkJz93k4Cnkt29uU2PmXVJCBtMPndHYPp # PydKM05tForkjUCNIqq+pwsb0ge2PLUaJCj4G3JRPcgJiCYIOvn6QyN1R3AMs19b # jwgdckhXZU2vAjxA9/TdMjiTP+UspvNZI8uA3hNN+RDJqgoYbFVhV9HxAizEtavy # bCPSnw0PGWythWJp/U6FwYpSMatb2Ml0UuNXbCK/VX9vygarP0q3InZl7Ow28paV # gSYs/buYqgE4068lQJsJU/ApV4VYXuqFSEEhh+XetNMmsntAU1h5jlIxBk2UA0XE # zjwD7LcA8joixbRv5e+wipsCAwEAAaOCAccwggHDMAwGA1UdEwEB/wQCMAAwZgYD # VR0gBF8wXTBbBgtghkgBhvhFAQcXAzBMMCMGCCsGAQUFBwIBFhdodHRwczovL2Qu # c3ltY2IuY29tL2NwczAlBggrBgEFBQcCAjAZGhdodHRwczovL2Quc3ltY2IuY29t # L3JwYTBABgNVHR8EOTA3MDWgM6Axhi9odHRwOi8vdHMtY3JsLndzLnN5bWFudGVj # LmNvbS9zaGEyNTYtdHNzLWNhLmNybDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAO # BgNVHQ8BAf8EBAMCB4AwdwYIKwYBBQUHAQEEazBpMCoGCCsGAQUFBzABhh5odHRw # Oi8vdHMtb2NzcC53cy5zeW1hbnRlYy5jb20wOwYIKwYBBQUHMAKGL2h0dHA6Ly90 # cy1haWEud3Muc3ltYW50ZWMuY29tL3NoYTI1Ni10c3MtY2EuY2VyMCgGA1UdEQQh # MB+kHTAbMRkwFwYDVQQDExBUaW1lU3RhbXAtMjA0OC02MB0GA1UdDgQWBBSlEwGp # n4XMG24WHl87Map5NgB7HTAfBgNVHSMEGDAWgBSvY9bKo06FcuCnvEHzKaI4f4B1 # YjANBgkqhkiG9w0BAQsFAAOCAQEARp6v8LiiX6KZSM+oJ0shzbK5pnJwYy/jVSl7 # OUZO535lBliLvFeKkg0I2BC6NiT6Cnv7O9Niv0qUFeaC24pUbf8o/mfPcT/mMwnZ # olkQ9B5K/mXM3tRr41IpdQBKK6XMy5voqU33tBdZkkHDtz+G5vbAf0Q8RlwXWuOk # O9VpJtUhfeGAZ35irLdOLhWa5Zwjr1sR6nGpQfkNeTipoQ3PtLHaPpp6xyLFdM3f # RwmGxPyRJbIblumFCOjd6nRgbmClVnoNyERY3Ob5SBSe5b/eAL13sZgUchQk38cR # LB8AP8NLFMZnHMweBqOQX1xUiz7jM1uCD8W3hgJOcZ/pZkU/djGCAlowggJWAgEB # MIGLMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlv # bjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UEAxMfU3lt # YW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQQIQe9Tlr7rMBz+hASMEIkFNEjAL # BglghkgBZQMEAgGggaQwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqG # SIb3DQEJBTEPFw0yMTA2MTkwNDA5MzBaMC8GCSqGSIb3DQEJBDEiBCAHxs8KALwW # ecr7szgDxfQ4orJGpHsdSSUjHM9h0eJGSTA3BgsqhkiG9w0BCRACLzEoMCYwJDAi # BCDEdM52AH0COU4NpeTefBTGgPniggE8/vZT7123H99h+DALBgkqhkiG9w0BAQEE # ggEARpw4wvZprZNHTi+M6T7k3HqU9WGmzypw/TG0XxVZgMq6I7uA65zCmVwaM0Oe # 7Jumu6U51tZbnDGjFsQ8smKHU3t6zgClWxFp7QkcreHP+EljKcUfLko27q6LBVzC # kSXB9v2CONLzxhPIj9DWtbU/ebIzW5LPiNFeecrmi3FaFTfHhUmGGjDi+869ITai # ESyt1iNSXCSzojnGrCC1EuE7HT5/8v9Bw7ZSi6zZaHKaKZYt2xS8xf+SJSaGHkpg # dChnctZU/5MRZ4NnCFBILz7MrqVopK6+yghB/N2H0OorbWIgesx47CYm8XgJzhL2 # IO0p7xfxUmCBsPPJDSMdFRq3jQ== # SIG # End signature block |