Samples/Wipe_Appliance.ps1

##############################################################################
# Wipe_Appliance.ps1
# - Remove ALL resource from an appliance (useful to clean a system between demos).
#
# VERSION 3.00
#
# (C) Copyright 2013-2021 Hewlett Packard Enterprise Development LP
##############################################################################
# The information contained herein is subject to change without notice.
# The only warranties for HP products and services are set forth in the
# express warranty statements accompanying such products and services.
# Nothing herein should be construed as constituting an additional warranty.
# HP shall not be liable for technical or editorial errors or omissions
# contained herein.
#
##############################################################################
[CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High')]
param
(

    [Parameter (Mandatory)]
    [ValidateNotNullorEmpty()]
    [String]$Hostname,

    [Parameter (Mandatory)]
    [ValidateNotNullorEmpty()]
    [String]$Username,

    [Parameter (Mandatory)]
    [ValidateNotNullorEmpty()]
    [Object]$Password

)

if ($PSCmdlet.ShouldProcess($Hostname,("remove all resources on appliance")))
{

    if (! (Get-Module -Name 'HPEOneView.540'))
    {

        Import-Module HPEOneView.540

    }

    # First connect to the CI Management Appliance (if not already connected)
    if (! $ConnectedSessions)
    {

        Try
        {

            $Params = @{

                Hostname = $Hostname;
                Username = $Username;
                Password = $Password

            }

            Connect-OVMgmt @Params

        }

        Catch
        {

            PSCmdlet.ThrowTerminatingError($_)

        }

    }

    Try
    {

        ############################################################
        # REMOVE CONFIGURATION (for cleanup after/between demos) #
        ############################################################

        # Delete ALL Server Profiles
        $tasks = Get-OVServerProfile | Remove-OVServerProfile -Force -Confirm:$false | Wait-OVTaskComplete

        if ($tasks | ? taskState -ne 'Completed') {

            $Tasks | ? taskState -ne 'Completed' | Format-List

            Write-Error '1 or more Remove Server Profile tasks failed to complete successfully.' -ErrorAction Stop

        }

        # Delete ALL Server Profile Templates
        $tasks = Get-OVServerProfileTemplate | Remove-OVServerProfileTemplate -Confirm:$false | Wait-OVTaskComplete

        if ($tasks | ? taskState -ne 'Completed') {

            $Tasks | ? taskState -ne 'Completed' | Format-List

            Write-Error '1 or more Remove Server Profile Template tasks failed to complete successfully.' -ErrorAction Stop

        }

        # Remove ALL iPDUs
        $tasks = Get-OVPowerDevice | Remove-OVPowerDevice -Force -Confirm:$false | Wait-OVTaskComplete

        if ($tasks | ? taskState -ne 'Completed') {

            $Tasks | ? taskState -ne 'Completed' | Format-List

            Write-Error '1 or more Remove Power Device tasks failed to complete successfully.' -ErrorAction Stop

        }

        # Remove ALL Enclosures
        $tasks = Get-OVEnclosure | Remove-OVEnclosure -Force -Confirm:$false | Wait-OVTaskComplete

        if ($tasks | ? taskState -ne 'Completed') {

            $Tasks | ? taskState -ne 'Completed' | Format-List

            Write-Error '1 or more Remove Enclosure tasks failed to complete successfully.' -ErrorAction Stop

        }

        # Remove ALL Rack Servers
        $tasks = Get-OVServer | Remove-OVServer -Force -Confirm:$false | Wait-OVTaskComplete

        if ($tasks | ? taskState -ne 'Completed') {

            $Tasks | ? taskState -ne 'Completed' | Format-List

            Write-Error '1 or more Remove Server Hardware Resources tasks failed to complete successfully.' -ErrorAction Stop

        }

        # Delete ALL Enclosure Groups:
        $tasks = Get-OVEnclosureGroup | Remove-OVEnclosureGroup -Force -Confirm:$false

        if ($tasks | ? Message -ne 'Resource deleted successfully.') {

            $Tasks | ? Message -ne 'Resource deleted successfully.' | Format-List

            Write-Error '1 or more Remove Enclosure Group requests failed to complete successfully.' -ErrorAction Stop

        }

        # Delete ALL Logical Interconnect Groups
        $tasks = Get-OVLogicalInterconnectGroup | Remove-OVLogicalInterconnectGroup -Force -Confirm:$false | Wait-OVTaskComplete

        if ($tasks | ? taskState -ne 'Completed') {

            $Tasks | ? taskState -ne 'Completed' | Format-List

            Write-Error '1 or more Remove Logical Interconnect Group tasks failed to complete successfully.' -ErrorAction Stop

        }

        # Delete ALL Network-Sets
        $tasks = Get-OVNetworkSet | Remove-OVNetworkSet -Confirm:$false | Wait-OVTaskComplete

        if ($tasks | ? taskState -ne 'Completed') {

            $Tasks | ? taskState -ne 'Completed' | Format-List

            Write-Error '1 or more Remove Network Set tasks failed to complete successfully.' -ErrorAction Stop

        }

        # Delete ALL Networks
        $tasks = Get-OVNetwork | Remove-OVNetwork -Confirm:$false | Wait-OVTaskComplete

        if ($tasks | ? taskState -ne 'Completed') {

            $Tasks | ? taskState -ne 'Completed' | Format-List

            Write-Error '1 or more Remove Network tasks failed to complete successfully.' -ErrorAction Stop

        }

        # Delete ALL Storage Volumes
        $tasks = Get-OVStorageVolume | Remove-OVStorageVolume -Force -Confirm:$false | Wait-OVTaskComplete

        if ($tasks | ? taskState -ne 'Completed') {

            $Tasks | ? taskState -ne 'Completed' | Format-List

            Write-Error '1 or more Remove Storage Volume tasks failed to complete successfully.' -ErrorAction Stop

        }

        # Delete ALL Storage Pools
        $tasks = Get-OVStoragePool | Remove-OVStoragePool -Force -Confirm:$false | Wait-OVTaskComplete

        if ($tasks | ? taskState -ne 'Completed') {

            $Tasks | ? taskState -ne 'Completed' | Format-List

            Write-Error '1 or more Remove Storage Pool tasks failed to complete successfully.' -ErrorAction Stop

        }

        # Delete ALL Storage Systems
        $tasks = Get-OVStorageSYstem | Remove-OVStorageSystem -Force -Confirm:$false | Wait-OVTaskComplete

        if ($tasks | ? taskState -ne 'Completed') {

            $Tasks | ? taskState -ne 'Completed' | Format-List

            Write-Error '1 or more Remove Storage System tasks failed to complete successfully.' -ErrorAction Stop

        }

        # Delete ALL SAN Managers
        $tasks = Get-OVSanManager | Remove-OVSanManager -Confirm:$false | Wait-OVTaskComplete

        if ($tasks | ? taskState -ne 'Completed') {

            $Tasks | ? taskState -ne 'Completed' | Format-List

            Write-Error '1 or more Remove SAN Manager tasks failed to complete successfully.' -ErrorAction Stop

        }

        # Delete ALL Unmanaged Devices
        $tasks = Get-OVUnmanagedDevice | Remove-OVUnmanagedDevice -Force -Confirm:$false

        if ($tasks | ? Message -ne 'Resource deleted successfully.') {

            $Tasks | ? Message -ne 'Resource deleted successfully.' | Format-List

            Write-Error '1 or more Remove Unmanaged Device requests failed to complete successfully.' -ErrorAction Stop

        }

    }

    Catch
    {

        $PSCmdlet.ThrowTerminatingError($_)

    }

}

elseif ($PSBoundParameters['Whatif'])
{

    "[{0}] -WhatIf provided." -f $MyInvocation.InvocationName.ToString().ToUpper() | Write-Verbose

}

else
{

    "[{0}] User cancelled." -f $MyInvocation.InvocationName.ToString().ToUpper() | Write-Verbose

}
# SIG # Begin signature block
# MIIiHAYJKoZIhvcNAQcCoIIiDTCCIgkCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBzFUTFun2A5VAD
# C1BlZQr0mRZwjWa1R/Pdso7fLhqB7KCCEPYwggV0MIIEXKADAgECAhEA4uyQqa0b
# usW8CNcfQ2uSeDANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJHQjEbMBkGA1UE
# CBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRgwFgYDVQQK
# Ew9TZWN0aWdvIExpbWl0ZWQxJDAiBgNVBAMTG1NlY3RpZ28gUlNBIENvZGUgU2ln
# bmluZyBDQTAeFw0yMDEwMjEwMDAwMDBaFw0yMTEwMjEyMzU5NTlaMIHaMQswCQYD
# VQQGEwJVUzEOMAwGA1UEEQwFOTQzMDQxEzARBgNVBAgMCkNhbGlmb3JuaWExEjAQ
# BgNVBAcMCVBhbG8gQWx0bzEcMBoGA1UECQwTMzAwMCBIYW5vdmVyIFN0cmVldDEr
# MCkGA1UECgwiSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgQ29tcGFueTEaMBgG
# A1UECwwRSFAgQ3liZXIgU2VjdXJpdHkxKzApBgNVBAMMIkhld2xldHQgUGFja2Fy
# ZCBFbnRlcnByaXNlIENvbXBhbnkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
# AoIBAQDqW2H8BiQozcKceSJau9tZAWp/YIjcOFBH7DT6DkS4tOAY/abriMVAPYiK
# oxJ8GEck3wWlYFm09+IrpeEDvXCZj0D8B7ls7AMUudCikqO5GJsgL3vzJqOmmUjp
# I3VsRvoJ5I4Ioq3N7jUINYSpHx3R0Sx8YMlKCRJLQO9DRveO1JSNMULIA2yatA9f
# lmZ/9jTf2UJCj6n7exfqobZCSzlRoiYED6fPmzJIzFXHkZdzmZ4XlNT19sxl3uIl
# BeT7DNipZ/VjnkPmddoEIn1gcsDzjuiE2+fxhkmWSwsWuDv3dDztYfoGZjbJi8bm
# OhfTRZiCQUDpjDyYbFzORnoK6tu9AgMBAAGjggGQMIIBjDAfBgNVHSMEGDAWgBQO
# 4TqoUzox1Yq+wbutZxoDha00DjAdBgNVHQ4EFgQUNeRTASY3ei1XaNNs+0/ZvUDs
# P2owDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYB
# BQUHAwMwEQYJYIZIAYb4QgEBBAQDAgQQMEoGA1UdIARDMEEwNQYMKwYBBAGyMQEC
# AQMCMCUwIwYIKwYBBQUHAgEWF2h0dHBzOi8vc2VjdGlnby5jb20vQ1BTMAgGBmeB
# DAEEATBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsLnNlY3RpZ28uY29tL1Nl
# Y3RpZ29SU0FDb2RlU2lnbmluZ0NBLmNybDBzBggrBgEFBQcBAQRnMGUwPgYIKwYB
# BQUHMAKGMmh0dHA6Ly9jcnQuc2VjdGlnby5jb20vU2VjdGlnb1JTQUNvZGVTaWdu
# aW5nQ0EuY3J0MCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTAN
# BgkqhkiG9w0BAQsFAAOCAQEAev9EUlTOTH7o28vQnCN+uelty9iliqJBID4NcwYQ
# BBruKhgheokkvMVW8PvGDLsELMRDCOCD6WJZB2e6mICkhglFrcVLVoWcVToBym/t
# ipBXsEyYle6qTNxY+5eBC40FRxlurIZXiPgtEXa8PbNI6OGCQpEEp9wtVitUnPF3
# Q6MD/k+tyC81PaqzCXfXLC/cyTRki+8EAiSIhKSNY5h6at/29gN6+QppRJRb7ghN
# zATfVwiiW2jgYb8sUzvO8dbE3WIa9dv58VZNEvnhAGbHwLz15Gf2ygQaS26AuJ3S
# y4P8pXDC+oGoPiDngeQm0f9rF9AlYhmm8oeq+HGGgsesNjCCBYEwggRpoAMCAQIC
# EDlyRDr5IrdR19NsEN0xNZUwDQYJKoZIhvcNAQEMBQAwezELMAkGA1UEBhMCR0Ix
# GzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEa
# MBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMMGEFBQSBDZXJ0aWZp
# Y2F0ZSBTZXJ2aWNlczAeFw0xOTAzMTIwMDAwMDBaFw0yODEyMzEyMzU5NTlaMIGI
# MQswCQYDVQQGEwJVUzETMBEGA1UECBMKTmV3IEplcnNleTEUMBIGA1UEBxMLSmVy
# c2V5IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEuMCwGA1UE
# AxMlVVNFUlRydXN0IFJTQSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJ
# KoZIhvcNAQEBBQADggIPADCCAgoCggIBAIASZRc2DsPbCLPQrFcNdu3NJ9NMrVCD
# YeKqIE0JLWQJ3M6Jn8w9qez2z8Hc8dOx1ns3KBErR9o5xrw6GbRfpr19naNjQrZ2
# 8qk7K5H44m/Q7BYgkAk+4uh0yRi0kdRiZNt/owbxiBhqkCI8vP4T8IcUe/bkH47U
# 5FHGEWdGCFHLhhRUP7wz/n5snP8WnRi9UY41pqdmyHJn2yFmsdSbeAPAUDrozPDc
# vJ5M/q8FljUfV1q3/875PbcstvZU3cjnEjpNrkyKt1yatLcgPcp/IjSufjtoZgFE
# 5wFORlObM2D3lL5TN5BzQ/Myw1Pv26r+dE5px2uMYJPexMcM3+EyrsyTO1F4lWeL
# 7j1W/gzQaQ8bD/MlJmszbfduR/pzQ+V+DqVmsSl8MoRjVYnEDcGTVDAZE6zTfTen
# 6106bDVc20HXEtqpSQvf2ICKCZNijrVmzyWIzYS4sT+kOQ/ZAp7rEkyVfPNrBale
# FoPMuGfi6BOdzFuC00yz7Vv/3uVzrCM7LQC/NVV0CUnYSVgaf5I25lGSDvMmfRxN
# F7zJ7EMm0L9BX0CpRET0medXh55QH1dUqD79dGMvsVBlCeZYQi5DGky08CVHWfoE
# HpPUJkZKUIGy3r54t/xnFeHJV4QeD2PW6WK61l9VLupcxigIBCU5uA4rqfJMlxwH
# Pw1S9e3vL4IPAgMBAAGjgfIwge8wHwYDVR0jBBgwFoAUoBEKIz6W8Qfs4q8p74Kl
# f9AwpLQwHQYDVR0OBBYEFFN5v1qqK0rPVIDh2JvAnfKyA2bLMA4GA1UdDwEB/wQE
# AwIBhjAPBgNVHRMBAf8EBTADAQH/MBEGA1UdIAQKMAgwBgYEVR0gADBDBgNVHR8E
# PDA6MDigNqA0hjJodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9BQUFDZXJ0aWZpY2F0
# ZVNlcnZpY2VzLmNybDA0BggrBgEFBQcBAQQoMCYwJAYIKwYBBQUHMAGGGGh0dHA6
# Ly9vY3NwLmNvbW9kb2NhLmNvbTANBgkqhkiG9w0BAQwFAAOCAQEAGIdR3HQhPZyK
# 4Ce3M9AuzOzw5steEd4ib5t1jp5y/uTW/qofnJYt7wNKfq70jW9yPEM7wD/ruN9c
# qqnGrvL82O6je0P2hjZ8FODN9Pc//t64tIrwkZb+/UNkfv3M0gGhfX34GRnJQisT
# v1iLuqSiZgR2iJFODIkUzqJNyTKzuugUGrxx8VvwQQuYAAoiAxDlDLH5zZI3Ge07
# 8eQ6tvlFEyZ1r7uq7z97dzvSxAKRPRkA0xdcOds/exgNRc2ThZYvXd9ZFk8/Ub3V
# RRg/7UqO6AZhdCMWtQ1QcydER38QXYkqa4UxFMToqWpMgLxqeM+4f452cpkMnf7X
# kQgWoaNflTCCBfUwggPdoAMCAQICEB2iSDBvmyYY0ILgln0z02owDQYJKoZIhvcN
# AQEMBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYD
# VQQHEwtKZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3Jr
# MS4wLAYDVQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
# MB4XDTE4MTEwMjAwMDAwMFoXDTMwMTIzMTIzNTk1OVowfDELMAkGA1UEBhMCR0Ix
# GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEY
# MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSQwIgYDVQQDExtTZWN0aWdvIFJTQSBD
# b2RlIFNpZ25pbmcgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCG
# Io0yhXoYn0nwli9jCB4t3HyfFM/jJrYlZilAhlRGdDFixRDtsocnppnLlTDAVvWk
# dcapDlBipVGREGrgS2Ku/fD4GKyn/+4uMyD6DBmJqGx7rQDDYaHcaWVtH24nlteX
# UYam9CflfGqLlR5bYNV+1xaSnAAvaPeX7Wpyvjg7Y96Pv25MQV0SIAhZ6DnNj9LW
# zwa0VwW2TqE+V2sfmLzEYtYbC43HZhtKn52BxHJAteJf7wtF/6POF6YtVbC3sLxU
# ap28jVZTxvC6eVBJLPcDuf4vZTXyIuosB69G2flGHNyMfHEo8/6nxhTdVZFuihEN
# 3wYklX0Pp6F8OtqGNWHTAgMBAAGjggFkMIIBYDAfBgNVHSMEGDAWgBRTeb9aqitK
# z1SA4dibwJ3ysgNmyzAdBgNVHQ4EFgQUDuE6qFM6MdWKvsG7rWcaA4WtNA4wDgYD
# VR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0lBBYwFAYIKwYB
# BQUHAwMGCCsGAQUFBwMIMBEGA1UdIAQKMAgwBgYEVR0gADBQBgNVHR8ESTBHMEWg
# Q6BBhj9odHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVNFUlRydXN0UlNBQ2VydGlm
# aWNhdGlvbkF1dGhvcml0eS5jcmwwdgYIKwYBBQUHAQEEajBoMD8GCCsGAQUFBzAC
# hjNodHRwOi8vY3J0LnVzZXJ0cnVzdC5jb20vVVNFUlRydXN0UlNBQWRkVHJ1c3RD
# QS5jcnQwJQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJ
# KoZIhvcNAQEMBQADggIBAE1jUO1HNEphpNveaiqMm/EAAB4dYns61zLC9rPgY7P7
# YQCImhttEAcET7646ol4IusPRuzzRl5ARokS9At3WpwqQTr81vTr5/cVlTPDoYMo
# t94v5JT3hTODLUpASL+awk9KsY8k9LOBN9O3ZLCmI2pZaFJCX/8E6+F0ZXkI9amT
# 3mtxQJmWunjxucjiwwgWsatjWsgVgG10Xkp1fqW4w2y1z99KeYdcx0BNYzX2MNPP
# tQoOCwR/oEuuu6Ol0IQAkz5TXTSlADVpbL6fICUQDRn7UJBhvjmPeo5N9p8OHv4H
# URJmgyYZSJXOSsnBf/M6BZv5b9+If8AjntIeQ3pFMcGcTanwWbJZGehqjSkEAnd8
# S0vNcL46slVaeD68u28DECV3FTSK+TbMQ5Lkuk/xYpMoJVcp+1EZx6ElQGqEV8ay
# nbG8HArafGd+fS7pKEwYfsR7MUFxmksp7As9V1DSyt39ngVR5UR43QHesXWYDVQk
# /fBO4+L4g71yuss9Ou7wXheSaG3IYfmm8SoKC6W59J7umDIFhZ7r+YMp08Ysfb06
# dy6LN0KgaoLtO0qqlBCk4Q34F8W2WnkzGJLjtXX4oemOCiUe5B7xn1qHI/+fpFGe
# +zmAEc3btcSnqIBv5VPU4OOiwtJbGvoyJi1qV3AcPKRYLqPzW0sH3DJZ84enGm1Y
# MYIQfDCCEHgCAQEwgZEwfDELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIg
# TWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEYMBYGA1UEChMPU2VjdGlnbyBM
# aW1pdGVkMSQwIgYDVQQDExtTZWN0aWdvIFJTQSBDb2RlIFNpZ25pbmcgQ0ECEQDi
# 7JCprRu6xbwI1x9Da5J4MA0GCWCGSAFlAwQCAQUAoHwwEAYKKwYBBAGCNwIBDDEC
# MAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwG
# CisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEILEw7g1tvcG+Ocz7Dj4fGRvXu//P
# 0nGp33bDXQHRaWQTMA0GCSqGSIb3DQEBAQUABIIBAE+ek6spINVtJaRg8+tjJtRn
# +yXWCeaQbYadw46db0E9L2Q7M3loN/6P8gw11jG7Ip1I/i8dhomJfc+6ta2ddEMg
# W4nii34C3xh2lk/2OWRUAS2J+++DZW/pRbh6DryzBm1ideZj1bSo7DvM0R0feQ5q
# RDO2avSoXdsC0ehNa1vWZRlKVeOT4/wob8rwO2rDK5vFai/qo62GmnSWDumVpM7I
# lSxLZp+djSALWuX7AZTIhoUpyu9wCct1pPvhbuLoyPYm89VnBILtfcUOj/p+dZZF
# s2TcaPyKuSHE0QbNzf8nRRa835ZLjCZz1qzBNpRg8X+ZkF0N8xQvfeKONkz05WGh
# gg49MIIOOQYKKwYBBAGCNwMDATGCDikwgg4lBgkqhkiG9w0BBwKggg4WMIIOEgIB
# AzENMAsGCWCGSAFlAwQCATCCAQ8GCyqGSIb3DQEJEAEEoIH/BIH8MIH5AgEBBgtg
# hkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUABCDqxunuxZvffScIj/DT3+yOKwCO
# RCXkoNJS9+bknR9SvAIVAMxhuaKqSlMPGPtddefGlac/5o24GA8yMDIxMDMxODIz
# MjcxMlowAwIBHqCBhqSBgzCBgDELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFu
# dGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3Jr
# MTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIFNpZ25lciAt
# IEczoIIKizCCBTgwggQgoAMCAQICEHsFsdRJaFFE98mJ0pwZnRIwDQYJKoZIhvcN
# AQELBQAwgb0xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEf
# MB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDIw
# MDggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE4MDYG
# A1UEAxMvVmVyaVNpZ24gVW5pdmVyc2FsIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRo
# b3JpdHkwHhcNMTYwMTEyMDAwMDAwWhcNMzEwMTExMjM1OTU5WjB3MQswCQYDVQQG
# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5
# bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBU
# aW1lU3RhbXBpbmcgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7
# WZ1ZVU+djHJdGoGi61XzsAGtPHGsMo8Fa4aaJwAyl2pNyWQUSym7wtkpuS7sY7Ph
# zz8LVpD4Yht+66YH4t5/Xm1AONSRBudBfHkcy8utG7/YlZHz8O5s+K2WOS5/wSe4
# eDnFhKXt7a+Hjs6Nx23q0pi1Oh8eOZ3D9Jqo9IThxNF8ccYGKbQ/5IMNJsN7CD5N
# +Qq3M0n/yjvU9bKbS+GImRr1wOkzFNbfx4Dbke7+vJJXcnf0zajM/gn1kze+lYhq
# xdz0sUvUzugJkV+1hHk1inisGTKPI8EyQRtZDqk+scz51ivvt9jk1R1tETqS9pPJ
# nONI7rtTDtQ2l4Z4xaE3AgMBAAGjggF3MIIBczAOBgNVHQ8BAf8EBAMCAQYwEgYD
# VR0TAQH/BAgwBgEB/wIBADBmBgNVHSAEXzBdMFsGC2CGSAGG+EUBBxcDMEwwIwYI
# KwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBka
# F2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMC4GCCsGAQUFBwEBBCIwIDAeBggrBgEF
# BQcwAYYSaHR0cDovL3Muc3ltY2QuY29tMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6
# Ly9zLnN5bWNiLmNvbS91bml2ZXJzYWwtcm9vdC5jcmwwEwYDVR0lBAwwCgYIKwYB
# BQUHAwgwKAYDVR0RBCEwH6QdMBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTMw
# HQYDVR0OBBYEFK9j1sqjToVy4Ke8QfMpojh/gHViMB8GA1UdIwQYMBaAFLZ3+mlI
# R59TEtXC6gcydgfRlwcZMA0GCSqGSIb3DQEBCwUAA4IBAQB16rAt1TQZXDJF/g7h
# 1E+meMFv1+rd3E/zociBiPenjxXmQCmt5l30otlWZIRxMCrdHmEXZiBWBpgZjV1x
# 8viXvAn9HJFHyeLojQP7zJAv1gpsTjPs1rSTyEyQY0g5QCHE3dZuiZg8tZiX6KkG
# twnJj1NXQZAv4R5NTtzKEHhsQm7wtsX4YVxS9U72a433Snq+8839A9fZ9gOoD+NT
# 9wp17MZ1LqpmhQSZt/gGV+HGDvbor9rsmxgfqrnjOgC/zoqUywHbnsc4uw9Sq9Hj
# lANgCk2g/idtFDL8P5dA4b+ZidvkORS92uTTw+orWrOVWFUEfcea7CMDjYUq0v+u
# qWGBMIIFSzCCBDOgAwIBAgIQe9Tlr7rMBz+hASMEIkFNEjANBgkqhkiG9w0BAQsF
# ADB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24x
# HzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFu
# dGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwHhcNMTcxMjIzMDAwMDAwWhcNMjkw
# MzIyMjM1OTU5WjCBgDELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENv
# cnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYD
# VQQDEyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIFNpZ25lciAtIEczMIIB
# IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArw6Kqvjcv2l7VBdxRwm9jTyB
# +HQVd2eQnP3eTgKeS3b25TY+ZdUkIG0w+d0dg+k/J0ozTm0WiuSNQI0iqr6nCxvS
# B7Y8tRokKPgbclE9yAmIJgg6+fpDI3VHcAyzX1uPCB1ySFdlTa8CPED39N0yOJM/
# 5Sym81kjy4DeE035EMmqChhsVWFX0fECLMS1q/JsI9KfDQ8ZbK2FYmn9ToXBilIx
# q1vYyXRS41dsIr9Vf2/KBqs/SrcidmXs7DbylpWBJiz9u5iqATjTryVAmwlT8ClX
# hVhe6oVIQSGH5d600yaye0BTWHmOUjEGTZQDRcTOPAPstwDyOiLFtG/l77CKmwID
# AQABo4IBxzCCAcMwDAYDVR0TAQH/BAIwADBmBgNVHSAEXzBdMFsGC2CGSAGG+EUB
# BxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5jb20vY3BzMCUGCCsG
# AQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMEAGA1UdHwQ5MDcwNaAz
# oDGGL2h0dHA6Ly90cy1jcmwud3Muc3ltYW50ZWMuY29tL3NoYTI1Ni10c3MtY2Eu
# Y3JsMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDB3Bggr
# BgEFBQcBAQRrMGkwKgYIKwYBBQUHMAGGHmh0dHA6Ly90cy1vY3NwLndzLnN5bWFu
# dGVjLmNvbTA7BggrBgEFBQcwAoYvaHR0cDovL3RzLWFpYS53cy5zeW1hbnRlYy5j
# b20vc2hhMjU2LXRzcy1jYS5jZXIwKAYDVR0RBCEwH6QdMBsxGTAXBgNVBAMTEFRp
# bWVTdGFtcC0yMDQ4LTYwHQYDVR0OBBYEFKUTAamfhcwbbhYeXzsxqnk2AHsdMB8G
# A1UdIwQYMBaAFK9j1sqjToVy4Ke8QfMpojh/gHViMA0GCSqGSIb3DQEBCwUAA4IB
# AQBGnq/wuKJfoplIz6gnSyHNsrmmcnBjL+NVKXs5Rk7nfmUGWIu8V4qSDQjYELo2
# JPoKe/s702K/SpQV5oLbilRt/yj+Z89xP+YzCdmiWRD0Hkr+Zcze1GvjUil1AEor
# pczLm+ipTfe0F1mSQcO3P4bm9sB/RDxGXBda46Q71Wkm1SF94YBnfmKst04uFZrl
# nCOvWxHqcalB+Q15OKmhDc+0sdo+mnrHIsV0zd9HCYbE/JElshuW6YUI6N3qdGBu
# YKVWeg3IRFjc5vlIFJ7lv94AvXexmBRyFCTfxxEsHwA/w0sUxmcczB4Go5BfXFSL
# PuMzW4IPxbeGAk5xn+lmRT92MYICWjCCAlYCAQEwgYswdzELMAkGA1UEBhMCVVMx
# HTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRl
# YyBUcnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9TeW1hbnRlYyBTSEEyNTYgVGltZVN0
# YW1waW5nIENBAhB71OWvuswHP6EBIwQiQU0SMAsGCWCGSAFlAwQCAaCBpDAaBgkq
# hkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIxMDMxODIz
# MjcxMlowLwYJKoZIhvcNAQkEMSIEIPLafpFhjwmEM7CcqRycDWyal4VPgY6PBsVq
# wN2232HpMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIMR0znYAfQI5Tg2l5N58FMaA
# +eKCATz+9lPvXbcf32H4MAsGCSqGSIb3DQEBAQSCAQCcs4EoFfBdzOuTkpEevvxK
# uehl5ktczMVP83n+hR3CazXGY4YEzH63NcZLROYQyDobCioNhDv/AvAVskQeDOuc
# Qb1Vhg+vMTBmWeHrFBFCve8dX5UvrGfeFNxg6d/6ClsY7Ss3Nbj1TP4LAXKN+W2R
# +fVHu7zVHHVSRrCT+uE9cTlczEfItYPViuJ0pfHEQpgoQz1yKK2pw0uQxwkpkFnQ
# 50uWkHdHWWn2gkCdZR8BU+LgPqmWINfHia+rGk1YvCUozjrIcxhtBLJX3c+ZItLl
# 6fSy/LiBKqdlza8OLRVrHSs1cOsQGxfJrCisoLYh2z6cb1mpOhmhxJScCAn4ns6W
# SIG # End signature block