Utilities/DLPValidationUtility.ps1
using module "..\CAMP.psm1" $ExchangeString = "Exchange" $SharePointString = "SharePoint" $OneDriveString = "OneDrive" $TeamsString = "Teams" $DevicesString = "Devices" Function Get-DLPPolicyValidation { Param ( $SensitiveTypes, $Config, $LogFile, $Name ) $ConfigObjectList = @() try { $SensitiveTypesWorkloadMapping = @() foreach ($SIT in $SensitiveTypes.keys) { $SensitiveTypesWorkloadMapping += New-Object -TypeName PSObject @{ Name = $SIT $ExchangeString = $false $SharePointString = $false $OneDriveString = $false $TeamsString = $false $DevicesString = $false } } #Getting Custom SIT if($($Config["GetDLPCustomSIT"]) -ne "Error") { $CustomSIT = $($Config["GetDLPCustomSIT"]).Name $CustomSITHashTable = @{} foreach($SIT in $CustomSIT) { $CustomSITHashTable[$SIT] = $null } } ForEach ($CompliancePolicy in $Config["GetDlpCompliancePolicy"]) { $PolicySensitiveType = New-Object System.Collections.Generic.HashSet[String] $PolicySensitiveType = Get-PolicySensitiveType -Config $Config -CompliancePolicy $CompliancePolicy -SensitiveTypes $SensitiveTypes if($($Config["GetDLPCustomSIT"]) -ne "Error") { $CustomSensitiveType = Get-PolicySensitiveType -Config $Config -CompliancePolicy $CompliancePolicy -SensitiveTypes $CustomSITHashTable $CustomSensitiveTypeText = $null foreach ($SIT in $CustomSensitiveType) { if ($null -ne $CustomSensitiveTypeText) { $CustomSensitiveTypeText += ", $SIT" } else { $CustomSensitiveTypeText += "$SIT" } } } if (($CompliancePolicy.Mode -ieq "enable") ) { $WorkloadsStatus = Get-AllLocationenabled -CompliancePolicy $CompliancePolicy $EnabledWorkload = $null $DisabledWorkload = "" $PolicySensitiveTypeText = $null foreach ($Workload in ($WorkloadsStatus.Keys | Sort-Object -CaseSensitive)) { if ($WorkloadsStatus[$Workload] -eq $true) { if ( $null -ne $EnabledWorkload) { $EnabledWorkload += ", $($Workload)" } else { $EnabledWorkload += "$($Workload)" } foreach ($SIT in $PolicySensitiveType) { if ($SITToChange = $SensitiveTypesWorkloadMapping | Where-Object { $_.Name -eq $SIT }) { $SITToChange.$($Workload) = $true } } } else { $DisabledWorkload += "$($Workload) " } } foreach ($SIT in $PolicySensitiveType) { if ($null -ne $PolicySensitiveTypeText) { $PolicySensitiveTypeText += ", $SIT" } else { $PolicySensitiveTypeText += "$SIT" } } If ($PolicySensitiveType.Count -ne 0 ) { $ConfigObject = [CAMPCheckConfig]::new() $Workload = $CompliancePolicy.Workload $ConfigObject.Object = "$($CompliancePolicy.Name)" if($null -eq $CustomSensitiveTypeText) { $ConfigObject.ConfigItem = "$PolicySensitiveTypeText" } else { $ConfigObject.ConfigItem = "$PolicySensitiveTypeText<br><strong>Custom SIT</strong> : $CustomSensitiveTypeText" } $ConfigData = "" $ConfigObjectResult = @{} $ConfigObjectResult = Set-ExchangeNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy $ConfigObjectResult = Set-SharePointNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy $ConfigObjectResult = Set-OneDriveNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy $ConfigObjectResult = Set-TeamsNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy $ConfigObjectResult = Set-DevicesNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy $ConfigData = "<strong>Enabled Workloads </strong>: $($EnabledWorkload)<BR/>" foreach ($ConfigResult in $ConfigObjectResult.keys) { $ConfigData += "<strong>$ConfigResult </strong>: $($ConfigObjectResult[$ConfigResult])<BR/>" } $NotInOrganizationAccessScope = $Config["GetDlpComplianceRule"] | Where-Object {$_.AccessScope -eq "NotInOrganization" -and $_.ParentPolicyName -eq "$($CompliancePolicy.Name)"} if($null -ne $NotInOrganizationAccessScope) { $ConfigData += "<strong>Access Scope</strong>: For users outside organization<BR/>" }else{ $ConfigData += "<strong>Access Scope</strong>: For users inside organization<BR/>" } $ConfigObject.ConfigData = "$ConfigData" $ConfigObject.SetResult([CAMPConfigLevel]::Informational, "Pass") $ConfigObjectList += $ConfigObject } } else { If ($PolicySensitiveType.Count -ne 0 ) { $ConfigObject = [CAMPCheckConfig]::new() $Workload = $CompliancePolicy.Workload $ConfigObject.Object = "$($CompliancePolicy.Name)" $PolicySensitiveTypeText = $null foreach ($SIT in $PolicySensitiveType) { if ($null -ne $PolicySensitiveTypeText) { $PolicySensitiveTypeText += ", $SIT" } else { $PolicySensitiveTypeText += "$SIT" } } if($null -eq $CustomSensitiveTypeText) { $ConfigObject.ConfigItem = "$PolicySensitiveTypeText" } else { $ConfigObject.ConfigItem = "$PolicySensitiveTypeText<br><strong>Custom SIT</strong> : $CustomSensitiveTypeText" } $Mode = $($CompliancePolicy.Mode) if ( $Mode -eq "TestWithoutNotifications") { $Mode = "test without notifications" } elseif ($Mode -eq "Disable") { $Mode = "disabled" } elseif ( $Mode -eq "TestWithNotifications") { $Mode = "test with notifications" } $ConfigObject.ConfigData = "<B>Policy is in $Mode state.<B>" $ConfigObject.SetResult([CAMPConfigLevel]::Informational, "Pass") $ConfigObjectList += $ConfigObject } } } $ConfigObjectList = Get-SensitiveTypesNotEnabled -SensitiveTypesWorkloadMapping $SensitiveTypesWorkloadMapping -ConfigObjectList $ConfigObjectList -LogFile $LogFile } catch { Write-Host "Error:$(Get-Date) There was an issue while running CAMP. Please try running the tool again after some time." -ForegroundColor:Red $ErrorMessage = $_.ToString() $StackTraceInfo = $_.ScriptStackTrace Write-Log -IsError -ErrorMessage $ErrorMessage -StackTraceInfo $StackTraceInfo -LogFile $LogFile -ErrorAction:SilentlyContinue } Return $ConfigObjectList } Function Get-NoPolicyRemediationAction { [CmdletBinding()] Param ( $Name, $PendingSensitiveTypes ) $RemediationActionScript = "" $PendingSensitiveTypesList = $PendingSensitiveTypes.split(",") $LowCountSenstiveinfodetails = "" $HighCountSenstiveinfodetails = "" foreach ($PendingSensitiveType in $PendingSensitiveTypesList) { $PendingSensitiveTypetrim = $PendingSensitiveType.trim() if ( $LowCountSenstiveinfodetails -eq "") { $LowCountSenstiveinfodetails += "@{Name =" + [char]34 $HighCountSenstiveinfodetails += "@{Name =" + [char]34 } else { $LowCountSenstiveinfodetails += ",@{Name =" + [char]34 $HighCountSenstiveinfodetails += ",@{Name =" + [char]34 } $LowCountSenstiveinfodetails += $PendingSensitiveTypetrim + [char]34 $LowCountSenstiveinfodetails += ";minCount = ""1""" $LowCountSenstiveinfodetails += ";maxCount = ""5""}" $HighCountSenstiveinfodetails += $PendingSensitiveTypetrim + [char]34 $HighCountSenstiveinfodetails += ";minCount = ""6""}" } $NewPolicyTemplateData = Get-Content "$PSScriptRoot\..\Templates\NewDLPPolicyTemplate.txt" if ($null -eq $NewPolicyTemplateData -or $NewPolicyTemplateData -eq "") { Write-Host "$(Get-Date) Template file does not exist/is corrupt in $PSScriptRoot\..\Templates\NewDLPPolicyTemplate.txt. Remediation wont be generated" -ForegroundColor Orange } else { $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<NewPolicyName>", "$Name") $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<HighSensitiveInfoDetails>", "$HighCountSenstiveinfodetails") $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<LowSensitiveInfoDetails>", "$LowCountSenstiveinfodetails") $LowRuleName = "Low Volume $Name" if ($LowRuleName.length -gt 60) { $LowRuleName = $LowRuleName.substring(0, 60) } $HighRuleName = "High Volume $Name" if ($HighRuleName.length -gt 60) { $HighRuleName = $HighRuleName.substring(0, 60) } $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<HighVolumeRuleName>", "$HighRuleName") $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<LowVolumeRuleName>", "$LowRuleName") $RemediationActionScript += $NewPolicyTemplateData Write-Host "$(Get-Date) Generating Remediation Action for $Name" -ForegroundColor Yellow } Return $RemediationActionScript } Function Get-PolicySensitiveType { Param ( $Config, $CompliancePolicy, $SensitiveTypes ) $PolicySensitiveTypes = New-Object System.Collections.Generic.HashSet[String] foreach ($ComplianceRule in $Config["GetDlpComplianceRule"]) { if ($ComplianceRule.Mode -ieq "enforce" -and $CompliancePolicy.name -eq $($ComplianceRule.ParentPolicyName) ) { $SensitiveInformationContent = $ComplianceRule.ContentContainsSensitiveInformation foreach ($SensitiveType in $($SensitiveTypes.keys)) { if ($SensitiveInformationContent.Values -contains $SensitiveType) { if (!$PolicySensitiveTypes.Contains($SensitiveType)) { $PolicySensitiveTypes.Add("$SensitiveType") | Out-Null } } if ($($SensitiveInformationContent.keys) -contains "groups") { foreach ($SensitiveInformationGroupList in $SensitiveInformationContent) { $SensitiveInformationGroups = $SensitiveInformationGroupList["groups"] foreach ($SensitiveInformationGroupDefined in $SensitiveInformationGroups) { $SensitiveInformationGroupDefinedValues = $SensitiveInformationGroupDefined.Values foreach ($SensitiveInformationGroupValue in $SensitiveInformationGroupDefinedValues) { foreach ($SensitiveInformationGroupVal in $SensitiveInformationGroupValue) { if ($SensitiveInformationGroupVal.Values -contains $SensitiveType ) { if (!$PolicySensitiveTypes.Contains($SensitiveType)) { $PolicySensitiveTypes.Add("$SensitiveType") | Out-Null } } } } } } } } } } Return $PolicySensitiveTypes } Function Get-SensitiveTypesNotEnabled { Param ( $SensitiveTypesWorkloadMapping, $LogFile, $ConfigObjectList ) $PendingSensitiveType = $null $PartialCoveredSIT = $null $PartialCoveredWorkload = $null foreach ($SensitiveTypes in $SensitiveTypesWorkloadMapping) { if (($SensitiveTypes.$ExchangeString -eq $false ) -and ($SensitiveTypes.$SharePointString -eq $false ) -and ($SensitiveTypes.$TeamsString -eq $false ) -and ($SensitiveTypes.$OneDriveString -eq $false ) -and ($SensitiveTypes.$DevicesString -eq $false ) ) { $PendingSensitiveType = Get-PartialSIT -PartialCoveredSIT $PendingSensitiveType -SensitiveTypesName $($SensitiveTypes.Name) } else { if ($SensitiveTypes.$ExchangeString -eq $false ) { $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name) $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $ExchangeString } if ($SensitiveTypes.$SharePointString -eq $false ) { $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name) $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $SharePointString } if ($SensitiveTypes.$OneDriveString -eq $false ) { $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name) $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $OneDriveString } if ($SensitiveTypes.$TeamsString -eq $false ) { $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name) $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $TeamsString } if ($SensitiveTypes.$DevicesString -eq $false ) { $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name) $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $DevicesString } } } if ($null -ne $PartialCoveredSIT) { $ConfigObject = [CAMPCheckConfig]::new() $ConfigObject.Object = "<B>Policy defined but not protected on 1 or more workloads<B>" $ConfigObject.ConfigItem = "$PartialCoveredSIT" $ConfigObject.ConfigData = "<b>Affected Workloads</B> : $PartialCoveredWorkload" $ConfigObject.SetResult([CAMPConfigLevel]::Ok, "Fail") $ConfigObjectList += $ConfigObject } if ($null -ne $PendingSensitiveType) { $ConfigObject = [CAMPCheckConfig]::new() $ConfigObject.Object = "<B>No active policy defined<B>" $ConfigObject.ConfigItem = "$PendingSensitiveType" $ConfigObject.ConfigData = "<b>Affected Workloads</B> : $ExchangeString, $SharePointString, $TeamsString, $OneDriveString, $DevicesString" $ConfigObject.InfoText ="It is recommended that you set up DLP policies that block access for users external to your organization for all Sensitive Information Types on all workloads." try { $ConfigObject.RemediationAction = Get-NoPolicyRemediationAction -Name $Name -PendingSensitiveTypes $PendingSensitiveType -ErrorAction:SilentlyContinue } catch { Write-Host "Warning:$(Get-Date) There was an issue in generating remediation script. Please review the script closely before running the same." -ForegroundColor:Yellow $ErrorMessage = $_.ToString() $StackTraceInfo = $_.ScriptStackTrace Write-Log -IsError -ErrorMessage $ErrorMessage -StackTraceInfo $StackTraceInfo -LogFile $LogFile -ErrorAction:SilentlyContinue } $ConfigObject.SetResult([CAMPConfigLevel]::Ok, "Fail") $ConfigObjectList += $ConfigObject } Return $ConfigObjectList } function Get-PartialSIT { Param ( $PartialCoveredSIT, $SensitiveTypesName ) if ((@($PartialCoveredSIT) -like "*$SensitiveTypesName*").Count -le 0) { if ($null -eq $PartialCoveredSIT) { $PartialCoveredSIT += "$SensitiveTypesName" } else { $PartialCoveredSIT += ", $SensitiveTypesName" } } return $PartialCoveredSIT } function Get-PartialSITWorkLoad { Param ( $PartialCoveredWorkload, $WorkloadName ) if ((@($PartialCoveredWorkload) -like "*$WorkloadName*").Count -le 0) { if ($null -eq $PartialCoveredWorkload) { $PartialCoveredWorkload += $WorkloadName } else { $PartialCoveredWorkload += ", $WorkloadName" } } return $PartialCoveredWorkload } Function Get-AllLocationenabled { Param ( $CompliancePolicy ) $ExchangeLocation = $CompliancePolicy.ExchangeLocation $SharePointLocation = $CompliancePolicy.SharePointLocation $OneDriveLocation = $CompliancePolicy.OneDriveLocation $TeamsLocation = $CompliancePolicy.TeamsLocation $EndpointDlpLocation = $CompliancePolicy.EndpointDlpLocation $WorkloadsStatus = @{} $WorkloadsStatus[$ExchangeString] = $false $WorkloadsStatus[$SharePointString] = $false $WorkloadsStatus[$OneDriveString] = $false $WorkloadsStatus[$TeamsString] = $false $WorkloadsStatus[$DevicesString] = $false if ((@($ExchangeLocation) -like 'All').Count -gt 0) { $WorkloadsStatus[$ExchangeString] = $true } if ((@($SharePointLocation) -like 'All').Count -gt 0) { $WorkloadsStatus[$SharePointString] = $true } if ((@($OneDriveLocation) -like 'All').Count -gt 0) { $WorkloadsStatus[$OneDriveString] = $true } if ((@($TeamsLocation) -like 'All').Count -gt 0) { $WorkloadsStatus[$TeamsString] = $true } if ((@($EndpointDlpLocation) -like 'All').Count -gt 0) { $WorkloadsStatus[$DevicesString] = $true } Return $WorkloadsStatus } Function Set-ExchangeNotAllLocationEnabledConfigObject { Param ( $ConfigObjectResult, $CompliancePolicy ) $ExchangeLocation = $CompliancePolicy.ExchangeLocation $ExchangeSenderException = $CompliancePolicy.ExchangeSenderException $ExchangeSenderMemberOf = $CompliancePolicy.ExchangeSenderMemberOf $ExchangeSenderMemberOfException = $CompliancePolicy.ExchangeSenderMemberOfException if (((@($ExchangeLocation) -like 'All').Count -lt 1)) { if (@($ExchangeLocation).count -ne 0) { $ConfigObjectResult["Included Exchange Groups"] += "$ExchangeLocation " } } if ($ExchangeSenderMemberOf.count -ne 0) { if ($ConfigObjectResult.contains("Included Exchange Groups")) { $ConfigObjectResult["Included Exchange Groups"] += ", $ExchangeSenderMemberOf " } else { $ConfigObjectResult["Included Exchange Groups"] = "$ExchangeSenderMemberOf " } } if (($ExchangeSenderMemberOfException.count -ne 0) -or ($ExchangeSenderException.count -ne 0) ) { $ConfigObjectResult["Excluded Exchange Groups"] += "$ExchangeSenderMemberOfException $ExchangeSenderException " } Return $ConfigObjectResult } function Set-SharePointNotAllLocationEnabledConfigObject { Param ( $ConfigObjectResult, $CompliancePolicy ) $SharePointLocation = $CompliancePolicy.SharePointLocation $SharePointLocationException = $CompliancePolicy.SharePointLocationException $SharePointOnPremisesLocationException = $CompliancePolicy.SharePointOnPremisesLocationException if (((@($SharePointLocation) -like 'All').Count -lt 1)) { if (@($SharePointLocation).count -ne 0) { $ConfigObjectResult["Included SP Sites"] += "$SharePointLocation " } } if (($SharePointLocationException.count -ne 0) -or ($SharePointOnPremisesLocationException.count -ne 0)) { $ConfigObjectResult["Excluded SP Sites"] += "$SharePointLocationException $SharePointOnPremisesLocationException " } Return $ConfigObjectResult } function Set-TeamsNotAllLocationEnabledConfigObject { Param ( $ConfigObjectResult, $CompliancePolicy ) $TeamsLocation = $CompliancePolicy.TeamsLocation $TeamsLocationException = $CompliancePolicy.TeamsLocationException if (((@($TeamsLocation) -like 'All').Count -lt 1)) { if (@($TeamsLocation).count -ne 0) { $ConfigObjectResult["Included Teams Account"] += "$TeamsLocation" } } if (($TeamsLocationException.count -ne 0)) { $ConfigObjectResult["Excluded Teams Account"] += "$TeamsLocationException" } Return $ConfigObjectResult } function Set-OneDriveNotAllLocationEnabledConfigObject { Param ( $ConfigObject, $PolicySensitiveType, $CompliancePolicy ) $OneDriveLocation = $CompliancePolicy.OneDriveLocation $OneDriveLocationException = $CompliancePolicy.OneDriveLocationException $ExceptIfOneDriveSharedByMemberOf = $CompliancePolicy.ExceptIfOneDriveSharedByMemberOf if (((@($OneDriveLocation) -like 'All').Count -lt 1)) { if (@($OneDriveLocation).count -ne 0) { $ConfigObjectResult["Included OneDrive Account"] += "$OneDriveLocation" } } if (($OneDriveLocationException.count -ne 0) -or ($ExceptIfOneDriveSharedByMemberOf.count -ne 0)) { $ConfigObjectResult["Excluded OneDrive Account"] += "$OneDriveLocationException $ExceptIfOneDriveSharedByMemberOf" } Return $ConfigObjectResult } function Set-DevicesNotAllLocationEnabledConfigObject { Param ( $ConfigObject, $PolicySensitiveType, $CompliancePolicy ) $EndpointDlpLocation = $CompliancePolicy.EndpointDlpLocation $EndpointDlpLocationException = $CompliancePolicy.EndpointDlpLocationException if (((@($EndpointDlpLocation) -like 'All').Count -lt 1)) { if (@($EndpointDlpLocation).count -ne 0) { $ConfigObjectResult["Included Devices User/Groups"] += "$EndpointDlpLocation" } } if (($EndpointDlpLocationException.count -ne 0)) { $ConfigObjectResult["Excluded Devices User/Groups"] += "$EndpointDlpLocationException" } Return $ConfigObjectResult } # SIG # Begin signature block # MIIlygYJKoZIhvcNAQcCoIIluzCCJbcCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCC1UJ0X7GbeTG63 # 8z5lcowa1rZlYPf8mlQaEpvPdKW5RKCCC5YwggT7MIID46ADAgECAhMzAAAE4qOH # mdFtQCqWAAEAAATiMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBUZXN0aW5nIFBD # QSAyMDEwMB4XDTIxMDkwMjE5MjYyN1oXDTIyMDkwMTE5MjYyN1owfDELMAkGA1UE # BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc # BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdQ29kZSBTaWdu # IFRlc3QgKERPIE5PVCBUUlVTVCkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK # AoIBAQC08O5FqM6i91zE1YIK4epCwArU+0xTEScHJ0Vfy32sK+Xf3dM/vHm1iLfc # 7hhDNwVxfHvaHgjNYC2Qr2cff4F40aShGrc6xyIdmcSiygICYGQrF7FWKQ4thEdX # HuAMiuVYZQ9Jo+vxOXRJTSa3zsFFrbkCOgun7Vu9UeFxOQT1ByNomsxky0gCRu+P # YdaqnbOyxNsnCDaGUUHp+D1EpBv4Cdrgy9o359Z4nFUyUm4MVMjpG6jC2n8dPonw # hAcbjIvyJzA1v88jVCMfDrHt0AkIHN69J4wahtOrJeERgXjklilV0hMRwkVkfpnJ # 18aw7NqWsDi4ekmBd2EL6d+HljzNAgMBAAGjggF3MIIBczATBgNVHSUEDDAKBggr # BgEFBQcDAzAdBgNVHQ4EFgQUCekP9tRzR3NLSbCNG+oPPWd/nuYwRQYDVR0RBD4w # PKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEWMBQGA1UEBRMN # MjMwMDcyKzQ2NzYwNTAfBgNVHSMEGDAWgBS/ZaKrb3WjTkWWVwXPOYf0wBUcHDBc # BgNVHR8EVTBTMFGgT6BNhktodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz # L2NybC9NaWNyb3NvZnQlMjBUZXN0aW5nJTIwUENBJTIwMjAxMCgxKS5jcmwwaQYI # KwYBBQUHAQEEXTBbMFkGCCsGAQUFBzAChk1odHRwOi8vd3d3Lm1pY3Jvc29mdC5j # b20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRlc3RpbmclMjBQQ0ElMjAyMDEw # KDEpLmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCTxe9mJYSi # GUIIw4imC+gePdQLAeeMTTa8Uwa406/66Su7fVZTGNFMpLwofA1WfxvAX4+5+U+J # aFJod4KyAdUngWtPlyPmkR0kXQ6mTxvqMFEih/s0mRyW6dHMHrCezmY//89C5zau # E3LBcI4gqAQ2ZabPxj2+j6+Er8StKv07PigCuM4M16DIQUAY6kNgnate4WoiiQSu # mXhMiwtUh6jgSnTpOqpNfXk+YJxNoqHH8qqyW7FcQ88jyoxM4LYdAQVN3eYD7eJn # xfW2nWIbDRaZpBkv9N1t8yObWcyC/YrRLuq3QLqpll20Y1eFsm+gypEoiERqpPUT # 3p7K5897ABKoMIIGkzCCBHugAwIBAgITMwAAAC01ekaIyQdx2AAAAAAALTANBgkq # hkiG9w0BAQsFADCBkDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x # EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv # bjE6MDgGA1UEAxMxTWljcm9zb2Z0IFRlc3RpbmcgUm9vdCBDZXJ0aWZpY2F0ZSBB # dXRob3JpdHkgMjAxMDAeFw0yMDEyMTAyMDQzMjBaFw0zNTA2MTcyMTA0MTFaMHkx # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt # b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1p # Y3Jvc29mdCBUZXN0aW5nIFBDQSAyMDEwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A # MIIBCgKCAQEAvzxggau+7P/XF2PypkLRE2KcsBfOukYaeyIuVXOaVLnG1NHKmP53 # Rw2OnfBezPhU7/LPKtRi8ak0CgTXxQWG8hD1TdOWCGaF2wJ9GNzieiOnmildrnkY # zwxj8Br/gampQz+pC7lR8bNIOvxELl8RxVY6/8oOzYgIwf3H1fU+7+pOG3KLI71F # N54fcMGnybggc+3zbD2LIQXPdxL+odwH6Q1beAlsMlUQR9A3yMf3+nP+RjTkVhao # N2RT1jX7w4C2jraGkaEQ1sFK9uN61BEKst4unhCX4IGuEl2IAV3MpMQoUpxg8Arm # iK9L6VeK7KMPNx4p9l0h09faXQ7JTtuNbQIDAQABo4IB+jCCAfYwDgYDVR0PAQH/ # BAQDAgGGMBIGCSsGAQQBgjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFOqfXzO2 # 0F+erestpsECu0A4y+e1MB0GA1UdDgQWBBS/ZaKrb3WjTkWWVwXPOYf0wBUcHDBU # BgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNy # b3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBkGCSsGAQQBgjcU # AgQMHgoAUwB1AGIAQwBBMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUowEE # fjCIM+u5MZzK64V2Z/xltNEwWQYDVR0fBFIwUDBOoEygSoZIaHR0cDovL2NybC5t # aWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljVGVzUm9vQ2VyQXV0XzIw # MTAtMDYtMTcuY3JsMIGNBggrBgEFBQcBAQSBgDB+ME0GCCsGAQUFBzAChkFodHRw # Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Rlc1Jvb0NlckF1dF8y # MDEwLTA2LTE3LmNydDAtBggrBgEFBQcwAYYhaHR0cDovL29uZW9jc3AubWljcm9z # b2Z0LmNvbS9vY3NwMA0GCSqGSIb3DQEBCwUAA4ICAQAntNCFsp7MD6QqU3PVbdrX # MQDI9v9jyPYBEbUYktrctPmvJuj8Snm9wWewiAN5Zc81NQVYjuKDBpb1un4SWVCb # 4PDVPZ0J87tGzYe9dOJ30EYGeiIaaStkLLmLOYAM6oInIqIwVyIk2SE/q2lGt8Ov # wcZevNmPkVYjk6nyJi5EdvS6ciPRmW9bRWRT4pWU8bZIQL938LE4lHOQAixrAQiW # es5Szp2U85E0nLdaDr5w/I28J/Z1+4zW1Nao1prVCOqrosnoNUfVf1kvswfW3FY2 # l1PiAYp8sGyO57GaztXdBoEOBcDLedfcPra9+NLdEF36NkE0g+9dbokFY7KxhUJ8 # WpMiCmN4yj9LKFLvQbctGMJJY9EwHFifm2pgaiaafKF1Gyz+NruJzEEgpysMo/f9 # AVBQ/qCdPQQGEWp3QDIaef4ts9QTx+RmDKCBDMTFLgFmmhbtUY0JWjLkKn7soz/L # IcDUle/p5TiFD4VhfZnAcvYQHXfuslnyp+yuhWzASnAQNnOIO6fc1JFIwkDkcM+k # /TspfAajzHooSAwXkrOWrjRDV6wI0YzMVHrEyQ0hZ5NnIXbL3lrTkOPjf3NBu1na # SNEaySduStDbFVjV3TXoENEnZiugJKYSwmhzoYHM1ngipN5rNdqJiK5ukp6E8LDz # i3l5/7XctJQY3+ZgHDJosjGCGYowghmGAgEBMIGQMHkxCzAJBgNVBAYTAlVTMRMw # EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN # aWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBUZXN0aW5n # IFBDQSAyMDEwAhMzAAAE4qOHmdFtQCqWAAEAAATiMA0GCWCGSAFlAwQCAQUAoIGu # MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgor # BgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCA12SZzsiXp7IJkqjK0cj4YFDqPwZgl # XZJoaa5qS2JgCjBCBgorBgEEAYI3AgEMMTQwMqAUgBIATQBpAGMAcgBvAHMAbwBm # AHShGoAYaHR0cDovL3d3dy5taWNyb3NvZnQuY29tMA0GCSqGSIb3DQEBAQUABIIB # ACekDfWxgKCQ5cGrg81ZoZpE6C2tHkOlW1v04xEjhMdkpN2fclms0LmPrRkzPstg # 3g4IgHboOCMWbVyFPBvDLkk874kjn+51R2jcrdTUFxArw29SAhavKJ3ADgOlzdRJ # qrQ3refw/X7BiVnqeIugZUZ4Lih3y1CG8AtW/Ts6JnRb1bGA4KqTinNRE+z2krsd # YS5+Eo+OX5ezUY+fYYn2LNBiEczYrtzlO7J5AcO7dHKKsvJo9kROjXSvTb1uHBTh # UO4Q9q2T356bh88HFRrfyrkSHbk8AGhJgc4Ms75Aeuf4lf3FR/iVbVuRsFYc2VU6 # NkLTWstioIMMXdBKdjwA5wmhghcZMIIXFQYKKwYBBAGCNwMDATGCFwUwghcBBgkq # hkiG9w0BBwKgghbyMIIW7gIBAzEPMA0GCWCGSAFlAwQCAQUAMIIBWQYLKoZIhvcN # AQkQAQSgggFIBIIBRDCCAUACAQEGCisGAQQBhFkKAwEwMTANBglghkgBZQMEAgEF # AAQgD4vc/m5mrXmA8p9CccXUE0RGK6MA9+XG7cgFouGc0q0CBmKeAn6EURgTMjAy # MjA2MTAwNDExMzYuMTI1WjAEgAIB9KCB2KSB1TCB0jELMAkGA1UEBhMCVVMxEzAR # BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p # Y3Jvc29mdCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQg # T3BlcmF0aW9ucyBMaW1pdGVkMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpBMjQw # LTRCODItMTMwRTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vydmlj # ZaCCEWgwggcUMIIE/KADAgECAhMzAAABjXpVLnh0mSq3AAEAAAGNMA0GCSqGSIb3 # DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD # VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAk # BgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTIxMTAyODE5 # Mjc0NVoXDTIzMDEyNjE5Mjc0NVowgdIxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX # YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg # Q29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlv # bnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046QTI0MC00QjgyLTEz # MEUxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2UwggIiMA0G # CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDaNEgtmD47pTt0ty7AE8wH7S0lTPTA # cuonl/soldCxPNZOgANQxhXjFVmen2Y9NaiNQn+Xc7hep6AsM124UA5tyK2svJjk # cOzEB9QbX/ZiKVxKRI/oJwypZ+xLBQsZfnOWxUocnu2/CDbrLp4uSVR0UymKrb3h # Pi4lB1d3k7uYXLS9WRoY8bE1YttnEo3Ooq0WdZDuMy1nTle9p+QhZms1MW/wYakC # Ue1GxnUDwoOjogNIZU1lldtCz587Aw4an8HOh3x/VgjwZvag3+bHZxy90av2Vrnl # Bl5Wwzst9NoQ9DFuABwuBYOUg9yZPNwGSwTMs5CxKkHOyo9pYj3KRXDmh+auQUox # ulBPkQySLay4mhUznEaB1lae3+3PTTG5s9IoWLgHggwVQH2ZwA1Sr1wdouwdsMn4 # BSxU7SqdWPDNc9gl5HsL8HxfRSXpSQh2mVmadxBlIErfJlDL6gay4kpcUCrcGXFP # qQO6Fhi87uK0us95jSSe63WsqTGib66Lq8J22EJ+cCLKSfJELaWSerPPzHWYORDl # Do7H2nr+V24W6lIky2CwI8318i+t+mkwMUi9GhQuwc50smOtGWLxyjkz69mZ/bSh # PFi5fMzS1tG6sQnJwHlkxvDOewUfKY6SDLHw54WddXdxqvjm56MjUHWKpQNt5I3G # e9zO46FynPBpyQIDAQABo4IBNjCCATIwHQYDVR0OBBYEFHjMkW6Hn0bClO5KO7hJ # Nx+WKGaTMB8GA1UdIwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMF8GA1UdHwRY # MFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01p # Y3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBsBggrBgEF # BQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w # a2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAo # MSkuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZI # hvcNAQELBQADggIBADWvc7PSUSrdW+l0WWHdgHFziGdiQAvJg8Nr0U7heCrCQGbw # uxv6Ure1sYaCmLpAlsreIzcErQ5sFzBFolULEYsa2vonP2FG6ZHIXyjifbLdiIq/ # iiUHE2MVKFIZz0Tb0mZWMGYuCZ+NGo9z/asPbmrijDi4Detz16SJq5+AaFxIB16T # +X6QBJvOiE63/nPb4iWBPh7dq5JTO3YYAp8pkHTZkMZYop4JjekQuPW26HrJ+s4k # 88ic7hlktbe+Apq+0vx7oUlnImgMUx7Ann2gQv4Ard7YzYjggUT2fotVLxtL1Rsx # Qy+sCVc3lkzYjwZ0cH1Nt8jXtab/1R/iq7nzw8k3u8ImP2z4rFmpdzmwZJwuCqI+ # ohts1MT78ARn95OLFz1guBPIypqRkjn3AaqOs41BJju7RUQOQQTqKTP4VIVEorOn # JJvRZOAy9bGwu9uc3wAKYhI+cEdhmgayw8Avt+gYYoUt0AFNALY9fX1aOt/KuyEd # 2KpKUKymogYFPFFoe3I8yujcH/bqA98KXcwLesLc0arjEacgcNkZKLNSYaDxORAC # WhV1Tl0nW/3XSCPFrFpStoaE/wi20TRFadTldGn+wZo2YNwzBvIe5KloWyfdDbU7 # OK0/gGc3m2msdqeAALuOh7jOYueZGcCJRz2xGpDZuawwC9Smw7yeU4WaIzUvMIIH # cTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAAAAAAFTANBgkqhkiG9w0BAQsFADCB # iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl # ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMp # TWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjEw # OTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYDVQQGEwJVUzETMBEGA1UE # CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z # b2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ # Q0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOThpkzntHIh # C3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2AX9sSuDivbk+F2Az/1xPx2b3lVNx # WuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpSg0S3po5GawcU88V29YZQ3MFEyHFc # UTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2rrPY2vjUmZNqYO7oaezOtgFt+jBAc # nVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k45GPsjksUZzpcGkNyjYtcI4xyDUo # veO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSueik3rMvrg0XnRm7KMtXAhjBcTyzi # YrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09/SDPc31BmkZ1zcRfNN0Sidb9pSB9 # fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR6L8FA6PRc6ZNN3SUHDSCD/AQ8rdH # GO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxCaC4Q6oRRRuLRvWoYWmEBc8pnol7X # KHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaDIV1fMHSRlJTYuVD5C4lh8zYGNRiE # R9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMURHXLvjflSxIUXk8A8FdsaN8cIFRg/ # eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMBAAGjggHdMIIB2TASBgkrBgEEAYI3 # FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQqp1L+ZMSavoKRPEY1Kc8Q/y8E7jAd # BgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXAYDVR0gBFUwUzBRBgwrBgEE # AYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29t # L3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQMMAoGCCsGAQUFBwMI # MBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMB # Af8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYGA1Ud # HwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3By # b2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQRO # MEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2Vy # dHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEBCwUAA4IC # AQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2Pk5HZHixBpOXPTEztTnXwnE2P9pk # bHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03dmLq2HnjYNi6cqYJWAAOwBb6J6Gng # ugnue99qb74py27YP0h1AdkY3m2CDPVtI1TkeFN1JFe53Z/zjj3G82jfZfakVqr3 # lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kpicO8F7BUhUKz/AyeixmJ5/ALaoHC # gRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKpW99Jo3QMvOyRgNI95ko+ZjtPu4b6 # MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrYUP4KWN1APMdUbZ1jdEgssU5HLcEU # BHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QBjloZkWsNn6Qo3GcZKCS6OEuabvsh # VGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkBRH58oWFsc/4Ku+xBZj1p/cvBQUl+ # fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue10CgaiQuPNtq6TPmb/wrp # NPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq0Z4+7X6gMTN9vMvpe784cETRkPHI # qzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1VM1izoXBm8qGCAtcwggJAAgEBMIIB # AKGB2KSB1TCB0jELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO # BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEt # MCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMSYw # JAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpBMjQwLTRCODItMTMwRTElMCMGA1UEAxMc # TWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIaAxUAgHOV # kz1NE0Pg+C2ktZBmRI9hVwmggYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UE # CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z # b2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ # Q0EgMjAxMDANBgkqhkiG9w0BAQUFAAIFAOZNHhYwIhgPMjAyMjA2MTAwOTM0MTRa # GA8yMDIyMDYxMTA5MzQxNFowdzA9BgorBgEEAYRZCgQBMS8wLTAKAgUA5k0eFgIB # ADAKAgEAAgIdVwIB/zAHAgEAAgIRzTAKAgUA5k5vlgIBADA2BgorBgEEAYRZCgQC # MSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0GCSqG # SIb3DQEBBQUAA4GBAGiKOoSIHojLow6Kkkk/r8LP2tciPzd5Fcn59o9TzAHigCqU # X0CLxuNOhMw4d1cTQ1Hg8fCGoQeJbp/bo3xnxexQfLG9VtVchL/SniDTItMMoE/T # eeel3JS/b1VrDVlVCtFI9rsAkF8wm17k/QUiT7/cVfGyBqeKBwLahSEL89O4MYIE # DTCCBAkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x # EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv # bjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAGN # elUueHSZKrcAAQAAAY0wDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzEN # BgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgV2bnplSHGMFPUHFrk0Wlfkdz # oJL+7cJ82xWNo6/JkEAwgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCCelhEz # +h1eQMCfN/a50vnr1bxx8ZODBW56dDy20hjNfzCBmDCBgKR+MHwxCzAJBgNVBAYT # AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBU # aW1lLVN0YW1wIFBDQSAyMDEwAhMzAAABjXpVLnh0mSq3AAEAAAGNMCIEILN626OK # Bt4JaSLIIVTruoAzcAN6skUU95hFTq72KiiCMA0GCSqGSIb3DQEBCwUABIICAD74 # qibLjZ7Cpe90gK5KrxLVArN4A7jfKRjQE45kMHolSBkmEPT27MGIZ6hzRXoO83J9 # CQ298JHgGn2OJvj5kIqC0/z/w6L1eLrOs9gBC/aOQANBTbVVi6RGTM4yVl4D4r3w # Z86QY/cMoApNdU73Kh5bVKb0QkoxyOXoIZ88PDsdpVfexAnY1v3SXOIvNx4tZTQK # Yc8fV0rTTqkBLVMNietS/W0qXIxtiKSzrRE32Q4pYCHadl0zOJrFdXMS1L/MKDl9 # JK548L84yunFIGGob/XNSmIKZ/kZ7rt82eSWtpKkHEGkHZMjggdOuh74vFbU2y5v # iRzy5aXSpj4kBocc7SzAGpMyJDh6y0KLBpbE3L5xrFcAzkDeus6587+v2pZw/1m4 # wAQxo1b3+Wiwk9+/9mM77pBfMfHIzHubBufTQdD6eHGf9FjGV99I99AfCd3WH6Rz # 8HbHkCQspek2NmpXL3/qqcdqBYJai8tzsCtwvBluFvhvE/fT4AhZIbwSKqjbXSgM # xFkQR/bi6i6EV6hnj75Kw9g1WPK52hhDkqbjs3wkWAyrdp4Ae9+d98pDmaV5T8Bv # YZ0AVWFY8l202qtqH/dsHLAJKh6rZvbdRyuSnHsnmx6GFpfIHAwEX1A0uqxmHL5Y # Twxdjg70NUdOwf/48hhdGxaF9EmzsRZBmXPHsxNn # SIG # End signature block |