BusinessCentral/Publish-DynaproContainerAppsFromBlobStorage.ps1
|
function Publish-DynaproContainerAppsFromBlobStorage { <# .SYNOPSIS Downloads and publishes Dynapro app bundles from blob storage. .PARAMETER MaxAttempts Maximum number of download attempts before using the local cache. .PARAMETER CachePath Folder containing cached app bundles. The expected file name is '<container>-apps.zip'. #> [CmdletBinding()] param( [Parameter(Mandatory)] [string] $ContainerName, [Parameter(Mandatory)] [string[]] $AppContainers, [string] $Version = 'preview', [ValidateRange(1, 20)] [int] $MaxAttempts = 5, [string] $CachePath = (Join-Path $env:USERPROFILE 'Downloads') ) foreach ($appContainer in $AppContainers) { $appFile = $null for ($attempt = 1; $attempt -le $MaxAttempts; $attempt++) { try { $appFile = GetAppFileFromBlobStorage -container $appContainer -version $Version -ErrorAction Stop break } catch { if ($attempt -lt $MaxAttempts) { Write-Warning "Azure download attempt $attempt/$MaxAttempts failed for '$appContainer': $($_.Exception.Message). Retrying." } } } if ($null -eq $appFile) { $cachedAppFile = Join-Path $CachePath "$appContainer-apps.zip" if (Test-Path $cachedAppFile -PathType Leaf) { $cachedFile = Get-Item $cachedAppFile if ($cachedFile.Length -gt 0) { Write-Warning "Using cached app package '$cachedAppFile' because Azure download is unavailable." $appFile = $cachedFile.FullName } } } if ($null -eq $appFile) { $cachedAppFile = Join-Path $CachePath "$appContainer-apps.zip" throw "Azure download failed for '$appContainer' after $MaxAttempts attempt(s), and no cached app package was found at '$cachedAppFile'." } try { Publish-BcContainerApp -appFile $appFile -containerName $ContainerName -install -skipVerification -sync -syncMode ForceSync -upgrade -ErrorAction Stop } catch { throw "Failed to publish app '$appContainer'. Inner error: $($_.Exception.Message)" } } } Export-ModuleMember -Function Publish-DynaproContainerAppsFromBlobStorage # SIG # Begin signature block # MIIyMgYJKoZIhvcNAQcCoIIyIzCCMh8CAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCB9oiGlqzN7vLNu # 7lulX8SWoU6OztP0nPyROoiz0f5ZjKCCFrwwggNfMIICR6ADAgECAgsEAAAAAAEh # WFMIojANBgkqhkiG9w0BAQsFADBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3Qg # Q0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln # bjAeFw0wOTAzMTgxMDAwMDBaFw0yOTAzMTgxMDAwMDBaMEwxIDAeBgNVBAsTF0ds # b2JhbFNpZ24gUm9vdCBDQSAtIFIzMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYD # VQQDEwpHbG9iYWxTaWduMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA # zCV2kHkGeCIW9cCDtoTKKJ79BXYRxa2IcvxGAkPHsoqdBF8kyy5L4WCCRuFSqwyB # R3Bs3WTR6/Usow+CPQwrrpfXthSGEHm7OxOAd4wI4UnSamIvH176lmjfiSeVOJ8G # 1z7JyyZZDXPesMjpJg6DFcbvW4vSBGDKSaYo9mk79svIKJHlnYphVzesdBTcdOA6 # 7nIvLpz70Lu/9T0A4QYz6IIrrlOmOhZzjN1BDiA6wLSnoemyT5AuMmDpV8u5BJJo # aOU4JmB1sp93/5EU764gSfytQBVI0QIxYRleuJfvrXe3ZJp6v1/BE++bYvsNbOBU # aRapA9pu6YOTcXbGaYWCFwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T # AQH/BAUwAwEB/zAdBgNVHQ4EFgQUj/BLf6guRSSuTVD6Y5qL3uLdG7wwDQYJKoZI # hvcNAQELBQADggEBAEtA28BQqv7IDO/3llRFSbuWAAlBrLMThoYoBzPKa+Z0uboA # La6kCtP18fEPir9zZ0qDx0R7eOCvbmxvAymOMzlFw47kuVdsqvwSluxTxi3kJGy5 # lGP73FNoZ1Y+g7jPNSHDyWj+ztrCU6rMkIrp8F1GjJXdelgoGi8d3s0AN0GP7URt # 11Mol37zZwQeFdeKlrTT3kwnpEwbc3N29BeZwh96DuMtCK0KHCz/PKtVDg+Rfjbr # w1dJvuEuLXxgi8NBURMjnc73MmuUAaiZ5ywzHzo7JdKGQM47LIZ4yWEvFLru21Vv # 34TuBQlNvSjYcs7TYlBlHuuSl4Mx2bO1ykdYP18wggWiMIIEiqADAgECAhB4AxhC # RXCKQc9vAbjutKlUMA0GCSqGSIb3DQEBDAUAMEwxIDAeBgNVBAsTF0dsb2JhbFNp # Z24gUm9vdCBDQSAtIFIzMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpH # bG9iYWxTaWduMB4XDTIwMDcyODAwMDAwMFoXDTI5MDMxODAwMDAwMFowUzELMAkG # A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExKTAnBgNVBAMTIEds # b2JhbFNpZ24gQ29kZSBTaWduaW5nIFJvb3QgUjQ1MIICIjANBgkqhkiG9w0BAQEF # AAOCAg8AMIICCgKCAgEAti3FMN166KuQPQNysDpLmRZhsuX/pWcdNxzlfuyTg6qE # 9aNDm5hFirhjV12bAIgEJen4aJJLgthLyUoD86h/ao+KYSe9oUTQ/fU/IsKjT5GN # swWyKIKRXftZiAULlwbCmPgspzMk7lA6QczwoLB7HU3SqFg4lunf+RuRu4sQLNLH # Qx2iCXShgK975jMKDFlrjrz0q1qXe3+uVfuE8ID+hEzX4rq9xHWhb71hEHREspgH # 4nSr/2jcbCY+6R/l4ASHrTDTDI0DfFW4FnBcJHggJetnZ4iruk40mGtwEd44ytS+ # ocCc4d8eAgHYO+FnQ4S2z/x0ty+Eo7+6CTc9Z2yxRVwZYatBg/WsHet3DUZHc86/ # vZWV7Z0riBD++ljop1fhs8+oWukHJZsSxJ6Acj2T3IyU3ztE5iaA/NLDA/CMDNJF # 1i7nj5ie5gTuQm5nfkIWcWLnBPlgxmShtpyBIU4rxm1olIbGmXRzZzF6kfLUjHlu # fKa7fkZvTcWFEivPmiJECKiFN84HYVcGFxIkwMQxc6GYNVdHfhA6RdktpFGQmKmg # BzfEZRqqHGsWd/enl+w/GTCZbzH76kCy59LE+snQ8FB2dFn6jW0XMr746X4D9OeH # dZrUSpEshQMTAitCgPKJajbPyEygzp74y42tFqfT3tWbGKfGkjrxgmPxLg4kZN8C # AwEAAaOCAXcwggFzMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEFBQcD # AzAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQfAL9GgAr8eDm3pbRD2VZQu86W # OzAfBgNVHSMEGDAWgBSP8Et/qC5FJK5NUPpjmove4t0bvDB6BggrBgEFBQcBAQRu # MGwwLQYIKwYBBQUHMAGGIWh0dHA6Ly9vY3NwLmdsb2JhbHNpZ24uY29tL3Jvb3Ry # MzA7BggrBgEFBQcwAoYvaHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLmNvbS9jYWNl # cnQvcm9vdC1yMy5jcnQwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i # YWxzaWduLmNvbS9yb290LXIzLmNybDBHBgNVHSAEQDA+MDwGBFUdIAAwNDAyBggr # BgEFBQcCARYmaHR0cHM6Ly93d3cuZ2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8w # DQYJKoZIhvcNAQEMBQADggEBAKz3zBWLMHmoHQsoiBkJ1xx//oa9e1ozbg1nDnti # 2eEYXLC9E10dI645UHY3qkT9XwEjWYZWTMytvGQTFDCkIKjgP+icctx+89gMI7qo # Lao89uyfhzEHZfU5p1GCdeHyL5f20eFlloNk/qEdUfu1JJv10ndpvIUsXPpYd9Gu # p7EL4tZ3u6m0NEqpbz308w2VXeb5ekWwJRcxLtv3D2jmgx+p9+XUnZiM02FLL8Mo # fnrekw60faAKbZLEtGY/fadY7qz37MMIAas4/AocqcWXsojICQIZ9lyaGvFNbDDU # swarAGBIDXirzxetkpNiIHd1bL3IMrTcTevZ38GQlim9wX8wgga/MIIEp6ADAgEC # AhEAgU5CF6Epf+1azNQX+JGtdTANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJC # RTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEpMCcGA1UEAxMgR2xvYmFsU2ln # biBDb2RlIFNpZ25pbmcgUm9vdCBSNDUwHhcNMjQwNjE5MDMyNTExWhcNMzgwNzI4 # MDAwMDAwWjBZMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1z # YTEvMC0GA1UEAxMmR2xvYmFsU2lnbiBHQ0MgUjQ1IENvZGVTaWduaW5nIENBIDIw # MjAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDWQk3540/GI/RsHYGm # MPdIPc/Q5Y3lICKWB0Q1XQbPDx1wYOYmVPpTI2ACqF8CAveOyW49qXgFvY71Txkk # mXzPERabH3tr0qN7aGV3q9ixLD/TcgYyXFusUGcsJU1WBjb8wWJMfX2GFpWaXVS6 # UNCwf6JEGenWbmw+E8KfEdRfNFtRaDFjCvhb0N66WV8xr4loOEA+COhTZ05jtiGO # 792NhUFVnhy8N9yVoMRxpx8bpUluCiBZfomjWBWXACVp397CalBlTlP7a6GfGB6K # Dl9UXr3gW8/yDATS3gihECb3svN6LsKOlsE/zqXa9FkojDdloTGWC46kdncVSYRm # giXnQwp3UrGZUUL/obLdnNLcGNnBhqlAHUGXYoa8qP+ix2MXBv1mejaUASCJeB+Q # 9HupUk5qT1QGKoCvnsdQQvplCuMB9LFurA6o44EZqDjIngMohqR0p0eVfnJaKnsV # ahzEaeawvkAZmcvSfVVOIpwQ4KFbw7MueovE3vFLH4woeTBFf2wTtj0s/y1Kiirs # KA8tytScmIpKbVo2LC/fusviQUoIdxiIrTVhlBLzpHLr7jaep1EnkTz3ohrM/Ifl # l+FRh2npIsyDwLcPRWwH4UNP1IxKzs9jsbWkEHr5DQwosGs0/iFoJ2/s+PomhFt1 # Qs2JJnlZnWurY3FikCUNCCDx/wIDAQABo4IBhjCCAYIwDgYDVR0PAQH/BAQDAgGG # MBMGA1UdJQQMMAoGCCsGAQUFBwMDMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0O # BBYEFNqzjcAkkKNrd9MMoFndIWdkdgt4MB8GA1UdIwQYMBaAFB8Av0aACvx4Obel # tEPZVlC7zpY7MIGTBggrBgEFBQcBAQSBhjCBgzA5BggrBgEFBQcwAYYtaHR0cDov # L29jc3AuZ2xvYmFsc2lnbi5jb20vY29kZXNpZ25pbmdyb290cjQ1MEYGCCsGAQUF # BzAChjpodHRwOi8vc2VjdXJlLmdsb2JhbHNpZ24uY29tL2NhY2VydC9jb2Rlc2ln # bmluZ3Jvb3RyNDUuY3J0MEEGA1UdHwQ6MDgwNqA0oDKGMGh0dHA6Ly9jcmwuZ2xv # YmFsc2lnbi5jb20vY29kZXNpZ25pbmdyb290cjQ1LmNybDAuBgNVHSAEJzAlMAgG # BmeBDAEEATALBgkrBgEEAaAyATIwDAYKKwYBBAGgMgoEAjANBgkqhkiG9w0BAQsF # AAOCAgEAMhDkvBelgxBAndOp/SfPRXKpxR9LM1lvLDIxeXGE1jZn1at0/NTyBjpu # tdbL8UKDlr193pUsGu1q40EcpsiJMcJZbIm8KiMDWVBHSf1vUw4qKMxIVO/zIxhb # kjZOvKNj1MP7AA+A0SDCyuWWuvCaW6qkJXoZ2/rbe1NP+baj2WPVdV8BpSjbthgp # FGV5nNu064iYFFNQYDEMZrNR427JKSZk8BTRc3jEhI0+FKWSWat5QUbqNM+BdkY6 # kXgZc77+BvXXwYQ5oHBMCjUAXtgqMCQfMne24Xzfs0ZB4fptjePjC58vQNmlOg1k # yb6M0RrJZSA64gD6TnohN0FwmZ1QH5l7dZB0c01FpU5Yf912apBYiWaTZKP+VPdN # quvlIO5114iyHQw8vKGSoFbkR/xnD+p4Kd+Po8fZ4zF4pwsplGscJ10hJ4fio+/I # QJAuXBcoJdMBRBergNp8lKhbI/wgnpuRoZD/sw3lckQsRxXz1JFyJvnyBeMBZ/dp # td4Ftv4okIx/oSk7tyzaZCJplsT001cNKoXGu2horIvxUktkbqq4t+xNFBz6qBQ4 # zuwl6+Ri3TX5uHsHXRtDZwIIaz2/JSODgZZzB+7+WFo8N9qg21/SnDpGkpzEJhwJ # MNol5A4dkHPUHodOaYSBkc1lfuc1+oOAatM0HUaneAimeDIlZnowggbsMIIE1KAD # AgECAgw2nw7cp6+OSBEHtLQwDQYJKoZIhvcNAQELBQAwWTELMAkGA1UEBhMCQkUx # GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExLzAtBgNVBAMTJkdsb2JhbFNpZ24g # R0NDIFI0NSBDb2RlU2lnbmluZyBDQSAyMDIwMB4XDTI0MDgyNzEzNDcyOVoXDTI3 # MDgyODEzNDcyOVowWjELMAkGA1UEBhMCTk8xETAPBgNVBAgTCEFrZXJzaHVzMQ4w # DAYDVQQHEwVBc2tlcjETMBEGA1UEChMKRFlOQVBSTyBBUzETMBEGA1UEAxMKRFlO # QVBSTyBBUzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKoaZQGUHy7H # bm2tnE2xVpmHgZTH9MOW+8hR1J74U1/g89Av+fjRijGi+H9pwJd1fuPkoZRrCTrI # yGai6d7HJHciyPZEqWbc2uhDTOM7tY938fZVUSdLHw///Chq6c6xp1K+AvbKwfCt # sOQXjnSEb/Hncx+hGJYyoLgMmJ6/hPSwsXfkIRf0+gg2r1Z/y1ulasXVjog/GSv7 # TrvmfK+9o5DTD/Wd4TdLNV+nQmDEcYHPHODYXnYVlCJ7F3BMDcluzcwC2kL6udnQ # hybp5cN5JGmuwtGackrI+rb6HP0bQ63tZm7+z5DWv92QXidEaTH8zogwRc9yAirG # AdUzIEk6PPx/+ZdR7+EVa3vQLHjH4owtjjCyONt6JKyJ3mpiY48RkJ/xyQDw9vNu # hMx0I+4kER0/qOU0BN0KkdErQvox8kU20mGFoKZdNFBz0YNlhbaiQAwxv/HWNYXC # EynPdRX4q4NAfpsM3yJIRyEgAf5vTRMVONPmRtosY2l7v3lCRbJ+IRlz0zmV4hSw # Wa+0O+5EyapmcsPCy90ia9hNPTiLziniViN0qSCtAbFFUROpipKGN+IMQA7RJ6UL # TEfFcphPELxaSruxN3EHxTeu59TafVdRucrIyFjvdwyTThqe+/SJC7cxzZPrJWUD # IVHksJpDKBm1OUAOzv2SGTa37twSHGrHAgMBAAGjggGxMIIBrTAOBgNVHQ8BAf8E # BAMCB4AwgZsGCCsGAQUFBwEBBIGOMIGLMEoGCCsGAQUFBzAChj5odHRwOi8vc2Vj # dXJlLmdsb2JhbHNpZ24uY29tL2NhY2VydC9nc2djY3I0NWNvZGVzaWduY2EyMDIw # LmNydDA9BggrBgEFBQcwAYYxaHR0cDovL29jc3AuZ2xvYmFsc2lnbi5jb20vZ3Nn # Y2NyNDVjb2Rlc2lnbmNhMjAyMDBWBgNVHSAETzBNMEEGCSsGAQQBoDIBMjA0MDIG # CCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5 # LzAIBgZngQwBBAEwCQYDVR0TBAIwADBFBgNVHR8EPjA8MDqgOKA2hjRodHRwOi8v # Y3JsLmdsb2JhbHNpZ24uY29tL2dzZ2NjcjQ1Y29kZXNpZ25jYTIwMjAuY3JsMBMG # A1UdJQQMMAoGCCsGAQUFBwMDMB8GA1UdIwQYMBaAFNqzjcAkkKNrd9MMoFndIWdk # dgt4MB0GA1UdDgQWBBTZQpJHpM67VSenVd2tOVfaZsvwZDANBgkqhkiG9w0BAQsF # AAOCAgEAYPMNPx2sFGEHEOUnPkR0gHNXTb32ClH2wa5w5Mo2L0SWeYwfIiP3kC/C # P1riV9c8IWit5plVsqsivR3FybBSvX7Jz4xrTSPZmAXimbecgrxYaKxG/lNESB2q # 8mngyjdJVq2HUJLlhlZFi/aewJkwsRb3cLPn85NTW8tu5QnF2ftFlbeiBLtIzy7d # cnQbdjq1y8teL6jV1388IcVZATdg5KkKECyqqwKMNvuv94xjT0Dk85ib+3poMDVB # YrnsPEhv7QetogYA4QStrgH+M2FBlRO4vRnKz/j/HSHPxqzWvA3Ev6LdJOrZfof6 # jGALFcPlkbdzaBUYPSRa8hLEZElMU6cMihiREfsAwCNbWWx6Fousjj5Nz8rNLnvx # rrdE28LCYOO1FSSSKSroT+McsI6rMJx07dGwKOSqLda0nsE912Fogkc0PLLtzfWR # WLWF7+m5clPZgZEFrkq+91tDNf6GPCy5ea7ay97cBvrjjMz8aZZYNh6zVN/aegSz # Cxrd/FRpGROPteaKmUvr8cqbkhp2BIgIMMt6gjKpDrA4xb5wTCZdNwAzBusaci9P # OdVo7U6iHJibW+zX5BzI6axfNPUbB4aIHC8YtaKbFuIVO9IRqhRs2tqAMuwy1JR2 # lp7BViciCUbSiPsQMDoXwMSd6cWjYVjhh1TtzGgdxiyB78o9smcxghrMMIIayAIB # ATBpMFkxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS8w # LQYDVQQDEyZHbG9iYWxTaWduIEdDQyBSNDUgQ29kZVNpZ25pbmcgQ0EgMjAyMAIM # Np8O3KevjkgRB7S0MA0GCWCGSAFlAwQCAQUAoIGaMBkGCSqGSIb3DQEJAzEMBgor # BgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC4GCisGAQQB # gjcCAQwxIDAeoAKAAKEYgBZodHRwczovL3d3dy5keW5hcHJvLm5vMC8GCSqGSIb3 # DQEJBDEiBCBofaIk7FwIqyl7GVDFIVLiW42hZpjCzHWNskfXB28iHTANBgkqhkiG # 9w0BAQEFAASCAgBV9osNx6rVBpbpsag9rvLzxcVExGQyGb2pnt0FfDbFqz+gGdtg # ReSwS88zvTJjeMgFuq6NBKFH0G36Jw4gcCFn20bDVsY3SXJ6V9nsJJcQMD5OK0oJ # vOhQyV0aMNWiGBOqkSET3wW4tgcl3Y0+s91TlA93vlWTEmQO0HpexqoUQrAr4JCW # 6CC+Q8NiFarPV0a8vUd6nvg4TSudhjGaiIMu7lmZg9pnEc0rpv8meUYG5rQSlQHg # zHE/CskmEoiwzqPl/pkQT5SNP1NQSUVixartd3n+7MdS3ZTAQHjL2gX7PpEqiPU/ # +Rx2amVMJo7f5aVnQYCp1foci+nmA8DwNOGPodTxdJnCZ4DtA4jLDpkLEh7EHqzs # 53C3azBu+B2UScSRMv3zGbSGS3256YuKLamPTWjdAPk44CkbnI9Dp3QHdXfUjV5r # gd+NNe0GJVEp28xD8HfUI4PEjTb+ZM7sVmCLhrfoVXBmHdDnXKfCcC1w9dOZVL6j # DnIpS5EidsGxRw4M0a3AJEaQOmq/gPv0TACN2eEyQ/cKA3rNH1RFYyX53D4pDuuO # qMi/WBH1ZX4aVwnd/3M/Y7qAkuOoN167Kqrl2YHRL2GqgATpdcAyCGiQtwLtdAOy # RWrQKEK9ggTKiG2uyFVeahxKpx5xTWMqDa4lNnkPC535+nOAp7192IbIeKGCF5cw # gheTBgorBgEEAYI3AwMBMYIXgzCCF38GCSqGSIb3DQEHAqCCF3AwghdsAgEDMQ8w # DQYJYIZIAWUDBAICBQAwgYcGCyqGSIb3DQEJEAEEoHgEdjB0AgEBBglghkgBhv1s # BwEwQTANBglghkgBZQMEAgIFAAQwkCQtqN0QqimxiRzCgcakqJLwnJ3eGdmWZmTx # Z5m8qf28r7HsHQ/FV4G8dNIQNC5aAhBog8Ohf/+Hvl4zuJQ53MdkGA8yMDI2MDgy # NTIwMDgyMFqgghM6MIIG7TCCBNWgAwIBAgIQDCBDSfnQ91n7mC3kCBuIezANBgkq # hkiG9w0BAQwFADBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIElu # Yy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgVGltZVN0YW1waW5nIFJT # QTQwOTYgU0hBMjU2IDIwMjUgQ0ExMB4XDTI1MDYwNDAwMDAwMFoXDTM2MDkwMzIz # NTk1OVowYzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTsw # OQYDVQQDEzJEaWdpQ2VydCBTSEEzODQgUlNBNDA5NiBUaW1lc3RhbXAgUmVzcG9u # ZGVyIDIwMjUgMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANs5UvuL # dLflyQ1R2PrzScab+/eLDNzuFEMnJikV5mC7PmEX87cpfECe5/1KsTUylpo3RQ1h # r+N/mtqIieNcsTntLC6BcfBdWs9iUU2XO3YQMW53vm8neW39khGZQq7hscVkqm6V # GOnQBkQgsgTmohWqF4ZJ/i9eXn3KJg0q05wOVYHfabzDvu2zPrUluCcwIiGztpiD # 8ghHSmLHJj5fmAbnp0j+zScPYnC9bVqZ+tbjOlslDb+EXMgQM/jbyWzX+ZEzOxeO # nLwcKdJWWIrGUffOcubGI+HuMlAWzwccq0+WjTGfvubYrPBg5hwqaslS0OHix8KY # puYsEePU0RHxE7ZRBTkVk5CdoTjtc81QFrOo7XXqddlbRWaEDoSMHVHzx0rAMN/c # RVXrxRBX9rvg1a9bDleyQAmPsXBvIViHqjxlVMJIsgUVE4AOx3gMSW9IkJeBgwQu # mQQOMBjf2oTMReH7ibDrNc8JDwUp15h5JtfB8B4CDypNvO3TCHIWco5u8xnAmGeG # 4rKFGFi/aE4GvSQnxTE3PcpdulwwdM5fa3UsL4jpmmEpWkWpxfOKMQGJ6oAcumfP # cpD4Fp2+0kYt9Tcj9+fVoaJPt+n5MsUz40qwlrzCu6c20YPLXyEZVJ8ZexuWyK5D # 6jGw/cyaAe/TBxYC6+ZY1O663C8MvnBH6cxTAgMBAAGjggGVMIIBkTAMBgNVHRMB # Af8EAjAAMB0GA1UdDgQWBBRVnrnnZ8iREEm0NlKNebckxT8t+DAfBgNVHSMEGDAW # gBTvb1NK6eQGfHrK4pBW9i/USezLTjAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/ # BAwwCgYIKwYBBQUHAwgwgZUGCCsGAQUFBwEBBIGIMIGFMCQGCCsGAQUFBzABhhho # dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXQYIKwYBBQUHMAKGUWh0dHA6Ly9jYWNl # cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFRpbWVTdGFtcGluZ1JT # QTQwOTZTSEEyNTYyMDI1Q0ExLmNydDBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8v # Y3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRUaW1lU3RhbXBpbmdS # U0E0MDk2U0hBMjU2MjAyNUNBMS5jcmwwIAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJ # YIZIAYb9bAcBMA0GCSqGSIb3DQEBDAUAA4ICAQAbfgskh9gJasVB51Fp2SSO66XQ # KqND3IpMlePC7ZOUFhYMaRz/VrY0d5bJBADpN07M5rjcjIne1bsR5UCZeCnHU6+X # ENmC8vpeetKXgYDO5AOBwiahqnUHc418q5YN2AnX547PcP+wTvMVJpQGqvw/j02W # TvjJ8Wt/yKMmLBfi/YFl+FScWS5Y1bOSSpqUqJ58rDGL+wmqpEKQQ5iVlNhevJiy # 2V31NMF2w8vUEE7JIHB74skA3gdZeo5f1sDkIkjUzWn2EFEdmbCeazybtTT8ztYb # SsHYlI1npx8KuQUStQUe/g/k8Bve1B1+FdFvibxWafM93dxubAOz7fajuf+gFmft # Mn/JzefA/hwAEoR5p8tubelu6helUkWQiKRq/IWwI32wYTuDGPBtlPc8FSqekpY7 # ipJ8Xdm7ooTt93YqAhrAera1/vsUCn+EJWEoIBbw/WVkhuMrCT2DsfoW7AUxDjRb # a/fcejoCZ58lZA6LnSJ/oJlfgavmthvvgS1OQFzlXJRMabqFEF1GRead7FK3dtUI # xfUWtMeEQ9NoEuF8IMzfrb7mPrY4TyAsF5h9xES/nzyKMWU9F4MFT/te1KlG4uWa # XuGHWnRuVowkwb7ZpTOCVaLxmEb8gMn5mCScdP9E/qitOcESaYOKvNbzirgkD2hP # R/fSQlb3wgwZuCo6xDCCBrQwggScoAMCAQICEA3HrFcF/yGZLkBDIgw6SYYwDQYJ # KoZIhvcNAQELBQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IElu # YzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQg # VHJ1c3RlZCBSb290IEc0MB4XDTI1MDUwNzAwMDAwMFoXDTM4MDExNDIzNTk1OVow # aTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQD # EzhEaWdpQ2VydCBUcnVzdGVkIEc0IFRpbWVTdGFtcGluZyBSU0E0MDk2IFNIQTI1 # NiAyMDI1IENBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALR4MdMK # mEFyvjxGwBysddujRmh0tFEXnU2tjQ2UtZmWgyxU7UNqEY81FzJsQqr5G7A6c+Gh # /qm8Xi4aPCOo2N8S9SLrC6Kbltqn7SWCWgzbNfiR+2fkHUiljNOqnIVD/gG3SYDE # Ad4dg2dDGpeZGKe+42DFUF0mR/vtLa4+gKPsYfwEu7EEbkC9+0F2w4QJLVSTEG8y # AR2CQWIM1iI5PHg62IVwxKSpO0XaF9DPfNBKS7Zazch8NF5vp7eaZ2CVNxpqumzT # CNSOxm+SAWSuIr21Qomb+zzQWKhxKTVVgtmUPAW35xUUFREmDrMxSNlr/NsJyUXz # dtFUUt4aS4CEeIY8y9IaaGBpPNXKFifinT7zL2gdFpBP9qh8SdLnEut/GcalNeJQ # 55IuwnKCgs+nrpuQNfVmUB5KlCX3ZA4x5HHKS+rqBvKWxdCyQEEGcbLe1b8Aw4wJ # khU1JrPsFfxW1gaou30yZ46t4Y9F20HHfIY4/6vHespYMQmUiote8ladjS/nJ0+k # 6MvqzfpzPDOy5y6gqztiT96Fv/9bH7mQyogxG9QEPHrPV6/7umw052AkyiLA6tQb # Zl1KhBtTasySkuJDpsZGKdlsjg4u70EwgWbVRSX1Wd4+zoFpp4Ra+MlKM2baoD6x # 0VR4RjSpWM8o5a6D8bpfm4CLKczsG7ZrIGNTAgMBAAGjggFdMIIBWTASBgNVHRMB # Af8ECDAGAQH/AgEAMB0GA1UdDgQWBBTvb1NK6eQGfHrK4pBW9i/USezLTjAfBgNV # HSMEGDAWgBTs1+OC0nFdZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYD # VR0lBAwwCgYIKwYBBQUHAwgwdwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhho # dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNl # cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1Ud # HwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRy # dXN0ZWRSb290RzQuY3JsMCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwH # ATANBgkqhkiG9w0BAQsFAAOCAgEAF877FoAc/gc9EXZxML2+C8i1NKZ/zdCHxYga # MH9Pw5tcBnPw6O6FTGNpoV2V4wzSUGvI9NAzaoQk97frPBtIj+ZLzdp+yXdhOP4h # CFATuNT+ReOPK0mCefSG+tXqGpYZ3essBS3q8nL2UwM+NMvEuBd/2vmdYxDCvwzJ # v2sRUoKEfJ+nN57mQfQXwcAEGCvRR2qKtntujB71WPYAgwPyWLKu6RnaID/B0ba2 # H3LUiwDRAXx1Neq9ydOal95CHfmTnM4I+ZI2rVQfjXQA1WSjjf4J2a7jLzWGNqNX # +DF0SQzHU0pTi4dBwp9nEC8EAqoxW6q17r0z0noDjs6+BFo+z7bKSBwZXTRNivYu # ve3L2oiKNqetRHdqfMTCW/NmKLJ9M+MtucVGyOxiDf06VXxyKkOirv6o02OoXN4b # FzK0vlNMsvhlqgF2puE6FndlENSmE+9JGYxOGLS/D284NHNboDGcmWXfwXRy4kbu # 4QFhOm0xJuF2EZAOk5eCkhSxZON3rGlHqhpB/8MluDezooIs8CVnrpHMiD2wL40m # m53+/j7tFaxYKIqL0Q4ssd8xHZnIn/7GELH3IdvG2XlM9q7WP/UwgOkw/HQtyRN6 # 2JK4S1C8uw3PdBunvAZapsiI5YKdvlarEvf8EA+8hcpSM9LHJmyrxaFtoza2zNaQ # 9k+5t1wwggWNMIIEdaADAgECAhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEB # DAUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNV # BAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQg # SUQgUm9vdCBDQTAeFw0yMjA4MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJ # BgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k # aWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCC # AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPs # wqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLk # X9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDtt # ceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hI # qGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2 # scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm # 2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaH # iZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3r # M9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJ # B+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRES # W+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6Kxfgom # mfXkaS+YHS312amyHeUbAgMBAAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0G # A1UdDgQWBBTs1+OC0nFdZEzfLmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLL # gjEtUYunpyGd823IDzAOBgNVHQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQG # CCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKG # N2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJv # b3RDQS5jcnQwRQYDVR0fBD4wPDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQu # Y29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUd # IAAwDQYJKoZIhvcNAQEMBQADggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGH # LOyFXqkauyL4hxppVCLtpIh3bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7Q # Kt76LVbP+fT3rDB6mouyXtTP0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajw # vy8LpunyNDzs9wPHh6jSTEAZNUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQ # Pfx2CWiEn2/K2yCNNWAcAgPLILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFq # I2si/xK4VC0nftg62fC2h5b9W9FcrBjDTZ9ztwGpn1eqXijiuZQxggOMMIIDiAIB # ATB9MGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8G # A1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBUaW1lU3RhbXBpbmcgUlNBNDA5NiBT # SEEyNTYgMjAyNSBDQTECEAwgQ0n50PdZ+5gt5AgbiHswDQYJYIZIAWUDBAICBQCg # geEwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0y # NjA4MjUyMDA4MjBaMCsGCyqGSIb3DQEJEAIMMRwwGjAYMBYEFHK8/aAQf0k0sAcc # YQ/m15ZQAJh3MDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIDLz47G9oteybU8dG4zd # vY+LhHaheJ7WEs08qnqe/zXCMD8GCSqGSIb3DQEJBDEyBDAjiWukGGouAj5kPOJN # FqIrsOIqkgRqh8t+an5xstaxpXO5NrRR52M7Zj2uQfj99WQwDQYJKoZIhvcNAQEB # BQAEggIAKF3jyyxSQux3RDEC9tEoj5/oTEV1qp0MG76PK1ncOcz7iXJ2c8P/dL+6 # RUYvjbz/kPr4qa7AU+qGzx+7F8LN+8SczTvZ9MLI0PTHMkrTsIhJT6SgAddH1JPQ # Qqul/mrEOAmSrz33LfdKtir1DobL79Mvz2ESD7h16Q896o9CPpP7eyaFJ7WYTIwT # JyXKaaEbcIS6qL5b9TJ1/dXgkXCmRD3zLufqBm1SoQ7a1M0CBl/aKPW8z97Z02Zu # GdAIpsrI75C44wLF9VrdMpyr/Wrbqo2TwZ04Z/jb5Sb1iWNJfgJHEDfcN48PzjiU # PuU6VZhaTPZqTWo2kY2i479iiMxt3ym9gMSs2qnFPUZNoZDKdGDoUWJbQ3jrXx4D # nd6Q9XZ5Rhj62BIpTH2b+7J8jG+ul046HcxCBAUNs7RNeJeOhSOsttvTXGFPR2Q9 # AXbhvGxHrCMg1JmEbOFmkxq6pAEoE0JTo9QFE7yxsDrPFyOyGQGm4Ytl7svQbBR5 # NK09ue9wmE2XuxciW/vIkQqhLaU+ctjxooMMpJw3NutzSz8ieqb0VTewDFp5j048 # gpQLw7FIrtpi9lmHeWPEvEelMQ/rE8e3rNq2TPR7eT+uCk/CrEeoQLdXN7YS254/ # B7ruGwR3XATVAttjaSBDfF6Oedj1B0oszc9LNgI9Z0fkfPFzk6Y= # SIG # End signature block |