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.321.1000 #> 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" $userSettingsPath = Join-Path -Path $ConfigShare -ChildPath $Script:AppVentix.UserSettingsPath $userSettingsPoliciesADMXPath = Join-Path -Path $userSettingsPath -ChildPath "Policies" $userSettingsPoliciesADMLPath = Join-Path -Path $userSettingsPath -ChildPath "Policies\$AdmlLanguage" # 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" } $userSettingsPoliciesADMLPath = Join-Path -Path $userSettingsPath -ChildPath "Policies\$AdmlLanguage" } #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" } } #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" $policyFullname = Join-Path -Path $userSettingsPath -ChildPath $policyFilename $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 $policyFullname" $XmlWriter = [System.Xml.XmlWriter]::Create($policyFullname, $XmlWriterSettings) $XmlDocument.Save($XmlWriter) $XmlWriter.Close() Write-AppVentiXLogEntry -Feature UserSettings -Action $($MyInvocation.MyCommand.Name) -Details "New Group Policy UserSetting '$FriendlyName' added with $($NewRegistryEntries.Count) registry entry(ies) across $($NewConfiguredPolicies.Count) policy(ies)." $AdmxFullname = Join-Path -Path $userSettingsPoliciesADMXPath -ChildPath $AdmxFileName $AdmlFullname = Join-Path -Path $userSettingsPoliciesADMLPath -ChildPath $AdmlFileName if (-not (Test-Path -Path $AdmxFullname)) { Write-Verbose "Saving ADMX content to $AdmxFullname" Set-Content -Path $AdmxFullname -Value $AdmxContent -Encoding UTF8 } else { Write-Verbose "ADMX file already exists at $AdmxFullname. Skipping save to avoid overwriting." } if (-not (Test-Path -Path $AdmlFullname)) { Write-Verbose "Saving ADML content to $AdmlFullname" Set-Content -Path $AdmlFullname -Value $AdmlContent -Encoding UTF8 } else { Write-Verbose "ADML file already exists at $AdmlFullname. 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 # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAht97Qs2kfzGPv # j884nsPi02ZwJTcs8V18AUiGzdBmMqCCIfAwggXMMIIDtKADAgECAhBUmNLR1FsZ # 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 # 03u4aUoqlmZpxJTG9F9urJh4iIAGXKKy7aIwggalMIIEjaADAgECAhMzAAQAyV2c # /A5Hn0e8AAAABADJMA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVTMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJ # RCBWZXJpZmllZCBDUyBBT0MgQ0EgMDMwHhcNMjYwNzI5MTQwMjI5WhcNMjYwODAx # MTQwMjI5WjBoMQswCQYDVQQGEwJOTDEWMBQGA1UECBMNTm9vcmQtSG9sbGFuZDEP # MA0GA1UEBxMGSGVpbG9vMRcwFQYDVQQKEw5BcHBWZW50aVggQi5WLjEXMBUGA1UE # AxMOQXBwVmVudGlYIEIuVi4wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIB # gQDVQ19o3p/y4kmo6Cgzl5XnAmMuffaR4qoZUctU5tkQgCI5yxoNAzWZaO92jiDL # L3h8wmfUN9aoD69R8rJxBhTSbo74QTNUtJVjkktxLtFZCaxv6LtycY28DEBWweuo # /4z0vMo8o6ldlTznE/cspYj+AmXtbO0mAZMhOWXPYI0D3KIeupBoenPJy5EbCs+I # u3zKin0c15uK6dWyhJ5cwhfrgbFmZoBzAMt3jESW8Y1XlnOP73xSPm8cHummLH6C # BhbSlUv7VZ/g+3k0fWk2JPMK8xMwUTRjjDvPjAPMFcfBiVauNSH6r2FexxaU9I6c # An2krGI/WCJdguZ82aDSisTLXcniYhh5WwCigEfb6CkSxgXO1kO6/YNIjSmy4+KA # lHhjFrV5xQlu01XPQG6Fp5mCSHFXEUOjfmGqrbudPhJnko6WnAvJ18e69FSmTi2e # yfI+S6CDQHBvjHDm/TGU++G08mSzPSrjVz2PNMZevM8p5xcj3kFU0TLdM0zPuSYl # PfkCAwEAAaOCAdQwggHQMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMDsG # A1UdJQQ0MDIGCisGAQQBgjdhAQAGCCsGAQUFBwMDBhorBgEEAYI3YaL8yC6uh9F6 # gZ2lyVCBwcKCJzAdBgNVHQ4EFgQUIn8KdvFB1h2L3a6RONhihT4Cgw8wHwYDVR0j # BBgwFoAUpEMMf3ZapYXnPo0oDwwXokVpcMYwZwYDVR0fBGAwXjBcoFqgWIZWaHR0 # cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSUQl # MjBWZXJpZmllZCUyMENTJTIwQU9DJTIwQ0ElMjAwMy5jcmwwdAYIKwYBBQUHAQEE # aDBmMGQGCCsGAQUFBzAChlhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz # L2NlcnRzL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEFPQyUyMENB # JTIwMDMuY3J0MFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRw # Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0w # DQYJKoZIhvcNAQEMBQADggIBAMHQvt6PV1e0ZrIPYfGym7+3eXy1vjGMk0urt1B2 # 8ysT9tm5EPg35zenkUOl5VTZZqtzvZo4D4hD4a6uAJMW5D0RyuTYjyEOYq5jk2gh # hfcKM0eeaAln72lmZ5rqPJ7UInJlw/yaYTFPddwAqiFPDL5eDtNMtLjGoFNiKq/e # ct9QCeVx7UeBs+WqvkFrKcCFZvD7Rk3GFwyBKRKjgvo6tgO9ZQDC5+Jvw4Z0/qt9 # jZeRfsEM2Xq9AcAbLBIbqnxSqsLhWm3r9/rtqyoyEkqpOV/3npY3Kif1HJKl0tJh # Zhrg/1hnViGEtmX01F9ag460PUuUqO5+LCMlGx1S55WtIpLNYD0may3UkfNrOvw7 # JgoGw2+sDHb7cHMnCR1KGE23m28IImpIJ4/Y8AVb0ojJi9agZsl05Obz0UcpLH03 # fYOYKYP8e8EULXyff/hSoZqIkfjTEsZMnw1FEipRb0Q1gIskoK9WZdxruELJ/FOJ # X6sodqgo3wIUJQf2IhFVXcaS4qG+COiO5+nFVfkOcxhr8krXjgz6nC8MXZOajACj # ntvNC0uAZajWnV2SYWcxBWoHBRPCod2Xq3zgLEGfV5LONdKESYDNdZ6RlOhDjbZS # jgFWr7hezSEuTb2K/1pq9DgOEaJXXBlAiPd9Htk0WrlWoKwC4psrfthcWseWRoXH # rpphMIIGpTCCBI2gAwIBAgITMwAEAMldnPwOR59HvAAAAAQAyTANBgkqhkiG9w0B # AQwFADBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 # aW9uMSswKQYDVQQDEyJNaWNyb3NvZnQgSUQgVmVyaWZpZWQgQ1MgQU9DIENBIDAz # MB4XDTI2MDcyOTE0MDIyOVoXDTI2MDgwMTE0MDIyOVowaDELMAkGA1UEBhMCTkwx # FjAUBgNVBAgTDU5vb3JkLUhvbGxhbmQxDzANBgNVBAcTBkhlaWxvbzEXMBUGA1UE # ChMOQXBwVmVudGlYIEIuVi4xFzAVBgNVBAMTDkFwcFZlbnRpWCBCLlYuMIIBojAN # BgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA1UNfaN6f8uJJqOgoM5eV5wJjLn32 # keKqGVHLVObZEIAiOcsaDQM1mWjvdo4gyy94fMJn1DfWqA+vUfKycQYU0m6O+EEz # VLSVY5JLcS7RWQmsb+i7cnGNvAxAVsHrqP+M9LzKPKOpXZU85xP3LKWI/gJl7Wzt # JgGTITllz2CNA9yiHrqQaHpzycuRGwrPiLt8yop9HNebiunVsoSeXMIX64GxZmaA # cwDLd4xElvGNV5Zzj+98Uj5vHB7ppix+ggYW0pVL+1Wf4Pt5NH1pNiTzCvMTMFE0 # Y4w7z4wDzBXHwYlWrjUh+q9hXscWlPSOnAJ9pKxiP1giXYLmfNmg0orEy13J4mIY # eVsAooBH2+gpEsYFztZDuv2DSI0psuPigJR4Yxa1ecUJbtNVz0BuhaeZgkhxVxFD # o35hqq27nT4SZ5KOlpwLydfHuvRUpk4tnsnyPkugg0Bwb4xw5v0xlPvhtPJksz0q # 41c9jzTGXrzPKecXI95BVNEy3TNMz7kmJT35AgMBAAGjggHUMIIB0DAMBgNVHRMB # Af8EAjAAMA4GA1UdDwEB/wQEAwIHgDA7BgNVHSUENDAyBgorBgEEAYI3YQEABggr # BgEFBQcDAwYaKwYBBAGCN2Gi/MgurofReoGdpclQgcHCgicwHQYDVR0OBBYEFCJ/ # CnbxQdYdi92ukTjYYoU+AoMPMB8GA1UdIwQYMBaAFKRDDH92WqWF5z6NKA8MF6JF # aXDGMGcGA1UdHwRgMF4wXKBaoFiGVmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w # a2lvcHMvY3JsL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEFPQyUy # MENBJTIwMDMuY3JsMHQGCCsGAQUFBwEBBGgwZjBkBggrBgEFBQcwAoZYaHR0cDov # L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBJRCUy # MFZlcmlmaWVkJTIwQ1MlMjBBT0MlMjBDQSUyMDAzLmNydDBUBgNVHSAETTBLMEkG # BFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br # aW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMA0GCSqGSIb3DQEBDAUAA4ICAQDB0L7e # j1dXtGayD2Hxspu/t3l8tb4xjJNLq7dQdvMrE/bZuRD4N+c3p5FDpeVU2Warc72a # OA+IQ+GurgCTFuQ9Ecrk2I8hDmKuY5NoIYX3CjNHnmgJZ+9pZmea6jye1CJyZcP8 # mmExT3XcAKohTwy+Xg7TTLS4xqBTYiqv3nLfUAnlce1HgbPlqr5BaynAhWbw+0ZN # xhcMgSkSo4L6OrYDvWUAwufib8OGdP6rfY2XkX7BDNl6vQHAGywSG6p8UqrC4Vpt # 6/f67asqMhJKqTlf956WNyon9RySpdLSYWYa4P9YZ1YhhLZl9NRfWoOOtD1LlKju # fiwjJRsdUueVrSKSzWA9Jmst1JHzazr8OyYKBsNvrAx2+3BzJwkdShhNt5tvCCJq # SCeP2PAFW9KIyYvWoGbJdOTm89FHKSx9N32DmCmD/HvBFC18n3/4UqGaiJH40xLG # TJ8NRRIqUW9ENYCLJKCvVmXca7hCyfxTiV+rKHaoKN8CFCUH9iIRVV3GkuKhvgjo # jufpxVX5DnMYa/JK144M+pwvDF2TmowAo57bzQtLgGWo1p1dkmFnMQVqBwUTwqHd # l6t84CxBn1eSzjXShEmAzXWekZToQ422Uo4BVq+4Xs0hLk29iv9aavQ4DhGiV1wZ # QIj3fR7ZNFq5VqCsAuKbK37YXFrHlkaFx66aYTCCBygwggUQoAMCAQICEzMAAAAY # 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 # Ik1pY3Jvc29mdCBJRCBWZXJpZmllZCBDUyBBT0MgQ0EgMDMCEzMABADJXZz8Dkef # R7wAAAAEAMkwDQYJYIZIAWUDBAIBBQCgXjAQBgorBgEEAYI3AgEMMQIwADAZBgkq # hkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAvBgkqhkiG9w0BCQQxIgQgDcON5r1ou+vf # 0wnO8rwnt/5GsmiC6LEw1YBPVISPXcAwDQYJKoZIhvcNAQEBBQAEggGAc1AAzLIb # w/IoSn3y/xKvabrg3JwaZXGQ+qYGWFKCAQrwPl14qjMCqw/w4Z0qCAScVJjez4XG # X+pF0pY19WNvSeIrHXe9L6c4RETAv6lT+90wJtP/3FS3ghC81Kr84sHQwXl7gY8s # JrPjzwdZdyms8GkdydCLxcHI/WMHsJtdTiJIkjvGQuaPfsCc6BRIZouJsPdcXCWB # 1HASEQHkboSlPKTSgznonmUoRAWzcOh9EFkafeZFA1f6BEMrs3VUiVg4UKCMWKTB # ZZgScC+olUdGmjhRecgYwm1+HpaX30j8DzmV4mWKGcxt+l3VuzNTjSNd73nwF2vk # p1ZLWRueInM/lRbSB5JquitVafLW2fmHHOXy8xKtqyniF2vLt5rvAeohQ8NwOgpA # uG4Btz6R7lfUHGzn60DkY5iMtpj362ZhOdnYDRbugz4FCNZ1eThkZeNuxA9ISjI0 # y9NprmFtiQXkmxJ2gPUAUjnz6bEKs0ZfsT4jjKvpfkVEYftQlSkqr/u/oYIUsjCC # FK4GCisGAQQBgjcDAwExghSeMIIUmgYJKoZIhvcNAQcCoIIUizCCFIcCAQMxDzAN # BglghkgBZQMEAgEFADCCAWoGCyqGSIb3DQEJEAEEoIIBWQSCAVUwggFRAgEBBgor # BgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAEIDbFMw/3VXY2o99jQKSbB4xsH7yV # UUVP+4ljckm5RKXAAgZqNTBVKwIYEzIwMjYwNzI5MTcyMjI5LjExMVowBIACAfSg # 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 # MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgANFa # T7VvhlhbLHT8ynCeuwkPYdwM0dZjQvGsg5ZPRBgwgd0GCyqGSIb3DQEJEAIvMYHN # MIHKMIHHMIGgBCBiuWRAi+p96PRsBt3TwW3jNozgPQS+Qco1CVm/NaU0QzB8MGWk # YzBhMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u # MTIwMAYDVQQDEylNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lc3RhbXBpbmcgQ0Eg # MjAyMAITMwAAAFr2DWeMhe3dCAAAAAAAWjAiBCC8MoWsKmmDVOE0WVxNOT4fAq6Q # Mog/KQxiwkqx8meSFTANBgkqhkiG9w0BAQsFAASCAgCajv6GFyTVln15gkMJ/f5g # nnFB55lVrOJs1VUWHxApweuESklXKSg4HoqM0VYUTm13zWnV7XEiKLA+6lYTY3W7 # yW5ihLru0ih5DRNVNuASiiR4ayV8J243Vyxpp6CCpnqKhmnndyWa7L/3u7F9LkPa # 052kRzJT1cXVDkmDujdYRrmzp+HO1lSeZ/ZwDG53EssT+xshBMR6ahMaRRYPRGxw # /LecvJ3hzThIgfXb4xWCQ/pYezIdRNtFx0GFvbEkk4qT0EyNeTQbVv5FBMWpFzL1 # naLJtTeX7FIWDV2wjrtZ19nleXqdbjOlW3IQ6i0KTBKeOGCddGADUuup6onGXkF8 # /twPzaebFxcaXlI2JUGsm23xWtSpUg5MGXHyMw20A7QefhKw5gD0lDRS7j9oSau2 # TjAcs45TTZh78izvMCbYi5rqaSz4ix67csb7a2MPfkltxPWjY29HuMpwfLH6myde # axoqNnQrQzsjHDEciR0OC+HDit8uraShMVCZmN4bbuptQITH3I8ztjGtNuT5niyS # 13hMgNh3rTMYo38fQBWIp1q34fH2cN0nTuo1XmskISzgF049N2mUVcxMS3CIrjBg # lh5lz8aUi8sfImYG8boCwgvOpb5yk3cisDUK7Hnk4GSf+S+q1x+vgxhng0/0+SvR # XTrj742PTGDaNXqgIiVdvQ== # SIG # End signature block |