OpenAuthenticode.psm1

# Copyright: (c) 2023, Jordan Borean (@jborean93) <jborean93@gmail.com>
# MIT License (see LICENSE or https://opensource.org/licenses/MIT)

$importModule = Get-Command -Name Import-Module -Module Microsoft.PowerShell.Core
$moduleName = [System.IO.Path]::GetFileNameWithoutExtension($PSCommandPath)


# This is used to load the shared assembly in the Default ALC which then sets
# an ALC for the moulde and any dependencies of that module to be loaded in
# that ALC.

$isReload = $true
if (-not ('OpenAuthenticode.LoadContext' -as [type])) {
    $isReload = $false

    Add-Type -Path ([System.IO.Path]::Combine($PSScriptRoot, 'bin', 'net8.0', "$moduleName.dll"))
}

$mainModule = [OpenAuthenticode.LoadContext]::Initialize()
$innerMod = &$importModule -Assembly $mainModule -PassThru:$isReload

if ($innerMod) {
    # Bug in pwsh, Import-Module in an assembly will pick up a cached instance
    # and not call the same path to set the nested module's cmdlets to the
    # current module scope.
    # https://github.com/PowerShell/PowerShell/issues/20710
    $addExportedCmdlet = [System.Management.Automation.PSModuleInfo].GetMethod(
        'AddExportedCmdlet',
        [System.Reflection.BindingFlags]'Instance, NonPublic'
    )
    foreach ($cmd in $innerMod.ExportedCommands.Values) {
        $addExportedCmdlet.Invoke($ExecutionContext.SessionState.Module, @(, $cmd))
    }
}

Update-FormatData -AppendPath (Join-Path $PSScriptRoot "$moduleName.Format.ps1xml")
Update-TypeData -AppendPath (Join-Path $PSScriptRoot "$moduleName.Type.ps1xml")

# Use this for testing that the dlls are loaded correctly and outside the Default ALC.
# [System.AppDomain]::CurrentDomain.GetAssemblies() |
# Where-Object { $_.GetName().Name -like "*openauthenticode*" } |
# ForEach-Object {
# $alc = [Runtime.Loader.AssemblyLoadContext]::GetLoadContext($_)
# [PSCustomObject]@{
# Name = $_.FullName
# Location = $_.Location
# ALC = $alc
# }
# } | Format-List

# SIG # Begin signature block
# MIIxSwYJKoZIhvcNAQcCoIIxPDCCMTgCAQMxDTALBglghkgBZQMEAgEwewYKKwYB
# BAGCNwIBBKBtBGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBF3kSc7i2y/Xn4
# U2YM4ROsbrH150qgVAqgYAtO8e+M36CCFeswggbnMIIEz6ADAgECAhMzAAVnfVmd
# 97XgJcLKAAAABWd9MA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVTMR4wHAYD
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJ
# RCBWZXJpZmllZCBDUyBBT0MgQ0EgMDEwHhcNMjUwOTExMTA1NzUxWhcNMjUwOTE0
# MTA1NzUxWjBlMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDERMA8G
# A1UEBxMIQnJpc2JhbmUxFjAUBgNVBAoTDUpvcmRhbiBCb3JlYW4xFjAUBgNVBAMT
# DUpvcmRhbiBCb3JlYW4wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCK
# MgXg/ixC/2JopwFwJLK597cHqL01Uj7SpEp5pk+QM70tJUtGc719mf1lxPytkZAe
# 9q10lcsPFJ6A9p7lETjtiUWMWCN/ay8SkMl6UvLUniGIq8NwkEbZfnI7iB3BdF41
# oPLTnMX7uaTZ5z3R8IkL9PqDkoQWVAvLc+I0uUXErsKlnppzPvpAc9bTuGPhyUT9
# xQfTAgRlooBZrFbpHmJBSmZeQV4y5eeb0clw6weJ/gnSROJOFmnwzC7G8cFWX6om
# pjjLYNAnmICElVAwrwbuv7psvODnnAHIZUT1vSRlFe+iiF+00yYkUejMGq+RQFlv
# y/jruGSK7xc+6BCTfm5aDJMZKXdYvcDflVXoqmcqQKmPsRe330uF62Eab0WIK3//
# Lg9wJpZYeyr3Gdtm58kKtlfkDOqC3ze22YkUXeMcNoCgwoPO38pWjiAmhXny/Vue
# KPJek/xkb8ZkzYbYObD0cgLzhsmRxDjQ5q27r0uUEGhOqQUzXUdNaI6wN2BS9OkC
# AwEAAaOCAhkwggIVMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMDwGA1Ud
# JQQ1MDMGCisGAQQBgjdhAQAGCCsGAQUFBwMDBhsrBgEEAYI3YcD1uzmDxbqHboKj
# 0bsfgZfH91YwHQYDVR0OBBYEFKdNKqB3XhpELCFJEKw1+CwqtgZAMB8GA1UdIwQY
# MBaAFOiDxDPX3J8MnHaaCqbU34emXljuMGcGA1UdHwRgMF4wXKBaoFiGVmh0dHA6
# Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMElEJTIw
# VmVyaWZpZWQlMjBDUyUyMEFPQyUyMENBJTIwMDEuY3JsMIGlBggrBgEFBQcBAQSB
# mDCBlTBkBggrBgEFBQcwAoZYaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9w
# cy9jZXJ0cy9NaWNyb3NvZnQlMjBJRCUyMFZlcmlmaWVkJTIwQ1MlMjBBT0MlMjBD
# QSUyMDAxLmNydDAtBggrBgEFBQcwAYYhaHR0cDovL29uZW9jc3AubWljcm9zb2Z0
# LmNvbS9vY3NwMGYGA1UdIARfMF0wUQYMKwYBBAGCN0yDfQEBMEEwPwYIKwYBBQUH
# AgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0
# b3J5Lmh0bTAIBgZngQwBBAEwDQYJKoZIhvcNAQEMBQADggIBAAowqfkhmmDncqkl
# vbU40rMHk8TZMFihcGg0EoHsuB6wjFT3uKKsOkciiUaIaBu56pxhkjM1Zc6EXRmV
# RU8WN4dd+lhnQIf4+9ofCEvh4pYk576iPy7USCNrv3jquLbl5+hL0D1Vj5qeqxU7
# KsZwhmrG2rnIcZ+JzLUPJbtndG97w4duY+RhRqJVU6SBFeH/NJalM/ZdcdJeoZbK
# mLYKQ8s+iBFhl/EyNYS31tw/ZLqNSZY8lwOiXqcc4X9nCWoEjQDoO7AK+0j0/TD3
# QFBtaQOG97Uh5dXNIqHurRb+kCKyvGpaholNCGS/+8K/5x0+AX3ukabeBkf8QZ/3
# 0vf/AxjMmkecaNTlbWjdZgr1Pb0yC4PpWwe7Xq8IaQrpLjKN1/cWrY7pripHGO62
# bJQlTHYJ0JwoJ3jB5E4ZKqmExFpUVtVkH1hl/YJTJD035g/tjpy62CzBv2In3iF9
# 3c1otrNboy4B3AFdCWJt522/w3TokcEAFqaMZzzxm2G8tkwV4Uqx/1tGWAOClzBR
# tSEvICxoOR1XMCVMjVrj06uHBh1swKHCQbb2W3GBr7EG9KWJeYW6eK1pIN+zpmux
# MUSZi6r5H0d73fG5ZJvjrpK0Eeuyn5dwKUDckLKxU05t4yYnvsta3gJNpSyPXPlp
# 7YGTh5ZuMclzF0xRVW4J5gqt5PPPMIIHWjCCBUKgAwIBAgITMwAAAAc3jFuh2VuM
# 1AAAAAAABzANBgkqhkiG9w0BAQwFADBjMQswCQYDVQQGEwJVUzEeMBwGA1UEChMV
# TWljcm9zb2Z0IENvcnBvcmF0aW9uMTQwMgYDVQQDEytNaWNyb3NvZnQgSUQgVmVy
# aWZpZWQgQ29kZSBTaWduaW5nIFBDQSAyMDIxMB4XDTIxMDQxMzE3MzE1NFoXDTI2
# MDQxMzE3MzE1NFowWjELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
# b3Jwb3JhdGlvbjErMCkGA1UEAxMiTWljcm9zb2Z0IElEIFZlcmlmaWVkIENTIEFP
# QyBDQSAwMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALf3wAMoB8W6
# Po8QNOITSPG8/hKm1r0rvXUYAGsIwmWrtWOeCEGpeQK6SVovHCI9FgPpqcIsfIk0
# YLqvSRC2b0zKNmdVOgLRNU595r6t5ssGfUnsVXfqzzk6/rnWuhlYMCwPNC4UX/Ng
# L60sMZmaQh/5Wk9PHZ+/hrdHF2FTSiTkZtYUqwI4w0ImdSYqv0qog6Bzejxpk+YV
# yrNthO/THhVmAeMtFJTaltGdizzbmvJNK2xEXYjUvp0z/8bBEmVJ625sl2Wh73Mh
# CmCvOVgc90q+hLfFZW3Ynf6YwaXByPh8raGlABhOq0lqpoe/2hGXgw1JM/bjCjhm
# rCIGJ3p1JORNG9lP/20Kg796nYY/VCWFgAzWAv94t4sXFtVRC2lPsE6l08SwBXpQ
# ov5UR0o2loqQ3hP02wW9M0woi53PZ5jo2TypbrTDYaPdcMaOIrXCaCJNmz6Lfbfg
# FflMDWg0SG3BGkGgcnJfaXGMFpn9GyeCBZ/wpmDFRtXpAgcQcskTZBZB5rjFy1+j
# zF3L3hOOozK/bMgtzPCR0XXUeM1Y3fxcQZ0uRzq6N6YOkrbhD7Ia6eyPypNXExvM
# jlpfGqn+jiXgFchuJcifVfmcQpWJmlOcr7SmCpNRSwZxAXw1sPlAM0FdL3C6egFc
# dhXPJ9L6aMrna90sGZnJCbs+0fku/QczAgMBAAGjggIOMIICCjAOBgNVHQ8BAf8E
# BAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFOiDxDPX3J8MnHaaCqbU
# 34emXljuMFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRwOi8v
# d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wGQYJ
# KwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwEgYDVR0TAQH/BAgwBgEB/wIBADAfBgNV
# HSMEGDAWgBTZQSmwDw9jbO9p1/XNKZ6kSGow5jBwBgNVHR8EaTBnMGWgY6Bhhl9o
# dHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBJ
# RCUyMFZlcmlmaWVkJTIwQ29kZSUyMFNpZ25pbmclMjBQQ0ElMjAyMDIxLmNybDCB
# rgYIKwYBBQUHAQEEgaEwgZ4wbQYIKwYBBQUHMAKGYWh0dHA6Ly93d3cubWljcm9z
# b2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwSUQlMjBWZXJpZmllZCUy
# MENvZGUlMjBTaWduaW5nJTIwUENBJTIwMjAyMS5jcnQwLQYIKwYBBQUHMAGGIWh0
# dHA6Ly9vbmVvY3NwLm1pY3Jvc29mdC5jb20vb2NzcDANBgkqhkiG9w0BAQwFAAOC
# AgEAd/7rSyLZMC06eDX4ffb626UrC/DcDyI9vkwZ2Ri9wvHrUxmLPh2VMTRvqzXm
# Wvkc7vaBHAGSQ4hoxFsrczGrw+gYod5xFhbCFuGhoeIAeJ/6UT3nlayuItSxu4yd
# 5Dy0YTTh2Yi1ELZqxeFeiMbVBY7wZ4o2mfaCMbEkkD/IhzIz/dqY0KxwRVhxg25J
# sfsjuiGp90Dd2Jm3X3sM0r50Jim5Ik4myYHCdS9E2ewcJrA75vtF0bDznxYJ84S1
# amXRMlsMNdG35TngSqpG90mgjUE8/J7IWlGYa8VVOajYGI2mg0EJvj9khKQRe0aJ
# RAt5ZZX7i+ADhgraDXTzlq8fbwWU1wFXUxNq9CA5PPuctZCxkyys5jRZ+pFQnOQX
# XTO8aA1kOGlKAkV3LAXkYbHJZO5FVz/syRjzl8I1CW589irfYhf/AehQzuG5Rrhq
# 6IDKcl5LsAgtmeF3H8jIzw4amWADxhk1CDTLRW2ruUbRhtQzlhPXnQmobbjzA4Ac
# nz4sb4ct7J+81B4CAv2LDkzMVbjEIv24GpnpqP1TSma7GWktJ85jsSqYPag3n4+X
# yfYCB13KdhdDh3FcHtypxF2vJKszA360Zf8MCqzUhZ96e4NG+OAHdTjQ5lretTC0
# LxeeCxutoun34UwnqBU/WfaW1KNoMZckxYOwZtH4DpZ0XxgwggeeMIIFhqADAgEC
# AhMzAAAAB4ejNKN7pY4cAAAAAAAHMA0GCSqGSIb3DQEBDAUAMHcxCzAJBgNVBAYT
# AlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01p
# Y3Jvc29mdCBJZGVudGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBB
# dXRob3JpdHkgMjAyMDAeFw0yMTA0MDEyMDA1MjBaFw0zNjA0MDEyMDE1MjBaMGMx
# CzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xNDAy
# BgNVBAMTK01pY3Jvc29mdCBJRCBWZXJpZmllZCBDb2RlIFNpZ25pbmcgUENBIDIw
# MjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCy8MCvGYgo4t1UekxJ
# bGkIVQm0Uv96SvjB6yUo92cXdylN65Xy96q2YpWCiTas7QPTkGnK9QMKDXB2ygS2
# 7EAIQZyAd+M8X+dmw6SDtzSZXyGkxP8a8Hi6EO9Zcwh5A+wOALNQbNO+iLvpgOnE
# M7GGB/wm5dYnMEOguua1OFfTUITVMIK8faxkP/4fPdEPCXYyy8NJ1fmskNhW5Hdu
# NqPZB/NkWbB9xxMqowAeWvPgHtpzyD3PLGVOmRO4ka0WcsEZqyg6efk3JiV/TEX3
# 9uNVGjgbODZhzspHvKFNU2K5MYfmHh4H1qObU4JKEjKGsqqA6RziybPqhvE74fEp
# 4n1tiY9/ootdU0vPxRp4BGjQFq28nzawuvaCqUUF2PWxh+o5/TRCb/cHhcYU8Mr8
# fTiS15kRmwFFzdVPZ3+JV3s5MulIf3II5FXeghlAH9CvicPhhP+VaSFW3Da/azRO
# dEm5sv+EUwhBrzqtxoYyE2wmuHKws00x4GGIx7NTWznOm6x/niqVi7a/mxnnMvQq
# 8EMse0vwX2CfqM7Le/smbRtsEeOtbnJBbtLfoAsC3TdAOnBbUkbUfG78VRclsE7Y
# DDBUbgWt75lDk53yi7C3n0WkHFU4EZ83i83abd9nHWCqfnYa9qIHPqjOiuAgSOf4
# +FRcguEBXlD9mAInS7b6V0UaNwIDAQABo4ICNTCCAjEwDgYDVR0PAQH/BAQDAgGG
# MBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBTZQSmwDw9jbO9p1/XNKZ6kSGow
# 5jBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5t
# aWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBkGCSsGAQQB
# gjcUAgQMHgoAUwB1AGIAQwBBMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU
# yH7SaoUqG8oZmAQHJ89QEE9oqKIwgYQGA1UdHwR9MHsweaB3oHWGc2h0dHA6Ly93
# d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMElkZW50aXR5
# JTIwVmVyaWZpY2F0aW9uJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5
# JTIwMjAyMC5jcmwwgcMGCCsGAQUFBwEBBIG2MIGzMIGBBggrBgEFBQcwAoZ1aHR0
# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBJ
# ZGVudGl0eSUyMFZlcmlmaWNhdGlvbiUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1
# dGhvcml0eSUyMDIwMjAuY3J0MC0GCCsGAQUFBzABhiFodHRwOi8vb25lb2NzcC5t
# aWNyb3NvZnQuY29tL29jc3AwDQYJKoZIhvcNAQEMBQADggIBAH8lKp7+1Kvq3WYK
# 21cjTLpebJDjW4ZbOX3HD5ZiG84vjsFXT0OB+eb+1TiJ55ns0BHluC6itMI2vnwc
# 5wDW1ywdCq3TAmx0KWy7xulAP179qX6VSBNQkRXzReFyjvF2BGt6FvKFR/imR4CE
# ESMAG8hSkPYso+GjlngM8JPn/ROUrTaeU/BRu/1RFESFVgK2wMz7fU4VTd8NXwGZ
# Be/mFPZG6tWwkdmA/jLbp0kNUX7elxu2+HtHo0QO5gdiKF+YTYd1BGrmNG8sTURv
# n09jAhIUJfYNotn7OlThtfQjXqe0qrimgY4Vpoq2MgDW9ESUi1o4pzC1zTgIGtdJ
# /IvY6nqa80jFOTg5qzAiRNdsUvzVkoYP7bi4wLCj+ks2GftUct+fGUxXMdBUv5sd
# r0qFPLPB0b8vq516slCfRwaktAxK1S40MCvFbbAXXpAZnU20FaAoDwqq/jwzwd8W
# o2J83r7O3onQbDO9TyDStgaBNlHzMMQgl95nHBYMelLEHkUnVVVTUsgC0Huj09du
# NfMaJ9ogxhPNThgq3i8w3DAGZ61AMeF0C1M+mU5eucj1Ijod5O2MMPeJQ3/vKBtq
# GZg4eTtUHt/BPjN74SsJsyHqAdXVS5c+ItyKWg3Eforhox9k3WgtWTpgV4gkSiS4
# +A09roSdOI4vrRw+p+fL4WrxSK5nMYIatjCCGrICAQEwcTBaMQswCQYDVQQGEwJV
# UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSswKQYDVQQDEyJNaWNy
# b3NvZnQgSUQgVmVyaWZpZWQgQ1MgQU9DIENBIDAxAhMzAAVnfVmd97XgJcLKAAAA
# BWd9MAsGCWCGSAFlAwQCAaB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3DQEJ
# AzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8G
# CSqGSIb3DQEJBDEiBCAMQxtcFXti39ABS6MHP/IZVk4LCfAAB/2iiOzCX9MP+TAL
# BgkqhkiG9w0BAQEEggGAe4Bdj//jx0oL+uM6CvFp9/BmPu7p/w2YQX0rKuugM6nh
# DwWvqyQ3jdIj+zHlZSgwg2iVPxAej8iyWuwFrKBVImLmBo7ii6vypGqJa/hJ47gC
# 1Qo1jjlgeOJBQ32702BmF2EZTsLRDBq/W7rvq/KoWL62zo+5dj0/Dk+65q2QoB05
# eIShJwSK+E1rss99D+epEamU75E+sMwbEO+DiyuIdH6CvF/UApOdWCF2pJ9b+1s9
# Uq+9EtmuaTjhZLKnw8lScX7KdXtCoX0G4aIAoUrBjjXV47PsX1EvXH1UB5RXSfVz
# m5ly4WTkt/N49DOrni/UWD9eNfeoGXtHUIof0wOHU2PBmx6wQ8xCMI33J/1rNykg
# aim4YKEw3IG3kfOJBQEEEmQ1SNbQp5xjXdgikvx89MHQcuccDpOv0TIrwhIF7jYw
# rqVUk9JP6bwNxhsgfBhYAoyLePNwZw+Qd5f3i7e9L+Uh4ybL8XKK0aqR7KUodNC5
# 17vdI3WFmBsrtOlYmomYoYIYHDCCGBgGCisGAQQBgjcDAwExghgIMIIYBAYJKoZI
# hvcNAQcCoIIX9TCCF/ECAQMxDzANBglghkgBZQMEAgEFADCCAW0GCyqGSIb3DQEJ
# EAEEoIIBXASCAVgwggFUAgEBBgorBgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAE
# INgJqei7OGk4ELMZ3OIJbQ8fzqGkQWC/MaltpysZKyVqAgZowf5ZkIEYEzIwMjUw
# OTEyMDAwMzM4LjExNlowBIACAfQCCQDJnJauh5fg+aCB4aSB3jCB2zELMAkGA1UE
# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0
# IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjdB
# MDAtMDVFMC1EOTQ3MTUwMwYDVQQDEyxNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1l
# IFN0YW1waW5nIEF1dGhvcml0eaCCDyEwggeCMIIFaqADAgECAhMzAAAABeXPD/9m
# LsmHAAAAAAAFMA0GCSqGSIb3DQEBDAUAMHcxCzAJBgNVBAYTAlVTMR4wHAYDVQQK
# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01pY3Jvc29mdCBJZGVu
# dGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAy
# MDAeFw0yMDExMTkyMDMyMzFaFw0zNTExMTkyMDQyMzFaMGExCzAJBgNVBAYTAlVT
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jv
# c29mdCBQdWJsaWMgUlNBIFRpbWVzdGFtcGluZyBDQSAyMDIwMIICIjANBgkqhkiG
# 9w0BAQEFAAOCAg8AMIICCgKCAgEAnnznUmP94MWfBX1jtQYioxwe1+eXM9ETBb1l
# Rkd3kcFdcG9/sqtDlwxKoVIcaqDb+omFio5DHC4RBcbyQHjXCwMk/l3TOYtgoBjx
# nG/eViS4sOx8y4gSq8Zg49REAf5huXhIkQRKe3Qxs8Sgp02KHAznEa/Ssah8nWo5
# hJM1xznkRsFPu6rfDHeZeG1Wa1wISvlkpOQooTULFm809Z0ZYlQ8Lp7i5F9YciFl
# yAKwn6yjN/kR4fkquUWfGmMopNq/B8U/pdoZkZZQbxNlqJOiBGgCWpx69uKqKhTP
# Vi3gVErnc/qi+dR8A2MiAz0kN0nh7SqINGbmw5OIRC0EsZ31WF3Uxp3GgZwetEKx
# Lms73KG/Z+MkeuaVDQQheangOEMGJ4pQZH55ngI0Tdy1bi69INBV5Kn2HVJo9XxR
# YR/JPGAaM6xGl57Ei95HUw9NV/uC3yFjrhc087qLJQawSC3xzY/EXzsT4I7sDbxO
# mM2rl4uKK6eEpurRduOQ2hTkmG1hSuWYBunFGNv21Kt4N20AKmbeuSnGnsBCd2cj
# RKG79+TX+sTehawOoxfeOO/jR7wo3liwkGdzPJYHgnJ54UxbckF914AqHOiEV7xT
# nD1a69w/UTxwjEugpIPMIIE67SFZ2PMo27xjlLAHWW3l1CEAFjLNHd3EQ79PUr8F
# UXetXr0CAwEAAaOCAhswggIXMA4GA1UdDwEB/wQEAwIBhjAQBgkrBgEEAYI3FQEE
# AwIBADAdBgNVHQ4EFgQUa2koOjUvSGNAz3vYr0npPtk92yEwVAYDVR0gBE0wSzBJ
# BgRVHSAAMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
# a2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTATBgNVHSUEDDAKBggrBgEFBQcDCDAZ
# BgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8EBTADAQH/MB8GA1Ud
# IwQYMBaAFMh+0mqFKhvKGZgEByfPUBBPaKiiMIGEBgNVHR8EfTB7MHmgd6B1hnNo
# dHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBJ
# ZGVudGl0eSUyMFZlcmlmaWNhdGlvbiUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1
# dGhvcml0eSUyMDIwMjAuY3JsMIGUBggrBgEFBQcBAQSBhzCBhDCBgQYIKwYBBQUH
# MAKGdWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9z
# b2Z0JTIwSWRlbnRpdHklMjBWZXJpZmljYXRpb24lMjBSb290JTIwQ2VydGlmaWNh
# dGUlMjBBdXRob3JpdHklMjAyMDIwLmNydDANBgkqhkiG9w0BAQwFAAOCAgEAX4h2
# x35ttVoVdedMeGj6TuHYRJklFaW4sTQ5r+k77iB79cSLNe+GzRjv4pVjJviceW6A
# F6ycWoEYR0LYhaa0ozJLU5Yi+LCmcrdovkl53DNt4EXs87KDogYb9eGEndSpZ5ZM
# 74LNvVzY0/nPISHz0Xva71QjD4h+8z2XMOZzY7YQ0Psw+etyNZ1CesufU211rLsl
# LKsO8F2aBs2cIo1k+aHOhrw9xw6JCWONNboZ497mwYW5EfN0W3zL5s3ad4Xtm7yF
# M7Ujrhc0aqy3xL7D5FR2J7x9cLWMq7eb0oYioXhqV2tgFqbKHeDick+P8tHYIFov
# IP7YG4ZkJWag1H91KlELGWi3SLv10o4KGag42pswjybTi4toQcC/irAodDW8HNtX
# +cbz0sMptFJK+KObAnDFHEsukxD+7jFfEV9Hh/+CSxKRsmnuiovCWIOb+H7DRon9
# TlxydiFhvu88o0w35JkNbJxTk4MhF/KgaXn0GxdH8elEa2Imq45gaa8D+mTm8LWV
# ydt4ytxYP/bqjN49D9NZ81coE6aQWm88TwIf4R4YZbOpMKN0CyejaPNN41LGXHeC
# UMYmBx3PkP8ADHD1J2Cr/6tjuOOCztfp+o9Nc+ZoIAkpUcA/X2gSMkgHAPUvIdto
# SAHEUKiBhI6JQivRepyvWcl+JYbYbBh7pmgAXVswggeXMIIFf6ADAgECAhMzAAAA
# R+OVCzehYN3HAAAAAABHMA0GCSqGSIb3DQEBDAUAMGExCzAJBgNVBAYTAlVTMR4w
# HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29m
# dCBQdWJsaWMgUlNBIFRpbWVzdGFtcGluZyBDQSAyMDIwMB4XDTI0MTEyNjE4NDg1
# MFoXDTI1MTExOTE4NDg1MFowgdsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo
# aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
# cG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMx
# JzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjo3QTAwLTA1RTAtRDk0NzE1MDMGA1UE
# AxMsTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZSBTdGFtcGluZyBBdXRob3JpdHkw
# ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDocLpu99z/+NeIZmR32GJg
# 2VT/jd96pYLsvNngeH4qXwK1qVmFaXXkkVbxb1fOQJMukYkba3WEc69W/Z4BszAu
# xguThDVlY9sk4ZYkGMgxoq1Z5inUPvj4Qh8xVvlhiAS6Of/uLwDsbsKlg2fGpmvz
# tiPSOL9P15k00I4bsl1vlmRSut2tNwJQ5sXpoT7GI/2T2A0GnWbFECKRCyGW9rsn
# y9o0LNIUl4NYAd4awGSs6OIzKPpIK1JfK90wXHvaXwGJcN9P8QPRJIHKuFoVGzIU
# G/C0jQC4rQ62yTGvc2sZ4AxTQwflfVBBaiHq8gn/YDHpZileGkB2IQazZEiEc5Or
# 5Xer9mUDU+2FEe66w8e2WkLXanqxaD5+Zco+E+QdwcTYGo78jFxPDvNraTr5QAgI
# Tc4dY/PBC3cYFzcgDyUx2xOVCBvgabqJxj7rXrj4Bhd2S/ZTYOVHhi8cDWBaefM8
# JgiO8GCIIRvlNWng8FKFt09ZfNxmsSdCJlWw3rNAwsBY1xp8pmmv9r2M9rNIRkZ+
# sh0xd3GuASWs2bOrqBi0aTzgY9b3CxY+/m+RU+UTim5JkmpJM/AIP68/S+1NwFqX
# K5yxTJBIInhoEgdEHi+a2JR2SlV3AkpJa0/B6sZaoEa+zgshIfFa66XBmnnsydV4
# uG7W1INoaNVwxBKDdmqNRwIDAQABo4IByzCCAccwHQYDVR0OBBYEFORUdlggOj7v
# T7m2XvFhSEW8ht1oMB8GA1UdIwQYMBaAFGtpKDo1L0hjQM972K9J6T7ZPdshMGwG
# A1UdHwRlMGMwYaBfoF2GW2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMv
# Y3JsL01pY3Jvc29mdCUyMFB1YmxpYyUyMFJTQSUyMFRpbWVzdGFtcGluZyUyMENB
# JTIwMjAyMC5jcmwweQYIKwYBBQUHAQEEbTBrMGkGCCsGAQUFBzAChl1odHRwOi8v
# d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFB1Ymxp
# YyUyMFJTQSUyMFRpbWVzdGFtcGluZyUyMENBJTIwMjAyMC5jcnQwDAYDVR0TAQH/
# BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCB4AwZgYD
# VR0gBF8wXTBRBgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3
# dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMAgGBmeB
# DAEEAjANBgkqhkiG9w0BAQwFAAOCAgEADSJUQ9XamDh0gkC1XvrhVz6AMwGVKuKJ
# A+tklJzBa4UVYP3Y9r1RLU08RYJIjPEkpwiwDWitK58gsZxwNh4Nc4fFiQrZUJZ9
# BInfnodv8WOO83zY8YQdJMcpgBzeYVXiNCedumqFKXj0mMMuWaBynv7wwn7FnHJw
# zLru4jt4VLeef+BycnYwPoMa75LF/9xZo/0TJ371qtBYdbsceKmNhQUTD2vIvvPk
# HTPH/NA2IkLsQ1Am51nzh52WEDzRCoXeld6+/KClnfsEB1/vfR6pYPxwZTvTZ7uh
# 7y8D6g4hDpEcjIses754W2aRpxTPru6n+z2EzkvHF70B/g5oAodmVTUBb+pxpu77
# UHm0TraVodjfXJJNs+h1RjnCu9Miku2KhPmpBrsSne31y3gXstm5vctp1tFox9am
# TWvhIV88l1EIC3yX+BN9cGKtL65REl/y8yqa2PIW2i18JMRIr4T7liHfX0A6sdPs
# l7GudLyEVHAWsW8NFVzt/vdyRhzMUpsxhPL1qGQgD45Q+3bgTlel5MWlWgYG+b+L
# LUXR5uiybbIswnORTU/jDycNAx8u4c5+14sen5/fmqcrQa316l7WqcQ6rOcoxDFy
# m7k2RVuEhZNQ4XNXCKI7kb8PMrRtMbobV0mryd0UlbQUbPsJuN9nUE2ADmgnO3bQ
# GyERvppedCExggdDMIIHPwIBATB4MGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVN
# aWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMg
# UlNBIFRpbWVzdGFtcGluZyBDQSAyMDIwAhMzAAAAR+OVCzehYN3HAAAAAABHMA0G
# CWCGSAFlAwQCAQUAoIIEnDARBgsqhkiG9w0BCRACDzECBQAwGgYJKoZIhvcNAQkD
# MQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNTA5MTIwMDAzMzhaMC8G
# CSqGSIb3DQEJBDEiBCBZEkM7Ec3g0V/COtCBPvUtkXvNApaA8FM6OZAYAOxgbzCB
# uQYLKoZIhvcNAQkQAi8xgakwgaYwgaMwgaAEIJNm85ZyhQAGGe9QPhd3+xvmMKCv
# fjHhf8tl6mRICsynMHwwZaRjMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMgUlNB
# IFRpbWVzdGFtcGluZyBDQSAyMDIwAhMzAAAAR+OVCzehYN3HAAAAAABHMIIDXgYL
# KoZIhvcNAQkQAhIxggNNMIIDSaGCA0UwggNBMIICKQIBATCCAQmhgeGkgd4wgdsx
# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsTHE1p
# Y3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGllbGQgVFNT
# IEVTTjo3QTAwLTA1RTAtRDk0NzE1MDMGA1UEAxMsTWljcm9zb2Z0IFB1YmxpYyBS
# U0EgVGltZSBTdGFtcGluZyBBdXRob3JpdHmiIwoBATAHBgUrDgMCGgMVACAF09m+
# ILyMNydZT7P3lOLNVFzdoGcwZaRjMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVN
# aWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMg
# UlNBIFRpbWVzdGFtcGluZyBDQSAyMDIwMA0GCSqGSIb3DQEBCwUAAgUA7G3OXjAi
# GA8yMDI1MDkxMTIyNDAzMFoYDzIwMjUwOTEyMjI0MDMwWjB0MDoGCisGAQQBhFkK
# BAExLDAqMAoCBQDsbc5eAgEAMAcCAQACAgXuMAcCAQACAhKtMAoCBQDsbx/eAgEA
# MDYGCisGAQQBhFkKBAIxKDAmMAwGCisGAQQBhFkKAwKgCjAIAgEAAgMHoSChCjAI
# AgEAAgMBhqAwDQYJKoZIhvcNAQELBQADggEBANU7G0umYKLNk8E8adknXcRDMi4W
# QECYZ6KIYYWcLkO4UgPM0aGRKgzDT3yKNIoJsAZSyLp/m5dQ+JI6obQLEWmduDWP
# lXtg9hfDH1dmq5gLSF2xcPFCN+pt6yyHj2gwSNIgcRMzOOWrRHIALPRFExltMJpk
# XF2WZBqBTcVb7ocHWwMPxUtFoC7sMKzISp7Hz4y/LqxJLY8r0u+Db2jH1WTPIqYA
# QW5EaD5HQBpCsbalW6hdCGFIfCpQ/cXXzMAQdeNydmYe6W2vQgrUKMFa8jRJWhmx
# E9YMBuDselpwwDAlLwFRuNFVvq7el1AV/3XBxEbLrjI6L7eJRtohKIdRCQswDQYJ
# KoZIhvcNAQEBBQAEggIAQoxF77Ewi3lVGNUqqUY+wP20Gb93FPmRLaR1MHBTwJ0k
# d5Gx0AasDx4RjRPE7LvC3bRUlXdtvsFBo5V8M/osUcB7WlEmw7gO/B9AOzqv/ZhM
# YmN3IsznVDi8bQt4swyyVGlJvlGHVhgWlcnFV85IdsTe6b6gh+I1bNacaZyMMbRS
# moG/MWRfLOl26ItLc9Fa2vf8WY0L3XIknuZtL7lr9bWzxNtIiA5KQwGuq8wdSwkr
# r7rVsTzkOZF2/DCGuwm4euuwtFvIKQJn5vkAe4XjPBFTDbPpqHMchJdRDj216HJ4
# WyDMKBSQTjxPMCRTwzAeCaanJnchpi6VlUpCCupEFzsI3MxQG08ou3cacFVy2vUZ
# wpf84KC64q0J2GRY/4YqLdAWlAqIbZXjde2uwiViwXPkiT2BImixhknOiFphpdP7
# jW16NnoLEDvrQ3c+N811vnHCwkOnL2lH/hgncq+MoINfhOQGgxUZEp+OGaGqCBPO
# moUPSmPKeTbvM7M9fZvoJAzLq/zk+yejgvSIlbwWJ8L4UYmkzmG6M3hnieXvOXVj
# Ep5FDZhGrt4uMiglfQG9iAk2MEZkq3UJbpe85/K6JpJFhHVNWTWW4+J0S/YkHm0J
# Fw04Vb4iRB0dAuFj4YERM0I2d3QmP5GFtyMHO99V9uMZLcXmq/L2hIxFhR3UGUw=
# SIG # End signature block