Framework/BugLog/PublishToJSONAndCSV.ps1

Set-StrictMode -Version Latest
class PublishToJSONAndCSV {
    hidden [SVTEventContext[]] $ControlResults
    hidden [string] $FolderPath
    hidden[SVTEventContext[]] $bugsClosed
    PublishToJSONAndCSV([SVTEventContext[]] $ControlResults,[string] $FolderPath,[SVTEventContext[]] $bugsClosed){
        $this.ControlResults=$ControlResults
        $this.FolderPath=$FolderPath
        $this.bugsClosed=$bugsClosed
        $this.PublishBugSummaryToJSONAndCSV($ControlResults,$FolderPath,$bugsClosed)
    }

    hidden [void] PublishBugSummaryToJSONAndCSV([SVTEventContext[]] $ControlResults,[string] $FolderPath,[SVTEventContext[]] $bugsClosed){
        #create three empty jsons for active, resolved and new bugs
        $ActiveBugs=@{ActiveBugs=@()}
        $ResolvedBugs=@{ResolvedBugs=@()}
        $NewBugs=@{NewBugs=@()}
        #create empty json for closed bugs
        $ClosedBugs=@{ClosedBugs=@()}
        #Variable to dump info to CSV
        [PSCustomObject[]] $bugsList = @();

        #for each control result, check for failed/verify control results and look for the message associated with bug that differentiates it as one of the three kinds of bug
        if($ControlResults)
        {
            $ControlResults | ForEach-Object{
                    $result=$_;
                    if($result.ControlResults[0].VerificationResult -eq "Failed" -or $result.ControlResults[0].VerificationResult -eq "Verify"){
                        $result.ControlResults[0].Messages | ForEach-Object{
                            if($_.Message -eq "Active Bug"){                            
                                $bugInfo= [PSCustomObject]@{
                                    'Feature Name'=$result.FeatureName
                                    'Bug Status'=$_.Message
                                    'Resource Name'=$result.ResourceContext.ResourceName
                                    'Control'=$result.ControlItem.ControlID
                                    'Severity'=$result.ControlItem.ControlSeverity
                                    'Url'=$_.DataObject
                                }
                                $ActiveBugs.ActiveBugs+=$bugInfo
                                $bugsList+=$bugInfo
                                
                            }
                            if($_.Message -eq "Resolved Bug"){
                                $bugInfo= [PSCustomObject]@{
                                    'Feature Name'=$result.FeatureName
                                    'Bug Status'=$_.Message
                                    'Resource Name'=$result.ResourceContext.ResourceName
                                    'Control'=$result.ControlItem.ControlID
                                    'Severity'=$result.ControlItem.ControlSeverity
                                    'Url'=$_.DataObject
                                }
                                $ResolvedBugs.ResolvedBugs+=$bugInfo
                                $bugsList+=$bugInfo    
                                
                            }
                            if($_.Message -eq "New Bug"){
                                $bugInfo = [PSCustomObject]@{
                                    'Feature Name'=$result.FeatureName
                                    'Bug Status'=$_.Message
                                    'Resource Name'=$result.ResourceContext.ResourceName
                                    'Control'=$result.ControlItem.ControlID
                                    'Severity'=$result.ControlItem.ControlSeverity
                                    'Url'=$_.DataObject
                                }
                                $NewBugs.NewBugs+=$bugInfo
                                $bugsList+=$bugInfo
                                
                            }
                        }
                    }
                
            }
        }
        #For each closed bug search for "Closed Bug" message and add to publishing files.
        if($bugsClosed){
        
            $bugsClosed | ForEach-Object{
                $result=$_
                $result.ControlResults[0].Messages | ForEach-Object{
                    if($_.Message -eq "Closed Bug"){
                        $bugInfo= [PSCustomObject]@{
                            'Feature Name'=$result.FeatureName
                            'Bug Status'=$_.Message
                            'Resource Name'=$result.ResourceContext.ResourceName
                            'Control'=$result.ControlItem.ControlID
                            'Severity'=$result.ControlItem.ControlSeverity
                            'Url'=$_.DataObject
                        }
                        $ClosedBugs.ClosedBugs+=$bugInfo
                        $bugsList+=$bugInfo
                    }
                }
            }
        }

        
        #the file where the json is stored
        $FilePath=$FolderPath+"\BugSummary.json"
        $combinedJson=$null;

        $CSVFilePath=$FolderPath+"\BugSummary.csv"
        
        #merge all three jsons in one consolidated json
        if($NewBugs.NewBugs){
            $combinedJson=$NewBugs
        }
        if($ResolvedBugs.ResolvedBugs){
            $combinedJson+=$ResolvedBugs
        }
        if($ActiveBugs.ActiveBugs){
            $combinedJson+=$ActiveBugs
        }
        if($ClosedBugs.ClosedBugs){
            $combinedJson+=$ClosedBugs
        }
        
        #output the json and csv to file
        if($combinedJson){
        Add-Content $FilePath -Value ($combinedJson | ConvertTo-Json)
        $bugsList | Export-Csv -Path $CSVFilePath -NoTypeInformation;
        }
        
    }
}
# SIG # Begin signature block
# MIInoAYJKoZIhvcNAQcCoIInkTCCJ40CAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCApTYLM8QBCgbmw
# 2sJfTjbjUZl9pPMyb4DbmJAprfg7MKCCDYEwggX/MIID56ADAgECAhMzAAACUosz
# qviV8znbAAAAAAJSMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
# bmcgUENBIDIwMTEwHhcNMjEwOTAyMTgzMjU5WhcNMjIwOTAxMTgzMjU5WjB0MQsw
# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
# AQDQ5M+Ps/X7BNuv5B/0I6uoDwj0NJOo1KrVQqO7ggRXccklyTrWL4xMShjIou2I
# sbYnF67wXzVAq5Om4oe+LfzSDOzjcb6ms00gBo0OQaqwQ1BijyJ7NvDf80I1fW9O
# L76Kt0Wpc2zrGhzcHdb7upPrvxvSNNUvxK3sgw7YTt31410vpEp8yfBEl/hd8ZzA
# v47DCgJ5j1zm295s1RVZHNp6MoiQFVOECm4AwK2l28i+YER1JO4IplTH44uvzX9o
# RnJHaMvWzZEpozPy4jNO2DDqbcNs4zh7AWMhE1PWFVA+CHI/En5nASvCvLmuR/t8
# q4bc8XR8QIZJQSp+2U6m2ldNAgMBAAGjggF+MIIBejAfBgNVHSUEGDAWBgorBgEE
# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUNZJaEUGL2Guwt7ZOAu4efEYXedEw
# UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1
# ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzAwMTIrNDY3NTk3MB8GA1UdIwQYMBaAFEhu
# ZOVQBdOCqhc3NyK1bajKdQKVMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly93d3cu
# bWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY0NvZFNpZ1BDQTIwMTFfMjAxMS0w
# Ny0wOC5jcmwwYQYIKwYBBQUHAQEEVTBTMFEGCCsGAQUFBzAChkVodHRwOi8vd3d3
# Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvZFNpZ1BDQTIwMTFfMjAx
# MS0wNy0wOC5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAgEAFkk3
# uSxkTEBh1NtAl7BivIEsAWdgX1qZ+EdZMYbQKasY6IhSLXRMxF1B3OKdR9K/kccp
# kvNcGl8D7YyYS4mhCUMBR+VLrg3f8PUj38A9V5aiY2/Jok7WZFOAmjPRNNGnyeg7
# l0lTiThFqE+2aOs6+heegqAdelGgNJKRHLWRuhGKuLIw5lkgx9Ky+QvZrn/Ddi8u
# TIgWKp+MGG8xY6PBvvjgt9jQShlnPrZ3UY8Bvwy6rynhXBaV0V0TTL0gEx7eh/K1
# o8Miaru6s/7FyqOLeUS4vTHh9TgBL5DtxCYurXbSBVtL1Fj44+Od/6cmC9mmvrti
# yG709Y3Rd3YdJj2f3GJq7Y7KdWq0QYhatKhBeg4fxjhg0yut2g6aM1mxjNPrE48z
# 6HWCNGu9gMK5ZudldRw4a45Z06Aoktof0CqOyTErvq0YjoE4Xpa0+87T/PVUXNqf
# 7Y+qSU7+9LtLQuMYR4w3cSPjuNusvLf9gBnch5RqM7kaDtYWDgLyB42EfsxeMqwK
# WwA+TVi0HrWRqfSx2olbE56hJcEkMjOSKz3sRuupFCX3UroyYf52L+2iVTrda8XW
# esPG62Mnn3T8AuLfzeJFuAbfOSERx7IFZO92UPoXE1uEjL5skl1yTZB3MubgOA4F
# 8KoRNhviFAEST+nG8c8uIsbZeb08SeYQMqjVEmkwggd6MIIFYqADAgECAgphDpDS
# AAAAAAADMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
# IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0
# ZSBBdXRob3JpdHkgMjAxMTAeFw0xMTA3MDgyMDU5MDlaFw0yNjA3MDgyMTA5MDla
# MH4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMT
# H01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTEwggIiMA0GCSqGSIb3DQEB
# AQUAA4ICDwAwggIKAoICAQCr8PpyEBwurdhuqoIQTTS68rZYIZ9CGypr6VpQqrgG
# OBoESbp/wwwe3TdrxhLYC/A4wpkGsMg51QEUMULTiQ15ZId+lGAkbK+eSZzpaF7S
# 35tTsgosw6/ZqSuuegmv15ZZymAaBelmdugyUiYSL+erCFDPs0S3XdjELgN1q2jz
# y23zOlyhFvRGuuA4ZKxuZDV4pqBjDy3TQJP4494HDdVceaVJKecNvqATd76UPe/7
# 4ytaEB9NViiienLgEjq3SV7Y7e1DkYPZe7J7hhvZPrGMXeiJT4Qa8qEvWeSQOy2u
# M1jFtz7+MtOzAz2xsq+SOH7SnYAs9U5WkSE1JcM5bmR/U7qcD60ZI4TL9LoDho33
# X/DQUr+MlIe8wCF0JV8YKLbMJyg4JZg5SjbPfLGSrhwjp6lm7GEfauEoSZ1fiOIl
# XdMhSz5SxLVXPyQD8NF6Wy/VI+NwXQ9RRnez+ADhvKwCgl/bwBWzvRvUVUvnOaEP
# 6SNJvBi4RHxF5MHDcnrgcuck379GmcXvwhxX24ON7E1JMKerjt/sW5+v/N2wZuLB
# l4F77dbtS+dJKacTKKanfWeA5opieF+yL4TXV5xcv3coKPHtbcMojyyPQDdPweGF
# RInECUzF1KVDL3SV9274eCBYLBNdYJWaPk8zhNqwiBfenk70lrC8RqBsmNLg1oiM
# CwIDAQABo4IB7TCCAekwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFEhuZOVQ
# BdOCqhc3NyK1bajKdQKVMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1Ud
# DwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFHItOgIxkEO5FAVO
# 4eqnxzHRI4k0MFoGA1UdHwRTMFEwT6BNoEuGSWh0dHA6Ly9jcmwubWljcm9zb2Z0
# LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y
# Mi5jcmwwXgYIKwYBBQUHAQEEUjBQME4GCCsGAQUFBzAChkJodHRwOi8vd3d3Lm1p
# Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y
# Mi5jcnQwgZ8GA1UdIASBlzCBlDCBkQYJKwYBBAGCNy4DMIGDMD8GCCsGAQUFBwIB
# FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2RvY3MvcHJpbWFyeWNw
# cy5odG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AcABvAGwAaQBjAHkA
# XwBzAHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAGfyhqWY
# 4FR5Gi7T2HRnIpsLlhHhY5KZQpZ90nkMkMFlXy4sPvjDctFtg/6+P+gKyju/R6mj
# 82nbY78iNaWXXWWEkH2LRlBV2AySfNIaSxzzPEKLUtCw/WvjPgcuKZvmPRul1LUd
# d5Q54ulkyUQ9eHoj8xN9ppB0g430yyYCRirCihC7pKkFDJvtaPpoLpWgKj8qa1hJ
# Yx8JaW5amJbkg/TAj/NGK978O9C9Ne9uJa7lryft0N3zDq+ZKJeYTQ49C/IIidYf
# wzIY4vDFLc5bnrRJOQrGCsLGra7lstnbFYhRRVg4MnEnGn+x9Cf43iw6IGmYslmJ
# aG5vp7d0w0AFBqYBKig+gj8TTWYLwLNN9eGPfxxvFX1Fp3blQCplo8NdUmKGwx1j
# NpeG39rz+PIWoZon4c2ll9DuXWNB41sHnIc+BncG0QaxdR8UvmFhtfDcxhsEvt9B
# xw4o7t5lL+yX9qFcltgA1qFGvVnzl6UJS0gQmYAf0AApxbGbpT9Fdx41xtKiop96
# eiL6SJUfq/tHI4D1nvi/a7dLl+LrdXga7Oo3mXkYS//WsyNodeav+vyL6wuA6mk7
# r/ww7QRMjt/fdW1jkT3RnVZOT7+AVyKheBEyIXrvQQqxP/uozKRdwaGIm1dxVk5I
# RcBCyZt2WwqASGv9eZ/BvW1taslScxMNelDNMYIZdTCCGXECAQEwgZUwfjELMAkG
# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z
# b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAlKLM6r4lfM52wAAAAACUjAN
# BglghkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor
# BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgBSx+6xfc
# 0CH/fFHmw6Zhgq8H17ijJgSrsAmPr88mQpowQgYKKwYBBAGCNwIBDDE0MDKgFIAS
# AE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbTAN
# BgkqhkiG9w0BAQEFAASCAQDJo8qO9D4VMptGgHksl8NDRbUrtziDe0kHjcSwb2CE
# RlR4C5cm8FDQ1CxlWmG+O3FLddy4hF7fYBY71P+36sM3GacVGqFGYyRbNMQfAdS7
# e18atnUHNz+LdTlpSgbWzKgPB17q502rWT2AMGDAlufn8pU42Zxr762tR/uaBbu9
# IiNwcGDp0wvhEnOB3SKly7NFsmZpxo4kcd4HRIoA+TG9KkpOjH+RJ5/0fWEY0EDC
# uf5dx8zbseTirm2YGjRFtBSBBzDgXpd/y184Fo1LEzim0B/TaRpEXUb1n9XDX/T0
# 1ICgCdjIaV+dZumh3WkUTMrDRH/ubD9Lxs16zZQ6aVifoYIW/zCCFvsGCisGAQQB
# gjcDAwExghbrMIIW5wYJKoZIhvcNAQcCoIIW2DCCFtQCAQMxDzANBglghkgBZQME
# AgEFADCCAVAGCyqGSIb3DQEJEAEEoIIBPwSCATswggE3AgEBBgorBgEEAYRZCgMB
# MDEwDQYJYIZIAWUDBAIBBQAEIOYV5k1xjv7mD8l2+dMkmcfPk9TKGbgF2DpiGvkZ
# StBoAgZiFl8tTqIYEjIwMjIwMzE1MDgzNTE0LjgxWjAEgAIB9KCB0KSBzTCByjEL
# MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
# bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWlj
# cm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEmMCQGA1UECxMdVGhhbGVzIFRTUyBF
# U046OEE4Mi1FMzRGLTlEREExJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1w
# IFNlcnZpY2WgghFXMIIHDDCCBPSgAwIBAgITMwAAAZnIj6+ttn2+iwABAAABmTAN
# BgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
# bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
# aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAeFw0y
# MTEyMDIxOTA1MTZaFw0yMzAyMjgxOTA1MTZaMIHKMQswCQYDVQQGEwJVUzETMBEG
# A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
# cm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBP
# cGVyYXRpb25zMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjo4QTgyLUUzNEYtOURE
# QTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCCAiIwDQYJ
# KoZIhvcNAQEBBQADggIPADCCAgoCggIBALgT+VdcoyzL2tVrZrxtFvQCv8+Pj5sq
# ICAyAprK8IwWfd10ah/x5YWAlankl0qNaOueZbWv20elw/aQWmNenZR2uPnmO3k1
# iLUwRFygij4Tb1e4LAUAwl+0Z2+xZ5r85NA8gWxkRaoS15d1GdzJXBy3nEXMEgLU
# lYJ2Z9ztHn1EwjK+BaMjPzfnqbB6jCQ6y03V97ncognx+WtggshBaw1Ew5PfOcAb
# Ahv2TIvngLqNmMXE5K6wZiZVD4av+plAQvDWKnH2zmM0/UtKk6l9MQEW77L0os0G
# YwEBGRI+lMWQYTIZLAYaBJ06LoFToU8r7q6tnzfSOtF6YrgmQgn21CGUZwiECOFy
# plK2f7fyVGNW+t9sEjkSkjY3CVUgraJsZbuxZ5MDP/I080hJRtCEYAmx786AaP/W
# rP8dr2ap9hnwEdyE3GfTydaSrKuOsqJxDLG4PyYJq1OtVJs4lh9DJl0dH1ri+DIZ
# 5kRcFhA0CUi4HftAI4CCz9V4NTwzh1z8iWtPILS5XVJLgaTzNX7lfl5G75c5E3wV
# arMjqT/3LpxbA5YwrppQ3VeotxoX+yb2tfzh4pbaWENzcLfVYuOnxQ584dl8+7LL
# njF+KWeGEI/LhAon2OCCiqp54SEIR+ANiPL48HJX97kcMHbEd22Uv3fCW0CQjdoL
# GjziRU8EJrQ7AgMBAAGjggE2MIIBMjAdBgNVHQ4EFgQUjbpWuD6cZa+u8iHR1A8S
# icQ1HRAwHwYDVR0jBBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXwYDVR0fBFgw
# VjBUoFKgUIZOaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWlj
# cm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3JsMGwGCCsGAQUF
# BwEBBGAwXjBcBggrBgEFBQcwAoZQaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br
# aW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgx
# KS5jcnQwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcDCDANBgkqhkiG
# 9w0BAQsFAAOCAgEAcbNaHb2JsE2ujeezwTcQ4cawsHUbOT3RIVhQoGKUi7iMNtHu
# pu9c13yeeX/PkP0sqDDdPzWOrLm0yJan6niNgEGTc9HHXJKotR+EXlkxaiVHNb5x
# BkZdXfyJKZ0BQbQKlHnHWsx08itNzNVQWw5gaqaShRD91GJUviIBcksI1OPjHdjA
# hBwI+3SKMlWKc8gwBjMDx/30Ft6KyTIjQEcYB3SQZRfYjb+m5ieXJLy2gGcA2OHb
# XGC8S5pnZ29Gq9aT+LVciU7rtq79cJ4xO9eE84hSarzRTfZOJ/DdJKIEpPKKvuah
# YfWLsfarlACesHG7LL/9mwN8BENX8C2aPmOvoBN9EcN1RqdCl6gFL6LKU1TpEBG7
# yD5MwK79md1mauz3D7yBqVQgaD4aaU2TTt9cnnw5z6oWqA0Cw2QyL51LMqRYYDj+
# SUkWfReJyFcvz63so5rJcobNCNroJ20KOKyfJLyFu/g8qFp4y1/rzAlYoo6zS23Y
# Al9gLm9Jsf1yTwEaPZ7/JBcRkS7zwvn98crldST8gpfHfNouTFdNJnjcRr9YpdUH
# Mxqwdnc+afLSagR6QBfHVSEs01i/hW6bfdWKvFIHqv8YpDEVIe7vIV+tZCljLIMf
# XX1OaEB51LxPVVpup207lk/YTXhMrzZXLHLfEQ96U6jh1EiWGbtdjqT0Hrwwggdx
# MIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAAAAAVMA0GCSqGSIb3DQEBCwUAMIGI
# MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
# bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylN
# aWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yMTA5
# MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
# ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD
# QSAyMDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0ciEL
# eaLL1yR5vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/XE/HZveVU3Fa
# 4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9alKDRLemjkZrBxTzxXb1hlDcwUTIcVxR
# MTegCjhuje3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7M62AW36MEByd
# Uv626GIl3GoPz130/o5Tz9bshVZN7928jaTjkY+yOSxRnOlwaQ3KNi1wjjHINSi9
# 47SHJMPgyY9+tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCGMFxPLOJi
# ss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGaRnXNxF803RKJ1v2lIH1+
# /NmeRd+2ci/bfV+AutuqfjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDyt0cY
# 7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9ahhaYQFzymeiXtco
# dgLiMxhy16cg8ML6EgrXY28MyTZki1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH
# 29wb0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReTwDwV2xo3xwgVGD94
# q0W29R6HXtqPnhZyacaue7e3PmriLq0CAwEAAaOCAd0wggHZMBIGCSsGAQQBgjcV
# AQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUpzxD/LwTuMB0G
# A1UdDgQWBBSfpxVdAF5iXYP05dJlpxtTNRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQB
# gjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
# cGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wEwYDVR0lBAwwCgYIKwYBBQUHAwgw
# GQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB
# /wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYDVR0f
# BE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJv
# ZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4w
# TDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0
# cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcNAQELBQADggIB
# AJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRs
# fNB1OW27DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2LpypglYAA7AFvonoaeC6
# Ce5732pvvinLbtg/SHUB2RjebYIM9W0jVOR4U3UkV7ndn/OOPcbzaN9l9qRWqveV
# tihVJ9AkvUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn8AtqgcKB
# GUIZUnWKNsIdw2FzLixre24/LAl4FOmRsqlb30mjdAy87JGA0j3mSj5mO0+7hvoy
# GtmW9I/2kQH2zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyxTkctwRQE
# cb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2fpCjcZxkoJLo4S5pu+yFU
# a2pFEUep8beuyOiJXk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FBSX5+
# k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJC4822rpM+Zv/Cuk0
# +CQ1ZyvgDbjmjJnW4SLq8CdCPSWU5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cir
# Ooo6CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYICzjCCAjcCAQEwgfih
# gdCkgc0wgcoxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAj
# BgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJjAkBgNVBAsTHVRo
# YWxlcyBUU1MgRVNOOjhBODItRTM0Ri05RERBMSUwIwYDVQQDExxNaWNyb3NvZnQg
# VGltZS1TdGFtcCBTZXJ2aWNloiMKAQEwBwYFKw4DAhoDFQCS7/Ni6Oepqk3oEn0w
# nmO2AOuU66CBgzCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
# dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
# YXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMA0G
# CSqGSIb3DQEBBQUAAgUA5dqSajAiGA8yMDIyMDMxNTEyMTk1NFoYDzIwMjIwMzE2
# MTIxOTU0WjB3MD0GCisGAQQBhFkKBAExLzAtMAoCBQDl2pJqAgEAMAoCAQACAhux
# AgH/MAcCAQACAhFkMAoCBQDl2+PqAgEAMDYGCisGAQQBhFkKBAIxKDAmMAwGCisG
# AQQBhFkKAwKgCjAIAgEAAgMHoSChCjAIAgEAAgMBhqAwDQYJKoZIhvcNAQEFBQAD
# gYEAZ9oG2O6jGHlUJrfIGHOacuTRVG5/1UFuprnsF179hxKZFb4IkRh9fbIjh10q
# 8WH5pjyHjuejZ0CYSnHHhdEn6q32ai2N+4NnVSJgQaKEdAbqI7hnRR8U9cWMRe7T
# rUCe6V0w92VrMWYyx6KjALzY4fGo3BunCGloj2aCaeNGc/cxggQNMIIECQIBATCB
# kzB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQD
# Ex1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAZnIj6+ttn2+iwAB
# AAABmTANBglghkgBZQMEAgEFAKCCAUowGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJ
# EAEEMC8GCSqGSIb3DQEJBDEiBCCU5riEipfyufMApWfFDT7ZUgjlU4QjdtP9a6Is
# OAM22DCB+gYLKoZIhvcNAQkQAi8xgeowgecwgeQwgb0EIGZ9afnyoo3tZakFNg6t
# Q7UFIJKco8sL8bvAI4hzYmx+MIGYMIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNV
# BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
# c29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAg
# UENBIDIwMTACEzMAAAGZyI+vrbZ9vosAAQAAAZkwIgQgVH4KOLbtI1IUmm0nw8OG
# InKd2QjRumJlHgGfbgClNcUwDQYJKoZIhvcNAQELBQAEggIAOdcq2rbktk5yZCua
# mrPRt+R2AEMQlwr3gL/32uBpJvqgROjn90E1XntZOVG6An73O847wdkF/uenLw8u
# uZx2wYijEm3NQC3B40bGh1rcMYuup4UIKuPRR1kxDypi3Y/WCQg86nlFSXv2ro65
# Uqm9UETtnWG97u1pw3XFh3XF6iI4ee6vBbVjh8IGKMHU/h5af/RBHxkUuNlFqXDm
# pqKREegBxdOGTI5PNsN24yGlV/iw6lcpOAJEPlXC32cQbH2DINgXHrj03W5URVV7
# uRqybTdKJwcbW6gKJG12SThV3mV22rNJcF5oRwRzxklXdGSNb2Ipc+PQQYcxiMNP
# XSNyVUFjrazxdTx4fAWJ4G4UGsrEUvjgLqodZwL602sK9nxQ09EZAvOabhUGDDaX
# Qssmwk2LcIXhd3LdEcn+ln73RGSo3pLYhcgqInrVZAyA1WmcH3AWu1MV2eWhNWhu
# 1eF2OaaDIUIPMAucy9LNNWuXcinY84iYiCILGTbJm8S1sBvQ+YFScjBDv+0PKdtB
# dKmIR2gf7RbDRUkRf5QM0Sooamn3tgPsE36kpBpOvNl+v+QnZPSs7/pGkUXMeGrR
# dOTM5NOd21eJBcLM8cB8Yy184uJLgHl6wGmIlKFMpeJdjP/FS2dZcDeGkzjh0qQn
# ENFg6vSnE3mbsnOJUoLL5daczEM=
# SIG # End signature block