public/Set-AppVentiXPublishingTask.ps1

<#
    .SYNOPSIS
        Updates the properties of an AppVentiX publishing task.
 
    .DESCRIPTION
        The Set-AppVentiXPublishingTask function is used to update the properties of an existing AppVentiX publishing task. It allows you to modify the ID, MachineGroupFriendlyname, Group, and Priority of the task.
 
        Every run also brings the task up to date with the RelativePath element, which holds the
        package path relative to the Content Share. Piping Get-AppVentiXPublishingTask into this
        function without any other parameter therefore adds the missing relative paths.
 
        Tasks can be piped in, and the Publishing Tasks file is read once and saved once for the
        whole pipeline.
 
    .PARAMETER Id
        Specifies the ID of the publishing task to be updated. The ID must be a valid GUID.
        Accepts the Id of the objects returned by Get-AppVentiXPublishingTask from the pipeline.
 
    .PARAMETER MachineGroupFriendlyname
        Specifies the friendly name of the machine group associated with the publishing task. If this parameter is not provided, the machine group friendly name will not be changed.
 
    .PARAMETER Group
        Specifies the group name associated with the publishing task. The group name should contain the domain name and the group name, e.g., "DOMAIN.LOCAL\GROUP". If this parameter is not provided, the group name will not be changed.
 
    .PARAMETER Priority
        Specifies the priority of the publishing task. If this parameter is not provided, the priority will not be changed.
 
    .PARAMETER ConfigShare
        Specifies the configuration share path. If this parameter is not provided, the default configuration share path will be used.
 
    .EXAMPLE
        Set-AppVentiXPublishingTask -Id "12345678-1234-1234-1234-1234567890AB" -MachineGroupFriendlyname "MyMachineGroup" -Group "DOMAIN\GROUP" -Priority 1 -ConfigShare "\\fileserver.domain.local\config"
 
        This example updates the properties of the publishing task with the specified ID. It changes the machine group friendly name to "MyMachineGroup", the group name to "DOMAIN\GROUP", the priority to 1, and uses the specified configuration share path.
 
    .EXAMPLE
        Get-AppVentiXPublishingTask | Set-AppVentiXPublishingTask
 
        This example adds the missing relative path to every user publishing task, without changing anything else.
 
    .EXAMPLE
        Set-AppVentiXPublishingTask -Id "12345678-1234-1234-1234-1234567890AB"
 
        This example adds the missing relative path to the publishing task with the specified ID.
 
    .LINK
        Get-AppVentiXPublishingTask
 
    .LINK
        Update-AppVentiXPublishingTaskPath
 
    .LINK
        New-AppVentiXPublishingTask
 
    .LINK
        Remove-AppVentiXPublishingTask
 
    .LINK
        Copy-AppVentiXPublishingTask
 
    .LINK
        Export-AppVentiXPublishingTaskReport
 
    .LINK
        Get-AppVentiXMachineGroup
 
    .NOTES
        Function : Set-AppVentiXPublishingTask
        Author : John Billekens
        Copyright: (c) John Billekens Consultancy & AppVentiX
        Version : 2026.804.1515
        Requires : Valid AppVentiX license
#>


function Set-AppVentiXPublishingTask {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory, ValueFromPipelineByPropertyName)]
        [ValidateScript({
                if ( [guid]::TryParse("$_", $([ref][guid]::Empty)) ) {
                    $true
                } else {
                    throw [System.Management.Automation.ValidationMetadataException] "The ID '${_}' is not a valid GUID."
                }
            })]
        [ValidateNotNullOrEmpty()]
        [String]$Id,

        [Parameter()]
        [String[]]$MachineGroupFriendlyname,

        [Parameter()]
        [ValidateScript({
                $invalidGroups = $_ | Where-Object { $_ -notmatch '^.*\.*$' }
                if ($invalidGroups) {
                    throw "The following group names are invalid: $($invalidGroups -join ', ')"
                }
                return $true
            })]
        [String[]]$Group,

        [Parameter()]
        [int]$Priority,

        [Alias('Config', 'Share', 'AppVentixConfigShare')]
        [Parameter(DontShow)]
        [ValidateNotNullOrEmpty()]
        [String]$ConfigShare = $Script:AppVentix.ConfigShare
    )
    begin {
        $isLicensed = Test-AppVentiXIsLicensed -ConfigShare $ConfigShare
        if (-not $isLicensed) {
            Write-Warning "AppVentiX is not licensed. Please provide a valid license to use this function."
            return
        }
        $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
        $anyChanged = $false
        $changedTasks = @()
    }
    process {
        if (-not $isLicensed) {
            return
        }
        $isChanged = $false
        $publishingTask = $publishingTasksXml.SelectSingleNode("//Task[Id='$($Id)']")
        Write-Verbose "Function needs to change Group: $($PSBoundParameters.ContainsKey("Group"))"
        Write-Verbose "Function needs to change MachineGroupFriendlyname: $($PSBoundParameters.ContainsKey("MachineGroupFriendlyname"))"
        Write-Verbose "Function needs to change Priority: $($PSBoundParameters.ContainsKey("Priority"))"
        if (($publishingTask | Measure-Object).Count -eq 1) {
            if ($PSBoundParameters.ContainsKey("Group") -and (-not ([String]::IsNullOrEmpty($Group)) -or $Group.Count -gt 0)) {
                Write-Verbose "Group was changed to `"$($Group -join ', ')`""
                $groupSID = @()
                $NewADGroup = @()
                foreach ($ADGroup in $Group) {
                    if ($ADGroup -ieq "Everyone") {
                        $ADGroup = "Everyone"
                        Write-Verbose "Group value is `"$ADGroup`", which is valid."
                    } elseif ($ADGroup -notmatch '^([\w-]+\.){1,}[\w-]+\\.+$') {
                        Write-Warning "The parameter -Group should contain the fully qualified domain name and the groupname, e.g. `"DOMAIN.LOCAL\GROUP`""
                        Write-Warning "Falling back on default (user dns) value: `"$($env:USERDNSDOMAIN)\$ADGroup`""
                        try {
                            if ($ADGroup -like "*\*") {
                                $null, $ADGroup = "$ADGroup".split('\')
                            }
                            $ADGroup = "$($env:USERDNSDOMAIN)\$ADGroup"
                            Write-Verbose "Group value modified to: `"$ADGroup`""
                        } catch {
                            $ADGroup = "$($env:USERDNSDOMAIN)\$ADGroup"
                            Write-Verbose "Group value modified to: `"$ADGroup`", but an error occurred: $($_.Exception.Message)"
                        }
                        if ($ADGroup -notmatch '^([\w-]+\.){1,}[\w-]+\\.+$') {
                            throw "Cannot determine fully qualified domain name for group `"$ADGroup`"! Please specify the fully qualified domain name and the groupname, e.g. `"DOMAIN.LOCAL\GROUP`""
                        }
                    } else {
                        Write-Verbose "Group value is valid: `"$ADGroup`""
                    }
                    $NewADGroup += $ADGroup
                    Write-Verbose "Continuing with Group value: `"$ADGroup`""
                }
                $CurrentADGroup = @($publishingTask.SelectNodes("Group"))
                if ($CurrentADGroup.Count -gt 0) {
                    foreach ($adGrp in $CurrentADGroup) {
                        Write-Verbose "Removing ADGroup element with value `"$($adGrp.InnerText)`" from the publishing task"
                        $null = $publishingTask.RemoveChild($adGrp)
                    }
                    Write-Verbose "Removed ADGroup element from the publishing task"
                } else {
                    Write-Warning "No ADGroup element found in the publishing task"
                }

                $CurrentADGroupSID = @($publishingTask.SelectNodes("ADGroupSID"))
                if ($CurrentADGroupSID.Count -gt 0) {
                    foreach ($adGrpSID in $CurrentADGroupSID) {
                        Write-Verbose "Removing ADGroupSID element with value `"$($adGrpSID.InnerText)`" from the publishing task"
                        $null = $publishingTask.RemoveChild($adGrpSID)
                    }
                    Write-Verbose "Removed ADGroupSID element from the publishing task"
                } else {
                    Write-Warning "No ADGroupSID element found in the publishing task"
                }
                if ($NewADGroup.Count -gt 0) {
                    Write-Verbose "Setting $($NewADGroup.Count) new Group values"
                    foreach ($ADGroup in $NewADGroup) {
                        Write-Verbose "Setting Group to `"$ADGroup`""
                        $null = $($publishingTask.AppendChild($publishingTasksXml.CreateElement("Group"))).AppendChild($publishingTasksXml.CreateTextNode($ADGroup))
                        try {
                            if ($ADGroup -ieq "everyone") {
                                $groupSID = '23-23-23-23'
                                Write-Verbose "Everyone group detected, using SID `"$groupSID`""
                            } else {
                                $groupSID = ''
                                Write-Verbose "Retrieving the SID for group `"$ADGroup`""
                                $groupSID = Get-GroupSID -GroupName $ADGroup -ErrorAction Stop
                                if ([String]::IsNullOrEmpty($groupSID)) {
                                    Write-Warning "Could not retrieve the SID for group `"$ADGroup`"."
                                    $groupSID = ""
                                } else {
                                    Write-Verbose "The SID for group `"$ADGroup`" is `"$groupSID`""
                                }
                            }
                        } catch {
                            Write-Verbose "Could not retrieve the SID for group `"$ADGroup`", $($_.Exception.Message)"
                            $groupSID = ""
                        }
                        $null = $($publishingTask.AppendChild($publishingTasksXml.CreateElement("ADGroupSID"))).AppendChild($publishingTasksXml.CreateTextNode($groupSID))
                    }
                    Write-Verbose "Group was changed to `"$($NewADGroup -join ', ')`""
                } else {
                    Write-Warning "No Group value provided to set in the publishing task"
                }
                $isChanged = $true
            } else {
                Write-Verbose "Group was not changed"
            }
            if ($PSBoundParameters.ContainsKey("MachineGroupFriendlyname") -and (-not ([String]::IsNullOrEmpty($MachineGroupFriendlyname)) -or $MachineGroupFriendlyname.Count -gt 0)) {
                # A parameter keeps its value across pipeline items, so resolve into a local.
                $newMachineGroupFriendlyname = $MachineGroupFriendlyname
                Write-Verbose "MachineGroupFriendlyname was changed to `"$newMachineGroupFriendlyname`""
                Write-Verbose "Checking the machine group `"$newMachineGroupFriendlyname`""
                if (([String]::IsNullOrEmpty($newMachineGroupFriendlyname)) -or $newMachineGroupFriendlyname.Count -eq 0 -or ($newMachineGroupFriendlyname -contains 'All Machine Groups')) {
                    $newMachineGroupFriendlyname = @('All Machine Groups')
                    $MachineGroup = 'All'
                } else {
                    try {
                        $machineGroupData = @()
                        foreach ($mg in $MachineGroupFriendlyname) {
                            $machineGroupResult = Get-AppVentiXMachineGroup -Name $mg -ConfigShare $ConfigShare
                            if ($null -eq $machineGroupResult.FriendlyName -or $machineGroupResult.FriendlyName -notlike $mg) {
                                throw "Machine group `"$mg`" not found!"
                            } else {
                                $machineGroupData += $machineGroupResult
                            }
                        }
                    } catch {
                        Write-Error $_
                        throw "Error retrieving machine group(s) `"$($MachineGroupFriendlyname -join ', ')`": $($_.Exception.Message)"
                    }
                    $newMachineGroupFriendlyname = @($machineGroupData | Select-Object -ExpandProperty FriendlyName)
                    $machineGroup = @($machineGroupData | Select-Object -ExpandProperty GroupName)
                }
                #$adGroupSID = @($publishingTask.SelectNodes("ADGroupSID"))
                $CurrentMachineGroupFriendlyname = @($publishingTask.SelectNodes("MachineGroupFriendlyname"))
                $CurrentMachineGroup = @($publishingTask.SelectNodes("MachineGroup"))
                if ($CurrentMachineGroupFriendlyname.Count -gt 0) {
                    foreach ($mgfn in $CurrentMachineGroupFriendlyname) {
                        Write-Verbose "Removing MachineGroupFriendlyname element with value `"$($mgfn.InnerText)`" from the publishing task"
                        $null = $publishingTask.RemoveChild($mgfn)
                    }
                    Write-Verbose "Removed MachineGroupFriendlyname element from the publishing task"
                } else {
                    Write-Warning "No MachineGroupFriendlyname element found in the publishing task"
                }
                if ($CurrentMachineGroup.Count -gt 0) {
                    foreach ($mg in $CurrentMachineGroup) {
                        Write-Verbose "Removing MachineGroup element with value `"$($mg.InnerText)`" from the publishing task"
                        $null = $publishingTask.RemoveChild($mg)
                    }
                    Write-Verbose "Removed MachineGroup element from the publishing task"
                } else {
                    Write-Warning "No MachineGroup element found in the publishing task"
                }
                if ($newMachineGroupFriendlyname.Count -gt 0) {
                    foreach ($mgfn in $newMachineGroupFriendlyname) {
                        $null = $($publishingTask.AppendChild($publishingTasksXml.CreateElement("MachineGroupFriendlyname"))).AppendChild($publishingTasksXml.CreateTextNode($mgfn))
                        Write-Verbose "MachineGroupFriendlyname set to '$mgfn'"
                    }
                }
                if ($MachineGroup.Count -gt 0) {
                    foreach ($mg in $MachineGroup) {
                        $null = $($publishingTask.AppendChild($publishingTasksXml.CreateElement("MachineGroup"))).AppendChild($publishingTasksXml.CreateTextNode($mg))
                        Write-Verbose "MachineGroup set to '$mg'"
                    }
                }
                Write-Verbose "MachineGroupFriendlyname was changed to `"$($newMachineGroupFriendlyname -join ', ')`""
                $isChanged = $true
            } else {
                Write-Verbose "MachineGroupFriendlyname was not changed"
            }

            if ($PSBoundParameters.ContainsKey("Priority") -and $Priority -ge 0) {
                $publishingTask.Priority = $Priority
                Write-Verbose "Priority was changed to `"$Priority`""
                $isChanged = $true
            } else {
                Write-Verbose "Priority was not changed"
            }

            $taskFullPath = "$($publishingTask.Path)"
            if (Test-AppVentiXPathIsAbsolute -Path $taskFullPath) {
                $taskRelativePath = ConvertTo-AppVentiXRelativePackagePath -Path $taskFullPath -ConfigShare $ConfigShare -WarningAction SilentlyContinue
                if ($taskRelativePath -ieq $taskFullPath) {
                    Write-Verbose "The package is not located in a Content Share, no relative path is stored"
                } elseif ("$($publishingTask.RelativePath)" -cne $taskRelativePath) {
                    Set-AppVentiXRelativePathElement -TaskElement $publishingTask -RelativePath $taskRelativePath -Confirm:$false
                    Write-Verbose "RelativePath set to `"$taskRelativePath`""
                    $isChanged = $true
                } else {
                    Write-Verbose "RelativePath is already up to date"
                }
            } else {
                Write-Verbose "The task does not hold a full path, run Update-AppVentiXPublishingTaskPath to repair it"
            }

            if ($isChanged) {
                $changedTasks += [PSCustomObject]@{ Name = "$($publishingTask.Name)"; Path = "$($publishingTask.Path)" }
                $anyChanged = $true
            } else {
                Write-Verbose "No changes were made to the Publishing Task with ID `"$Id`""
            }
        } elseif (($publishingTask | Measure-Object).Count -gt 1) {
            # Non terminating: a terminating error would drop the changes of the earlier tasks.
            Write-Error "Multiple Publishing Tasks with ID `"$Id`" found while expecting only one!"
        } else {
            Write-Error "The Publishing Task with ID `"$Id`" does not exist!"
        }
    }
    end {
        if (-not $isLicensed) {
            return
        }
        if (-not $anyChanged) {
            Write-Verbose "No changes were made, the Publishing Tasks file is unchanged"
            return
        }
        Write-Verbose "Saving the Publishing Tasks file"
        try {
            $publishingTasksXml.Save($publishingTasksFullname)
        } catch {
            Write-Error "Could not save the Publishing Tasks file, $($_.Exception.Message)"
            throw "Could not save the Publishing Tasks file, $($_.Exception.Message)"
        }
        foreach ($changedTask in $changedTasks) {
            Write-AppVentiXLogEntry -Feature Application -Action $($MyInvocation.MyCommand.Name) -Details "Changed the Publishing Task, Package name: `"$($changedTask.Name)`", Path: `"$($changedTask.Path)`"" -ConfigShare $ConfigShare
        }
    }
}

# SIG # Begin signature block
# MII5zAYJKoZIhvcNAQcCoII5vTCCObkCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCLqk1B6W/Txgkb
# RNc1szO2zWdhTm8XbjB8ugZJvIq4z6CCIfAwggXMMIIDtKADAgECAhBUmNLR1FsZ
# lUgTecgRwIeZMA0GCSqGSIb3DQEBDAUAMHcxCzAJBgNVBAYTAlVTMR4wHAYDVQQK
# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01pY3Jvc29mdCBJZGVu
# dGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAy
# MDAeFw0yMDA0MTYxODM2MTZaFw00NTA0MTYxODQ0NDBaMHcxCzAJBgNVBAYTAlVT
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01pY3Jv
# c29mdCBJZGVudGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRo
# b3JpdHkgMjAyMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALORKgeD
# Bmf9np3gx8C3pOZCBH8Ppttf+9Va10Wg+3cL8IDzpm1aTXlT2KCGhFdFIMeiVPvH
# or+Kx24186IVxC9O40qFlkkN/76Z2BT2vCcH7kKbK/ULkgbk/WkTZaiRcvKYhOuD
# PQ7k13ESSCHLDe32R0m3m/nJxxe2hE//uKya13NnSYXjhr03QNAlhtTetcJtYmrV
# qXi8LW9J+eVsFBT9FMfTZRY33stuvF4pjf1imxUs1gXmuYkyM6Nix9fWUmcIxC70
# ViueC4fM7Ke0pqrrBc0ZV6U6CwQnHJFnni1iLS8evtrAIMsEGcoz+4m+mOJyoHI1
# vnnhnINv5G0Xb5DzPQCGdTiO0OBJmrvb0/gwytVXiGhNctO/bX9x2P29Da6SZEi3
# W295JrXNm5UhhNHvDzI9e1eM80UHTHzgXhgONXaLbZ7LNnSrBfjgc10yVpRnlyUK
# xjU9lJfnwUSLgP3B+PR0GeUw9gb7IVc+BhyLaxWGJ0l7gpPKWeh1R+g/OPTHU3mg
# trTiXFHvvV84wRPmeAyVWi7FQFkozA8kwOy6CXcjmTimthzax7ogttc32H83rwjj
# O3HbbnMbfZlysOSGM1l0tRYAe1BtxoYT2v3EOYI9JACaYNq6lMAFUSw0rFCZE4e7
# swWAsk0wAly4JoNdtGNz764jlU9gKL431VulAgMBAAGjVDBSMA4GA1UdDwEB/wQE
# AwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIftJqhSobyhmYBAcnz1AQ
# T2ioojAQBgkrBgEEAYI3FQEEAwIBADANBgkqhkiG9w0BAQwFAAOCAgEAr2rd5hnn
# LZRDGU7L6VCVZKUDkQKL4jaAOxWiUsIWGbZqWl10QzD0m/9gdAmxIR6QFm3FJI9c
# Zohj9E/MffISTEAQiwGf2qnIrvKVG8+dBetJPnSgaFvlVixlHIJ+U9pW2UYXeZJF
# xBA2CFIpF8svpvJ+1Gkkih6PsHMNzBxKq7Kq7aeRYwFkIqgyuH4yKLNncy2RtNwx
# AQv3Rwqm8ddK7VZgxCwIo3tAsLx0J1KH1r6I3TeKiW5niB31yV2g/rarOoDXGpc8
# FzYiQR6sTdWD5jw4vU8w6VSp07YEwzJ2YbuwGMUrGLPAgNW3lbBeUU0i/OxYqujY
# lLSlLu2S3ucYfCFX3VVj979tzR/SpncocMfiWzpbCNJbTsgAlrPhgzavhgplXHT2
# 6ux6anSg8Evu75SjrFDyh+3XOjCDyft9V77l4/hByuVkrrOj7FjshZrM77nq81YY
# uVxzmq/FdxeDWds3GhhyVKVB0rYjdaNDmuV3fJZ5t0GNv+zcgKCf0Xd1WF81E+Al
# GmcLfc4l+gcK5GEh2NQc5QfGNpn0ltDGFf5Ozdeui53bFv0ExpK91IjmqaOqu/dk
# ODtfzAzQNb50GQOmxapMomE2gj4d8yu8l13bS3g7LfU772Aj6PXsCyM2la+YZr9T
# 03u4aUoqlmZpxJTG9F9urJh4iIAGXKKy7aIwggalMIIEjaADAgECAhMzAARMPmfq
# aSg6w6caAAAABEw+MA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVTMR4wHAYD
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJ
# RCBWZXJpZmllZCBDUyBBT0MgQ0EgMDMwHhcNMjYwODA1MTQyMTUyWhcNMjYwODA4
# MTQyMTUyWjBoMQswCQYDVQQGEwJOTDEWMBQGA1UECBMNTm9vcmQtSG9sbGFuZDEP
# MA0GA1UEBxMGSGVpbG9vMRcwFQYDVQQKEw5BcHBWZW50aVggQi5WLjEXMBUGA1UE
# AxMOQXBwVmVudGlYIEIuVi4wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIB
# gQC3MkD6rXjKM5qmyvZ0cPvNWQWhnN+XfxSiAC42MJoclF2U1um+TjcWk2H54VLj
# ZYu6cGHVXW2DZMEswIbSGiGm5ogn7TzZtPIJ73lZnp7J3HD4PwMpbB4GDCw9epH2
# IkOeSweKYD0HQpecIzxmGF5j9/8bIWJZbYwTB/76rzi/+63HkCnubYD6CcrxQ8qT
# Jo1wrTIUKaPouKIhFAO+y7nMnldIECa+9lhWAOY2r8epK6IzbLNc9Id9b34KrCaU
# VHbZXN7GtPktzMF5g/jve2Pjli0/M6goIDOh0/nt2UpshvObNU1dfdaK/vbgtnXc
# LG6qDI76JIdzsXma3f6edo9/oj+Cq6ECXez5Ie4PZj0Zlvj8YC296kcQIQNR4EmJ
# 1dOCFM/GhpExxnI+633wyeqVDz30K6Qgn5E9THPsFX5pn8hrZrym247PPf+qfy/k
# NW9iz6Z/tSGEGajj64gbRMAJ4BMggOV4HizFAkKCwr9giIpkf6PvZI5KJh6K6Xvc
# fsUCAwEAAaOCAdQwggHQMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMDsG
# A1UdJQQ0MDIGCisGAQQBgjdhAQAGCCsGAQUFBwMDBhorBgEEAYI3YaL8yC6uh9F6
# gZ2lyVCBwcKCJzAdBgNVHQ4EFgQUB0cGX1gt721eztA0RMr/pjOFwhowHwYDVR0j
# BBgwFoAUpEMMf3ZapYXnPo0oDwwXokVpcMYwZwYDVR0fBGAwXjBcoFqgWIZWaHR0
# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSUQl
# MjBWZXJpZmllZCUyMENTJTIwQU9DJTIwQ0ElMjAwMy5jcmwwdAYIKwYBBQUHAQEE
# aDBmMGQGCCsGAQUFBzAChlhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz
# L2NlcnRzL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEFPQyUyMENB
# JTIwMDMuY3J0MFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRw
# Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0w
# DQYJKoZIhvcNAQEMBQADggIBAGDG9X6XuMGtOGO7Eu5QLHtNHaNnOxa7XuFZMn0l
# 79+g6tLURxq64Ta9roFKDYZJnfrbff4oJX9+T3cGaoEKLoYScPRuKJSkA3PY19GL
# tTwvz6MVBpFv8AGBtUOGCrvmSfoOunI9XY3V6yPgvTE8UH8OYZGgQ1EcLWdaabDf
# b2YZr2SsPtSTn8icC1bc+slByHsJPD4tcEIJCOZNTML87uE/Cq9tVQcEe3NAho+p
# GcKX38UNUtQ16Z55r7FPt54TXon+7Dko1sf+nbIUELeQVnufEvoJYVhu6+dhIKMF
# RlPhwwbu/v5tnJyLk/TTc1IUVHi2MFXkeNTHdkDeOTwzqxgxrSd6Q3RUiaQq9HVy
# B3WiWOHAemiwyD58C/VDLbudXtnZ9tMkf5qq3tIJvHz4L/M9pqPBE3sOmFsHcjWP
# P+2FqJKgp5+U/IGkjSK760UPUAA7RoiGXdMR3J7Zu/74Pv9nOveVkE59AilgmDQv
# jzZ3z2WlmiXM0oiagxfAsnFiT9pEAwpbGnLxuhn/czMuZ4Ec8iB7eQ/k4zrEYzSR
# 31vOHto080ygXqlCxeMILxHVH6SQmlG2ErsC5Uk+evBQ8MT3E+cifFod0bxIAv7u
# EY72aEcLdpx/S6BFQh8T00rmlMcL4NngBv1ojOWX7+pIjZ2hwFnUKKDW7WmlQhns
# 3vWEMIIGpTCCBI2gAwIBAgITMwAETD5n6mkoOsOnGgAAAARMPjANBgkqhkiG9w0B
# AQwFADBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
# aW9uMSswKQYDVQQDEyJNaWNyb3NvZnQgSUQgVmVyaWZpZWQgQ1MgQU9DIENBIDAz
# MB4XDTI2MDgwNTE0MjE1MloXDTI2MDgwODE0MjE1MlowaDELMAkGA1UEBhMCTkwx
# FjAUBgNVBAgTDU5vb3JkLUhvbGxhbmQxDzANBgNVBAcTBkhlaWxvbzEXMBUGA1UE
# ChMOQXBwVmVudGlYIEIuVi4xFzAVBgNVBAMTDkFwcFZlbnRpWCBCLlYuMIIBojAN
# BgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAtzJA+q14yjOapsr2dHD7zVkFoZzf
# l38UogAuNjCaHJRdlNbpvk43FpNh+eFS42WLunBh1V1tg2TBLMCG0hohpuaIJ+08
# 2bTyCe95WZ6eydxw+D8DKWweBgwsPXqR9iJDnksHimA9B0KXnCM8ZhheY/f/GyFi
# WW2MEwf++q84v/utx5Ap7m2A+gnK8UPKkyaNcK0yFCmj6LiiIRQDvsu5zJ5XSBAm
# vvZYVgDmNq/HqSuiM2yzXPSHfW9+CqwmlFR22VzexrT5LczBeYP473tj45YtPzOo
# KCAzodP57dlKbIbzmzVNXX3Wiv724LZ13CxuqgyO+iSHc7F5mt3+nnaPf6I/gquh
# Al3s+SHuD2Y9GZb4/GAtvepHECEDUeBJidXTghTPxoaRMcZyPut98MnqlQ899Cuk
# IJ+RPUxz7BV+aZ/Ia2a8ptuOzz3/qn8v5DVvYs+mf7UhhBmo4+uIG0TACeATIIDl
# eB4sxQJCgsK/YIiKZH+j72SOSiYeiul73H7FAgMBAAGjggHUMIIB0DAMBgNVHRMB
# Af8EAjAAMA4GA1UdDwEB/wQEAwIHgDA7BgNVHSUENDAyBgorBgEEAYI3YQEABggr
# BgEFBQcDAwYaKwYBBAGCN2Gi/MgurofReoGdpclQgcHCgicwHQYDVR0OBBYEFAdH
# Bl9YLe9tXs7QNETK/6YzhcIaMB8GA1UdIwQYMBaAFKRDDH92WqWF5z6NKA8MF6JF
# aXDGMGcGA1UdHwRgMF4wXKBaoFiGVmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
# a2lvcHMvY3JsL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEFPQyUy
# MENBJTIwMDMuY3JsMHQGCCsGAQUFBwEBBGgwZjBkBggrBgEFBQcwAoZYaHR0cDov
# L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBJRCUy
# MFZlcmlmaWVkJTIwQ1MlMjBBT0MlMjBDQSUyMDAzLmNydDBUBgNVHSAETTBLMEkG
# BFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br
# aW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMA0GCSqGSIb3DQEBDAUAA4ICAQBgxvV+
# l7jBrThjuxLuUCx7TR2jZzsWu17hWTJ9Je/foOrS1EcauuE2va6BSg2GSZ36233+
# KCV/fk93BmqBCi6GEnD0biiUpANz2NfRi7U8L8+jFQaRb/ABgbVDhgq75kn6Drpy
# PV2N1esj4L0xPFB/DmGRoENRHC1nWmmw329mGa9krD7Uk5/InAtW3PrJQch7CTw+
# LXBCCQjmTUzC/O7hPwqvbVUHBHtzQIaPqRnCl9/FDVLUNemeea+xT7eeE16J/uw5
# KNbH/p2yFBC3kFZ7nxL6CWFYbuvnYSCjBUZT4cMG7v7+bZyci5P003NSFFR4tjBV
# 5HjUx3ZA3jk8M6sYMa0nekN0VImkKvR1cgd1oljhwHposMg+fAv1Qy27nV7Z2fbT
# JH+aqt7SCbx8+C/zPaajwRN7DphbB3I1jz/thaiSoKeflPyBpI0iu+tFD1AAO0aI
# hl3TEdye2bv++D7/Zzr3lZBOfQIpYJg0L482d89lpZolzNKImoMXwLJxYk/aRAMK
# Wxpy8boZ/3MzLmeBHPIge3kP5OM6xGM0kd9bzh7aNPNMoF6pQsXjCC8R1R+kkJpR
# thK7AuVJPnrwUPDE9xPnInxaHdG8SAL+7hGO9mhHC3acf0ugRUIfE9NK5pTHC+DZ
# 4Ab9aIzll+/qSI2docBZ1Cig1u1ppUIZ7N71hDCCBygwggUQoAMCAQICEzMAAAAY
# DeuRVamKAJgAAAAAABgwDQYJKoZIhvcNAQEMBQAwYzELMAkGA1UEBhMCVVMxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE0MDIGA1UEAxMrTWljcm9zb2Z0
# IElEIFZlcmlmaWVkIENvZGUgU2lnbmluZyBQQ0EgMjAyMTAeFw0yNjAzMjYxODEx
# MzJaFw0zMTAzMjYxODExMzJaMFoxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJRCBWZXJpZmll
# ZCBDUyBBT0MgQ0EgMDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDI
# gNpgNFaiif2VWeWP5I6PnFXxJ/lB37fJR55GCvR7GLZBMkBijbiKVwgpBI3xM5nf
# 484znH/qncJ+OCq6y3jgnQW+R8Zd7U+7LjlrmcskalzSQ0ghMxEpnBW8/HHs2V8Z
# JzQk6HP+SDsbvsL7LdlH/eO2l4mknhDBwr0Z/Q966TvEth5b8kCxj1vqiV4YNthL
# GRqZR9u2fK/yBMWu83p6O4uo2Edg++gEew5IL7vnnnKFqmSh/R9vPJy3WF1YcZew
# AUx8sXZNUnx3ZhVg59l2LpitPiwzE6FMqIsqaEvVe3MzuFd2a/uWDZH6VbDyUiRK
# 78mIg1DQYA9zDEyyBFcNI+nxVSzglvL6u7PRuNqgcV3sf6ELxw89ysQM/Z4R1hRF
# WXRpyOWKKAKtfBHTk0UnNiPcxmLMMYs8jeUjOidfVPjTIry/UVwnwxdlkK85cZfB
# EMYZ/DBNOwdomP459Y1n8izKkbhsa+p4lw+cQVxATBFx9ggR79HhryT7HDmpPLvk
# JvBZ4wW4CW32UT2SMyDe28nIOU3m+hfHlVeKcLBQcym5VoRDjIcCVI7uqgGW2PNM
# E0cfei8zCwCy6HCsssJWFS7eg/YbFhnATJcyWfMrkNuAbMfMN8Npg8crS6jVVowy
# D0GG5zdgi+uQVcSK/638mA1xEYK3pnIoQgO09uuDBwIDAQABo4IB3DCCAdgwDgYD
# VR0PAQH/BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBSkQwx/dlql
# hec+jSgPDBeiRWlwxjBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYz
# aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnku
# aHRtMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMBIGA1UdEwEB/wQIMAYBAf8C
# AQAwHwYDVR0jBBgwFoAU2UEpsA8PY2zvadf1zSmepEhqMOYwcAYDVR0fBGkwZzBl
# oGOgYYZfaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9z
# b2Z0JTIwSUQlMjBWZXJpZmllZCUyMENvZGUlMjBTaWduaW5nJTIwUENBJTIwMjAy
# MS5jcmwwfQYIKwYBBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1p
# Y3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMElEJTIwVmVyaWZp
# ZWQlMjBDb2RlJTIwU2lnbmluZyUyMFBDQSUyMDIwMjEuY3J0MA0GCSqGSIb3DQEB
# DAUAA4ICAQBxxyBW+X6mhdRiSwD9PMMWcGUAnx5/QUwnNvZdFGEX+4DRDIr9WCh4
# C87wHtw+lg1D3uzK10DstPX0LFLBFAC3vWMYX4ImXwoLhoR0xlN8mUdorJ3bgnpC
# JWuI1531Z1rCwPuUrSkBxfOIGDk3p2ECb3Ho/xHi5PRSR/OUrWuQHwXiaXMTuXu3
# IRLezwVkZpFmNwYRD57R9Nx2F/yM7tzOY0Hh0hGCaYEK38/6FrS0SXadXWyDUCfn
# 5XOGACRjUCnHx+JQUG0f4SHD+iblpAI0gl+ZHnVmdXXxHTZeTa0CYCIhFxKP2922
# s0g6zLmeiV13LWUmtt/UF7TrWXpMi2/0UNniaDoH7rnPGRV5xVX8uXy4sZii4asw
# zqPM7Y7+mzcranqZ8EjZk5gjLhQ3A2sZaprlOu8CaRmyfcIiVH7zVfgAvm81MWXF
# ziAf7my7QOvnyEFPGddq8MSfPtfRyw/Uq3uH6KpoaJNIfPYH6fceZSi53Rat1A9g
# rExq3ROjhhSpTcchuBItAMNVPxoKNbUm+iR/X3XkL+9WQginjyHe+hXLclY8vAGX
# FD1p40PqMIpAYsmEJBFKW9df4//1N5oQDr/FY9IBJl/oSS979i5rtT7NZz9KvYra
# CPRBGs0QCy+sWvgQa0coM70QJVLeVwmSxUO/0od0w9Qry7bSLrxGoDCCB54wggWG
# oAMCAQICEzMAAAAHh6M0o3uljhwAAAAAAAcwDQYJKoZIhvcNAQEMBQAwdzELMAkG
# A1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjFIMEYGA1UE
# AxM/TWljcm9zb2Z0IElkZW50aXR5IFZlcmlmaWNhdGlvbiBSb290IENlcnRpZmlj
# YXRlIEF1dGhvcml0eSAyMDIwMB4XDTIxMDQwMTIwMDUyMFoXDTM2MDQwMTIwMTUy
# MFowYzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
# bjE0MDIGA1UEAxMrTWljcm9zb2Z0IElEIFZlcmlmaWVkIENvZGUgU2lnbmluZyBQ
# Q0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALLwwK8ZiCji
# 3VR6TElsaQhVCbRS/3pK+MHrJSj3Zxd3KU3rlfL3qrZilYKJNqztA9OQacr1AwoN
# cHbKBLbsQAhBnIB34zxf52bDpIO3NJlfIaTE/xrweLoQ71lzCHkD7A4As1Bs076I
# u+mA6cQzsYYH/Cbl1icwQ6C65rU4V9NQhNUwgrx9rGQ//h890Q8JdjLLw0nV+ayQ
# 2Fbkd242o9kH82RZsH3HEyqjAB5a8+Ae2nPIPc8sZU6ZE7iRrRZywRmrKDp5+Tcm
# JX9MRff241UaOBs4NmHOyke8oU1TYrkxh+YeHgfWo5tTgkoSMoayqoDpHOLJs+qG
# 8Tvh8SnifW2Jj3+ii11TS8/FGngEaNAWrbyfNrC69oKpRQXY9bGH6jn9NEJv9weF
# xhTwyvx9OJLXmRGbAUXN1U9nf4lXezky6Uh/cgjkVd6CGUAf0K+Jw+GE/5VpIVbc
# Nr9rNE50Sbmy/4RTCEGvOq3GhjITbCa4crCzTTHgYYjHs1NbOc6brH+eKpWLtr+b
# Gecy9CrwQyx7S/BfYJ+ozst7+yZtG2wR461uckFu0t+gCwLdN0A6cFtSRtR8bvxV
# FyWwTtgMMFRuBa3vmUOTnfKLsLefRaQcVTgRnzeLzdpt32cdYKp+dhr2ogc+qM6K
# 4CBI5/j4VFyC4QFeUP2YAidLtvpXRRo3AgMBAAGjggI1MIICMTAOBgNVHQ8BAf8E
# BAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNlBKbAPD2Ns72nX9c0p
# nqRIajDmMFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRwOi8v
# d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wGQYJ
# KwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME
# GDAWgBTIftJqhSobyhmYBAcnz1AQT2ioojCBhAYDVR0fBH0wezB5oHegdYZzaHR0
# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSWRl
# bnRpdHklMjBWZXJpZmljYXRpb24lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRo
# b3JpdHklMjAyMDIwLmNybDCBwwYIKwYBBQUHAQEEgbYwgbMwgYEGCCsGAQUFBzAC
# hnVodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29m
# dCUyMElkZW50aXR5JTIwVmVyaWZpY2F0aW9uJTIwUm9vdCUyMENlcnRpZmljYXRl
# JTIwQXV0aG9yaXR5JTIwMjAyMC5jcnQwLQYIKwYBBQUHMAGGIWh0dHA6Ly9vbmVv
# Y3NwLm1pY3Jvc29mdC5jb20vb2NzcDANBgkqhkiG9w0BAQwFAAOCAgEAfyUqnv7U
# q+rdZgrbVyNMul5skONbhls5fccPlmIbzi+OwVdPQ4H55v7VOInnmezQEeW4LqK0
# wja+fBznANbXLB0KrdMCbHQpbLvG6UA/Xv2pfpVIE1CRFfNF4XKO8XYEa3oW8oVH
# +KZHgIQRIwAbyFKQ9iyj4aOWeAzwk+f9E5StNp5T8FG7/VEURIVWArbAzPt9ThVN
# 3w1fAZkF7+YU9kbq1bCR2YD+MtunSQ1Rft6XG7b4e0ejRA7mB2IoX5hNh3UEauY0
# byxNRG+fT2MCEhQl9g2i2fs6VOG19CNep7SquKaBjhWmirYyANb0RJSLWjinMLXN
# OAga10n8i9jqeprzSMU5ODmrMCJE12xS/NWShg/tuLjAsKP6SzYZ+1Ry358ZTFcx
# 0FS/mx2vSoU8s8HRvy+rnXqyUJ9HBqS0DErVLjQwK8VtsBdekBmdTbQVoCgPCqr+
# PDPB3xajYnzevs7eidBsM71PINK2BoE2UfMwxCCX3mccFgx6UsQeRSdVVVNSyALQ
# e6PT12418xon2iDGE81OGCreLzDcMAZnrUAx4XQLUz6ZTl65yPUiOh3k7Yww94lD
# f+8oG2oZmDh5O1Qe38E+M3vhKwmzIeoB1dVLlz4i3IpaDcR+iuGjH2TdaC1ZOmBX
# iCRKJLj4DT2uhJ04ji+tHD6n58vhavFIrmcxghcyMIIXLgIBATBxMFoxCzAJBgNV
# BAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMT
# Ik1pY3Jvc29mdCBJRCBWZXJpZmllZCBDUyBBT0MgQ0EgMDMCEzMABEw+Z+ppKDrD
# pxoAAAAETD4wDQYJYIZIAWUDBAIBBQCgXjAQBgorBgEEAYI3AgEMMQIwADAZBgkq
# hkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAvBgkqhkiG9w0BCQQxIgQg5A2rcp8qiO3/
# VGCuwk+Ygcj+48HXYz0LMIAiW3TH73kwDQYJKoZIhvcNAQEBBQAEggGAC+jiVcrY
# T+ZcrxqL5wDOVZKyDMI7CaxFjx6eyuUsN6vj6Dze7uH2FANyuT3uaRWF11Zr/Yay
# +Ru41iRunjeXsrBI2Ps7ZKo3/p55A8Xh3zyJSKoE/X62smHEOVGR/QI55aWnHQ49
# SQehog/Q+Z6OLJEpgM9fFOABaeb5KWJ5ry5faU4l5ROSx9sy9L4kAhhlMZLtrixD
# JSbEY0MqH4vUSG/mBzGVKpIle6YKHbdMni2kvoiNJcexaQvhoxRtXfIa6Kljq2+v
# q+e+0Uqr+WHZcslNMLIj85cjoJ/3w2UhoWnN8TK5CKLqBVF9utKjT5vyEFiHYwRG
# yvhTJqEQqi4GkbMUV5lU5xiJbKqUvB3hm9cqYZhKIvf3jFug7gf1I3wFPYlwvnmK
# jXIwIzbfJU+EyNO6gklq7JHww1nhgADnHn8Cro3Mcij5uPrb7XUwdjkW1pLj7Ert
# 7BH963Gaf1eWQQRIjWwQ6ddaMu62opGAMa0wcocbxmGCLNAstyKcBJTmoYIUsjCC
# FK4GCisGAQQBgjcDAwExghSeMIIUmgYJKoZIhvcNAQcCoIIUizCCFIcCAQMxDzAN
# BglghkgBZQMEAgEFADCCAWoGCyqGSIb3DQEJEAEEoIIBWQSCAVUwggFRAgEBBgor
# BgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAEIFsyuagEcv//7ktC38H4gbVoP57b
# 7HFogmyHdLTOw6J/AgZqcNO9nN8YEzIwMjYwODA2MTgyNjI0LjI3NlowBIACAfSg
# gemkgeYwgeMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTAr
# BgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUG
# A1UECxMeblNoaWVsZCBUU1MgRVNOOjdCMUEtMDVFMC1EOTQ3MTUwMwYDVQQDEyxN
# aWNyb3NvZnQgUHVibGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhvcml0eaCCDykw
# ggeCMIIFaqADAgECAhMzAAAABeXPD/9mLsmHAAAAAAAFMA0GCSqGSIb3DQEBDAUA
# MHcxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
# SDBGBgNVBAMTP01pY3Jvc29mdCBJZGVudGl0eSBWZXJpZmljYXRpb24gUm9vdCBD
# ZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAyMDAeFw0yMDExMTkyMDMyMzFaFw0zNTEx
# MTkyMDQyMzFaMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
# cG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMgUlNBIFRpbWVzdGFt
# cGluZyBDQSAyMDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnnzn
# UmP94MWfBX1jtQYioxwe1+eXM9ETBb1lRkd3kcFdcG9/sqtDlwxKoVIcaqDb+omF
# io5DHC4RBcbyQHjXCwMk/l3TOYtgoBjxnG/eViS4sOx8y4gSq8Zg49REAf5huXhI
# kQRKe3Qxs8Sgp02KHAznEa/Ssah8nWo5hJM1xznkRsFPu6rfDHeZeG1Wa1wISvlk
# pOQooTULFm809Z0ZYlQ8Lp7i5F9YciFlyAKwn6yjN/kR4fkquUWfGmMopNq/B8U/
# pdoZkZZQbxNlqJOiBGgCWpx69uKqKhTPVi3gVErnc/qi+dR8A2MiAz0kN0nh7SqI
# NGbmw5OIRC0EsZ31WF3Uxp3GgZwetEKxLms73KG/Z+MkeuaVDQQheangOEMGJ4pQ
# ZH55ngI0Tdy1bi69INBV5Kn2HVJo9XxRYR/JPGAaM6xGl57Ei95HUw9NV/uC3yFj
# rhc087qLJQawSC3xzY/EXzsT4I7sDbxOmM2rl4uKK6eEpurRduOQ2hTkmG1hSuWY
# BunFGNv21Kt4N20AKmbeuSnGnsBCd2cjRKG79+TX+sTehawOoxfeOO/jR7wo3liw
# kGdzPJYHgnJ54UxbckF914AqHOiEV7xTnD1a69w/UTxwjEugpIPMIIE67SFZ2PMo
# 27xjlLAHWW3l1CEAFjLNHd3EQ79PUr8FUXetXr0CAwEAAaOCAhswggIXMA4GA1Ud
# DwEB/wQEAwIBhjAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQUa2koOjUvSGNA
# z3vYr0npPtk92yEwVAYDVR0gBE0wSzBJBgRVHSAAMEEwPwYIKwYBBQUHAgEWM2h0
# dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0
# bTATBgNVHSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMA
# QTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFMh+0mqFKhvKGZgEByfPUBBP
# aKiiMIGEBgNVHR8EfTB7MHmgd6B1hnNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
# cGtpb3BzL2NybC9NaWNyb3NvZnQlMjBJZGVudGl0eSUyMFZlcmlmaWNhdGlvbiUy
# MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMjAuY3JsMIGUBggr
# BgEFBQcBAQSBhzCBhDCBgQYIKwYBBQUHMAKGdWh0dHA6Ly93d3cubWljcm9zb2Z0
# LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwSWRlbnRpdHklMjBWZXJpZmlj
# YXRpb24lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDIwLmNy
# dDANBgkqhkiG9w0BAQwFAAOCAgEAX4h2x35ttVoVdedMeGj6TuHYRJklFaW4sTQ5
# r+k77iB79cSLNe+GzRjv4pVjJviceW6AF6ycWoEYR0LYhaa0ozJLU5Yi+LCmcrdo
# vkl53DNt4EXs87KDogYb9eGEndSpZ5ZM74LNvVzY0/nPISHz0Xva71QjD4h+8z2X
# MOZzY7YQ0Psw+etyNZ1CesufU211rLslLKsO8F2aBs2cIo1k+aHOhrw9xw6JCWON
# NboZ497mwYW5EfN0W3zL5s3ad4Xtm7yFM7Ujrhc0aqy3xL7D5FR2J7x9cLWMq7eb
# 0oYioXhqV2tgFqbKHeDick+P8tHYIFovIP7YG4ZkJWag1H91KlELGWi3SLv10o4K
# Gag42pswjybTi4toQcC/irAodDW8HNtX+cbz0sMptFJK+KObAnDFHEsukxD+7jFf
# EV9Hh/+CSxKRsmnuiovCWIOb+H7DRon9TlxydiFhvu88o0w35JkNbJxTk4MhF/Kg
# aXn0GxdH8elEa2Imq45gaa8D+mTm8LWVydt4ytxYP/bqjN49D9NZ81coE6aQWm88
# TwIf4R4YZbOpMKN0CyejaPNN41LGXHeCUMYmBx3PkP8ADHD1J2Cr/6tjuOOCztfp
# +o9Nc+ZoIAkpUcA/X2gSMkgHAPUvIdtoSAHEUKiBhI6JQivRepyvWcl+JYbYbBh7
# pmgAXVswggefMIIFh6ADAgECAhMzAAAAWXzacemNXvXAAAAAAABZMA0GCSqGSIb3
# DQEBDAUAMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
# YXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMgUlNBIFRpbWVzdGFtcGlu
# ZyBDQSAyMDIwMB4XDTI2MDEwODE4NTkwMVoXDTI3MDEwNzE4NTkwMVowgeMxCzAJ
# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jv
# c29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMeblNoaWVs
# ZCBUU1MgRVNOOjdCMUEtMDVFMC1EOTQ3MTUwMwYDVQQDEyxNaWNyb3NvZnQgUHVi
# bGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEB
# BQADggIPADCCAgoCggIBAKYu5/40eEX+hT+5jFa146bid3dA4LnXYntvkP3CGw4L
# GARFhnvLMSJ/VtsubzDaeFnm7yb2KSM70WmHQprdCVqpvUH7l0uB4jNw7urLoAR9
# kKHLE0VlMlDStDSxUBI3qwsdrjvdmvV0k+9/njuDEiSlzJTf7Dowd1K3bO4beRya
# FhR+Y8tymECOqlOAffYrG2wZdVM51+QSBSe+PEykr8C6OnnqSipuF8fZvCb6/huk
# 0Zm6ZwsaixSHIAT2IEGvS7c63Im8jV3a8R0K6i2yiw0NNlnTSpwy/Zfv7iwsLBwh
# fbjBTn+XOl6mPzDXQQ3V+SRP9xXbGKOsBTxzGid7aKAHw3o4Ahl9UGWLH9kNP3VU
# okE6JYkjlfpuUGZ6gQyqDewfxD4VoYIlopt4HZ0xQvqajuJx+cr8LR/IZ56gLLmw
# yMzde5+vtjBoilry/gSZwVGwgkvkIgpKPBQHGsSB0y3szr7Y7wEb6v0yZal1XUvW
# nnz3inTaSWsCFrLPVwVmXy3ncY5/d25VpOkht+m697GWNbvsNOhAOHRaftE9j/hh
# koM6RsyJfBLnhqMcA/wcavf5oj5NeyRQdGZeLKcls9csKS3sBUzPidxx2iiNH9CP
# aDq/bLJEOXasYohXMnRinu+fUk81s8VO7DQSF6ffn5oqSHoV8lf1Ax6u+kdShb8B
# AgMBAAGjggHLMIIBxzAdBgNVHQ4EFgQUj5bnC18D0vlnSRhCOiODGGuXNnYwHwYD
# VR0jBBgwFoAUa2koOjUvSGNAz3vYr0npPtk92yEwbAYDVR0fBGUwYzBhoF+gXYZb
# aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIw
# UHVibGljJTIwUlNBJTIwVGltZXN0YW1waW5nJTIwQ0ElMjAyMDIwLmNybDB5Bggr
# BgEFBQcBAQRtMGswaQYIKwYBBQUHMAKGXWh0dHA6Ly93d3cubWljcm9zb2Z0LmNv
# bS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwUHVibGljJTIwUlNBJTIwVGltZXN0
# YW1waW5nJTIwQ0ElMjAyMDIwLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQM
# MAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDBmBgNVHSAEXzBdMFEGDCsGAQQB
# gjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
# cGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wCAYGZ4EMAQQCMA0GCSqGSIb3DQEB
# DAUAA4ICAQBEMhzC/ZcjpG/zURE7z2Yp5vrUxUjsE5Xa3t/2RGvESwvbmsk3bLHh
# SFAajgo2XQ8xoGDP3sUhKCLPeICSbkVv6V8sSp8fJ8Jos6yrawf2YVis8tcV+OO7
# U9S6JGPQzpmPncfzQc4ne1fqZ4+HiKabIDEoFdddQT2Egkk9fzxCY/EZ52avJ27d
# SfrI/IDmyn9V10O3iQpg2F+C9vNTrk7nVgoDoHa9+Q3pYr0IHGnSmt5irgGT436z
# o5WnXP8FxMhswH1aiyiSZiVzhor10C9C52cP3C8/PEoMKUXstLjoPO0TMkeW/1Fr
# 186KXD45QRgBo0xImgtWTdzWFnlD+p7+iDBIuSrNcRXDRYuq/aYZaDhWSI0SYdPI
# WVh5XvXuWA31a8oQ0SO+oPa3Nk80k0864wiiyJ1KsbSnaaefg9vspeghrpY8ljCw
# xfCUtx5HQRNgAJOI8IKACK4d014Mk0hlRO0lQVRHegqIg29K6Xqkc360W2ZJGUcs
# tlKokkVj6KAHjGyrLRPzepYfiZUJq4gXyxbpvKb1XJ2FN2682aUoNXo9RyRK1ch0
# f66k6+yj88kzvuC7+vJWtNDs/UpIM6Hhm0kU64JUJ7MMEQcAc7kpft7Gm7YeRK+o
# KgqUgYXCfmzbX8nJXJZnPa8ADWVsIqsuNAxCI0CZXkULofqo5Be6zzGCA9QwggPQ
# AgEBMHgwYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
# dGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5n
# IENBIDIwMjACEzMAAABZfNpx6Y1e9cAAAAAAAFkwDQYJYIZIAWUDBAIBBQCgggEt
# MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQglXDm
# IjfhGrviNTbuh706r3YbcUgFALhI+vVjI2iLe/kwgd0GCyqGSIb3DQEJEAIvMYHN
# MIHKMIHHMIGgBCDLRbqx24bpscXEJ+Hjj9xrcUVw7R8OyyMfSB2YGK3+vDB8MGWk
# YzBhMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
# MTIwMAYDVQQDEylNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lc3RhbXBpbmcgQ0Eg
# MjAyMAITMwAAAFl82nHpjV71wAAAAAAAWTAiBCB1aX40x4EirkYBwb/Wmi2daEK/
# eiVzxDo2pRHu17MaFjANBgkqhkiG9w0BAQsFAASCAgAbcusH6cV3biUkYztZYGkX
# XgkD+diHlmZs8BpLhlKR3bKoJ6ZOHrQ9k0Xy+gHEAaLF2EjttAsOaMrnsm4+hQf/
# lWr5ayTF8tz27C5z16REzRRGPVrMYcJWcGyaPcHfvvdKdUlou36Yd/scX/Drdb1d
# xLedb4qi4uT2waVLzlgKHmu7NAoMfQvIGyxtujiHnlf7Di6U0AdtRSoHz27nJqWu
# J5AFFluV0+3+Ih0zocZZrEr/mrCeG8iYjMPAyCR03dOi83kffsr+yYM3DBjre0Wy
# Zy/AO3wN/zgGmmgikeqI6ZS2c+jS5LaZcTvr3OTJd66OrYiqo2cfNOX2Wz9vSROw
# vbObULKk7dqL2s4mp7xQsf4aFtPATbB4etFkRcX7Gtl+oJegmhc7d0lB1CycRIOQ
# ovlAgd9romGdzGJkjW4PfQlDoWi/15IIFVFHH4GDf5ZQNOCs9qMcyTyby8ZWNAOa
# /o2+cf3ksZ/fq7xAg5gO7DcNr0JtcJ6Hnv48hnZrcr0OOGdZyZ3KpCjyxqijEYW5
# Oh3djvwvcxrCLnqtAo/JUqDx/q0AvXLtSSkjnCNrvVNNHrMv3Bi+hGdD2mtUe+Mw
# eqaX5ox5kBQRxdiLaevPu2b8yAOmO/k7DivCvHFNyOtT2LNIdbL0RUMvUOpDaQIm
# CEOw4+lH/x3V/NeAzitvEQ==
# SIG # End signature block