cleanup.ps1
|
[CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High')] param( $module = "dbatools" ) # Which process should we be looking for? if ($psedition -eq 'Core') { $process = "pwsh" } else { $process = "powershell" } if (($PSVersionTable.PSVersion.Major -le 5) -or ($PSVersionTable.PSVersion.Major -gt 6 -and $PSVersionTable.OS -contains "Windows")) { $isElevated = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) $ise = Get-Process powershell_ise -ErrorAction SilentlyContinue if ($ise) { return "PowerShell ISE found in use. Please close this program before using this script." } } else { $isElevated = $null; $ise = $null; } $installedVersion = Get-InstalledModule $module -AllVersions | Select-Object Version, InstalledLocation Write-Output "The currently installed version(s) of $module is/are: " $installedVersion.Version $results = foreach ($v in $installedVersion) { if ($v.InstalledLocation -match "C:\\Users") { Add-Member -Force -InputObject $v -MemberType NoteProperty -Name IsUserScope -value $true } else { if (-not $isElevated) { Write-Output "$module version $v.Version cannot be removed without elevated session." } Add-Member -Force -InputObject $v -MemberType NoteProperty -Name IsUserScope -value $false } $v } $newestVersion = Find-Module $module | Select-Object Version Write-Output "`nThe latest version of $module in the PSGallery is: $($newestVersion.Version)" $olderVersions = @( ) if ($installedVersion.Count -gt 1) { $olderVersions = @($installedVersion | Where-Object { [version]$_.Version -lt [version]$newestVersion.Version }) } if ( ($olderVersions.Count -gt 0) -and $newestVersion.Version -in $installedVersion.Version ) { Write-Output "Latest version of $module found on $env:COMPUTERNAME." Write-Output "Older versions of $module also found. These will be uninstalled now." if ($isElevated) { $processes = Get-Process $process -IncludeUserName -ErrorAction SilentlyContinue | Where-Object Id -NE $pid } else { $processes = Get-Process $process -ErrorAction SilentlyContinue | Where-Object Id -NE $PID } if ($processes.Count -gt 0) { if ($Pscmdlet.ShouldProcess("$env:COMPUTERNAME", "Killing $($processes.Count) processes of powershell running")) { Write-Output "Death to the following process(es): $(($processes.Id) -join ",")" $processes | Stop-Process -ErrorVariable dangit -ErrorAction SilentlyContinue -Force if ($dangit) { Write-Warning "Not able to kill following processes: $((Get-Process $process | Where-Object Id -NE $pid).Id -join ",")" } } } if ($Pscmdlet.ShouldProcess("$env:COMPUTERNAME", "Removing old versions of $module.")) { foreach ($v in $olderVersions.Version) { Uninstall-Module $module -RequiredVersion $v -ErrorVariable dangit -ErrorAction SilentlyContinue -Force if ($dangit) { if ($dangit.Exception -like "*Administrator rights*") { Write-Warning "Elevated session is required to uninstall $module version: $v" } else { Write-Warning "Unable to remove $module version [$v] due to: `n`t$($dangit.Exception)" } } } } Write-Output "The End" } elseif ( ($olderVersions.Count -gt 0) -and $newestVersion.Version -notin $installedVersion.Version ) { Write-Output "Update of $module is available" Write-Output "Older versions of $module found. These will be uninstalled now." if ($isElevated) { $processes = Get-Process $process -ErrorAction SilentlyContinue -IncludeUserName | Where-Object Id -NE $pid } else { $processes = Get-Process $process -ErrorAction SilentlyContinue | Where-Object Id -NE $PID } if ($processes.Count -gt 0) { if ($Pscmdlet.ShouldProcess("$env:COMPUTERNAME", "Killing $($processes.Count) processes of powershell running")) { Write-Output "Death to the following process(es): $(($processes.Id) -join ",")" $processes | Stop-Process -ErrorVariable dangit -ErrorAction SilentlyContinue -Force if ($dangit) { Write-Warning "Not able to kill following processes: $((Get-Process $process | Where-Object Id -NE $pid).Id -join ",")" } } } if ($Pscmdlet.ShouldProcess("$env:COMPUTERNAME", "Removing old versions of $module.")) { foreach ($v in $olderVersions.Version) { Uninstall-Module $module -RequiredVersion $v -ErrorVariable dangit -ErrorAction SilentlyContinue -Force if ($dangit) { if ($dangit.Exception -like "*Administrator rights*") { Write-Warning "Elevated session is required to uninstall $module version: $v" } else { Write-Warning "Unable to remove $module version [$v] due to: `n`t$($dangit.Exception)" } } } } Write-Output "Continuing to install latest release of $module" Install-Module $module -Force Write-Output "The End" } else { Write-Output "No update/actions required." } # SIG # Begin signature block # MIIt2wYJKoZIhvcNAQcCoIItzDCCLcgCAQMxDTALBglghkgBZQMEAgEwewYKKwYB # BAGCNwIBBKBtBGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBbC7m38uJKN0Fh # yce8/lpvD8KrpB4HRQCSsGB5ShHRlaCCFdswggbXMIIEv6ADAgECAhMzAAWRbGr9 # AdnePzr/AAAABZFsMA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVTMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJ # RCBWZXJpZmllZCBDUyBFT0MgQ0EgMDEwHhcNMjUxMjAyMDYzMTE1WhcNMjUxMjA1 # MDYzMTE1WjBXMQswCQYDVQQGEwJVUzERMA8GA1UECBMIVmlyZ2luaWExDzANBgNV # BAcTBlZpZW5uYTERMA8GA1UEChMIZGJhdG9vbHMxETAPBgNVBAMTCGRiYXRvb2xz # MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAqyLskqpYoVwud2ZZpJZ4 # 9PWj4IA6tzMxwoct/nAhgBHPoi9OJr6+MC4rnhsaNyTgEGsBj4jEUlpULQSb3AYI # +UlulhooBsuGVPGfvffRzqIfYRN0ypIZhyYMMNyVPbPCu2FOur8p7kUuHginMAtU # 86PK1tnfVpYpJk6vY/x43NxGGJeasS05kPtkEIeOhppYhVaCk+u7p5+iNuAvomFi # RBvTh8DgpiaIzyB46BW4Iq3hMdHNiEIHhVJw3KLpzXIo9X0auSMCJcctChQMGdvn # QskzCPeJEyCnYOkxhSzGDttm2g0dFSMsF3ddRW3JDkk0HT5LQa3dUpznC6Cb8tS8 # NXm1aLtp5RfEa5bDnHTF03Af7DnFFNiIMSDCOJ4qgpp9dVVq44thR359hvIKLcn0 # PAWR3eQU3UhvgKoGTKKB2gBkc4StXG5rP39v9QqsFd366xWISvpuyNqukUfDX5Ip # +A6IfBa4ozPIFutA70BUcqknkbtGniVK78iZltTZ07KHAgMBAAGjggIXMIICEzAM # BgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA6BgNVHSUEMzAxBgorBgEEAYI3 # YQEABggrBgEFBQcDAwYZKwYBBAGCN2H5+cEspPS4DoOuxLIcm56wGDAdBgNVHQ4E # FgQU8W8+Jww4bd7sDsEv1old2A8/4OwwHwYDVR0jBBgwFoAUdpw2dBPRkH1hX7MC # 64D0mUulPoUwZwYDVR0fBGAwXjBcoFqgWIZWaHR0cDovL3d3dy5taWNyb3NvZnQu # Y29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSUQlMjBWZXJpZmllZCUyMENTJTIw # RU9DJTIwQ0ElMjAwMS5jcmwwgaUGCCsGAQUFBwEBBIGYMIGVMGQGCCsGAQUFBzAC # hlhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29m # dCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEVPQyUyMENBJTIwMDEuY3J0MC0GCCsG # AQUFBzABhiFodHRwOi8vb25lb2NzcC5taWNyb3NvZnQuY29tL29jc3AwZgYDVR0g # BF8wXTBRBgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5t # aWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMAgGBmeBDAEE # ATANBgkqhkiG9w0BAQwFAAOCAgEAWcmcrcvy+QwpVj2oVQCF1863Qs/R+/OEyOX0 # RDlONNvZXPq/LI66JvKT6pE6BgIodYxxHrFyu7qkBngIHEKYC8LOzM7EzKHG0u0u # 9SnXyNaPoC/H1aAkNgzI+HRBH7Ob1kTSLpCD8YYtDGsfyB1TLh4RGn8hByqZng3R # mwmRtBJiAQOxlA0VV23CIJeqMwmgPtYmin9D1BqF9X7gV1OiZGujqjctqTq2BOEz # +uQHb4utMsaXX+yonO1o1quCcAWwUlAbhYbQhD9T/DJayHcCL8IGxcydC0B54Moe # fdH3YFts9zQ2n/Wk7yDWS3vUEMlnzaQAqVlE0NPwYLgkn6BET6dD2yyhERRGlzCn # bnNSfADv6Kc2doUv4gMqS/Bus5+26B0DOH/0yUs9KjrFpPTemK9BZDXd8Q4X6BBA # K3F1x23YPxIYRXpllGK674cEOIGSdrvq0PVCxBJNP7KceW/azg/SbrJP/+6R75DQ # UAqpcWC62b4WnkJ0CPDzMU93zKdImhfYN1efJCgfyvM3SLZ1FrnE85qVOvgADmG7 # krZrirpZti1gJhFNC5w0nZWcV6c+r1PfvzdRF3n+O8XZBxAewri49LwN4Meah0Zd # eGApnmT9gMtrm5VFnT4cP6rIFq2au/+vr1zvNwRUY+2MRCVJlV36rBClnI7T4hyD # OTTStwUwggdaMIIFQqADAgECAhMzAAAABkoa+s8FYWp0AAAAAAAGMA0GCSqGSIb3 # DQEBDAUAMGMxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y # YXRpb24xNDAyBgNVBAMTK01pY3Jvc29mdCBJRCBWZXJpZmllZCBDb2RlIFNpZ25p # bmcgUENBIDIwMjEwHhcNMjEwNDEzMTczMTU0WhcNMjYwNDEzMTczMTU0WjBaMQsw # CQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSswKQYD # VQQDEyJNaWNyb3NvZnQgSUQgVmVyaWZpZWQgQ1MgRU9DIENBIDAxMIICIjANBgkq # hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAx+PIP/Qh3cYZwLvFy6uuJ4fTp3ln7Gqs # 7s8lTVyfgOJWP1aABwk2/oxdVjfSHUq4MTPXilL57qi/fH7YndEK4Knd3u5cedFw # r2aHSTp6vl/PL1dAL9sfoDvNpdG0N/R84AhYNpBQThpO4/BqxmCgl3iIRfhh2oFV # OuiTiDVWvXBg76bcjnHnEEtXzvAWwJu0bBU7oRRqQed4VXJtICVt+ZoKUSjqY5wU # lhAdwHh+31BnpBPCzFtKViLp6zEtRyOxRegagFU+yLgXvvmd07IDN0S2TLYuiZjT # w+kcYOtoNgKr7k0C6E9Wf3H4jHavk2MxqFptgfL0gL+zbSb+VBNKiVT0mqzXJIJm # Wmqw0K+D3MKfmCer3e3CbrP+F5RtCb0XaE0uRcJPZJjWwciDBxBIbkNF4GL12hl5 # vydgFMmzQcNuodKyX//3lLJ1q22roHVS1cgtsLgpjWYZlBlhCTcXJeZ3xuaJvXZB # 9rcLCX15OgXL21tUUwJCLE27V5AGZxkO3i54mgSCswtOmWU4AKd/B/e3KtXv6XBU # RKuAteez1EpgloaZwQej9l5dN9Uh8W19BZg9IlLl+xHRX4vDiMWAUf/7ANe4MoS9 # 8F45r76IGJ0hC02EMuMZxAErwZj0ln0aL53EzlMa5JCiRObb0UoLHfGSdNJsMg0u # j3DAQDdVWTECAwEAAaOCAg4wggIKMA4GA1UdDwEB/wQEAwIBhjAQBgkrBgEEAYI3 # FQEEAwIBADAdBgNVHQ4EFgQUdpw2dBPRkH1hX7MC64D0mUulPoUwVAYDVR0gBE0w # SzBJBgRVHSAAMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNv # bS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTAZBgkrBgEEAYI3FAIEDB4KAFMA # dQBiAEMAQTASBgNVHRMBAf8ECDAGAQH/AgEAMB8GA1UdIwQYMBaAFNlBKbAPD2Ns # 72nX9c0pnqRIajDmMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9z # b2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBD # b2RlJTIwU2lnbmluZyUyMFBDQSUyMDIwMjEuY3JsMIGuBggrBgEFBQcBAQSBoTCB # njBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9j # ZXJ0cy9NaWNyb3NvZnQlMjBJRCUyMFZlcmlmaWVkJTIwQ29kZSUyMFNpZ25pbmcl # MjBQQ0ElMjAyMDIxLmNydDAtBggrBgEFBQcwAYYhaHR0cDovL29uZW9jc3AubWlj # cm9zb2Z0LmNvbS9vY3NwMA0GCSqGSIb3DQEBDAUAA4ICAQBqLwmf2LB1QjUga0G7 # zFkbGd8NBQLHP0KOFBWNJFZiTtKfpO0bZ2Wfs6v5vqIKjE32Q6M89G4ZkVcvWuEA # A+dvjLThSy89Y0//m/WTSKwYtiR1Ewn7x1kw/Fg93wQps2C1WUj+00/6uNrF+d4M # VJxV1HoBID+95ZIW0KkqZopnOA4w5vP4T5cBprZQAlP/vMGyB0H9+pHNo0jT9Q8g # fKJNzHS9i1DgBmmufGdW9TByuno8GAizFMhLlIs08b5lilIkE5z3FMAUAr+XgII1 # FNZnb43OI6Qd2zOijbjYfursXUCNHC+RSwJGm5ULzPymYggnJ+khJOq7oSlqPGpb # r70hGBePw/J7/mmSqp7hTgt0mPikS1i4ap8x+P3yemYShnFrgV1752TI+As69Lfg # LthkITvf7bFHB8vmIhadZCOS0vTCx3B+/OVcEMLNO2bJ0O9ikc1JqR0Fvqx7nAwM # RSh3FVqosgzBbWnVkQJq7oWFwMVfFIYn6LPRZMt48u6iMUCFBSPddsPA/6k85mEv # +08U5WCQ7ydj1KVV2THre/8mLHiem9wf/CzohqRntxM2E/x+NHy6TBMnSPQRqhhN # fuOgUDAWEYmlM/ZHGaPIb7xOvfVyLQ/7l6YfogT3eptwp4GOGRjH5z+gG9kpBIx8 # QrRl6OilnlxRExokmMflL7l12TCCB54wggWGoAMCAQICEzMAAAAHh6M0o3uljhwA # AAAAAAcwDQYJKoZIhvcNAQEMBQAwdzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1p # Y3Jvc29mdCBDb3Jwb3JhdGlvbjFIMEYGA1UEAxM/TWljcm9zb2Z0IElkZW50aXR5 # IFZlcmlmaWNhdGlvbiBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDIwMB4X # DTIxMDQwMTIwMDUyMFoXDTM2MDQwMTIwMTUyMFowYzELMAkGA1UEBhMCVVMxHjAc # BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE0MDIGA1UEAxMrTWljcm9zb2Z0 # IElEIFZlcmlmaWVkIENvZGUgU2lnbmluZyBQQ0EgMjAyMTCCAiIwDQYJKoZIhvcN # AQEBBQADggIPADCCAgoCggIBALLwwK8ZiCji3VR6TElsaQhVCbRS/3pK+MHrJSj3 # Zxd3KU3rlfL3qrZilYKJNqztA9OQacr1AwoNcHbKBLbsQAhBnIB34zxf52bDpIO3 # NJlfIaTE/xrweLoQ71lzCHkD7A4As1Bs076Iu+mA6cQzsYYH/Cbl1icwQ6C65rU4 # V9NQhNUwgrx9rGQ//h890Q8JdjLLw0nV+ayQ2Fbkd242o9kH82RZsH3HEyqjAB5a # 8+Ae2nPIPc8sZU6ZE7iRrRZywRmrKDp5+TcmJX9MRff241UaOBs4NmHOyke8oU1T # Yrkxh+YeHgfWo5tTgkoSMoayqoDpHOLJs+qG8Tvh8SnifW2Jj3+ii11TS8/FGngE # aNAWrbyfNrC69oKpRQXY9bGH6jn9NEJv9weFxhTwyvx9OJLXmRGbAUXN1U9nf4lX # ezky6Uh/cgjkVd6CGUAf0K+Jw+GE/5VpIVbcNr9rNE50Sbmy/4RTCEGvOq3GhjIT # bCa4crCzTTHgYYjHs1NbOc6brH+eKpWLtr+bGecy9CrwQyx7S/BfYJ+ozst7+yZt # G2wR461uckFu0t+gCwLdN0A6cFtSRtR8bvxVFyWwTtgMMFRuBa3vmUOTnfKLsLef # RaQcVTgRnzeLzdpt32cdYKp+dhr2ogc+qM6K4CBI5/j4VFyC4QFeUP2YAidLtvpX # RRo3AgMBAAGjggI1MIICMTAOBgNVHQ8BAf8EBAMCAYYwEAYJKwYBBAGCNxUBBAMC # AQAwHQYDVR0OBBYEFNlBKbAPD2Ns72nX9c0pnqRIajDmMFQGA1UdIARNMEswSQYE # VR0gADBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtp # b3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBD # AEEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTIftJqhSobyhmYBAcnz1AQ # T2ioojCBhAYDVR0fBH0wezB5oHegdYZzaHR0cDovL3d3dy5taWNyb3NvZnQuY29t # L3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSWRlbnRpdHklMjBWZXJpZmljYXRpb24l # MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDIwLmNybDCBwwYI # KwYBBQUHAQEEgbYwgbMwgYEGCCsGAQUFBzAChnVodHRwOi8vd3d3Lm1pY3Jvc29m # dC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMElkZW50aXR5JTIwVmVyaWZp # Y2F0aW9uJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAyMC5j # cnQwLQYIKwYBBQUHMAGGIWh0dHA6Ly9vbmVvY3NwLm1pY3Jvc29mdC5jb20vb2Nz # cDANBgkqhkiG9w0BAQwFAAOCAgEAfyUqnv7Uq+rdZgrbVyNMul5skONbhls5fccP # lmIbzi+OwVdPQ4H55v7VOInnmezQEeW4LqK0wja+fBznANbXLB0KrdMCbHQpbLvG # 6UA/Xv2pfpVIE1CRFfNF4XKO8XYEa3oW8oVH+KZHgIQRIwAbyFKQ9iyj4aOWeAzw # k+f9E5StNp5T8FG7/VEURIVWArbAzPt9ThVN3w1fAZkF7+YU9kbq1bCR2YD+Mtun # SQ1Rft6XG7b4e0ejRA7mB2IoX5hNh3UEauY0byxNRG+fT2MCEhQl9g2i2fs6VOG1 # 9CNep7SquKaBjhWmirYyANb0RJSLWjinMLXNOAga10n8i9jqeprzSMU5ODmrMCJE # 12xS/NWShg/tuLjAsKP6SzYZ+1Ry358ZTFcx0FS/mx2vSoU8s8HRvy+rnXqyUJ9H # BqS0DErVLjQwK8VtsBdekBmdTbQVoCgPCqr+PDPB3xajYnzevs7eidBsM71PINK2 # BoE2UfMwxCCX3mccFgx6UsQeRSdVVVNSyALQe6PT12418xon2iDGE81OGCreLzDc # MAZnrUAx4XQLUz6ZTl65yPUiOh3k7Yww94lDf+8oG2oZmDh5O1Qe38E+M3vhKwmz # IeoB1dVLlz4i3IpaDcR+iuGjH2TdaC1ZOmBXiCRKJLj4DT2uhJ04ji+tHD6n58vh # avFIrmcxghdWMIIXUgIBATBxMFoxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJRCBWZXJpZmll # ZCBDUyBFT0MgQ0EgMDECEzMABZFsav0B2d4/Ov8AAAAFkWwwCwYJYIZIAWUDBAIB # oHwwEAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw # HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIFKD # rUC9MfUl6WviS5DsMj8L+CQLkDYrBgi30kFi7KjkMAsGCSqGSIb3DQEBAQSCAYCj # BLT5IFsgMBzr5YwujSYMYX1EsHmVeu7XQA+tDMaaUNoh8a3sQxXYBbefVC4D5jT3 # t3JeaOXfoWG7HGmq0sqmyJeyk8GYoWqehqCq2Kztr9rb8Pa3+AWf7nh5Axha/1uv # oXcM5iNsF0K08aJj0ZOobIoXfSBdDyWp3YEjiPJSwlqgFYgOraqpXhQwD1JqiOpc # QPfM4fdll0ayLL9wDrDFizoMSFkOWBFlOkJ2QKGDwlW5JSuqjRmgH5VhPlbe+KvB # NiAzrNzlzndm5Iv08HR7W09L5RlTz/kOoUbQklfR+LiWbK+4k1pT+ZiwF+xDIQKC # oO6jDNJJCSx5ppksjk1TO8ZPQvESpyrq7AjsdLXTcHQoTKGOIETaH0HKaUYWwkL6 # 95cEMF5IpevZusgaY5Yd0+YHhwdzxp14nOk1ZCRNwb7JmAJGqPNu6kCShHgBHfKu # Opg5NDoil0gazhiZJ5OuppF/EXlUNgSdrYqxRdn6HqHeA+VXMzWcgkcQ5D73NJ6h # ghS8MIIUuAYKKwYBBAGCNwMDATGCFKgwghSkBgkqhkiG9w0BBwKgghSVMIIUkQIB # AzEPMA0GCWCGSAFlAwQCAQUAMIIBdAYLKoZIhvcNAQkQAQSgggFjBIIBXzCCAVsC # AQEGCisGAQQBhFkKAwEwMTANBglghkgBZQMEAgEFAAQgG4DgCZSoBBI0EFUAG8jF # 6R1D9RUQdS483+9U/D9kLjsCBmkt6nFxtBgTMjAyNTEyMDIxNjQ4MzkuMjU0WjAE # gAIB9AIIHsx6rW24KAyggemkgeYwgeMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX # YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg # Q29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlv # bnMgTGltaXRlZDEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjQ1MUEtMDVFMC1E # OTQ3MTUwMwYDVQQDEyxNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lIFN0YW1waW5n # IEF1dGhvcml0eaCCDykwggeCMIIFaqADAgECAhMzAAAABeXPD/9mLsmHAAAAAAAF # MA0GCSqGSIb3DQEBDAUAMHcxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3Nv # ZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01pY3Jvc29mdCBJZGVudGl0eSBWZXJp # ZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAyMDAeFw0yMDEx # MTkyMDMyMzFaFw0zNTExMTkyMDQyMzFaMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQK # ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJs # aWMgUlNBIFRpbWVzdGFtcGluZyBDQSAyMDIwMIICIjANBgkqhkiG9w0BAQEFAAOC # Ag8AMIICCgKCAgEAnnznUmP94MWfBX1jtQYioxwe1+eXM9ETBb1lRkd3kcFdcG9/ # sqtDlwxKoVIcaqDb+omFio5DHC4RBcbyQHjXCwMk/l3TOYtgoBjxnG/eViS4sOx8 # y4gSq8Zg49REAf5huXhIkQRKe3Qxs8Sgp02KHAznEa/Ssah8nWo5hJM1xznkRsFP # u6rfDHeZeG1Wa1wISvlkpOQooTULFm809Z0ZYlQ8Lp7i5F9YciFlyAKwn6yjN/kR # 4fkquUWfGmMopNq/B8U/pdoZkZZQbxNlqJOiBGgCWpx69uKqKhTPVi3gVErnc/qi # +dR8A2MiAz0kN0nh7SqINGbmw5OIRC0EsZ31WF3Uxp3GgZwetEKxLms73KG/Z+Mk # euaVDQQheangOEMGJ4pQZH55ngI0Tdy1bi69INBV5Kn2HVJo9XxRYR/JPGAaM6xG # l57Ei95HUw9NV/uC3yFjrhc087qLJQawSC3xzY/EXzsT4I7sDbxOmM2rl4uKK6eE # purRduOQ2hTkmG1hSuWYBunFGNv21Kt4N20AKmbeuSnGnsBCd2cjRKG79+TX+sTe # hawOoxfeOO/jR7wo3liwkGdzPJYHgnJ54UxbckF914AqHOiEV7xTnD1a69w/UTxw # jEugpIPMIIE67SFZ2PMo27xjlLAHWW3l1CEAFjLNHd3EQ79PUr8FUXetXr0CAwEA # AaOCAhswggIXMA4GA1UdDwEB/wQEAwIBhjAQBgkrBgEEAYI3FQEEAwIBADAdBgNV # HQ4EFgQUa2koOjUvSGNAz3vYr0npPtk92yEwVAYDVR0gBE0wSzBJBgRVHSAAMEEw # PwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9j # cy9SZXBvc2l0b3J5Lmh0bTATBgNVHSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3 # FAIEDB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFMh+ # 0mqFKhvKGZgEByfPUBBPaKiiMIGEBgNVHR8EfTB7MHmgd6B1hnNodHRwOi8vd3d3 # Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBJZGVudGl0eSUy # MFZlcmlmaWNhdGlvbiUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUy # MDIwMjAuY3JsMIGUBggrBgEFBQcBAQSBhzCBhDCBgQYIKwYBBQUHMAKGdWh0dHA6 # Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwSWRl # bnRpdHklMjBWZXJpZmljYXRpb24lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRo # b3JpdHklMjAyMDIwLmNydDANBgkqhkiG9w0BAQwFAAOCAgEAX4h2x35ttVoVdedM # eGj6TuHYRJklFaW4sTQ5r+k77iB79cSLNe+GzRjv4pVjJviceW6AF6ycWoEYR0LY # haa0ozJLU5Yi+LCmcrdovkl53DNt4EXs87KDogYb9eGEndSpZ5ZM74LNvVzY0/nP # ISHz0Xva71QjD4h+8z2XMOZzY7YQ0Psw+etyNZ1CesufU211rLslLKsO8F2aBs2c # Io1k+aHOhrw9xw6JCWONNboZ497mwYW5EfN0W3zL5s3ad4Xtm7yFM7Ujrhc0aqy3 # xL7D5FR2J7x9cLWMq7eb0oYioXhqV2tgFqbKHeDick+P8tHYIFovIP7YG4ZkJWag # 1H91KlELGWi3SLv10o4KGag42pswjybTi4toQcC/irAodDW8HNtX+cbz0sMptFJK # +KObAnDFHEsukxD+7jFfEV9Hh/+CSxKRsmnuiovCWIOb+H7DRon9TlxydiFhvu88 # o0w35JkNbJxTk4MhF/KgaXn0GxdH8elEa2Imq45gaa8D+mTm8LWVydt4ytxYP/bq # jN49D9NZ81coE6aQWm88TwIf4R4YZbOpMKN0CyejaPNN41LGXHeCUMYmBx3PkP8A # DHD1J2Cr/6tjuOOCztfp+o9Nc+ZoIAkpUcA/X2gSMkgHAPUvIdtoSAHEUKiBhI6J # QivRepyvWcl+JYbYbBh7pmgAXVswggefMIIFh6ADAgECAhMzAAAAVD/yAD6+odim # AAAAAABUMA0GCSqGSIb3DQEBDAUAMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVN # aWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMg # UlNBIFRpbWVzdGFtcGluZyBDQSAyMDIwMB4XDTI1MDIyNzE5NDAyN1oXDTI2MDIy # NjE5NDAyN1owgeMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw # DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x # LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEn # MCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjQ1MUEtMDVFMC1EOTQ3MTUwMwYDVQQD # EyxNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhvcml0eTCC # AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK7Wnnjlw596igDzQ7R0X23v # QVa+rXKNIACd35OP+MD1C7yApSmxTQ7rAHsBF66lxk+1pAU5q7UzaWOW7rFrkPVX # hd9ZzcCQ+yXKgCwYEI7czsnqhyHV5rXJeN0nBS10c7xk54hOQi7JGn8MRm5jdW6U # 7lMxJbmvr+rTkO7lqMe9DcnROD09MrK03VgGzNlvauMK9rpqK/hDUJHslgi8p9Uk # BUeeRSZc+c9WcHzNFxBHv7jNB9ZPnaIrGmyBqvF13aSXQsA3OLJ5ErAW+tPoiAhe # ApQuQlKH9lyLF0Hp+4Deyt7V+Z9a+4UiYNfMLEql964BFUqPgDm9icr8o0SUAgc4 # itc/+XZ6Qm4PouEPK6V89uopDSzwhlOxtehq1NlzS3/ncqlcdtD1r6uqKJSYyzr3 # 4z6QX+dAOQVrW+IFtVJA7xIosC6Uf3MT8mO6dr1PhGR8GV4NJ1/BQBXg83jYeK9E # byi7UlGfXaGIm+n3rk5b2juIBBadcmhQnMlje6STwuCknheFu6UQ/ZULYxcX20I9 # Ri3rimB0noxDUsM2e3oNjCqjBSfZu4G5KRORl+8sERCowawabgRKcJKI05gFrSV2 # Axc0+NPFxJJcJGHTWXHmeyxUAHuW3Q2loSVfxsIsqZMGnhiQX4f8xtqR2+dJu9TK # 1kuWDSKv7DKhSMHB98I7AgMBAAGjggHLMIIBxzAdBgNVHQ4EFgQU0mk2gtuzakAQ # FqbmgXWAbmc3XdkwHwYDVR0jBBgwFoAUa2koOjUvSGNAz3vYr0npPtk92yEwbAYD # VR0fBGUwYzBhoF+gXYZbaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9j # cmwvTWljcm9zb2Z0JTIwUHVibGljJTIwUlNBJTIwVGltZXN0YW1waW5nJTIwQ0El # MjAyMDIwLmNybDB5BggrBgEFBQcBAQRtMGswaQYIKwYBBQUHMAKGXWh0dHA6Ly93 # d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwUHVibGlj # JTIwUlNBJTIwVGltZXN0YW1waW5nJTIwQ0ElMjAyMDIwLmNydDAMBgNVHRMBAf8E # AjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDBmBgNV # HSAEXzBdMFEGDCsGAQQBgjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3 # Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wCAYGZ4EM # AQQCMA0GCSqGSIb3DQEBDAUAA4ICAQBz2BTfhlJWlQFTmpmXmIPh9DhsKMmgE6am # JWyc42zNMXE2KbKtBQCkcHFCoLTrBORt52psHmm0LMdUqExfPLzIgP7+vtyBi03B # UkBTr0f1EcgMHwzY/8aWCO/dx5BStip/3YzwPLHebCao/vIHNspwvxmKZPnz68Bs # l4Gbxtes8J7hIH9mabHUY/2jJ0yMGt7164AXaAgMgziO/D8ZR6vIpptKsAcLAlW0 # B+F64oFOVf5GhVYss86hD2QN+UK0nTP3snU4+rrWZAlxwaw2OsrU8AEyb7r6Wozb # VwTxRNITSLrlimbU+L1jRMFf3kzfa/hOAqEGARW5pN4UOU+U6nFNp+4jpri1iSlG # kna3+QZEpRLuzu5fnMNV8gNUBh0PMk0pq6lMEKgaqrm6sB2RVuG+O/1WJQAc8pt9 # EHH/owuZD6a4Q4NhVqUZXWqwzfuS+z6oT88qcUIom9AY0WDsMjA3c4nvULS6g95F # NQxvnJhDhqxJEVef8452wETsRlYxYE+B64UPaYWBSzJCE2Oea55PSyzeBMBtsPl1 # hglmoo3yJKWOS3EBm6wouObjfjg0oy9kebPUcUzWs+5767NE8V/BrKOulvZWyT+q # JgmRXCiQBVgb/y/uaCC8peyx0QQuoDsJ9VhnQ5cVl9+3yrdXYhj9ltlyd9m1Tlm4 # PVwBrkoOFDGCA9QwggPQAgEBMHgwYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1p # Y3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBS # U0EgVGltZXN0YW1waW5nIENBIDIwMjACEzMAAABUP/IAPr6h2KYAAAAAAFQwDQYJ # YIZIAWUDBAIBBQCgggEtMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkq # hkiG9w0BCQQxIgQgGXDxIwgR/qloNH8cbmQTT2e3ixq8AsECqRcQ4efhMiQwgd0G # CyqGSIb3DQEJEAIvMYHNMIHKMIHHMIGgBCDUgap6YlmYSW/WIF/+rbNjJEZNLqfc # NECo7poQmEmwCzB8MGWkYzBhMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9z # b2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUHVibGljIFJTQSBU # aW1lc3RhbXBpbmcgQ0EgMjAyMAITMwAAAFQ/8gA+vqHYpgAAAAAAVDAiBCBqLu+b # EDH1pGQK1lCQQdxE1rqxgefBAup8iNiae2FOeDANBgkqhkiG9w0BAQsFAASCAgCR # e2BEbSWCL86BxR4hwUIBASs5z6FuSeG+uRXgTPDbnVcD55qOk1dqlI8ipA8pkPop # 4Q6zy6LvlnyLlpXtknuEx0+fI0ZWESrv88sc49CROQ90ZEisf+l8k3w2t5H+NzNC # GYBpa3kJB27GP4Q72aWQqxJGlVJSFCAdU1tNCf5InZERGGElWJv+/knDU8uNEx/N # tYI37z+ENl3HQh4cK3U/yTL3ka45c1Y0ESoyiV7dwFpGdzUUgTTaek8thEev1lHc # MDo0rXaMBL1gQwXWzat1WekkUxB5G2IPaDBVKsml9wx9qJPCPTu0FnZG1EK3GCg8 # fa0EHceR8qAhahd9lM7PguHrGsxYqX58KwaafaHoJ3MhuA2VIela3DP+Ff/VBsWs # gMXw/C81Oi04SlXSQqIqHUsdgf/s2rdIHyJPd3i5hYTXbbcHf/OkM51986Wzw9FE # 0Xao5oGgfHwNiGcrEWey5RXAAdsOOOpDCGwjldAYX0NHyYTJ79MUdyC2UhaG2fCK # bEZSYMqMDkL4yG3/i9mnyy6VsFwFuO5KVDcvbPyM2eQcBMiMY1JdzN8CIHOXzN78 # 0v0grgRggQ5Vq9v4jN+OR0bIUIZq8qz3F5WrpDd58A/ercJy9mLGwrdHeMkglnic # D/dy/b6s3Qu2+THEwVQk4pUKgjRiTsP+bpX9/U/REg== # SIG # End signature block |