Utilities/DLPValidationUtility.ps1


using module "..\MCCA.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 = [MCCACheckConfig]::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([MCCAConfigLevel]::Informational, "Pass")   
                    $ConfigObjectList += $ConfigObject
    
                }
                
            }   
            else {
                If ($PolicySensitiveType.Count -ne 0 ) {   
                    $ConfigObject = [MCCACheckConfig]::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([MCCAConfigLevel]::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 MCCA. 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 = [MCCACheckConfig]::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([MCCAConfigLevel]::Ok, "Fail")            
        $ConfigObjectList += $ConfigObject
    }
    if ($null -ne $PendingSensitiveType) { 
                   
        $ConfigObject = [MCCACheckConfig]::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([MCCAConfigLevel]::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
# MIIhigYJKoZIhvcNAQcCoIIhezCCIXcCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBzCiwQmH0gTqrc
# gd8MT1NHhoROilROYYO+9DNZMq3Ps6CCC4gwggUEMIID7KADAgECAhMzAAAEVCNc
# ZRG5OpzwAAAAAARUMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBUZXN0aW5nIFBD
# QSAyMDEwMB4XDTIwMTIxNTE5NDMyOFoXDTIxMTIwMjE5NDMyOFowfDELMAkGA1UE
# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdQ29kZSBTaWdu
# IFRlc3QgKERPIE5PVCBUUlVTVCkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
# AoIBAQDJglbDtckphl35hjr1SAbhhEKcgiyOM3JVKu06pLqgRPlNzxVYR5iqd1sz
# nanX11YhCkVuxeAzfvvNYrrK7kPpW6VNSqt41i6g6jMTlbopMvfc3OY5U8QT9tPl
# 9Puo1nJy6PcNbyWtrTXli6xc5/8zXpE5QIW66YYB7sVtPXpbesIDuCcv82JQFW8L
# Nkj7eTp9WxMYcGKtBJZjxjHHYgWc7q7QLHE5e8Xzs9kQMNlTM+d2UDgufUkf5DR5
# 0tgqkmWgE/RX0Nj3z2UFfJh+PGrJ7XGwlc5ZC/cUPcsKxr6q2fxszgRRufoYgJRt
# DmAVORl31vkc016giNvVAaM/+kwJAgMBAAGjggGAMIIBfDATBgNVHSUEDDAKBggr
# BgEFBQcDAzAdBgNVHQ4EFgQUWWOG7bgrqljpz3pfJwrJ/pzUePMwVAYDVR0RBE0w
# S6RJMEcxLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGlt
# aXRlZDEWMBQGA1UEBRMNMjMwMDcyKzQ2MzAxOTAfBgNVHSMEGDAWgBTd1keLIxQv
# 2DhoQqM+bcPwkPcs0DBZBgNVHR8EUjBQME6gTKBKhkhodHRwOi8vd3d3Lm1pY3Jv
# c29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBUZXN0aW5nJTIwUENBJTIw
# MjAxMC5jcmwwZgYIKwYBBQUHAQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3
# Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRlc3Rpbmcl
# MjBQQ0ElMjAyMDEwLmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IB
# AQBinsc8haN91EumLU8Z7Qq6nhfgAKxz4tcrIsHDfY56jx9YSqyb8k35mepKZ91s
# sHfqVip/C+FfJQ2owQT8o61kwXTWOrns/+xgwMcvRtHbqx0DpnQOD77Ry46SjB5K
# 3nChTh79lm9Xmn5buIjuroDnS5buXI+YfgNkuToSVX/IckedZFWpW4vLhC+efUfW
# 1L6bfsw0meHV/zLoyBf6cgaUNCMnu3bUl3PqKkms9E6mA7NJruOSgVaWfAr9mw8s
# FYBTOLS/73naxMuP+evuQqnwBMWk/he8ga3YAaGbl2rpQJJr+A0PLmwPvECcmGre
# LFyXioRLeRxL5O0QGYtHKa42MIIGfDCCBGSgAwIBAgIKYRGEbwAAAAAAAzANBgkq
# hkiG9w0BAQsFADCBkDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
# EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
# bjE6MDgGA1UEAxMxTWljcm9zb2Z0IFRlc3RpbmcgUm9vdCBDZXJ0aWZpY2F0ZSBB
# dXRob3JpdHkgMjAxMDAeFw0xMDA3MDEyMTIzMDFaFw0yNTA3MDEyMTMzMDFaMHkx
# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1p
# Y3Jvc29mdCBUZXN0aW5nIFBDQSAyMDEwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
# MIIBCgKCAQEAwb0h1UtmBgCSMDkYystzQlmx75snqODoVb0psPkkHzrR6MNZie2R
# tsHoM2P2WmQZ4i58DJCABTi/HKa6DWov7yeXq97271Dzg+fXw0U3Ij8YtcKWEbaN
# EoNZiydRBlZ1uWBqEw7VJj8tlqoFzKGHP75PNO8MTG/MBNSh5mfNCiczn+Ovm29o
# fLy0DHM0jFqB+Yf7VBzFR2zqn1e0Wf3OGal3fIdCn7V5lLzLdpLblpehXwQkOf6h
# leGfhuNe2VxW30OQn8kU6tH1oFur8wgE3SivG+KqLhOgCu3SmUQq9ZlE+yukT/G7
# YcIdLfUlJwKoeO+TOfRedYHu0uB2DFsj7wIDAQABo4IB7DCCAegwEAYJKwYBBAGC
# NxUBBAMCAQAwHQYDVR0OBBYEFN3WR4sjFC/YOGhCoz5tw/CQ9yzQMBkGCSsGAQQB
# gjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/
# MB8GA1UdIwQYMBaAFKMBBH4wiDPruTGcyuuFdmf8ZbTRMFkGA1UdHwRSMFAwTqBM
# oEqGSGh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01p
# Y1Rlc1Jvb0NlckF1dF8yMDEwLTA2LTE3LmNybDBdBggrBgEFBQcBAQRRME8wTQYI
# KwYBBQUHMAKGQWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWlj
# VGVzUm9vQ2VyQXV0XzIwMTAtMDYtMTcuY3J0MIGgBgNVHSABAf8EgZUwgZIwgY8G
# CSsGAQQBgjcuAzCBgTA9BggrBgEFBQcCARYxaHR0cDovL3d3dy5taWNyb3NvZnQu
# Y29tL1BLSS9kb2NzL0NQUy9kZWZhdWx0Lmh0bTBABggrBgEFBQcCAjA0HjIgHQBM
# AGUAZwBhAGwAXwBQAG8AbABpAGMAeQBfAFMAdABhAHQAZQBtAGUAbgB0AC4gHTAN
# BgkqhkiG9w0BAQsFAAOCAgEAQGEFPjfdM3tSwkhrgPdgAxa2yS6Jfr3ZWBxj0/WS
# 0vZaBA0I7oe/65g0OmV8UOTIGylQeVV7GDmRtUEm8xd/mJVnfEzdcuQdtQTNw0j2
# +q/t265edJFtrdSagArYi22Z5oZoeYZHSYvB2FHy0O8SnD9INQiCT/Qsiope1Cb/
# x5zFyooExogWh431bVcBuZPK6MpqxIq6QQ3DjFQdDmYk18WCBw2zOL+yyLWWCCEn
# T7Ovi8McM8Ha6DHaY+Nvt3VkAbpqURkAIKifYuVIgULVDPvby6SiEZ7o51n0MW2i
# LiLdh0SxaR1GChjl0ZX9ePKPu9XV92FmqfPPqHGsZDPK5Gr4AzZHFknvQ6aKvGt7
# Utj/QacXsA1foksxdCUaPVDmXnImkkA2b65ELJMSY7XTu9uS+hORbtU4vpRpensU
# Qp4T26KMQqhxBi0XYsF5K5i6fobkxgCvM5nxLdHdSRa6w3buZKqBtzlU9nTeCVRT
# aThbwlPyzYlQwsgiHBtHEkVbQ48jXJDIbtT3D7W3q469ZnC/EZE876J6B+KSL0JN
# ZOCDi6XcbJTo9qIoAKWY6ggSQN5iBGR5Z8EboJYOBK++J0pi+vedwtK9VcJe09L1
# 50DvIs2/op3AG9a+mPuOTeWlV8MPj6hyQUY74Y8gShvtWgy1TN4sY1fT+jmZDr6e
# LqMxghVYMIIVVAIBATCBkDB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
# cmF0aW9uMSMwIQYDVQQDExpNaWNyb3NvZnQgVGVzdGluZyBQQ0EgMjAxMAITMwAA
# BFQjXGURuTqc8AAAAAAEVDANBglghkgBZQMEAgEFAKCBsDAZBgkqhkiG9w0BCQMx
# DAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkq
# hkiG9w0BCQQxIgQgv495UEaBkFybvlivUmcj5YQ4e0gXq0HrUQeotePARnUwRAYK
# KwYBBAGCNwIBDDE2MDSgFIASAE0AaQBjAHIAbwBzAG8AZgB0oRyAGmh0dHBzOi8v
# d3d3Lm1pY3Jvc29mdC5jb20gMA0GCSqGSIb3DQEBAQUABIIBAAYfNY0YnRyUY0vW
# JhaBNhTUe8EA0slh7CBazsKDeeKK8FEXg8DoJNuPLdb0UjJJb/YlrqUXXTg5um3m
# ahl+hHBgqtrz0ivCstzQRpkcA9BTDfqY4dO+d+nIbrWOeUHS2aQ/wEb/+RG0oxLV
# AwN6juis/gZ0P7f4iHQjCH0FkWydicXuSVmgBZdR/NwLdT4c5LzBZmeVdLfmXMUK
# ssJh5pbR60AAoHOgqgtkpAqGT65MoS+gmwr72LqB/bLnSzTJXMGD60EEd5zzC6Ww
# w7vJAaMxD8bg1t/G0eeac0MP+yx0d5Z2lxI9QN1Yijpq06nk6VuUq6yAgTGGx628
# l8eOIcShghLlMIIS4QYKKwYBBAGCNwMDATGCEtEwghLNBgkqhkiG9w0BBwKgghK+
# MIISugIBAzEPMA0GCWCGSAFlAwQCAQUAMIIBUQYLKoZIhvcNAQkQAQSgggFABIIB
# PDCCATgCAQEGCisGAQQBhFkKAwEwMTANBglghkgBZQMEAgEFAAQgDOVSxHXZ4/3W
# RyW6FhZWf+5eFzidcTM4H5w1JNvU9GUCBmCumahy7hgTMjAyMTA2MTgxMDA4MzQu
# Mzg4WjAEgAIB9KCB0KSBzTCByjELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
# bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
# b3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEm
# MCQGA1UECxMdVGhhbGVzIFRTUyBFU046M0U3QS1FMzU5LUEyNUQxJTAjBgNVBAMT
# HE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Wggg48MIIE8TCCA9mgAwIBAgIT
# MwAAAVIwS12JrOZwRwAAAAABUjANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJV
# UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
# ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGlt
# ZS1TdGFtcCBQQ0EgMjAxMDAeFw0yMDExMTIxODI2MDVaFw0yMjAyMTExODI2MDVa
# MIHKMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQL
# ExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMSYwJAYDVQQLEx1UaGFsZXMg
# VFNTIEVTTjozRTdBLUUzNTktQTI1RDElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUt
# U3RhbXAgU2VydmljZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK7M
# boSJmHS1oJJuzAyK6kxNidtugXOOPUO4Ntu9PRFcoEJWX+6YD5TLbXgOYeIWGR65
# F2UsHTJrlL26bloqvuUEGpnO+0qAY2AJFsNMb1i7qTMPM9PNBG6VUi+hZXLSAhOc
# TKgnU7ebkg+mwsE1AJ1eyH7dNkXvckBy5vbVufGb/izF7jNN1t220Gupfz8kkXZU
# ScA/4wG8XZRBKjpdQBpMoL8c8M8Jx78iw2gDHEsMjXAeEiWqNEGe3gczkdwoetmu
# 8f68eeKGKR2UTOHd+NAWjCTV8bs9WGY7rQ7m9V2oD4f3fXiEcQ1AjRxuj5KRKLxJ
# IlIs2LGCPR5Z49OHulsCAwEAAaOCARswggEXMB0GA1UdDgQWBBSE3a7arCPWXZza
# H+RQsO4FEmx7FDAfBgNVHSMEGDAWgBTVYzpcijGQ80N7fEYbxTNoWoVtVTBWBgNV
# HR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9w
# cm9kdWN0cy9NaWNUaW1TdGFQQ0FfMjAxMC0wNy0wMS5jcmwwWgYIKwYBBQUHAQEE
# TjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2Nl
# cnRzL01pY1RpbVN0YVBDQV8yMDEwLTA3LTAxLmNydDAMBgNVHRMBAf8EAjAAMBMG
# A1UdJQQMMAoGCCsGAQUFBwMIMA0GCSqGSIb3DQEBCwUAA4IBAQBVxSdx8WpJrNBs
# MRd/d3XT+6mJZBTkd1NvAb2/1t5UgNobigQvIhw0Tp7oJs4EyU9T6yalhhycreO5
# w2oKHCq4ubF2LaI/LiJDq+MB0Gn35UVaWsGpSw1dnOMKmAwJmPpu7xerQ2d2XhbI
# FsjQmS7ry9Q0bjCwx0o/d3P7UzOT1JSZrePsfI0Dnn12j2eEqahkyfl21/TdC/GV
# oTAwBo+T3G5S/0E3xw28WelaTiYsRFBbq0DetcrSygQhIpNgbs6x7ugxdkNg9bF/
# 2gWFgrNnD9LCeF0GiPZLl7JgTcC4X9lfNHeF2nf9cbNl450RF8XLWsLtkHCEMhqN
# 4UyLncafMIIGcTCCBFmgAwIBAgIKYQmBKgAAAAAAAjANBgkqhkiG9w0BAQsFADCB
# iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
# ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMp
# TWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMTAw
# NzAxMjEzNjU1WhcNMjUwNzAxMjE0NjU1WjB8MQswCQYDVQQGEwJVUzETMBEGA1UE
# CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
# b2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ
# Q0EgMjAxMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKkdDbx3EYo6
# IOz8E5f1+n9plGt0VBDVpQoAgoX77XxoSyxfxcPlYcJ2tz5mK1vwFVMnBDEfQRsa
# lR3OCROOfGEwWbEwRA/xYIiEVEMM1024OAizQt2TrNZzMFcmgqNFDdDq9UeBzb8k
# YDJYYEbyWEeGMoQedGFnkV+BVLHPk0ySwcSmXdFhE24oxhr5hoC732H8RsEnHSRn
# EnIaIYqvS2SJUGKxXf13Hz3wV3WsvYpCTUBR0Q+cBj5nf/VmwAOWRH7v0Ev9buWa
# yrGo8noqCjHw2k4GkbaICDXoeByw6ZnNPOcvRLqn9NxkvaQBwSAJk3jN/LzAyURd
# XhacAQVPIk0CAwEAAaOCAeYwggHiMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQW
# BBTVYzpcijGQ80N7fEYbxTNoWoVtVTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMA
# QTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV9lbL
# j+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1p
# Y3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRfMjAxMC0w
# Ni0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3
# Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIz
# LmNydDCBoAYDVR0gAQH/BIGVMIGSMIGPBgkrBgEEAYI3LgMwgYEwPQYIKwYBBQUH
# AgEWMWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9QS0kvZG9jcy9DUFMvZGVmYXVs
# dC5odG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AUABvAGwAaQBjAHkA
# XwBTAHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAAfmiFEN
# 4sbgmD+BcQM9naOhIW+z66bM9TG+zwXiqf76V20ZMLPCxWbJat/15/B4vceoniXj
# +bzta1RXCCtRgkQS+7lTjMz0YBKKdsxAQEGb3FwX/1z5Xhc1mCRWS3TvQhDIr79/
# xn/yN31aPxzymXlKkVIArzgPF/UveYFl2am1a+THzvbKegBvSzBEJCI8z+0DpZaP
# WSm8tv0E4XCfMkon/VWvL/625Y4zu2JfmttXQOnxzplmkIz/amJ/3cVKC5Em4jns
# GUpxY517IW3DnKOiPPp/fZZqkHimbdLhnPkd/DjYlPTGpQqWhqS9nhquBEKDuLWA
# myI4ILUl5WTs9/S/fmNZJQ96LjlXdqJxqgaKD4kWumGnEcua2A5HmoDF0M2n0O99
# g/DhO3EJ3110mCIIYdqwUB5vvfHhAN/nMQekkzr3ZUd46PioSKv33nJ+YWtvd6mB
# y6cJrDm77MbL2IK0cs0d9LiFAR6A+xuJKlQ5slvayA1VmXqHczsI5pgt6o3gMy4S
# KfXAL1QnIffIrE7aKLixqduWsqdCosnPGUFN4Ib5KpqjEWYw07t0MkvfY3v1mYov
# G8chr1m1rtxEPJdQcdeh0sVV42neV8HR3jDA/czmTfsNv11P6Z0eGTgvvM9YBS7v
# DaBQNdrvCScc1bN+NR4Iuto229Nfj950iEkSoYICzjCCAjcCAQEwgfihgdCkgc0w
# gcoxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsT
# HE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJjAkBgNVBAsTHVRoYWxlcyBU
# U1MgRVNOOjNFN0EtRTM1OS1BMjVEMSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1T
# dGFtcCBTZXJ2aWNloiMKAQEwBwYFKw4DAhoDFQC/bp5Ulq6ZyZNyF3qGprJAw0Ne
# W6CBgzCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
# DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
# JjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMA0GCSqGSIb3
# DQEBBQUAAgUA5HbBPDAiGA8yMDIxMDYxODE0NTI0NFoYDzIwMjEwNjE5MTQ1MjQ0
# WjB3MD0GCisGAQQBhFkKBAExLzAtMAoCBQDkdsE8AgEAMAoCAQACAhJhAgH/MAcC
# AQACAhGvMAoCBQDkeBK8AgEAMDYGCisGAQQBhFkKBAIxKDAmMAwGCisGAQQBhFkK
# AwKgCjAIAgEAAgMHoSChCjAIAgEAAgMBhqAwDQYJKoZIhvcNAQEFBQADgYEAyOcF
# tRdrJyhD5+GE+DnlmowdJ1dlCuxRlfuJOMP3bIEZfv5MovXcYFKYHKKR04Vzr0XX
# 9tDllivcb3h96KRPFOI4F8EbJk7EqaTHAFt/3zFuwxYTKSloXywEArKVMS8cKfdq
# fs1qhPqEWCwoFGg/uoxWux3BbZAblw/gp2Reb9IxggMNMIIDCQIBATCBkzB8MQsw
# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNy
# b3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAVIwS12JrOZwRwAAAAABUjAN
# BglghkgBZQMEAgEFAKCCAUowGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMC8G
# CSqGSIb3DQEJBDEiBCAhgS8ToAjJCpe1aA1n0yBCdMiCWPhho9AgClBVhTLEXTCB
# +gYLKoZIhvcNAQkQAi8xgeowgecwgeQwgb0EIJPuXMejiyVQjF8QanwtdA2KT95w
# rq+64ZYhyYGuuyemMIGYMIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
# c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
# b3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIw
# MTACEzMAAAFSMEtdiazmcEcAAAAAAVIwIgQgVT0Rvr0uiRmaKGEoCW2ZUP+wHaPG
# JdSRQgYn+qaZBe4wDQYJKoZIhvcNAQELBQAEggEAgpeZtvtg1cEQKGpHygg+Xdqv
# jM8ecQx6yTzQd4+JyDRyXsky+FrGf81MNdvRGsGJ3IlMKR0QgliD3/5AAHu91jvJ
# QGM8Lv8LAFsRJVdnNB7qn72Dma1fxDpK0drNFh+7JSIOfCRlnYPtet1wNj3Sa7tw
# KfbgvoQWixcZGr+0FVCKIk4OqBSuNBEXs9EY4b4Ksl/RGahjAQXXWS51lrfip1Kg
# vhxQbymVPmNGJTGQZBpoP8YFQ6+AlYlxBP2ilMtMxU9VA4MMr3nxrl+lGGQ4r6qb
# YKPHmCYGj9Om6ixUNFDhu63TEIEcm0GJ1KjWhGumrybcb9+u683qPjVAXgc+jQ==
# SIG # End signature block