public/New-AppVentiXPublishingTask.ps1

<#
    .SYNOPSIS
        Creates a new AppVentiX publishing task.
 
    .DESCRIPTION
        The New-AppVentiXPublishingTask function creates a new publishing task for AppVentiX. It allows you to specify various parameters such as the type of package, machine group, priority, name, version, group, path, and more. The function also checks if the package exists and if AppVentiX is licensed before creating the publishing task.
 
    .PARAMETER Type
        Specifies the type of package. Valid values are 'MSIX', 'APPV', and 'Sharedcontainer'.
 
    .PARAMETER MachineGroupFriendlyname
        Specifies the friendly name of the machine group.
 
    .PARAMETER Priority
        Specifies the priority of the publishing task. Default value is 100.
 
    .PARAMETER Group
        Specifies the group of the publishing task.
        Example: 'contoso.com\group1'
 
    .PARAMETER Path
        Specifies the path to the package file.
 
    .PARAMETER AlwaysPublish
        Indicates whether the package should always be published.
 
    .PARAMETER WhenNotExist
        Specifies the action to take when the package does not exist.
        Valid values are 'Add' and 'Skip'.
 
    .PARAMETER DynamicUserConfigurationPath
        Specifies the path to the dynamic user configuration file.
 
    .PARAMETER ReturnPublishCommand
        Indicates whether to return the publish command.
 
    .PARAMETER AutoLaunch
        Indicates whether to autolaunch the package.
 
    .PARAMETER ConfigShare
        Specifies the path to the AppVentiX configuration share.
        You can ommit this parameter if Set-AppVentiXConfigShare has been called.
 
    .EXAMPLE
        New-AppVentiXPublishingTask -Type 'MSIX' -MachineGroupFriendlyname 'Group1' -Priority 50 -Group 'Group1' -Path 'C:\Packages\Package1.msix'
        Creates a new publishing task with the specified parameters, returns the ID of the new task.
 
    .EXAMPLE
        New-AppVentiXPublishingTask -Type 'APPV' -MachineGroupFriendlyname 'Group1' -Priority 100 -Group 'Group1' -Path 'C:\Packages\Package1.appattach'
        Creates a new publishing task with the specified parameters, returns the ID of the new task.
 
    .EXAMPLE
        $params = @{
            Type = 'MSIX'
            MachineGroupFriendlyname = 'Group1'
            Priority = 50
            Group = 'Group1'
            Path = 'C:\Packages\Package1.msix'
        }
        $newTask = New-AppVentiXPublishingTask @params
        Creates a new publishing task with the specified parameters, returns the ID of the new task. We can use the output to publish the task.
 
    .NOTES
        Function : New-AppVentiXPublishingTask
        Author : John Billekens Consultancy
        Copyright: Copyright (c) AppVentiX
        Version : 1.6
        Requires : Valid AppVentiX license
#>

function New-AppVentiXPublishingTask {
    [CmdletBinding(DefaultParameterSetName = 'AutoLaunch', SupportsShouldProcess, ConfirmImpact = 'Low')]
    Param(
        [Parameter(ParameterSetName = 'PublishSeamless')]
        [Parameter(ParameterSetName = 'AutoLaunch')]
        [String]$MachineGroupFriendlyname = 'All Machine Groups',

        [Parameter(ParameterSetName = 'PublishSeamless')]
        [Parameter(ParameterSetName = 'AutoLaunch')]
        [int]$Priority = 100,

        [Parameter(ParameterSetName = 'PublishSeamless', Mandatory)]
        [Parameter(ParameterSetName = 'AutoLaunch', Mandatory)]
        [ValidatePattern('^.*\.*$')]
        [String]$Group,

        [Parameter(ParameterSetName = 'PublishSeamless', Mandatory)]
        [Parameter(ParameterSetName = 'AutoLaunch', Mandatory)]
        [System.IO.FileInfo]$Path,

        [Parameter(ParameterSetName = 'PublishSeamless')]
        [Parameter(ParameterSetName = 'AutoLaunch')]
        [Switch]$AlwaysPublish,

        [Parameter(ParameterSetName = 'PublishSeamless')]
        [Parameter(ParameterSetName = 'AutoLaunch')]
        [ValidateSet('Add', 'Skip')]
        [String]$WhenNotExist = "Add",

        [Parameter(ParameterSetName = 'AutoLaunch')]
        [Switch]$AutoLaunch,

        [Parameter(ParameterSetName = 'PublishSeamless')]
        [Parameter(ParameterSetName = 'AutoLaunch')]
        [String]$DynamicUserConfigurationPath,

        [Parameter(ParameterSetName = 'PublishSeamless')]
        [Switch]$ReturnPublishCommand,

        [Parameter(DontShow, ParameterSetName = 'PublishSeamless')]
        [Parameter(DontShow, ParameterSetName = 'AutoLaunch')]
        [ValidateNotNullOrEmpty()]
        [String]$ConfigShare = $Script:AppVentix.ConfigShare
    )
    if (Test-AppVentiXIsLicensed -ConfigShare $ConfigShare) {
        if (-Not ($Path.Exists)) {
            Throw [System.Management.Automation.ItemNotFoundException] "Package not found: `"$Path`""
        }
        $isAppAttach = $false
        if ($Path -like "*.appattach") {
            $isAppAttach = $true
            $Type = 'MSIX'
            Write-Verbose "The publishing task is an AppAttach task."
        } elseif ($Path -like "*.msix") {
            $Type = 'MSIX'
            Write-Verbose "The publishing task is an MSIX task."
        } elseif ($Path -like "*.appv") {
            $Type = 'APPV'
            Write-Verbose "The publishing task is an APPV task."
        } elseif ($Path -like "*.msixbundle") {
            $Type = 'Sharedcontainer'
            Write-Verbose "The publishing task is a Sharedcontainer task."
        } else {
            Throw "The file type of `"$Path`" is not supported! Must be .appv, .msix, .msixbundle or .appattach"
        }
        if ($Type -ieq 'APPV' -and $isAppAttach) {
            Throw "The type 'APPV' is not valid for an AppAttach file! AppAttach files are always of type 'MSIX'"
        }
        $publishingTasksFullname = Join-Path -Path $ConfigShare -ChildPath $Script:AppVentiX.PublishingTasksFilename
        Write-Verbose "Reading data from $($publishingTasksFullname)"
        $publishingTasksXml = New-Object -TypeName System.Xml.XmlDocument
        try {
            $publishingTasksXml.Load($publishingTasksFullname)
        } catch {
            Write-Verbose "Could not load the Publishing Tasks file, $($_.Exception.Message)"
            if (Test-Path -Path $publishingTasksFullname) {
                Write-Warning "The Publishing Tasks file exists but is not accessible!"
                Throw "The Publishing Tasks file exists but is not accessible!"
            } else {
                Write-Warning "The Publishing Tasks file does not yet exists, creating a new file!"
            }
        }
        $publishingTasksXml = Format-AppVentiXPublishingTasksXml -XmlDocument $publishingTasksXml
        Write-Verbose "Checking the machine group `"$MachineGroupFriendlyname`""
        if (([String]::IsNullOrEmpty($MachineGroupFriendlyname)) -or ($MachineGroupFriendlyname -like 'All Machine Groups')) {
            $MachineGroupFriendlyname = 'All Machine Groups'
            $machineGroup = 'All'
        } else {
            try {
                $machineGroupData = Get-AppVentiXMachineGroup -Name $MachineGroupFriendlyname -ConfigShare $ConfigShare
                if ($null -eq $machineGroupData.FriendlyName -or $machineGroupData.FriendlyName -notlike $MachineGroupFriendlyname) {
                    Throw "Machine group `"$MachineGroupFriendlyname`" not found!"
                }
            } catch {
                Write-Error $_
                Throw "Machine group `"$MachineGroupFriendlyname`" not found!"
            }
            $MachineGroupFriendlyname = $machineGroupData.FriendlyName
            $machineGroup = $machineGroupData.GroupName
        }
        $Action = 'Publish'
        Write-Verbose "Generating a new GUID for the task"
        $Id = [GUID]::NewGuid()
        if ($ReturnPublishCommand) {
            $output = [PSCustomObject]@{
                Id           = $Id
                AppsToPublish = @()
            }
        } else {
            $output = [PSCustomObject]@{
                Id = $Id
            }
        }
        if ($Group -notlike '*\*') {
            Write-Warning "The parameter -Group should contain the domain name and the groupname, e.g. `"DOMAIN.LOCAL\GROUP`""
            Write-Warning "Falling back on default (user dns) value: `"$($env:USERDOMAIN)\$Group`""
            $Group = "$($env:USERDOMAIN)\$Group"
        }
        $packageDetails = Get-ManifestDetail -Filename $Path
        if ($packageDetails.Type -like 'APPV') {
            Write-Verbose "Package type is APPV"
            $name = $packageDetails.DisplayName
            if ([String]::IsNullOrEmpty($DynamicUserConfigurationPath)) {
                $DynamicUserConfigurationPath = 'None'
            }
        } else {
            Write-Verbose "Package type is MSIX"
            $Name = $packageDetails.Name
            if (-Not [String]::IsNullOrEmpty($DynamicUserConfigurationPath)) {
                Write-Warning "The parameter -DynamicUserConfigurationPath is not used for MSIX files, ignoring the parameter"
                $DynamicUserConfigurationPath = $null
            }
        }
        $Version = $packageDetails.Version
        $PackageFullName = $packageDetails.PackageFullName
        Write-Verbose "Creating a new task element in the XML file"
        $ptUserPackagesElement = $publishingTasksXml.SelectSingleNode("//UserPublishingTasks/Packages")
        $ptTaskElement = $ptUserPackagesElement.AppendChild($publishingTasksXml.CreateElement("Task"))
        $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Type"))).AppendChild($publishingTasksXml.CreateTextNode($Type))
        $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("MachineGroup"))).AppendChild($publishingTasksXml.CreateTextNode($machineGroup))
        $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("MachineGroupFriendlyname"))).AppendChild($publishingTasksXml.CreateTextNode($MachineGroupFriendlyname))
        $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Priority"))).AppendChild($publishingTasksXml.CreateTextNode($Priority))
        $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Id"))).AppendChild($publishingTasksXml.CreateTextNode($Id))
        $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Action"))).AppendChild($publishingTasksXml.CreateTextNode($Action))
        $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Name"))).AppendChild($publishingTasksXml.CreateTextNode($Name))
        $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Version"))).AppendChild($publishingTasksXml.CreateTextNode($Version))
        $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Group"))).AppendChild($publishingTasksXml.CreateTextNode($Group))
        try {
            Write-Verbose "Retrieving the SID for group `"$Group`""
            $groupSID = Get-GroupSID -GroupName $Group -ErrorAction Stop
            $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("ADGroupSID"))).AppendChild($publishingTasksXml.CreateTextNode($groupSID))
        } catch {
            Write-Verbose "Could not retrieve the SID for group `"$Group`", $($_.Exception.Message)"
        }
        $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Path"))).AppendChild($publishingTasksXml.CreateTextNode($Path))
        $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("AlwaysPublish"))).AppendChild($publishingTasksXml.CreateTextNode($AlwaysPublish.ToString()))
        $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Whennotexist"))).AppendChild($publishingTasksXml.CreateTextNode($WhenNotExist))
        if ($packageDetails.Type -like 'APPV') {
            Write-Verbose "Adding APPV specific elements"
            $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("PackageId"))).AppendChild($publishingTasksXml.CreateTextNode($packageDetails.PackageId.ToString()))
            $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("VersionId"))).AppendChild($publishingTasksXml.CreateTextNode($packageDetails.VersionId.ToString()))
            $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("DynamicUserConfigurationPath"))).AppendChild($publishingTasksXml.CreateTextNode($DynamicUserConfigurationPath))
            $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("GlobalPublishForUser"))).AppendChild($publishingTasksXml.CreateTextNode('False'))
        } elseif ($packageDetails.Type -like 'MSIX' -and $isAppAttach -eq $false) {
            Write-Verbose "Adding MSIX specific elements"
            $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("UseAppAttach"))).AppendChild($publishingTasksXml.CreateTextNode('False'))
            $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("PackageFullName"))).AppendChild($publishingTasksXml.CreateTextNode($PackageFullName))
            $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("ForceApplicationShutdownWhenUpgrade"))).AppendChild($publishingTasksXml.CreateTextNode('False'))
        } elseif ($packageDetails.Type -like 'MSIX' -and $isAppAttach -eq $true) {
            Write-Verbose "Adding MSIX specific elements for AppAttach"
            $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("UseAppAttach"))).AppendChild($publishingTasksXml.CreateTextNode('True'))
            $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("PackageFullName"))).AppendChild($publishingTasksXml.CreateTextNode($PackageFullName))
            $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("ForceApplicationShutdownWhenUpgrade"))).AppendChild($publishingTasksXml.CreateTextNode('False'))
        }
        if ($ReturnPublishCommand.ToBool() -eq $true) {
            Write-Verbose "Adding PublishSeamless element, set to False"
            $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("PublishSeamless"))).AppendChild($publishingTasksXml.CreateTextNode('False'))
            Write-Verbose "Adding EnableAutoLaunch element, set to False"
            $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("EnableAutoLaunch"))).AppendChild($publishingTasksXml.CreateTextNode('False'))
            Write-Verbose "Adding Seamless elements"
            $ptSeamlessElement = $ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Seamless"))
            $seamlessAppCounter = 0
            ForEach ($app in $packageDetails.Applications) {
                Write-Verbose "Adding SeamlessApplication element for `"$($app.FriendlyName)`" / `"$($app.Description)`""
                if ($ReturnPublishCommand) {
                    $output.AppsToPublish += $([PSCustomObject]@{
                            Order        = $seamlessAppCounter
                            Name         = $app.FriendlyName
                            Description  = $app.Description
                            Executable   = "C:\Program Files\AppVentiX\AppVentiX Agent\AppVentiX Wrapper.exe"
                            Argument     = '{0}#{1}' -f $Id, $seamlessAppCounter
                            IconPath     = "$($app.IconWindowsPath)"
                            FriendlyName = $app.FriendlyName
                        }
                    )
                }
                $seamlessAppCounter++
            }
        } elseif ($AutoLaunch.ToBool() -eq $true) {
            Write-Verbose "Adding PublishSeamless element, set to False"
            $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("PublishSeamless"))).AppendChild($publishingTasksXml.CreateTextNode('False'))
            Write-Verbose "Adding EnableAutoLaunch element, set to True"
            $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("EnableAutoLaunch"))).AppendChild($publishingTasksXml.CreateTextNode('True'))
            Write-Verbose "Adding AutoLaunch elements"
            $ptAutoLaunchElement = $ptTaskElement.AppendChild($publishingTasksXml.CreateElement("AutoLaunch"))
            $autoLaunchAppCounter = 0
            #$publishedApps = @()
            ForEach ($app in $packageDetails.Applications) {
                Write-Verbose "Adding AutoLaunchApplication element for `"$($app.FriendlyName)`" / `"$($app.Description)`""
                $ptAutoLaunchApplicationElement = $ptAutoLaunchElement.AppendChild($publishingTasksXml.CreateElement("AutoLaunchApplication"))
                $null = $($ptAutoLaunchApplicationElement.AppendChild($publishingTasksXml.CreateElement("AutoLaunchApplicationNumber"))).AppendChild($publishingTasksXml.CreateTextNode($autoLaunchAppCounter.ToString()))
                $null = $($ptAutoLaunchApplicationElement.AppendChild($publishingTasksXml.CreateElement("AutoLaunchApplicationExecutable"))).AppendChild($publishingTasksXml.CreateTextNode($app.Executable))
                $null = $($ptAutoLaunchApplicationElement.AppendChild($publishingTasksXml.CreateElement("AutoLaunchApplicationArgument"))).AppendChild($publishingTasksXml.CreateTextNode(""))
                $null = $($ptAutoLaunchApplicationElement.AppendChild($publishingTasksXml.CreateElement("AutoLaunchApplicationRunVirtual"))).AppendChild($publishingTasksXml.CreateTextNode("False"))
            }
        } else {
            Write-Verbose "Adding PublishSeamless element, set to False"
            $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("PublishSeamless"))).AppendChild($publishingTasksXml.CreateTextNode('False'))
            Write-Verbose "Adding EnableAutoLaunch element, set to False"
            $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("EnableAutoLaunch"))).AppendChild($publishingTasksXml.CreateTextNode('False'))
            Write-Verbose "No Seamless elements added"
        }
        if ($PSCmdlet.ShouldProcess("$($Script:AppVentiX.PublishingTasksFilename)")) {
            try {
                $publishingTasksXml.Save($publishingTasksFullname)
            } catch {
                Write-Warning "Could not save the file `"$($publishingTasksFullname)`"! No changes made."
            }
        }
        Write-Verbose "Publishing task created with ID `"$Id`", returning the output"
        return $output
    } else {
        Write-Warning 'AppVentiX is not licensed!'
    }
}

# SIG # Begin signature block
# MIInZQYJKoZIhvcNAQcCoIInVjCCJ1ICAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDziGt9BpqALUT3
# potVthh61QMHIzCCOym5N0Rg05cii6CCIBcwggXJMIIEsaADAgECAhAbtY8lKt8j
# AEkoya49fu0nMA0GCSqGSIb3DQEBDAUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
# ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy
# dGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5l
# dHdvcmsgQ0EwHhcNMjEwNTMxMDY0MzA2WhcNMjkwOTE3MDY0MzA2WjCBgDELMAkG
# A1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl
# BgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMb
# Q2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMIICIjANBgkqhkiG9w0BAQEFAAOC
# Ag8AMIICCgKCAgEAvfl4+ObVgAxknYYblmRnPyI6HnUBfe/7XGeMycxca6mR5rlC
# 5SBLm9qbe7mZXdmbgEvXhEArJ9PoujC7Pgkap0mV7ytAJMKXx6fumyXvqAoAl4Va
# qp3cKcniNQfrcE1K1sGzVrihQTib0fsxf4/gX+GxPw+OFklg1waNGPmqJhCrKtPQ
# 0WeNG0a+RzDVLnLRxWPa52N5RH5LYySJhi40PylMUosqp8DikSiJucBb+R3Z5yet
# /5oCl8HGUJKbAiy9qbk0WQq/hEr/3/6zn+vZnuCYI+yma3cWKtvMrTscpIfcRnNe
# GWJoRVfkkIJCu0LW8GHgwaM9ZqNd9BjuiMmNF0UpmTJ1AjHuKSbIawLmtWJFfzcV
# WiNoidQ+3k4nsPBADLxNF8tNorMe0AZa3faTz1d1mfX6hhpneLO/lv403L3nUlbl
# s+V1e9dBkQXcXWnjlQ1DufyDljmVe2yAWk8TcsbXfSl6RLpSpCrVQUYJIP4ioLZb
# MI28iQzV13D4h1L92u+sUS4Hs07+0AnacO+Y+lbmbdu1V0vc5SwlFcieLnhO+Nqc
# noYsylfzGuXIkosagpZ6w7xQEmnYDlpGizrrJvojybawgb5CAKT41v4wLsfSRvbl
# jnX98sy50IdbzAYQYLuDNbdeZ95H7JlI8aShFf6tjGKOOVVPORa5sWOd/7cCAwEA
# AaOCAT4wggE6MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFLahVDkCw6A/joq8
# +tT4HKbROg79MB8GA1UdIwQYMBaAFAh2zcsH/yT2xc3tu5C84oQ3RnX3MA4GA1Ud
# DwEB/wQEAwIBBjAvBgNVHR8EKDAmMCSgIqAghh5odHRwOi8vY3JsLmNlcnR1bS5w
# bC9jdG5jYS5jcmwwawYIKwYBBQUHAQEEXzBdMCgGCCsGAQUFBzABhhxodHRwOi8v
# c3ViY2Eub2NzcC1jZXJ0dW0uY29tMDEGCCsGAQUFBzAChiVodHRwOi8vcmVwb3Np
# dG9yeS5jZXJ0dW0ucGwvY3RuY2EuY2VyMDkGA1UdIAQyMDAwLgYEVR0gADAmMCQG
# CCsGAQUFBwIBFhhodHRwOi8vd3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcNAQEM
# BQADggEBAFHCoVgWIhCL/IYx1MIy01z4S6Ivaj5N+KsIHu3V6PrnCA3st8YeDrJ1
# BXqxC/rXdGoABh+kzqrya33YEcARCNQOTWHFOqj6seHjmOriY/1B9ZN9DbxdkjuR
# mmW60F9MvkyNaAMQFtXx0ASKhTP5N+dbLiZpQjy6zbzUeulNndrnQ/tjUoCFBMQl
# lVXwfqefAcVbKPjgzoZwpic7Ofs4LphTZSJ1Ldf23SIikZbr3WjtP6MZl9M7JYjs
# NhI9qX7OAo0FmpKnJ25FspxihjcNpDOO16hO0EoXQ0zF8ads0h5YbBRRfopUofbv
# n3l6XYGaFpAP4bvxSgD5+d2+7arszgowggZFMIIELaADAgECAhAIMk+dt9qRb2Pk
# 8qM8Xl1RMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhB
# c3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBDb2RlIFNp
# Z25pbmcgMjAyMSBDQTAeFw0yNDA0MDQxNDA0MjRaFw0yNzA0MDQxNDA0MjNaMGsx
# CzAJBgNVBAYTAk5MMRIwEAYDVQQHDAlTY2hpam5kZWwxIzAhBgNVBAoMGkpvaG4g
# QmlsbGVrZW5zIENvbnN1bHRhbmN5MSMwIQYDVQQDDBpKb2huIEJpbGxla2VucyBD
# b25zdWx0YW5jeTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAMslntDb
# SQwHZXwFhmibivbnd0Qfn6sqe/6fos3pKzKxEsR907RkDMet2x6RRg3eJkiIr3TF
# PwqBooyXXgK3zxxpyhGOcuIqyM9J28DVf4kUyZHsjGO/8HFjrr3K1hABNUszP0o7
# H3o6J31eqV1UmCXYhQlNoW9FOmRC1amlquBmh7w4EKYEytqdmdOBavAD5Xq4vLPx
# NP6kyA+B2YTtk/xM27TghtbwFGKnu9Vwnm7dFcpLxans4ONt2OxDQOMA5NwgcUv/
# YTpjhq9qoz6ivG55NRJGNvUXsM3w2o7dR6Xh4MuEGrTSrOWGg2A5EcLH1XqQtkF5
# cZnAPM8W/9HUp8ggornWnFVQ9/6Mga+ermy5wy5XrmQpN+x3u6tit7xlHk1Hc+4X
# Y4a4ie3BPXG2PhJhmZAn4ebNSBwNHh8z7WTT9X9OFERepGSytZVeEP7hgyptSLcu
# hpwWeR4QdBb7dV++4p3PsAUQVHFpwkSbrRTv4EiJ0Lcz9P1HPGFoHiFAQQIDAQAB
# o4IBeDCCAXQwDAYDVR0TAQH/BAIwADA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8v
# Y2NzY2EyMDIxLmNybC5jZXJ0dW0ucGwvY2NzY2EyMDIxLmNybDBzBggrBgEFBQcB
# AQRnMGUwLAYIKwYBBQUHMAGGIGh0dHA6Ly9jY3NjYTIwMjEub2NzcC1jZXJ0dW0u
# Y29tMDUGCCsGAQUFBzAChilodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY2Nz
# Y2EyMDIxLmNlcjAfBgNVHSMEGDAWgBTddF1MANt7n6B0yrFu9zzAMsBwzTAdBgNV
# HQ4EFgQUO6KtBpOBgmrlANVAnyiQC6W6lJwwSwYDVR0gBEQwQjAIBgZngQwBBAEw
# NgYLKoRoAYb2dwIFAQQwJzAlBggrBgEFBQcCARYZaHR0cHM6Ly93d3cuY2VydHVt
# LnBsL0NQUzATBgNVHSUEDDAKBggrBgEFBQcDAzAOBgNVHQ8BAf8EBAMCB4AwDQYJ
# KoZIhvcNAQELBQADggIBAEQsN8wgPMdWVkwHPPTN+jKpdns5AKVFjcn00psf2NGV
# VgWWNQBIQc9lEuTBWb54IK6Ga3hxQRZfnPNo5HGl73YLmFgdFQrFzZ1lnaMdIcyh
# 8LTWv6+XNWfoyCM9wCp4zMIDPOs8LKSMQqA/wRgqiACWnOS4a6fyd5GUIAm4Cuap
# tpFYr90l4Dn/wAdXOdY32UhgzmSuxpUbhD8gVJUaBNVmQaRqeU8y49MxiVrUKJXd
# e1BCrtR9awXbqembc7Nqvmi60tYKlD27hlpKtj6eGPjkht0hHEsgzU0Fxw7ZJghY
# G2wXfpF2ziN893ak9Mi/1dmCNmorGOnybKYfT6ff6YTCDDNkod4egcMZdOSv+/Qv
# +HAeIgEvrxE9QsGlzTwbRtbm6gwYYcVBs/SsVUdBn/TSB35MMxRhHE5iC3aUTkDb
# ceo/XP3uFhVL4g2JZHpFfCSu2TQrrzRn2sn07jfMvzeHArCOJgBW1gPqR3WrJ4hU
# xL06Rbg1gs9tU5HGGz9KNQMfQFQ70Wz7UIhezGcFcRfkIfSkMmQYYpsc7rfzj+z0
# ThfDVzzJr2dMOFsMlfj1T6l22GBq9XQx0A4lcc5Fl9pRxbOuHHWFqIBD/BCEhwni
# OCySzqENd2N+oz8znKooSISStnkNaYXt6xblJF2dx9Dn89FK7d1IquNxOwt0tI5d
# MIIGgzCCBGugAwIBAgIRAJ6cBPZVqLSnAm1JjGx4jaowDQYJKoZIhvcNAQEMBQAw
# VjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5B
# LjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENBMB4XDTI1MDEw
# OTA4NDA0M1oXDTM2MDEwNzA4NDA0M1owUDELMAkGA1UEBhMCUEwxITAfBgNVBAoM
# GEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEeMBwGA1UEAwwVQ2VydHVtIFRpbWVz
# dGFtcCAyMDI1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxylfZ/is
# K92QReVAi1jkPzXW25QL0HhjI3wov24m0+9YT5MCleFL0LdTLjsKGlAmLbC4cPI6
# 5jpqM9h6ByisxKYktwNawN7LF1GTJ0q24olaQ4/uTLZ210lRCSm3HLh25sHI5d/T
# eFu9s3HKAv53igLsDtQyfvUjvmJB53EYlfeYnVocUQHA2L+O4XPRhBWbUxcUFy26
# y+DezfdAai5Xt2ss583HBD0PhOh+qdNMxPR1Kfvt22UxeD38j0Zygi3OXswMxKqm
# 21ORf57o8evU9ZptNo5bZRV50zBdb5WpHkF1mKRiI7a0e1j+7SDGZ5O/J62En3gK
# fJXvv1v+fqq+7akGbn1vYp77EU3H5Oz/ppyoyS7km8KoMXpbwga8s/a+dW09OetW
# kdnPo6BcoKlu5+BTwpzCzo+NF+KLe8D9rvJC0Q1R24bB6uUhi6q/A2xateMLNgC0
# t7WGthhogO8F+/a0uaAzJ0mP8ZiTuXLqbkr6qcpczu483CzsFoqgq6tOQF6edUka
# 4/cUbfCnWVqQ3VoVphPDBYhbZkNAKjgyyQZ9YUAMdxbw/6bXuqRNQYpdATlQtkp2
# 3qv9zcpQ8Lw3QIP9AmUSbECGsnR7MCcMmAZWFA8mkCtslEue4aG52Mf70rTL0wfe
# oouIxld1JGYdxr8HQwrGZGyV2lPAExf8+g8CAwEAAaOCAVAwggFMMHUGCCsGAQUF
# BwEBBGkwZzA7BggrBgEFBQcwAoYvaHR0cDovL3N1YmNhLnJlcG9zaXRvcnkuY2Vy
# dHVtLnBsL2N0c2NhMjAyMS5jZXIwKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJjYS5v
# Y3NwLWNlcnR1bS5jb20wHwYDVR0jBBgwFoAUvlQCL79AbHNDzqwJJU6eQ0Qa7uAw
# DAYDVR0TAQH/BAIwADA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vc3ViY2EuY3Js
# LmNlcnR1bS5wbC9jdHNjYTIwMjEuY3JsMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI
# MA4GA1UdDwEB/wQEAwIHgDAiBgNVHSAEGzAZMAgGBmeBDAEEAjANBgsqhGgBhvZ3
# AgUBCzAdBgNVHQ4EFgQUgYwGoChT/AA/236eSsEfIuyyEokwDQYJKoZIhvcNAQEM
# BQADggIBAJkPGQwb6wVD52i/OwGHOCZZnx9WT+creuTLc2LvH25rC93d3L2LPhJ2
# 7X7vX9sDHoc0sr3nd0XOfWtODvDTe6ZcOD14O9cH0hODERTNRLqi+t86vbk45v/b
# QO969WgnVppKayqdGi6GaJVDdKhnL6/fkBvFSCVTHLkqhXhL0ayxCitsVZDEnU02
# w4bHlIyOLzfga15uc+ORAN2g6UomULqDXeERZw83XW4H3AkD2mNlMl6szQY57s+g
# Mh5xcyrTZQnr5DAYIeHSA7f9AxhgzmkxAFmbVBKiuQJR3dDwZ3eNC56IOFAE1Nwb
# ehh33g5lhBxU4xyrJp/UPMIho/dOm1YC/N+bXxB/RIGA5JaqzlMVsQ39XDgO3bP6
# /KSHNr4y0PbTkpJvVl1W503ixt0Oe3604Ar0zm3f6n91MxPe50zTlO7zjGRKONQI
# JobhGxrMkCAzP1enyUF9UZ88yTaKn005FM1KD9rZTR5zbIxaNmFfucmXKGmsJjVp
# ke08sFFxtv7xYCWhtG3xKKHXnl6ewOCOB2gw6X0Wu8qYCRD3k8B7gUSaY/Tftcba
# 4vugcxz8LAAL1CZufDxqFbLXhwF8L6YODVYL1JNwSm5e8RbpVlNSh6h/7JO09AhQ
# UOaIbij5hX9aKgD+ADvWt2INsATMBINczzoesW1F7JM7PYkmvchsMIIGuTCCBKGg
# AwIBAgIRAJmjgAomVTtlq9xuhKaz6jkwDQYJKoZIhvcNAQEMBQAwgYAxCzAJBgNV
# BAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYD
# VQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0Nl
# cnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EgMjAeFw0yMTA1MTkwNTMyMThaFw0zNjA1
# MTgwNTMyMThaMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBT
# eXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBDb2RlIFNpZ25pbmcgMjAyMSBD
# QTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJ0jzwQwIzvBRiznM3M+
# Y116dbq+XE26vest+L7k5n5TeJkgH4Cyk74IL9uP61olRsxsU/WBAElTMNQI/HsE
# 0uCJ3VPLO1UufnY0qDHG7yCnJOvoSNbIbMpT+Cci75scCx7UsKK1fcJo4TXetu4d
# u2vEXa09Tx/bndCBfp47zJNsamzUyD7J1rcNxOw5g6FJg0ImIv7nCeNn3B6gZG28
# WAwe0mDqLrvU49chyKIc7gvCjan3GH+2eP4mYJASflBTQ3HOs6JGdriSMVoD1lzB
# JobtYDF4L/GhlLEXWgrVQ9m0pW37KuwYqpY42grp/kSYE4BUQrbLgBMNKRvfhQPs
# kDfZ/5GbTCyvlqPN+0OEDmYGKlVkOMenDO/xtMrMINRJS5SY+jWCi8PRHAVxO0xd
# x8m2bWL4/ZQ1dp0/JhUpHEpABMc3eKax8GI1F03mSJVV6o/nmmKqDE6TK34eTAgD
# iBuZJzeEPyR7rq30yOVw2DvetlmWssewAhX+cnSaaBKMEj9O2GgYkPJ16Q5Da1AP
# YO6n/6wpCm1qUOW6Ln1J6tVImDyAB5Xs3+JriasaiJ7P5KpXeiVV/HIsW3ej85A6
# cGaOEpQA2gotiUqZSkoQUjQ9+hPxDVb/Lqz0tMjp6RuLSKARsVQgETwoNQZ8jCeK
# wSQHDkpwFndfCceZ/OfCUqjxAgMBAAGjggFVMIIBUTAPBgNVHRMBAf8EBTADAQH/
# MB0GA1UdDgQWBBTddF1MANt7n6B0yrFu9zzAMsBwzTAfBgNVHSMEGDAWgBS2oVQ5
# AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwEwYDVR0lBAwwCgYIKwYB
# BQUHAwMwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL2NybC5jZXJ0dW0ucGwvY3Ru
# Y2EyLmNybDBsBggrBgEFBQcBAQRgMF4wKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJj
# YS5vY3NwLWNlcnR1bS5jb20wMgYIKwYBBQUHMAKGJmh0dHA6Ly9yZXBvc2l0b3J5
# LmNlcnR1bS5wbC9jdG5jYTIuY2VyMDkGA1UdIAQyMDAwLgYEVR0gADAmMCQGCCsG
# AQUFBwIBFhhodHRwOi8vd3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcNAQEMBQAD
# ggIBAHWIWA/lj1AomlOfEOxD/PQ7bcmahmJ9l0Q4SZC+j/v09CD2csX8Yl7pmJQE
# TIMEcy0VErSZePdC/eAvSxhd7488x/Cat4ke+AUZZDtfCd8yHZgikGuS8mePCHyA
# iU2VSXgoQ1MrkMuqxg8S1FALDtHqnizYS1bIMOv8znyJjZQESp9RT+6NH024/IqT
# RsRwSLrYkbFq4VjNn/KV3Xd8dpmyQiirZdrONoPSlCRxCIi54vQcqKiFLpeBm5S0
# IoDtLoIe21kSw5tAnWPazS6sgN2oXvFpcVVpMcq0C4x/CLSNe0XckmmGsl9z4UUg
# uAJtf+5gE8GVsEg/ge3jHGTYaZ/MyfujE8hOmKBAUkVa7NMxRSB1EdPFpNIpEn/p
# SHuSL+kWN/2xQBJaDFPr1AX0qLgkXmcEi6PFnaw5T17UdIInA58rTu3mefNuzUts
# e4AgYmxEmJDodf8NbVcU6VdjWtz0e58WFZT7tST6EWQmx/OoHPelE77lojq7lpsj
# hDCzhhp4kfsfszxf9g2hoCtltXhCX6NqsqwTT7xe8LgMkH4hVy8L1h2pqGLT2aNC
# x7h/F95/QvsTeGGjY7dssMzq/rSshFQKLZ8lPb8hFTmiGDJNyHga5hZ59IGynk08
# mHhBFM/0MLeBzlAQq1utNjQprztZ5vv/NJy8ua9AGbwkMWkOMIIGuTCCBKGgAwIB
# AgIRAOf/acc7Nc5LkSbYdHxopYcwDQYJKoZIhvcNAQEMBQAwgYAxCzAJBgNVBAYT
# AlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQL
# Ex5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1
# bSBUcnVzdGVkIE5ldHdvcmsgQ0EgMjAeFw0yMTA1MTkwNTMyMDdaFw0zNjA1MTgw
# NTMyMDdaMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0
# ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQTCC
# AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOkSHwQ17bldesWmlUG+imV/
# TnfRbSV102aO2/hhKH9/t4NAoVoipzu0ePujH67y8iwlmWuhqRR4xLeLdPxolEL5
# 5CzgUXQaq+Qzr5Zk7ySbNl/GZloFiYwuzwWS2AVgLPLCZd5DV8QTF+V57Y6lsdWT
# rrl5dEeMfsxhkjM2eOXabwfLy6UH2ZHzAv9bS/SmMo1PobSx+vHWST7c4aiwVRvv
# JY2dWRYpTipLEu/XqQnqhUngFJtnjExqTokt4HyzOsr2/AYOm8YOcoJQxgvc26+L
# AfXHiBkbQkBdTfHak4DP3UlYolICZHL+XSzSXlsRgqiWD4MypWGU4A13xiHmaRBZ
# owS8FET+QAbMiqBaHDM3Y6wohW07yZ/mw9ZKu/KmVIAEBhrXesxifPB+DTyeWNke
# CGq4IlgJr/Ecr1px6/1QPtj66yvXl3uauzPPGEXUk6vUym6nZyE1IGXI45uGVI7X
# qvCt99WuD9LNop9Kd1LmzBGGvxucOo0lj1M3IRi8FimAX3krunSDguC5HgD75nWc
# UgdZVjm/R81VmaDPEP25Wj+C1reicY5CPckLGBjHQqsJe7jJz1CJXBMUtZs10cVK
# MEK3n/xD2ku5GFWhx0K6eFwe50xLUIZD9GfT7s/5/MyBZ1Ep8Q6H+GMuudDwF0mJ
# itk3G8g6EzZprfMQMc3DAgMBAAGjggFVMIIBUTAPBgNVHRMBAf8EBTADAQH/MB0G
# A1UdDgQWBBS+VAIvv0Bsc0POrAklTp5DRBru4DAfBgNVHSMEGDAWgBS2oVQ5AsOg
# P46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwEwYDVR0lBAwwCgYIKwYBBQUH
# AwgwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2Ey
# LmNybDBsBggrBgEFBQcBAQRgMF4wKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJjYS5v
# Y3NwLWNlcnR1bS5jb20wMgYIKwYBBQUHMAKGJmh0dHA6Ly9yZXBvc2l0b3J5LmNl
# cnR1bS5wbC9jdG5jYTIuY2VyMDkGA1UdIAQyMDAwLgYEVR0gADAmMCQGCCsGAQUF
# BwIBFhhodHRwOi8vd3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcNAQEMBQADggIB
# ALiTWXfJTBX9lAcIoKd6oCzwQZOfARQkt0OmiQ390yEqMrStHmpfycggfPGlBHdM
# DDYhHDVTGyvY+WIbdsIWpJ1BNRt9pOrpXe8HMR5sOu71AWOqUqfEIXaHWOEs0UWm
# Vs8mJb4lKclOHV8oSoR0p3GCX2tVO+XF8Qnt7E6fbkwZt3/AY/C5KYzFElU7TCeq
# BLuSagmM0X3Op56EVIMM/xlWRaDgRna0hLQze5mYHJGv7UuTCOO3wC1bzeZWdlPJ
# Ow5v4U1/AljsNLgWZaGRFuBwdF62t6hOKs86v+jPIMqFPwxNJN/ou22DqzpP+7Ty
# YNbDocrThlEN9D2xvvtBXyYqA7jhYY/fW9edUqhZUmkUGM++Mvz9lyT/nBdfaKqM
# 5otK0U5H8hCSL4SGfjOVyBWbbZlUIE8X6XycDBRRKEK0q5JTsaZksoKabFAyRKJY
# gtObwS1UPoDGcmGirwSeGMQTJSh+WR5EXZaEWJVA6ZZPBlGvjgjFYaQ0kLq1Oitb
# muXZmX7Z70ks9h/elK0A8wOg8oiNVd3o1bb59ms1QF4OjZ45rkWfsGuz8ctB9/le
# CuKzkx5Rt1WAOsXy7E7pws+9k+jrePrZKw2DnmlNaT19QgX2I+hFtvhC6uOhj/Cg
# jVEA4q1i1OJzpoAmre7zdEg+kZcFIkrDHgokA5mcIMK1MYIGpDCCBqACAQEwajBW
# MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEu
# MSQwIgYDVQQDExtDZXJ0dW0gQ29kZSBTaWduaW5nIDIwMjEgQ0ECEAgyT5232pFv
# Y+TyozxeXVEwDQYJYIZIAWUDBAIBBQCggYQwGAYKKwYBBAGCNwIBDDEKMAigAoAA
# oQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4w
# DAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgTRsfHYGRpunXiQszCwQU7jhI
# Aliw+6DnV+qhx1bYuTwwDQYJKoZIhvcNAQEBBQAEggGANry08TX9a/MVA4PQoGZG
# 6XmvhOEQkbCs/t14IPuF95SggzWBbiO4dPDm3gbCnSsc2CTAqm+gCC1XJdFZaIiz
# Xqsgs4avYaZwMz9fYfwQ+Ji7IZmpoAhxqgfaBp9+Ob6H/lzLOayflxFsSZA/zVZa
# X3d7IsicodBa+v0V4c86+zgXbow+9dUfbUVvg9kiRdI8B2/y4CAvi3yZMnFRMmpp
# MR3tNz63cZIyr1CPPnCSWTo9Yh+TrP5AbKM0RRDnjjley0tuZCl17M6gnNQKtXXk
# HSjqMKuHzROUjcDgQrOm8VqiDsX+RdRxD3D/+sz11grN8YNIxIvFaXZ5AsAM/aju
# Q9cnNQleExPQL8WCPmPL9WFbxWKpAp4cVNzAsQ5LvzC9RowILMNJeeJLhFDKsMWD
# bxAMqLvgnTRlLNkYSwsu4FT0mM0gNkNIzya2B5RX6eTBBbkpCsnqG9JZI1mYI/W6
# dfFQTa4VLxcXfsTmiVYBbPrCR22oz8p/wjzmQIceBEaYoYIEBDCCBAAGCSqGSIb3
# DQEJBjGCA/EwggPtAgEBMGswVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2Vj
# byBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGlu
# ZyAyMDIxIENBAhEAnpwE9lWotKcCbUmMbHiNqjANBglghkgBZQMEAgIFAKCCAVcw
# GgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNTAz
# MTEyMTE3MTZaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIM+h3DWd7SvDy4kPojDl
# 2vd7VA8abisj3c8XVOGM+qDVMD8GCSqGSIb3DQEJBDEyBDC+WmJT2RUnd2QNxa87
# TJbIw3S7O2mMQSjwlal5CdiIXOMXlt67B2XovCToYULAFQwwgaAGCyqGSIb3DQEJ
# EAIMMYGQMIGNMIGKMIGHBBTDJbibF/zFAmBhzitxe0UH3ZxqajBvMFqkWDBWMQsw
# CQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQw
# IgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0ECEQCenAT2Vai0pwJt
# SYxseI2qMA0GCSqGSIb3DQEBAQUABIICABjkTC1Ib1B005UdqrkxzIAjbl/KQ7uW
# 1UFwqGPqFw7Vm4YRx5mkw9EV2/GsEx6nRIo6FTkzSqg0pBr34dcFpwUITK3vWHYR
# y4sns75PxFuXxWC4LHApSSfnoVp+zI9V53exNlTxb3gDCvbY8iydVr9nM82c49RD
# MRgv+IHv0tkp9JXnMzcJyZkk7CEt4+xg3fdMU4H4wyca7N5JVhJ+AMULuR7zapYW
# jTmPSMp9Dpn+Zu5dmkgTeKM6i2HUj70goJMdHdg0TY2cbNRfpATATvFRdPehP96S
# CadULpu/Xrfxpz+ChwKJ50dvXty54EWhKQnsRAtczA4DvmkZ+Hg9tfVwwqTs3uq2
# 6QyDPx/2hRbQ6rHT6P1vyxaf9KJxfSqIW4AEnmt9Zy5FGUE+qibBT98PTSdEgu1P
# nVl1KecqC2u1RqKtBfXPE2MWFCSh7B8mM7dB+yesrbbF2ZodWmAt+ZhzJfpe4jeE
# BQPgKJu25GeSSm2EgQTrp/PnRRFp8AMbJzVj6/hnrmrBTOtATRRvq9Lhna+9i+OX
# 5GqbNXR92Z6ykBEINlZ4Mhlfe+pAUnTz0RgKJW1bk2F79L2I04aVrHeaRtF6RUHr
# 3oV28QxEfqpVMs13itQwwxjZncemAQxXldYhzq8sGyG0U2H0oK5H0VTfJd6+atQ0
# MMGNimqPy84Z
# SIG # End signature block