Compare commits

..

12 Commits

Author SHA1 Message Date
Lee Watson 7c38d0b9cc clarify instructions for groups 10 months ago
LeeW f9bc07a06c fix grammar-typo 10 months ago
Lee Watson 11cd5ebad1 fix indentation 10 months ago
LeeW baf73be4eb applies results from UAT with Bas 10 months ago
LeeW dccd8b511f applies results from UAT with Bas 10 months ago
LeeW 1f4475bbc7 applies results from UAT with Bas 10 months ago
Lee Watson e612c5a944 Update README.md 10 months ago
Lee Watson 68b666ce04 Apply 2 suggestion(s) to 1 file(s) 10 months ago
Lee Watson a8a8cc8b0f Apply 1 suggestion(s) to 1 file(s) 10 months ago
Lee Watson 4957442abd notes from Bas 10 months ago
Lee Watson efda2d3fed Update README.md 10 months ago
Lee Watson fa2539ebf1 Update file README.md 10 months ago

@ -5,28 +5,11 @@ Purpose: Manage gpg keys for:
# Key Management # Key Management
* Role: New User: new key to be added; can be a new employee being added for first time, existing employee getting access to a new repo, key rotation, etc Roles:
* Role: Existing User: user who already has access to the appropriate project
* Definition: List of all users: [verify/.sops.yaml](verify/.sops.yaml)
* Keys Repository: This Git Repository (`communication-keys`), manages public keys and configuration in Project Repositories
* Project Repository: Git Repository for each Project which contains SOPS-Encrypted secrets, e.g. for GitOps Deployments using Helm Files
# Playbook for Configuring Access for New Users
## Overview:
1. In the Keys Repo (`communication-keys`): * New User: new key to be added; can be a new employee being added for first time, existing employee getting access to a new repo, key rotation, etc
1. New User creates,adds GPG Key * Existing User: user who already has access to the appropriate project
1. Existing User configures groups * Definition: List of all users: [verify/.sops.yaml](verify/.sops.yaml)
1. Existing User configures verification SOPS Config
1. New User installs SOPS
1. New User verifies SOPS installation using verification SOPS Config
1. **Status**: New User has working key, working sops installation. Caveat: No access to secrets in other repos yet
1. In the Project Repo
1. Existing User adds New User Key to SOPS Config, Secrets Files
1. New User verifies access
1. **Status**: New User has access to SOPS-encrypted secrets within Project Repo
## 1a. Onboarding: [New User]: create and add a gpg key ## 1a. Onboarding: [New User]: create and add a gpg key
1. Clone this repository 1. Clone this repository
@ -37,28 +20,40 @@ Purpose: Manage gpg keys for:
- CAVEAT: step 14 is not necessary, as it is specific to a GitHub account - CAVEAT: step 14 is not necessary, as it is specific to a GitHub account
1. add ONLY the _PUBLIC_ part of your gpg key!!! to your branch 1. add ONLY the _PUBLIC_ part of your gpg key!!! to your branch
- file format: `<email>@netgo.de.gpg.pub` - file format: `<email>@netgo.de.gpg.pub`
- **Example**: `max.musterman@netgo.de.gpg.pub`
1. git: commit the new file, push 1. git: commit the new file, push
1. gitlab: open a MergeRequest 1. open a MergeRequest
1. **Hand-Off**: Assign the MR to an Existing User in your Team to have your key added. 1. Hand-Off: Assign the MR to an Existing User in your Team to have your key added.
- Hint: Look up all Existing Users in the comments at: [verify/.sops.yaml](verify/.sops.yaml) - Hint: Look up all Existing Users in the comments at: [verify/.sops.yaml](verify/.sops.yaml)
## 1b. Onboarding: [Existing User|New User]: Add new user to groups ## 1b. Onboarding: [Existing User|New User]: Add new user to groups
**Prerequisite**: Determine the groups to which access is needed, e.g. a specific repository. If uncertain, ask a Team Member for help! Determine the groups to which access is needed, e.g. a specific repository.
If uncertain, ask a Team Member for help!
Technical Instructions - please forgive the complexity
Access for each repo is tracked using the `./groups/` directory; each sub-directory represents a "group" (Note: some "groups" are also "roles", e.g. `admin`)
**Technical Instructions** - please forgive the complexity Most of the groups correspond directly to git repository names, aka "project name"
Create a symlink from the group-directory back to the keyfile Create a symlink from the group-directory back to the keyfile
```shell
cd groups/<project_name>
ln -s ../../<path_to_key.gpg.pub>
```
1. `cd groups/<project_name>` Example:
- **Example**: `cd groups/devnso-adp-argocd`
- Explanation: Access for each repo is tracked using the `./groups/` directory; each sub-directory represents a "group" (Note: some "groups" are also "roles", e.g. `admin`)
- Explanation: Most of the groups correspond directly to git repository names, aka "project name"
1. `ln -s ../../<path_to_key.gpg.pub>`
- **Example**: `ln -s ../../max.musterman@netgo.de.gpg.pub`
## 2. Onboarding: [Existing User]: Configure sops config Add "Max Musterman" to the group for `devnso-adp-argocd`:
```shell
# navigate to group-directory for devnos
cd groups/devnso-adp-argocd
# symlink to pubkey for New User
ln -s ../../max.musterman@netgo.de.gpg.pub
```
## 3. Onboarding: [Existing User]: Configure sops config
Context: This repo stores the keys used to encrypt secrets in other repos; these "consumer" repos each contain a sops config `.sops.yaml` which manages access to the encrypted files (e.g. `secrets.yaml`) Context: This repo stores the keys used to encrypt secrets in other repos; these "consumer" repos each contain a sops config `.sops.yaml` which manages access to the encrypted files (e.g. `secrets.yaml`)
@ -66,116 +61,60 @@ For verification purposes, this repo also contains a _sample_ `.sops.yaml` to wh
### Update Verification SOPS Config ### Update Verification SOPS Config
1. Checkout the New User's branch titled `add_pubkey_[firstname]-[lastname]`. Follow the interactive prompts:
- CLI: e.g. `git branch add_pubkey_Max-Musterman` ```shell
1. Run `./verify/usr_confirm_keycfg.sh` ./verify/usr_confirm_keycfg.sh
1. git: commit the new file, push ```
1. **Status**: New User has working SOPS Configuration
1. **Hand-Off**: Proceed to next steps; Instruct New User to verify access to secrets
### Update Project SOPS Config ### Update Project SOPS Config
The following commands explain how to update the `.sops.yaml` for a repository. The following commands explain how to update the `.sops.yaml` for a repository:
Note: For a worked-through example, see next section. #### Prerequisite
1. **Prerequisite**
1. Obtain Project Repo
- CLI:: `git clone <repo_url>`
1. **Create Branch**
- CLI: `git checkout -b add_pubkey_[firstname]-[lastname] origin/main`
1. **Configure Project Repo for New User**
1. List available groups:
- CLI: `${PATH_TO_COMMUNICATION_KEYS_REPO}/bin/update_sops.sh --list_groups`
- Reminder: Group Name usually corresponds to Repository Name
1. Update sops config AND all secrets files:
- CLI: `${PATH_TO_COMMUNICATION_KEYS_REPO}/bin/update_sops.sh --group <group_name> --find_secrets
1. **Commit the changes, Create Change Request (PR/MR)**
1. git: commit the changes to `.sops.yaml` and secrets files (`secrets.yaml`) files
- CLI: `git add .sops.yaml $(find . -name secrets.yaml)`
- **CAVEAT**: check for other changes with `git status` ! The files do not always follow consistent conventions.
- CLI: `git commit -m "adds <firstname>.<lastname> to sops config"`
1. git: push branch
- CLI: `git push -u origin add_pubkey_[firstname]-[lastname]`
1. gitlab: open a MergeRequest, Review, Merge
1. **Status**: New User has access to SOPS-Encrypted Secrets within Project Repo
1. **Hand-Off**: Proceed to next steps; Instruct New User to verify access to secrets
#### Example
**Prerequisite**
Obtain Repo
```shell ```shell
# E.g. update sops config for DevNSO # E.g. update sops config for DevNSO
% git clone git@git.dev-at.de:cloud-solutions/nso/devnso-adp-argocd.git % git clone git@git.dev-at.de:cloud-solutions/nso/devnso-adp-argocd.git
% cd devnso-adp-argocd/ % cd devnso-adp-argocd/
``` ```
**Create Branch**
```shell
## OPINIONATED GIT - use preferred method
git checkout -b add_pubkey_max-musterman origin/main
```
**Configure Project Repo for New User** #### Commands
<!-- TODO: auto-determine group with git remote show origin -->
<!-- TODO: auto-determine secrets files by integrating the 'find . -name secrets.yaml' in the script -->
```shell ```shell
# List available groups # List available groups
# Output: % ${PATH_TO_THIS_REPO}/bin/update_sops.sh --list_groups
% ${PATH_TO_COMMUNICATION_KEYS_REPO}/bin/update_sops.sh --list_groups
# INFO: listing groups # INFO: listing groups
admin admin
automation automation
devnso-adp-argocd devnso-adp-argocd
# For a given group, update sops config AND all secrets files - New Users cannot add themselves! # For a given group, update sops config
# Output: % ${PATH_TO_THIS_REPO}/bin/update_sops.sh -g devnso-adp-argocd
% ${PATH_TO_COMMUNICATION_KEYS_REPO}/bin/update_sops.sh --group devnso-adp-argocd --find_secrets
# RUN: generate SOPS config # RUN: generate SOPS config
# RUN: gpg --import *.gpg.pub # WARN: no secrets file passed in, make sure to call 'sops updatekeys' on secrets files
# RUN: sops updatekeys ./loki/loki/secrets.yaml
...
# SUCCESS: all users with keys in this dir should have functional keys
```
**Commit the changes, Create Change Request (PR/MR)**
```shell
# git: commit the changes to `.sops.yaml` and secrets files (`secrets.yaml`) files
% git add .sops.yaml $(find . -name secrets.yaml)
# **CAVEAT**: check for other changes with `git status` ! The files do not always follow consistent conventions.
# output:
% git status
...
no changes added to commit (use "git add" and/or "git commit -a")
% git commit -m "adds max.musterman to sops config" # [OPTIONAL] For a given group, update sops config AND specified secrets file
% ${PATH_TO_THIS_REPO}/bin/update_sops.sh -g devnso-adp-argocd -s ./adp-api-devs/adp-api-devs/secrets.yaml
git push -u origin add_pubkey_max-musterman # commit the changes to any .sops.yaml or secrets files, e.g. with
## OPINIONATED GIT - use preferred method
% git add -p
% git commit -m "adds <firstname>.<lastname> to sops config"
% git push
``` ```
Now proceed to with the remaining steps, i.e. gitlab: open a MergeRequest, Review, Merge At this point, the New User has been configured and can grant themselves access to any of the secrets files in this project.
## 3. Onboarding: [New User] Configure SOPS ## 4. Onboarding: [New User] Configure SOPS
SOPS is used for encrypting secrets, e.g. credentials for various systems SOPS is used for encrypting secrets, e.g. credentials for various systems
## Install ## Install
1. **Install Sops** https://github.com/getsops/sops
1. https://github.com/getsops/sops
- Note: Note:
* MacOS: If desired, one can also use brew to install sops: `brew install sops`; although this is not officially maintained, [the formula is essentially the same as the official installation instructions](https://github.com/Homebrew/homebrew-core/blob/4496ce5131bc09e7065fa0aa8fb96366a3df6477/Formula/s/sops.rb) * MacOS: If desired, one can also use brew to install sops: `brew install sops`; although this is not officially maintained, [the formula is essentially the same as the official installation instructions](https://github.com/Homebrew/homebrew-core/blob/4496ce5131bc09e7065fa0aa8fb96366a3df6477/Formula/s/sops.rb)
1. **Configure Sops**
* Add the following to your `~/.bashrc` or `~/.zshrc` - but _not_ to your `~/.profile` as it must be set per session:
```shell
# Enable interactive passphrase prompt for SOPS
export GPG_TTY=$(tty)
```
1. **Verify SOPS Installation and Key Configuration**
1. `./verify/usr_confirm_keycfg.sh`
## Usage ## Usage
@ -184,15 +123,12 @@ Decrypt and Display Secrets in Terminal:
```bash ```bash
GPG_TTY=$(tty) sops secrets.yaml GPG_TTY=$(tty) sops secrets.yaml
``` ```
<!-- CAVEAT: if GPG_TTY is set in environment, no need to specify it again. Leaving it inline for this command to be explicit about requirement for correct functiuonality -->
Note: The `GPG_TTY` is necessary to have the password prompt appear. src: https://www.varokas.com/secrets-in-code-with-mozilla-sops/ Note: The `GPG_TTY` is necessary to have the password prompt appear. src: https://www.varokas.com/secrets-in-code-with-mozilla-sops/
Note: `secrets.yaml` is just an example; the file can have any name Note: `secrets.yaml` is just an example; the file can have any name
# Playbook for Removing Expired Keys ## 5. Offboarding: [Existing User]: Archive Expired Keys (EOL)
## Offboarding: [Existing User]: Archive Expired Keys (EOL)
To mark a key as expired: To mark a key as expired:
1. move it to the `archive/` dir 1. move it to the `archive/` dir
@ -218,7 +154,7 @@ find groups/ -name ${keyname}
# For each group, update sops config in that repo # For each group, update sops config in that repo
# Example: # Example:
% cd devnso-adp-argocd % cd devnso-adp-argocd
% ${PATH_TO_COMMUNICATION_KEYS_REPO}/bin/update_sops.sh --group devnso-adp-argocd --find_secrets % ${PATH_TO_THIS_REPO}/bin/update_sops.sh -g devnso-adp-argocd
# now git commit, push, etc # now git commit, push, etc
``` ```

@ -1,42 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
tPQpHpp5OcriKFWxiZSM41Wm5yHn5Yc=
=BUTZ
-----END PGP PUBLIC KEY BLOCK-----

@ -1,13 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEaD2xXRYJKwYBBAHaRw8BAQdAKL1LP1gP7t3R41tNdVH5cUu7OksuY7FDwoq0
EX/IznG0KkR1c3RpbiBCbGVzY2hrZSA8ZHVzdGluLmJsZXNjaGtlQG5ldGdvLmRl
PoiTBBMWCgA7FiEEjWAJEv1C71NS043SL9cfRX73u4sFAmg9sV0CGwMFCwkIBwIC
IgIGFQoJCAsCBBYCAwECHgcCF4AACgkQL9cfRX73u4trEAD/Z/e5IU9+PyU0oSFT
tu9i2t2muFwrNdxsrkgATNJoJqEBAPGRo5apeOwH/8rqfOnK89AMUPPD9DS5Giqg
RPOT4/UOuDgEaD2xXRIKKwYBBAGXVQEFAQEHQKI0sArCldO4QoHZZNUDpk2e92WC
aJSpEpqaQ1ODqGVwAwEIB4h4BBgWCgAgFiEEjWAJEv1C71NS043SL9cfRX73u4sF
Amg9sV0CGwwACgkQL9cfRX73u4tnzQEA5+wX3G6uInM8rkMCGxaZ4/0gV30Kc2ye
1YqWNjZBgKUBAKLeSWj7VzdV/nZ/rgmrZx44pQxbsv5IYaZbYKxanuwD
=vPAd
-----END PGP PUBLIC KEY BLOCK-----

@ -1,13 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZ8csoBYJKwYBBAHaRw8BAQdA4XDYoQCpDYRQVMdhXWaQ8R+DJWfDUZKLGp0L
CDKQkLG0JkJhcyBDYW5jcmludXMgPGJhcy5jYW5jcmludXNAbmV0Z28uZGU+iJME
ExYKADsWIQSfU0FojS+QJKFVQcngKUnQ93aeLAUCZ8csoAIbAwULCQgHAgIiAgYV
CgkICwIEFgIDAQIeBwIXgAAKCRDgKUnQ93aeLCLFAP0XM8gj8Dj6/j+CudjOemlZ
YtMeWKgzoQavq5MjvqpC5gD/SfhHrENFxqIauGyLhX3YOlYTu77nFjFD9Ue4eiXe
gAi4OARnxyygEgorBgEEAZdVAQUBAQdANCBJmJchzCLLpCje17NJp4xn5gKXMLQ5
eEonhmkAdUMDAQgHiHgEGBYKACAWIQSfU0FojS+QJKFVQcngKUnQ93aeLAUCZ8cs
oAIbDAAKCRDgKUnQ93aeLC07AP4jKmcbtyZGhV2efFbmempjylr231bG/3s5xust
+csUTwEAwu1QQPRX/OYpecVo0xIDiynnk4jeJDsRyOuFMkYpTw0=
=t/YD
-----END PGP PUBLIC KEY BLOCK-----

@ -1,4 +1,4 @@
#!/usr/bin/env bash #/usr/bin/env bash
# Purpose: manage .sops.yaml based on gpg keys in the same dir _and_ verify correct configuration # Purpose: manage .sops.yaml based on gpg keys in the same dir _and_ verify correct configuration
set -euo pipefail set -euo pipefail
@ -10,7 +10,7 @@ function fn_gpg_extract_fpr(){
# uid ... <...@mehrwerk.net> # uid ... <...@mehrwerk.net>
# uid ... <...@netgo.de> # uid ... <...@netgo.de>
# fancy gpg src: https://unix.stackexchange.com/a/731872 # fancy gpg src: https://unix.stackexchange.com/a/731872
fpr="$(gpg --show-keys --list-options show-only-fpr-mbox "$(readlink -f "${gpgkeyfile}")" | grep '@netgo.de' | awk "{print \$1}")" fpr="$(gpg --show-keys --list-options show-only-fpr-mbox "${gpgkeyfile}" | grep '@netgo.de' | awk "{print \$1}")"
echo "${fpr}" echo "${fpr}"
} }
@ -22,7 +22,7 @@ function fn_gpg_extract_uid(){
# uid ... <...@mehrwerk.net> # uid ... <...@mehrwerk.net>
# uid ... <...@netgo.de> # uid ... <...@netgo.de>
# fancy gpg src: https://unix.stackexchange.com/a/731872 # fancy gpg src: https://unix.stackexchange.com/a/731872
uid="$(gpg --show-keys --with-colons "$(readlink -f "${gpgkeyfile}")" | awk -F':' '$1=="uid" {print $10}' | grep '@netgo.de')" uid="$(gpg --show-keys --with-colons "${gpgkeyfile}" | awk -F':' '$1=="uid" {print $10}' | grep '@netgo.de')"
echo "${uid}" echo "${uid}"
} }
@ -113,8 +113,10 @@ fn_sops_updatekeys_and_verify(){
# "update the keys of SOPS files using the config file" # "update the keys of SOPS files using the config file"
>&2 echo "# RUN: sops updatekeys ${sops_enc_file}" >&2 echo "# RUN: sops updatekeys ${sops_enc_file}"
# HAAAACK: loop through all passed-in files, ignore any errors, always say "yes" -> rely on git diff to verify! sops updatekeys "${sops_enc_file}"
sops updatekeys -y "${sops_enc_file}" || echo "SKIPPING"
# verify: dump secrets, GPG_TTY src: https://www.varokas.com/secrets-in-code-with-mozilla-sops/
GPG_TTY=$(tty) sops -d "${sops_enc_file}"
} }
function main(){ function main(){
@ -124,17 +126,18 @@ function main(){
fi fi
# "anchor" for actions relevant to this script # "anchor" for actions relevant to this script
repo_root="$(realpath $(dirname "${BASH_SOURCE[0]}")/..)" repo_root="$(realpath $(dirname "${BASH_SOURCE[0]}")/..)"
# OPTIONS: ARGPARSING and VALIDATION # OPTIONS: ARGPARSING and VALIDATION
# assume location of script as running directly from repo with keys (instead of as a standalone packaged tool) # assume location of script as running directly from repo with keys (instead of as a standalone packaged tool)
keyfiles_dir="${repo_root}" keyfiles_dir="${repo_root}"
# dir containing .sops.yaml # assume location of secrets config file in pwd
sops_config_dir="" sops_config_dir=""
# path to group definitions # path to group definitions
groups_def_dir="${repo_root}/groups" groups_def_dir="${repo_root}/groups"
# optional:
opt_list_groups=0 opt_list_groups=0
# optional: specify "groups"
groups_list=() groups_list=()
opt_find_secrets=0 # optional: secrets files to be updated
secrets_file_list=() secrets_file_list=()
while (( $# >= 1 ));do while (( $# >= 1 ));do
@ -150,8 +153,6 @@ function main(){
-lg|--list_groups) opt_list_groups=1 ;; -lg|--list_groups) opt_list_groups=1 ;;
# ARGS: [optional] [list] specify "groups" which correspond to e.g. job groups, projects, etc # ARGS: [optional] [list] specify "groups" which correspond to e.g. job groups, projects, etc
-g|--group) groups_list+=( "${2}" ); shift ;; -g|--group) groups_list+=( "${2}" ); shift ;;
# ARGS: [optional] update all "secrets.yaml" files found below .sops.yaml location
-f|--find_secrets) opt_find_secrets=1;;
# ARGS: [optional] [list] specify files containing sops-encrypted secrets # ARGS: [optional] [list] specify files containing sops-encrypted secrets
-s|--secrets_file|-f|--file) secrets_file_list+=( "${2}" ); shift ;; -s|--secrets_file|-f|--file) secrets_file_list+=( "${2}" ); shift ;;
# ARGS: [optional] [list] specify files containing sops-encrypted secrets # ARGS: [optional] [list] specify files containing sops-encrypted secrets
@ -185,22 +186,12 @@ function main(){
# locate appropriate sops config if default assumption not found # locate appropriate sops config if default assumption not found
# dev note: '2> /dev/null' to disable debug output # dev note: '2> /dev/null' to disable debug output
sops_config="$(fn_sops_locate_config_in_git_repo 2> /dev/null)" sops_config="$(fn_sops_locate_config_in_git_repo 2> /dev/null)"
sops_config_dir="$(dirname "${sops_config}")"
fi fi
# Paths to Secrets Files
if [[ "${#secrets_file_list[@]}" != "0" ]]; then if [[ "${#secrets_file_list[@]}" != "0" ]]; then
for secrets_file in "${secrets_file_list[@]}"; do for secrets_file in "${secrets_file_list[@]}"; do
test -e "${secrets_file}" || (echo "E: could not locate file with secrets, tried: ${secrets_file}" && exit 1) test -e "${secrets_file}" || (echo "E: could not locate file with secrets, tried: ${secrets_file}" && exit 1)
done done
fi fi
if [[ "${opt_find_secrets}" -eq 1 ]]; then
# DEV NOTE: this is far too complicated
# loop through find, src: https://stackoverflow.com/questions/9612090/how-to-loop-through-file-names-returned-by-find
while IFS= read -r -d $'\0'; do
secrets_file_list+=("${REPLY}")
done < <( find "${sops_config_dir}" -name secrets.yaml -print0 )
fi
# /VALIDATE INPUTS # /VALIDATE INPUTS
# /OPTIONS: ARGPARSING and VALIDATION # /OPTIONS: ARGPARSING and VALIDATION

@ -1,14 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZ9LiixYJKwYBBAHaRw8BAQdAo9TZ7FbNytrM9Odrm1fg4SV3AurPr6B4Z6wT
bYmc0Iu0NUNocmlzdG9zIEFkYWxpcyAoR1BHIEtleXMpIDxjaHJpc3Rvcy5hZGFs
aXNAbmV0Z28uZGU+iJMEExYKADsWIQT38yjw5JWOTHhZd+I7iqC6q62v5AUCZ9Li
iwIbAwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRA7iqC6q62v5JTTAP0R
ME/a4n1TkA7QtUc06KEhdYPld8T3udBusk67jWLGMQEA/niJGzcmoSbNDGvC6hLi
fw9ZlohBFItF8Dur/mLPWgS4OARn0uKLEgorBgEEAZdVAQUBAQdArq2uimWJutt0
DsCEPAwlirHZI476ks1eNr8n3RTzbhEDAQgHiHgEGBYKACAWIQT38yjw5JWOTHhZ
d+I7iqC6q62v5AUCZ9LiiwIbDAAKCRA7iqC6q62v5KgjAP9Q/dfkGy0/9cKJsmPD
emKfbZbQ8FrNX70+oYMGxjV3WwEAyol9yD1pJSt1g3R9/oHo7/KW5ZsXbVIx/Vqc
uskiLgA=
=sg0j
-----END PGP PUBLIC KEY BLOCK-----

@ -1,13 +1,52 @@
-----BEGIN PGP PUBLIC KEY BLOCK----- -----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEaEBF9xYJKwYBBAHaRw8BAQdA6syYUNOSScarxQGom8QcmY/yaK+OWhAQ68IY mQINBGJWv54BEADYY6n9rrteddJ99h3erlB3pgJV+ixR7Qb/sCRFiMGcEV9PLiZr
dj7KxzW0JENsYXVzIFBhZXRvdyA8Y2xhdXMucGFldG93QG5ldGdvLmRlPoiQBBMW 8vkRlrRORaIxFXa/xnYrQ12oPbXjWDajp389W7pRHTgw3gCKRVk8eb1rwT9ZbE/U
CgA4FiEEZZ/e1D3hVft3KjObNDzxIYpmTTEFAmhARfcCGwMFCwkIBwIGFQoJCAsC trAL7ug7C+hPPkqiByHBbJ9mSfU1SrnLCAO8QFP0SXn6BVB6qSpouuorgZKwwjMm
BBYCAwECHgECF4AACgkQNDzxIYpmTTHvVQEAi2IabzcpNK6ZBmsP2NL52oXhY4iM Bef5Qgb9RfcrCoGQV/ks8za/aPUOuqxhyEm6bmys0jy5UhkYEvvT/RIZFD/mpv/P
bzDEtJul0E/hcvEA/3cPIZ9lIB8WeA6SK8nAgV5AlxGXsCdHsv55A2F/vDEIuDgE hSOZNhQ2Job1PQgaIsM5KH7HpxOjZSjaPeA/buhyFTKCkAd474BHUWIAVxD65Kx3
aEBF9xIKKwYBBAGXVQEFAQEHQNGjADOks0AjX4qlQ3xgSOP0RBIELjqYBH/Ihiwf n8pWIgbdd6kPgEOCycVx1SyNfdwz7WRINKZlTc3lJYLFy72xzhs0w4W85ssxB8mQ
eQ9ZAwEIB4h4BBgWCgAgFiEEZZ/e1D3hVft3KjObNDzxIYpmTTEFAmhARfcCGwwA jwjoauMTGV+dqgsnqBIbDpYE16avUvS988vLicXhZb+dz8jmwxqBojwxGi/IvhLv
CgkQNDzxIYpmTTFyOQEArR4vKYPP9cD6Plsn0pK4hONApCEHRKGC0d3JtUkZvJAB 8x+2RD4ZZt3BpEnGI7JRN4FBpAK/kFGWbLKFgJZa+7cGfmC40zfTDqNdegukjtt0
ALaWq4tjsPm4wF6D9RMN9tCuPPVtt/FbGzVBlm3OP2sL puz5X64kJMGQ8ZucmG5x8fgW9qZv7bDZUXVDWIz2QynUxmDuGjzXyTIYlp9DJyQL
=PsTc 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
1vC99G5EtuXL1U37Qp8Kug==
=vm8K
-----END PGP PUBLIC KEY BLOCK----- -----END PGP PUBLIC KEY BLOCK-----

@ -1,51 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=++7P
-----END PGP PUBLIC KEY BLOCK-----

@ -1,14 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZ9Lk+hYJKwYBBAHaRw8BAQdAAImByKSkf+XTHj9o6BareP+aIhkTz1KV+4ZI
AsSgv/u0OURhcnlsIFNhdWVyLU5ldW1hbm4gKFNPUFMpIDxkYXJ5bC5zYXVlci1u
ZXVtYW5uQG5ldGdvLmRlPoiTBBMWCgA7FiEEAUMBn2JGntWmoBbCGcp2TTdZD58F
AmfS5PoCGwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQGcp2TTdZD5/T
6gEAkVq5UnUPs6poLj2Tdqzlj13wToRpP3WFmDaa4mB9uM0A/1Yfde+hFFKIWPFR
hnfXeBH7HLHLC6EC7U58B8P8/aELuDgEZ9Lk+hIKKwYBBAGXVQEFAQEHQJZ2QRYW
XQ6N/wtLePHyafLb+D4wW4Di5SwoO2P/RwVZAwEIB4h4BBgWCgAgFiEEAUMBn2JG
ntWmoBbCGcp2TTdZD58FAmfS5PoCGwwACgkQGcp2TTdZD5939AD/U1HH5hOyo5n7
660ZFL5PoZpm9yxPwAUPa+Mp63QR/IQA/RNlBVGaCRlgWsPa7COo6n7yc0XfB6bi
on9JkIJgK0oB
=PxAk
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1 @@
../../lee.watson@netgo.de.gpg.pub

@ -0,0 +1 @@
../../smardigo_automation_poc_workload01.gpg.pub

@ -0,0 +1 @@
../../smardigo_automation_qa.gpg.pub

@ -0,0 +1 @@
../../smardigo_automation_qanso.gpg.pub

@ -0,0 +1 @@
../../smardigo_automation_rancher_poc.gpg.pub

@ -0,0 +1 @@
../../smardigo_automation_sspdev.gpg.pub

@ -1 +0,0 @@
../../bas.cancrinus@netgo.de.gpg.pub

@ -1 +0,0 @@
../../christos.adalis@netgo.de.gpg.pub

@ -1 +0,0 @@
../../daryl.sauer-neumann@netgo.de.gpg.pub

@ -0,0 +1 @@
../../kevin.bauske@netgo.de.gpg.pub

@ -0,0 +1 @@
../../lee.watson@netgo.de.gpg.pub

@ -1,14 +1,41 @@
-----BEGIN PGP PUBLIC KEY BLOCK----- -----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEaPiOmBYJKwYBBAHaRw8BAQdAgwGFW1hsK88TTcY4Iw8GZSVAknR0iRKnOZL3 mQGNBGUf5j4BDADSd88HFIDGQseOiuJ2TXkqGZE//VDJFcXLQrbwTQaZXSLPkVc9
J+cp2fu0KUphbiBKYW50emVuIChzb3BzKSA8amFuLmphbnR6ZW5AbmV0Z28uZGU+ mZeTKbaEup4H0TYIR6cIUGEuBKRNXvxFJeriurC6jiy/ThNwW2tfRdSGxjyfjRro
iJkEExYKAEEWIQS5LdybkIvzkXdY0ihEbFHgSa44ygUCaPiOmAIbAwUJA8JnAAUL xcUWIogg24dOikoCb7QS3lCt/cAU4qEwmjFKX5Oqjg/ZdN+ODUlxl2pbLeDez93r
CQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRBEbFHgSa44yphwAQDIKCvEYJ2x X/eBEFLFxPIZIRn36GNL1M6b/nSNkhMUfV/Z+O8NUP3NoU/bNsiFyJy07zlPLap6
gd8QClL31SGpD2/5fJ4x/9cXa2pwmcPo4AD/dWYsVwX6iisiE46U2IIsL7ojDa2J xBRyBnn7zCAnuMGtvUcPVr9IpSc1AOHmMVBvhV8UpYhAX3+Mz+0WuaFRABMmkXOm
IYJPrb/HrL8w2Ay4OARo+I6YEgorBgEEAZdVAQUBAQdA9qvcdBmc2TvcReuAu3YA XoO++6jVYwXh6b4ugsF3OtAJ+NYnbF4jWEqiGjVNbGEX1ikRMxlgFwM28VMNXc04
ePpddYljq1L7ihWZDUWrtRMDAQgHiH4EGBYKACYWIQS5LdybkIvzkXdY0ihEbFHg FduQAArBRmsC5IFL6OoO9Ybx6y8eJ7/NVo/3ry6adnCUizzQTwSFn/iguvFs8xKG
Sa44ygUCaPiOmAIbDAUJA8JnAAAKCRBEbFHgSa44yi14AQDPHLsJLjE7csjNPVGi NBYHlKZLAuqvYYJdLE9Jvs8Hy/ERGNwphl741CEcWHWrLVRljIh2b343uAGIRdoT
9XUcfq54ScEc698xyuk8LFMSKAEA0dzeY7tnfGNr7m2jq3odopRmMo99Xaw5h4YA otCGA4wJMK4ePZcAEQEAAbQiSmFuIEphbnR6ZW4gPGphbi5qYW50emVuQG5ldGdv
cQD/yQo= LmRlPokB1wQTAQgAQRYhBLpjKJSNUBdfGWqrURHzJGA9Et1WBQJlH+Y+AhsDBQkD
=rCLM wmcABQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAAAoJEBHzJGA9Et1WL0UL/1si
cI0FMbC+H/zF2WRqNz4LcjV8SG9oTzwdeMV1CWdL1DTkbrWxHlIPVlwYmegAlzo9
9lOJEKcNUwhfyui43cLVBMmL7LULPwCOu2r+DGtQhbqI6tjKz5gNYLiBsc718M8Y
V/V//EcWTtG2uJFQ/Axq79r/HZXZ0/J8P9UXN5aVJXkhhJxZZn8QtcUblnKAyykz
QFac3m0b3SayPRSEVfDszOzrc2bFZiwav6dVBIyBpf9qrCChEAIpzqLzf7pxvWz9
VO7MzQaYYX3g4clkId1sCGPhYQuzdyCSVVyLFeGtFFnk/JeA7Bg3xaKC/aYSpaSZ
qFaXhDv2+pQ9MzYnSZ+i8IhBi7k3lLJbzDWTV0SJLvxoUIpyNL9ezwV7xweWRjQV
9XLCearZPoWxaAOqC8+YOG6FYtIW5pbVQ4j59FZz0UexD+kZHFV5TrZX0EYLkzrh
n/ZXEsMhCtok6eqyNe9DgRYnIH0QMHOSZf807D35R/zUzBwnOOtnmfxRwtksrbkB
jQRlH+Y+AQwArPtb+qWExEMBtUcsfq0P6+BDaJHcdP+PPb3Oa8plmDjRjTf7Exsm
KwQTGRZbYRlNFfh8072TSiu5rhNLyCfY0a79DPk2r1r3i4czx2x+m2m7ao0ZsOzE
tkdejlqxi9TIjWhxdSJHHcizeh1tOJU7TZhG04CW8bRtS02L4hCO7JKq+KTZm4Qk
IE0xaO0qDxnpmosK1jQmiURFHprOl2ozJ9HqeUjfSi93baxcVzrbbBbd+OM7JU4d
+cokhvTQdPPRhaUz5i6wJm2mFkjwr308SgzLsohF7Q0tP+wY7rsSeOscxo8sRuXc
DRpx1aJ6gLZmB2bPjqR0p9kpJy448x4KOBBXkKVFNzvRuG4oZ8SPO1DnP9CroHoO
0l+4NWCrHj7EWaj7mgLyNbJjkKULjwpjTsg3nWJj8QrISQa7ejZxVU96Kyk5WGEK
gvZz3/Eocrn+D2vFd0GOEN1qSxEaBLkynsTLaj4+7cm3V/QUZyrIuUjtYyhL5U/+
HeiZSaM5Mk99ABEBAAGJAbwEGAEIACYWIQS6YyiUjVAXXxlqq1ER8yRgPRLdVgUC
ZR/mPgIbDAUJA8JnAAAKCRAR8yRgPRLdVmnxC/9IntQx0YGcLlIXNEIsTE6Q99Gz
TWuTGq5dZCKxuRoT1V5Tmj9zJ7hS3qS+jK+gQKucecMWHogyHJmJjr9OY5A2E3yg
fL4qr1ZrN4i5ozTKd6r19CkU8YupjexKQ4pwSwaj6ovtjr42XmMXTyZhRx02XNvB
cj6Yavr/+586+MKINSfTEFoat74cyUM/SnORkQB+Z+XEPVnqN+gk5nbq1v72mdWV
ooEKvlXu4samcaJaGSYHGH2WXWwsJ0mnA00AhshwC9i+6RCcJTieHIngtTfQRQ+1
joR8eMvLQTj09Nt5PodcjfQ2jxBKtnQTcyssV1V/Jf/tsAa1pP1unTDHfOOphAXf
MZyhszMs7816JcAwtulz+LAq3QO2Ogp4oVE0dKk7vyIJ0hCtRtDDl6t94DjDSzUl
U91KMpm3KZiXSTuBEVuZuU/GCKmQ5OyVKWMTzLlBHvp96oj8+WsJzTkuJwBHWFmZ
uiK1kd08gp9i56uy5tkQtYJGpcsRNJNSnyAbEcM=
=4tfB
-----END PGP PUBLIC KEY BLOCK----- -----END PGP PUBLIC KEY BLOCK-----

@ -1,13 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEaBTWbhYJKwYBBAHaRw8BAQdAkvaY0BFbzEITBsCR3A8JnjrWZ/4orlFY7Ixe
aUSE/de0Hkt5cmEgS2VyeiA8a3lyYS5rZXJ6QG5ldGdvLmRlPoiTBBMWCgA7FiEE
u6DCZkei2Hq6GG1vPShOpyX5VS4FAmgU1m4CGwMFCwkIBwICIgIGFQoJCAsCBBYC
AwECHgcCF4AACgkQPShOpyX5VS5KCAEA5Fc+i9r1+xVRKqlf+XqX6PT1uhWKyrR4
+p6D0Q8/aCcA+wSuUcrwSNTcxfKF65wKyuOiNw5lWTTYq8vcwjIDYgUIuDgEaBTW
bhIKKwYBBAGXVQEFAQEHQBddu45Nfx+u3scccplH1OBLxSeOn6nKiSyVrrd8ySII
AwEIB4h4BBgWCgAgFiEEu6DCZkei2Hq6GG1vPShOpyX5VS4FAmgU1m4CGwwACgkQ
PShOpyX5VS4XpQD+JFrljM9ywUV17RjxZQEWpvviHGnWXYiayy/LbULb0M0A/iba
nN8E8ow17zqpng5Jqm7a/IYy8yQsNB0FYf6ddMMC
=FqJe
-----END PGP PUBLIC KEY BLOCK-----

@ -1,14 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZ/fhOxYJKwYBBAHaRw8BAQdAu8VIhoCmqQSnlln72LVE2sW5cE5GS84pxwyh
HMbdeUm0Pm5zby1hZHAtbWdtdCAobnNvLWFkcC1tZ210IGdwZyBrZXkpIDxOU08t
VGVhbS1EZXZPcHNAbmV0Z28uZGU+iJMEExYKADsWIQSStkvV+zaOVwy5b4nKfQzD
RUpClAUCZ/fhOwIbAwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRDKfQzD
RUpClLG8AQCv3LTFvw+SzZWa0sLnvahtSR8wIpNw52+qelWDwaMYmwD+N7KhqarI
V6+TWJu9uxpc+RWk/vjlTGDchPeDoCs+xQ24OARn9+E7EgorBgEEAZdVAQUBAQdA
g8dAmTCmmnYBBqPlZDS+FMUpWMhAvCVUfmYai+ZHDQoDAQgHiHgEGBYKACAWIQSS
tkvV+zaOVwy5b4nKfQzDRUpClAUCZ/fhOwIbDAAKCRDKfQzDRUpClDChAQDI0wF7
PGDmqbGOXVKv0uPbTTLhu7oXiBq//blhkhCrjwD8Du/aEdCYoz9m6tobA01sKU+4
Gt1e4njTYlntGDL2kwo=
=hFQO
-----END PGP PUBLIC KEY BLOCK-----

@ -1,14 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEaJMgXRYJKwYBBAHaRw8BAQdAE6GbHO8yvEW3377zNntvGCj5lJJ1l0h5Bk/6
+cKgWJ20RG5zby1hZHAtc3RhZ2luZyAobnNvLWFkcC1zdGFnaW5nIGdwZyBrZXkp
IDxOU08tVGVhbS1EZXZPcHNAbmV0Z28uZGU+iJMEExYKADsWIQTJA8BGoGPfv49B
xldrJs9JaBKwCgUCaJMgXQIbAwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAK
CRBrJs9JaBKwCvYpAQDWvMMhe+v3nIttUfEpln+8YQ8KSezLiCpJLQB4o5zt5QD9
Eo/ZIFriX11Y5yxnEjoFkH1LXEj66oGpMTjTojLpaA24OARokyBdEgorBgEEAZdV
AQUBAQdAuvufjrlZjxi5bpQ4MrR/Mk6qxPqU8MFQUc2Df+/alUwDAQgHiHgEGBYK
ACAWIQTJA8BGoGPfv49BxldrJs9JaBKwCgUCaJMgXQIbDAAKCRBrJs9JaBKwCloU
AP4vOcXLiHQ2nkbSm6CeP//0GX0WpsxMniOlqVxkZM5J+gEAu+IulrGA6fNrKNiv
cHh/X5eSsexomJXmxZ8dUOOhFw4=
=sfF9
-----END PGP PUBLIC KEY BLOCK-----

@ -1,13 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEaPtbMxYJKwYBBAHaRw8BAQdArKya+q6E/VlCAURWAj3Ggnia56yVrWSE7Jdp
cefGole0HW5zby1hZHAtdGF4IDxkZXZvcHNAbmV0Z28uZGU+iJMEExYKADsWIQSR
K9ShLWb5kxw/39GTy+xZ+yN5eQUCaPtbMwIbAwULCQgHAgIiAgYVCgkICwIEFgID
AQIeBwIXgAAKCRCTy+xZ+yN5eS4hAPsG/JbybnexMPfb7gsIiqSheeTvrGQnU1bO
2Ouz6e0FcwEAgQKoO2dbkM3/webS1F7zX0p0o1XZMW1ecHesTvQF6AW4OARo+1sz
EgorBgEEAZdVAQUBAQdA70MTcqVm07fe5cZGkR3evSc0yVRM/7WlVmS3N1JRER0D
AQgHiHgEGBYKACAWIQSRK9ShLWb5kxw/39GTy+xZ+yN5eQUCaPtbMwIbDAAKCRCT
y+xZ+yN5eRveAP49bhetFkuylYLcgEPKIWZom/0clG96YVUIvsCi42SeBQEA4CrN
JEoxwAR/oN1gcCbN2g2fqmirO1PbEQ4yPTLYVwk=
=yjPi
-----END PGP PUBLIC KEY BLOCK-----

@ -1,41 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
4hXDgcudtCquYStf
=oxRT
-----END PGP PUBLIC KEY BLOCK-----

@ -1,42 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
omEOA9Ja52BBiAbwxNXX5zJr5wq9xAc=
=vKTw
-----END PGP PUBLIC KEY BLOCK-----

@ -1,41 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
JhujuU9eIqCXYO4i3GW2OMo=
=cYe4
-----END PGP PUBLIC KEY BLOCK-----

@ -6,32 +6,31 @@
# A7A1D860AA45B6B5B29BC192C55BD9B4CD8DE439 | autom | smardigo automation DEV (smardigo automation DEV) <NSO-Team-DevOps@netgo.de> # A7A1D860AA45B6B5B29BC192C55BD9B4CD8DE439 | autom | smardigo automation DEV (smardigo automation DEV) <NSO-Team-DevOps@netgo.de>
# C674EFA56D3EDFDA404B1684090D46D8F1D0C0F8 | autom | devnso adp (devnso-adp gpg key) <NSO-Team-DevOps@netgo.de> # C674EFA56D3EDFDA404B1684090D46D8F1D0C0F8 | autom | devnso adp (devnso-adp gpg key) <NSO-Team-DevOps@netgo.de>
# 0E8955A79FF4687A3ACF78E50B5E444C75867E58 | autom | smardigo automation DEVNSO (smardigo automation DEVNSO) <NSO-Team-DevOps@netgo.de> # 0E8955A79FF4687A3ACF78E50B5E444C75867E58 | autom | smardigo automation DEVNSO (smardigo automation DEVNSO) <NSO-Team-DevOps@netgo.de>
# C674EFA56D3EDFDA404B1684090D46D8F1D0C0F8 | autom | devnso adp (devnso-adp gpg key) <NSO-Team-DevOps@netgo.de> # 98235A419EA3586BFF4E3FC692D4A5202A0D9519 | autom | poc-workload01 (poc-workload01 gpg key for sops) <NSO-Team-DevOps@netgo.de>
# C903C046A063DFBF8F41C6576B26CF496812B00A | autom | nso-adp-staging (nso-adp-staging gpg key) <NSO-Team-DevOps@netgo.de>
# E5B4FE1E0209DFFE320D2A2E47087747D89B72EC | autom | smardigo automation PRODNSO (smardigo automation PRODNSO) <NSO-Team-DevOps@netgo.de> # E5B4FE1E0209DFFE320D2A2E47087747D89B72EC | autom | smardigo automation PRODNSO (smardigo automation PRODNSO) <NSO-Team-DevOps@netgo.de>
# 890B2EB48F343D4C6DB9DA0916826F30002D3C1D | autom | smardigo automation QA (smardigo automation QA) <NSO-Team-DevOps@netgo.de>
# 4069413B74A3AB13E10DF5FD3EA8F0D0FB1CAF36 | autom | smardigo automation QANSO (smardigo automation QANSO) <NSO-Team-DevOps@netgo.de>
# 42AA7F6BF795490C1A522C730ED842BE1216E0C1 | autom | rancher-poc <NSO-Team-DevOps@netgo.de>
# B4BAA59056DC362809388F3F2119881095EA7DED | autom | sot production (sot production gpg key) <NSO-Team-DevOps@netgo.de> # B4BAA59056DC362809388F3F2119881095EA7DED | autom | sot production (sot production gpg key) <NSO-Team-DevOps@netgo.de>
# DF977A1F65999F4CDD721A27516F64D5932B8AD9 | autom | sot integration (sot integration) <NSO-Team-DevOps@netgo.de> # DF977A1F65999F4CDD721A27516F64D5932B8AD9 | autom | sot integration (sot integration) <NSO-Team-DevOps@netgo.de>
# AC9B0DB590F4AE2017C2AD836113AEB66C510C3F | autom | ssp-prod <NSO-Team-DevOps@netgo.de> # AC9B0DB590F4AE2017C2AD836113AEB66C510C3F | autom | ssp-prod <NSO-Team-DevOps@netgo.de>
# 43DE8A01ABD706717C36018C48C47C125C022F29 | human | andreas.rother <andreas.rother@netgo.de> # 5623CCAD4242CC3E0225A62986AF09C173781578 | autom | smardigo automation SSPDEV <NSO-Team-DevOps@netgo.de>
# 1EBAE111F6EAE0CF136358E8625C5A3B8DA21485 | human | Annika Biermann <annika.biermann@netgo.de> # 1EBAE111F6EAE0CF136358E8625C5A3B8DA21485 | human | Annika Biermann <annika.biermann@netgo.de>
# 9F5341688D2F9024A15541C9E02949D0F7769E2C | human | Bas Cancrinus <bas.cancrinus@netgo.de> # 17B8FDF68AC123EB666934B17D0DF6EC048A5D77 | human | Claus Paetow (Firmenadresse) <claus.paetow@netgo.de>
# F7F328F0E4958E4C785977E23B8AA0BAABADAFE4 | human | Christos Adalis (GPG Keys) <christos.adalis@netgo.de> # 03ADBCD31737EB474A4BD235CE615FAF927A2054 | human | Esther Fuhrmann (GPG Key for SOPS) <esther.fuhrmann@netgo.de>
# 659FDED43DE155FB772A339B343CF1218A664D31 | human | Claus Paetow <claus.paetow@netgo.de> # 04ECA5DBF73E98EBCC1FF0B018F2D15CC56BE487 | human | Hans-Peter Wissenbach <ext.hans-peter.wissenbach@netgo.de>
# 93593B8B0B7B88EA2DCC99F9388B6A662C356822 | human | Daniel Risse <daniel.risse@netgo.de>
# 0143019F62469ED5A6A016C219CA764D37590F9F | human | Daryl Sauer-Neumann (SOPS) <daryl.sauer-neumann@netgo.de>
# 9E561083EACDE14694C73A323A2F6C1D153D753F | human | Frederik Marticke <frederik.marticke@netgo.de> # 9E561083EACDE14694C73A323A2F6C1D153D753F | human | Frederik Marticke <frederik.marticke@netgo.de>
# 9F08DA9D42379AFE6610E9E615CCEC6801DBA02E | human | Hoan To (Hoan To GPG Key) <hoan.to@netgo.de> # 9F08DA9D42379AFE6610E9E615CCEC6801DBA02E | human | Hoan To (Hoan To GPG Key) <hoan.to@netgo.de>
# B92DDC9B908BF3917758D228446C51E049AE38CA | human | Jan Jantzen (sops) <jan.jantzen@netgo.de> # BA6328948D50175F196AAB5111F324603D12DD56 | human | Jan Jantzen <jan.jantzen@netgo.de>
# B643A5D780A01F24E95AA100DE6F8E2C149C3748 | human | johannes.wicovsky <johannes.wicovsky@netgo.de> # B643A5D780A01F24E95AA100DE6F8E2C149C3748 | human | johannes.wicovsky <johannes.wicovsky@netgo.de>
# C19A7D807525CE24443CA9A49372E896B41FE700 | human | Kevin Bauske <kevin.bauske@netgo.de> # C19A7D807525CE24443CA9A49372E896B41FE700 | human | Kevin Bauske <kevin.bauske@netgo.de>
# 0DB51A7E90AC6418B7DB83724D38970874850C33 | human | Kleanthis Damianidis <kleanthis.damianidis@netgo.de> # 0DB51A7E90AC6418B7DB83724D38970874850C33 | human | Kleanthis Damianidis <kleanthis.damianidis@netgo.de>
# BBA0C26647A2D87ABA186D6F3D284EA725F9552E | human | Kyra Kerz <kyra.kerz@netgo.de> # BF3D5CEA36DB58AAE1063D0BB341078652D87924 | human | Lee Watson (dies ist mein schluessel, es gibt viele ähnliche, aber diese ist meins) <lee.watson@netgo.de>
# 73C2C9954D1BC94DC6682525D2FA233B52AEC75C | human | Michael Haehnel (NSO DevOps) <michael.haehnel@netgo.de> # 73C2C9954D1BC94DC6682525D2FA233B52AEC75C | human | Michael Haehnel (NSO DevOps) <michael.haehnel@netgo.de>
# 3511D1A5B7B2AC97BAE8AF3EE758168C000375CE | human | Thi Nguyen <thi.nguyen@netgo.de> # 13E169CF5C35EF164628764AAA2EECBDE0B38CF7 | human | Philipp Eichhorn <philipp.eichhorn@netgo.de>
# 13D7771BDE5241293F3EDA442AB3335ECC93DDDC | human | Sebastian Schröder <sebastian.schroeder@netgo.de>
# 0C136F7514100470AD3EC8D37BF1FAEDB2ACCA9A | human | Thomas Steube <thomas.steube@netgo.de> # 0C136F7514100470AD3EC8D37BF1FAEDB2ACCA9A | human | Thomas Steube <thomas.steube@netgo.de>
# BB333E772B60EC8A29E8DE641D6B8CC68E09BCA5 | human | Tobias Plöger <tobias.ploeger@netgo.de>
# 57F93F2A6585CF2DF9A3B31F13B9F45E122698D5 | human | Tobias Stroehl <tobias.stroehl@netgo.de> # 57F93F2A6585CF2DF9A3B31F13B9F45E122698D5 | human | Tobias Stroehl <tobias.stroehl@netgo.de>
# D667348F310C57655FCE5D4EA689FF232FD681F0 | human | Ulf Fischer <ulf.fischer@netgo.de>
# keys in https://git.dev-at.de/smardigo-hetzner/communication-keys # keys in https://git.dev-at.de/smardigo-hetzner/communication-keys
creation_rules: creation_rules:
# list of keys for encryption in stage # list of keys for encryption in stage
@ -41,29 +40,28 @@ creation_rules:
A7A1D860AA45B6B5B29BC192C55BD9B4CD8DE439, A7A1D860AA45B6B5B29BC192C55BD9B4CD8DE439,
C674EFA56D3EDFDA404B1684090D46D8F1D0C0F8, C674EFA56D3EDFDA404B1684090D46D8F1D0C0F8,
0E8955A79FF4687A3ACF78E50B5E444C75867E58, 0E8955A79FF4687A3ACF78E50B5E444C75867E58,
C674EFA56D3EDFDA404B1684090D46D8F1D0C0F8, 98235A419EA3586BFF4E3FC692D4A5202A0D9519,
C903C046A063DFBF8F41C6576B26CF496812B00A,
E5B4FE1E0209DFFE320D2A2E47087747D89B72EC, E5B4FE1E0209DFFE320D2A2E47087747D89B72EC,
890B2EB48F343D4C6DB9DA0916826F30002D3C1D,
4069413B74A3AB13E10DF5FD3EA8F0D0FB1CAF36,
42AA7F6BF795490C1A522C730ED842BE1216E0C1,
B4BAA59056DC362809388F3F2119881095EA7DED, B4BAA59056DC362809388F3F2119881095EA7DED,
DF977A1F65999F4CDD721A27516F64D5932B8AD9, DF977A1F65999F4CDD721A27516F64D5932B8AD9,
AC9B0DB590F4AE2017C2AD836113AEB66C510C3F, AC9B0DB590F4AE2017C2AD836113AEB66C510C3F,
43DE8A01ABD706717C36018C48C47C125C022F29, 5623CCAD4242CC3E0225A62986AF09C173781578,
1EBAE111F6EAE0CF136358E8625C5A3B8DA21485, 1EBAE111F6EAE0CF136358E8625C5A3B8DA21485,
9F5341688D2F9024A15541C9E02949D0F7769E2C, 17B8FDF68AC123EB666934B17D0DF6EC048A5D77,
F7F328F0E4958E4C785977E23B8AA0BAABADAFE4, 03ADBCD31737EB474A4BD235CE615FAF927A2054,
659FDED43DE155FB772A339B343CF1218A664D31, 04ECA5DBF73E98EBCC1FF0B018F2D15CC56BE487,
93593B8B0B7B88EA2DCC99F9388B6A662C356822,
0143019F62469ED5A6A016C219CA764D37590F9F,
9E561083EACDE14694C73A323A2F6C1D153D753F, 9E561083EACDE14694C73A323A2F6C1D153D753F,
9F08DA9D42379AFE6610E9E615CCEC6801DBA02E, 9F08DA9D42379AFE6610E9E615CCEC6801DBA02E,
B92DDC9B908BF3917758D228446C51E049AE38CA, BA6328948D50175F196AAB5111F324603D12DD56,
B643A5D780A01F24E95AA100DE6F8E2C149C3748, B643A5D780A01F24E95AA100DE6F8E2C149C3748,
C19A7D807525CE24443CA9A49372E896B41FE700, C19A7D807525CE24443CA9A49372E896B41FE700,
0DB51A7E90AC6418B7DB83724D38970874850C33, 0DB51A7E90AC6418B7DB83724D38970874850C33,
BBA0C26647A2D87ABA186D6F3D284EA725F9552E, BF3D5CEA36DB58AAE1063D0BB341078652D87924,
73C2C9954D1BC94DC6682525D2FA233B52AEC75C, 73C2C9954D1BC94DC6682525D2FA233B52AEC75C,
3511D1A5B7B2AC97BAE8AF3EE758168C000375CE, 13E169CF5C35EF164628764AAA2EECBDE0B38CF7,
13D7771BDE5241293F3EDA442AB3335ECC93DDDC,
0C136F7514100470AD3EC8D37BF1FAEDB2ACCA9A, 0C136F7514100470AD3EC8D37BF1FAEDB2ACCA9A,
BB333E772B60EC8A29E8DE641D6B8CC68E09BCA5, 57F93F2A6585CF2DF9A3B31F13B9F45E122698D5
57F93F2A6585CF2DF9A3B31F13B9F45E122698D5,
D667348F310C57655FCE5D4EA689FF232FD681F0

@ -1,498 +1,512 @@
demo: demo:
credentials: credentials:
secret: ENC[AES256_GCM,data:B5h1+zKRxQ==,iv:tFdKcG+3U9cwR/f8ubs1wm5p369R5dMEnH77aWt/K5M=,tag:WxWwgE05rWUaB7EOxnoGbQ==,type:str] secret: ENC[AES256_GCM,data:m3uKjs2CMg==,iv:REr+W6QAcMXjC6kt4+U9W680N7NmOaPCbf5ZsL5v+GU=,tag:JTcpjBULW1tb6wYyQO1cWw==,type:str]
sops: sops:
lastmodified: "2025-10-22T08:32:25Z" kms: []
mac: ENC[AES256_GCM,data:ByW+jdHSeU3hRj5xvyujFoi38QQBNVUgMHvm4j1kC6XTYbBVRTWccr3boKaRzi7b8sdKE3SA7lz77MVRpYeJXn3ZIf4NvHBxDJv7btGg3c0Lq+bWRsHS9tNFRH8bc96GTWUldKv+tdyGOC8KQ6DwJASFuM3km0t0JuRqY4w0Dj8=,iv:ICVeB4s3Zqsz2uL3Cs/mhNwheK9G3nu5kPE+iQQT5ic=,tag:JZMMvnQtNHfasHDrJOAsvw==,type:str] gcp_kms: []
azure_kv: []
hc_vault: []
age: []
lastmodified: "2025-01-30T16:32:18Z"
mac: ENC[AES256_GCM,data:DNsgx0KhSbgbCqqME9MUJxHQSt4vVc/C2xfkckwjhK5nb4dW1Bz3Y5wAzPlOkPPKp9YB70/q2spw8MKSiJgeujfqnogPtZ409lbi3/RyF/7WxnJM0KFxdrsQwxfOJdYjfXnXicW9CD6xYPn1+LUVVqnRDBXt4MIzc5AMqaXy8pQ=,iv:dhVa4Dig7E3fld2Y3upjw3/P87bV6/C2oGDBgqQYRVY=,tag:RA9qsnRNMnznkNBDkjssIw==,type:str]
pgp: pgp:
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hQGMA49EwzBHBfyRAQv7BsBjoNJanbWUWzFN1fTL6V8zfY2rS+LHqGbZlAMWt89K wcDMA49EwzBHBfyRAQv8CT3tlOGMwEy01F0kZ8tcrYofenVzeKRrUA46FBgOEm/f
qFutxRqjjo96Y1ESFTsr9Lqb5gO3WB2E4JTXqBsAMHdP1tGMj/MJpEjTsnY7Fugt 3L+1/C6+BLvDGacMF7e0V0BTJ7f/fzYYAcmSF0WQrICnDwRrrjNgN7qEjtYyhr8c
y1sxcBHCQUWGNZI/z714yNSDokp9S78OVvThS5C5RKn6dkIMfZ6/+FWiAQaR9Bhl NqpCSEgeR5juiG/DBNEERDrAxG/nljx0Q5S5ILN3kOk1Bm6biK2f+QX4xf2UX6A+
u2u8sDSsAAXBEduNNavBCUvl9WudLu7+j9gdgI6MgdD3W/I12EHDL6aMJdaLmcn6 vg52KGbpBpZaZLW7S0DxHlkEZAzRNbgKN7oxlPHDQwiQXA8DKw6pPSt26vuEFawN
ZxYSjojqqWfd85fxO9cGzz+mhfglhhRquSrM+nelTgLYNloLLFnol5qAnvCnr8+L WDalia6zU5bjQy5xqgtgf3QZJlSCK1HFVc4XCQT7kjdjlpCjEfLJl056dgUG/DZP
vM7jC+gj+Z5VqtRNmCm1JuGMQqQo4AficMgH6UlQ87k76sFKZN9b9pRNSCP1KQEp IE4oITG/9xQDreyUtOfOFkRugOySpFa0LPHOGFYnW52DTlTv8f1VaPBzHZcRf21b
b2OGAmIwSijdhXCPmOYodalwx8N2mt29myRnSWw21KJZ85Nr5xaaF5YUeiFSNnnP R3nATTNgkU/XTdZWTb2gfj2AfbLv1xJzDRs38TAGHYpolsFN/+ehgFoFRO4+K0WW
xW5YaVFiGwA9JltOnwTiE3JEHtfox1VNLSbLDEQCMeMLhE6jsciH0SWgzMJm2Xu+ GgMfkZ03Y5mbGXaGFhGcJEQMAzNbtS2RbuOhwkW/C0qm7qDW98KZXSLkeL1pjayo
nZ/IqdAGgDvaBV6fNcG10l4BZ16ZAWv/+9NGQWJ0dhasBxSUrFOY5MMLkCYq+BXO 07KGaAJFZd2S9Qsb3+3g0lEBmzLIOzqY/n6HCOHIS48/6etFY7jQ42JfN9/yhdRS
5FaJPSYCO662WSkoReUCFz2ZrhHG0RrREBp1hDJhnpcorSZoV8jWxyS2tY8MGb3f coNPK1gQBytmiZLhpVdQ/Nj+1LXzeRZehBPxT0eelH7ILcFTvZhIHPAxplUG33TD
LCOG771hk3zlqnpgDhxO rAg=
=VALa =XH0R
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: 533A89DD49FBCDA2BF014A936C962DD77704154A fp: 533A89DD49FBCDA2BF014A936C962DD77704154A
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hQIMA/3nDyRfgQqhARAAopdmS/yGWhA3AFEbiVQJgxDRPGR1dC3xUob7o4DF+Nl2 wV4DK0+AyNumsXsSAQdAmnV3rkI32tVB1ne2EE0ZCZoQzd6CDUrPNijrPaXtJk4w
8ma6E8klwWnmigUP9RyIFFWHqrMcapECJSi4eWzNdcd8XuWFeyaorWUqZrQc3TQq KDShbO0ota2Jj6F5mx+bscpZkY7LhgcyUkg1GcoOconEizgxmcH9cLaX5m7Wfp5B
pNjh1B4snCuFwTuNNExH/ieW6YGPcNo/ykoHJTsWwGYwfHRQ996YbYHRtpOuxWVz 0lEBM1wVjbgWVER1GBBay0moPjZLkyucbUmz26QMYBZxTNK9u5c7cxdlvOR3soev
vWLkdPu1cSPDmZk5dAyNh6XyBNpQIF30O5gCPLLsZTQDvjroCAKeChAKdsh9Jj/X tHhATcB6piyFVIcAHc0Zl+nKfEih2TrH+4E3GPv62shGhrU=
zms+0wmRYd+KAm5oCReTtP2dRPYEa6MsmR+F9t+i2KuYBE6cm1/FsKjD3VvIONG5 =SC1t
cDV391FwOn1woU/oK/JTKMCgBk7ifIroMeVbLUFmln0HkJ4M4CV2WIKiui+XevXl
ja9lMRyuh8vYETT8mFKWaUZwlvRtsp2ZDv1YahaSLpOniP/So1LnQsiGs9/um3k8
1siC94WZ0H1KeFgwy2tIjsvJfG59Z3EqmElZlxvH7q90oicrs/OWvO26htkzk7YU
N2gwC3Hjqr0KReD/WniSidQsv1QYeEVQPv6z1WCPybEMviPPPyFRaJ3XmC+YiKhJ
k0C5jo5VAbm0kJYdNrml1LUtoN8PhEqyzOfRCOmr4cs4ndlIJLTz9j1Xvz73iXiD
0MNg8oFJSvYCmeqnGk4W8JdpCbNO0gqfFO2AMdecsejKcvN8I0ekgFrOSlgAKrvS
XgE8Jh/Xbg4PhggxdwDjU710wzfpoLOHJuSQemZainrnYaqeAKrHeK8NrwMx8fa2
q/NFG5ySZBDL8e+T1qEsLO3XkWwBeWlvo8A8sLRJEo07RjrVVT/TZwQa6OmeVEs=
=4p4A
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: A7A1D860AA45B6B5B29BC192C55BD9B4CD8DE439 fp: EFBBBB131CF1D863005C18868C8C09CA950B1DFF
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hF4DuAaR73LFvScSAQdAxxYDXShwKh/6W4ibLuZt7csqihqYHQKV2bkuo8RH31gw wcFMA/3nDyRfgQqhAQ//VluVKHQNlwVoIN5NT3nQa77qYpSEg+Qe/kj9oUJxKhlL
mP0wr6zffEUUUiYyrVx5f65WcKaI1a31nMCfJO+ttTMJ2kl2gVoEHx+7jSP+Tt1G PS9PLfr6jqMmxCpABOEAJU8c4BNNoqqJThrgu6TWQ8iL2nyS9/BspIFrkVSsuCFU
1GgBCQIQmmC11YaJGJxUFgwnrOTJeVu5mzXOVWjCZRhkyrsyH0hXRY05egXZzMBT /fpWwkGhzl1bwEebqD0ZBJsYBFVfW/pxVgsreudbkVNMhtCgp1Bphj35+gbimdle
DisTqzIIan1hT+u/35JMeujHe/LrEPyQlhtyaThjz0tfMPXSbEuiUiuuiV7YpiYZ Tw0bOPqkYsPymea4oYAI3TNeqpwxWejuI0trseLQmPUSbseRwAxvX9mB8Id56VmR
sX30U6j9Dsm7dg== GYWP7D5Ujg4RWrl4RRlR+a959ONpnWlkNSPanFgvmLvgEqGxU6ZfgSGjLZtUNC2c
=08Mf ZPrnXnQc0+H2jg0MSkbSwbUADJ/WtukQEn4scDDWCucXZg8MLbGr4JM1MaSumgJg
QlW6hO0gJ8SgMvpBTUqIOW2+ajaXe/zP979SWotCcZgRLvigfLBRr0L2rITWcP5w
5a+1DPeZi/mTyDpkt5LmQ+Tb/6aDMD/aHyEqUskB/6dXh24VHQuJLUUrTPdURLe8
bWFGoGl9GztXJm88d4gOPcvos7mVpRGLRogo1UPe3nwnWnlvWfmV8ONXuAsL+k5d
mxWw99i+fIY/cARftdUmYs+BlUJ3pt8Skzw+Z5T6E7wYWiQnO+LyKp7glk7qnGo7
1XKrFfEG4R1luJzwBa5Yt/xBaJ7UYzzLhXvu6rsFHjtHEWhANlAoZifDh5UivsrS
UQEXD61DJ3GdTJf8CcBWBLt5doxTephRyBSszLEHE6cxnBOLqfwVhjzZNd4TBYNu
zr6v8vaR2/G9AJDoAGS38u2AVHPApgTwgQTdnSCsplIp7Q==
=jS8g
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: C674EFA56D3EDFDA404B1684090D46D8F1D0C0F8 fp: A7A1D860AA45B6B5B29BC192C55BD9B4CD8DE439
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hQIMA3LBDEB9lMmaAQ/6A6jPXX1l7J7dmAexDkvOuC2+8azrnM9u8smXbje/xESd wV4DuAaR73LFvScSAQdA3wlRX7/i3qiwCBfTpBaEImSab/kR44A06iwhJfepUjYw
pwYupQa4RYrSu3BUaNNfglysJVNLbw6ntJ7JZYrt6tbQv5/JVcMGzlRPTkfAugVl 5y+icqAGk8trnFXpdiQ+QokQAidnHjm5KfU2cGP/Wvx8IQ3WIBjRyhv9wft8VA3V
521Y5ohKmlYXN4jWb49d8/50JDxsmnZblqDv6qHKkvCmesveHRqif4gZGuBkXVdR 0lEBE1yVtElPn6jMr8pRlq/zpMfIhoJbQvBq1xnD9A3MlbK6GRTGXWOwsqcYc1DX
G/TaH8VKGfR6E+WJ8Utbfp1rBmvh0CZB9Mpnf+dKEF+cIPhUhCpQZttULLLwKVca CReclVkSItk2+mn7DqJi4DwTkE6Lpr8X/aNS9OxyrhS4ZD4=
/C5obxQ3NBITqw1SzTHfmxn2oL/phGmwjXiDy0v6JQBMzDZ0C78YS3q4T4nkA30v =pQIq
gD4GswOHkR+EfppkSn0k7f4HxLaAMTFzut9B2BdrtZl4UWBNz6CTCf7YuFDBs7eP
Da9ZLzLGiml8rhzY4UJbmJ77zZBvMET3IYkMSayff2IxoHJNRSI4RQ1SSLC+yy1y
C2lcaC5OO8s0gT62gmfi5X/Ebngx06A9X08f0GowP2+KaWZJ+3Q3Q14DjAOtdH0T
yrX2xoLNyXjhspYB9jFCuD9Ct9S23E4Mu00eoK3ABXmF3OqwwIV45HyWB3qbhdYJ
xTDJmP/s3krRTcgiQD5yuHoNgkvAzptmvO9sgGuFHlI5y2vuQ853XjJmOJBfUy9r
WONMbORPqvns4AqPce+UbU0Jib3olUU+BI19q8w2H46Xh1XmYHbMsNAXeKkyX9/U
aAEJAhCT1uQf5MbaPZRAQX4hTgW8mG/soN5wpOV9r1pqfgaZINtivwO9apOhr+CW
MgQBk/zwHinI0mU7x7CJTlTDX6culH0kiFWeZCVxxjh3l2M1NIORyyHMf2tFQu/G
L3WICmtOWf54
=NaqF
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: 0E8955A79FF4687A3ACF78E50B5E444C75867E58 fp: C674EFA56D3EDFDA404B1684090D46D8F1D0C0F8
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hF4DuAaR73LFvScSAQdANY9s/4ZpJhJaCWVDPtlTo6Ob69MpP3ACFTFccOiIYk0w wcFMA3LBDEB9lMmaAQ/8Du5NDJm2S600M7ODYuB6wDeKFkuaEz42B9mpqyK/lxPG
1bSb7XRxjZ0YqWkBsmDattH9J/wg/isF3GJR8HIFRgHok+r0PscQR9xr8YlDxoZP Lp2jSTZk4qi93+6uBgAeGryJe5qOuUwRdgnnIe//IdiCppuI9iv8W2UAHx32PVEc
1GgBCQIQfdgQpU1ERezqyr0F7cqGEh6MwmhYz1hrnUEFWdB4c8iPhiR8mJZa9+j8 vNpipdz1pIhXEmBJuOfyv7C8TT/+nrqdM1NXy3hZeH/JhD/TgKP0VH3XoGFef545
Ii8yEtmpZgAxvs4hR0JPdw4gDInIT6xre5ErJ3GSefvlug8WQ9cgSFMBf4DgelXQ +tEz9Cfjg6pvy3BumY2N89Ijv/GAuRkgS7BAdcdoFrc4PylXleYN1SS/Fwb0WyGl
u+8VrFR/sV7fcg== uRF20gZgohdllBHFqApdgVTR/jMl5v1CvA9kMMYRcExHNcpsOZ0rFHyXjZoPA52L
=HIJK VHLeeIovohDJ9nnETX6KHMIe/Z4MpdoYK/PdSXpBT0fw/WM1wC3b8px7stvsIekR
8ZEh14fTzgo6J4mqLYllfWxEOx3XrJ9D441IcSbV51pswjlg+vaaAjB8GKco/h6F
95TAiJnwqM6c51XVPfJ4CQWJMnpqdfhXZOeCWIju6EizXu0OCko6h0Dq3gfP2SHP
7y1KD2G0XbRHtd7u1gd/iMDRiDaO5UahZDgfRNWVqjMtMwkbXkVTz+auIy687VI0
usW1o6BjMw7v84UmCgcDwo8W/W0w0PmZ3t6WJRXB/EJfirfGR+qerM91KwBT7Mtf
qEG2P/43AYbzFKHndXuJYP8OlCHuWIuCDzb8w+beDqEf8Vh2BQX3tNEmDx+i+a7S
UQHgTUb0hqhOoL572k8SPlf4pW2gw930+Tm24w4VFPhSNp7vL1gDwuFuWfzQ5LcB
A1p6Xx4vBrdG8x0GvFRaiXV3KRhm2TU3XvgxunLtxebwTQ==
=I6Ll
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: C674EFA56D3EDFDA404B1684090D46D8F1D0C0F8 fp: 0E8955A79FF4687A3ACF78E50B5E444C75867E58
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hF4Dq7ZJnmCAxTASAQdAcoI0EFmwEAnlOgW3vI3+CzjI6tuCuLZ/L5LOIwMK+38w wV4DpyXAcYv7T/8SAQdA5OoUcMnNDngzRgWJZ7Tx4VEGxhxq0XBxaKeSCwQjCGQw
KRjRd5n9WqNTrxwvyYLMP1kM0VzLXppgM+t/Fr4ObkySYxWStdiN9++EkpaKEEhl fQpjfG7teEeJsoE1w9PduB7MBdx5s/a1U+6vORYng6oH6hyQsuMVS8Zi9j0eekYR
1GgBCQIQMAboN3IjFtuQnT98NOVkTaRbWeOfi7IFnLL50yg/BsGNMnMIrBOF3WmO 0lEB71yT9bwiOPPddxxL8gU0dzG/ntvRVTbDrt4bkNTb+RhBaM2IA1fNt6vAnMYG
ny3u2Nzl0//G6NS5sGe3+xoCxAz4gvQaaTPMsbOPpmdP/vQyZNzMhidNOx1fHgt3 cPLk3Z2wFIslMsjAfeXnQqu2IIhtZW7ytKReN8ShYq5vAhw=
u2vrYfnv7cQO4w== =ElKW
=LzLZ
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: C903C046A063DFBF8F41C6576B26CF496812B00A fp: 98235A419EA3586BFF4E3FC692D4A5202A0D9519
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hQIMA911WKxzIy2nARAAqDjWKUlpAHXCE7XtvfDJJZ3MqhC5Dq0SrnSQ4Sv6Nk+k wcFMA911WKxzIy2nAQ/+OGYey7y+fe2C0NpXJS3mKOpJP0ki8bXD/B5TjGPmEaqk
pVz74k+vzPwQumi3MuOOQi8BH0IpiAd2ihWhcr+nu4GOUZ/Xo5OJv72t8qT3lFf0 E3GGNZlBaTkhjEl8GWsN9z6otYIMKIWNYShjBWWADzCFjLFRoTADxxkdrB1npDBf
Unp6Eg/UESilwQkHPhJQOOjHr0CIBxU4SkDBcLlVkOjfZMH/qXkSlOa9Wqi8Z7nw dgZNPEirxDo8zjuXWo8YX578Pj4MmTyfe6O7Ty56FbDe33sQ6Gl9uH1tp+nAhRag
P4XnUVCOqfRSoBe8sammriO2d9fjjbVy9m0VksR1R3TClpPv1uN3V8INvPhlC3Ml MLYWSnrH5kTVNv1sqCe9d11YniQUgHaXfyLMCsPyvYlUJCGtBp2Z4ihv2ZbV0/xk
nqo3zLnkg3lAu28nVXgNb2s4PvmTQAHwhTXF1/nPEPBP1ilrA3amGcR4VcC1Svr8 WkJIR7hOLPWKM5CQjQOAH6Ei2zkj7WMW1b0e2EM6d+O2nCjeQq33Y7KzsKzr3L3C
dp4YfgWnzqzNuOP/4U4R56RbmvxEOan85CwFbHWuFpfzf0fWPs2l4LYgxB33MggW kwJYmZH0fPgibXzV0oyADvgoCdnNiaK3fdWA+5falvSG/Y+SSca3il7/jYEK7RPt
P+WF9rnSf+y8ph7HVwBnSG0WCmqyuQBnyImdUO/qi/0Zd4MpRMvDhtYNoDfHmph0 eRzJIeaFSzfJT2wbJX09jFKkgRxN0XTsBXFhasnplxhakEzNQYfJfezDur/BMK7m
rWd77WQUsI9+r5dhLdtkBX6LluhO3FK/L4NnEVsc9M9Ve0nYtGpqunZb5T0VuPyW Ned90hoRVc0zUKZc4/YOK0bOOGvKnen7VxxL+y4TfReFqkMoeUMMRPSykpKJKMml
7NA+oEXqo3ZZoPvphkuCUNQUljmrFUPhlkTDB3A716LZ3nr5tRHm+iRrTfflgo89 6CuM9nFxEg65/TE1YB1TgI/DJyRYaVxXI+Fadb41yI8ccmtUu8vTOSqpsJiSBX3k
i3m3uXKwVcTw7wFHCwrPI8imc77PLW+H/FjBs+3YX9rOTffFerdPwKobaxB/Fc+P ITY3NQJjXx373Rt50MSbw5ELOybWrXrzqAyBOXLucc9dPz+55XsgBuSoRlzW8iIb
Ep5nabvn9nzVfzgXh9dov8dajtPj1gkIE0heTkunXARcje8qNwsP6c6mYYAsDYXS DJZtz3GZDNh7iLTxv6skCTtIuMWv9YY5KwKzvPt/CKus4EP/RtS28b1xb4yaOJPS
XgHh5C81WdFJVQXTvuuONx10XZk4O22SFI9YOTQ3dWMpZSk0qoN1xgiCO+mvYiPR UQGh/k8RppgvTLsrgl+okzWlf6JQTXS4e6+WOYiqU0D5oi9VcIYi4hYRJKtGELoY
fvIMbjihzdTsfKmIJtaR2BS7KkM6hshraGHtGMid9ly3n11dok4+dNMgsrqvqQA= Xm34iNKYRyuSsUEbmr8ECo5HUsWQVWNSGgfOX2aIy/3pdA==
=x41/ =JH8i
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: E5B4FE1E0209DFFE320D2A2E47087747D89B72EC fp: E5B4FE1E0209DFFE320D2A2E47087747D89B72EC
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hQGMA5pTFdxsndstAQwAuvSwuGLSiTBmFA8rQbFiGYExh6x62ijw7pOaqOK3l4wd wcFMA2Cr/drkb+8JAQ/+LxSEQ3e0lxIPVedBh+ANzGhsjA0BoHTl7sjVJGchkKlB
CnEKDBzGK2VjoKoLe0Kp1epMZcgLQhzF1qe7eKLnT11dI5jcYUO6mDzhq/38yWdg P5E2QQTm9bhRK+iP87h/5yy3JlSj+KS/GehNaqmczORUsrzOWbM13VeB7ESssHYo
g7NtoZRP4gIC+Xfj3+bhZBfhPt6tTGGw599P7gkXuOnDzeTip9FVysGRjeYm3Q8y Cky0QYNkzYOHxJc963haa4chmtqQbgn8yRmr1Ur1YObPCEdBvi2IaEFe4oojpntB
fZNKuT/dhjEgMNZqh8RUFxcQExwiZ4UYWPQV3GsCXuJlvx7NRNhSbacFw+3+OQrX ym2I3uoOBgvM/xFifEXlCVK31c/mHVXuSVUVu+CYIWWIOcl6mdPLpagNBDxeiGe/
cimpFzIZQfz3nmEc21kBigCmF9IxSJhFANkPAoiTr/Kszki69z9+oZ/e8aod3flF yY33+VKbF/k+9AtNsow5G623UE42M5ztAkvpLj3GKKwxkV11kdnfv8OCEyFLCu4u
ow6tVtjVDH26IiD/5FckBDJcibhw18ghrHh+XuMgzqBX+3pc3UHWRSag5FiA7QuC SXRcKocNBLTEqfwKPeVQHsPCYdPG1SYrj1cqSWzEs8fL0/mH/2t1p+d2Jt30qSG4
cPhUTFdLVC/tb2R4ci0ropUZ3/7Rdd2Lrn7Ccvw0aTaAb3KWxtqN97UaAbkPQYy/ GIIS0+wjwg4WTIwAbFk6p7jsSzI/InjB3Zg041Dz5ESQyussyfZZrEtvxHJA0aq6
cNwwrVKGGfUGsZoTl7DGeZiP36tu38qLsEA3Wky7+zhwrqlDZPDePZyf4QHr1ZjM ABAdZhA4WUbdzz3jElPmDGpVK2CZ/NavRap+Jwzm8DiaYTRE1C/59345KDkY1qBr
sNZx6RDKfV8uhG8V/LRC0l4B8kXUYTmh8MVebNfEnINgzXyOkIjl+qe3SGAWl+sz 4WQFUXxbwlhlWCX7rzPastbF1BFfj6v+ay09udaCHJYvg+7URBQldy98RsCpSNUv
cD1kpLyhuquxwzpNxi28kP+LAv6yM14pVY3tJZn3ZbZhfkV8i4/VF0Fgsp3RPige p87a8vruFdGoeQ4TXnhHf5m8qgtaGsoBWpTKnkmJ5y4aOJgiZ3HtMzSX+vL5J5MJ
SmJHbw9iGMZLu/pbzapv UTK4WH2jQp3d5RtNrb6DgBO2AivADTmlMA2S2fLCnxQzHzUirvlcQTtQvXJrgeTS
=frF2 UQFdm01Xnc/vdFhbW49YDnw6cfg8B23bgK8KQGuNYV09zrxIgnTUYRXP3hWgTtiv
cTvCMlbV1UY0KXC5cCqTTo66RmS8itbMTs97K3GT/yWNWg==
=eYl+
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: B4BAA59056DC362809388F3F2119881095EA7DED fp: 890B2EB48F343D4C6DB9DA0916826F30002D3C1D
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hF4DwvSwby3S138SAQdA0xD9js3d9JcZTJLGHuUZXtA3ot5LOjkqRd7u8/dfAE4w wcFMA3Zl11RyMNviAQ/8C5itsVwJLo9SOkYS7/87z1zaESeMlQuf6+OB73GVNAn1
Zq+vAb89/DHUuKlLC3vMfpSStvtrSUnMBX1jcGjpG25j8yQQMHj2o8CeUBHXv2l2 Li7EbBaxvp+vM73cCHO7XL7umkFCeZG6e9qRGX1XVTNnTZDzeHdHtVc5qkqYxfIi
1GgBCQIQoKb+YHrlK9J77UMKq/05rO6GX8Ro/oG3WbtRw+Ap1roARUkQerjlxeS5 MMMLK3TUSS5KSxhVFh19UmR+oh8j0uyuu869Bb/pTtiiJB205a0vCY8CAK/2vC7r
wD5jUhO6IaxTNnRf+zddSoLyD6BWWusDyvAmf2h4+YFKAyc8q+x6Chdik1bQnLyL /2d+bM/01/5xjgGRLlp7hupe6ahJqg87UAiJe1ieWahsUQO0HWg68UbpxmKvADoF
YQYEe62pU7JmMg== 345XL+azA13wgrKvSTaYfTjgU6jbqCwReE8YOtS3/mvo+S4U+HiVbcfhWlIzjktu
=cyBZ otjXokBdU+hew+ICaK1imuZhR0R79mEsHI7mLJChyV23lVdl+3K1ct3B0dITj3Un
T6lwMeOMNUz7BrhY8PK7Yf3xgR9gIzdstj99L2ViymIi9YibxBOhdQTGp94fVyOT
d83CQz1YgvfP+sMbfr0kI/ytmZHTl5ydh8nAYTULeGTEAX0T6dylwKhZsBB8652I
Vivwq4OVfVvjLRsDIN+Ph4kA1+mpyF9GTFVLax7Fjry3hgDHSFthiYADoe3ifNdo
DeN8BjmC4ofPjB1n9RTrwh4YRwwbTjcUgHG0KpYuDy2KWAnzg1GYOxIK7sIdOPbI
93k5BRiIF76pHF9q7220EfpfllLFzcGC9XCGcAucrVTO9FN5W9IRn3iESce8MrDS
UQETS9yF3qmHF7Fo4BD8b8pYIH5N1WjYxEYYUdd80rxfPn9xlCRz3EZ12o22UOF3
3N7sfLFCXT99mF/NWkfNDgxHt2+UuyIWMttffnaVSSpWFw==
=R5Jt
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: DF977A1F65999F4CDD721A27516F64D5932B8AD9 fp: 4069413B74A3AB13E10DF5FD3EA8F0D0FB1CAF36
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hF4D3RW6IFeToCoSAQdAYzjUM4IJtNT8mTr2eavs7asD3hIesRGtaaM4NixrL3kw wV4D0Z3mmZqL/KkSAQdAWib8+GRxR4uu43HT9lWpkizPQIB4RfmZS4k1opXHqnIw
DaMd4Lw+G2b0T3kVwmrur9e61zj+qgHwLmReij97JfW+5ceB3uzl9ILii4BZDWko F8fuwxqA8jSQ4jU0XvI/UCKXD1nm4hMdE7bb3f2tCQbFW+YDFL8OrnWw/lnEYWhH
0l4BOqi2wZcXuG7nwdLySPn1MnZ7KuEm3KXX03q8kxtS5qhPkOOiG6ZJNuK6RP5c 0lEBATRPWV4BrFs4LqlsVOx3XUljHqs9XQ0lczS4eQsEmOBKvR5p1xOp5qwm3VpC
dcxsESmU/0O4Fxn9MbLYKDJWuMv1tpxwsR2zw1TcV04q8owIFGJDrtCs/+VA9Mjr JQzkbVRHDtf1o/y6T+AWFgiSXbJjzbYOmiXnMcNJqNFT9N4=
=LmAl =5cs2
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: AC9B0DB590F4AE2017C2AD836113AEB66C510C3F fp: 42AA7F6BF795490C1A522C730ED842BE1216E0C1
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hQGMA3n4x8uRQRGSAQwAwgeiNm/1ezo/ZZZHaBJytZjVBoy0NKwZ4n6pAVEzoU9a wcDMA5pTFdxsndstAQv/UBdK0phdO3wdODohmgA6iiEH77FRCQR7ejamKiux4sip
Hf4lomaBc7bL9aYEWKoUTmsa4UCGvSDaJVzhKLetKodG7wnxGW5yXYfS6WISGq4v 6h2evC6yIrupB7KbdjiIjFqBE3luoF0+4gFbzv7oCl6t5U6K/mAV/i/3ChXHrUIL
Yc5bzDQrUbvIWibnTh1MyAhsac7gwq1Gnbh1opqNE0kgiFovcdwz2ab8/8foiwFF BYGLs7Nbaakw+Xpj8QWa9waSPnzf5etF3l8Dw+uQZT5dgFmOL0YvqBcBr4gRzNz6
d8ER8Zcyb0IeGt+2kRh/QjCanlyU92jwJOBzQVc+/nKIksWKUKYq6IcHOQgeoGKi M0ln6e0/ghCQ9NylPSdsfnLU9CHjChQLU0VYAOzF3GIxkDV7M0PlH6/z+OVHEYGA
GgVHXXo19yukmykL6QeGAJi3lukH7+mqi6sgXp8Zh3E3wu03L8My1mXF3SJ1IpLs A89xm7zSieXU0GAQdrqfks6iC2QOdh5wkXysfgvlSaRGJg4bb2M3+LwvAX8WTxur
ctp5JPHpQn3nVBsVvbkf9P+AvQsQOXKvaKgsZJ3O33wmz6AiiKY/FrUwlG4r8aEW 0H5Ob+xizTEbDo1RsuihVgW0Qjj/sAe/qB3aDNXmMUma31czckK2ZqjI0ma//+BV
hhwAo/sLUYvcGzFJU92tDnskwsNAOPA8Pj0RB4E38JCsK9bwRiUqAKHRdfEeSefw wel83HSILZKkSzl36+fgFWqhmeSXIKq9PQ68TRi6//YtZ+/1/qGEdNx75bxrplsK
3mmML1Z6H7CCc76O6lCXjR8W79jMRwq/xE8BWMkB1XffFaRHOhllPBro8uR3Zol3 LZtJ3JAGVCysarbmqbPWPepxZKXQUuRYrnjQuND8AT2dTWaHyGwhZ+PZkX2yIYhC
DYq9WSw8GoLGomwM+E7V1GgBCQIQz26PHsb5dysgZPrFwJqvcaFjMCcZKOOriFfj 8xPOGIDnGUNuM3n8GTou0lEBRrorCd/HjOYyy3U6v4Q1RUqsQA7bisycArqEpXmd
14bMNJjAc8yHTkekSmblPuIJ3jwsSoFbTJQYTafIxZ4wrCk75rEGWEjIAaHjN9uw hfE2tKDFs/qM3VXJ5Wi5BzOZsQqC5m+S/az+XqmS25J5Ho+0VFDcZ9dJD98ImUfp
VBSmK4pj1DliPK4D+OPBkMy15XZSA3yaXA== rgc=
=coc1 =Wa4b
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: 43DE8A01ABD706717C36018C48C47C125C022F29 fp: B4BAA59056DC362809388F3F2119881095EA7DED
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hQGMAx5drVN5V7yDAQv+P/6LKdpEL2yWkParQsGIIaqju5T5/iaAvecngHA4FBIo wV4DwvSwby3S138SAQdAOKuVWPXdHIVVb4Zp5TcobpWmXIv8OL34RlLDJwKQkgow
zUduorElOKC+T92kYss0FDMl3zePMyYXuPReOOntoKOt/T+dlTTKOKhKzEZ7dZyC f4JLS6CS7MwIjQE6H9CGv144tyHed0v2CH8LPG2flUq6em+Z97hR9yg5QoD+UMKM
Qd8NXPovBqx0Qiznf5hP9oVElrWmD9L8GuzT2c6M2VAclWPNaIjpDoY+ux9mAHqz 0lEBPhHLRZaz+qEmSIkUHrzSTNHMcaB9SxYJ7Y1fRaiznFuNf3+tCCK8LxHsSp85
CUycoUYNEGFaysWanzXqw9pQiXxOmJ3n6rQ6P1CisCnQiMlgVRamYzaViO/ti4HN UyGaxDu9Vt0yI6A/zCtTCCvAg5tTz2mDvuoW92YU8yh7oHA=
I17Yfr92aarDwvQw3Gqpo5XlBDlZuaiToriOwvsRbynJ9iTaYzAYkDNgebScGWhL =hvTl
Tl5f0AQaBVQbsuIoqt91NNDgI8ja4vYi3eXd+o9M8t+4FhT9dzoRDxBNH9dZHfFi
8vLNb5dUgz2wn5miLrwFTmbn6C9GofEj18IU/c7GEFGld0ajPjqxAo6AkzRP/ksk
5bCUneJUBg+1/wv5Lq6SkLalDMO+te4I8RDE2+MtJeIIzcLiQxzNl3YO40cU2K3J
c7JO98gACdx5AiwTg4Ze0l4BEvfJ3vTUoM2iZIYEZZ34qGBr4DJSPIRDtftKJ8iM
y4DstvqHtiuBBPogbQd7of9HfLEB/IeMxLX8WfWxrPMhMv+ksF8yblYMKhTcb2Rz
72gsQiAvIOElqeV6X5W9
=/qwi
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: 1EBAE111F6EAE0CF136358E8625C5A3B8DA21485 fp: DF977A1F65999F4CDD721A27516F64D5932B8AD9
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hF4DRPQAGSQLsJYSAQdAK06N4nEaBoHoqzisngt6Pjfw/j3+az9kkcLz7yuzEXQw hF4D3RW6IFeToCoSAQdAmI9V3uW4skY/V5u/CDXuj4+7ua+W0DnDouvwWfPUOC0w
4c/WT258IUaMZw3APc/Cb3/5ckkeWY2iEWGq1CotE7sW1G1MxaisQjSNWVMCvhdB +a5o0/2As2OiIY4m9q9yBiMWzad8bd1c7kWOSP3hCgZ6v19Zbj/Ddw89ApObrFBX
1GgBCQIQeKyr52qjVGTwr3ul5eY84So8d2GBnF52544vkHmsKdmyE9pZKrbC0l3o 0l4BQDaZcmRQPP1wiCMUZkSFN5eDNr7YVHqyRCO2y77fotG8pPIs6OwF4zyIk2TP
uTPT1oneWpXUguohi4YzLxeENdX8wumnlatck19ivmtDCFtKf2CYsQIFLTj2g9eP xRSyqyg4HrNbrNlw8Qk3bO5Jt3kZHCHz1PIcbjrI+YShHLhbgSsdJ+EWcNuy3Zhc
E3nvfD74nt30ag== =PAI5
=gmxN
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: 9F5341688D2F9024A15541C9E02949D0F7769E2C fp: AC9B0DB590F4AE2017C2AD836113AEB66C510C3F
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hF4DqL0Ka4V5gcISAQdAuEiGMF0+O5sHyuNiUxFTBjClXPI5qZMYykvyne3pXkQw wcDMA1j++ZN0cDPgAQv/bT4ensVZeqgxctDgRtF3QbsWz7Yl0iFT362uHbv4auAQ
MnFMOlgqovBanqI1cM3DVZElrMxsLzxseGTbL8UKd0mClzXnqNFkc9NLkDkNO6tF zEK1uP1KY8E9qKaE0ALOIudT+kcOh7apQrfa5C33Kp4cRnzHvv5xQfAzxNbFMHuh
1GgBCQIQDfe4S+Awl42he4BxG2Roh0KyRv9NqjgyVk9ytevFB4jLbRpcKaimCW55 TfjrFP9HLdcYvPJ8NyH8ZSxxpblk2y5x8TVB6Efl+hPk4lW3jHYA2dkCae/9eQG9
n9jFLqfOQlbqje4d/b24/lJOkMmhibfpJ7YDQIt/vxoi7GvufiAciJgIW89owYcm 1A5pLzrz+q4J2jfHCW7XBbRDqevIIRz3AgEU/S3zrWyaGFLUkArTNTVBVHB99Ntb
uEiaLNhXb5Kneg== DwqNJwQFOMJRHxQMHhB+Jsu79p7PhCFdYi7Oq886AJug0V9BW6qKF4Dsab60fcMP
=fJqe RkELN7OIQhAFYIODHX9aN4cW93dTEdjaW5bnwbagO+gGlqjGfarCctSNOWDPNCWp
y5fZr/7JA1g0VMY/XEmrYjTVKZ+ZN2z+04j38LOvJ43oE69gbBfQV9Xl3jt1iIuf
lKF6zmZSo9bPrFFcAaWbR94pxpQxR/Tnj4G+g4H1l6gNStyrlXmGO8omFgf5gsFp
EumSxyD/MVdpDMdYEUsP0lEB3CHznlT+gsJ1UP/MFcHgH2N0QJJnZDR9YmR4Mp2d
1SGFI5nD/YaA8C5TnJOA980Db4IpuvzakmLOMlIXUFWfoC46DswxXNUVsWbdXK7F
An0=
=TgU7
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: F7F328F0E4958E4C785977E23B8AA0BAABADAFE4 fp: 5623CCAD4242CC3E0225A62986AF09C173781578
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hF4DbFrAcOA5jGISAQdADz7JJxhJrzKxkQ35pdxuSycyV+2IS8/QZBcRBIXV2y0w wcDMAx5drVN5V7yDAQv/SdfbVExUoA38vmJaYrHqPgtmqHhZAXZ71OhhZJxF30v8
OYnbgVgIbCwSWz5XXxfiM5D8e03HkPrh6Cg4mXcMBqFoF5ktMcXnMi0dxyrYIKom wsyyaHHCgv/hPncBvZnCXiCUSO1T+Ci7uGHVK4M9+1ma5v02KjIe6ObcW848pfEc
0l4BEjoQpriTjcyBcaoi0LRGRd9l9tuZjMoygeox+d72uEt2NU7ztlPAhCUWEjBT HyN/nGmusPSCKZi0ty/tm7V96qzjJim/6ahfvQdxAGcsB/4MrG0fDB4OxRZ3nQKD
xHE8Kwz57AF79f8d3/c7dUgyjdlL51OhVNi4pjggK8hskNCZR0Fco00wIKK7tFHT 0ixMBaxGPjzWE9FOXb/TzbcuKFRZCMw3heLgm2NiFiCU/W1CyLeyFyVbsUyWFoTT
=WKjm nLTZF3SuDkewXlKtZrObXRRXBIRkNIQ4iMGewRHhrp8LJgQ4D4x3Bw4OMUXV/x9S
oPleprSEkx9heWYHSb6vC1D/TvsMfU7+sE2cojYJI6imIhTLEW9rAZedNw/ZQw/j
1tWpHSCt4NBRMFB4wKLrrSZy4iQZd6+bYDrxcWYZBN65TvVVBO6OSnAEH5cC/7/s
lEMHYqWzkwsAD3d+BaewQIrGv9Dp5IKRGRrQYkel8/+d5qqE5vzwW1rktObdVhxy
Y9y+xXGKstpLSUUTieok0lEB+y2zGDLSUBsWlQIhN1Srf6rFmqRjZfe3WGj6DzoY
gmuEIzQemTcn1i0Z9sUYi6aM9vz0SAXvxdPsjzZmQgAz2TdANjjqjIBtbG9qcNO0
bDA=
=LuZC
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: 659FDED43DE155FB772A339B343CF1218A664D31 fp: 1EBAE111F6EAE0CF136358E8625C5A3B8DA21485
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hQIMA0JLr4yo8A4WAQ//TVI5urdUpi4RQgn2sst/1hF9NIFu9StHg0iGLP0SB+k9 wcFMA1kDHheI9SLWAQ//ZXmA/CzEJ9cfr5cLf3ofKaQaS7uLze02R/qOyWFYSVb+
XAKv6q1MUC+ykwU7vsP/scADO+GG/4swuRDR8d6y0wmStXEbAXTY8CzeseIAQA3h vhF2x2OGoA0A7u3BnmihcmD/pjd2iVcf7Rr9DUGl2Kyzj7SIX3JbTjwIZt1SmNfE
spPP7F1gIanG9pgMBFAuPdudIbzz1H63nBkTAggKRvFz97LbX1ZJ/7cAGcr+ljor e8nhuFQzFKXrsgLSXgiH23S6sh7tE5Tk2DQZ/OexLL3Z3OrHxmhRiFVx2Nwx1LU8
pGfNdkZs2RNp+9D/WOgV022GEOGeqv1pv7RX1Z6rjTCd0FtKFjRTQRnZpFV2S5o7 mkZKup1zkZL8XaOcArRwx/DAOoFSBKyqQ4PlIz17ipcuocZj6VxT94rnjEE9i0oL
Hcfp+ntLk0Cz9StCK+9CGzuAdfXLSXzAmafvC/7tqxHLSuExok7OyHxHd8CNAWzO JPjAU299RUS8nC19+o6XSu9DYOxQlEJ4ccvCksO7fRZBAnVmPC5gjOCu8h5oHooN
Wn/3NeT/RF97xL6zUE0ITCRoCjyT/AKxXA03zEForWypkHXSvj7wD6DKX1Vt8NmE /k/VmLbtojaqVouzh5lxuXm+orexY0tE7APIEBbpS1jCTbo8ZNYnhmRVH0b2OxuF
se1t2T7aJuvdxKwwwEgreKcpILPAoefT/JKTcjh0SfTbufhEcDnKjRmjB4wyiYse bAA5P15e8MJr3BJRb8YwkDze7K0AKtvHW56L7uGqSetS7IAu7eyhG3w9Id8RylPr
wqMgXYA7s1OIkwriGPl0KKoZyc/dN6+2HXbDwDnO77MBRNA/KHd/03o6jM2+5ZxA 5SAuhD3yZpPIp4aI/NhxbDruT5Acanvkfx9XbLgtnr+JaCL37N290yCwvlAnEKhw
XG9nEeauWfB3e2BW6RrVZXHGpOtXIc9/xcISg8cNmqnxuoHeXqNON3QFNkZSpnsR jerrOEZuQ0CVoc15WTvxsj30NpH/50HeMNuLco5Mdqm9mvRAEgGYugTedn9rzcAS
3bhD1ue9DmCpFKjpcONFU987ev7A60VG0av20R3pLHj472TI5DX5f1NkXxe6Yvf/ qDUarFOaCnI6OOA+AsutIdH43OT1t4oOKlInfzx1zHbSF++hS7xKZi7fgM6mgE7c
u3EF7ddWIkFWX21rRJWEBod51d9Vg5uQfaJVYAfmCtjgfEWtDlNeaGLBqrLyAsXS BPXIAPFy/s0TaF5PQmrZIPRkSkH9bCL21Rb34Lb6M0jF4xuXzR4MRCJtjYfz0rbS
XgHnFHa8vUNK2Kj3VfeNi4CNlJaKKSdxVhKnXLq9tVaIxE3l7NsFfKYEeqjZCFoE UQEDXQ4COYhunZVWcKG/g6TcezUnpK7jfdeO0+yQOXEDBIDBNA0fZyRhcAUbT1Bh
QI6fiNp9Z4WCXY4MOTP3s5c+eoGFwzA1iQFJ0W9f8Xf28G3pfQTeU5LzjXg7kcI= weRFN7s1qA0/0y3CD8Cn9Dmww3y665UFV4Hh/A0evhIMrA==
=Uje9 =dgwl
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: 93593B8B0B7B88EA2DCC99F9388B6A662C356822 fp: 17B8FDF68AC123EB666934B17D0DF6EC048A5D77
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hF4D9oMBxyVlaokSAQdA9tHAO9kyV6aj0j6XWH7/VK/ML9EuLdz95Tq0mbss5VIw wcDMA195cwtvYnl1AQv9Hr0Fpe5haXmpcy2kaoy5beaJP1AXqcEY5huomy3RpGex
DaDHuifWmKJ8LpAcxHVx46+/dpyhOozT0miyCmIym2bkVACGz6+redvkwuQE83pz 7/J0LB5nvjx1Y5SFu94l8bD7AAwgTnY7jEQKVDPtqzKuHRFItuHcYEYyYukZk/OT
1GgBCQIQ0pf58HpQQmV7m/Men//N+xIqm135d970FwzxDgsVPpOsxmNpKI8tTMyB tRs5QSiOB4zfboGB8uFwI0YO5QWfUaBcK5O+v4KgaywecxDlEed7FaV66CuEfNIo
4ovko73ionZ4eVMMEx9ivbyUw70fE17Yp0OZB5WpEYnQa+cbzyqZbyANavcIVWbd GFC342+dh+TX9cwKxj76tUFtaoQLfB/ThCejxcOu8Z20tkagGd4hV54p1Hvo1RXr
IjZm4O0v4ELm0Q== 5sNop4ppbq0yDmuyjYADTOnv/eQKBBXTXDhR/ZxzRRc5+lHvx5oOxQplqDAsd09k
=pKAV YjjichphXK090iJTrHVB5EAQb8ePA05JBysA2nE8rMTFcZ2bkCek27nWN/SoIVEi
0faFpiMM4Mfy2cSAlyod+xrWVCOX7XvvoO7a9mEKl21wEO8q3FAVjl07DdDPM0sN
wMplp8fLaz5P7KDMf92m6MclbqsyFXqFfsHI9gNSajZi8ylzaB9HLTTC2d+4YVjO
QUIuH8MXBa+fs9RIcV5Q0lEBjojsANreO8pPwoAmmP/ExVZo0nXJ3Ovdqd8oKkbc
6OYvaZJnVUfaUf7AAeBrhjudGymJaEIIQnEN4juF/89dg7mqrn0VLmRsuHAc5BBB
TQw=
=mDJM
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: 0143019F62469ED5A6A016C219CA764D37590F9F fp: 03ADBCD31737EB474A4BD235CE615FAF927A2054
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hF4D4oFtgf6gcosSAQdA/ziAtNNZxwqL1CmVr8JeT2OLocQuHYf9SxnMBm6xl1Mw wcDMA/IHQvF5YsEcAQv+N5Gij2qXj4gjhGxSjpORDuuS9HMyAWKfpshnvYWjr3QT
pYvXfBTchT88Utt6+WOXDyUOAbrJREtJv8o0UA/YiZCVnt3rUJJCqgOiMdOe8EGg Wdu2FdaYv1XHWbTMcVH0+B3Pe4INQboGiB2wY/DCzA0vuverBR5DciZ8vN78k05W
1GgBCQIQWzeWtees9enj7kwxZ2XN5Hu4a/dF2f4XgbqEg34SWhwltb3BGgezS6co +IqDYLfljeclaoJlXnlaPOtWKI2OWm2fsg8/4lBqGnsJ92Y9Bc9qXbmaBgPvgtkU
cFh181dESMCzd/+RhcxdHT3HEZdG0DTZcvpn+8Cddc19SRaV46ly8Mo5umQa+hHB B3dYDNZ1W6Mo/wm6Pk7QMVdZoJDGvs7PpOhJ3D83koSx4BmZvrDrPpwRtWwkbEl/
onTCmWIYSibMqA== zSvpL4qXv4NWQjc71Djj9/uAtlXIt2QPWeCCqsoyIMHd7Vr7qrCAcZpQH2GYnn0v
=w0Os 5Tb3ZcCH6CNRrKQMS5Fn7OH6aeLuKHja012jJxnplYHzpp8hdL/ysqLlgw/wKxS4
rOThNHDAPtCoS2jDRmaNJgiSvOwtwPq1E2JkaInjaB4xciuaK/r5R1CwE7J/uKRp
j86JEC4hLgBwZX4llzMgk575O4CN+5HX/ywHMH3JXozkBPh3EBun79Il7AogUVRa
2uoMm5cHhHZ9M077YLOd0lEB4+qgj4o/p60cx/oiaGEQcQzjcYn8aoFyT023xuta
qrk4sKQDKQo58tQ2FzbKxQeKE7Ehadv05dRevc9j3+MwcbyEDCzbZ1k/zb+41mCj
agA=
=2PBo
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: 8D600912FD42EF5352D38DD22FD71F457EF7BB8B fp: 04ECA5DBF73E98EBCC1FF0B018F2D15CC56BE487
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hQIMA/fyan/DNa3uAQ/9Gtba2jw6Rzb55Ug/tRrOcqbA/9kx12p2yucnHm49DdUl wcFMA/fyan/DNa3uAQ/+NqLkSl9GWeDK81+MPPeU0bkbOSw5Awv2xn3eWjFKIjEJ
7f2/bFO5B7LCncGQmno6vXFc3D6B5BxPrXXFOjzdCrTZkl4B/9sVIl0DdvhrszEm V5H1Hr0a3b/Vx0WdVM5eat0LpH5/OFWljx0QNJfqFBz25TFgBqHT4Ew3eCtZFxJC
e3qVykJpqj6rl+b2fpKrVjifdYb3/jG/02rIdGcaep0nU7iO3l8cSLhHs9jNRb6g ElwDpI6eCCkZ3w4Zk3BsBwCwcRt0kCHXJb7STFJ8OGg6qb0mB9Weg5Rauh8jArao
5gapzO6CG4vgAwfIhSaojtPMIXtkmB0RzGh7OXntonKsAXWnySHCPVOU6DWiVHEb VhxrE//oqzLjdDCNE7jXb68/6Rw75TsKZ+nAAtecK4qtliU+gP3o78utoWb4+8hJ
Obg6QZJycacuSG8ML0GNpTA36p8XRWDmeR1/FO9gzyItzXIfCf5pOnUp4v64vuC4 0hhbLjQpKcwPEZWi8/O2gzePHNudHHPwVHOKcIs5kuXF5TPd9skiqZoNTtuiVtGA
QqsY127RsS11drnr9NFAMdbNAN9FCT+yLINtDGDSZmh65oHxB1qIItnTW7aZ5Lq0 LjM04k73fUm4JlqvtlSLXN+epm6ekTQWabslDK6yxXIovu8ycBS1EVudRjMdpBX0
oGL9h0+uEDcF3HVihic1qs1N0dDCD17VYeiikikMgnyczjvMVHdeHaXKGoeumVlL 5bi7nKKOsELiZ2k/bULmbLoKmiKSO9F9ulmQGTeH+dOZHPcPxDkRa8waBw6vpM47
QzuBwXyAJ7E/pg8N1Ku8kq0+CmaLmDbYs+7HNRtRw9zpznmX1Z3EsrVGcO8YRq/r 4UDEbOcadc8+mAsMVoEiyGl7HNFWyVp6W0V4wWTtICZdty0AK6nyOp5VF9loUewE
JTBRbC9mr4L4KEDn3ymVAUeQHZAJZjwOM8shsoE6YC8zBmC74xWb4tu9c20gg+28 jDbk/swUsILWdgDNbquwGkgVbbGWTuGt8wsc9i5erX5dkgeM2ghKpW6PgtDveDkD
WLU//3rR+pFfRGK+OBJu2emnEkgm/5sHFXw67bzqru9dTiyLGAOWBsgmMwPjIds7 uSINtgk6n8izcBOmiw7igD8+5e/bYpiwrHHvgX2d2FqnlK6zoTI8wjsekp+Cy2ps
hO/PMvLX+u7S9qJ1p8DQZ+PJ3zA0saHMg07JeqRxBf87H6fFS9KWjl7dtczk2GzS VO4blkqYmdkbK3DCEQoVrShrRezlSU43wq4dZ6qi97Nk70qjbDoVuXpzNWhP3cvS
XgG6ZoEL5r0su8MIo82lsdDMWeMvs1H40W6d7zkfWI+qVXOLZjNeeotzgVop7YnM UQGmUKqjHRzV9c8lBKZEWdeJlyiWoaFrSoQvdE4an7QptYUjaN62HhG7Fwr3mzxJ
db8zhgtXrMgHODG8519YP8zNaXfQN0pjX0A8rnFhNVPifcjYiOKUB6s/fWe9ovE= Hbewf3rU3gHC539+2W8wZ3teF0eik0gDU/ug36xun3uZ8Q==
=GLU+ =eVAS
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: 9E561083EACDE14694C73A323A2F6C1D153D753F fp: 9E561083EACDE14694C73A323A2F6C1D153D753F
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hQGMA+cOSmNXMUmKAQv9FJ487BOvGvaLZIGYwLqElDt3GGMvhpbwo+UgS0Po6Gyq wcDMA+cOSmNXMUmKAQv/YwIURSy3K/pt9nr7Et4FJmjQVh5M95bMlve/7w1W1C89
/DsAtMlpES1ieHmfMQcQfb2IWXm3UpgwwLMSbFXsB6OBbZhDpPM3MI33ZmYdLY56 bFVodCQJuKKH99o4pC/FlIb0DWmHY3AsHnTyC61QJ0Mlca0W5eosye4vzeI02KE8
oZdkJk5vf/VwpmSUvWANkFRhDxce2U/szWU+9XdRg3IgVprpu83a+DbYto2lENcu 9FvYZRLGJ5f1XwIQTh25K3dGMS2J0CMVZDYXBm1EyqqdxoPuHZZOvas29j1CL5Of
8Eyuou8bTKcquKcuezUqIfZiuv5G09GUOx59cmVusJ3DRn7ozRadJQLiwd/m3z6v Y6KRbgV323N8xXkuP6THBjVnDwyQUjnrLLlMAJX8bxBgKMtGcON5xqRji4SaWHeN
TrkO0lIfiQT1lQnwtgixhlN1zICQ+ujJzQDNqHrjjxLWjmvVgWjXOyLCx+ivWySg 6ZbZMVjk6o3i00XOQe5xqDcEnBNtpzPXPbIf6enyEKfbzZBMoS28M/4gMkFtmaaF
a58NF38vDQKsQvAv2f1WwW5/xeMGqHPyHPEipEEbDzEB+iwZ5K1YHTj2ocBHiOtt gMqdH0qwfu4ZsrMCNUf3bQZawPm7JUxOVhzHpz/J22AxODF3CpH2romgJX2igtZ0
DheDdmeC9IGNTDc/XrLmlW4grrUNsEl7hmlT75A9R7w5Sal094VNEh9L7bNj2dqg XX6nU2iFJDPCfpIIqJAq3D1+DajXDSOlkSmRU9yWUPI4PS2kj03xgR11YDE38m6a
nIQjU6AgyYm3vd/zcA2ew0gl3FimP4qQO/M+mTe/SNA4C3UvdbNOBwHjp5NiejXv 1uvjDJ3p6CfFpBOs+gL5DrAspW6kbOyi309OmfQ+WWUDvSBloCePTbzdbFDPR7Qe
uFFbZOfgNlHgRlb6bnGh0l4B/jLdc/21pnGrx0MJdYUl8mn0u9A2lssmhXMXgPGm j8lu3vwkT/lOmR/haIN60lEBtig7+AKnJ5218r9So/4WOyl33hYikRj2G/sjrbPs
J1loxnQ9ZskDbnA1g6gXP+vPGyXSzX/R64OM3EKaA+T/LBZ+f58Bo7QYGGDiAnSS IktUHFgWuALcNgSCYPkx48WjHUcpjTDjAxkmgup4t5t9wupl+Hf82CkcBrffbnza
Yy+uj+x84lQGz1kdWjfA 8sI=
=fOjJ =vFuE
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: 9F08DA9D42379AFE6610E9E615CCEC6801DBA02E fp: 9F08DA9D42379AFE6610E9E615CCEC6801DBA02E
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hF4DrMuSzhFbHkQSAQdAM4iNYf1Kyv22rIy8PxVWrTmtRleonfVYeUCSWuXjx3ww wcDMA5bUWViEqX+EAQv+P4bjeVEVjMrI6tv/HaJd7PI0jDjaHLIKvH+EzamJWM+d
hRny7s7V/KA7nd5o/XYCZR9kJpD5UI94+DyqVxy7u8TqldDmiivxWks/JejKF0nG +bf5dh/ChV11bqNn+ziqTQKROOnjaWb4dKmZWU+12/kWUOVrpB2KcOj9QPOAZra0
1GgBCQIQzP20RqCgBpJio/WKvvsLd8iFSDiK7BnUJt+aKTVSK0k6I3hTUzTsSmOv z13iQzZy/aMSMHLZbOMzEpNaqvNSEuqnl3UgeEnjTav7JuMzw9Y13lWw68i0Bfog
4H26OK2RbI0eqmlCwAiO5EW6SUpIr/4uwTZrUoIJkr4FziAfrqzTrPjxM8eAIPF7 QHQQ5HecuP1vnBfnY7j5rSx+ivKQZ368idArmcVuivbE3yTnigx9EJgw74TOlmOz
lQ4w7IDFLJ0+qQ== p9KuUQzAoTMQ9xle7Af41Q7vgI3sZndWvi/8dtcfPGe9BJocxK536ZumwXmwMZh9
=0RD3 htPA3s2JhnCUwwU+vnFRZsqBkbYRxgTlpE3FLWsfFXlRoqaWs9tz88mtS6ColxqF
035i3L68U6gZpXCNJEtUhjx4WHHDnjKi6bvQGx5jCLmhnHsUU0dTuSa9fr7SY1Jl
2G3nwfpCLaJE9IH6t00GRqgVWtniQLZ9b2UJ+uFbqgRRuZ9EWOCZWQvk1oq1M1te
QCg3Cbu7b7jZjTkk1GKf0lEBZUWHLxamR+THxo4I3nZq5J52P+7UB1V1sylO7vYk
1MFrHazA+51LZrhn57FIkMUCQ/Y4f/jOSFVtFVCIHD0j5+SfNnWFC2AQYoKH42Rl
Tcs=
=7YdW
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: B92DDC9B908BF3917758D228446C51E049AE38CA fp: BA6328948D50175F196AAB5111F324603D12DD56
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hQIMA8YZutSkx0fiAQ//V+rV0GdG9Wl7gtwhOQidk5hFcGi+gWc2V2CX5KRGiNM+ wcFMA8YZutSkx0fiAQ//XrSOZC3C1b53P7Nxq4lpJvkjFX07YwoQ2uKXFFQLcSC7
Ej7UwpsozNenBKJPGCgW7A1TviWVN9u97e4a++6fPMQSb+BZ+7jKNHWSU5EHUqm/ PufLzJvRxceytIUhEhCUbx5hASxLfCrupKSQ33FCTEg90eMRpAX3G0eHC+0bj0Ma
TmymPa4HgonKNgI1Uh1T/Mlz/shtugCxS1oThQLIrDyvyzp/B7HWgvtqDKo0zUIQ qAwAZJnG+vnLHc6W1no1NsijmGXvRzBRUdUk3yWt/pa+9qW09opJPsyrRwye3ZIL
7zM/RN/qNdtXWd26pmzk9aH+yOLmtoB2Cepgdcy6yG7wIKge2EmejfM6+mLlRiNQ IJk3rmm6d13TA7RVRHmy94TCIGSGHqfDUXLM405oxHQoMpOvXg+hl/YXqBNU8Lrv
WqAqetZVtJYfiy5EqnRNPQIzbr3+2dTsIORpQcFvGB/ULUbcSDt0HKXmWQ+c1hZo 610dKzKElS7cksyVdZ2LNL1Th9IvwxnN+l8+UKkq+aj0x5CtuYNjdQnucEthgZ4z
nXDOt9Pz4Wly7M9wXWwWwSDNwM29WEsdZQokBpaN5Lt58CszV6MQRWn852xuOV8H pwayS74uW0vmpCP3RgOhQ4hTdr4ZKxuQbaPeE3/V2dbTwT5XxUSTSOJxf8/Qu6kS
JfVQxPix8FWrcOOur9n7OrnKf4ANzoqjgbVZ7kTo+hTzClWCMs2hfXnzVhJviNVh 3T6hgIufirl3sIRGVsLn/dB0GRvgdrmBwuxyR1pvJocRdpnlYHciszZFnFrhGihH
k9kzLeps5BIQ23qSsPBaMWMrXyyxsZd1b+1MUwCliw13zQX5hi6m07SGCJyLKfDG qPF+p+UweYQi4CtIDOC2/eswhA1snA0oEvvMShCWrACGVLiGgDc2c8dI97zwfHvu
C221sNKCoaE2hBQ0ZqGp4j0c/0R0AuI66xOyj5J+MOqJlQvK24I1uO/8n6UMNpnT UQ9RGk0deal1egcQ5FshMVJU9b/onW8dw8q3nqTkaThTZgUJChQ/1pglmjb4Umk3
ZUOvA9umkWDmSHH68SzPjeXsoZcy+mFrdTvTqaiKuxjjlGKMdNPv50gWNylv+r7j mwXuK7lX2hIguVDrgPu9EMN9ujiV1uE6ozLRjKDPYlirVx+6t8IKS7gEMv0K2gPM
/VkS0h2tTZE7YKKHwo7T4AaPGg/uwxD+u3+i5QYdpJtrY1UPk+uTOmCFtBuur/XS yn6BUUID/13Gr8jcGQW/0snIpG50J9xRSLP2XtR5kPhrv0uBH8ACvX3dRUAPdorS
XgGphqprcxNQ+a8Fm6pgpNQn7F8QGJEbjTR0LdUhTScn8wK567d0Yk+mHszdzZJb UQE6Q4EsrEFWxB8HMb6bQ9DsgkFJyDC044nd9HKpFI9IZUlhP/nAuTmqSxCMErVd
cWDXSe1BNSekAqSpJQDYF+qldkR2F/Mqe+tXiH95C2PCtPkoRak+JZuKoEqBxqc= dPG0PyY0nUUA8kqnWtHpFhm4CCgl00uGr0rMwqM/ienspg==
=KDxH =YQEC
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: B643A5D780A01F24E95AA100DE6F8E2C149C3748 fp: B643A5D780A01F24E95AA100DE6F8E2C149C3748
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hQGMA9vEXLVODHp3AQv/QOoPcsrKBc0fzmPrUbyp7dApHFbwnSF5JSQRQfGzaqP5 wcDMA9vEXLVODHp3AQv9FIxXFwDFg9EQ0bwdrxPWzrZnVIXKOpQeHtv+aA+iT8Hi
Cq8PBKEoORT24eoX11Tr8fba0i+PJBB0w12EtfBOmOwGhqUgOYXw81lfJh/hY3J2 pMz8kimNlgHjWUthJsmAujMcoyvH04PTDlJUd6UTzVbqSRaSh4+8DrSsINyofjgn
1okk8Sm+tOJ2sBMLYFEKyoOmLmhbhSfe2uloPhObnFiaBramMD6ViudTNAvSVVmG 0l/Wy1w1Bv3zmcAZwHD4/sITjgCZ8ETYOFSsZ67JoDz5MZ5jqCSSrvtFOrDIwlvl
7xORVno5LNzJ9DHBemeKvfJsoc0nLTDPK78hBoJ6Z/926pZJWGGbufIk9eJ7Ayh+ sZTSY0gU/J27GJ7Oc2FJ8mxKeWN+ZO5HEpRZgoyo3rj6SKIgqw1mYAVPwl/e9eVv
9WgQfxGwqKbAePydYPgj/HPB0UuZy98SFWVXaoyOL14yoWsDNDRl9cbBQk73IlOG hzhNe2A9bpSWFjLUKSrAW0VAai23HrdSHup45rKOEv28iAOSOTXon3jZNSH1au7K
0MJZQLFs/voEFHtp2vmytEspQYnzoJWAbaYzuv1JuJ7p4lg+KMBCyHzY/C4PyBQ1 KbBKahvvdJ679F0/9zH/iZAsnrY5oW+shgIjpi0moWnih0YPwZNu1mzDkcfLDQDH
01Y1qKyojRUunjHLtOByWf6WoN8BowhaVlDTymjsZxGbbJ4gGPXBZzGwRQLJIJYm F60eoZrg3iieS9DWcxOksbprqWdyF+B1d0AxrxR57Ru2nFdR+ST/8oIcGue6I+uK
3a+33exsOywTWmXK6eXCe4lT7R0WfUBxnL98uzEyd2MrZwLlrjL6t61yW2DPCQA5 kVSJFeArdbAjEI8ldB9WCqkLeKXVTPGLcOOQxSWLNFsHuuOpZWnWpOAMF06HtBcY
DLNpzg1xDNFOKxrqOaAc0l4BbdMLoLTJyE+bQApW3z+kFWFXBgyIzwn3hhrVaqGF eSZHsqGHgyvndIgQ8FLv0lEBXgxpZl826/2gkLVSdNveCLF90yxaagrtdbTEfm3T
uo6L2AWvUUvLeOR1APyQi4zM7lZ1TFDRd8j9147P/XyvEpH4KLpOsg6YEtBNL6tK 7LIUdeZlRhYe+eg0diWcAyDG1XWgXiCUfocFR0yfQRPHWEVXGh98zZ3MFndPYrfB
Gzr1NkPJSLY3m42NUAjy Rf8=
=vkun =J4gG
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: C19A7D807525CE24443CA9A49372E896B41FE700 fp: C19A7D807525CE24443CA9A49372E896B41FE700
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hQIMAztV5cc72nziAQ//XAPd5zFKCAQJ/a483lBmHbF0619H7YnJaWkPyg12pQ/d wcFMAztV5cc72nziARAAieRTsV9FNm/utlda05oE5ALMM+clIAtxw5grfaNBWeUo
XgeZEN54TGW3ItCrw6DDhPM+HU0msRzk1lGqvMLY8ZrBIFQEQab/XAGFI3/LD01S Xy4fgkzBQx6UhKDwsIsAi9wUBS1Dzd9HG4tUmmAf85TEbX0llKdc8KD9gdzt22C3
TWlP/G7xykD3M3DKR9du1VSgFq8VAgZXpxZYjZlFmdG0R2S566E4bRpLahQjc4Ky Roq2oCQKHdomA41qVpnwudPQXDakc6pltLZy+TAuziypgzLHc+7nY5Kd9wFhzeGf
IZs8uONA9NW7tXG/uYMqlrvLIsPXDvMCdp0g8tZ0jbzDe6JmjHO8F6X3C3PTj8CW f4sIQj+ctHSd3ghGu7UQpJW6W6zfmkBjSHMnbZj/pQndg9i0+2YtxUJ9yqij5q0P
e1bColDBjFyGjkVjdm560zayt8iyplRV6HFSHJSbZM0aDvxD16woIgtTtcyNgSw5 zIWVZgNt4dLoik3Q/CDDtw7u4IWPHN0vSNJRgeylUTMuF8Q5oVQgGcq6TTUYtrxp
/kcuUL0j35GHsuyp9MgD3R5aRo6K0hBMQ8BNO+8yMVK5SaUdx0YLfYldsIzCyjQA 76h/e8kFdxfif4fQkHVUB+kDvrGO7CUUjtgk+tMop5165BlkdZx3NpcPaAuk0ZP1
bzDPgdVgzynZ4HAUesKm344O1t5yse8zVkXEZcnTaD6B2Peq8d7KebAWeYTdsoSV 9CtCDRnGBRCz5sjjailmjEGXagUci/nWD7qT02I+ZWzqwnHPYA75FBmIrb6qeUNm
D1tCBnDk2K1Z5hizQnpTKqnnxvrN6PBmlebukwBoO4sKbV1HbNLcHw6qPVnPdZwY KsrAVsTNqb3o/iuLHaBAdEvncOQnV9ne9QAyp/i0KbLyTQ/zJaZEAIANY2GspRb3
XsckI3DAr7N4tHvYPB+/VxGWTDG2YXt5F9uEF1UP2LG9EywKwlv7txVvOODZBdif gsCnL0vr2knofMVQD618WByyiTt2fqTnbfb47Jadp9otsim6OVNCzxYxFKX3VpYr
oLF3CnHjPwOe72QwMNAAT/NEkvj1zHq7Gbs8sw8wCPGYK8It1pP9S90Twd4wpN8+ ncZxuxn+FxIFMn2tyFC6Og+xYPe4eBtbb5rqaEZdmzwYW2FMP6U2b4YyLqpQE3hw
GxLYUHviJ2OKeNCpnCScDlZbeSZ73tPCXt4AflHtmR4xm2WeYOGLpYf0qebcWE/S miwo9ODNgtUpbVBrb5pRM9DVvsEVmibAEPV7uWzpPXFBCaLIlWSuHGtvWttEcQzS
XgHn+1dCTTZrTwg2a3/KxyZyWjJQlNpelFu01nZqRf+2sfhJ87RO+VC127j2fQ9m UQFATosYmOKZjPcjPAFfr4avz2co17LZ38N98JQ5posfLFMlLMxqGfFcDZmQdxep
OVQRo7SppJ1bGKePYPCxr3n2yX5OAg59Zosmpol6CmnA69+1XI/9WKO6DjQLhIE= EGSR4dkO4xzzZ7ORcCdxhZaOtcB092kIJKtM9RCFegXo8g==
=T8yr =LPni
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: 0DB51A7E90AC6418B7DB83724D38970874850C33 fp: 0DB51A7E90AC6418B7DB83724D38970874850C33
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hF4DE0EFwq0sN6cSAQdACZWKgv/UBGhkQYwzobY7i3bjIqf0h2/+tQ8a4Y3OhHUw hF4DxQtfVaqAjfQSAQdAL9rn+f5L3cPwmS+NM7vM5tR0VCDD/p+b43nFFhAnVQow
QLX6jxqf9v8mm+T6bbIw9dPBii2CcOQuX08snLZND4U2krCDmMje6dXv8vFqaG68 XcSpJNehn1E4JmgY5ixYk5hysPoDTanHvytXKSSOJF8XpybUz1K1BF06iiCnq6X9
1GgBCQIQI4HHAYaBSQyNs5OzEdnlIQHITx5pHddPWAuRdZjV9HjZlTFAXt2OuyGo 1GgBCQIQfTwPQePieWp4usWB7gkimOQ5KeSmMRQ8vqRTa9i5AXzWlGruP/i5OSHq
mDJ8Q9IZ3uEryX9QHYj9xMI5EiWPEtG+F/dOZTdDFiaecFShFyT0dtjbKpq9/oLo FAKhcdcihAt9jFwxsAymbmrpqWOTA/H7uu5385cRiCRvJUydmz1AjD+e9U96dYT2
Asqs37LyfqxdXA== Z9OHZM/x7057bQ==
=9o84 =dZEu
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: BBA0C26647A2D87ABA186D6F3D284EA725F9552E fp: BF3D5CEA36DB58AAE1063D0BB341078652D87924
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hF4DZmNQj/lmIGsSAQdA49S+dmUCPFNLnmDhAxcJauiyU5WRDruQ4/qoUHAhlGww wV4DZmNQj/lmIGsSAQdAMt1u6obZgLUjVDQFJ4cXDfUwzy+n9p+rZa/5DtAC+R8w
a/MWR0oHxJ7rjnWORYnrjiL2ZroCpEBylIqFoITN8rJ3+15HdCheYNQUCtqDunux ChbOqargvUW+TPuA2KAOrH0m7QrzpUAXvk0grF5qewdTwvp9zRArCobkz/xwF6jS
1GgBCQIQ4tIsGLzPYuMieuk6rQQOxZrraO8kbVwT6CAKWjdHROWlw3tQInIFj+cq 0lEB/rra99F+Wp4c7IBque3HnyWbcNhw06BfK8jhmwjLcy/pNZkj93WYcvannZLJ
inH1dMovK98BGeoxkTLH5gwyfct5fyopnph9E3fIt5WCXuRV8Ak45Bv0C381a3jQ Lc93MffCPEK6eMXW4cFHT9BacyGTHKtvagwLPOo7yryKwTs=
/0vMA/o/7+lX4Q== =nYcx
=0Oor
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: 73C2C9954D1BC94DC6682525D2FA233B52AEC75C fp: 73C2C9954D1BC94DC6682525D2FA233B52AEC75C
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hQGMA6r2J+JSOMNuAQwAmiOT0gsE4YTRfJY0Y6j5Niba4O717IHAPLS4ufvMTtRi wcDMAxSu/PO9GEkJAQv+KGOnoZBVSEuWqR+m1npSR59qdPU/XQpkfRKTKK1XQOo5
ea0092B1ocXy6ZIW9jxQ69dZ5hlBHo2XOc29XmxJdYNvYMQlF0CDvy/iIidnKk/V 0IU+uAnqweIXaScnI5+Mf+k9QbVPUw00w5ot5JlXfupBL2dS/0ZE9a8iESEu/hIR
FuoDH3KwHZRXWOdDoasbNdwemB+7b+mKE2QwEtxCMmXfPADjSJVkJshASzzKIqnJ d9FWSMGs2BwUlCVIlZPSz/p/+5NaxsckWKORDP8QBABHQ1c8bzq4yUWCt74gkjgc
ezM/2JZi93RNk1kEEy26O5MgjLlx+Hw7MyV9TBvoGAsapIQ0F/8KqdL1TAyS9tZk oK2idCXqkvRaPe9ihiyq8fSWtKUPq84aSlQ2cVJMQ1C36xdbQi8Q4gQnTGr9Ncup
kBZK41KZ57OR9/7o9adUoYmQFEEiW7pKPjLsUinn/u1I0savVVUqnF4laZlD0gcN qUbryHejG7Zd1lUtgUZDPVdHnuDck2OUjD6R6DOe4U8dH+5/aH8mk1u7iBoxjAw+
Rcf614BAdlmatC9L5kyJ8y9MYyfALEAbduX9VCx9Ml53hUMcC2pZZyqrB9vRCc9a InWUubfQJzEwpBZ3bojfz8oWKoEpToln3sJGfnlb/ssPFhh+AiH0sBfRgqbSf5Jh
/dMDSTsD3XvwMTufSflZqbqHUxVwZmxdj5XrL6eLtqwPJw3TieU90v8KBuWswbOH pCMDKN3X8sy53pJdcaENwSRbZ4LcgsgyR9XihG9ZxGgPhXpDzMxZ65pTrvDjz3Kp
bKU7bJlJTsB2Ybe46INm3hbplw7+6bcmRon94ApWM3BAcMEwHx31jcFdnuhsCj+C UloSzEjSSrQNE+z5sYbbjRTNk8YOkVW6FpzU5gmKrnsOFLARd96fdAvgyI/9Etuu
eDdaTmMMhq+iYRFLUy1z0l4Bt456lbnPk53wVh2FTznOmcp+ifs/1un7lA3Hs0Q8 g45uD4GnNrq/wd6DLN4y0lEBUGFCPdh/eLsgsss830UVtCs2lQPfj5C1Q3yxhxjP
ZKr6tDF1U6VvQz2G5mKXAa3hfgvPMUyLwuaQX60xKeCxaJLyg8xjFuKF+/FVM5SG Hae+f/+bTfpOepMrd8huxQ0tB8qKDW94mdsikowJewX+5wV5EdErQ/4G2YtJZTOA
1KEM4STkW0U5XTeTCZ3q oTE=
=0h3U =3jwE
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: 3511D1A5B7B2AC97BAE8AF3EE758168C000375CE fp: 13E169CF5C35EF164628764AAA2EECBDE0B38CF7
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hF4DAQRCY74qADkSAQdAvIowg8Xclb585kkv1RbnvQyw/IH3ilglRS8P4/6KrjYw wcDMA8b/EJ6Mi55zAQv9GnVQNxIAnrBOPolTnJ46tHKs/Ny5QCn8i0pJ0cmj8LR3
wDVdFJ1NGxYaZS8GwxABxWUxiPwX3icUpGdkC9V6/SDPt0rLLfrM/nF8bx9qn8m/ l6eCrrvb5aEZRYV1DIMzP9BR9D6G0ShZBsqcBgpm3DgNjQDD1eWAAZxMuWMLMFlQ
1GgBCQIQ2/4+OS0baD4CY+FQxXrrlN7yQwz6hbC2MOmh4UkTDqTPMRX4j6VJClVN 0KDG1myVgRNzGXP2cpiJHPJPcdXTd9aNntMDzc/xpHlfW2UXCmdNwl9Q0NrMHR1w
s1gm2K1H3/dwMCNDnShJR0SqFmL7MENClZx4pViLd4R85dirVc/4IK6cWV+wjd4f xjcf2UIg6BN3yjxUOxxUbDPw5cRWlIUiIPC52R6V8hHBzh1UUhdj06Hln4e1aVp7
NGLewEarDP4Nmg== Wpa4K9KJd2n6q9XkF9aRuYyGybOvnPJlL6OHaR9PgIfGCZ+pufI5AneQeahrc+EU
=HKnS /DkQZNILkBEW8hnwkrXGk53CnS7GQPg8s1kiab7nIuQNF21dpSA4RATMlESC3i0t
BmTfI0HuIaZMxbnRvPSfQwGiMhf6ea+02QwTIjuN59lDuFyQBa3CwJXpiAAtFyyz
9Lu+HAsnRmheK48PXtLkZ8ldNH2r/IYFjtjbANKKzn5HelmPWwLmHo3N4YIerKrj
znhdrY/9imhtA7CiC89Y0lEB6Y/cfSWKtoOLkx4RKknkQURvyJfAMjRhVVFxGZCc
LerDo0Ofmm0z7ZgibYiL1W7Rv4TsnZXr1KDbSrJzD9PcSZt0rTQ9Rw7MpqBeHH/f
/CI=
=L8LE
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: 0C136F7514100470AD3EC8D37BF1FAEDB2ACCA9A fp: 13D7771BDE5241293F3EDA442AB3335ECC93DDDC
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hQGMA6N7K3Tfl3HGAQwAkX3y1cILzx7sPNoEHjRogEzDhEc20yTSIf9ezCYKaiJr wV4DAQRCY74qADkSAQdAERj1PfuanNLwdZgD+mojcIflbrh8NbXqU0kBicBH6SYw
BxNSSnMqJHCPRYmJduz+BOiQrnDpGVnIJj5FW3cswp4Ua9ez7pVK7XGffyp8pNr6 3ZBhzUo72iPSpfHOzk3uZhLw1gIxyEwIAfg35k+2GQUlIO2yFjNGMrNXEXnd2QKz
pc5ONXuoWu6cxvB3J46V1dE5f6dTPANo50eOlhmYqI73R+3lQGal11eq4jiOiHpB 0lEBhmYkMPlKeRXHAbaq2jF72GoHss5LxBVi88L68QkXeUSlITa4dN/YLcpn1rIA
wA/bbrcuuvltam2TilpZgDyC5mpXu4mb37UB1Qmm+2pu6iriQhjgVtDgd9O7dOWQ 1DvGGEEyrRt5zbYkOZsMxXgbAtarBf/HxDB2nHKmKUo38GE=
G9ow1j45B+P2gnbpew/piqaID3W6Ctv+A76iEUnlfmRt+elwdxoowUjXBYiBqvMA =xzey
gpc1rURhMwpFXDZ376LpOu+laqe249vuF8Fv0vpIXtB+ku0c/15Nih9UpMqHE/JI
I68pIH/Bo/PQiZH7R4AYbyzWZEOVyseMOnXxx+nabvSzLKX75OiFOgmFRRwN3SFn
LtiVvmDr29jRQl6jBWT+Hdx3KU269yWHRAs/IDCJ++ahLZcLPtoypUw6Qpzr+NM4
BlYglPvpW+4rIq70o3KN1GgBCQIQPv9A0Itmo4dXEwz9yIPBavcX0m9YHqkNxoxX
WBplWcRtGcLPiGvg84d7hhOkRvkinlns0DjP/74k1knI3Deyxsm64V5NsplyxlHx
tosS1LBdsA4fUxArXp/kzWD8317r3vzyow==
=7SZ5
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: BB333E772B60EC8A29E8DE641D6B8CC68E09BCA5 fp: 0C136F7514100470AD3EC8D37BF1FAEDB2ACCA9A
- created_at: "2025-10-22T08:32:24Z" - created_at: "2025-02-26T16:39:44Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hQIMA5KoiSc3R+FfARAAhcW4yy5yQAYAfmEqiMpQmwGZZDhHWzWBMO/dkJXke0kk wcFMA5KoiSc3R+FfAQ//WNYLuMOvDNX4ieMs8YwYFnti9ZBjuopwrPSMvNY+k+yt
C6iYT0FNLAgCnG8ONurf/IXteRf00zEsjhel6wanpZnb5w9NlfI9m3KArI/e/zce AhAFN4DX2m5s76U2ILjyJbd2c2ZRUxa2Pmv2BjVhxjHt+Jkh1AznWCqX9BxcBlxd
Jqea+SxGcTloGeWn1lpgu1Lg6ajP5w6Z8o29HNlMQ/8ikdrNQJrThRFRBaRRsgU0 q8kQAp2ciznmYePrPnZAOQkyu8Ik1A5/W0W9shL2LAfjRuwcqeOGEhoVSsXRQdi3
BYWD6n4yB+SbczVZFjNvuijLerAuRTwEXsbSDuqUdn2YS3yfK5l6CJycEpJJnMrY knGTqbCF52MX1yN/Z/AU6jJwFUPz7aUzpkJwW2Y8vWV+ndiyjZjyu8jT3qJtlH2z
36vedeJ2SyiWFHY0W5BRhATkYjFf7FyNYLseWIHVDQ1pa1kItTJzEp9UY5BkjaUL JlaTBBTH0GWtXtlY2v+W9szfL70IzJVaKciqY7y6G767i+jPYLFXVOgudsAAfnPe
8LsVDutNCgxz1hgdpC0kwAYB43uhVC+zZTbSIrJstP0NDk7n5q5I5nIXw2O6LpG5 JMp0uvm6Hw1po9qgpoWGmiG8NPp8Sl4BCRQsk4oiddm/+34yfBDq+ra9hmeqiVan
SAKFdAoOMhJanIr/KPGwWcMzbAPJjna8+DdkOPh+Sli4gwKJ1ta/PvPVemt0VraO 9z0oFnpBY18L8MVimwoeAJOoihuq2/8k3OlpJoqRkLV+ez6o65qoPd8rS17+iOqb
/xxj+gmdRQRbtl9bmraLwofOMy4egUNxGubDLIRNWtGIMyKaTsqeb/BoEBM2StBo ZDQwmqUf8lgYI1Sfq9qwWk88UYgBnwhRmyw7eZuqeCoaKv4x605cIydgKfd25xr8
/EKeeanHREB36DJTyvUYcplpPivzNJVjsui2RQp9MfdVA2o4bGn4wtfrVJwFXzBQ SeeuLzrWeXGQF3friqj2LujtTOAH34O5XkQVp0TKHXoVyL0wqgVPPIGBs14HOh3M
5x1eBhaVwdZIq8Eb+9F0eSHFZmz94PhYubb+Wf5YcuKy2cEc16yVgB7CIeReLgjV FQQH2knRmoQDARIzlN8+UCf29VVG73BxRG71XbZnVTL54mwDjBYYOW7T9A9DpBGK
PbiqcrB0r/UHAWUER9Urewl6bBmpzNccjGsPQQx7lkAgZqOjgl5bO3sqzriohtzS wo+8zzptoXc4bhIYCYz06mvuEyH3IMe2o4/MQ38fboU7Qsi3no9jqxRb/H6ye0PS
XgFFm1ImeTVy5DdtowCYryA/fw9XvI4cG7np9FK6ZEhOjTuneJ8uOc2hyZsiKpkV UQGRIaDP3cKXh34JQLT6XTpuVDpDpVw/F5xy92VDDafvD1PiSiFhQzWD15zEw1tw
41Ia28jLCcl63zVNBbE6QdCzXa4Niy3q0JPRjDZo1y+DfmsPja7QRIlOCd92UJc= 2QcLcJZI3pUGf5aV9HK+thjzZKMTOtDog02GkIblov1EWA==
=n3js =sR1k
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: 57F93F2A6585CF2DF9A3B31F13B9F45E122698D5 fp: 57F93F2A6585CF2DF9A3B31F13B9F45E122698D5
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQGMAwTtVaE3mgdcAQv/ZorP3XE4BVsGhz5m92Fch9W7ZeG3S45o1b5pgGR3/Aw4
323PWxqCuR22wtgHw1plfCnFH4O3/3j3bP2fWzYd4HAnxvjaFDdBqG8kC5klkDG0
hAeL2nT8UvpWUZhhqFOwgeYJrrUsWvHEtYyfomqLbwMSKpLUUONWw+lpWOpy8YhK
+VX3qBkZ/KI2mbv9R6wUYbLf81j5LrCcCrx2DJ8B9Q5EXcWn8KaFQAHNQvIlj2m2
kcDJnODx9iHNjMf9lRlJ+wN9vb7+RZlPshGMgXMsn9HipxDbqe0F8+H098heceVw
gPuush8/ZEKAyi6aj/s/bWHjQ2bZW1IMSzT0V6N2r/SpVU6GVDSrnLhyuiJvNypd
7TIDeGXj8eN3s7KY2rHfsMIo7EUI/w//ahFM/SNchfMhyLrD8t169e9xHXQZdgQS
wq4srLq2byM2VZgxMeC0mPjzsl2+GXWM40aFl6N8jQ781946KPUG3At0IsYtcP+1
0RSAUlybEO91cS81iZQY1GgBCQIQpylFCD/qJtg2Gns6Sg0RQIn5jXk6WtO95ZD0
gLimARayL5pocbeAgCW+rKLkW/NhcjjTSAOyeriU9O5vSCFiZ9O9Drr27zjK6o3G
NwHeOhPqwHt7UiCBcBSzxKjiY7VUJBYKWg==
=4BZs
-----END PGP MESSAGE-----
fp: D667348F310C57655FCE5D4EA689FF232FD681F0
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.10.2 version: 3.9.3

@ -25,7 +25,7 @@ mv .sops.yaml.tmp .sops.yaml
# define "fixture" # define "fixture"
repo_root="$(git rev-parse --show-toplevel)" repo_root="$(git rev-parse --show-toplevel)"
# --- # ---
function fn_test_create_sops_cfg_default(){ if [[ 1 -eq 1 ]]; then
>&2 echo -e "# ---\n# TEST: create sops cfg in default dir: ${repo_root}" >&2 echo -e "# ---\n# TEST: create sops cfg in default dir: ${repo_root}"
set -x set -x
rm "${PWD}/.sops.yaml" || : rm "${PWD}/.sops.yaml" || :
@ -39,10 +39,12 @@ function fn_test_create_sops_cfg_default(){
# enmesh: restore, since this particular one is checked in # enmesh: restore, since this particular one is checked in
git checkout "${PWD}/.sops.yaml" > /dev/null 2>&1 git checkout "${PWD}/.sops.yaml" > /dev/null 2>&1
rm "${repo_root}/.sops.yaml" rm "${repo_root}/.sops.yaml"
} else
>&2 echo "# INFO: skipping ...."
fi
# --- # ---
function fn_test_create_sops_cfg_dir_cwd(){ if [[ 1 -eq 1 ]]; then
>&2 echo -e "# ---\n# TEST: create sops cfg in curdir: ${PWD}" >&2 echo -e "# ---\n# TEST: create sops cfg in curdir: ${PWD}"
set -x set -x
# note: fail if for any reason sops config defined at top level; this repo should not have this! # note: fail if for any reason sops config defined at top level; this repo should not have this!
@ -57,10 +59,12 @@ function fn_test_create_sops_cfg_dir_cwd(){
# not necessary, all tracked in git # not necessary, all tracked in git
# enmesh: restore, since this particular one is checked in # enmesh: restore, since this particular one is checked in
git checkout "${PWD}/.sops.yaml" > /dev/null 2>&1 git checkout "${PWD}/.sops.yaml" > /dev/null 2>&1
} else
>&2 echo "# INFO: skipping ...."
fi
# --- # ---
function fn_test_create_sops_cfg_opts_complex_1(){ if [[ 1 -eq 1 ]]; then
>&2 echo -e "# ---\n# TEST: Full Args: specify path to each, also for secrets, mix specified and positional params" >&2 echo -e "# ---\n# TEST: Full Args: specify path to each, also for secrets, mix specified and positional params"
set -x set -x
../bin/update_sops.sh -k "${keys_dir}" -c "${sops_cfg_dir}" -s "${secrets_file}" "${secrets_file}" > /dev/null 2>&1 ../bin/update_sops.sh -k "${keys_dir}" -c "${sops_cfg_dir}" -s "${secrets_file}" "${secrets_file}" > /dev/null 2>&1
@ -69,43 +73,12 @@ function fn_test_create_sops_cfg_opts_complex_1(){
# not necessary, all tracked in git # not necessary, all tracked in git
# enmesh: restore, since this particular one is checked in # enmesh: restore, since this particular one is checked in
git checkout "${PWD}/.sops.yaml" > /dev/null 2>&1 git checkout "${PWD}/.sops.yaml" > /dev/null 2>&1
} else
>&2 echo "# INFO: skipping ...."
# --- fi
function fn_test_auto_find_secrets_files(){
>&2 echo -e "# ---\n# TEST: auto-find secrets files"
# SETUP
_tmp_mock_secrets_dir='mock_hierarchy'
_tmp_mock_secrets_filepath_1="${_tmp_mock_secrets_dir}/one/secrets.yaml"
mkdir -p "$(dirname "${_tmp_mock_secrets_filepath_1}")"
touch "${_tmp_mock_secrets_filepath_1}"
_tmp_mock_secrets_filepath_2='mock_hierarchy/Tw o/secrets.yaml'
mkdir -p "$(dirname "${_tmp_mock_secrets_filepath_2}")"
touch "${_tmp_mock_secrets_filepath_2}"
# RUN
# set -x
# suspend strict: check output for errors
set +e
# move 'set -x' within the sub-shell, otherwise all output dumped to tty
# ... bug: stderr still gets printed, not sure why. E.g. '# RUN: sops updatekeys mock_secrets.yaml'
_out="$(set -x; ../bin/update_sops.sh --find_secrets -s "${secrets_file}" 2>&1 )"
echo "$_out}"
# re-enable strict
set -e
set +x
grep "${_tmp_mock_secrets_filepath_1}" <<< "${_out}"
grep "${_tmp_mock_secrets_filepath_2}" <<< "${_out}"
grep "${secrets_file}" <<< "${_out}"
set -e
# TEARDOWN
set -x
rm -rf "${_tmp_mock_secrets_dir}"
# enmesh: restore, since this particular one is checked in
git checkout "${PWD}/.sops.yaml" > /dev/null 2>&1
}
# --- # ---
function fn_test_expect_error_invalid_file(){ if [[ 1 -eq 1 ]]; then
>&2 echo -e "# ---\n# TEST: induce error: invalid file" >&2 echo -e "# ---\n# TEST: induce error: invalid file"
# dev note: ':' is a noop operator; could also just temporarily disable strict errors # dev note: ':' is a noop operator; could also just temporarily disable strict errors
set -x set -x
@ -115,33 +88,11 @@ function fn_test_expect_error_invalid_file(){
# not necessary, all tracked in git # not necessary, all tracked in git
# enmesh: restore, since this particular one is checked in # enmesh: restore, since this particular one is checked in
git checkout "${PWD}/.sops.yaml" > /dev/null 2>&1 git checkout "${PWD}/.sops.yaml" > /dev/null 2>&1
}
if [[ 1 -eq 1 ]]; then
fn_test_create_sops_cfg_default
else
>&2 echo "# INFO: skipping ...."
fi
if [[ 1 -eq 1 ]]; then
fn_test_create_sops_cfg_dir_cwd
else
>&2 echo "# INFO: skipping ...."
fi
if [[ 1 -eq 1 ]]; then
fn_test_create_sops_cfg_opts_complex_1
else
>&2 echo "# INFO: skipping ...."
fi
if [[ 1 -eq 1 ]]; then
fn_test_auto_find_secrets_files
else
>&2 echo "# INFO: skipping ...."
fi
if [[ 1 -eq 1 ]]; then
fn_test_expect_error_invalid_file
else else
>&2 echo "# INFO: skipping ...." >&2 echo "# INFO: skipping ...."
fi fi
# --- # ---
echo "TESTCASES PASSED" echo "TESTCASES PASSED"
exit 0 exit 0

@ -14,9 +14,6 @@ set -x
# within current dir: update .sops.yaml, update keys in encrypted file # within current dir: update .sops.yaml, update keys in encrypted file
../bin/update_sops.sh -c "${PWD}" "${secrets_file}" ../bin/update_sops.sh -c "${PWD}" "${secrets_file}"
# verify: dump secrets, GPG_TTY src: https://www.varokas.com/secrets-in-code-with-mozilla-sops/
GPG_TTY=$(tty) sops -d "${secrets_file}"
# Special Case: Add caveat header # Special Case: Add caveat header
cat <<EOM > .sops.yaml.tmp cat <<EOM > .sops.yaml.tmp
# PURPOSE: BLUEPRINT for .sops.yaml config # PURPOSE: BLUEPRINT for .sops.yaml config

Loading…
Cancel
Save