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. .PARAMETER Id Specifies the ID of the publishing task to be updated. The ID must be a valid GUID. .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 "\\server\share" 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. .NOTES Function : Set-AppVentiXPublishingTask Author : John Billekens Copyright: (c) John Billekens Consultancy & AppVentiX Version : 2026.130.1000 Requires : Valid AppVentiX license #> function Set-AppVentiXPublishingTask { [CmdletBinding()] param ( [Parameter(Mandatory)] [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 ) if (Test-AppVentiXIsLicensed -ConfigShare $ConfigShare) { $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 $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"))" $isChanged = $false 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 -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 { $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)) { Write-Verbose "MachineGroupFriendlyname was changed to `"$MachineGroupFriendlyname`"" Write-Verbose "Checking the machine group `"$MachineGroupFriendlyname`"" if (([String]::IsNullOrEmpty($MachineGroupFriendlyname)) -or $MachineGroupFriendlyname.Count -eq 0 -or ($MachineGroupFriendlyname -contains 'All Machine Groups')) { $MachineGroupFriendlyname = @('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)" } $MachineGroupFriendlyname = @($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 ($MachineGroupFriendlyname.Count -gt 0) { foreach ($mgfn in $MachineGroupFriendlyname) { $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 `"$($MachineGroupFriendlyname -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" } } elseif (($publishingTask | Measure-Object).Count -gt 1) { Write-Error "Multiple Publishing Tasks with ID `"$Id`" found while expecting only one!" -ErrorAction Stop } else { Write-Error "The Publishing Task with ID `"$Id`" does not exist!" -ErrorAction Stop } if ($isChanged) { Write-Verbose "Saving the Publishing Tasks file" try { $publishingTasksXml.Save($publishingTasksFullname) Write-AppVentiXLogEntry -Feature Application -Action $($MyInvocation.MyCommand.Name) -Details "Changed the Publishing Task, Package name: `"$($publishingTask.Name)`", Path: `"$($publishingTask.Path)`"" -ConfigShare $ConfigShare } catch { Write-Error "Could not save the Publishing Tasks file, $($_.Exception.Message)" throw "Could not save the Publishing Tasks file, $($_.Exception.Message)" } } else { Write-Verbose "No changes were made to the Publishing Task with ID `"$Id`"" } } else { Write-Warning 'AppVentiX is not licensed!' } } # SIG # Begin signature block # MIImdwYJKoZIhvcNAQcCoIImaDCCJmQCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBKGmDkuYIckU2i # Q5jJBioPfO0U4Mi0Dn/q8GpaneuoVKCCIAowggYUMIID/KADAgECAhB6I67aU2mW # D5HIPlz0x+M/MA0GCSqGSIb3DQEBDAUAMFcxCzAJBgNVBAYTAkdCMRgwFgYDVQQK # Ew9TZWN0aWdvIExpbWl0ZWQxLjAsBgNVBAMTJVNlY3RpZ28gUHVibGljIFRpbWUg # U3RhbXBpbmcgUm9vdCBSNDYwHhcNMjEwMzIyMDAwMDAwWhcNMzYwMzIxMjM1OTU5 # WjBVMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSwwKgYD # VQQDEyNTZWN0aWdvIFB1YmxpYyBUaW1lIFN0YW1waW5nIENBIFIzNjCCAaIwDQYJ # KoZIhvcNAQEBBQADggGPADCCAYoCggGBAM2Y2ENBq26CK+z2M34mNOSJjNPvIhKA # VD7vJq+MDoGD46IiM+b83+3ecLvBhStSVjeYXIjfa3ajoW3cS3ElcJzkyZlBnwDE # JuHlzpbN4kMH2qRBVrjrGJgSlzzUqcGQBaCxpectRGhhnOSwcjPMI3G0hedv2eNm # GiUbD12OeORN0ADzdpsQ4dDi6M4YhoGE9cbY11XxM2AVZn0GiOUC9+XE0wI7CQKf # OUfigLDn7i/WeyxZ43XLj5GVo7LDBExSLnh+va8WxTlA+uBvq1KO8RSHUQLgzb1g # bL9Ihgzxmkdp2ZWNuLc+XyEmJNbD2OIIq/fWlwBp6KNL19zpHsODLIsgZ+WZ1AzC # s1HEK6VWrxmnKyJJg2Lv23DlEdZlQSGdF+z+Gyn9/CRezKe7WNyxRf4e4bwUtrYE # 2F5Q+05yDD68clwnweckKtxRaF0VzN/w76kOLIaFVhf5sMM/caEZLtOYqYadtn03 # 4ykSFaZuIBU9uCSrKRKTPJhWvXk4CllgrwIDAQABo4IBXDCCAVgwHwYDVR0jBBgw # FoAU9ndq3T/9ARP/FqFsggIv0Ao9FCUwHQYDVR0OBBYEFF9Y7UwxeqJhQo1SgLqz # YZcZojKbMA4GA1UdDwEB/wQEAwIBhjASBgNVHRMBAf8ECDAGAQH/AgEAMBMGA1Ud # JQQMMAoGCCsGAQUFBwMIMBEGA1UdIAQKMAgwBgYEVR0gADBMBgNVHR8ERTBDMEGg # P6A9hjtodHRwOi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNUaW1lU3Rh # bXBpbmdSb290UjQ2LmNybDB8BggrBgEFBQcBAQRwMG4wRwYIKwYBBQUHMAKGO2h0 # dHA6Ly9jcnQuc2VjdGlnby5jb20vU2VjdGlnb1B1YmxpY1RpbWVTdGFtcGluZ1Jv # b3RSNDYucDdjMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTAN # BgkqhkiG9w0BAQwFAAOCAgEAEtd7IK0ONVgMnoEdJVj9TC1ndK/HYiYh9lVUacah # RoZ2W2hfiEOyQExnHk1jkvpIJzAMxmEc6ZvIyHI5UkPCbXKspioYMdbOnBWQUn73 # 3qMooBfIghpR/klUqNxx6/fDXqY0hSU1OSkkSivt51UlmJElUICZYBodzD3M/SFj # eCP59anwxs6hwj1mfvzG+b1coYGnqsSz2wSKr+nDO+Db8qNcTbJZRAiSazr7KyUJ # Go1c+MScGfG5QHV+bps8BX5Oyv9Ct36Y4Il6ajTqV2ifikkVtB3RNBUgwu/mSiSU # ice/Jp/q8BMk/gN8+0rNIE+QqU63JoVMCMPY2752LmESsRVVoypJVt8/N3qQ1c6F # ibbcRabo3azZkcIdWGVSAdoLgAIxEKBeNh9AQO1gQrnh1TA8ldXuJzPSuALOz1Uj # b0PCyNVkWk7hkhVHfcvBfI8NtgWQupiaAeNHe0pWSGH2opXZYKYG4Lbukg7HpNi/ # KqJhue2Keak6qH9A8CeEOB7Eob0Zf+fU+CCQaL0cJqlmnx9HCDxF+3BLbUufrV64 # EbTI40zqegPZdA+sXCmbcZy6okx/SjwsusWRItFA3DE8MORZeFb6BmzBtqKJ7l93 # 9bbKBy2jvxcJI98Va95Q5JnlKor3m0E7xpMeYRriWklUPsetMSf2NvUQa/E5vVye # fQIwggZFMIIELaADAgECAhAIMk+dt9qRb2Pk8qM8Xl1RMA0GCSqGSIb3DQEBCwUA # MFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMu # QS4xJDAiBgNVBAMTG0NlcnR1bSBDb2RlIFNpZ25pbmcgMjAyMSBDQTAeFw0yNDA0 # MDQxNDA0MjRaFw0yNzA0MDQxNDA0MjNaMGsxCzAJBgNVBAYTAk5MMRIwEAYDVQQH # DAlTY2hpam5kZWwxIzAhBgNVBAoMGkpvaG4gQmlsbGVrZW5zIENvbnN1bHRhbmN5 # MSMwIQYDVQQDDBpKb2huIEJpbGxla2VucyBDb25zdWx0YW5jeTCCAaIwDQYJKoZI # hvcNAQEBBQADggGPADCCAYoCggGBAMslntDbSQwHZXwFhmibivbnd0Qfn6sqe/6f # os3pKzKxEsR907RkDMet2x6RRg3eJkiIr3TFPwqBooyXXgK3zxxpyhGOcuIqyM9J # 28DVf4kUyZHsjGO/8HFjrr3K1hABNUszP0o7H3o6J31eqV1UmCXYhQlNoW9FOmRC # 1amlquBmh7w4EKYEytqdmdOBavAD5Xq4vLPxNP6kyA+B2YTtk/xM27TghtbwFGKn # u9Vwnm7dFcpLxans4ONt2OxDQOMA5NwgcUv/YTpjhq9qoz6ivG55NRJGNvUXsM3w # 2o7dR6Xh4MuEGrTSrOWGg2A5EcLH1XqQtkF5cZnAPM8W/9HUp8ggornWnFVQ9/6M # ga+ermy5wy5XrmQpN+x3u6tit7xlHk1Hc+4XY4a4ie3BPXG2PhJhmZAn4ebNSBwN # Hh8z7WTT9X9OFERepGSytZVeEP7hgyptSLcuhpwWeR4QdBb7dV++4p3PsAUQVHFp # wkSbrRTv4EiJ0Lcz9P1HPGFoHiFAQQIDAQABo4IBeDCCAXQwDAYDVR0TAQH/BAIw # ADA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY2NzY2EyMDIxLmNybC5jZXJ0dW0u # cGwvY2NzY2EyMDIxLmNybDBzBggrBgEFBQcBAQRnMGUwLAYIKwYBBQUHMAGGIGh0 # dHA6Ly9jY3NjYTIwMjEub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRw # Oi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY2NzY2EyMDIxLmNlcjAfBgNVHSMEGDAW # gBTddF1MANt7n6B0yrFu9zzAMsBwzTAdBgNVHQ4EFgQUO6KtBpOBgmrlANVAnyiQ # C6W6lJwwSwYDVR0gBEQwQjAIBgZngQwBBAEwNgYLKoRoAYb2dwIFAQQwJzAlBggr # BgEFBQcCARYZaHR0cHM6Ly93d3cuY2VydHVtLnBsL0NQUzATBgNVHSUEDDAKBggr # BgEFBQcDAzAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADggIBAEQsN8wg # PMdWVkwHPPTN+jKpdns5AKVFjcn00psf2NGVVgWWNQBIQc9lEuTBWb54IK6Ga3hx # QRZfnPNo5HGl73YLmFgdFQrFzZ1lnaMdIcyh8LTWv6+XNWfoyCM9wCp4zMIDPOs8 # LKSMQqA/wRgqiACWnOS4a6fyd5GUIAm4CuaptpFYr90l4Dn/wAdXOdY32UhgzmSu # xpUbhD8gVJUaBNVmQaRqeU8y49MxiVrUKJXde1BCrtR9awXbqembc7Nqvmi60tYK # lD27hlpKtj6eGPjkht0hHEsgzU0Fxw7ZJghYG2wXfpF2ziN893ak9Mi/1dmCNmor # GOnybKYfT6ff6YTCDDNkod4egcMZdOSv+/Qv+HAeIgEvrxE9QsGlzTwbRtbm6gwY # YcVBs/SsVUdBn/TSB35MMxRhHE5iC3aUTkDbceo/XP3uFhVL4g2JZHpFfCSu2TQr # rzRn2sn07jfMvzeHArCOJgBW1gPqR3WrJ4hUxL06Rbg1gs9tU5HGGz9KNQMfQFQ7 # 0Wz7UIhezGcFcRfkIfSkMmQYYpsc7rfzj+z0ThfDVzzJr2dMOFsMlfj1T6l22GBq # 9XQx0A4lcc5Fl9pRxbOuHHWFqIBD/BCEhwniOCySzqENd2N+oz8znKooSISStnkN # aYXt6xblJF2dx9Dn89FK7d1IquNxOwt0tI5dMIIGYjCCBMqgAwIBAgIRAKQpO24e # 3denNAiHrXpOtyQwDQYJKoZIhvcNAQEMBQAwVTELMAkGA1UEBhMCR0IxGDAWBgNV # BAoTD1NlY3RpZ28gTGltaXRlZDEsMCoGA1UEAxMjU2VjdGlnbyBQdWJsaWMgVGlt # ZSBTdGFtcGluZyBDQSBSMzYwHhcNMjUwMzI3MDAwMDAwWhcNMzYwMzIxMjM1OTU5 # WjByMQswCQYDVQQGEwJHQjEXMBUGA1UECBMOV2VzdCBZb3Jrc2hpcmUxGDAWBgNV # BAoTD1NlY3RpZ28gTGltaXRlZDEwMC4GA1UEAxMnU2VjdGlnbyBQdWJsaWMgVGlt # ZSBTdGFtcGluZyBTaWduZXIgUjM2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC # CgKCAgEA04SV9G6kU3jyPRBLeBIHPNyUgVNnYayfsGOyYEXrn3+SkDYTLs1crcw/ # ol2swE1TzB2aR/5JIjKNf75QBha2Ddj+4NEPKDxHEd4dEn7RTWMcTIfm492TW22I # 8LfH+A7Ehz0/safc6BbsNBzjHTt7FngNfhfJoYOrkugSaT8F0IzUh6VUwoHdYDpi # ln9dh0n0m545d5A5tJD92iFAIbKHQWGbCQNYplqpAFasHBn77OqW37P9BhOASdmj # p3IijYiFdcA0WQIe60vzvrk0HG+iVcwVZjz+t5OcXGTcxqOAzk1frDNZ1aw8nFhG # EvG0ktJQknnJZE3D40GofV7O8WzgaAnZmoUn4PCpvH36vD4XaAF2CjiPsJWiY/j2 # xLsJuqx3JtuI4akH0MmGzlBUylhXvdNVXcjAuIEcEQKtOBR9lU4wXQpISrbOT8ux # +96GzBq8TdbhoFcmYaOBZKlwPP7pOp5Mzx/UMhyBA93PQhiCdPfIVOCINsUY4U23 # p4KJ3F1HqP3H6Slw3lHACnLilGETXRg5X/Fp8G8qlG5Y+M49ZEGUp2bneRLZoyHT # yynHvFISpefhBCV0KdRZHPcuSL5OAGWnBjAlRtHvsMBrI3AAA0Tu1oGvPa/4yeei # Ayu+9y3SLC98gDVbySnXnkujjhIh+oaatsk/oyf5R2vcxHahajMCAwEAAaOCAY4w # ggGKMB8GA1UdIwQYMBaAFF9Y7UwxeqJhQo1SgLqzYZcZojKbMB0GA1UdDgQWBBSI # YYyhKjdkgShgoZsx0Iz9LALOTzAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIw # ADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDBKBgNVHSAEQzBBMDUGDCsGAQQBsjEB # AgEDCDAlMCMGCCsGAQUFBwIBFhdodHRwczovL3NlY3RpZ28uY29tL0NQUzAIBgZn # gQwBBAIwSgYDVR0fBEMwQTA/oD2gO4Y5aHR0cDovL2NybC5zZWN0aWdvLmNvbS9T # ZWN0aWdvUHVibGljVGltZVN0YW1waW5nQ0FSMzYuY3JsMHoGCCsGAQUFBwEBBG4w # bDBFBggrBgEFBQcwAoY5aHR0cDovL2NydC5zZWN0aWdvLmNvbS9TZWN0aWdvUHVi # bGljVGltZVN0YW1waW5nQ0FSMzYuY3J0MCMGCCsGAQUFBzABhhdodHRwOi8vb2Nz # cC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOCAYEAAoE+pIZyUSH5ZakuPVKK # 4eWbzEsTRJOEjbIu6r7vmzXXLpJx4FyGmcqnFZoa1dzx3JrUCrdG5b//LfAxOGy9 # Ph9JtrYChJaVHrusDh9NgYwiGDOhyyJ2zRy3+kdqhwtUlLCdNjFjakTSE+hkC9F5 # ty1uxOoQ2ZkfI5WM4WXA3ZHcNHB4V42zi7Jk3ktEnkSdViVxM6rduXW0jmmiu71Z # pBFZDh7Kdens+PQXPgMqvzodgQJEkxaION5XRCoBxAwWwiMm2thPDuZTzWp/gUFz # i7izCmEt4pE3Kf0MOt3ccgwn4Kl2FIcQaV55nkjv1gODcHcD9+ZVjYZoyKTVWb4V # qMQy/j8Q3aaYd/jOQ66Fhk3NWbg2tYl5jhQCuIsE55Vg4N0DUbEWvXJxtxQQaVR5 # xzhEI+BjJKzh3TQ026JxHhr2fuJ0mV68AluFr9qshgwS5SpN5FFtaSEnAwqZv3IS # +mlG50rK7W3qXbWwi4hmpylUfygtYLEdLQukNEX1jiOKMIIGgjCCBGqgAwIBAgIQ # NsKwvXwbOuejs902y8l1aDANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UEBhMCVVMx # EzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYD # VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBS # U0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMjEwMzIyMDAwMDAwWhcNMzgw # MTE4MjM1OTU5WjBXMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1p # dGVkMS4wLAYDVQQDEyVTZWN0aWdvIFB1YmxpYyBUaW1lIFN0YW1waW5nIFJvb3Qg # UjQ2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAiJ3YuUVnnR3d6Lkm # gZpUVMB8SQWbzFoVD9mUEES0QUCBdxSZqdTkdizICFNeINCSJS+lV1ipnW5ihkQy # C0cRLWXUJzodqpnMRs46npiJPHrfLBOifjfhpdXJ2aHHsPHggGsCi7uE0awqKggE # /LkYw3sqaBia67h/3awoqNvGqiFRJ+OTWYmUCO2GAXsePHi+/JUNAax3kpqstbl3 # vcTdOGhtKShvZIvjwulRH87rbukNyHGWX5tNK/WABKf+Gnoi4cmisS7oSimgHUI0 # Wn/4elNd40BFdSZ1EwpuddZ+Wr7+Dfo0lcHflm/FDDrOJ3rWqauUP8hsokDoI7D/ # yUVI9DAE/WK3Jl3C4LKwIpn1mNzMyptRwsXKrop06m7NUNHdlTDEMovXAIDGAvYy # nPt5lutv8lZeI5w3MOlCybAZDpK3Dy1MKo+6aEtE9vtiTMzz/o2dYfdP0KWZwZIX # bYsTIlg1YIetCpi5s14qiXOpRsKqFKqav9R1R5vj3NgevsAsvxsAnI8Oa5s2oy25 # qhsoBIGo/zi6GpxFj+mOdh35Xn91y72J4RGOJEoqzEIbW3q0b2iPuWLA911cRxgY # 5SJYubvjay3nSMbBPPFsyl6mY4/WYucmyS9lo3l7jk27MAe145GWxK4O3m3gEFEI # kv7kRmefDR7Oe2T1HxAnICQvr9sCAwEAAaOCARYwggESMB8GA1UdIwQYMBaAFFN5 # v1qqK0rPVIDh2JvAnfKyA2bLMB0GA1UdDgQWBBT2d2rdP/0BE/8WoWyCAi/QCj0U # JTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zATBgNVHSUEDDAKBggr # BgEFBQcDCDARBgNVHSAECjAIMAYGBFUdIAAwUAYDVR0fBEkwRzBFoEOgQYY/aHR0 # cDovL2NybC51c2VydHJ1c3QuY29tL1VTRVJUcnVzdFJTQUNlcnRpZmljYXRpb25B # dXRob3JpdHkuY3JsMDUGCCsGAQUFBwEBBCkwJzAlBggrBgEFBQcwAYYZaHR0cDov # L29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEADr5lQe1oRLjl # ocXUEYfktzsljOt+2sgXke3Y8UPEooU5y39rAARaAdAxUeiX1ktLJ3+lgxtoLQhn # 5cFb3GF2SSZRX8ptQ6IvuD3wz/LNHKpQ5nX8hjsDLRhsyeIiJsms9yAWnvdYOdEM # q1W61KE9JlBkB20XBee6JaXx4UBErc+YuoSb1SxVf7nkNtUjPfcxuFtrQdRMRi/f # InV/AobE8Gw/8yBMQKKaHt5eia8ybT8Y/Ffa6HAJyz9gvEOcF1VWXG8OMeM7Vy7B # s6mSIkYeYtddU1ux1dQLbEGur18ut97wgGwDiGinCwKPyFO7ApcmVJOtlw9FVJxw # /mL1TbyBns4zOgkaXFnnfzg4qbSvnrwyj1NiurMp4pmAWjR+Pb/SIduPnmFzbSN/ # G8reZCL4fvGlvPFk4Uab/JVCSmj59+/mB2Gn6G/UYOy8k60mKcmaAZsEVkhOFuoj # 4we8CYyaR9vd9PGZKSinaZIkvVjbH/3nlLb0a7SBIkiRzfPfS9T+JesylbHa1LtR # V9U/7m0q7Ma2CQ/t392ioOssXW7oKLdOmMBl14suVFBmbzrt5V5cQPnwtd3UOTpS # 9oCG+ZZheiIvPgkDmA8FzPsnfXW5qHELB43ET7HHFHeRPRYrMBKjkb8/IN7Po0d0 # hQoF4TeMM+zYAJzoKQnVKOLg8pZVPT8wgga5MIIEoaADAgECAhEAmaOACiZVO2Wr # 3G6EprPqOTANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoT # GVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0 # aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0 # d29yayBDQSAyMB4XDTIxMDUxOTA1MzIxOFoXDTM2MDUxODA1MzIxOFowVjELMAkG # A1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIG # A1UEAxMbQ2VydHVtIENvZGUgU2lnbmluZyAyMDIxIENBMIICIjANBgkqhkiG9w0B # AQEFAAOCAg8AMIICCgKCAgEAnSPPBDAjO8FGLOczcz5jXXp1ur5cTbq96y34vuTm # flN4mSAfgLKTvggv24/rWiVGzGxT9YEASVMw1Aj8ewTS4IndU8s7VS5+djSoMcbv # IKck6+hI1shsylP4JyLvmxwLHtSworV9wmjhNd627h27a8RdrT1PH9ud0IF+njvM # k2xqbNTIPsnWtw3E7DmDoUmDQiYi/ucJ42fcHqBkbbxYDB7SYOouu9Tj1yHIohzu # C8KNqfcYf7Z4/iZgkBJ+UFNDcc6zokZ2uJIxWgPWXMEmhu1gMXgv8aGUsRdaCtVD # 2bSlbfsq7BiqljjaCun+RJgTgFRCtsuAEw0pG9+FA+yQN9n/kZtMLK+Wo837Q4QO # ZgYqVWQ4x6cM7/G0yswg1ElLlJj6NYKLw9EcBXE7TF3HybZtYvj9lDV2nT8mFSkc # SkAExzd4prHwYjUXTeZIlVXqj+eaYqoMTpMrfh5MCAOIG5knN4Q/JHuurfTI5XDY # O962WZayx7ACFf5ydJpoEowSP07YaBiQ8nXpDkNrUA9g7qf/rCkKbWpQ5boufUnq # 1UiYPIAHlezf4muJqxqIns/kqld6JVX8cixbd6PzkDpwZo4SlADaCi2JSplKShBS # ND36E/ENVv8urPS0yOnpG4tIoBGxVCARPCg1BnyMJ4rBJAcOSnAWd18Jx5n858JS # qPECAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFN10XUwA # 23ufoHTKsW73PMAywHDNMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79 # MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDAzAwBgNVHR8EKTAn # MCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUF # BwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNv # bTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNh # Mi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93 # d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAdYhYD+WPUCiaU58Q # 7EP89DttyZqGYn2XRDhJkL6P+/T0IPZyxfxiXumYlARMgwRzLRUStJl490L94C9L # GF3vjzzH8Jq3iR74BRlkO18J3zIdmCKQa5LyZ48IfICJTZVJeChDUyuQy6rGDxLU # UAsO0eqeLNhLVsgw6/zOfImNlARKn1FP7o0fTbj8ipNGxHBIutiRsWrhWM2f8pXd # d3x2mbJCKKtl2s42g9KUJHEIiLni9ByoqIUul4GblLQigO0ugh7bWRLDm0CdY9rN # LqyA3ahe8WlxVWkxyrQLjH8ItI17RdySaYayX3PhRSC4Am1/7mATwZWwSD+B7eMc # ZNhpn8zJ+6MTyE6YoEBSRVrs0zFFIHUR08Wk0ikSf+lIe5Iv6RY3/bFAEloMU+vU # BfSouCReZwSLo8WdrDlPXtR0gicDnytO7eZ5827NS2x7gCBibESYkOh1/w1tVxTp # V2Na3PR7nxYVlPu1JPoRZCbH86gc96UTvuWiOruWmyOEMLOGGniR+x+zPF/2DaGg # K2W1eEJfo2qyrBNPvF7wuAyQfiFXLwvWHamoYtPZo0LHuH8X3n9C+xN4YaNjt2yw # zOr+tKyEVAotnyU9vyEVOaIYMk3IeBrmFnn0gbKeTTyYeEEUz/Qwt4HOUBCrW602 # NCmvO1nm+/80nLy5r0AZvCQxaQ4xggXDMIIFvwIBATBqMFYxCzAJBgNVBAYTAlBM # MSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0Nl # cnR1bSBDb2RlIFNpZ25pbmcgMjAyMSBDQQIQCDJPnbfakW9j5PKjPF5dUTANBglg # hkgBZQMEAgEFAKCBhDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3 # DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV # MC8GCSqGSIb3DQEJBDEiBCA+Ya18FIpx42hqfNA0EcIEPlPOtguFELYjmY6XDVTX # 4jANBgkqhkiG9w0BAQEFAASCAYCGRf5OrHrd6Gs11xCWCbijlgTKm/1IG9DQ195M # SGNYcJ/r2IiNJaKoJrmcYzg9iFw54XOv5YgcLK0yESvssj0SuPhrwtc3d16KbfZv # /4rZPvzU1Sj9F9khoWXH+szF/bY9bbp7EjNcUY6dguLa0L8lVcU+wtJfI1MXTyGE # GaTke/z7TN8AIAz2rZzENVzUgt2uedeENlVVqUTmzkVBw4kzO4uv7pcMUPb/xDD4 # MBjipIqC5kg/9ViwtIjT4hJsxwsa40fvdC7/4CojeCL1tQHKuH7946PVoCNWCPzC # gzBVii5Z0NsE56a2BilayDNjAwZbVCpWOy0rG3o9UC0N9//hekXOKkWDBHFywi6D # VaQujkXS5SZNdRKhPA35hvRc0o4jiMAYDeBui6mrYqMg2z5ZAGbNjECDJzk+pFHT # N6IgWWXL0aIzmH78iac0dYkXkY9mRMNxptcb+pQw6sWpevsywtH1U2UPiTxtBzE1 # WoTxyid20dWMKI+XCV+ns5di1nqhggMjMIIDHwYJKoZIhvcNAQkGMYIDEDCCAwwC # AQEwajBVMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSww # KgYDVQQDEyNTZWN0aWdvIFB1YmxpYyBUaW1lIFN0YW1waW5nIENBIFIzNgIRAKQp # O24e3denNAiHrXpOtyQwDQYJYIZIAWUDBAICBQCgeTAYBgkqhkiG9w0BCQMxCwYJ # KoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0yNjAxMzAxMTAyNDNaMD8GCSqGSIb3 # DQEJBDEyBDCPKKzQbhdrzaiKwwKkD0q68PAN6AwXxkUPJr9me6YhflrLQY15329U # 2WWjthd96NowDQYJKoZIhvcNAQEBBQAEggIAiVj3O6hE7BIlC70jmYLAVP0oU/pN # Y5b8nnRioUIbvK3sdwtt06O4Qo4LNnz6/Cfgk53OHDSjz0gYPsm67/9TqV34hyt2 # agZrl+D1bAcqxH6AxRFKYjaClgbM3osYAmoL35iv7j6Qvu2DKUW72n5VSrqgu6QA # llP4+lMZSztc++UbvZ1ptR3ahDrlDZFRJwLSXUMXo/r0P7lGeWEzji6lkAD+9EQo # ZlPcF31N6/CiBd5cUzJBXm4DhxfPffJW+aAoM3oWGbZBC751jtFt6RbF6q5ud23w # 9mdiwWItJCAvQKLHo/98WvoLEzVXBwG2nftODGJwVzcNIcDVM69YahVdFx3q8HdV # kJ79bsR6q4j+IO9CrlxIdGiIVAodpKasXTTVjQ/O3JSiW5pxD21bB+fSazTc0J+x # T5TMr0ce9IP1oqpzqocWH6BEN8DqDeIa1H64xi+BBhonyHoclAufHeZp680+P4nS # Xn9tl4pnq4m42VLVS+CPDPVV0ig/dMFKED/Fm29ylKILX4GO4Xto4zjyqk1aDNtI # 8SgJDdSFbfLJbfnrTYTHXEfZKJccu7F2h9Vu08iM5Aa5DRKcKcRfaaCJvopP41L5 # 2CQZRg//A0J8Sj9f5E4Ei0HVEFKVX2UU9yBEF+MC3DG0X3gHxaxXYmtqo81xMPf9 # gUJRibUdRSvoKQQ= # SIG # End signature block |