ShowLicense.ps1

<# (c) Copyright 2015 Hewlett Packard Enterprise Development LP #>
Add-Type @'
public class AsyncPipeline
{
    public System.Management.Automation.PowerShell Pipeline ;
    public System.IAsyncResult AsyncResult ;
}
'@

function Create-ThreadPool
{
    [Cmdletbinding()]
    Param
    (
        [Parameter(Position=0,Mandatory=$true)][int]$PoolSize,
        [Parameter(Position=1,Mandatory=$False)][Switch]$MTA
    )
    
    $pool = [RunspaceFactory]::CreateRunspacePool(1, $PoolSize)    
    
    If(!$MTA) { $pool.ApartmentState = 'STA' }
    
    $pool.Open()
    
    return $pool
}

function Start-ThreadScriptBlock
{
    [Cmdletbinding()]
    Param
    (
        [Parameter(Position=0,Mandatory=$True)]$ThreadPool,
        [Parameter(Position=1,Mandatory=$True)][ScriptBlock]$ScriptBlock,
        [Parameter(Position=2,Mandatory=$False)][Object[]]$Parameters
    )
    
    $Pipeline = [System.Management.Automation.PowerShell]::Create() 

    $Pipeline.RunspacePool = $ThreadPool
        
    $Pipeline.AddScript($ScriptBlock) | Out-Null
    
    Foreach($Arg in $Parameters)
    {
        $Pipeline.AddArgument($Arg) | Out-Null
    }
    
    $AsyncResult = $Pipeline.BeginInvoke() 
    
    $Output = New-Object AsyncPipeline 
    
    $Output.Pipeline = $Pipeline
    $Output.AsyncResult = $AsyncResult
    
    $Output
}

function Get-ThreadPipelines
{
    [Cmdletbinding()]
    Param
    (
        [Parameter(Position=0,Mandatory=$True)][AsyncPipeline[]]$Pipelines,
        [Parameter(Position=1,Mandatory=$false)][Switch]$ShowProgress
    )
    
    # incrementing for Write-Progress
    $i = 1 
    
    foreach($Pipeline in $Pipelines)
    {
        try
        {
            $Pipeline.Pipeline.EndInvoke($Pipeline.AsyncResult)

            If($Pipeline.Pipeline.Streams.Error)
            {
                Throw $Pipeline.Pipeline.Streams.Error
            }
        } catch {
            $_
        }
        $Pipeline.Pipeline.Dispose()
        $i++
    }
}


$ThreadPipes = @()
$poolsize = 1
$thispool = Create-ThreadPool $poolsize
$t = 
{
    Param($path)
    [void] [System.Reflection.Assembly]::LoadWithPartialName('System.Drawing') 
    [void] [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')

    $mod = "HPRESTCmdlets"
    $RegPath = 'HKCU:\Software\Hewlett-Packard\PowerShell\Modules\' + $mod
    $PropLicense = 'LicenseShown'
    $PropPath = 'InstallPath'
    $PropVersion = 'ModuleVersion'
    
    $alreadyInstalled = $false
    $sameInstalledVersion = $true

    $modInfoPath = $path + '\'+ $mod + '_2f9b1ca0-2031-45c0-9d82-a432014abfdf_ModuleInfo.xml'
    $xmlLocal = [xml](Get-Content -Path "$modInfoPath")
    $currVersionString = $xmlLocal.ModuleInfo.Version.ToString()

    if ($(Test-Path $RegPath) -and $(Get-ItemProperty -Path $RegPath -Name $PropLicense -ErrorAction SilentlyContinue).$PropLicense -eq 'True')
    {
        $alreadyInstalled = $True
        
        $oldVersionString = (Get-ItemProperty -Path $RegPath -Name $PropVersion).$PropVersion

        if($currVersionString -ne $oldVersionString)
        {
            $sameInstalledVersion = $false
        }
    }

    #check to see if the registry path and entry are present
    #if ($alreadyInstalled -eq $false -or $sameInstalledVersion -eq $false) {
    if ($alreadyInstalled -eq $false -or $sameInstalledVersion -eq $false) {
        #show the license and create the key
    
        ################################################
        
        $objForm = New-Object System.Windows.Forms.Form 
        $objForm.Text = $mod + ' License'
        $objForm.Size = New-Object System.Drawing.Size(762,660) 
        $objForm.StartPosition = 'CenterScreen'

        $objForm.KeyPreview = $True
        $x = 'Cancel'
        $OKButton = New-Object System.Windows.Forms.Button
        $OKButton.Location = New-Object System.Drawing.Size(75,582)
        $OKButton.Size = New-Object System.Drawing.Size(75,23)
        $OKButton.Text = 'Agree'
        $OKButton.Add_Click({$global:x='Agree';$objForm.Close()})
        $objForm.Controls.Add($OKButton)

        $objLabel = New-Object System.Windows.Forms.Label
        $objLabel.Font = New-Object System.Drawing.Font('SansSerif',15)
        $objLabel.Location = New-Object System.Drawing.Size(10,20) 
        $objLabel.Size = New-Object System.Drawing.Size(700,30)
        $objLabel.Text = 'By using this module you agree to these license terms:'
        $objForm.Controls.Add($objLabel) 
        $link=''
        $objRTFTextBox = New-Object System.Windows.Forms.RichTextBox 
        $objRTFTextBox.Location = New-Object System.Drawing.Size(10,60) 
        $objRTFTextBox.Size = New-Object System.Drawing.Size(728,500)

        $eulapath = $path + '\' + $mod + 'License.rtf'

        $objRTFTextBox.LoadFile($eulapath)
        $objRTFTextBox.ReadOnly = $True
        $objRTFTextBox.DetectUrls = $True
        $objRTFTextBox.Add_LinkClicked({$global:link = $_.LinkText; start $_.LinkText})
        $objForm.Controls.Add($objRTFTextBox) 

        $objForm.Topmost = $True

        $size = New-Object System.Drawing.Size(0,0)
        #Home key grabs window size
        $objForm.Add_KeyDown({if ($_.KeyCode -eq 'Home') 
            {
                $global:size.Height = $global:objForm.Size.Height
                $global:size.Width = $global:objForm.Size.Width
                $_.Handled = $True
            }
        })

        $objForm.ControlBox = $false
        $objForm.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedDialog
        $objForm.Add_Shown({$objForm.Activate()})
        [void] $objForm.ShowDialog()
        
        #create the path first
        $newpath = ''
        $pathitems = $RegPath.Split('\')
        foreach ($pathitem in $pathitems) {
            if ($pathitem -notmatch ':') {
                $newpath += '\' + $pathitem
                if (-not $(Test-Path $newpath)) {
                    New-Item -Path $newpath | Out-Null
                }
            }
            else {
                $newpath = $pathitem
            }
        }
        
        $modInfoPath = $path + '\'+ $mod + '_2f9b1ca0-2031-45c0-9d82-a432014abfdf_ModuleInfo.xml'
        $xmlLocal = [xml](Get-Content -Path "$modInfoPath")
        $currVersionString = $xmlLocal.ModuleInfo.Version.ToString()
        
        #create the property
        if($alreadyInstalled -eq $false)
        {
            New-ItemProperty -Path $RegPath -Name $PropVersion -PropertyType String -Value $currVersionString | Out-Null
            New-ItemProperty -Path $RegPath -Name $PropLicense -PropertyType String -Value $true | Out-Null
            New-ItemProperty -Path $RegPath -Name $PropPath -PropertyType String -Value $path | Out-Null
        }
        if($sameInstalledVersion -eq $false)
        {
            Set-ItemProperty -Path $RegPath -Name $PropVersion -Value $currVersionString | Out-Null
        }
        
    }
} 
        #end of $t scriptblock
            
$ThreadPipes += Start-ThreadScriptBlock -ThreadPool $thispool -ScriptBlock $t -Parameters $PSScriptRoot.ToString()

if ($VerbosePreference -eq 'Continue')
{
    $rstList = Get-ThreadPipelines -Pipelines $ThreadPipes -ShowProgress
}
else
{
    $rstList = Get-ThreadPipelines -Pipelines $ThreadPipes
}
$thispool.Close()
$thispool.Dispose()
# SIG # Begin signature block
# MIIY+wYJKoZIhvcNAQcCoIIY7DCCGOgCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU3UR8pUhuMKYMnA655JOhvLy7
# WFigghPzMIID7jCCA1egAwIBAgIQfpPr+3zGTlnqS5p31Ab8OzANBgkqhkiG9w0B
# AQUFADCBizELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIG
# A1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhh
# d3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcg
# Q0EwHhcNMTIxMjIxMDAwMDAwWhcNMjAxMjMwMjM1OTU5WjBeMQswCQYDVQQGEwJV
# UzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xMDAuBgNVBAMTJ1N5bWFu
# dGVjIFRpbWUgU3RhbXBpbmcgU2VydmljZXMgQ0EgLSBHMjCCASIwDQYJKoZIhvcN
# AQEBBQADggEPADCCAQoCggEBALGss0lUS5ccEgrYJXmRIlcqb9y4JsRDc2vCvy5Q
# WvsUwnaOQwElQ7Sh4kX06Ld7w3TMIte0lAAC903tv7S3RCRrzV9FO9FEzkMScxeC
# i2m0K8uZHqxyGyZNcR+xMd37UWECU6aq9UksBXhFpS+JzueZ5/6M4lc/PcaS3Er4
# ezPkeQr78HWIQZz/xQNRmarXbJ+TaYdlKYOFwmAUxMjJOxTawIHwHw103pIiq8r3
# +3R8J+b3Sht/p8OeLa6K6qbmqicWfWH3mHERvOJQoUvlXfrlDqcsn6plINPYlujI
# fKVOSET/GeJEB5IL12iEgF1qeGRFzWBGflTBE3zFefHJwXECAwEAAaOB+jCB9zAd
# BgNVHQ4EFgQUX5r1blzMzHSa1N197z/b7EyALt0wMgYIKwYBBQUHAQEEJjAkMCIG
# CCsGAQUFBzABhhZodHRwOi8vb2NzcC50aGF3dGUuY29tMBIGA1UdEwEB/wQIMAYB
# Af8CAQAwPwYDVR0fBDgwNjA0oDKgMIYuaHR0cDovL2NybC50aGF3dGUuY29tL1Ro
# YXd0ZVRpbWVzdGFtcGluZ0NBLmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAOBgNV
# HQ8BAf8EBAMCAQYwKAYDVR0RBCEwH6QdMBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0y
# MDQ4LTEwDQYJKoZIhvcNAQEFBQADgYEAAwmbj3nvf1kwqu9otfrjCR27T4IGXTdf
# plKfFo3qHJIJRG71betYfDDo+WmNI3MLEm9Hqa45EfgqsZuwGsOO61mWAK3ODE2y
# 0DGmCFwqevzieh1XTKhlGOl5QGIllm7HxzdqgyEIjkHq3dlXPx13SYcqFgZepjhq
# IhKjURmDfrYwggSjMIIDi6ADAgECAhAOz/Q4yP6/NW4E2GqYGxpQMA0GCSqGSIb3
# DQEBBQUAMF4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3Jh
# dGlvbjEwMC4GA1UEAxMnU3ltYW50ZWMgVGltZSBTdGFtcGluZyBTZXJ2aWNlcyBD
# QSAtIEcyMB4XDTEyMTAxODAwMDAwMFoXDTIwMTIyOTIzNTk1OVowYjELMAkGA1UE
# BhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMTQwMgYDVQQDEytT
# eW1hbnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIFNpZ25lciAtIEc0MIIBIjAN
# BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAomMLOUS4uyOnREm7Dv+h8GEKU5Ow
# mNutLA9KxW7/hjxTVQ8VzgQ/K/2plpbZvmF5C1vJTIZ25eBDSyKV7sIrQ8Gf2Gi0
# jkBP7oU4uRHFI/JkWPAVMm9OV6GuiKQC1yoezUvh3WPVF4kyW7BemVqonShQDhfu
# ltthO0VRHc8SVguSR/yrrvZmPUescHLnkudfzRC5xINklBm9JYDh6NIipdC6Anqh
# d5NbZcPuF3S8QYYq3AhMjJKMkS2ed0QfaNaodHfbDlsyi1aLM73ZY8hJnTrFxeoz
# C9Lxoxv0i77Zs1eLO94Ep3oisiSuLsdwxb5OgyYI+wu9qU+ZCOEQKHKqzQIDAQAB
# o4IBVzCCAVMwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAO
# BgNVHQ8BAf8EBAMCB4AwcwYIKwYBBQUHAQEEZzBlMCoGCCsGAQUFBzABhh5odHRw
# Oi8vdHMtb2NzcC53cy5zeW1hbnRlYy5jb20wNwYIKwYBBQUHMAKGK2h0dHA6Ly90
# cy1haWEud3Muc3ltYW50ZWMuY29tL3Rzcy1jYS1nMi5jZXIwPAYDVR0fBDUwMzAx
# oC+gLYYraHR0cDovL3RzLWNybC53cy5zeW1hbnRlYy5jb20vdHNzLWNhLWcyLmNy
# bDAoBgNVHREEITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtMjAdBgNV
# HQ4EFgQURsZpow5KFB7VTNpSYxc/Xja8DeYwHwYDVR0jBBgwFoAUX5r1blzMzHSa
# 1N197z/b7EyALt0wDQYJKoZIhvcNAQEFBQADggEBAHg7tJEqAEzwj2IwN3ijhCcH
# bxiy3iXcoNSUA6qGTiWfmkADHN3O43nLIWgG2rYytG2/9CwmYzPkSWRtDebDZw73
# BaQ1bHyJFsbpst+y6d0gxnEPzZV03LZc3r03H0N45ni1zSgEIKOq8UvEiCmRDoDR
# EfzdXHZuT14ORUZBbg2w6jiasTraCXEQ/Bx5tIB7rGn0/Zy2DBYr8X9bCT2bW+IW
# yhOBbQAuOA2oKY8s4bL0WqkBrxWcLC9JG9siu8P+eJRRw4axgohd8D20UaF5Mysu
# e7ncIAkTcetqGVvP6KUwVyyJST+5z3/Jvz4iaGNTmr1pdKzFHTx/kuDDvBzYBHUw
# ggVIMIIEMKADAgECAhBqJba6oqOIHrqYnJL4yw+NMA0GCSqGSIb3DQEBBQUAMIG0
# MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsT
# FlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBh
# dCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMS4wLAYDVQQDEyVW
# ZXJpU2lnbiBDbGFzcyAzIENvZGUgU2lnbmluZyAyMDEwIENBMB4XDTE0MDYyNTAw
# MDAwMFoXDTE2MDcyNDIzNTk1OVowejELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh
# bGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEgMB4GA1UEChQXSGV3bGV0dC1Q
# YWNrYXJkIENvbXBhbnkxIDAeBgNVBAMUF0hld2xldHQtUGFja2FyZCBDb21wYW55
# MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvZW91eEe8mEoae5frPX+
# WBFsHw7bkrECc3UANelrP89ZRW64IjR2S/dCUnIpqbMfDXSohVNy/9j8E+Ga8n1M
# wC/IMKigMGRk0AdqjkTML6YhGv5lUFP/c8YOiyEGhx+N/0joXFo8YeN+9xGE82UR
# MGhWJAZjDls+I7VQcCs7UpBuV0egu0tOzufDIgqvWUyTqWAu+lAHsmdS90P+vi82
# Jfv5rEYS6Y1ca2CPMJm7HniDl54QK1By2JEAb5m97VNqyuYKC69D+xDW1GIdGPfr
# v3Ko7NAE5yWg8W8bfIxC5dS+GNh/0alWz1Ke23Uu6Mah+fgO62wxzSd8r1g2VBnw
# NQIDAQABo4IBjTCCAYkwCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCB4AwKwYDVR0f
# BCQwIjAgoB6gHIYaaHR0cDovL3NmLnN5bWNiLmNvbS9zZi5jcmwwZgYDVR0gBF8w
# XTBbBgtghkgBhvhFAQcXAzBMMCMGCCsGAQUFBwIBFhdodHRwczovL2Quc3ltY2Iu
# Y29tL2NwczAlBggrBgEFBQcCAjAZFhdodHRwczovL2Quc3ltY2IuY29tL3JwYTAT
# BgNVHSUEDDAKBggrBgEFBQcDAzBXBggrBgEFBQcBAQRLMEkwHwYIKwYBBQUHMAGG
# E2h0dHA6Ly9zZi5zeW1jZC5jb20wJgYIKwYBBQUHMAKGGmh0dHA6Ly9zZi5zeW1j
# Yi5jb20vc2YuY3J0MB8GA1UdIwQYMBaAFM+Zqep7JvRLyY6P1/AFJu/j0qedMB0G
# A1UdDgQWBBSxY0RmDskHVeL3426xzdgBWbGuFDARBglghkgBhvhCAQEEBAMCBBAw
# FgYKKwYBBAGCNwIBGwQIMAYBAQABAf8wDQYJKoZIhvcNAQEFBQADggEBAKoA6naf
# BZ3b4qJVW21/IRNtWounIheL5YD5B5aYaQcPZ3I44gwz5jH90C8DTAvsjUn+NWpO
# gLQ53XcskrY8VSUD8eXfK7M8wTmkTuKZBCaX1l/ejt6nnNfzrGHlGwTa2la98Y6d
# IaMwV6+Hv36gQq/Dh6IdjsjNgFExPOc34AsP/yMK89s3PlHphVEXu7C4/CqPzq1n
# 9l/j/2IOJLoKVDeGjvcuD9rtAoeqowChPmKWjdHmjXNd/PKFdlo085yMWZLuZWHj
# KGgddvWJqnRNCti1WrztJUPS4kGTvsuu0sK9eXOK+VKE+uHxIc6bIyZJAJxS3uPw
# jmnBQuPnl1RDZHwwggYKMIIE8qADAgECAhBSAOWqJVb8GobtlsnUSzPHMA0GCSqG
# SIb3DQEBBQUAMIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIElu
# Yy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShj
# KSAyMDA2IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkx
# RTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlm
# aWNhdGlvbiBBdXRob3JpdHkgLSBHNTAeFw0xMDAyMDgwMDAwMDBaFw0yMDAyMDcy
# MzU5NTlaMIG0MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4x
# HzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1z
# IG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMS4w
# LAYDVQQDEyVWZXJpU2lnbiBDbGFzcyAzIENvZGUgU2lnbmluZyAyMDEwIENBMIIB
# IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9SNLXqXXirsy6dRX9+/kxyZ+
# rRmY/qidfZT2NmsQ13WBMH8EaH/LK3UezR0IjN9plKc3o5x7gOCZ4e43TV/OOxTu
# htTQ9Sc1vCULOKeMY50Xowilq7D7zWpigkzVIdob2fHjhDuKKk+FW5ABT8mndhB/
# JwN8vq5+fcHd+QW8G0icaefApDw8QQA+35blxeSUcdZVAccAJkpAPLWhJqkMp22A
# jpAle8+/PxzrL5b65Yd3xrVWsno7VDBTG99iNP8e0fRakyiF5UwXTn5b/aSTmX/f
# ze+kde/vFfZH5/gZctguNBqmtKdMfr27Tww9V/Ew1qY2jtaAdtcZLqXNfjQtiQID
# AQABo4IB/jCCAfowEgYDVR0TAQH/BAgwBgEB/wIBADBwBgNVHSAEaTBnMGUGC2CG
# SAGG+EUBBxcDMFYwKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNv
# bS9jcHMwKgYIKwYBBQUHAgIwHhocaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3Jw
# YTAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1h
# Z2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0
# cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwNAYDVR0fBC0wKzApoCeg
# JYYjaHR0cDovL2NybC52ZXJpc2lnbi5jb20vcGNhMy1nNS5jcmwwNAYIKwYBBQUH
# AQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC52ZXJpc2lnbi5jb20wHQYD
# VR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMDMCgGA1UdEQQhMB+kHTAbMRkwFwYD
# VQQDExBWZXJpU2lnbk1QS0ktMi04MB0GA1UdDgQWBBTPmanqeyb0S8mOj9fwBSbv
# 49KnnTAfBgNVHSMEGDAWgBR/02Wnwt3su/AwCfNDOfoCrzMxMzANBgkqhkiG9w0B
# AQUFAAOCAQEAViLmNKTEYctIuQGtVqhkD9mMkcS7zAzlrXqgIn/fRzhKLWzRf3Ea
# fOxwqbHwT+QPDFP6FV7+dJhJJIWBJhyRFEewTGOMu6E01MZF6A2FJnMD0KmMZG3c
# cZLmRQVgFVlROfxYFGv+1KTteWsIDEFy5zciBgm+I+k/RJoe6WGdzLGQXPw90o2s
# Qj1lNtS0PUAoj5sQzyMmzEsgy5AfXYxMNMo82OU31m+lIL006ybZrg3nxZr3obQh
# kTNvhuhYuyV8dA5Y/nUbYz/OMXybjxuWnsVTdoRbnK2R+qztk7pdyCFTwoJTY68S
# DVCHERs9VFKWiiycPZIaCJoFLseTpUiR0zGCBHIwggRuAgEBMIHJMIG0MQswCQYD
# VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
# aWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRw
# czovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMS4wLAYDVQQDEyVWZXJpU2ln
# biBDbGFzcyAzIENvZGUgU2lnbmluZyAyMDEwIENBAhBqJba6oqOIHrqYnJL4yw+N
# MAkGBSsOAwIaBQCgcDAQBgorBgEEAYI3AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYK
# KwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG
# 9w0BCQQxFgQUoAiYKqmsKIK9h9XJEfqTJYXTRTcwDQYJKoZIhvcNAQEBBQAEggEA
# gLg0m/w+ZaO9/BKQCHDy82TQJ0whJGHJMN7ZsnURi/ba1RBNIwegowWG9ZcKAF0H
# PnG2mvVW8qHzSF8MQNJjbbDJwRwkggibAuY4/9FfxuJ4rIc6nXOMHxC3fPwVPZoQ
# 4B4FxXCsUaMYdQDQ3PAoEpq/ehglQL/gXMwMQPiz9kjwIBGsonZP0UT1zhpAd6bT
# ee2cik5yVLcaSmwt+65ST2u3LeFEwTUSEHejS2g0KGbHDwLocPLEB5Lv/qNhIhT+
# vbm4XcjnRv3dqOhPHDHx11QlCQ2VPWJ9leWGfwJZDrRiEhqxS9+n79QVdpQdVhcG
# +wxz1cy4fR8hP9LbfKqGfKGCAgswggIHBgkqhkiG9w0BCQYxggH4MIIB9AIBATBy
# MF4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEw
# MC4GA1UEAxMnU3ltYW50ZWMgVGltZSBTdGFtcGluZyBTZXJ2aWNlcyBDQSAtIEcy
# AhAOz/Q4yP6/NW4E2GqYGxpQMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJ
# KoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xNTEyMDkyMTI1MjdaMCMGCSqGSIb3
# DQEJBDEWBBRq6iwWl3FZOpYNgiV3McLmhcOP6jANBgkqhkiG9w0BAQEFAASCAQBM
# 8XTsQgicU2byFoYyxnSGcMhFNUIIhC/TEEXhnUkvHUbtclaUToVHkvrX++Gketyy
# 9YDA5sdydJns+LoJLGhj/3hpiyT6c67WKZF6KVJ+rGbdLz/xt3FcPoB8V/5wtbqz
# HOlGjp8d59Co03hfx6bU4KFXC3jjyqESCcsvPgyExCKqqrlAWWU8SW3erVbPaU2r
# AXC1q5m9gHIIudx5MiFJFsz/4N9SlahmgRdtOZNkkS0qi18M11Be0DXh/YeQJnJ1
# QvrM/mK8Oa1CW23YmBjdHFQkX6446oTWQbfU8dhbRxAf1NTHC6AT+mGSfS3bLFjH
# /tMeJ14yMF9zuz/cTdpb
# SIG # End signature block