travis-ci/travis-tests:.travis.yml@72dd813
import:
- stages.yml
- ifs.yml
- ifs-with-envs.yml
- secure.yml
- sleep.yml
- vault.yml
branches:
only:
- main
- integration-regresion-tests
- prd-hashicorp-vault
- prd-hashicorp-vault-dev
os: linux
dist: focal
language: ruby
rvm: 2.7.1
jobs:
allow_failures:
- os: linux
dist: focal
language: ruby
rvm: 2.7.1
env:
global:
- secure: "V1Cu4sjO3e9aNgPLsvHbzSh+eTlzvIT1VT4piUz3nvy+Po37/hRuZbdBez6ntSsr5fVHDgJr7OLfjMX1FBgnyK3r/N0eOSHqPVdJcW14TDJmrWmOkwj2mEksxY1CYIVzazltjqb85YCgWRERpJqGksc0xfMLI5dIP1Xy3+BiiMhiHGt+O915BSeRqLTrp/SUD6GKPshhc29xkku4rc47SlWEtjShGxg9eqvsQlKiIrFN/o4oNXfKAGZCY80QrZLHRSI+wY0IjmD2YSBKH/+aPginBmA4WHGg0FZ2cKHtDJitvy/BY7AeE634/i5pwxvKvR5vPGcSxW/67aX53vtmyjinRraUhx1E4SxGnOojHDpY7gK35ReNE+yQlpbPwhea7Hb9pVgYuCnL3O6yE7PIMI+AFnLKN7V4iA93vfzduzpAZO91eDQYnZJMQCLmGK0kSWosiYtmKE5eOh8Vq6Fcg7twO1YRO0Mcq+IrCPstSXS6wbrFAP1X3QCJ5SVC8bD2RSLJvtakPxDod3x43shrCkWABduGuB9GFlG22CH4QyRg20hihqyLD0qMrZNPoctyQ0LYHI4rmyCcjvQhxeNgWJ1OvAGVhrHN+heOqPRJOZVgX+L7FME/aQoGfcbbuDF9Kh+wXaTyKxSTwaGBG0zYgiOVVH5jQAvWOdRGNIyVx+A="
travis-ci/travis-tests:stages.yml@72dd813
# cases for build-stages https://docs.travis-ci.com/user/build-stages/
# - sequence of stages
# - named stages
# TODO: add bash output or comment whether expected result of the job is to pass or fail at each job in matrix
jobs:
include:
- stage: "First"
name: "First stage"
script: ruby ./source/ruby_hello.rb
# in 'Second' ruby exception is raised, this specific job should fail in terms of particular build job status
- stage: "Second"
name: "Second stage"
script: ruby ./source/fail.rb
- stage: "Next"
name: "Next stage"
script: ruby ./source/fine.rb
travis-ci/travis-tests:ifs.yml@72dd813
# testing conditionals - travis-yml and later scheduler involved
# ==
# testing running build from specific branch (branch must exist ), allow failure must be
# used in root travis.yml (https://docs.travis-ci.com/user/conditional-builds-stages-jobs/)
# building branches - https://docs.travis-ci.com/user/customizing-the-build/#building-specific-branches
# ==
# commit messages: https://docs.travis-ci.com/user/customizing-the-build/#skipping-a-build
# example: do something if commit message has specific value e.g. 'docker'
jobs:
include:
- stage: "IFS - first"
name: "IFS - first stage"
if: branch = integration-regresion-tests
script: ruby ./source/ruby_hello.rb
- stage: "IFS - on commit"
name: "IFS - on commit stage"
if: commit_message =~ /docker/
script: ruby ./source/ruby_hello.rb
- stage: "IFS with envs - next - never run"
name: "IFS with envs - next - never run stage"
if: branch = not-existant-branch
script: ruby ./source/ruby_hello.rb
travis-ci/travis-tests:ifs-with-envs.yml@72dd813
# testing conditionals - travis-yml and later scheduler involved
# ==
# testing conditional actions dependent on environmental variable definition for the build job
# testing on specific branch + job stages thrown in
env:
- MY_ENV=myenv
- ANOTHER_ENV=another_env
jobs:
include:
- stage: "IFS with envs - first"
name: "IFS with envs - first stage"
if: branch = integration-regresion-tests
script: ruby ./source/ruby_hello.rb
- stage: "IFS with envs - two"
name: "IFS with envs - second stage"
env: MY_ENV=myenv
script: ruby ./source/ruby_hello.rb
- stage: "IFS with envs - third - never run"
name: "IFS with envs - third - never run stage"
env: MISSING_ENV=missing_env
script: ruby ./source/ruby_hello.rb
travis-ci/travis-tests:secure.yml@72dd813
# using encrypted variables: https://docs.travis-ci.com/user/encryption-keys/
# one must first create encrypted variables using travis-cli
# to run this job properly, one may need to fork the repository or be a collaborator
jobs:
include:
- stage: "Secure stage I"
name: "Secure stage I"
script: echo $MANA_MANA
travis-ci/travis-tests:sleep.yml@72dd813
# testing mechanisms for autocancelling the jobs (travis-hub + worker involved)
jobs:
include:
# a job that does not puts out enything to cli (job log) for first 10 minutes - we expect autocancel on that job to happen
- stage: "Sleep First"
name: "Sleep First stage"
script: ruby ./source/over_ten_minutes.rb
# a job that runs for more than 50 minutes (an output to cli (job log) must be done with intervals < 10 mins) - we expect autocancel at around 50 minutes mark here
- stage: "Sleep Second"
name: "Sleep Second stage"
script: ruby ./source/over_fifty_minutes.rb
travis-ci/travis-tests:vault.yml@72dd813
jobs:
include:
- stage: "Vault Tests"
name: "jobs includes - two keys should be parsed successfully by user program but not echoed by system call from within program"
vault:
api_url: https://vault-dwztla.travis-ci.com
token:
secure: "oXr3NviX2fhOyMiG0hNfIGU27+/c1O55UsONFLidvnCQImbLi3yO5Mw7Nu/zOIt2c63oatc1Z2oEgG3Xm7Oa5uX2QEXBdkCsVEQ14g+2szjUR+I4Pms0QMiUWSbsQy8uQsaZXw4+riElkk/n/kDZRmBxZhrvRhy3gJeFOelRHRRannkbP3JDDfkgizFqylSzlhJwNuQcuoS0XCa7OqsAi56E7EvKElUQ458MOm6CtjELp3QsYhkS6aB4eoSnVpJEbc2ia2nNThORFQKm0fsZXouvS3s0H0WC7C27NhdSTGQho6n/HgfePbKhF3KOFKzb6w844SJ6RHMxWMwsdZrVvByWQPUBtAvQHrUOh93chWG0YuA/TCdF7JpDXldnlAOqjBPHrxmEsMXHkJDA/2bmF4q3ky8dJBorfInI/9Fpm5EH7hyAFqoBmSkKCPZRj7OIm6WeB5euTKMmsSWpGzIXj0OlIF5XDoCE+5L2fGL155uYpT/2p7SFVTObo1oN2GL8RK1SjtldzAyn1EQrPDb0CNeYN9qOrgKxaz+rEglvOoY7NP8e84kXsQsZfpzr/1M5IW0c6t0YtTjRtlqo24VK+oyKRdXEZ38cdlu8w/kzWHFv8P/wFFJgCbfGxROpjh4J3OcUUaAaZkuqD9Y7WdyoU2Ofu3d8byUPxRkElWHD6BI="
secrets:
- namespace:
- name: ns1
- project_id/secret_key_a
- project_id/not_existent
- ns2/project_id/secret_key_b
- ns2/project_id/not_existent
script:
- ruby ./source/vault_check.rb
- stage: "Vault Tests"
name: "jobs includes - two keys should be not explicitly echoed"
vault:
api_url: https://vault-dwztla.travis-ci.com
token:
secure: "oXr3NviX2fhOyMiG0hNfIGU27+/c1O55UsONFLidvnCQImbLi3yO5Mw7Nu/zOIt2c63oatc1Z2oEgG3Xm7Oa5uX2QEXBdkCsVEQ14g+2szjUR+I4Pms0QMiUWSbsQy8uQsaZXw4+riElkk/n/kDZRmBxZhrvRhy3gJeFOelRHRRannkbP3JDDfkgizFqylSzlhJwNuQcuoS0XCa7OqsAi56E7EvKElUQ458MOm6CtjELp3QsYhkS6aB4eoSnVpJEbc2ia2nNThORFQKm0fsZXouvS3s0H0WC7C27NhdSTGQho6n/HgfePbKhF3KOFKzb6w844SJ6RHMxWMwsdZrVvByWQPUBtAvQHrUOh93chWG0YuA/TCdF7JpDXldnlAOqjBPHrxmEsMXHkJDA/2bmF4q3ky8dJBorfInI/9Fpm5EH7hyAFqoBmSkKCPZRj7OIm6WeB5euTKMmsSWpGzIXj0OlIF5XDoCE+5L2fGL155uYpT/2p7SFVTObo1oN2GL8RK1SjtldzAyn1EQrPDb0CNeYN9qOrgKxaz+rEglvOoY7NP8e84kXsQsZfpzr/1M5IW0c6t0YtTjRtlqo24VK+oyKRdXEZ38cdlu8w/kzWHFv8P/wFFJgCbfGxROpjh4J3OcUUaAaZkuqD9Y7WdyoU2Ofu3d8byUPxRkElWHD6BI="
secrets:
- namespace:
- name: ns1
- project_id/secret_key_a
- project_id/not_existent
- ns2/project_id/secret_key_b
- ns2/project_id/not_existent
script:
- echo "Explicit echo check:"
- echo $SECRET_KEY_A_MESSAGE
- echo $SECRET_KEY_B_CLIMATE
- echo "$SECRET_KEY_A_MESSAGE"
- echo "$SECRET_KEY_B_CLIMATE"
- stage: "Vault Tests"
name: "jobs includes - Plain text token -> can't connect to the vault as token is wiped out as Travis parsing error does the job"
vault:
api_url: https://vault-dwztla.travis-ci.com
token: hvs.R8aPmQyWng9ak52n8lwILf2F
secrets:
- namespace:
- name: ns1
- project_id/secret_key_a
- project_id/not_existent
- ns2/project_id/secret_key_b
- ns2/project_id/not_existent
script:
- ruby ./source/vault_check.rb
- echo "Explicit echo check:"
- echo $SECRET_KEY_A_MESSAGE
- echo $SECRET_KEY_B_CLIMATE
- echo "$SECRET_KEY_A_MESSAGE"
- echo "$SECRET_KEY_B_CLIMATE"
- stage: "Vault Tests"
name: "jobs includes - Plain text token w/o quotes -> can't connect to the vault as token is wiped out as Travis parsing error does the job"
vault:
api_url: https://vault-dwztla.travis-ci.com
token: hvs.R8aPmQyWng9ak52n8lwILf2F
secrets:
- namespace:
- name: ns1
- project_id/secret_key_a
- project_id/not_existent
- ns2/project_id/secret_key_b
- ns2/project_id/not_existent
script:
- ruby ./source/vault_check.rb
- echo "Explicit echo check:"
- echo $SECRET_KEY_A_MESSAGE
- echo $SECRET_KEY_B_CLIMATE
- echo "$SECRET_KEY_A_MESSAGE"
- echo "$SECRET_KEY_B_CLIMATE"
- stage: "Vault Tests"
name: "jobs includes - No secrets defined to download - there is no connection to the vault at all." # since nothing to obtain (no secrets defined), the connection is not executed and not visible in build job logs
vault:
api_url: https://vault-dwztla.travis-ci.com
token:
secure: "oXr3NviX2fhOyMiG0hNfIGU27+/c1O55UsONFLidvnCQImbLi3yO5Mw7Nu/zOIt2c63oatc1Z2oEgG3Xm7Oa5uX2QEXBdkCsVEQ14g+2szjUR+I4Pms0QMiUWSbsQy8uQsaZXw4+riElkk/n/kDZRmBxZhrvRhy3gJeFOelRHRRannkbP3JDDfkgizFqylSzlhJwNuQcuoS0XCa7OqsAi56E7EvKElUQ458MOm6CtjELp3QsYhkS6aB4eoSnVpJEbc2ia2nNThORFQKm0fsZXouvS3s0H0WC7C27NhdSTGQho6n/HgfePbKhF3KOFKzb6w844SJ6RHMxWMwsdZrVvByWQPUBtAvQHrUOh93chWG0YuA/TCdF7JpDXldnlAOqjBPHrxmEsMXHkJDA/2bmF4q3ky8dJBorfInI/9Fpm5EH7hyAFqoBmSkKCPZRj7OIm6WeB5euTKMmsSWpGzIXj0OlIF5XDoCE+5L2fGL155uYpT/2p7SFVTObo1oN2GL8RK1SjtldzAyn1EQrPDb0CNeYN9qOrgKxaz+rEglvOoY7NP8e84kXsQsZfpzr/1M5IW0c6t0YtTjRtlqo24VK+oyKRdXEZ38cdlu8w/kzWHFv8P/wFFJgCbfGxROpjh4J3OcUUaAaZkuqD9Y7WdyoU2Ofu3d8byUPxRkElWHD6BI="
secrets:
- kv_api_ver: kv2
script:
- ruby ./source/vault_check.rb
- echo "Explicit echo check:"
- echo $SECRET_KEY_A_MESSAGE
- echo $SECRET_KEY_B_CLIMATE
- echo "$SECRET_KEY_A_MESSAGE"
- echo "$SECRET_KEY_B_CLIMATE"
Build Config
{
"language": "ruby",
"os": [
"linux"
],
"dist": "focal",
"branches": {
"only": [
"main",
"integration-regresion-tests",
"prd-hashicorp-vault",
"prd-hashicorp-vault-dev"
]
},
"rvm": [
"2.7.1"
],
"jobs": {
"allow_failures": [
{
"os": "linux",
"dist": "focal",
"language": "ruby",
"rvm": "2.7.1"
}
],
"include": [
{
"vault": {
"api_url": "https://vault-dwztla.travis-ci.com",
"token": {
"secure": "oXr3NviX2fhOyMiG0hNfIGU27+/c1O55UsONFLidvnCQImbLi3yO5Mw7Nu/zOIt2c63oatc1Z2oEgG3Xm7Oa5uX2QEXBdkCsVEQ14g+2szjUR+I4Pms0QMiUWSbsQy8uQsaZXw4+riElkk/n/kDZRmBxZhrvRhy3gJeFOelRHRRannkbP3JDDfkgizFqylSzlhJwNuQcuoS0XCa7OqsAi56E7EvKElUQ458MOm6CtjELp3QsYhkS6aB4eoSnVpJEbc2ia2nNThORFQKm0fsZXouvS3s0H0WC7C27NhdSTGQho6n/HgfePbKhF3KOFKzb6w844SJ6RHMxWMwsdZrVvByWQPUBtAvQHrUOh93chWG0YuA/TCdF7JpDXldnlAOqjBPHrxmEsMXHkJDA/2bmF4q3ky8dJBorfInI/9Fpm5EH7hyAFqoBmSkKCPZRj7OIm6WeB5euTKMmsSWpGzIXj0OlIF5XDoCE+5L2fGL155uYpT/2p7SFVTObo1oN2GL8RK1SjtldzAyn1EQrPDb0CNeYN9qOrgKxaz+rEglvOoY7NP8e84kXsQsZfpzr/1M5IW0c6t0YtTjRtlqo24VK+oyKRdXEZ38cdlu8w/kzWHFv8P/wFFJgCbfGxROpjh4J3OcUUaAaZkuqD9Y7WdyoU2Ofu3d8byUPxRkElWHD6BI="
},
"secrets": [
{
"namespace": [
{
"name": "ns1"
},
"project_id/secret_key_a",
"project_id/not_existent"
]
},
"ns2/project_id/secret_key_b",
"ns2/project_id/not_existent"
]
},
"stage": "Vault Tests",
"name": "jobs includes - two keys should be parsed successfully by user program but not echoed by system call from within program",
"script": [
"ruby ./source/vault_check.rb"
]
},
{
"vault": {
"api_url": "https://vault-dwztla.travis-ci.com",
"token": {
"secure": "oXr3NviX2fhOyMiG0hNfIGU27+/c1O55UsONFLidvnCQImbLi3yO5Mw7Nu/zOIt2c63oatc1Z2oEgG3Xm7Oa5uX2QEXBdkCsVEQ14g+2szjUR+I4Pms0QMiUWSbsQy8uQsaZXw4+riElkk/n/kDZRmBxZhrvRhy3gJeFOelRHRRannkbP3JDDfkgizFqylSzlhJwNuQcuoS0XCa7OqsAi56E7EvKElUQ458MOm6CtjELp3QsYhkS6aB4eoSnVpJEbc2ia2nNThORFQKm0fsZXouvS3s0H0WC7C27NhdSTGQho6n/HgfePbKhF3KOFKzb6w844SJ6RHMxWMwsdZrVvByWQPUBtAvQHrUOh93chWG0YuA/TCdF7JpDXldnlAOqjBPHrxmEsMXHkJDA/2bmF4q3ky8dJBorfInI/9Fpm5EH7hyAFqoBmSkKCPZRj7OIm6WeB5euTKMmsSWpGzIXj0OlIF5XDoCE+5L2fGL155uYpT/2p7SFVTObo1oN2GL8RK1SjtldzAyn1EQrPDb0CNeYN9qOrgKxaz+rEglvOoY7NP8e84kXsQsZfpzr/1M5IW0c6t0YtTjRtlqo24VK+oyKRdXEZ38cdlu8w/kzWHFv8P/wFFJgCbfGxROpjh4J3OcUUaAaZkuqD9Y7WdyoU2Ofu3d8byUPxRkElWHD6BI="
},
"secrets": [
{
"namespace": [
{
"name": "ns1"
},
"project_id/secret_key_a",
"project_id/not_existent"
]
},
"ns2/project_id/secret_key_b",
"ns2/project_id/not_existent"
]
},
"stage": "Vault Tests",
"name": "jobs includes - two keys should be not explicitly echoed",
"script": [
"echo \"Explicit echo check:\"",
"echo $SECRET_KEY_A_MESSAGE",
"echo $SECRET_KEY_B_CLIMATE",
"echo \"$SECRET_KEY_A_MESSAGE\"",
"echo \"$SECRET_KEY_B_CLIMATE\""
]
},
{
"vault": {
"api_url": "https://vault-dwztla.travis-ci.com",
"token": "hvs.R8aPmQyWng9ak52n8lwILf2F",
"secrets": [
{
"namespace": [
{
"name": "ns1"
},
"project_id/secret_key_a",
"project_id/not_existent"
]
},
"ns2/project_id/secret_key_b",
"ns2/project_id/not_existent"
]
},
"stage": "Vault Tests",
"name": "jobs includes - Plain text token -> can't connect to the vault as token is wiped out as Travis parsing error does the job",
"script": [
"ruby ./source/vault_check.rb",
"echo \"Explicit echo check:\"",
"echo $SECRET_KEY_A_MESSAGE",
"echo $SECRET_KEY_B_CLIMATE",
"echo \"$SECRET_KEY_A_MESSAGE\"",
"echo \"$SECRET_KEY_B_CLIMATE\""
]
},
{
"vault": {
"api_url": "https://vault-dwztla.travis-ci.com",
"token": "hvs.R8aPmQyWng9ak52n8lwILf2F",
"secrets": [
{
"namespace": [
{
"name": "ns1"
},
"project_id/secret_key_a",
"project_id/not_existent"
]
},
"ns2/project_id/secret_key_b",
"ns2/project_id/not_existent"
]
},
"stage": "Vault Tests",
"name": "jobs includes - Plain text token w/o quotes -> can't connect to the vault as token is wiped out as Travis parsing error does the job",
"script": [
"ruby ./source/vault_check.rb",
"echo \"Explicit echo check:\"",
"echo $SECRET_KEY_A_MESSAGE",
"echo $SECRET_KEY_B_CLIMATE",
"echo \"$SECRET_KEY_A_MESSAGE\"",
"echo \"$SECRET_KEY_B_CLIMATE\""
]
},
{
"vault": {
"api_url": "https://vault-dwztla.travis-ci.com",
"token": {
"secure": "oXr3NviX2fhOyMiG0hNfIGU27+/c1O55UsONFLidvnCQImbLi3yO5Mw7Nu/zOIt2c63oatc1Z2oEgG3Xm7Oa5uX2QEXBdkCsVEQ14g+2szjUR+I4Pms0QMiUWSbsQy8uQsaZXw4+riElkk/n/kDZRmBxZhrvRhy3gJeFOelRHRRannkbP3JDDfkgizFqylSzlhJwNuQcuoS0XCa7OqsAi56E7EvKElUQ458MOm6CtjELp3QsYhkS6aB4eoSnVpJEbc2ia2nNThORFQKm0fsZXouvS3s0H0WC7C27NhdSTGQho6n/HgfePbKhF3KOFKzb6w844SJ6RHMxWMwsdZrVvByWQPUBtAvQHrUOh93chWG0YuA/TCdF7JpDXldnlAOqjBPHrxmEsMXHkJDA/2bmF4q3ky8dJBorfInI/9Fpm5EH7hyAFqoBmSkKCPZRj7OIm6WeB5euTKMmsSWpGzIXj0OlIF5XDoCE+5L2fGL155uYpT/2p7SFVTObo1oN2GL8RK1SjtldzAyn1EQrPDb0CNeYN9qOrgKxaz+rEglvOoY7NP8e84kXsQsZfpzr/1M5IW0c6t0YtTjRtlqo24VK+oyKRdXEZ38cdlu8w/kzWHFv8P/wFFJgCbfGxROpjh4J3OcUUaAaZkuqD9Y7WdyoU2Ofu3d8byUPxRkElWHD6BI="
},
"secrets": [
{
"kv_api_ver": "kv2"
}
]
},
"stage": "Vault Tests",
"name": "jobs includes - No secrets defined to download - there is no connection to the vault at all.",
"script": [
"ruby ./source/vault_check.rb",
"echo \"Explicit echo check:\"",
"echo $SECRET_KEY_A_MESSAGE",
"echo $SECRET_KEY_B_CLIMATE",
"echo \"$SECRET_KEY_A_MESSAGE\"",
"echo \"$SECRET_KEY_B_CLIMATE\""
]
},
{
"stage": "Sleep First",
"name": "Sleep First stage",
"script": [
"ruby ./source/over_ten_minutes.rb"
]
},
{
"stage": "Sleep Second",
"name": "Sleep Second stage",
"script": [
"ruby ./source/over_fifty_minutes.rb"
]
},
{
"stage": "Secure stage I",
"name": "Secure stage I",
"script": [
"echo $MANA_MANA"
]
},
{
"stage": "IFS with envs - first",
"name": "IFS with envs - first stage",
"if": "branch = integration-regresion-tests",
"script": [
"ruby ./source/ruby_hello.rb"
]
},
{
"stage": "IFS with envs - two",
"name": "IFS with envs - second stage",
"env": [
{
"MY_ENV": "myenv"
}
],
"script": [
"ruby ./source/ruby_hello.rb"
]
},
{
"stage": "IFS with envs - third - never run",
"name": "IFS with envs - third - never run stage",
"env": [
{
"MISSING_ENV": "missing_env"
}
],
"script": [
"ruby ./source/ruby_hello.rb"
]
},
{
"stage": "IFS - first",
"name": "IFS - first stage",
"if": "branch = integration-regresion-tests",
"script": [
"ruby ./source/ruby_hello.rb"
]
},
{
"stage": "IFS - on commit",
"name": "IFS - on commit stage",
"if": "commit_message =~ /docker/",
"script": [
"ruby ./source/ruby_hello.rb"
]
},
{
"stage": "IFS with envs - next - never run",
"name": "IFS with envs - next - never run stage",
"if": "branch = not-existant-branch",
"script": [
"ruby ./source/ruby_hello.rb"
]
},
{
"stage": "First",
"name": "First stage",
"script": [
"ruby ./source/ruby_hello.rb"
]
},
{
"stage": "Second",
"name": "Second stage",
"script": [
"ruby ./source/fail.rb"
]
},
{
"stage": "Next",
"name": "Next stage",
"script": [
"ruby ./source/fine.rb"
]
}
]
},
"env": {
"global": [
{
"secure": "V1Cu4sjO3e9aNgPLsvHbzSh+eTlzvIT1VT4piUz3nvy+Po37/hRuZbdBez6ntSsr5fVHDgJr7OLfjMX1FBgnyK3r/N0eOSHqPVdJcW14TDJmrWmOkwj2mEksxY1CYIVzazltjqb85YCgWRERpJqGksc0xfMLI5dIP1Xy3+BiiMhiHGt+O915BSeRqLTrp/SUD6GKPshhc29xkku4rc47SlWEtjShGxg9eqvsQlKiIrFN/o4oNXfKAGZCY80QrZLHRSI+wY0IjmD2YSBKH/+aPginBmA4WHGg0FZ2cKHtDJitvy/BY7AeE634/i5pwxvKvR5vPGcSxW/67aX53vtmyjinRraUhx1E4SxGnOojHDpY7gK35ReNE+yQlpbPwhea7Hb9pVgYuCnL3O6yE7PIMI+AFnLKN7V4iA93vfzduzpAZO91eDQYnZJMQCLmGK0kSWosiYtmKE5eOh8Vq6Fcg7twO1YRO0Mcq+IrCPstSXS6wbrFAP1X3QCJ5SVC8bD2RSLJvtakPxDod3x43shrCkWABduGuB9GFlG22CH4QyRg20hihqyLD0qMrZNPoctyQ0LYHI4rmyCcjvQhxeNgWJ1OvAGVhrHN+heOqPRJOZVgX+L7FME/aQoGfcbbuDF9Kh+wXaTyKxSTwaGBG0zYgiOVVH5jQAvWOdRGNIyVx+A="
}
]
}
}