custom/Update-AzImageBuilderTemplate.ps1


# # ----------------------------------------------------------------------------------
# #
# # Copyright Microsoft Corporation
# # Licensed under the Apache License, Version 2.0 (the "License");
# # you may not use this file except in compliance with the License.
# # You may obtain a copy of the License at
# # http://www.apache.org/licenses/LICENSE-2.0
# # Unless required by applicable law or agreed to in writing, software
# # distributed under the License is distributed on an "AS IS" BASIS,
# # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# # See the License for the specific language governing permissions and
# # limitations under the License.
# # ----------------------------------------------------------------------------------

# <#
# .Synopsis
# Update a virtual machine image template
# .Description
# Update a virtual machine image template

# .Link
# https://docs.microsoft.com/en-us/powershell/module/az.imagebuilder/update-AzImageBuilderTemplate
# #>
# function Update-AzImageBuilderTemplate {
# [OutputType([Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Models.Api20200214.IImageTemplate])]
# [CmdletBinding(DefaultParameterSetName='Name', PositionalBinding=$false, SupportsShouldProcess, ConfirmImpact='Medium')]
# param(
# [Parameter(ParameterSetName='Name', Mandatory, HelpMessage="The name of the image Template.")]
# [Alias('Name')]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Path')]
# [System.String]
# # The name of the image Template
# ${ImageTemplateName},
    
# [Parameter(ParameterSetName='Name', Mandatory, HelpMessage="The name of the resource group.")]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Path')]
# [System.String]
# # The name of the resource group.
# ${ResourceGroupName},
    
# [Parameter(ParameterSetName='Name', HelpMessage="Subscription credentials which uniquely identify Microsoft Azure subscription.")]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Path')]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Runtime.DefaultInfo(Script='(Get-AzContext).Subscription.Id')]
# [System.String]
# # Subscription credentials which uniquely identify Microsoft Azure subscription.
# # The subscription Id forms part of the URI for every service call.
# ${SubscriptionId},
    
# [Parameter(ParameterSetName='InputObject', Mandatory, ValueFromPipeline, HelpMessage="Identity Parameter.")]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Path')]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Models.IImageBuilderIdentity]
# # Identity Parameter
# # To construct, see NOTES section for INPUTOBJECT properties and create a hash table.
# ${InputObject},
    
# [Parameter(HelpMessage="Resource location.")]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [System.String]
# # Resource location
# ${Location},
    
# [Parameter(HelpMessage="Maximum duration to wait while building the image template. Omit or specify 0 to use the default (4 hours).")]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [System.Int32]
# # Maximum duration to wait while building the image template.
# # Omit or specify 0 to use the default (4 hours).
# ${BuildTimeoutInMinute},
    
# [Parameter(HelpMessage="Specifies the properties used to describe the customization steps of the image, like Image source etc.")]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Models.Api20200214.IImageTemplateCustomizer[]]
# # Specifies the properties used to describe the customization steps of the image, like Image source etc
# # To construct, see NOTES section for CUSTOMIZE properties and create a hash table.
# ${Customize},
    
# [Parameter(HelpMessage="The distribution targets where the image output needs to go to.")]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Models.Api20200214.IImageTemplateDistributor[]]
# # The distribution targets where the image output needs to go to.
# # To construct, see NOTES section for DISTRIBUTE properties and create a hash table.
# ${Distribute},

# [Parameter(Mandatory, HelpMessage="Describes a virtual machine image source for building, customizing and distributing.")]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Models.Api20200214.IImageTemplateSource]
# ${Source},
    
# [Parameter(HelpMessage="The type of identity used for the image template.")]
# [ArgumentCompleter([Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Support.ResourceIdentityType])]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Support.ResourceIdentityType]
# # The type of identity used for the image template.
# # The type 'None' will remove any identities from the image template.
# ${IdentityType},
    
# [Parameter(HelpMessage="The list of user identities associated with the image template.")]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Runtime.Info(PossibleTypes=([Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Models.Api20200214.IImageTemplateIdentityUserAssignedIdentities]))]
# [System.Collections.Hashtable]
# # The list of user identities associated with the image template.
# # The user identity dictionary key references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
# ${UserAssignedIdentity},
    
# [Parameter(HelpMessage="End time of the last run (UTC).")]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [System.DateTime]
# # End time of the last run (UTC)
# ${LastRunStatusEndTime},
    
# [Parameter(HelpMessage="Verbose information about the last run state.")]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [System.String]
# # Verbose information about the last run state
# ${LastRunStatusMessage},
    
# [Parameter(HelpMessage="State of the last run.")]
# [ArgumentCompleter([Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Support.RunState])]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Support.RunState]
# # State of the last run
# ${LastRunStatusRunState},
    
# [Parameter(HelpMessage="Sub-state of the last run.")]
# [ArgumentCompleter([Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Support.RunSubState])]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Support.RunSubState]
# # Sub-state of the last run
# ${LastRunStatusRunSubState},
    
# [Parameter(HelpMessage="Start time of the last run (UTC).")]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [System.DateTime]
# # Start time of the last run (UTC)
# ${LastRunStatusStartTime},
    
# [Parameter(HelpMessage="Error code of the provisioning failure.")]
# [ArgumentCompleter([Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Support.ProvisioningErrorCode])]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Support.ProvisioningErrorCode]
# # Error code of the provisioning failure
# ${ProvisioningErrorCode},
    
# [Parameter(HelpMessage="Verbose error message about the provisioning failure.")]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [System.String]
# # Verbose error message about the provisioning failure
# ${ProvisioningErrorMessage},
    
# [Parameter(HelpMessage="Specifies the type of source image you want to start with.")]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [System.String]
# # Specifies the type of source image you want to start with.
# ${SourceType},
    
# [Parameter(HelpMessage="Resource tags.")]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Runtime.Info(PossibleTypes=([Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Models.Api20200214.IResourceTags]))]
# [System.Collections.Hashtable]
# # Resource tags
# ${Tag},
    
# [Parameter(HelpMessage="Size of the OS disk in GB. Omit or specify 0 to use Azure's default OS disk size.")]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [System.Int32]
# # Size of the OS disk in GB.
# # Omit or specify 0 to use Azure's default OS disk size.
# ${VMProfileOsdiskSizeInGb},
    
# [Parameter(HelpMessage="Size of the virtual machine used to build, customize and capture images. Omit or specify empty string to use the default (Standard_D1_v2).")]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [System.String]
# # Size of the virtual machine used to build, customize and capture images.
# # Omit or specify empty string to use the default (Standard_D1_v2).
# ${VMProfileVmSize},
    
# [Parameter(HelpMessage="Resource id of a pre-existing subnet.")]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Body')]
# [System.String]
# # Resource id of a pre-existing subnet.
# ${VnetConfigSubnetId},
    
# #region HideParameter
# [Parameter()]
# [Alias('AzureRMContext', 'AzureCredential')]
# [ValidateNotNull()]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Azure')]
# [System.Management.Automation.PSObject]
# # The credentials, account, tenant, and subscription used for communication with Azure.
# ${DefaultProfile},
    
# [Parameter()]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Runtime')]
# [System.Management.Automation.SwitchParameter]
# # Run the command as a job
# ${AsJob},
    
# [Parameter(DontShow)]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Runtime')]
# [System.Management.Automation.SwitchParameter]
# # Wait for .NET debugger to attach
# ${Break},
    
# [Parameter(DontShow)]
# [ValidateNotNull()]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Runtime')]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Runtime.SendAsyncStep[]]
# # SendAsync Pipeline Steps to be appended to the front of the pipeline
# ${HttpPipelineAppend},
    
# [Parameter(DontShow)]
# [ValidateNotNull()]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Runtime')]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Runtime.SendAsyncStep[]]
# # SendAsync Pipeline Steps to be prepended to the front of the pipeline
# ${HttpPipelinePrepend},
    
# [Parameter()]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Runtime')]
# [System.Management.Automation.SwitchParameter]
# # Run the command asynchronously
# ${NoWait},
    
# [Parameter(DontShow)]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Runtime')]
# [System.Uri]
# # The URI for the proxy server to use
# ${Proxy},
    
# [Parameter(DontShow)]
# [ValidateNotNull()]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Runtime')]
# [System.Management.Automation.PSCredential]
# # Credentials for a proxy server to use for the remote call
# ${ProxyCredential},
    
# [Parameter(DontShow)]
# [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Category('Runtime')]
# [System.Management.Automation.SwitchParameter]
# # Use the default credentials for the proxy
# ${ProxyUseDefaultCredentials}
# #endregion HideParameter
# )
    
# process {
# try {
# $Parameter = [Microsoft.Azure.PowerShell.Cmdlets.ImageBuilder.Models.Api20200214.ImageTemplate]::New()

# $Parameter.Source = $Source
# $Null = $PSBoundParameters.Remove('Source')

# if ($PSBoundParameters.ContainsKey('Location')) {
# $Parameter.Location = $Location
# $Null = $PSBoundParameters.Remove('Location')
# }
# if ($PSBoundParameters.ContainsKey('Tag')) {
# $Parameter.Tag = $Tag
# $Null = $PSBoundParameters.Remove('Tag')
# }
# if ($PSBoundParameters.ContainsKey('BuildTimeoutInMinute')) {
# $Parameter.BuildTimeoutInMinute = $BuildTimeoutInMinute
# $Null = $PSBoundParameters.Remove('BuildTimeoutInMinute')
# }
# if ($PSBoundParameters.ContainsKey('Customize')) {
# $Parameter.Customize = $Customize
# $Null = $PSBoundParameters.Remove('Customize')
# }
# if ($PSBoundParameters.ContainsKey('Distribute')) {
# $Parameter.Distribute = $Distribute
# $Null = $PSBoundParameters.Remove('Distribute')
# }
# if ($PSBoundParameters.ContainsKey('IdentityType')) {
# $Parameter.IdentityType = $IdentityType
# $Null = $PSBoundParameters.Remove('IdentityType')
# }
# if ($PSBoundParameters.ContainsKey('UserAssignedIdentity')) {
# $Parameter.IdentityUserAssignedIdentity = $UserAssignedIdentity
# $Null = $PSBoundParameters.Remove('UserAssignedIdentity')
# }
# if ($PSBoundParameters.ContainsKey('LastRunStatus')) {
# $Parameter.LastRunStatus = $LastRunStatus
# $Null = $PSBoundParameters.Remove('LastRunStatus')
# }
# if ($PSBoundParameters.ContainsKey('LastRunStatusEndTime')) {
# $Parameter.LastRunStatusEndTime = $LastRunStatusEndTime
# $Null = $PSBoundParameters.Remove('LastRunStatusEndTime')
# }
# if ($PSBoundParameters.ContainsKey('LastRunStatusMessage')) {
# $Parameter.LastRunStatusMessage = $LastRunStatusMessage
# $Null = $PSBoundParameters.Remove('LastRunStatusMessage')
# }
# if ($PSBoundParameters.ContainsKey('LastRunStatusRunState')) {
# $Parameter.LastRunStatusRunState = $LastRunStatusRunState
# $Null = $PSBoundParameters.Remove('LastRunStatusRunState')
# }
# if ($PSBoundParameters.ContainsKey('LastRunStatusRunSubState')) {
# $Parameter.LastRunStatusRunSubState = $LastRunStatusRunSubState
# $Null = $PSBoundParameters.Remove('LastRunStatusRunSubState')
# }
# if ($PSBoundParameters.ContainsKey('LastRunStatusStartTime')) {
# $Parameter.LastRunStatusStartTime = $LastRunStatusStartTime
# $Null = $PSBoundParameters.Remove('LastRunStatusStartTime')
# }
# if ($PSBoundParameters.ContainsKey('ProvisioningErrorCode')) {
# $Parameter.ProvisioningErrorCode = $ProvisioningErrorCode
# $Null = $PSBoundParameters.Remove('ProvisioningErrorCode')
# }
# if ($PSBoundParameters.ContainsKey('ProvisioningState')) {
# $Parameter.ProvisioningState = $ProvisioningState
# $Null = $PSBoundParameters.Remove('ProvisioningState')
# }
# if ($PSBoundParameters.ContainsKey('VMProfileOsdiskSizeInGb')) {
# $Parameter.VMProfileOsdiskSizeGb = $VMProfileOsdiskSizeInGb
# $null = $PSBoundParameters.Remove('VMProfileOsdiskSizeInGb')
# }
# if ($PSBoundParameters.ContainsKey('VMProfileVmSize')) {
# $Parameter.VMProfileVmsize = $VMProfileVmSize
# $Null = $PSBoundParameters.Remove('VMProfileVmSize')
# }
# if ($PSBoundParameters.ContainsKey('VnetConfigSubnetId')) {
# $Parameter.VnetConfigSubnetId = $VnetConfigSubnetId
# $Null = $PSBoundParameters.Remove('VnetConfigSubnetId')
# }
# $PSBoundParameters.Add("Parameter", $Parameter)
# Az.ImageBuilder.internal\Update-AzImageBuilderTemplate @PSBoundParameters
# } catch {
# throw
# }
# }
# }
    
# SIG # Begin signature block
# MIIjhgYJKoZIhvcNAQcCoIIjdzCCI3MCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAnGVxcL03cwQ75
# diqHEQIKAfWURTx2swBGUEgW6pcW/qCCDYEwggX/MIID56ADAgECAhMzAAABh3IX
# chVZQMcJAAAAAAGHMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
# bmcgUENBIDIwMTEwHhcNMjAwMzA0MTgzOTQ3WhcNMjEwMzAzMTgzOTQ3WjB0MQsw
# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
# AQDOt8kLc7P3T7MKIhouYHewMFmnq8Ayu7FOhZCQabVwBp2VS4WyB2Qe4TQBT8aB
# znANDEPjHKNdPT8Xz5cNali6XHefS8i/WXtF0vSsP8NEv6mBHuA2p1fw2wB/F0dH
# sJ3GfZ5c0sPJjklsiYqPw59xJ54kM91IOgiO2OUzjNAljPibjCWfH7UzQ1TPHc4d
# weils8GEIrbBRb7IWwiObL12jWT4Yh71NQgvJ9Fn6+UhD9x2uk3dLj84vwt1NuFQ
# itKJxIV0fVsRNR3abQVOLqpDugbr0SzNL6o8xzOHL5OXiGGwg6ekiXA1/2XXY7yV
# Fc39tledDtZjSjNbex1zzwSXAgMBAAGjggF+MIIBejAfBgNVHSUEGDAWBgorBgEE
# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUhov4ZyO96axkJdMjpzu2zVXOJcsw
# UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1
# ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzAwMTIrNDU4Mzg1MB8GA1UdIwQYMBaAFEhu
# ZOVQBdOCqhc3NyK1bajKdQKVMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly93d3cu
# bWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY0NvZFNpZ1BDQTIwMTFfMjAxMS0w
# Ny0wOC5jcmwwYQYIKwYBBQUHAQEEVTBTMFEGCCsGAQUFBzAChkVodHRwOi8vd3d3
# Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvZFNpZ1BDQTIwMTFfMjAx
# MS0wNy0wOC5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAgEAixmy
# S6E6vprWD9KFNIB9G5zyMuIjZAOuUJ1EK/Vlg6Fb3ZHXjjUwATKIcXbFuFC6Wr4K
# NrU4DY/sBVqmab5AC/je3bpUpjtxpEyqUqtPc30wEg/rO9vmKmqKoLPT37svc2NV
# BmGNl+85qO4fV/w7Cx7J0Bbqk19KcRNdjt6eKoTnTPHBHlVHQIHZpMxacbFOAkJr
# qAVkYZdz7ikNXTxV+GRb36tC4ByMNxE2DF7vFdvaiZP0CVZ5ByJ2gAhXMdK9+usx
# zVk913qKde1OAuWdv+rndqkAIm8fUlRnr4saSCg7cIbUwCCf116wUJ7EuJDg0vHe
# yhnCeHnBbyH3RZkHEi2ofmfgnFISJZDdMAeVZGVOh20Jp50XBzqokpPzeZ6zc1/g
# yILNyiVgE+RPkjnUQshd1f1PMgn3tns2Cz7bJiVUaqEO3n9qRFgy5JuLae6UweGf
# AeOo3dgLZxikKzYs3hDMaEtJq8IP71cX7QXe6lnMmXU/Hdfz2p897Zd+kU+vZvKI
# 3cwLfuVQgK2RZ2z+Kc3K3dRPz2rXycK5XCuRZmvGab/WbrZiC7wJQapgBodltMI5
# GMdFrBg9IeF7/rP4EqVQXeKtevTlZXjpuNhhjuR+2DMt/dWufjXpiW91bo3aH6Ea
# jOALXmoxgltCp1K7hrS6gmsvj94cLRf50QQ4U8Qwggd6MIIFYqADAgECAgphDpDS
# 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/BvW1taslScxMNelDNMYIVWzCCFVcCAQEwgZUwfjELMAkG
# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z
# b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAYdyF3IVWUDHCQAAAAABhzAN
# BglghkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor
# BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgFBqC3p11
# 6CZVgSugNwnBA0zy7V/LpTOcqNqHkSASwDYwQgYKKwYBBAGCNwIBDDE0MDKgFIAS
# AE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbTAN
# BgkqhkiG9w0BAQEFAASCAQCkhZcQ0XKDdBB39bS3Pt9P8vocWF3DsThf9unhSHY7
# evQTYE/iuijAAOvIGF28WmV4aKCzu5+ofyqv27DKobslJ1YgknQKVJ+gm4HTq0Kz
# QT15z/1xrWO8BHhAUumItBe3VckVQD1I5UMqSjLqHeZq/a+RMPq7hhEJY9W2+WBB
# kQ3YB+ln2EPuiS62HTq6UbcTqPN9dEFwffw8WqB3vW4sxkwO8IteWQfQuaPKqIri
# eadFssJv2vGJRgxCNsYmygThgtk67BB+G+oPKfIIRNgwDG2uRg06v0vyjStwt5ma
# oBec73UzOQyCsuI5DXQRE6fInFJI0egngIuemuGrtCyEoYIS5TCCEuEGCisGAQQB
# gjcDAwExghLRMIISzQYJKoZIhvcNAQcCoIISvjCCEroCAQMxDzANBglghkgBZQME
# AgEFADCCAVEGCyqGSIb3DQEJEAEEoIIBQASCATwwggE4AgEBBgorBgEEAYRZCgMB
# MDEwDQYJYIZIAWUDBAIBBQAEIGUPwlbrz7K5vpd07D+PxWHPy9v5Lu9KP5aoOh6c
# Vj3nAgZe8JLbSdEYEzIwMjAwNzA5MTAxMDM3LjcxNVowBIACAfSggdCkgc0wgcox
# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsTHE1p
# Y3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJjAkBgNVBAsTHVRoYWxlcyBUU1Mg
# RVNOOjNFN0EtRTM1OS1BMjVEMSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFt
# cCBTZXJ2aWNloIIOPDCCBPEwggPZoAMCAQICEzMAAAEgGjnb2WufrfIAAAAAASAw
# DQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
# b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
# dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcN
# MTkxMTEzMjE0MDQyWhcNMjEwMjExMjE0MDQyWjCByjELMAkGA1UEBhMCVVMxEzAR
# BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
# Y3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2Eg
# T3BlcmF0aW9uczEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046M0U3QS1FMzU5LUEy
# NUQxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2UwggEiMA0G
# CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1BOuDmpgS5mLJDPUQaEcVyH5bHBLc
# 4Lvq5gGHF5J1yPhhbg8NSErV0fP+N5CQwe4KTLU/BROOpHlO/BV1UGOs+BavEPGR
# iVYdhAqKmzWU+TWbAOVxkrnpa/FJ6A5Q5cvINSiOabyOfHe2dMFCQPlggBzqC3x9
# lnnJkUxSpetfTcj6FVCwxYVPk55zz4O4UpmeiHDiWEBpC9r64VHZZOSz89Z7ML1l
# penM2r8+WnabZLPoU2Y7p9QrPzQH7gvQiu/zgcYYMqmVIlfFTPS1iOvZbAqk1U6B
# NRgnOKirD+0+8yujM4CY/0DlZDDlLfU7Vg8ojsGg7peVh+MnYDwlyKGxAgMBAAGj
# ggEbMIIBFzAdBgNVHQ4EFgQUmdk2BLDfR8UfnN3pLGUCcaciVc8wHwYDVR0jBBgw
# FoAU1WM6XIoxkPNDe3xGG8UzaFqFbVUwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDov
# L2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljVGltU3RhUENB
# XzIwMTAtMDctMDEuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0
# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNUaW1TdGFQQ0FfMjAx
# MC0wNy0wMS5jcnQwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcDCDAN
# BgkqhkiG9w0BAQsFAAOCAQEAYulQdnFLE5FCLMEUPpBNSy+OCJwmY7ihAF4Jye0S
# Q8fDJ0CYhsYU/uHUl8oTTuX5JQONX6QnKSU/+/0XuezSFtuYsN+uVrvGIciGXCKP
# uPtgFjFJBSW5y4xxurfzAuPO12wGJdVD4J+0ihF5Wr+RNUbX9MPiU+0qsIKDPs2p
# A3KNdXCP9m4WLi/+Fb0KMGwoX6XtDCvBHVw2qXbqcItlh4JfM9vLfjCgwS6zbIt7
# igBKOLXRWaOqpeIfqsBHVitPN5RsneeXPqHpBOT+wCsm7lkqDAOS98RDWyJe8hZA
# geeXLHF7gL/lBgQbzScWYx0tg/4+hlPijywAAe0SBMDkmDCCBnEwggRZoAMCAQIC
# CmEJgSoAAAAAAAIwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRp
# ZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTEwMDcwMTIxMzY1NVoXDTI1MDcwMTIx
# NDY1NVowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG
# A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwggEiMA0GCSqGSIb3
# DQEBAQUAA4IBDwAwggEKAoIBAQCpHQ28dxGKOiDs/BOX9fp/aZRrdFQQ1aUKAIKF
# ++18aEssX8XD5WHCdrc+Zitb8BVTJwQxH0EbGpUdzgkTjnxhMFmxMEQP8WCIhFRD
# DNdNuDgIs0Ldk6zWczBXJoKjRQ3Q6vVHgc2/JGAyWGBG8lhHhjKEHnRhZ5FfgVSx
# z5NMksHEpl3RYRNuKMYa+YaAu99h/EbBJx0kZxJyGiGKr0tkiVBisV39dx898Fd1
# rL2KQk1AUdEPnAY+Z3/1ZsADlkR+79BL/W7lmsqxqPJ6Kgox8NpOBpG2iAg16Hgc
# sOmZzTznL0S6p/TcZL2kAcEgCZN4zfy8wMlEXV4WnAEFTyJNAgMBAAGjggHmMIIB
# 4jAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQU1WM6XIoxkPNDe3xGG8UzaFqF
# bVUwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
# EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYD
# VR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwv
# cHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEB
# BE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j
# ZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwgaAGA1UdIAEB/wSBlTCB
# kjCBjwYJKwYBBAGCNy4DMIGBMD0GCCsGAQUFBwIBFjFodHRwOi8vd3d3Lm1pY3Jv
# c29mdC5jb20vUEtJL2RvY3MvQ1BTL2RlZmF1bHQuaHRtMEAGCCsGAQUFBwICMDQe
# MiAdAEwAZQBnAGEAbABfAFAAbwBsAGkAYwB5AF8AUwB0AGEAdABlAG0AZQBuAHQA
# LiAdMA0GCSqGSIb3DQEBCwUAA4ICAQAH5ohRDeLG4Jg/gXEDPZ2joSFvs+umzPUx
# vs8F4qn++ldtGTCzwsVmyWrf9efweL3HqJ4l4/m87WtUVwgrUYJEEvu5U4zM9GAS
# inbMQEBBm9xcF/9c+V4XNZgkVkt070IQyK+/f8Z/8jd9Wj8c8pl5SpFSAK84Dxf1
# L3mBZdmptWvkx872ynoAb0swRCQiPM/tA6WWj1kpvLb9BOFwnzJKJ/1Vry/+tuWO
# M7tiX5rbV0Dp8c6ZZpCM/2pif93FSguRJuI57BlKcWOdeyFtw5yjojz6f32WapB4
# pm3S4Zz5Hfw42JT0xqUKloakvZ4argRCg7i1gJsiOCC1JeVk7Pf0v35jWSUPei45
# V3aicaoGig+JFrphpxHLmtgOR5qAxdDNp9DvfYPw4TtxCd9ddJgiCGHasFAeb73x
# 4QDf5zEHpJM692VHeOj4qEir995yfmFrb3epgcunCaw5u+zGy9iCtHLNHfS4hQEe
# gPsbiSpUObJb2sgNVZl6h3M7COaYLeqN4DMuEin1wC9UJyH3yKxO2ii4sanblrKn
# QqLJzxlBTeCG+SqaoxFmMNO7dDJL32N79ZmKLxvHIa9Zta7cRDyXUHHXodLFVeNp
# 3lfB0d4wwP3M5k37Db9dT+mdHhk4L7zPWAUu7w2gUDXa7wknHNWzfjUeCLraNtvT
# X4/edIhJEqGCAs4wggI3AgEBMIH4oYHQpIHNMIHKMQswCQYDVQQGEwJVUzETMBEG
# A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
# cm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBP
# cGVyYXRpb25zMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjozRTdBLUUzNTktQTI1
# RDElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcG
# BSsOAwIaAxUAv1r8uFykxw2Ng0e88GallxNnXkyggYMwgYCkfjB8MQswCQYDVQQG
# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg
# VGltZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQUFAAIFAOKw0Y4wIhgPMjAy
# MDA3MDkwNzEzMThaGA8yMDIwMDcxMDA3MTMxOFowdzA9BgorBgEEAYRZCgQBMS8w
# LTAKAgUA4rDRjgIBADAKAgEAAgIaxAIB/zAHAgEAAgIR6DAKAgUA4rIjDgIBADA2
# BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIB
# AAIDAYagMA0GCSqGSIb3DQEBBQUAA4GBAC4WZLqNnQkvmC/o4KCxWpBtWYEDrNi9
# bTbg2ST4bK4SaoYrI+6Ofs//u+cAe25B/qUghCpb34EM6Y2eV3tueKbvinGgdr66
# xQLkIehkBtA+kHKFHyoC4fZPzWDCKdsc4wLcrKeC7mj4l6dWlaMPf5A/OxCF5AKi
# oOj5mzq6AK3uMYIDDTCCAwkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
# Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
# dCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB
# IDIwMTACEzMAAAEgGjnb2WufrfIAAAAAASAwDQYJYIZIAWUDBAIBBQCgggFKMBoG
# CSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgv75Qm6RW
# KTg5C562vMPOmvOp0CG/EJblLCtOVK0e+w0wgfoGCyqGSIb3DQEJEAIvMYHqMIHn
# MIHkMIG9BCAcDFBrFJx21/VR4TsFktJBSYQgHP7GymOt92ieZ8AaVTCBmDCBgKR+
# MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMT
# HU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAABIBo529lrn63yAAAA
# AAEgMCIEIECtcJyVM5DV32yGOADZRYhw1gvKEFEmfOptrWEf0nXsMA0GCSqGSIb3
# DQEBCwUABIIBAFVYrf6Mbi7MQ12lSZYkN45aweQ8ChBUjFhg6Cn+uCch4kJi9TVR
# umZHgUuPIRn9k/dtq5ECG8Z1RJvPHoONUbMoDw3WhV7VLtlCj1qCcq8pOJ7q3yUR
# r+nBMQnkdv6Ewo4OfTQi24JZ6/S34R/+hB8BrXWyT1UgyN4A3ozPc3/EbiTzQSP/
# 4WBaM0bv6T7NUevQP9DcH1NuWhUiOmNjy0rwrcM0A7nfbAmaWEha7Hmg7LtKykmo
# S4DIxIiVckzYwxYYUf/fiGq0bqV07Ha/azSxiMJZNa3laws97d4KrSLdmUHNAGpj
# 1aL6TAf8so0XpItnDm0/bQKGBMul78f1SWM=
# SIG # End signature block