Spaces:
Runtime error
Runtime error
| <# | |
| .Synopsis | |
| Activate a Python virtual environment for the current PowerShell session. | |
| .Description | |
| Pushes the python executable for a virtual environment to the front of the | |
| $Env:PATH environment variable and sets the prompt to signify that you are | |
| in a Python virtual environment. Makes use of the command line switches as | |
| well as the `pyvenv.cfg` file values present in the virtual environment. | |
| .Parameter VenvDir | |
| Path to the directory that contains the virtual environment to activate. The | |
| default value for this is the parent of the directory that the Activate.ps1 | |
| script is located within. | |
| .Parameter Prompt | |
| The prompt prefix to display when this virtual environment is activated. By | |
| default, this prompt is the name of the virtual environment folder (VenvDir) | |
| surrounded by parentheses and followed by a single space (ie. '(.venv) '). | |
| .Example | |
| Activate.ps1 | |
| Activates the Python virtual environment that contains the Activate.ps1 script. | |
| .Example | |
| Activate.ps1 -Verbose | |
| Activates the Python virtual environment that contains the Activate.ps1 script, | |
| and shows extra information about the activation as it executes. | |
| .Example | |
| Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv | |
| Activates the Python virtual environment located in the specified location. | |
| .Example | |
| Activate.ps1 -Prompt "MyPython" | |
| Activates the Python virtual environment that contains the Activate.ps1 script, | |
| and prefixes the current prompt with the specified string (surrounded in | |
| parentheses) while the virtual environment is active. | |
| .Notes | |
| On Windows, it may be required to enable this Activate.ps1 script by setting the | |
| execution policy for the user. You can do this by issuing the following PowerShell | |
| command: | |
| PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser | |
| For more information on Execution Policies: | |
| https://go.microsoft.com/fwlink/?LinkID=135170 | |
| #> | |
| Param( | |
| [Parameter(Mandatory = $false)] | |
| [String] | |
| $VenvDir, | |
| [Parameter(Mandatory = $false)] | |
| [String] | |
| $Prompt | |
| ) | |
| <# Function declarations --------------------------------------------------- #> | |
| <# | |
| .Synopsis | |
| Remove all shell session elements added by the Activate script, including the | |
| addition of the virtual environment's Python executable from the beginning of | |
| the PATH variable. | |
| .Parameter NonDestructive | |
| If present, do not remove this function from the global namespace for the | |
| session. | |
| #> | |
| function global:deactivate ([switch]$NonDestructive) { | |
| # Revert to original values | |
| # The prior prompt: | |
| if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) { | |
| Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt | |
| Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT | |
| } | |
| # The prior PYTHONHOME: | |
| if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) { | |
| Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME | |
| Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME | |
| } | |
| # The prior PATH: | |
| if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) { | |
| Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH | |
| Remove-Item -Path Env:_OLD_VIRTUAL_PATH | |
| } | |
| # Just remove the VIRTUAL_ENV altogether: | |
| if (Test-Path -Path Env:VIRTUAL_ENV) { | |
| Remove-Item -Path env:VIRTUAL_ENV | |
| } | |
| # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether: | |
| if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) { | |
| Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force | |
| } | |
| # Leave deactivate function in the global namespace if requested: | |
| if (-not $NonDestructive) { | |
| Remove-Item -Path function:deactivate | |
| } | |
| } | |
| <# | |
| .Description | |
| Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the | |
| given folder, and returns them in a map. | |
| For each line in the pyvenv.cfg file, if that line can be parsed into exactly | |
| two strings separated by `=` (with any amount of whitespace surrounding the =) | |
| then it is considered a `key = value` line. The left hand string is the key, | |
| the right hand is the value. | |
| If the value starts with a `'` or a `"` then the first and last character is | |
| stripped from the value before being captured. | |
| .Parameter ConfigDir | |
| Path to the directory that contains the `pyvenv.cfg` file. | |
| #> | |
| function Get-PyVenvConfig( | |
| [String] | |
| $ConfigDir | |
| ) { | |
| Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg" | |
| # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue). | |
| $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue | |
| # An empty map will be returned if no config file is found. | |
| $pyvenvConfig = @{ } | |
| if ($pyvenvConfigPath) { | |
| Write-Verbose "File exists, parse `key = value` lines" | |
| $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath | |
| $pyvenvConfigContent | ForEach-Object { | |
| $keyval = $PSItem -split "\s*=\s*", 2 | |
| if ($keyval[0] -and $keyval[1]) { | |
| $val = $keyval[1] | |
| # Remove extraneous quotations around a string value. | |
| if ("'""".Contains($val.Substring(0, 1))) { | |
| $val = $val.Substring(1, $val.Length - 2) | |
| } | |
| $pyvenvConfig[$keyval[0]] = $val | |
| Write-Verbose "Adding Key: '$($keyval[0])'='$val'" | |
| } | |
| } | |
| } | |
| return $pyvenvConfig | |
| } | |
| <# Begin Activate script --------------------------------------------------- #> | |
| # Determine the containing directory of this script | |
| $VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition | |
| $VenvExecDir = Get-Item -Path $VenvExecPath | |
| Write-Verbose "Activation script is located in path: '$VenvExecPath'" | |
| Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)" | |
| Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)" | |
| # Set values required in priority: CmdLine, ConfigFile, Default | |
| # First, get the location of the virtual environment, it might not be | |
| # VenvExecDir if specified on the command line. | |
| if ($VenvDir) { | |
| Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values" | |
| } | |
| else { | |
| Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir." | |
| $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/") | |
| Write-Verbose "VenvDir=$VenvDir" | |
| } | |
| # Next, read the `pyvenv.cfg` file to determine any required value such | |
| # as `prompt`. | |
| $pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir | |
| # Next, set the prompt from the command line, or the config file, or | |
| # just use the name of the virtual environment folder. | |
| if ($Prompt) { | |
| Write-Verbose "Prompt specified as argument, using '$Prompt'" | |
| } | |
| else { | |
| Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value" | |
| if ($pyvenvCfg -and $pyvenvCfg['prompt']) { | |
| Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'" | |
| $Prompt = $pyvenvCfg['prompt']; | |
| } | |
| else { | |
| Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virutal environment)" | |
| Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'" | |
| $Prompt = Split-Path -Path $venvDir -Leaf | |
| } | |
| } | |
| Write-Verbose "Prompt = '$Prompt'" | |
| Write-Verbose "VenvDir='$VenvDir'" | |
| # Deactivate any currently active virtual environment, but leave the | |
| # deactivate function in place. | |
| deactivate -nondestructive | |
| # Now set the environment variable VIRTUAL_ENV, used by many tools to determine | |
| # that there is an activated venv. | |
| $env:VIRTUAL_ENV = $VenvDir | |
| if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { | |
| Write-Verbose "Setting prompt to '$Prompt'" | |
| # Set the prompt to include the env name | |
| # Make sure _OLD_VIRTUAL_PROMPT is global | |
| function global:_OLD_VIRTUAL_PROMPT { "" } | |
| Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT | |
| New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt | |
| function global:prompt { | |
| Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " | |
| _OLD_VIRTUAL_PROMPT | |
| } | |
| } | |
| # Clear PYTHONHOME | |
| if (Test-Path -Path Env:PYTHONHOME) { | |
| Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME | |
| Remove-Item -Path Env:PYTHONHOME | |
| } | |
| # Add the venv to the PATH | |
| Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH | |
| $Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" | |
| # SIG # Begin signature block | |
| # MIIcvgYJKoZIhvcNAQcCoIIcrzCCHKsCAQExDzANBglghkgBZQMEAgEFADB5Bgor | |
| # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG | |
| # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAwnDYwEHaCQq0n | |
| # 8NAvsN7H7BO7/48rXCNwrg891FS5vaCCC38wggUwMIIEGKADAgECAhAECRgbX9W7 | |
| # ZnVTQ7VvlVAIMA0GCSqGSIb3DQEBCwUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQK | |
| # EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNV | |
| # BAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0xMzEwMjIxMjAwMDBa | |
| # Fw0yODEwMjIxMjAwMDBaMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy | |
| # dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNVBAMTKERpZ2lD | |
| # ZXJ0IFNIQTIgQXNzdXJlZCBJRCBDb2RlIFNpZ25pbmcgQ0EwggEiMA0GCSqGSIb3 | |
| # DQEBAQUAA4IBDwAwggEKAoIBAQD407Mcfw4Rr2d3B9MLMUkZz9D7RZmxOttE9X/l | |
| # qJ3bMtdx6nadBS63j/qSQ8Cl+YnUNxnXtqrwnIal2CWsDnkoOn7p0WfTxvspJ8fT | |
| # eyOU5JEjlpB3gvmhhCNmElQzUHSxKCa7JGnCwlLyFGeKiUXULaGj6YgsIJWuHEqH | |
| # CN8M9eJNYBi+qsSyrnAxZjNxPqxwoqvOf+l8y5Kh5TsxHM/q8grkV7tKtel05iv+ | |
| # bMt+dDk2DZDv5LVOpKnqagqrhPOsZ061xPeM0SAlI+sIZD5SlsHyDxL0xY4PwaLo | |
| # LFH3c7y9hbFig3NBggfkOItqcyDQD2RzPJ6fpjOp/RnfJZPRAgMBAAGjggHNMIIB | |
| # yTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK | |
| # BggrBgEFBQcDAzB5BggrBgEFBQcBAQRtMGswJAYIKwYBBQUHMAGGGGh0dHA6Ly9v | |
| # Y3NwLmRpZ2ljZXJ0LmNvbTBDBggrBgEFBQcwAoY3aHR0cDovL2NhY2VydHMuZGln | |
| # aWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENBLmNydDCBgQYDVR0fBHow | |
| # eDA6oDigNoY0aHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJl | |
| # ZElEUm9vdENBLmNybDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp | |
| # Z2lDZXJ0QXNzdXJlZElEUm9vdENBLmNybDBPBgNVHSAESDBGMDgGCmCGSAGG/WwA | |
| # AgQwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAK | |
| # BghghkgBhv1sAzAdBgNVHQ4EFgQUWsS5eyoKo6XqcQPAYPkt9mV1DlgwHwYDVR0j | |
| # BBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8wDQYJKoZIhvcNAQELBQADggEBAD7s | |
| # DVoks/Mi0RXILHwlKXaoHV0cLToaxO8wYdd+C2D9wz0PxK+L/e8q3yBVN7Dh9tGS | |
| # dQ9RtG6ljlriXiSBThCk7j9xjmMOE0ut119EefM2FAaK95xGTlz/kLEbBw6RFfu6 | |
| # r7VRwo0kriTGxycqoSkoGjpxKAI8LpGjwCUR4pwUR6F6aGivm6dcIFzZcbEMj7uo | |
| # +MUSaJ/PQMtARKUT8OZkDCUIQjKyNookAv4vcn4c10lFluhZHen6dGRrsutmQ9qz | |
| # sIzV6Q3d9gEgzpkxYz0IGhizgZtPxpMQBvwHgfqL2vmCSfdibqFT+hKUGIUukpHq | |
| # aGxEMrJmoecYpJpkUe8wggZHMIIFL6ADAgECAhADPtXtoGXRuMkd/PkqbJvYMA0G | |
| # CSqGSIb3DQEBCwUAMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJ | |
| # bmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNVBAMTKERpZ2lDZXJ0 | |
| # IFNIQTIgQXNzdXJlZCBJRCBDb2RlIFNpZ25pbmcgQ0EwHhcNMTgxMjE4MDAwMDAw | |
| # WhcNMjExMjIyMTIwMDAwWjCBgzELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU5ldyBI | |
| # YW1wc2hpcmUxEjAQBgNVBAcTCVdvbGZlYm9ybzEjMCEGA1UEChMaUHl0aG9uIFNv | |
| # ZnR3YXJlIEZvdW5kYXRpb24xIzAhBgNVBAMTGlB5dGhvbiBTb2Z0d2FyZSBGb3Vu | |
| # ZGF0aW9uMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqr2kS7J1uW7o | |
| # JRxlsdrETAjKarfoH5TI8PWST6Yb2xPooP7vHT4iaVXyL5Lze1f53Jw67Sp+u524 | |
| # fJXf30qHViEWxumy2RWG0nciU2d+mMqzjlaAWSZNF0u4RcvyDJokEV0RUOqI5CG5 | |
| # zPI3W9uQ6LiUk3HCYW6kpH177A5T3pw/Po8O8KErJGn1anaqtIICq99ySxrMad/2 | |
| # hPMBRf6Ndah7f7HPn1gkSSTAoejyuqF5h+B0qI4+JK5+VLvz659VTbAWJsYakkxZ | |
| # xVWYpFv4KeQSSwoo0DzMvmERsTzNvVBMWhu9OriJNg+QfFmf96zVTu93cZ+r7xMp | |
| # bXyfIOGKhHMaRuZ8ihuWIx3gI9WHDFX6fBKR8+HlhdkaiBEWIsXRoy+EQUyK7zUs | |
| # +FqOo2sRYttbs8MTF9YDKFZwyPjn9Wn+gLGd5NUEVyNvD9QVGBEtN7vx87bduJUB | |
| # 8F4DylEsMtZTfjw/au6AmOnmneK5UcqSJuwRyZaGNk7y3qj06utx+HTTqHgi975U | |
| # pxfyrwAqkovoZEWBVSpvku8PVhkBXcLmNe6MEHlFiaMoiADAeKmX5RFRkN+VrmYG | |
| # Tg4zajxfdHeIY8TvLf48tTfmnQJd98geJQv/01NUy/FxuwqAuTkaez5Nl1LxP0Cp | |
| # THhghzO4FRD4itT2wqTh4jpojw9QZnsCAwEAAaOCAcUwggHBMB8GA1UdIwQYMBaA | |
| # FFrEuXsqCqOl6nEDwGD5LfZldQ5YMB0GA1UdDgQWBBT8Kr9+1L6s84KcpM97IgE7 | |
| # uI8H8jAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwdwYDVR0f | |
| # BHAwbjA1oDOgMYYvaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJl | |
| # ZC1jcy1nMS5jcmwwNaAzoDGGL2h0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zaGEy | |
| # LWFzc3VyZWQtY3MtZzEuY3JsMEwGA1UdIARFMEMwNwYJYIZIAYb9bAMBMCowKAYI | |
| # KwYBBQUHAgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCAYGZ4EMAQQB | |
| # MIGEBggrBgEFBQcBAQR4MHYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj | |
| # ZXJ0LmNvbTBOBggrBgEFBQcwAoZCaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t | |
| # L0RpZ2lDZXJ0U0hBMkFzc3VyZWRJRENvZGVTaWduaW5nQ0EuY3J0MAwGA1UdEwEB | |
| # /wQCMAAwDQYJKoZIhvcNAQELBQADggEBAEt1oS21X0axiafPjyY+vlYqjWKuUu/Y | |
| # FuYWIEq6iRRaFabNDhj9RBFQF/aJiE5msrQEOfAD6/6gVSH91lZWBqg6NEeG9T9S | |
| # XbiAPvJ9CEWFsdkXUrjbWhvCnuZ7kqUuU5BAumI1QRbpYgZL3UA+iZXkmjbGh1ln | |
| # 8rUhWIxbBYL4Sg2nqpB44p7CUFYkPj/MbwU2gvBV2pXjj5WaskoZtsACMv5g42BN | |
| # oVLoRAi+ev6s07POt+JtHRIm87lTyuc8wh0swTPUwksKbLU1Zdj9CpqtzXnuVE0w | |
| # 50exJvRSK3Vt4g+0vigpI3qPmDdpkf9+4Mvy0XMNcqrthw20R+PkIlMxghCVMIIQ | |
| # kQIBATCBhjByMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkw | |
| # FwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEy | |
| # IEFzc3VyZWQgSUQgQ29kZSBTaWduaW5nIENBAhADPtXtoGXRuMkd/PkqbJvYMA0G | |
| # CWCGSAFlAwQCAQUAoIGYMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG | |
| # AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCwGCisGAQQBgjcCAQwxHjAcoBqAGABQ | |
| # AHkAdABoAG8AbgAgADMALgA5AC4ANTAvBgkqhkiG9w0BCQQxIgQgBrni4mcRv7sM | |
| # JHsxpROjRopOz2wuQVrJnn+lD7X7y+gwDQYJKoZIhvcNAQEBBQAEggIAfa/HLI8D | |
| # GRTQjHbg8SUWGNLXsp08sG0LmtlbsGjTnpfxO4cbVP29YkZ44QaZvGfRczR2MEQc | |
| # BsQ7HwbkKpbGrcADViQGB0THzO6jbr2SPq6weqO0acBthegPH/ZhVzDm1GNxScbZ | |
| # +NRAPq9NDbknSBMKcEOOhqoUcBOfJSYwxV1+aNxS2LJkUqjzWpmBd7PC9YQYDbYb | |
| # e93ClwH8gDujsFg1mksvNz+0jBDIX+hHKXECe8rEx5x26rxHsx1QbofD+L7xrvwh | |
| # 0cv13hfqitPf60Wqa9l+r1v8KpOx/6w4lXA73UY6cWMSg13Wd/vvY/rOATRJB1FL | |
| # /Zl1yRs5qsZJI8igX1WVg1raYX1kpE8gzh8EimOxoN545lxDRzb5LJxZ93zpA8jd | |
| # 5pEj6ggyIct1EEYPAXqJ2IfKGBzdoLAFhXvre/2OgCgRgWkdWLLyq0BTmNeZqXzL | |
| # /d2wF799esEuqAOrvq6Vb1lY8lR3OkYS6vhm1yznsSUH+If3asAVK4jlPNl0Xo6z | |
| # qJA1RUvS8DUtofxOuzJvAGunLgjsdsoQNbLBmJOFx8wqG0R8j5tex+nG0k3z9kRK | |
| # ZbxUbDMGMKFht669aaETctJL7+EMkwXgx5CIrycXUNmsdErVy7hdKQZ/cltL9L2f | |
| # Gg02MnhsLFhmr87wVQ+/sWNLn9IAZ8mLLx6hgg1EMIINQAYKKwYBBAGCNwMDATGC | |
| # DTAwgg0sBgkqhkiG9w0BBwKggg0dMIINGQIBAzEPMA0GCWCGSAFlAwQCAQUAMHcG | |
| # CyqGSIb3DQEJEAEEoGgEZjBkAgEBBglghkgBhv1sBwEwMTANBglghkgBZQMEAgEF | |
| # AAQg/qSbYAGCU5MoZyHzXgphXixjAtLi3mp3rPftbFQ7uQECEAnu03VwGsvEEBsL | |
| # Mi/0TP0YDzIwMjEwNTAzMTczMzMxWqCCCjcwggT+MIID5qADAgECAhANQkrgvjqI | |
| # /2BAIc4UAPDdMA0GCSqGSIb3DQEBCwUAMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK | |
| # EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNV | |
| # BAMTKERpZ2lDZXJ0IFNIQTIgQXNzdXJlZCBJRCBUaW1lc3RhbXBpbmcgQ0EwHhcN | |
| # MjEwMTAxMDAwMDAwWhcNMzEwMTA2MDAwMDAwWjBIMQswCQYDVQQGEwJVUzEXMBUG | |
| # A1UEChMORGlnaUNlcnQsIEluYy4xIDAeBgNVBAMTF0RpZ2lDZXJ0IFRpbWVzdGFt | |
| # cCAyMDIxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwuZhhGfFivUN | |
| # CKRFymNrUdc6EUK9CnV1TZS0DFC1JhD+HchvkWsMlucaXEjvROW/m2HNFZFiWrj/ | |
| # ZwucY/02aoH6KfjdK3CF3gIY83htvH35x20JPb5qdofpir34hF0edsnkxnZ2OlPR | |
| # 0dNaNo/Go+EvGzq3YdZz7E5tM4p8XUUtS7FQ5kE6N1aG3JMjjfdQJehk5t3Tjy9X | |
| # tYcg6w6OLNUj2vRNeEbjA4MxKUpcDDGKSoyIxfcwWvkUrxVfbENJCf0mI1P2jWPo | |
| # GqtbsR0wwptpgrTb/FZUvB+hh6u+elsKIC9LCcmVp42y+tZji06lchzun3oBc/gZ | |
| # 1v4NSYS9AQIDAQABo4IBuDCCAbQwDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQC | |
| # MAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwQQYDVR0gBDowODA2BglghkgBhv1s | |
| # BwEwKTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMB8G | |
| # A1UdIwQYMBaAFPS24SAd/imu0uRhpbKiJbLIFzVuMB0GA1UdDgQWBBQ2RIaOpLqw | |
| # Zr68KC0dRDbd42p6vDBxBgNVHR8EajBoMDKgMKAuhixodHRwOi8vY3JsMy5kaWdp | |
| # Y2VydC5jb20vc2hhMi1hc3N1cmVkLXRzLmNybDAyoDCgLoYsaHR0cDovL2NybDQu | |
| # ZGlnaWNlcnQuY29tL3NoYTItYXNzdXJlZC10cy5jcmwwgYUGCCsGAQUFBwEBBHkw | |
| # dzAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tME8GCCsGAQUF | |
| # BzAChkNodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRTSEEyQXNz | |
| # dXJlZElEVGltZXN0YW1waW5nQ0EuY3J0MA0GCSqGSIb3DQEBCwUAA4IBAQBIHNy1 | |
| # 6ZojvOca5yAOjmdG/UJyUXQKI0ejq5LSJcRwWb4UoOUngaVNFBUZB3nw0QTDhtk7 | |
| # vf5EAmZN7WmkD/a4cM9i6PVRSnh5Nnont/PnUp+Tp+1DnnvntN1BIon7h6JGA078 | |
| # 9P63ZHdjXyNSaYOC+hpT7ZDMjaEXcw3082U5cEvznNZ6e9oMvD0y0BvL9WH8dQgA | |
| # dryBDvjA4VzPxBFy5xtkSdgimnUVQvUtMjiB2vRgorq0Uvtc4GEkJU+y38kpqHND | |
| # Udq9Y9YfW5v3LhtPEx33Sg1xfpe39D+E68Hjo0mh+s6nv1bPull2YYlffqe0jmd4 | |
| # +TaY4cso2luHpoovMIIFMTCCBBmgAwIBAgIQCqEl1tYyG35B5AXaNpfCFTANBgkq | |
| # hkiG9w0BAQsFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5j | |
| # MRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBB | |
| # c3N1cmVkIElEIFJvb3QgQ0EwHhcNMTYwMTA3MTIwMDAwWhcNMzEwMTA3MTIwMDAw | |
| # WjByMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL | |
| # ExB3d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3Vy | |
| # ZWQgSUQgVGltZXN0YW1waW5nIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB | |
| # CgKCAQEAvdAy7kvNj3/dqbqCmcU5VChXtiNKxA4HRTNREH3Q+X1NaH7ntqD0jbOI | |
| # 5Je/YyGQmL8TvFfTw+F+CNZqFAA49y4eO+7MpvYyWf5fZT/gm+vjRkcGGlV+Cyd+ | |
| # wKL1oODeIj8O/36V+/OjuiI+GKwR5PCZA207hXwJ0+5dyJoLVOOoCXFr4M8iEA91 | |
| # z3FyTgqt30A6XLdR4aF5FMZNJCMwXbzsPGBqrC8HzP3w6kfZiFBe/WZuVmEnKYmE | |
| # UeaC50ZQ/ZQqLKfkdT66mA+Ef58xFNat1fJky3seBdCEGXIX8RcG7z3N1k3vBkL9 | |
| # olMqT4UdxB08r8/arBD13ays6Vb/kwIDAQABo4IBzjCCAcowHQYDVR0OBBYEFPS2 | |
| # 4SAd/imu0uRhpbKiJbLIFzVuMB8GA1UdIwQYMBaAFEXroq/0ksuCMS1Ri6enIZ3z | |
| # bcgPMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQM | |
| # MAoGCCsGAQUFBwMIMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0cDov | |
| # L29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0cy5k | |
| # aWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MIGBBgNVHR8E | |
| # ejB4MDqgOKA2hjRodHRwOi8vY3JsNC5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1 | |
| # cmVkSURSb290Q0EuY3JsMDqgOKA2hjRodHRwOi8vY3JsMy5kaWdpY2VydC5jb20v | |
| # RGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3JsMFAGA1UdIARJMEcwOAYKYIZIAYb9 | |
| # bAACBDAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT | |
| # MAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsFAAOCAQEAcZUS6VGHVmnN793afKpj | |
| # erN4zwY3QITvS4S/ys8DAv3Fp8MOIEIsr3fzKx8MIVoqtwU0HWqumfgnoma/Capg | |
| # 33akOpMP+LLR2HwZYuhegiUexLoceywh4tZbLBQ1QwRostt1AuByx5jWPGTlH0gQ | |
| # GF+JOGFNYkYkh2OMkVIsrymJ5Xgf1gsUpYDXEkdws3XVk4WTfraSZ/tTYYmo9WuW | |
| # wPRYaQ18yAGxuSh1t5ljhSKMYcp5lH5Z/IwP42+1ASa2bKXuh1Eh5Fhgm7oMLStt | |
| # osR+u8QlK0cCCHxJrhO24XxCQijGGFbPQTS2Zl22dHv1VjMiLyI2skuiSpXY9aaO | |
| # UjGCAk0wggJJAgEBMIGGMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy | |
| # dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNVBAMTKERpZ2lD | |
| # ZXJ0IFNIQTIgQXNzdXJlZCBJRCBUaW1lc3RhbXBpbmcgQ0ECEA1CSuC+Ooj/YEAh | |
| # zhQA8N0wDQYJYIZIAWUDBAIBBQCggZgwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJ | |
| # EAEEMBwGCSqGSIb3DQEJBTEPFw0yMTA1MDMxNzMzMzFaMCsGCyqGSIb3DQEJEAIM | |
| # MRwwGjAYMBYEFOHXgqjhkb7va8oWkbWqtJSmJJvzMC8GCSqGSIb3DQEJBDEiBCAQ | |
| # oGsafDstXll3ot5bx/8PLQS720KhIbACU4IesmNHujANBgkqhkiG9w0BAQEFAASC | |
| # AQCICALSl0rnE1Sf/HFyIQUZGwv0NtTNht9v/Qtr3eo7J+9QhOLytlvBnlXai6jV | |
| # qcX/maiZS8yIwwOXh1t0uFYKKO4uomq7UWTD0AuWDLDD0NkHClu756OObY7hH2YF | |
| # 6H4oHbrnPj+tw+0lFuo6FxAQJN/qAWg7hcEUSpnfqEbMuHTFCV65IPcdMPHilnH3 | |
| # EvTmeMvUCzqz4mSYuQsr7pnCc+EHuBXzZadWPwzrtMIyrtpFVA2hhhkN97j1t+BW | |
| # D4MZTevHrWOmFLRrFk6x9AcNt29fnSmLUImV2g8C/81fU7CPBYLn/A3GAzcwpWjc | |
| # Evh1My2GZkDQltZ1ceUb/Qfs | |
| # SIG # End signature block | |