AzStackHci.DiagnosticSettings.psd1

#
# Module manifest for module 'AzStackHci.DiagnosticSettings'
#
# Generated by: Microsoft Corporation.
#
# Generated on: August 28th 2026.
#

@{

    # Script module or binary module file associated with this manifest.
    RootModule = 'AzStackHci.DiagnosticSettings.psm1'

    # Version number of this module.
    ModuleVersion = '0.6.9'

    # Supported PSEditions of this module (Desktop, Core, CoreCLR, etc.)
    CompatiblePSEditions = @('Desktop', 'Core')

    # ID used to uniquely identify this module.
    GUID = '741476f0-267c-4a20-9830-c8478444638e'

    # Author of this module.
    Author = 'Microsoft Corporation'

    # Company or vendor of this module.
    CompanyName = 'Microsoft Corporation'

    # Copyright statement for this module.
    Copyright = '(c) 2026 Microsoft Corporation. All rights reserved.'

    # Description of the functionality provided by this module.
    Description = 'Microsoft Azure Local - Diagnostics settings and connectivity tests support module'

    # Minimum version of the Windows PowerShell engine required by this module.
    PowerShellVersion = '5.1'

    # Name of the Windows PowerShell host required by this module.
    # PowerShellHostName = ''

    # Minimum version of the Windows PowerShell host required by this module.
    # PowerShellHostVersion = ''

    # Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
    # DotNetFrameworkVersion = ''

    # Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
    # CLRVersion = ''

    # Processor architecture (None, X86, Amd64) required by this module.
    # ProcessorArchitecture = ''

    # Modules that must be imported into the global environment prior to importing this module
    #RequiredModules = ''

    # Assemblies that must be loaded prior to importing this module
    # RequiredAssemblies = @()

    # Script files (.ps1) that are run in the caller's environment prior to importing this module.
    # ScriptsToProcess = @()

    # Type files (.ps1xml) to be loaded when importing this module
    # TypesToProcess = @()

    # Format files (.ps1xml) to be loaded when importing this module
    # FormatsToProcess = @()

    # Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
    # IMPORTANT: .ps1 files listed here are dot-sourced into the root module scope.
    # Private (internal) helpers are listed first, then Public (exported) functions.
    NestedModules = @(
        # Constants and module state initialization (loaded first)
        'Private\AzStackHci.Constants.ps1',

        # Private helpers (loaded after constants - order matters)
        'Private\AzStackHci.Artifact.Helpers.ps1',
        'Private\AzStackHci.MemoryDump.Helpers.ps1',
        'Private\AzStackHci.Connectivity.Helpers.ps1',
        'Private\AzStackHci.Layer7.Helpers.ps1',
        'Private\AzStackHci.DNS.Helpers.ps1',
        'Private\AzStackHci.WildcardAndSubdomain.Helpers.ps1',
        'Private\AzStackHci.ParallelLayer7.Helpers.ps1',
        'Private\AzStackHci.ConnectivityCluster.Helpers.ps1',
        'Private\AzStackHci.HardwareOEM.Helpers.ps1',
        'Private\AzStackHci.ModuleManagement.Helpers.ps1',
        'Private\AzStackHci.Network.Helpers.ps1',
        'Private\AzStackHci.Results.Helpers.ps1',
        'Private\AzStackHci.OsConfigReport.Helpers.ps1',
        'Private\AzStackHci.Utility.Helpers.ps1',
        'Private\AzStackHci.VMCheckpointHealth.Assessment.ps1',
        'Private\AzStackHci.VMCheckpointHealth.Collection.ps1',
        'Private\AzStackHci.VMCheckpointHealth.Policy.ps1',
        'Private\AzStackHci.VMCheckpointHealth.Rendering.ps1',
        'Private\AzStackHci.VMCheckpointHealth.Storage.ps1',

        # Public exported functions
        'Public\AzStackHci.MemoryDumpSettings.ps1',
        'Public\AzStackHci.PageFileSettings.ps1',
        'Public\AzStackHci.UserModeCrashDumpSettings.ps1',
        'Public\AzStackHci.SSLInspection.ps1',
        'Public\AzStackHci.ClusterPerformance.ps1',
        'Public\AzStackHci.ConnectivityTests.ps1',
        'Public\AzStackHci.OsConfigSettings.ps1',
        'Public\AzStackHci.PrivateLinkScope.ps1',
        'Public\AzStackHci.DiagnosticArtifacts.ps1',
        'Public\AzStackHci.VMCheckpointHealth.ps1'
    )

    # Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.
    FunctionsToExport = @(
        'Get-AzStackHciMemoryDumpSettings',
        'Set-AzStackHciMemoryDumpSettings',
        'Restore-AzStackHciMemoryDumpSettings',
        'Get-AzStackHciPageFileSettings',
        'Restore-AzStackHciPageFileSettings',
        'Set-AzStackHciPageFileSettings',
        'Set-AzStackHciPageFileSettingsMinimal',
        'Get-AzStackHciUserModeCrashDumpSettings',
        'Set-AzStackHciUserModeCrashDumpSettings',
        'Restore-AzStackHciUserModeCrashDumpSettings',
        'Test-AzStackHciSSLInspection',
        'Send-ClusterPerformanceHistory',
        'Test-AzureLocalConnectivity',
        'Test-Layer7Connectivity',
        'Test-TCPConnectivity',
        'Get-AzStackHciOsConfigSettings',
        'Test-ArcMachinePrivateLinkScopeEnabled',
        'Remove-AzStackHciDiagnosticArtifact',
        'Get-AzStackHciVMCheckpointHealth'
    )

    # Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.
    CmdletsToExport = @()

    # Variables to export from this module
    # Set to empty array to prevent leaking internal script-scoped variables to consumers
    VariablesToExport = @()

    # Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.
    # AliasesToExport = '*'

    # DSC resources to export from this module
    # DscResourcesToExport = @()

    # List of all modules packaged with this module
    # ModuleList = @()

    # List of all files packaged with this module
    # FileList = @()

    # Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.
    PrivateData = @{

        PSData = @{

            # Tags applied to this module. These help with module discovery in online galleries.
            Tags = @('Microsoft', 'AzStackHci', 'Diagnostic', 'Settings', 'Connectivity', 'AzureLocal')

            # A URL to the license for this module.
            LicenseUri = 'https://github.com/Azure/AzureLocal-Supportability/blob/main/LICENSE'

            # A URL to the main website for this project.
            ProjectUri = 'https://github.com/Azure/AzureLocal-Supportability'

            # A URL to an icon representing this module.
            # IconUri = ''

            # ReleaseNotes of this module — full history in CHANGELOG.md shipped with the module
            ReleaseNotes = @'
## v0.6.9
 
- OSConfig schema 1.3 reports component evidence; partial healthy evidence is SKIPPED.
- Layer 7 retries transient connection failures once.
- Test-ArcMachinePrivateLinkScopeEnabled validates full Arc machine IDs and queries the encoded subscription instead of relying on the active Az context.
- Reconciles Get-AzStackHciVMCheckpointHealth through upstream v0.2.33: bounded historic jobs with explicit incomplete coverage, evidence-incomplete report totals, corrected VmEvents example, VM-associated ImageStore AVHDX classification, aggregate attached-chain size, and all v0.2.32 identity/event/artifact/confidence improvements.
- Initializes StrictMode cleanup and fallback state before exception-prone proxy parsing, range-probe, TLS-request, diagnostic-upload, preference-restoration, and cluster page-file paths. Normal single-proxy connectivity tests now reach download testing and final HTML/CSV report-location output.
- Separates canonical reports and restore backups into typed Reports and Backups folders. Report producers warn about recognized artifacts older than 180 days without deleting them. Remove-AzStackHciDiagnosticArtifact provides explicit WhatIf/ShouldProcess cleanup; backups require explicit selection, valid checksums, 730-day age by default, and retention of at least five newest valid files. Restore prefers typed backup folders and falls back to the legacy root. ACLs are unchanged.
- Page-file backups now use a versioned SHA-256 payload; restore validates path, filename, schema, target, and sizes before mutation. Unsigned legacy backups require -AllowLegacyUnsignedBackup, and page-file restore reports rollback outcome.
- Page-file, memory-dump, and user-mode crash-dump cluster restores now return one result per target node with AttemptedNodeCount, ReturnedNodeCount, and Complete telemetry; failed apply operations include rollback telemetry.
- Connectivity fan-out, checkpoint diagnostic and ownership fan-outs, and OS-config Drift Control collection now use a shared 30-minute deadline, stop timed-out jobs, preserve completed evidence, and report incomplete outcomes explicitly.
- Introduces Get-AzStackHciVMCheckpointHealth, a read-only checkpoint, differencing-disk, Hyper-V Replica, storage, event, and VSS health assessment with TXT, CSV, HTML, telemetry, debug-log, and ZIP artifacts.
- The command indexes events by VM identity, identifies the audited VM in event CSV rows, guarantees event CSV artifacts for early exits, classifies cluster-role/Hyper-V inventory mismatches explicitly, and distinguishes VHD topology completeness from file-metadata completeness.
- CSVs reporting IncompatibleFileSystemFilter receive conditional read-only validation guidance for CSV state, cross-node minifilters, and recent Failover Clustering events. FileSystemReFs alone remains expected, and the report does not instruct operators to unload a filter.
- Base disks use Disk age while Checkpoint age is reserved for attached AVHDX layers; per-VM TXT tables show VM-attributed events and summarize node-wide context separately; CSVs include CollectedAsConcern plus typed classification/disposition. Replica advisories remain explicit in OK prose, sustained fleet-only 15268 context is linked inside storage health, and housekeeping distinguishes unreferenced VM-folder disks from owner/folder mismatches without filename-based ownership inference. This command is supported and tested only with Windows PowerShell 5.1; invoking it from PowerShell 7 fails with an actionable runtime message.
- Test-AzureLocalConnectivity now warns when -ForceGitHubEndpointsUpdate is used WITHOUT -NoAutoUpdate (the GitHub endpoint refresh is already attempted by default, so the switch is a no-op on its own) — mirrors the existing -InstallMissingModuleOnNodes guidance.
- Get-AzStackHciOsConfigSettings pending-reboot detection regex tightened to require both "reboot" and "pending" so it can never accidentally match the "No pending reboot" line.
- Cluster -PassThru JSONReportPath is now derived with [IO.Path]::ChangeExtension, so it always carries a .json extension and can never accidentally equal ReportPath.
- Output handling is hardened so -NoOutput state does not affect later calls, machine-level verbose/debug preferences do not leak into module output, and normal progress remains visible. Test-ArcMachinePrivateLinkScopeEnabled now also confirms when the Arc machine uses the expected public endpoints with no Private Link Scope assigned.
- Get-AzStackHciOsConfigSettings aligns HTML and -PassThru health outcomes: detected domain GPOs and Arc Agent version drift are warnings, complete local-only GPO evidence passes, and unavailable or N/A GPO evidence is shown as Unknown and skipped rather than reported as healthy.
- Pending reboot warnings now propagate through each affected node's HTML section, Events & Reboots sub-tab, and node tab. JSON and -PassThru expose typed trigger reasons under PendingRebootHealth.Details[] and every Nodes[].PendingReboot entry; the additive OS-config health-summary schema advances from 1.1 to 1.2.
- OSConfig CSV evidence is array-normalized for Windows PowerShell 5.1 single-row correctness. Power Plan consistency now measures agreement only; NTP-source and installed-program differences are warnings. Missing Drift Control is emitted as SKIPPED with node details, and StabilityEvents adds a uniform Details alias while preserving Events. Schema remains 1.2 before release.
- Connectivity HTML summaries now classify findings and distinguish configuration gaps from connectivity failures. OSConfig summaries wrap on mobile. Contracts are unchanged.
 
## v0.6.8
 
Focus: make the -PassThru object contracts robust for consumption by other modules (e.g. AzStack.Insights). SchemaVersion bumps 1.0 -> 1.1 (additive only — new fields, nothing removed or renamed).
 
### Get-AzStackHciOsConfigSettings — predictable -ExportPath + first-class output location + opt-in inventory
- -ExportPath is now honoured LITERALLY as the destination ROOT. Each run creates a unique timestamped subfolder INSIDE it: <ExportPath>\<ClusterOrNodeName>-<yyyyMMdd-HHmmss>\. Previously the caller's leaf was rewritten to <ClusterName>_<leaf> and the run folder was placed as a SIBLING (via Split-Path -Parent), so the literal path never existed. Same layout for -Scope Node and -Scope Cluster; the root is created if missing.
- New default root = C:\ProgramData\AzStackHci.DiagnosticSettings (always writable on a locked-down Azure Local node, unlike C:\Temp). The automatic mirror of the HTML + JSON reports to ProgramData is retained.
- New -PassThru properties: OutputDirectory (the resolved run folder) and DataCollectionDirectory (<OutputDirectory>\Data-Collection, or null when no on-disk data was written), alongside HTMLReportPath / JSONReportPath. All four are null in -HealthSummaryOnly mode.
- New -IncludeInventoryData switch (default OFF): nests per-node InstalledPrograms / WindowsFeatures / Hotfixes / DriverVersions under each Nodes[] entry so consumers get typed data without parsing CSVs. Default OFF keeps casual -PassThru calls lightweight.
- Deep PSCustomObject normalisation of the -PassThru object: the returned object and every nested level (Nodes[], ConsistencyChecks, Fingerprints, Details, inventory entries) is a PSCustomObject, not an OrderedDictionary, so the live object behaves like a JSON round-trip and consumers can use $node.PSObject.Properties['X'] guards directly. Key order preserved; on-disk JSON unchanged. Additive / non-breaking.
- Data hygiene: inventory strings are trimmed, a single unbalanced wrapping double-quote is stripped (balanced "..." values like an UninstallString are preserved), and empty / (not parsed) / (not collected) placeholders are normalised to null. ArcAgentHealth.Details[] Status/Version cleaned the same way.
 
### Test-AzureLocalConnectivity — -PassThru reshaped into a structured object
- -PassThru now returns a normal PSCustomObject with run-level data on REAL properties and the per-URL rows nested under .Results — the same shape as the on-disk JSON summary (one contract). This replaces the fragile v0.6.7 pattern that bolted ~17 NoteProperty members onto the results ArrayList and returned ,$array: any pipeline op on the collection silently dropped those NoteProperties, and the ,$array return carried a "callers must not @()-wrap" landmine. Run-level fields now survive Where-Object / Select-Object / Sort-Object on .Results.
- SchemaVersion ("1.1") added to the connectivity object + JSON summary (parity with OsConfig).
- Cluster -PassThru unified: -Scope Cluster -PassThru returns the same structured shape, nesting each node's structured object (flat run-level fields + Detections + .Results) under .Nodes[]. The internal HTML/CSV cluster report is unchanged.
- BREAKING for anything that read the old container NoteProperties or iterated the return as rows. The module's own tests + Helpers\Compare-*Performance.ps1 / automated-test-all-azure-regions.ps1 were updated to read run-level data from $r.<field> and rows from $r.Results.
 
## v0.6.7 (recap)
 
Three headline features for Test-AzureLocalConnectivity: HEAD-method optimisation (-RequestMethod, default Auto = HEAD with GET fallback), process-isolated parallel fan-out (-Parallelism, default 1 = byte-identical sequential), and cluster-wide fan-out (-Scope Cluster). Get-AzStackHciOsConfigSettings gained the versioned machine-consumable health-summary contract (SchemaVersion 1.0, structured Nodes map + Fingerprints, CheckId + Severity registry, single PASS/WARNING/FAILURE/INFO/SKIPPED vocabulary) and the side-effect-free -HealthSummaryOnly switch. Results always copy to C:\ProgramData\AzStackHci.DiagnosticSettings; a custom -ExportPath was an additional copy target. Per-row MachineName column added.
 
For full version history (including v0.6.7 detail, v0.6.6 and earlier) see CHANGELOG.md shipped with this module.
'@


            # External dependent modules of this module
            # ExternalModuleDependencies = ''

        } # End of PSData hashtable

    } # End of PrivateData hashtable

    # HelpInfo URI of this module
    HelpInfoURI = 'https://github.com/Azure/AzureLocal-Supportability/blob/main/TSG/Networking/Arc-Gateway-Outbound-Connectivity/Troubleshoot-Outbound-Connectivity.md'

    # Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
    # DefaultCommandPrefix = ''

}
# Generated by: Microsoft Corporation.
# SIG # Begin signature block
# MIInKAYJKoZIhvcNAQcCoIInGTCCJxUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCnLrS6fTdKKhkR
# qwY7CxbuiACTWUHq8UAQdwLgf4dUj6CCDLowggX1MIID3aADAgECAhMzAAACHU0Z
# yE7XD1dIAAAAAAIdMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNVBAYTAlVTMR4wHAYD
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBD
# b2RlIFNpZ25pbmcgUENBIDIwMjQwHhcNMjYwNDE2MTg1OTQzWhcNMjcwNDE1MTg1
# OTQzWjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
# BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYD
# VQQDExVNaWNyb3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IB
# DwAwggEKAoIBAQDQvewXxx9gZZFC6Ys1WBay8BJ8kGA4JQnH5CMafqOASlTpK9H8
# o5ZXTXt0caVQTNMUPt445wXYD+dFtaKWTwDn1I52oUSrC9vJin1Gsqt+zyKJL5Dg
# 3eQXbQNR61DmMy20GLTIO3SFed9Rfi/ophgCLGFLDR3r0KvHjwMb/jYWS0celV/4
# Lz27LfAekm8v9E5IXaeiXbAUYZKK090n4CVl3JBtbN+9DtI9SNu/yjvozW52/u7R
# X/Ttpa/KDlpuokZ+Zcbvmtd9ur9gFLvZzh41o9MsE/clQtdaFWGvuo6Jua/ntpgk
# ey3E5/vBFe+MJPG6phdnuo6r57ZudCudiI1bAgMBAAGjggGbMIIBlzAOBgNVHQ8B
# Af8EBAMCB4AwHwYDVR0lBBgwFgYKKwYBBAGCN0wIAQYIKwYBBQUHAwMwHQYDVR0O
# BBYEFH6QuMwqcPG0hQlQ6c5jCtTTLrVeMEUGA1UdEQQ+MDykOjA4MR4wHAYDVQQL
# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xFjAUBgNVBAUTDTIzMDAxMis1MDc1NTkw
# HwYDVR0jBBgwFoAUf1k/VCHarU/vBeXmo9ctBpQSCDEwYAYDVR0fBFkwVzBVoFOg
# UYZPaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0
# JTIwQ29kZSUyMFNpZ25pbmclMjBQQ0ElMjAyMDI0LmNybDBtBggrBgEFBQcBAQRh
# MF8wXQYIKwYBBQUHMAKGUWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMv
# Y2VydHMvTWljcm9zb2Z0JTIwQ29kZSUyMFNpZ25pbmclMjBQQ0ElMjAyMDI0LmNy
# dDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4ICAQBKTbYOjzwTG/DXGaz9
# s6+fQeaTtDcFmMY+5UyVFCyj7Pv+5i37qfX8lSL/tBIfYQfWsMuBQlfZurJD6r4H
# VJ2CeH+1fgiq8dcHdVKoZ3Sa2qXoX3cq9iS8cVb06B7+5/XJ7I0OxHH9fDsvJ3T3
# w5V/ZtAIFmLrl+P0CtG+92uzRsn0nTbdFjOkLMLWPLAU3THohKRlSEMgFJpPkm5n
# 5UAZ35xX6FWCrDLsSKb555bTifwa8mJBwdlof0bmfYidH+dxZ1FdDxvLnNl9zeKs
# A4kejaaIqqIPguhwAti5Ql7BlTNoJNwxCvBmqW2MQLnCkYN/VVUsR3V2x/rcTNzo
# Bf/Z/SpROvdaA2ZOOd1uioXJt3tdLQ7vHpqpib0KfWr/FWXW10q38VxfCnRQBqzb
# SuztR7nEMuzX7Ck+B/XaPDXd1qh72+QYyB0Z2VzWmO9zsnb9Uq/dwu8LGeQqnyu6
# 7SDGACvnXii2fb9+US492VTnXSnFKyqwgzUyFMtZK1/sHYTv6bG4TtQUygQxTN+Z
# V+aJIlKO2MqZ7bKrAnOzS9m6NgoTdWOq11bTOZwKlIEV/EhV9SWkDmdpR/hPPT2v
# 6TEj4F8PT/zHjRezIU5c/DGlt/VhY/pK0XkJtEyMmmS1BMtjU/rqBZVMIm3dnxQs
# /TBByr+Cf8Z1r7aifQVQ+WSqzjCCBr0wggSloAMCAQICEzMAAAA5O7Y3Gb8GHWcA
# AAAAADkwDQYJKoZIhvcNAQEMBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
# YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
# Q29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmljYXRl
# IEF1dGhvcml0eSAyMDExMB4XDTI0MDgwODIwNTQxOFoXDTM2MDMyMjIyMTMwNFow
# VzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEo
# MCYGA1UEAxMfTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAyNDCCAiIwDQYJ
# KoZIhvcNAQEBBQADggIPADCCAgoCggIBANgBnB7jOMeqlRYHNa265v4IY9fH8TKh
# emHfPINe1gpLaV3dhg324WwH06LcHbpnsBukCDNitryo0dtS/EW6I/yEL/bLSY8h
# KpbfQuWusBPr9qazYcDxCW/qnjb5JsI1s8bNOg3bVATvQVL4tcf03aTycsz8QeCd
# M0l/yHRObJ9QqazM1r6VPEOJ7LL+uEEb73w6QCuhs89a1uv1zerOYMnsneRRwCbp
# yW11IcggU0cRKDDq1pjVJzIbIF6+oiXXbReOsgeI8zu1FyQfK0fVkaya8SmVHQ/t
# Of23mZ4W9k0Ri22QW9p3UgSC5OUDktKxxcCmGL6tXLfOGSWHIIV4YrTJTT6PNty5
# REojHJuZHArkF9VnHTERWoTjAzfI3kP+5b4alUdhgAZ7ttOu1bVnXfHaqPYl2rPs
# 20ji03LOVWsh/radgE17es5hL+t6lV0eVHrVhsssROWJuz2MXMCt7iw7lFPG9LXK
# Gjsmonn2gotGdHIuEg5JnJMJVmixd5LRlkmgYRZKzhxSCwyoGIq0PhaA7Y+VPct5
# pCHkijcIIDm0nlkK+0KyepolcqGm0T/GYQRMhHJlGOOmVQop36wUVUYklUy++vDW
# eEgEo4s7hxN6mIbf2MSIQ/iIfMZgJxC69oukMUXCrOC3SkE/xIkgpfl22MM1itkZ
# 35nNXkMolU1lAgMBAAGjggFOMIIBSjAOBgNVHQ8BAf8EBAMCAYYwEAYJKwYBBAGC
# NxUBBAMCAQAwHQYDVR0OBBYEFH9ZP1Qh2q1P7wXl5qPXLQaUEggxMBkGCSsGAQQB
# gjcUAgQMHgoAUwB1AGIAQwBBMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU
# ci06AjGQQ7kUBU7h6qfHMdEjiTQwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2Ny
# bC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0MjAx
# MV8yMDExXzAzXzIyLmNybDBeBggrBgEFBQcBAQRSMFAwTgYIKwYBBQUHMAKGQmh0
# dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0MjAx
# MV8yMDExXzAzXzIyLmNydDANBgkqhkiG9w0BAQwFAAOCAgEAFJQfOChP7onn6fLI
# MKrSlN1WYKwDFgAddymOUO3FrM8d7B/W/iQ6DxXsDn7D5W4wMwYeLystcEqfkjz4
# NURRgazyMu5yRzQh4LqjA4tStTcJh1opExo7nn5PuPBYnbu0+THSuVHTe0VTTPVh
# ily/piFrDo3axQ9P4C+Ol5yet+2gTfekICS5xS+cYfSIvgn0JksVBVMYVI5QFu/q
# hnLhsEFEUzG8fvv0hjgkO+lkpV9ty6GkN4vdnd7ya6Q6aR9y34aiM1qmxaxBi6OU
# nyNl6fkuun/diTFnYDLTppOkr/mg5WSfCiDVMNCxtj4wPKC5OmHm1DQIt/MNokbb
# H3UGsFP1QbzsLocuSqLCvH09Io3fDPTmscR9Y75G4qX7RTX8AdBPo0I6OEojf39z
# uFZt0qOHm65YWQE69cZM2ueE1MB05dNNgHK9gTE7zKvK/fg8B2qjW88MT/WF5V5u
# vZGtqa9FSL2RazArA+rDPuf6JGYz4HpgMZHB4S6szWSKYBv0VisCzfxgeU+dquXW
# 9bd0auYlOB58DPcOYKdc3Se94g+xL4pcEhbB54JOgAkwYTu/9dLeH2pDqeJZAABV
# DWRQCaXfO5LgyKwKCLYXpigrZYCjUSBcr+Ve8PFWMhVTQl0v4q8J/AUmQN5W4n10
# 1cY2L4A7GTQG1h32HHAvfQESWP0xghnEMIIZwAIBATBuMFcxCzAJBgNVBAYTAlVT
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jv
# c29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMjQCEzMAAAIdTRnITtcPV0gAAAAAAh0w
# DQYJYIZIAWUDBAIBBQCggZAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwLwYJ
# KoZIhvcNAQkEMSIEIAUJupML4J9AJBwiADVX6sMJBkb+Xem7IlARY0JAOO2cMEIG
# CisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8AcwBvAGYAdKEagBhodHRwOi8v
# d3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEBBQAEggEAfOqHTwZoHOqIJvkO
# Y4fqlVI3rFbLXbj0WOu+7dGo+J1RRrOav4+BQ78Mx9E7r8mCZhDJ1B2Wrp9WMK4q
# QNjD6kjrKgKj7sTfmJFv2seDa0+YVNKfhtDC6uTl90CScrFTsneSryhOIi3Rxddc
# pTnT1DH6a1lP5KocyPv3WoI99wXotVY3fR1zVDaIKhCTdYccO9i9jkaUm/61erKR
# wnSjV4O2kVXz7sANmrUnvZGH5WPL1oAZlp6WuUB8P6LLTpuBVgCnZ7SjbD2dqcSW
# 41vFmlT5w4MU7e25GJCSqGkywb8gIKVvXlgiWWF5+c7N5jXwIe0C7JD3OkMsa0Rh
# s9peT6GCF5QwgheQBgorBgEEAYI3AwMBMYIXgDCCF3wGCSqGSIb3DQEHAqCCF20w
# ghdpAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFSBgsqhkiG9w0BCRABBKCCAUEEggE9
# MIIBOQIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCBx6EuQzuVUliDg
# VK7rk+h0P5uOC1j0Q35+ok+T3x4SRwIGaoSTP70lGBMyMDI2MDgyODE0NTYyOC43
# NDJaMASAAgH0oIHRpIHOMIHLMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
# cmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScw
# JQYDVQQLEx5uU2hpZWxkIFRTUyBFU046QTAwMC0wNUUwLUQ5NDcxJTAjBgNVBAMT
# HE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WgghHqMIIHIDCCBQigAwIBAgIT
# MwAAAiu7AFD/TTuaoQABAAACKzANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJV
# UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
# ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGlt
# ZS1TdGFtcCBQQ0EgMjAxMDAeFw0yNjAyMTkxOTQwMTFaFw0yNzA1MTcxOTQwMTFa
# MIHLMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQL
# ExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScwJQYDVQQLEx5uU2hpZWxk
# IFRTUyBFU046QTAwMC0wNUUwLUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1l
# LVN0YW1wIFNlcnZpY2UwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCX
# 3mi6OD3syUqQm4QqgkrKPbcsK/Qx3fYctL8+VM1uOY3booi5GxwauTgQf6JFHITT
# oxS7gjqKlK8OFLzL6UTl0jxEK5t6DuOcgJXdvutimoTlOS0C3kyITXBAXoj/gp6h
# RR9z6WRip1Ktkilb3dJXCjQqT9P2Cuujr+Vz8r+Z+jDl09ji/ic/4G34r3mVwjs/
# /Gnx9Pu31V8rXFicNiAzxpubawpbd8pqfzlWT2vnG3kF9l6MiREbvJ3XHLUwHQsh
# 0t/TrSFx/s/yCqpJWYJ6oClG70tvsFH0aRP8wB4cP/CFa2ILvk26i3OcJBl+pqKj
# HTSBy9mvwTPEDlnzco0Nt8R6pSPTXZgBsscHhoKfC0WQmOzY2keXbAmRTcZMyXz5
# v/AJbmoI0y07Bazvt5NkXddG9TErQWwtsFyIKrElDgWfHeCoTu1wu2ciD3dK72z3
# ca2gzoEDxT2j9BXIUKaiTzTdQPRsAMaO3dU0zaGwMMlwtSJyDh14YEgZoUu5vS8M
# ugMqdrNjphyL65yKhjpAWbhYkIHO/0uZju95tP8zZNqXIRh4tdfWHJPATn9r+cxk
# yuh2x0VLdfx1lmK9X3NjH0NtgAs5JB/wOlkyuudxmFTfWVyRrL37ispOZ8aPAFgv
# yR6cNTkGpkFo35JRjciNmZiU4qT9Uty+V5gudFk1jwIDAQABo4IBSTCCAUUwHQYD
# VR0OBBYEFD4WjuQTUJbtbd3jmvZku0FZ2eU2MB8GA1UdIwQYMBaAFJ+nFV0AXmJd
# g/Tl0mWnG1M1GelyMF8GA1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9z
# b2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0El
# MjAyMDEwKDEpLmNybDBsBggrBgEFBQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6
# Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVGlt
# ZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3J0MAwGA1UdEwEB/wQCMAAwFgYDVR0l
# AQH/BAwwCgYIKwYBBQUHAwgwDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUA
# A4ICAQDO/CKsciEM8kr1fqH4TlfT66ENoTjxXw810pyEq0PdrgLwfgT3x+1gz7CQ
# HtUdevqMQ5qHyDLhm6pT911CYkGN+6g+MU7fMYTr6d3SxieJwBIoWkfR4g7SitGz
# MKU465KEYejfddoUgovC/xcRpaALO5p3/A248ByhJiMttBQNDtsT/HaCFwRFCURb
# y/f8c1kky8F8xkCXFz+/MtZ5d1lWFjwOI2geZHWq9XihDOgee5nS2koo5V6n8XG2
# 20UTevVf+pgmpIH71XKDVIYTGGZJs6yPlfJ2aXqw1ME4NR6okNsY3P1M31H6DMYR
# fJGNBNep595kXGh3YzA3cCiyg+jmJ58h/fTvjngIpuUFfODpDjFx0ic1YoLANxhC
# F3RhS9qYM7K40NEhKshYuaAkIG2XBKYig3r/0/b0sjvjBws55AYonMm3A8qcX/6k
# 9Vfc0mv9dtonHuWGfA2b+qE2qpCnhzGbdDHq7iOSZEw01nNupAMf1c41k9IoTQ2z
# 3iw6w4ZZoLOyg4TKMbp1krpT4trip/y30Cv5khyqCDNqaXQpBkOYON8LgtoQ3amV
# OX7ix5jdrnx/vUxTUSigXvrWdL7Uk8kpmS0zto2Toy7aT5oBzCTvfj9iJ/BN/E1v
# hFBkhJCvZ7PVvsMSnTTmkx2Fal2lVkztuAI44fD/uyLJdaMQSzCCB3EwggVZoAMC
# AQICEzMAAAAVxedrngKbSZkAAAAAABUwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNV
# BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w
# HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29m
# dCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTIxMDkzMDE4MjIy
# NVoXDTMwMDkzMDE4MzIyNVowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
# bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
# b3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw
# ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDk4aZM57RyIQt5osvXJHm9
# DtWC0/3unAcH0qlsTnXIyjVX9gF/bErg4r25PhdgM/9cT8dm95VTcVrifkpa/rg2
# Z4VGIwy1jRPPdzLAEBjoYH1qUoNEt6aORmsHFPPFdvWGUNzBRMhxXFExN6AKOG6N
# 7dcP2CZTfDlhAnrEqv1yaa8dq6z2Nr41JmTamDu6GnszrYBbfowQHJ1S/rboYiXc
# ag/PXfT+jlPP1uyFVk3v3byNpOORj7I5LFGc6XBpDco2LXCOMcg1KL3jtIckw+DJ
# j361VI/c+gVVmG1oO5pGve2krnopN6zL64NF50ZuyjLVwIYwXE8s4mKyzbnijYjk
# lqwBSru+cakXW2dg3viSkR4dPf0gz3N9QZpGdc3EXzTdEonW/aUgfX782Z5F37Zy
# L9t9X4C626p+Nuw2TPYrbqgSUei/BQOj0XOmTTd0lBw0gg/wEPK3Rxjtp+iZfD9M
# 269ewvPV2HM9Q07BMzlMjgK8QmguEOqEUUbi0b1qGFphAXPKZ6Je1yh2AuIzGHLX
# pyDwwvoSCtdjbwzJNmSLW6CmgyFdXzB0kZSU2LlQ+QuJYfM2BjUYhEfb3BvR/bLU
# HMVr9lxSUV0S2yW6r1AFemzFER1y7435UsSFF5PAPBXbGjfHCBUYP3irRbb1Hode
# 2o+eFnJpxq57t7c+auIurQIDAQABo4IB3TCCAdkwEgYJKwYBBAGCNxUBBAUCAwEA
# ATAjBgkrBgEEAYI3FQIEFgQUKqdS/mTEmr6CkTxGNSnPEP8vBO4wHQYDVR0OBBYE
# FJ+nFV0AXmJdg/Tl0mWnG1M1GelyMFwGA1UdIARVMFMwUQYMKwYBBAGCN0yDfQEB
# MEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMv
# RG9jcy9SZXBvc2l0b3J5Lmh0bTATBgNVHSUEDDAKBggrBgEFBQcDCDAZBgkrBgEE
# AYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
# /zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEug
# SaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9N
# aWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsG
# AQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jv
# b0NlckF1dF8yMDEwLTA2LTIzLmNydDANBgkqhkiG9w0BAQsFAAOCAgEAnVV9/Cqt
# 4SwfZwExJFvhnnJL/Klv6lwUtj5OR2R4sQaTlz0xM7U518JxNj/aZGx80HU5bbsP
# MeTCj/ts0aGUGCLu6WZnOlNN3Zi6th542DYunKmCVgADsAW+iehp4LoJ7nvfam++
# Kctu2D9IdQHZGN5tggz1bSNU5HhTdSRXud2f8449xvNo32X2pFaq95W2KFUn0CS9
# QKC/GbYSEhFdPSfgQJY4rPf5KYnDvBewVIVCs/wMnosZiefwC2qBwoEZQhlSdYo2
# wh3DYXMuLGt7bj8sCXgU6ZGyqVvfSaN0DLzskYDSPeZKPmY7T7uG+jIa2Zb0j/aR
# AfbOxnT99kxybxCrdTDFNLB62FD+CljdQDzHVG2dY3RILLFORy3BFARxv2T5JL5z
# bcqOCb2zAVdJVGTZc9d/HltEAY5aGZFrDZ+kKNxnGSgkujhLmm77IVRrakURR6nx
# t67I6IleT53S0Ex2tVdUCbFpAUR+fKFhbHP+CrvsQWY9af3LwUFJfn6Tvsv4O+S3
# Fb+0zj6lMVGEvL8CwYKiexcdFYmNcP7ntdAoGokLjzbaukz5m/8K6TT4JDVnK+AN
# uOaMmdbhIurwJ0I9JZTmdHRbatGePu1+oDEzfbzL6Xu/OHBE0ZDxyKs6ijoIYn/Z
# cGNTTY3ugm2lBRDBcQZqELQdVTNYs6FwZvKhggNNMIICNQIBATCB+aGB0aSBzjCB
# yzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
# ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMc
# TWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBU
# U1MgRVNOOkEwMDAtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1T
# dGFtcCBTZXJ2aWNloiMKAQEwBwYFKw4DAhoDFQAJrD90ykHpo/0AGb7lmwvsCtqR
# OaCBgzCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
# DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
# JjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMA0GCSqGSIb3
# DQEBCwUAAgUA7juWTzAiGA8yMDI2MDgyODA1MDgzMVoYDzIwMjYwODI5MDUwODMx
# WjB0MDoGCisGAQQBhFkKBAExLDAqMAoCBQDuO5ZPAgEAMAcCAQACAhMXMAcCAQAC
# AhOcMAoCBQDuPOfPAgEAMDYGCisGAQQBhFkKBAIxKDAmMAwGCisGAQQBhFkKAwKg
# CjAIAgEAAgMHoSChCjAIAgEAAgMBhqAwDQYJKoZIhvcNAQELBQADggEBAIv/Oi1v
# GioItk+sURZ0Y9r7tA3T88Xkfu+UPOQxvkWQBMa6tixIFkztnRKN+AEZFY0CV7pu
# qvdo9v4Xa9P7QeY8cvoZv6M6osp6mcExkDieivkmkZV2ROAqkzCI913kZ9+VH0wn
# Ms4jEjceqEiHrsRrv91z4dOSG7EGksHkUYxGgzDQt+P3BlC07U07NVAu7e3xXMBP
# E2dTIoP8+6y2sbMkSMifkoqC9K0nRR8TD2JcQ93F/TLEgZXqAntBY063Do/tRD85
# +8auFeecyrrdHa0eco05euax5D7eeX6c38hUE7DwVwDIevAqEJFsiNAULhwScf43
# ea2yHfu9PG+BGywxggQNMIIECQIBATCBkzB8MQswCQYDVQQGEwJVUzETMBEGA1UE
# CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
# b2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ
# Q0EgMjAxMAITMwAAAiu7AFD/TTuaoQABAAACKzANBglghkgBZQMEAgEFAKCCAUow
# GgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMC8GCSqGSIb3DQEJBDEiBCAU/gvf
# OHbzLG0YwJVFTxM08yivgqNSr9VbXxjdOUmnmjCB+gYLKoZIhvcNAQkQAi8xgeow
# gecwgeQwgb0EIHIOI/Q/kFftYA+M2OY+1Bx3ajBD6/WDAtPT2vFkv25SMIGYMIGA
# pH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
# B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE
# AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAIruwBQ/007mqEA
# AQAAAiswIgQgOVBEZYOUzWc0Vldvrphi85u3LZwvqms8kNR9AJLzo6cwDQYJKoZI
# hvcNAQELBQAEggIAZk65eE9lUXuNRen/uiwZDzU3wdiPmPQ1dKIZ5XTpt9dzgvTg
# CRzJJzu64B2sO8WZkJn5ThqFdwkhb3VwZ2gmgPBady7VtWoFLJU5Ld6kkWl6Vtq5
# +FzxfVv8Zt57sRJL2FdN9V2BbWLOWMcHaDVzgE27YOspSUzQ4FV2DWS/j1R3kBsD
# zv51g7qHVAqo4bPZC0/fa1vwMEoGTzOIiyTwroVvDmSxVJHXrMTT/5FBrnPAds9r
# 1DO/J3TVlXkpCcNzpmSa+5sxKSgTyKbVK2BjyYz0pPoFNp9zitTqUfbB2xKcnnz+
# pmX11ByzD05yU7S50UjboZbgmYY79AJfc9jIzi+VUSiigh8W3uVHID/tgI0dOgob
# dkaXUma8+HNIK2RZxmbnl6cWqroOzCZUf8/R0/fnMKoomNebSdsCTjC4fzfnORPu
# PQKVHkS3YNqnEtCCnIEMcdAVN/9QmsBbVws70C8KSgmfcLdXgpUuQZfk+HzyUbjV
# rKQQnNjNqMDCsJTu7POQqk4nVbKRUUaVbVMmdjqCvtiN+3v9q7olr/sloUDobotC
# 7vSamjU9OjA052Us79iIr+Pw8uJWeCDxGIeHjU/NvdhUXDMX319CDVJnbRBDn8vB
# QIPB8lho7EASe//46n/CmcSbLv/R8x8mEi8Lma1KaXGLEhuj1YgeoQvPRFg=
# SIG # End signature block