public/New-AppVentiXGroupPolicyUserSetting.ps1
|
<#
.SYNOPSIS Creates an AppVentiX UserSetting XML file for a Group Policy configuration. .DESCRIPTION Builds and saves an AppVentiX UserSetting XML file that defines a Group Policy configuration, including configured policies, policy elements, and registry entries. Supports three input modes: - AppVentiXParamsFile: ADMX/ADML supplied as file paths, policy data as PSCustomObject array from Get-IvantiWCPolicy -ExportFor AppVentiX. - AppVentiXParamsContent: ADMX/ADML supplied as raw or base64 content strings, policy data as PSCustomObject array. - InputObject: a fully pre-structured PSCustomObject (e.g. from an Ivanti export pipeline). The ADMX and ADML files are saved alongside the XML if they do not already exist at the target path. .PARAMETER FriendlyName Display name for the AppVentiX UserSetting. .PARAMETER Description Optional description for the UserSetting. .PARAMETER ExecutionOrder Execution order for the UserSetting. Defaults to 0. .PARAMETER ProcessAtLogin Whether the policy is applied at login. Defaults to $true. .PARAMETER ProcessAtRefresh Whether the policy is applied at refresh. Defaults to $true. .PARAMETER ProcessAtReconnectAndUnlock Whether the policy is applied at reconnect and unlock. Defaults to $false. .PARAMETER MachineGroupFriendlyName One or more machine group friendly names to apply the setting to. Defaults to 'All Machine Groups'. .PARAMETER AdmxFilePath Path to the ADMX file on disk. The matching ADML file is expected at the same path with .adml extension. Used with the AppVentiXParamsFile parameter set. .PARAMETER AdmxContent Raw or base64-encoded ADMX XML content. Used with the AppVentiXParamsContent parameter set. .PARAMETER AdmxFileName Override for the ADMX filename stored in the XML. Derived from AdmxFilePath if not specified. Defaults to 'CustomPolicy.admx' when using content. .PARAMETER AdmlContent Raw or base64-encoded ADML XML content. Used with the AppVentiXParamsContent parameter set. .PARAMETER AdmlFileName Override for the ADML filename. Defaults to 'CustomPolicy.adml' when using content. .PARAMETER AdmlLanguage Language folder for ADML file storage (e.g. en-US). Defaults to 'en-US'. .PARAMETER PolicyInputObject Array of PSCustomObject items from Get-IvantiWCPolicy -ExportFor AppVentiX (the AppVentiXParams property). Each object must contain: PolicyName, PolicyDisplayName, PolicyKey, PolicyValueName, Enabled, Elements, RegistryEntries. .PARAMETER InputObject Fully pre-structured PSCustomObject containing all policy metadata, ADMX/ADML content and entries. .PARAMETER ConfigShare Path to the AppVentiX config share. Defaults to the module variable. .EXAMPLE $Policies = Get-IvantiWCPolicy -Path 'C:\temp\LAB-BB.xml' -IncludeADMFiles -ExportFor AppVentiX $Policies | ForEach-Object { New-AppVentiXGroupPolicyUserSetting ` -FriendlyName $_.Name ` -AdmxContent $_.ADMXContent ` -AdmxFileName $_.ADMX ` -AdmlContent $_.ADMLContent ` -AdmlFileName $_.ADML ` -PolicyInputObject $_.AppVentiXParams } .LINK Get-AppVentiXUserSettings .LINK New-AppVentiXDriveMappingUserSetting .LINK New-AppVentiXEnvironmentVariableUserSetting .LINK New-AppVentiXPrinterMappingUserSetting .LINK New-AppVentiXRegistryUserSetting .LINK New-AppVentiXShortcutUserSetting .LINK Set-AppVentiXUserSettingFolder .LINK Set-AppVentiXUserSettingsAssignment .NOTES Function : New-AppVentiXGroupPolicyUserSetting Author : John Billekens Copyright : (c) John Billekens Consultancy & AppVentiX Version : 2026.825.1200 #> function New-AppVentiXGroupPolicyUserSetting { [CmdletBinding()] [Alias("New-AppVentiXGroupPolicy")] param ( [Parameter(Mandatory = $true, ParameterSetName = "AppVentiXParamsFile")] [Parameter(Mandatory = $true, ParameterSetName = "AppVentiXParamsContent")] [Parameter(Mandatory = $false, ParameterSetName = "InputObject")] [string]$FriendlyName, [Parameter(Mandatory = $false, ParameterSetName = "AppVentiXParamsFile")] [Parameter(Mandatory = $false, ParameterSetName = "AppVentiXParamsContent")] [Parameter(Mandatory = $false, ParameterSetName = "InputObject")] [string]$Description, [Parameter(Mandatory = $false, ParameterSetName = "AppVentiXParamsFile")] [Parameter(Mandatory = $false, ParameterSetName = "AppVentiXParamsContent")] [Parameter(Mandatory = $false, ParameterSetName = "InputObject")] [int]$ExecutionOrder = 0, [Parameter(Mandatory = $false, ParameterSetName = "AppVentiXParamsFile")] [Parameter(Mandatory = $false, ParameterSetName = "AppVentiXParamsContent")] [Parameter(Mandatory = $false, ParameterSetName = "InputObject")] [bool]$ProcessAtLogin = $true, [Parameter(Mandatory = $false, ParameterSetName = "AppVentiXParamsFile")] [Parameter(Mandatory = $false, ParameterSetName = "AppVentiXParamsContent")] [Parameter(Mandatory = $false, ParameterSetName = "InputObject")] [bool]$ProcessAtRefresh = $true, [Parameter(Mandatory = $false, ParameterSetName = "AppVentiXParamsFile")] [Parameter(Mandatory = $false, ParameterSetName = "AppVentiXParamsContent")] [Parameter(Mandatory = $false, ParameterSetName = "InputObject")] [bool]$ProcessAtReconnectAndUnlock = $false, [Parameter(Mandatory = $false, ParameterSetName = "AppVentiXParamsFile")] [Parameter(Mandatory = $false, ParameterSetName = "AppVentiXParamsContent")] [Parameter(Mandatory = $false, ParameterSetName = "InputObject")] [string[]]$MachineGroupFriendlyName = @("All Machine Groups"), [Parameter(Mandatory = $true, ParameterSetName = "AppVentiXParamsFile")] [ValidateScript({ Test-Path $_ -PathType Leaf })] [string]$AdmxFilePath, [Parameter(Mandatory = $true, ParameterSetName = "AppVentiXParamsContent")] [string]$AdmxContent, [Parameter(Mandatory = $false, ParameterSetName = "AppVentiXParamsContent")] [string]$AdmxFileName, [Parameter(Mandatory = $true, ParameterSetName = "AppVentiXParamsContent")] [string]$AdmlContent, [Parameter(Mandatory = $false, ParameterSetName = "AppVentiXParamsContent")] [string]$AdmlFileName, [Parameter(Mandatory = $false, ParameterSetName = "AppVentiXParamsFile")] [Parameter(Mandatory = $false, ParameterSetName = "AppVentiXParamsContent")] [ValidateSet("en-US", "en-GB", "nl-NL", "fr-FR", "fr-CA", "de-DE", "es-ES", "it-IT")] [string]$AdmlLanguage = "en-US", [Parameter(Mandatory = $true, ParameterSetName = "AppVentiXParamsFile")] [Parameter(Mandatory = $true, ParameterSetName = "AppVentiXParamsContent")] [PSCustomObject[]]$PolicyInputObject = @(), [Parameter(Mandatory = $true, ParameterSetName = "InputObject")] [PSCustomObject]$InputObject, [Parameter(DontShow)] [ValidateNotNullOrEmpty()] [string]$ConfigShare = $Script:AppVentix.ConfigShare ) #region functions function New-GroupPolicyUserSettingXml { [CmdletBinding()] param () $XmlDoc = New-Object System.Xml.XmlDocument $Root = $XmlDoc.CreateElement("UserSetting") [void]$XmlDoc.AppendChild($Root) function Add-TextElement { param ( [System.Xml.XmlElement]$Parent, [string]$Name, [string]$Text ) $el = $XmlDoc.CreateElement($Name) $el.InnerText = $Text [void]$Parent.AppendChild($el) return $el } [void](Add-TextElement -Parent $Root -Name "Id" -Text $SettingId) [void](Add-TextElement -Parent $Root -Name "FriendlyName" -Text $FriendlyName) [void](Add-TextElement -Parent $Root -Name "Description" -Text $Description) [void](Add-TextElement -Parent $Root -Name "Type" -Text $Type) [void](Add-TextElement -Parent $Root -Name "ExecutionOrder" -Text $ExecutionOrder) [void](Add-TextElement -Parent $Root -Name "CreatedDate" -Text $CreatedDate) [void](Add-TextElement -Parent $Root -Name "LastModifiedDate" -Text $LastModifiedDate) [void](Add-TextElement -Parent $Root -Name "ProcessAtLogin" -Text (ConvertTo-BooleanString -Value $ProcessAtLogin)) [void](Add-TextElement -Parent $Root -Name "ProcessAtRefresh" -Text (ConvertTo-BooleanString -Value $ProcessAtRefresh)) [void](Add-TextElement -Parent $Root -Name "ProcessAtReconnectAndUnlock" -Text (ConvertTo-BooleanString -Value $ProcessAtReconnectAndUnlock)) $MachineGroupsElement = $XmlDoc.CreateElement("MachineGroups") foreach ($Group in $MachineGroups) { [void](Add-TextElement -Parent $MachineGroupsElement -Name "MachineGroup" -Text $Group) } [void]$Root.AppendChild($MachineGroupsElement) $MachineGroupFriendlyNamesElement = $XmlDoc.CreateElement("MachineGroupFriendlyNames") foreach ($GroupFriendlyName in $MachineGroupFriendlyNames) { [void](Add-TextElement -Parent $MachineGroupFriendlyNamesElement -Name "FriendlyName" -Text $GroupFriendlyName) } [void]$Root.AppendChild($MachineGroupFriendlyNamesElement) # GroupPolicySettings $GroupPolicySettingsElement = $XmlDoc.CreateElement("GroupPolicySettings") [void](Add-TextElement -Parent $GroupPolicySettingsElement -Name "AdmxFilePath" -Text $AdmxFileName) $ConfiguredPoliciesElement = $XmlDoc.CreateElement("ConfiguredPolicies") foreach ($PolicyData in $NewConfiguredPolicies) { $ConfiguredPolicyElement = $XmlDoc.CreateElement("ConfiguredPolicy") [void](Add-TextElement -Parent $ConfiguredPolicyElement -Name "PolicyName" -Text $PolicyData.PolicyName) [void](Add-TextElement -Parent $ConfiguredPolicyElement -Name "PolicyDisplayName" -Text $PolicyData.PolicyDisplayName) [void](Add-TextElement -Parent $ConfiguredPolicyElement -Name "PolicyKey" -Text $PolicyData.PolicyKey) [void](Add-TextElement -Parent $ConfiguredPolicyElement -Name "PolicyValueName" -Text "$($PolicyData.PolicyValueName)") [void](Add-TextElement -Parent $ConfiguredPolicyElement -Name "Enabled" -Text (ConvertTo-BooleanString -Value ([bool]$PolicyData.Enabled))) if ($PolicyData.Elements -and $PolicyData.Elements.Count -gt 0) { $ElementsElement = $XmlDoc.CreateElement("Elements") # Group list elements by ElementId so all list items collapse into one <ConfiguredPolicyElement> # with newline-joined <Value> and empty <RegistryValueName> $processedListIds = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::OrdinalIgnoreCase) foreach ($elem in $PolicyData.Elements) { if ($elem.ElementType -eq 'list') { if ($processedListIds.Contains($elem.ElementId)) { continue } [void]$processedListIds.Add($elem.ElementId) $listItems = @($PolicyData.Elements | Where-Object { $_.ElementId -eq $elem.ElementId }) $joinedValue = ($listItems | ForEach-Object { $_.Value }) -join "`n" $ConfiguredPolicyElementNode = $XmlDoc.CreateElement("ConfiguredPolicyElement") [void](Add-TextElement -Parent $ConfiguredPolicyElementNode -Name "ElementId" -Text $elem.ElementId) [void](Add-TextElement -Parent $ConfiguredPolicyElementNode -Name "RegistryKey" -Text $elem.RegistryKey) [void](Add-TextElement -Parent $ConfiguredPolicyElementNode -Name "RegistryValueName" -Text "") [void](Add-TextElement -Parent $ConfiguredPolicyElementNode -Name "Value" -Text $joinedValue) [void](Add-TextElement -Parent $ConfiguredPolicyElementNode -Name "ValueType" -Text "REG_SZ") [void]$ElementsElement.AppendChild($ConfiguredPolicyElementNode) } else { $ConfiguredPolicyElementNode = $XmlDoc.CreateElement("ConfiguredPolicyElement") [void](Add-TextElement -Parent $ConfiguredPolicyElementNode -Name "ElementId" -Text $elem.ElementId) [void](Add-TextElement -Parent $ConfiguredPolicyElementNode -Name "RegistryKey" -Text $elem.RegistryKey) [void](Add-TextElement -Parent $ConfiguredPolicyElementNode -Name "RegistryValueName" -Text "$($elem.RegistryValueName)") [void](Add-TextElement -Parent $ConfiguredPolicyElementNode -Name "Value" -Text "$($elem.Value)") [void](Add-TextElement -Parent $ConfiguredPolicyElementNode -Name "ValueType" -Text "$($elem.ValueType)") [void]$ElementsElement.AppendChild($ConfiguredPolicyElementNode) } } [void]$ConfiguredPolicyElement.AppendChild($ElementsElement) } [void]$ConfiguredPoliciesElement.AppendChild($ConfiguredPolicyElement) } [void]$GroupPolicySettingsElement.AppendChild($ConfiguredPoliciesElement) [void]$Root.AppendChild($GroupPolicySettingsElement) $RegistryEntriesElement = $XmlDoc.CreateElement("RegistryEntries") foreach ($EntryData in $NewRegistryEntries) { $RegistryEntryElement = $XmlDoc.CreateElement("RegistryEntry") [void](Add-TextElement -Parent $RegistryEntryElement -Name "RootKey" -Text $EntryData.RootKey) [void](Add-TextElement -Parent $RegistryEntryElement -Name "KeyPath" -Text $EntryData.KeyPath) [void](Add-TextElement -Parent $RegistryEntryElement -Name "ValueName" -Text $EntryData.ValueName) [void](Add-TextElement -Parent $RegistryEntryElement -Name "ValueData" -Text $EntryData.ValueData) [void](Add-TextElement -Parent $RegistryEntryElement -Name "ValueType" -Text $EntryData.ValueType) [void](Add-TextElement -Parent $RegistryEntryElement -Name "Action" -Text $EntryData.Action) [void](Add-TextElement -Parent $RegistryEntryElement -Name "DeleteKey" -Text (ConvertTo-BooleanString -Value ([bool]$EntryData.DeleteKey))) [void]$RegistryEntriesElement.AppendChild($RegistryEntryElement) } [void]$Root.AppendChild($RegistryEntriesElement) return $XmlDoc } #endregion functions if (Test-AppVentiXIsLicensed -ConfigShare $ConfigShare) { $SettingId = [guid]::NewGuid().ToString() $Type = "GroupPolicy" # Process InputObject if ($PSBoundParameters.ContainsKey("InputObject")) { Write-Verbose "Processing InputObject parameter..." if (-not [string]::IsNullOrEmpty($InputObject.FriendlyName)) { $FriendlyName = $InputObject.FriendlyName } if (-not [string]::IsNullOrEmpty($InputObject.Description)) { $Description = $InputObject.Description } if ($PSBoundParameters.ContainsKey("ProcessAtLogin") -eq $false -and $null -ne $InputObject.ProcessAtLogin) { $ProcessAtLogin = [bool]$InputObject.ProcessAtLogin } if ($PSBoundParameters.ContainsKey("ProcessAtRefresh") -eq $false -and $null -ne $InputObject.ProcessAtRefresh) { $ProcessAtRefresh = [bool]$InputObject.ProcessAtRefresh } if ($PSBoundParameters.ContainsKey("ProcessAtReconnectAndUnlock") -eq $false -and $null -ne $InputObject.ProcessAtReconnectAndUnlock) { $ProcessAtReconnectAndUnlock = [bool]$InputObject.ProcessAtReconnectAndUnlock } $AdmxContent = "$($InputObject.ADMXContent)" $AdmlContent = "$($InputObject.ADMLContent)" $AdmxFileName = "$($InputObject.ADMX)" $AdmlFileName = "$($InputObject.ADML)" $PolicyInputObject = @($InputObject.AppVentiXParams) if ([string]::IsNullOrEmpty($AdmlLanguage)) { $AdmlLanguage = "en-US" } } #region --- Resolve ADMX/ADML filename and content --- if ($PSCmdlet.ParameterSetName -eq "AppVentiXParamsFile") { if (-not $AdmxFileName) { $AdmxFileName = Split-Path -Path $AdmxFilePath -Leaf } $AdmxContent = Get-Content -Path $AdmxFilePath -Raw $AdmlFilePath = $AdmxFilePath -replace '\.admx$', '.adml' $AdmlContent = Get-Content -Path $AdmlFilePath -Raw if (-not $AdmlFileName) { $AdmlFileName = Split-Path -Path $AdmlFilePath -Leaf } } elseif ($PSCmdlet.ParameterSetName -in @("AppVentiXParamsContent", "InputObject")) { if ($base64DecodedAdmx = Test-Base64String -InputString $AdmxContent -PassThru -AsString) { $AdmxContent = $base64DecodedAdmx } if ($base64DecodedAdml = Test-Base64String -InputString $AdmlContent -PassThru -AsString) { $AdmlContent = $base64DecodedAdml } if (-not $AdmxFileName) { $AdmxFileName = "CustomPolicy.admx" } if (-not $AdmlFileName) { $AdmlFileName = "CustomPolicy.adml" } } # The Office templates (access16, excel16, office16, word16) declare encoding="utf-16" but # are stored here as UTF-8 bytes. Align the declaration with the bytes actually written, # otherwise the Central View ADMX parser fails with "There is no Unicode byte order mark". $xmlDeclarationEncoding = '^([\uFEFF\s]*<\?xml\b[^>]*?encoding=")[^"]+' $AdmxContent = $AdmxContent -replace $xmlDeclarationEncoding, '${1}utf-8' $AdmlContent = $AdmlContent -replace $xmlDeclarationEncoding, '${1}utf-8' #endregion #region --- Build $NewConfiguredPolicies and $NewRegistryEntries --- $NewConfiguredPolicies = @() $NewRegistryEntries = @() foreach ($policyParam in $PolicyInputObject) { $NewConfiguredPolicies += [PSCustomObject]@{ PolicyName = $policyParam.PolicyName PolicyDisplayName = $policyParam.PolicyDisplayName PolicyKey = $policyParam.PolicyKey PolicyValueName = $policyParam.PolicyValueName Enabled = $policyParam.Enabled Elements = @($policyParam.Elements) } foreach ($regEntry in $policyParam.RegistryEntries) { $NewRegistryEntries += [PSCustomObject]@{ RootKey = $regEntry.RootKey KeyPath = $regEntry.KeyPath ValueName = $regEntry.ValueName ValueData = "$($regEntry.ValueData)" ValueType = $regEntry.ValueType Action = if ($regEntry.Action) { $regEntry.Action } else { "Set" } DeleteKey = [bool]$regEntry.DeleteKey } } } #endregion # Resolve MachineGroups if ($MachineGroupFriendlyName.Count -gt 0) { if ($MachineGroupFriendlyName -notcontains "All Machine Groups" -and $MachineGroupFriendlyName -notcontains "All") { $AvailableGroups = Get-AppVentiXMachineGroup $MachineGroups = @() $MachineGroupFriendlyNames = @() foreach ($Group in $MachineGroupFriendlyName) { $selectedGroup = $AvailableGroups | Where-Object { $_.FriendlyName -ieq $Group } if ($selectedGroup) { $MachineGroups += $selectedGroup.GroupName.ToString() $MachineGroupFriendlyNames += $selectedGroup.FriendlyName.ToString() } } } else { $MachineGroups = @("All") $MachineGroupFriendlyNames = @("All Machine Groups") } } else { $MachineGroups = @("All") $MachineGroupFriendlyNames = @("All Machine Groups") } $policyFilename = "$($Type)-$($SettingId).xml" $CreatedDate = (Get-Date).ToString("yyyy-MM-dd HH:mm:ss") $LastModifiedDate = (Get-Date).ToString("yyyy-MM-dd HH:mm:ss") if ([string]::IsNullOrEmpty($FriendlyName)) { Write-Error "FriendlyName is required. Please provide a value for the FriendlyName parameter or include it in the InputObject." return } try { Write-Verbose "Building UserSetting XML..." $XmlDocument = New-GroupPolicyUserSettingXml $XmlWriterSettings = New-Object System.Xml.XmlWriterSettings $XmlWriterSettings.Indent = $true $XmlWriterSettings.IndentChars = " " $XmlWriterSettings.Encoding = [System.Text.Encoding]::UTF8 $XmlWriterSettings.OmitXmlDeclaration = $true Write-Verbose "Saving UserSetting XML to $policyFilename" $ms = New-Object System.IO.MemoryStream $XmlWriter = [System.Xml.XmlWriter]::Create($ms, $XmlWriterSettings) $XmlDocument.Save($XmlWriter) $XmlWriter.Close() Set-AppVentiXConfigStoreItem -Item $Script:AppVentix.UserSettingsPath -ChildName $policyFilename -Content $ms.ToArray() -ConfigShare $ConfigShare Write-AppVentiXLogEntry -Feature UserSettings -Action $($MyInvocation.MyCommand.Name) -Details "New Group Policy UserSetting '$FriendlyName' [$SettingId] added with $($NewRegistryEntries.Count) registry entry(ies) across $($NewConfiguredPolicies.Count) policy(ies)." if (-not (Test-AppVentiXConfigStoreItem -Item $Script:AppVentix.UserSettingsPath -ChildName "Policies\$AdmxFileName" -ConfigShare $ConfigShare)) { Write-Verbose "Saving ADMX content" Set-AppVentiXConfigStoreItem -Item $Script:AppVentix.UserSettingsPath -ChildName "Policies\$AdmxFileName" -Content ([Text.Encoding]::UTF8.GetBytes($AdmxContent)) -ConfigShare $ConfigShare -ContentType 'text/plain' } else { Write-Verbose "ADMX item already exists. Skipping save to avoid overwriting." } if (-not (Test-AppVentiXConfigStoreItem -Item $Script:AppVentix.UserSettingsPath -ChildName "Policies\$AdmlLanguage\$AdmlFileName" -ConfigShare $ConfigShare)) { Write-Verbose "Saving ADML content" Set-AppVentiXConfigStoreItem -Item $Script:AppVentix.UserSettingsPath -ChildName "Policies\$AdmlLanguage\$AdmlFileName" -Content ([Text.Encoding]::UTF8.GetBytes($AdmlContent)) -ConfigShare $ConfigShare -ContentType 'text/plain' } else { Write-Verbose "ADML item already exists. Skipping save to avoid overwriting." } Write-Output ( [PSCustomObject]@{ Id = $SettingId FriendlyName = $FriendlyName FileName = $policyFilename } ) } catch { Write-Error "Failed to generate XML: $($_.Exception.Message)" } } else { Write-Warning 'AppVentiX is not licensed!' } } # SIG # Begin signature block # MII5zAYJKoZIhvcNAQcCoII5vTCCObkCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDqsSV6CoCFe5Yt # 3sufkO/yko7FQunpQi5UnzjwPBCN+qCCIfAwggXMMIIDtKADAgECAhBUmNLR1FsZ # 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 # 03u4aUoqlmZpxJTG9F9urJh4iIAGXKKy7aIwggalMIIEjaADAgECAhMzAAVFa+Mx # nPl8dnBSAAAABUVrMA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVTMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJ # RCBWZXJpZmllZCBDUyBBT0MgQ0EgMDMwHhcNMjYwODIzMTUwNzQwWhcNMjYwODI2 # MTUwNzQwWjBoMQswCQYDVQQGEwJOTDEWMBQGA1UECBMNTm9vcmQtSG9sbGFuZDEP # MA0GA1UEBxMGSGVpbG9vMRcwFQYDVQQKEw5BcHBWZW50aVggQi5WLjEXMBUGA1UE # AxMOQXBwVmVudGlYIEIuVi4wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIB # gQCoadbs6imFdxUR/W4zTGNMajYt0uhSP6siFelP12UeMcqpLnM+jzrWbBkXnpvV # C3CJ75gTbLEbjkqJq9neO1rwbTFkres7QfaG/tj7Lo+Ba0QoDewim3jcL8gxoV4U # vgOoM7CBs5mhDAeOxIcGSx9RfJjM0/e/zo9JjamFYutQJ2Z+fs40huxp9eVz/QwV # xUMoWbMYlpehR3uqUOAsRV5yyUFKSYJGjQp58oEY65F0LOhrGV0PigEOEJLlWuZY # xdCuc0gPIc+AEfMFJi7/khSvi1+hjVqmzlcw+EOFcNDZogZp56kDonPdE+LTJOT6 # DRYxgs7QimSRnEpbczQIF+mBKJZQFUG8Hv7q71FmvphE7vmM+paEQf0tE1sRjbc/ # n6v8SvzczlUAjmuNzXhsVVnfTc6ASL4srCuAYY32MlpCqdPpyMkmehVmT/41MiO0 # lDzIH1icdEL8LlxaMOxlBmUujf0FimNGa9HEAJahVnJlmBB5CjW1DBjtsHnrvbNA # h3kCAwEAAaOCAdQwggHQMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMDsG # A1UdJQQ0MDIGCisGAQQBgjdhAQAGCCsGAQUFBwMDBhorBgEEAYI3YaL8yC6uh9F6 # gZ2lyVCBwcKCJzAdBgNVHQ4EFgQUhiOKuVKC578YpMALM2rV7N0KgIswHwYDVR0j # BBgwFoAUpEMMf3ZapYXnPo0oDwwXokVpcMYwZwYDVR0fBGAwXjBcoFqgWIZWaHR0 # cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSUQl # MjBWZXJpZmllZCUyMENTJTIwQU9DJTIwQ0ElMjAwMy5jcmwwdAYIKwYBBQUHAQEE # aDBmMGQGCCsGAQUFBzAChlhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz # L2NlcnRzL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEFPQyUyMENB # JTIwMDMuY3J0MFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRw # Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0w # DQYJKoZIhvcNAQEMBQADggIBADilFl3qUVaak/QuSR/cBpymNfS8S+cj7D/FqE5Y # Jm7ZmMW5YafPfLzOWv7Jc6hepqk6ianoLwzrjMWVueMEO6skW3pnbGe7WyT/UmM5 # 3Xefaidp0OLnyDx2NpTiLw/Py5G9vF1qfPosOv+nxRxx4taC2JzmvThJ6FitcQ87 # VU6CBv6kfp80LFcoFN8RCEGURnOPwA/enDoWK1m+fvu0u4mT03uYzLJfJgkL8kqc # jUk0NnSmn+KJeJjAd1CI2vQov2ceH+D5HyTeS6TkAYmswiU0trf8VKEwGbe1GT95 # Lnr1WlVk5ZRmlZC+yzY261qIpv+dtUKb3+blW7nVKpPyIQHAyv4PPpkmq9MdW1Ia # b/BpwpL1Adok/zmdE9sheJB1FPYoexiI6iiBlxn7WFG9UiUChFxJn3DRGDEfVorN # qEwpbPLablTHphbkb0NhqWKfC0xt/Ut8kf1e1SA8CuLRGWa82nc0D0vGokLetE+w # FJMW0cREjPLCgXWzSgfCTCc7U93MIit6qjZWBIQgSetwphCkxzLPebpKKklmpyrK # wDXHFsBSakXECtX3iRJJduhXydnkbWY+gR0fWn0b5gW3VuFZZt/7bfahN/g1yiYJ # v7yaYtKcIk5jtDdnBP6OB3g5arFO61x3P56uP9GCnjVwmRHj0jo+oWfof57UI9bU # NvzoMIIGpTCCBI2gAwIBAgITMwAFRWvjMZz5fHZwUgAAAAVFazANBgkqhkiG9w0B # AQwFADBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 # aW9uMSswKQYDVQQDEyJNaWNyb3NvZnQgSUQgVmVyaWZpZWQgQ1MgQU9DIENBIDAz # MB4XDTI2MDgyMzE1MDc0MFoXDTI2MDgyNjE1MDc0MFowaDELMAkGA1UEBhMCTkwx # FjAUBgNVBAgTDU5vb3JkLUhvbGxhbmQxDzANBgNVBAcTBkhlaWxvbzEXMBUGA1UE # ChMOQXBwVmVudGlYIEIuVi4xFzAVBgNVBAMTDkFwcFZlbnRpWCBCLlYuMIIBojAN # BgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAqGnW7OophXcVEf1uM0xjTGo2LdLo # Uj+rIhXpT9dlHjHKqS5zPo861mwZF56b1Qtwie+YE2yxG45KiavZ3jta8G0xZK3r # O0H2hv7Y+y6PgWtEKA3sIpt43C/IMaFeFL4DqDOwgbOZoQwHjsSHBksfUXyYzNP3 # v86PSY2phWLrUCdmfn7ONIbsafXlc/0MFcVDKFmzGJaXoUd7qlDgLEVecslBSkmC # Ro0KefKBGOuRdCzoaxldD4oBDhCS5VrmWMXQrnNIDyHPgBHzBSYu/5IUr4tfoY1a # ps5XMPhDhXDQ2aIGaeepA6Jz3RPi0yTk+g0WMYLO0IpkkZxKW3M0CBfpgSiWUBVB # vB7+6u9RZr6YRO75jPqWhEH9LRNbEY23P5+r/Er83M5VAI5rjc14bFVZ303OgEi+ # LKwrgGGN9jJaQqnT6cjJJnoVZk/+NTIjtJQ8yB9YnHRC/C5cWjDsZQZlLo39BYpj # RmvRxACWoVZyZZgQeQo1tQwY7bB5672zQId5AgMBAAGjggHUMIIB0DAMBgNVHRMB # Af8EAjAAMA4GA1UdDwEB/wQEAwIHgDA7BgNVHSUENDAyBgorBgEEAYI3YQEABggr # BgEFBQcDAwYaKwYBBAGCN2Gi/MgurofReoGdpclQgcHCgicwHQYDVR0OBBYEFIYj # irlSgue/GKTACzNq1ezdCoCLMB8GA1UdIwQYMBaAFKRDDH92WqWF5z6NKA8MF6JF # aXDGMGcGA1UdHwRgMF4wXKBaoFiGVmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w # a2lvcHMvY3JsL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEFPQyUy # MENBJTIwMDMuY3JsMHQGCCsGAQUFBwEBBGgwZjBkBggrBgEFBQcwAoZYaHR0cDov # L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBJRCUy # MFZlcmlmaWVkJTIwQ1MlMjBBT0MlMjBDQSUyMDAzLmNydDBUBgNVHSAETTBLMEkG # BFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br # aW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMA0GCSqGSIb3DQEBDAUAA4ICAQA4pRZd # 6lFWmpP0Lkkf3AacpjX0vEvnI+w/xahOWCZu2ZjFuWGnz3y8zlr+yXOoXqapOomp # 6C8M64zFlbnjBDurJFt6Z2xnu1sk/1JjOd13n2onadDi58g8djaU4i8Pz8uRvbxd # anz6LDr/p8UcceLWgtic5r04SehYrXEPO1VOggb+pH6fNCxXKBTfEQhBlEZzj8AP # 3pw6FitZvn77tLuJk9N7mMyyXyYJC/JKnI1JNDZ0pp/iiXiYwHdQiNr0KL9nHh/g # +R8k3kuk5AGJrMIlNLa3/FShMBm3tRk/eS569VpVZOWUZpWQvss2NutaiKb/nbVC # m9/m5Vu51SqT8iEBwMr+Dz6ZJqvTHVtSGm/wacKS9QHaJP85nRPbIXiQdRT2KHsY # iOoogZcZ+1hRvVIlAoRcSZ9w0RgxH1aKzahMKWzy2m5Ux6YW5G9DYalinwtMbf1L # fJH9XtUgPAri0RlmvNp3NA9LxqJC3rRPsBSTFtHERIzywoF1s0oHwkwnO1PdzCIr # eqo2VgSEIEnrcKYQpMcyz3m6SipJZqcqysA1xxbAUmpFxArV94kSSXboV8nZ5G1m # PoEdH1p9G+YFt1bhWWbf+232oTf4NcomCb+8mmLSnCJOY7Q3ZwT+jgd4OWqxTutc # dz+erj/Rgp41cJkR49I6PqFn6H+e1CPW1Db86DCCBygwggUQoAMCAQICEzMAAAAY # 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 # Ik1pY3Jvc29mdCBJRCBWZXJpZmllZCBDUyBBT0MgQ0EgMDMCEzMABUVr4zGc+Xx2 # cFIAAAAFRWswDQYJYIZIAWUDBAIBBQCgXjAQBgorBgEEAYI3AgEMMQIwADAZBgkq # hkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAvBgkqhkiG9w0BCQQxIgQgXIi5iVt7vfk5 # hPSsU1StUen8tGJbp0z3LYZpmKJ01IUwDQYJKoZIhvcNAQEBBQAEggGAle5LpMDQ # EiVfjzFHJvl8dpQqq3ecyrPHSpkGXz702K2nu40RkhsV5HJ6E2V0E5QjDsBMv8mX # GsKmR+MlHjvewd3stdZU2e2QGlla7dIkuib1JNBRbcTThtY/3YoCtANfk2jx5e7L # BfWyIQMcNtDAYypYANXbek9DZ34mOjZt70o1q028Pa8ijPHxPkusBpJ/tdNJQgxC # nkazy2mIrLgj3oTw/tTHlGzgsJ6GVK0MVVYfbZQaO4lrL0TY0vrjNpOcCS2Oe5Kq # h1WiaGb1W5qEe+I/p3gj/gILjUt+7R4cJfBua4v30wE0l1YjsSTqy8ZqFiCqNtrM # dK4eieetOKI8n6L6nZuZ0M6/azZHubckouuv4+cm3LtpkrGQ1qSakiezDQUC3zyB # Vq4MymJ4p/sOnD2Lm3OENra8g2ZxNIWURDOcDl5r3oJE5hw5PAEZUg2b1aJaO+11 # gv+cmyNeWRg5v2p/f9CMjaFzY/uZv4XAktSmV02E2JNPwvHRFLiXCCSyoYIUsjCC # FK4GCisGAQQBgjcDAwExghSeMIIUmgYJKoZIhvcNAQcCoIIUizCCFIcCAQMxDzAN # BglghkgBZQMEAgEFADCCAWoGCyqGSIb3DQEJEAEEoIIBWQSCAVUwggFRAgEBBgor # BgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAEILEOrFpd3QVoSLGj/WtZ4NxHF1lN # raMOAmK1jmdT0k15AgZqNTCYcCsYEzIwMjYwODI1MTUwNjA4LjE3MVowBIACAfSg # gemkgeYwgeMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD # VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTAr # BgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUG # A1UECxMeblNoaWVsZCBUU1MgRVNOOjQ5MUEtMDVFMC1EOTQ3MTUwMwYDVQQDEyxN # 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 # pmgAXVswggefMIIFh6ADAgECAhMzAAAAWvYNZ4yF7d0IAAAAAABaMA0GCSqGSIb3 # DQEBDAUAMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y # YXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMgUlNBIFRpbWVzdGFtcGlu # ZyBDQSAyMDIwMB4XDTI2MDEwODE4NTkwM1oXDTI3MDEwNzE4NTkwM1owgeMxCzAJ # BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k # MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jv # c29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMeblNoaWVs # ZCBUU1MgRVNOOjQ5MUEtMDVFMC1EOTQ3MTUwMwYDVQQDEyxNaWNyb3NvZnQgUHVi # bGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEB # BQADggIPADCCAgoCggIBAO/0O0eWjgUb9rnHcQLRdfWPN4H+91a3YnlaP46E1m4u # D+JKx6csWMStX79fxLJUAqHJqQWE19UlNMhS9jEB32dAJ4yuWsHyUuM+dphjDz4E # 5jl4gYGZEmaOrKvNt+KqlFayyg/oTg3BlLRu4aBq8668A5qlHcfsuh6DdSqFID1i # xJFZzHrZFG1iGBG7U1Bn2ONLDo7jbwX5rMcPduTAUw/c7M3WhSxQBuZpQiz8RQGK # IqCKfIxgQkKdzpCpU0SWQOE/DgTXbz3c15KMRCdkGlL2zb+lnuSV4sseQm3qflZi # ZckLyn2xJI8ZXDkq+Ig+b/rsPPIfI8di228WvK1j67JXpyeVCaSUO9ErzlLnTrnj # QkeXVQIp73xuVBVrmvoTf/v4a7MnrmuKSyIXc5vJUHEGB345+O8omFt1w8b+Xg9D # 9PKIRqDPEv7HRk0C+Yvxu8FvHJvSocSIZK+v/FmKFOipYnpP76yAmJNnyheucShO # gk8QiU53USn/+AyMb7xW905gZnyNqb29HeVdQ175pDHJGEz8Cx5wiHeVliGz5hAB # ucFDylR9z3LSTmB6+3ZuIxeG9BZS46P6ANPkuVuD5m8wgc7GLLzg73CsDF09ukt8 # Uf8dTcMBX3ro+7/k9M6Xt8WPG7IL9v/4DvyMY03tkb9Y9Ri6HWavXRPYRCUePspP # AgMBAAGjggHLMIIBxzAdBgNVHQ4EFgQUjmOyQ6twMcP1ZbRytJxI4fnXmcIwHwYD # VR0jBBgwFoAUa2koOjUvSGNAz3vYr0npPtk92yEwbAYDVR0fBGUwYzBhoF+gXYZb # aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIw # UHVibGljJTIwUlNBJTIwVGltZXN0YW1waW5nJTIwQ0ElMjAyMDIwLmNybDB5Bggr # BgEFBQcBAQRtMGswaQYIKwYBBQUHMAKGXWh0dHA6Ly93d3cubWljcm9zb2Z0LmNv # bS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwUHVibGljJTIwUlNBJTIwVGltZXN0 # YW1waW5nJTIwQ0ElMjAyMDIwLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQM # MAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDBmBgNVHSAEXzBdMFEGDCsGAQQB # gjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v # cGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wCAYGZ4EMAQQCMA0GCSqGSIb3DQEB # DAUAA4ICAQCAlM8r+t3hIb2h1lDTAx+iYkQlxFuU7QONeyIFIBZ29xvGl8pehKxE # rDzIniOpIX/eluUAwQKoaI0zwuKAdR0mrSHXCniMoLNko5W+5r7sXNamKX7QMV3B # fGOX3gi9qVfxyUe7AHXbqQ8KBQHNYCnNFtQQHgARrlYhtyAKol5ctM0CAc/y3oY7 # bTMsVJvnA5u7DVWPeXoST2KEMDeLBvJYq0IJZ6yMpDOWLZ4UP82bksyShIB/Xdaw # irIGLdseudryRxVMk313mAcjGRb59+Ittt6otVvYQWqH+PGrTUzEcez8aQuO3umo # NZjKuFoX5VsPP/gSZse+orhG3zfZk9IDyE3DfUFrhvkv6H0tijK1D0uIGhwMBWSm # 9ktQ6oeU+aurZFx3MI+LODnHsbRFZAy11uMvwKq+ZNC1Se4tIM1u9piWAhnTPoh6 # mULKikHOVhHaO953tkzDCtjsse5GUKOx9yg9nqHKWMgnODp62/uPPzC/yDEISrXC # cU7UB7tATr3zWNEdtM4d009iXWI6dV/SdcIIX44rpoLyCLw+nXjxp+fY/dygLO7U # dSQaVaUFVj3K2nVyuujPspt5Lunc5FvuYPqmi/z8kASmmwbiF+W0P0UTWFaC84MW # fU2h6MDg5s0oxmdNFK76jXr3wZfdSoV7FCKfq5GdeGoy5UwDQwMC0DGCA9QwggPQ # AgEBMHgwYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh # dGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5n # IENBIDIwMjACEzMAAABa9g1njIXt3QgAAAAAAFowDQYJYIZIAWUDBAIBBQCgggEt # MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgMI8d # t7DCK8o3roqQkI9lnR5rjbKcl4brlgh+FTgrbL0wgd0GCyqGSIb3DQEJEAIvMYHN # MIHKMIHHMIGgBCBiuWRAi+p96PRsBt3TwW3jNozgPQS+Qco1CVm/NaU0QzB8MGWk # YzBhMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u # MTIwMAYDVQQDEylNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lc3RhbXBpbmcgQ0Eg # MjAyMAITMwAAAFr2DWeMhe3dCAAAAAAAWjAiBCDNicNsi9D9sksknnUvrjK2Xaif # uglbo53nR6EiQsi5OzANBgkqhkiG9w0BAQsFAASCAgC9BDLyASOGZH/aXFiY4JNs # 5q5Eola8wiop93eJoicpLOhSh9UZOdo9v0ZBTXSASs3rHAQwPg6X+lh4W76QBZX9 # tuh6MJiYcNs/pGA0CeZdqFVDgJdj8hoMXWFWSLaXyanpq6Va7sxikPWB2CuOO8J+ # ocDn+hBI1dC7dxVEZU5Nx6Xq66FEDq2JOUCO2gUhKtq8hlpP2AiMBisGJHX9teft # 3q9KTqpWCOZeDLURKEi0t6neyn5ImNXFRe4lv/W9U9T9lLpkU2b/qtPto1qFfcsz # zW36IJHTdNQ4Rp2RXHNFqDf5xQhiGXT6zuY4RowoCnTeqtpiwCA6CTOz1qkkmN9v # PHiW9jzeBXV3sS6UWIE0ekbulFJTwO8M3E74VSA88MgudfAexohdEB1iTZB8oD6Y # dZDjuSm/r26arhNSNPj6/ZNpsO0A1pUSz4HImREpWbY0KE5OBZq9MxqhMqfvlHWd # rWJvDhWzRMsv+DFTGr99l5pXOlgA1/KI3iBZqv3la8i83c06tP5fvPUOpv2+INMW # SQJnuEyH/YeS5kpnyUqe8ueOOn1M1oG0i4yQl7ecefBq5pl/g166akr1nzwx5Tfc # 8JTcUprpBum5fKC35XFmryUXCNwqZkTw3S6STUR+0+fOWwVQv4bBNzYjySHiyi3Z # 5awYBYNJj1NAzt+G48juAQ== # SIG # End signature block |