diff --git a/.sops.yaml b/.sops.yaml index ae6e9959..bd848855 100644 --- a/.sops.yaml +++ b/.sops.yaml @@ -69,6 +69,16 @@ keys: - &prometheus age13xhxqulvswuckmpkmy2fgeqd5jx0ar8e2hst33leljt69r6hsvnsrdw63k creation_rules: + - path_regex: modules/backup\.yaml$ + key_groups: + - pgp: *admins + age: + - *gitea + - *hydra + - *mastodon + - *matemat + - *mediawiki + - *polygon-snowflake - path_regex: config/[^/]+\.yaml$ key_groups: - pgp: *admins diff --git a/hosts/gitea/default.nix b/hosts/gitea/default.nix index 92b7e0ff..5c7f45f1 100644 --- a/hosts/gitea/default.nix +++ b/hosts/gitea/default.nix @@ -132,16 +132,19 @@ upgrade.stopServices = [ "gitea" ]; }; - restic.backups."remote-server8" = { - paths = [ "/var/lib/gitea/" ]; - extraBackupArgs = [ - "--exclude-file=${pkgs.writeText "restic-exclude-file" '' - /var/lib/gitea/data/indexers/ - /var/lib/gitea/data/repo-archive - /var/lib/gitea/data/queues - /var/lib/gitea/data/tmp/ - ''}" - ]; + restic.backups = rec { + server8 = { + paths = [ "/var/lib/gitea/" ]; + extraBackupArgs = [ + "--exclude-file=${pkgs.writeText "restic-exclude-file" '' + /var/lib/gitea/data/indexers/ + /var/lib/gitea/data/repo-archive + /var/lib/gitea/data/queues + /var/lib/gitea/data/tmp/ + ''}" + ]; + }; + offsite = server8; }; }; @@ -149,8 +152,8 @@ defaultSopsFile = ./secrets.yaml; secrets = { "gitea/ldapSearchUserPassword" = libS.sops.permissionForUser "gitea"; - "restic/gitea/password".owner = "root"; - "restic/gitea/repository".owner = "root"; + "restic/password".owner = "root"; + "restic/repository/server8".owner = "root"; }; }; diff --git a/hosts/gitea/secrets.yaml b/hosts/gitea/secrets.yaml index af26f971..5ab2ff3c 100644 --- a/hosts/gitea/secrets.yaml +++ b/hosts/gitea/secrets.yaml @@ -1,9 +1,9 @@ gitea: ldapSearchUserPassword: ENC[AES256_GCM,data:c19HAzk0/KYCP9liYTIO8ZgG6T1GYFoQoq/X0oJJbOs=,iv:R1bbx6q+6R0bMP14FjRAug3zfw3+hzJKY9v3CWsNQnc=,tag:O16XCUzWV33ukDUIY9vxow==,type:str] restic: - gitea: - password: ENC[AES256_GCM,data:KA+m1s914wwhI0RkP2Zt9ECPk8/2fTmmFW6k9CBblTk=,iv:uqUFLF4yG4R/b84DdocNA9F5yvZ2PwSlTVozEeJmqhM=,tag:LjmglZpPeGItnh3YbXvGqQ==,type:str] - repository: ENC[AES256_GCM,data:OsDn4BJWqM0cs4WJtjpfXWLjHWuJmd8zSCNzvnUalyFCfDkvgmaA1AlL6XOtDjphEopoEgZvGA2ps1p7a4Mp2n1dhPDSv8o9apRsjgIhXi6nBzonVaIEGVeABc8HYl2e,iv:PJ4WmJ/B0uJic5VgDua09w5vAYaxekHHZbPhygFx3dQ=,tag:0aLLx9nV7OhCNwBOmW6N1Q==,type:str] + password: ENC[AES256_GCM,data:cAiFmuJ7ziJxBhlsmV4hiSz8rhR2V/Oc7w5kwRKFb6s=,iv:H7+x7Xgt1/KLT+ahyl1KbXsIftWYaCa8x4AyRkVrI/U=,tag:UPtgF9EuE2Q4VrDV2HRp4w==,type:str] + repository: + server8: ENC[AES256_GCM,data:s36qZ+KOUiKUVZmykFAxAx8Ij86dQU2cQOAWi8L9q0r5jnUs3eMBW9q1wAmFqiEFy1VJsPgkUNL8GjnVkQ86TIhnvLQ8S2JP3cGNHTleb3TCl9OlAHVE9tzKNNbVooWM,iv:bJYqAZosvVeRPrYbeu38c8CCxyqgXhePx21VUJAUOHU=,tag:FEgR4eCMThfs43tcZMnqZw==,type:str] sops: kms: [] gcp_kms: [] @@ -28,8 +28,8 @@ sops: RWhQMzRGZlRtelNyNUEvNUkvL25CcWcKAcvpGL8WLnSsWJa0pItFmboMs+StqFEN 2AIAZuwEA5PHzWxD24/4zS5Hd3GSYMbQ1OHk4M4ua6iJhQ8sUxeccQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2023-05-16T21:51:47Z" - mac: ENC[AES256_GCM,data:jIp61lpScD+a6w4DXuKru5KLNdZDj5kcX9Z1jbwvHCGqmRvxTeaIGh9Ca1j6MkSqWmUouQ0ZzM+NTVILwnRzB4l4/9X9BAD1mDmStxVmba1rGtr9mV9eqxM9kT92+mjmHY7N5fogGJjY3IenMelMciUcXRv9m/IdZ4UiDYZP0pU=,iv:oNhlL9ey7hT3gewSjnN86iGgXeDGSjkzCToEQHvy+W4=,tag:Sr0kDWC/F63esk47NvVFqQ==,type:str] + lastmodified: "2023-05-16T22:53:27Z" + mac: ENC[AES256_GCM,data:EV9AZgBEBArocGRqhwBFbiM0n0bUd3PanHVCzrppmUELgwUVmtpAZzKvyChVi5ESt5cIlhXVN6xbb5bfymg2mmjnSLFHun3xLf6HRYknbFEDFwVSPwUEnLGRLy7G0gUaXrdIpkVt1jsuy1rQVWDcN4ec0TNT93VcCVXnR1zG0bg=,iv:pvqIvaDkLfgf36NmQty1zDkxOAnbJ7PeS47Vu3PZfs8=,tag:8Eum9tS7/FJmqi08bp55cw==,type:str] pgp: - created_at: "2023-03-17T00:18:41Z" enc: | diff --git a/hosts/mastodon/default.nix b/hosts/mastodon/default.nix index 4214322b..e8c3d008 100644 --- a/hosts/mastodon/default.nix +++ b/hosts/mastodon/default.nix @@ -148,6 +148,8 @@ package = pkgs.postgresql_15; upgrade.stopServices = [ "mastodon-sidekiq" "mastodon-streaming" "mastodon-web" ]; }; + + restic.backups."remote-server8".paths = [ "/var/lib/mastodon/" ]; }; sops = { diff --git a/modules/backup.nix b/modules/backup.nix index 7ac2d3ca..2ef0b39a 100644 --- a/modules/backup.nix +++ b/modules/backup.nix @@ -1,12 +1,67 @@ -{ config, ... }: +{ config, lib, ... }: { - config.services.postgresqlBackup = { - inherit (config.services.postgresql) enable; - backupAll = true; - compression = "zstd"; - compressionLevel = 9; - pgdumpOptions = "--create --clean"; - startAt = "*-*-* 06:00:00"; + config = { + services = { + postgresqlBackup = { + inherit (config.services.postgresql) enable; + backupAll = true; + compression = "zstd"; + compressionLevel = 9; + pgdumpOptions = "--create --clean"; + startAt = "*-*-* 06:00:00"; + }; + + restic.backups = + let + commonOpts = { + initialize = true; + passwordFile = config.sops.secrets."restic/password".path; + paths = [ "/var/backup/postgresql/" ]; + pruneOpts = [ + "--group-by host" + "--keep-daily 7" + "--keep-weekly 4" + "--keep-monthly 12" + ]; + }; + in + { + server8 = lib.mkIf config.services.postgresql.enable (commonOpts // { + repositoryFile = config.sops.secrets."restic/repository/server8".path; + }); + offsite = lib.mkIf config.services.postgresql.enable (commonOpts // { + repository = "sftp://offsite/${config.networking.hostName}"; + }); + }; + }; + sops.secrets = { + "restic/offsite/private" = { + mode = "400"; + owner = "root"; + path = "/root/.ssh/id_offsite-backup"; + sopsFile = ./backup.yaml; + }; + "restic/offsite/public" = { + mode = "400"; + owner = "root"; + path = "/root/.ssh/id_offsite-backup.pub"; + sopsFile = ./backup.yaml; + }; + "restic/offsite/ssh-config" = { + mode = "400"; + owner = "root"; + path = "/root/.ssh/config"; + sopsFile = ./backup.yaml; + }; + }; + + system.activationScripts.linkResticSSHConfigIntoVirtioFS = '' + echo "Linking restic ssh config..." + mkdir -m700 -p /home/root/.ssh/ + ln -fs {,/home}/root/.ssh/id_offsite-backup + ln -fs {,/home}/root/.ssh/id_offsite-backup.pub + ln -fs {,/home}/root/.ssh/config + ''; }; } diff --git a/modules/backup.yaml b/modules/backup.yaml new file mode 100644 index 00000000..5719c173 --- /dev/null +++ b/modules/backup.yaml @@ -0,0 +1,242 @@ +restic: + offsite: + private: ENC[AES256_GCM,data:1Kd6RE666nI0Po9JW0aftRZMidAmoXQRASJ800X5qOXUY7NoicMvrv3oCn6SlMyShwyXRYA7rQQ+HcSffSkHLx3JvrVCs0Ujxo6omHZw1GcN4OICzVNQIt8kXCLXMAXKffsbSu5wJaGW3ecwvGHGi/XrIY0+LE+ddkAmSCf9NnwV6ConLdu34pBX2U7Dn/OsR29o5/3uzk1Zu00zJxd+3B+yDgSSgUNtPDUNmzi4nR91jszNayjicRm8/GUr3uNrOHqH1ppEHeLYJFG2PfIWNWE2BmNj15dF1ipx24PbmFrbw7i5HUyYuvirvVHXkRN8RA0i7xzHwlzv35d+4inrZqSb6xA+3cSHCynHdAct92bL/za3dmbbB72CeDkdXCTuF7xpNQ9Wkb+naiaLl31S5jvVbHOvOLrySBMM3Sam5drs/wXWZuTI7ftpPLzkjzt51nuz/FUOT4xCWZ7MFi28ctmguaJaiOu/dbH1nm+qQrbtAf4VcRUqsflzpBLbU7VL7OFNsAFRT1fXtpQI3IGdhEZNIf7AMjK5/6u35pZmK8M4LUI=,iv:h8Cb7dQmsS+e9BqH07gxpBXqOWzhj/2/gWEAbAbmmZs=,tag:ymiqZmc8E0XJ6pSnI7WfJw==,type:str] + public: ENC[AES256_GCM,data:h8NI00sNJ6ZpUAm2e9jr6sZ79YEniTIcPxVWFb6VkQg9wlSmeQyYXWcEWQfCqYd8Lgff7BaKk5ZZZmToSqq6cPGaT7iRAMUFSxWYZDCTBFrxHfb3VfQHHEtO7Su/zalQW/JZJ2gOZ5LhLXk=,iv:F4UITmiFi3x8bbiYIjUeo4bGMwSQUi5dEKPMYv0wP/4=,tag:O7i9nZoaNjfq4MfPWHP61g==,type:str] + ssh-config: ENC[AES256_GCM,data:DNiK4dPlzuXbalvFzo4G0rVDjIckElMHCjtC+KgqDqGZo9fjC8Y6CmbxRo7MmvZJL8OmNJFucolQmjR+Bh5Q5pJFAow+jHjG7GvO5NB2BrWFsvc2FFj9R5hRDOsIaSbQIWwmvvYbR0VE2ITMQveOisoDOd63GtWDiQ==,iv:9bj/dHGf+eHissPaqmYDis50C0kHQpsP0cHObI1TnU0=,tag:vvfRirrWoFcxIz1PEkoBww==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age12n5k6c4rxp4mjnexw9uw83yp34sallt44kldupfmxr2xkppj8a8sdsmv8h + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxS3JPUEhLaFc1WWVucTVk + TzVJNjlRTTJQUkU4SUpXQ1ZpSmI5ckd6VWk4ClZXMDVpYU5mRkZTakNodEh1YXU5 + c2FDei91Q1hBWFh0YnJ5T2xHY2JVSW8KLS0tIFlORXRJMDJHRy9VY3g4S2w0cG05 + bklsUitiV21PcWVBT2E2eXBmTkNMNXcK1KPPer4nqXslnusmGAXbFTqC/f7kyOXJ + b0hTd5P6c7ZBnKfxSgpEYtZCmPGB2MiBtGI0YdBPXw8FLm3lwgJcFg== + -----END AGE ENCRYPTED FILE----- + - recipient: age1px8sjpcmnz27ayczzu883n0p5ad34vnzj6rl9y2eyye546v0m3dqfqx459 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkcVhScy9zMlZTdnJ6Sitt + QnZQd1BIZXF4WE9GZjlPQ05NWHlDalowU3lrClNISUQzTVdKcmhZelpmRldQU2Vr + akNuY1kvdVhrTTZtbFVyRHk5SmFJV2cKLS0tIDVWc0NCbm4vSW8xQjJIWGFVQlA1 + RlZ1bFR4RENLSWVLZVlIT1NrZDJlTG8KOcOavOJLR3PsnAmFyn6DvwJQD9N5E+As + y3wUAdieH+mcEom90+Pa/bjkf/LQDlQjB3ucz9cJDO4z6k/qXgFZGA== + -----END AGE ENCRYPTED FILE----- + - recipient: age1dcpd6u4psq3hehjyjrt3s7kzmnvxd20vsc8urjcdv6anr5v7ky2sq9rhtt + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0OHBUdXo5eUJCblNiY1B3 + ei9sa0hzK3NpWU1YVzZqd0h1MWgva3NRQVE4CmpWTmt3cVEybzBPdFJNaFpGOGU4 + OVhncnVqVWNkTENmVWZ3NTJTdmpjRzAKLS0tIDVvT1lZL21XeHBLZ0NhV2twVTZH + K1orZmdvQW5DY3pRbW1Gd2d1b2FBVXMKdWJ/LCBVfUKjPzIHwJJVLhGPAt4+T3dL + Ulfy6izcTFz6jtpth+dIgWgPm9NOPSnqRG+e7FRI946bRjrxIO0D2A== + -----END AGE ENCRYPTED FILE----- + - recipient: age15vmz2evhnkn26fyt4vqvgztfrsr2s8qavd2m6zfjmkh84q2g75csnc5kr6 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxSDJjdHYrbmJybTR6bVFj + eHZFMGpKSlMvR2NXMWZjdjJQWC9wL2tQT1hzCmVXcm5seEx0VlRha1BQVFJIOENt + QVIzYmp4d1NUVEFDMVowNldwMmVNM3MKLS0tIFJUMzZCREVTWTBvT2FFcU1zaU1n + Yis1VHRRMjdtWmpGa0VqQkNJVUVSR2sKv7QG4+YoWNwDEPBMk+rAAcuZLmPKM3li + v7m6fX9qQyfw/SL1L4Ww37W7GU7JyBJh+KkYnPkx3bpNTSqLzYmjSA== + -----END AGE ENCRYPTED FILE----- + - recipient: age1xjvep7hsnfefgxvuwall8nq0486qu8yknhzwhf0cskw5xlpm8qws9txc56 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKbUQ3UTg0YXNXdnVkT2Zs + emFMVytQUlFVZnpxTHV1d090M1pGZkNlL20wCjVpeUdzM0xwTnA2TnNKOXhocEgv + RFNVcFQzZlRMY01ycUpUUnpOWmZIQjAKLS0tIEloYnU2aGVlOThMemVjK1M3Q2tk + N1Y5bkVLT2lWZm9vV3h3cHFkNHNIK0kKRZ3t08WykzsbJVAAqYvI5tR5wkvIdpgU + nWrKjXiQ/AFFBL53pTZihcE9XG5QzkDkbAmWOODVQVwwtli9znBAkA== + -----END AGE ENCRYPTED FILE----- + - recipient: age12aukzah0pt2rck52hwn08kezyxueqz2f49ld7hpyuzmu847vavdqkunn5c + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVM0lhTEdkVHZUUFhyekp6 + QmlGR2RUdHUzZmhNakliYTFjQ0VXeEJ0ZFJvCkRXRW1XTWtZeDVrMTNqM0xCZXp5 + Q25na1M5ZG51cENUeC9LOU5uZE5KYzAKLS0tIHlmOE9pRDh3dXkxTmV6YW8xUHJs + dmRZMFNudDBsL1k2clM0Umhvb2hSc2cKUYRF6X/Zq1nKQ0cmq6qq7WYCW5pFpNwC + EeVoccQvPFMj0OSxl2+Ef3DTI+TiX24v0qbL0KRw4B4rru8Hqa3+hA== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2023-05-16T23:43:55Z" + mac: ENC[AES256_GCM,data:OAFdTBgFBtobgRR8WTQR+hfByJBeTM1t4gBxjBmcm9rClz2XgDuFQ/rDYRYEoAEKXoztCZhRqa82DSFsEZkaseaMOX6NeGlcsnXGKHzAmjRJrtEdYawpbH6i0o4r9kTBeMbjzCkP6NhxfjY6kvwMAgmUjzj7sQiSUgOLpeZt9tw=,iv:NTQuU4lN2LvvPKT/IpUQlycTaQayqgHEqFHUCWw4dME=,tag:VFfeht6E9xTL1+s7pt+hAQ==,type:str] + pgp: + - created_at: "2023-05-16T22:33:50Z" + enc: | + -----BEGIN PGP MESSAGE----- + + hQIMA6j84+xkv3y7AQ//cHU4+/zuY2DNCTU0a1MZ0gW1vTe/Jc8S1iWe7dVelU7B + sBukY1DEb0IJklZY/aYNmzhzlxukNoKL4JiH9Dh4H7fmpyJW3q3K8hXPf53xZRyb + GHXRIEY9sr/R2rjiZuXw3WlG8b+2elKfo87qp4quEGtdDkiy+yulCfFD+TTNLLtP + G8aIE5TriqqO25qs1yL8ZTRJr9WQMHq4UyA2krwi5fcsjQQygsWVbBoZEUShoKYt + TAViJRVZ/EX0PcvfsBiZcdWI19Zpg/krUx6W/GQBKs1WliQ8LSmsU7P/q4AN2bPM + +GmvjN1MpGD5HLqMqPc7Zik9T6Q+FE7iKtUyjnYNSjSdcj+ZThKiCkCR+jNlMUzO + MRZiMgQaBiewK7ukW20qQo3ZPr+lD3pHA4o27J6EE/hAKlEku99O0tL1h757CatJ + p7UmPYa8oFeyo9RwdKOx+wF6r2YIx+p0IDL5tJIRwEE4hnsRngbh8+i7f96SFzER + Q+tfaEnaXbN0+zlI2DGy/1chHEMUOTKNSf1AORcKax3l5VtXexFwsKnxqsxBFipm + zVfXtUNvTjJ9SBmsL/PcbJgnejOKGA84hLujWbVK+Ri8O0WsdPLqudsRBZ8Ihq8j + +5cOqxpVo6tmLW9nwCvkIJEDhq1URiWwi/3Jf0qB91oQhsfyKkHa0q6r/008v/nS + XgH3NpkUKhPWuRqo64+s5+D+s+3fdPEPW58DMZVDKaHP4y4/p+KJriVVea0upIF6 + VjDUmLpcL+FoE+zSaxJBIm0dXf38W8IpfFgUK9Oa64Ox8whcICupAXpMVztB0jQ= + =KRPT + -----END PGP MESSAGE----- + fp: A5EE826D645DBE35F9B0993358512AE87A69900F + - created_at: "2023-05-16T22:33:50Z" + enc: | + -----BEGIN PGP MESSAGE----- + + hQIMA8zMZ+ak7y/zAQ//RiIBOP80a442mbbchdDm9fIyrzeCKCWdu6cs55obIBVK + tqYtP65IFO4GiTG71E3iFf+nsOJuNFJiUg4Bayx7tFz14NnIpbgB5zlkSp2yqBqN + SafitbdGhUStzNnA0hNTBwp04BLASD/1GxJXnJDSbhb7Icj6FA7y8mWfUAOtoRek + 2XcMYU9OqTW4aLW7+lQNtxXi8OXZN1Nlnv2dkCNfFbH1c36E6V16jtrc4xrBlIyW + CawuFwAlsRbckKLsj+o1BR2DPAoOJIcLHTmdDP7Mj3nuHbQL3UZQ96tOczDAqVj2 + fjvd1b36hEGpXBj5kMnME1Av9KNIhrCpgsdsb+lROArncoByewOBNeqHZBiVqs5f + iuQTmNn60HpzMEitkRgP6uWkeAToj1JvNHsMCyvs8ADaIzZHjPafF6KeQNJuTbEP + vB92sb2/XdcWyygvjNXU3EEWCInS8C6pcTVB5J6FF1zPNEDOM9ozVmj8ZQZ5J/zQ + 8qEX8wRX5/6GjS9hrdNEXBT1185oUrWypiUH+c+Z29/HadqF/7D3BZL4j4OSMZ2e + TzX8Mpqknj6aEn39SclLXgwQBwu7pDCUKO4Ump6TzpVCR8XW2/EAfKJ0sq8lxhpp + TEw3/8CloQIskP5VKkUwDqGQ3Sw7RXgpk772SlhRRNPH/fYzFVlqwAtJ1DjQedPS + XgHhycX+Tb2crqIczDucG3uW2iF1J/1qyhcJBiBV+l2LK/8TP+yWxTkdooMkFqiC + KHXdKsnYJCkjeVYwOWIQJLYdkS2d6whYoV5NUeQ+KVPvsE9DU2BUJveGhRGhSIA= + =6B5D + -----END PGP MESSAGE----- + fp: D4E89C6A0A58EE803EF708EFA9B23715F7AA3F1A + - created_at: "2023-05-16T22:33:50Z" + enc: | + -----BEGIN PGP MESSAGE----- + + hQEMA45bZkLXmBFpAQgAngktLlG9dP/QVhQvooZWPiDo3guO+qB94tEIKpy7KeBK + bgqqtxDSD6B6vWPKRMG42RP++QbkO9hNrbJ4MKqYCDN4MkWWaK+rb28ICPpMtIWT + OprRZ2EaNkS37gKGDKxyFBgA+mF6POC7vxxnI/FpZasx9fmJu8OaB8bg4WluFpvp + nTWN+v7lEHD+GF1osl0t4Ir74y3wSKG1HCrbun4sBjTL//YQKzfdeweIDsHYFy41 + M3e6W+qYqXcalmW2oScw7tQUlibgdq023frhIebJrkUBo1eut+gWU1JxtU9ZcIN+ + k3bGVi7JwpWWLo7wCPio44FUFVr4pTcU3NuCgTpNP9JeAYbrkejAvIQO7fd9+Ici + ArobsiKym/pSfXONNKSH88usTboAzpdvejvVMz1NvsMV43gZ4+IBs8nOb5kI1AHA + wzAi6+niAP6qZc9esC4crTtyz6YX7UN7VWLIu+gScg== + =9AJP + -----END PGP MESSAGE----- + fp: A4B0F5A80C2E2448A97BEC25BB829C4DECA6CCB9 + - created_at: "2023-05-16T22:33:50Z" + enc: | + -----BEGIN PGP MESSAGE----- + + hQIMAwMCBBrc/JA6AQ//apcTXy1SoBkt4HAQNsNyDm6ourWpmb8/ooZt5APiJ68X + VDCbS9vhPTz7o4tYXiplhRC1g3Hn2Cz4BfGrUpI1QqCoufUqK38iMzw7f2+1/2mU + CCvm/kLyf/ycvTzlcM+m6no9hgoXgJM1sAkMMwQcloeOvmxrBHwfpgTBi9J351tx + Pr7XhwdWyPw6pPcLLfvyBIOX+JDfKriRWujtf+gKLH4YGEtXNnkaDhAGXx2DUTDk + X3I2kLag4KrRf4ZyKYuC+xGXGn9SG2PlMmSm5KQ5DD+TJFSLQUbYb7nWQ1e07HCu + bWzJCdx5XXxxXcK2iuFrdiexnFCNDpp6+eULRlCqg6Gl9+nuRDBS/X3QSQiWcJX7 + AxuZfgrj717lKubA52d3UmGWXoV2eD43OyL1H/Zo/JiTyrtM4Bl+7HymHYC/XMTB + Qy/Y3JPzK4D6JWGmSqUiKC/xIri/FmvgO0MTHPzgIMB5CyohbRWogwCiltomV48b + LPICrhuw2zfe3+xEYBAGwM/kOHpeWZ4OL8FcY8NjUsSXU449bUHnIafjUDxkSeyx + hgrCuJCgKHMHpz8b00jNdnGn4EDaJkD/QrpmwACIHObHhuVA62A6gPnvyp0p900n + zQnQgjMEjWQJ9ItxEGxuX8W8el4WvR+IGJWlXXmoN6Y/h+24sOe8zIZzTrpagnbS + lwEUY3ziFkgOL2YoF+fFmPM00MEnspMYGvCIrfBYUsC3EhHkS8pUhiE0T+NlhvTP + Fph7us0Eyv9D744eLjSJmikyhbG1nnpPOHFcV+5NfeuH3W2+y1uZjF1PtZ1hGF5B + fsro1PVTMRXFPJe2HTGT/xxJl7Z2wQm64Oml5Ss7tcNsMQuObVJWYTij5oPIDhrS + ZVWUz65Y//U= + =drbA + -----END PGP MESSAGE----- + fp: 4F9F44A64CC2E438979329E1F122F05437696FCE + - created_at: "2023-05-16T22:33:50Z" + enc: | + -----BEGIN PGP MESSAGE----- + + hQIMA9XEenRNYVGHAQ//UBUSekpguXHwUV4fF9olmpo6s0KX3v1pVm4ENMprE5OM + F31vYSCteEIneCd0yaj9zalz5CKQURfbp3W0stLQhmU5sa3e5xHulX11Ew9QGfdJ + Xzgu9AlttnOiivM4aJZ25ibQi8Q1nLOuFtkjqB/TgtLoJg4r9hD8DzDMAUrbBpWb + gAJCGJhxhs6EbukHfl+78E+NCEaqIQLp3/IRcg3LS7kCB71n0qI9zycQjgVQB9Ze + 8IxFKhxSMjLFI8v7K5djdiV542wwETVcCgy4r6uQNqV2KGgOZrwBWknXAI9XxiRm + q6jrS8BMRfs8lXevpzMKCRiwVjbtROIVfhodOs7FQMpVDpj45EpS8LGx8HX+nIo0 + FOwdXdpYA/fCVw295LFl+uTFVfGgyGWEwNtRETzfjMDxaRTOPa2zLjEk7TaEAgvh + 9kAgKrQRewbh/95Op6P+pAulxioKQHGu+XLaA8R8LW11U5NqXiCeOkxWa5Xgw/gY + wnsjk8a8WcRHLLGX+g1eVvfjJetm/OFKM2efjnkm4dkyOk5+o55Gvrl+rp1aDn0J + xB9J0ZbrE0uqrPavmPbQ7bi8xU6l+zXS8oktRQoOPCFbzJtyCcWFsf9PxYBtDL3O + DuV/sz/Fb6wwF+QlJii9kPAjpwTCEdLKJL7Hm8VrlcCcF8VVCBX2Ci3Q43U1uebS + XgH34NTCVGJnd68Bfb9qMzBLWsXBJE2juwPkX+0fzLvOoREIjUsmgnE7BSJpLR4h + sfo1ci1dbXnM2BnEMrAXY6l02Zyl2C4qvfOTYmuqWIJ7dEo7nKIQdIMWB/E8cr8= + =izM2 + -----END PGP MESSAGE----- + fp: 4B12EFA69166CA8C23FC47E49CD3A46248B660CA + - created_at: "2023-05-16T22:33:50Z" + enc: |- + -----BEGIN PGP MESSAGE----- + + wcBMA/Z87ylQaotQAQf/TDXWUcp0OzNzcdnLMjkcFJ2XAzxeau++OOAWLXilVy9M + B61kOwL09sEI4A5woaBUH3tpnp2oPtHWLoP2bQFDXCysanxgAWLYQ+WH1Ia20lZ9 + 4WqQzzDVKXF7SqJG07rPFY6prfmO09PI8yoSnFJrpkuyYKQPYYp5AVLQWbu5PHOg + AMQszorQbgjY+sUFdhyZSGqRuO6danKcpRCnVH7nuTcAxssa2XjRlxfe4eSMpMSc + PI90C/lJKXISEpuwtMnjEDACQGsERo5I9d7Bx9AwujbfX3M+/JLzK+1knSqfRvI/ + s55s9LdE17i8rs+BcwdUfKSdROntITYh+8ZKs7DHoNJRAbS8gc8YKRpRffVCVExq + ny7NHMk/gMHKfZRmA5m00E1Mbdp5hiIL7h3/igV+0upPKl5+eYhhHxSTHIJ0JW7y + HKEhWUz0MyLPNA05lahvUi0k + =ezj/ + -----END PGP MESSAGE----- + fp: 9EA68B7F21204979645182E4287B083353C3241C + - created_at: "2023-05-16T22:33:50Z" + enc: |- + -----BEGIN PGP MESSAGE----- + + wcFMA9qJIVK2WMV7AQ//UyukKcv81E5L9UUrSCGGiZv4kGOWAgWvbAEGwgQ4tGFg + J0RDFhj5EQAehNDakN19upTMXZM8YTl9b+0su1tOBx4eRZJ2vmH0NVZ26VdIcdG6 + hSxx1C185ZYgrBRANDotJYEO0IgMRMUEPKzmk721EgSStiq9JM4FuizhoOE9GHaM + vetJpsNTNdbKNuVUKBByHbV0hSLSdZKTDiqrwX+bDsRGTa4GrAoQ/5O/ijIlQzcS + lG8x1IhbMwdgWXjawb+TD2QVPonKp4qBK9lAuiZG7b9Vls/eyUuHIOTmobi3fH5l + BEqnVawr/Vt7IfoiHQjEiKvNs0FZGmyVrtTC7KEVhCOzSWAY4I86/Ewx5la0p4Rw + oQSU4ygyaTImQiUkWAf7UX0tVknFgADvwqOZ8rNYhzD3cbl3avqN800YBHZOBPhq + ptdKBzJ2B2RZ45n8lNBmUMFgZaK3E4atPpLaYQDLoEGqkqJLlD4Y1flLdhn7ez/5 + lop1d3gZ6KuMX4kDdaw9/0dmgs5UoR7dEZ2AUipobaYXp5mzZhA2uO0oIbsDVmaO + sPCWNYC8gD4D5wXtIzRgtpnToGIvSLoyNyVFcYZSERvSz7ctjM2mNC5YGWvFjGq3 + wlfc4KaJzdQO+nOjJSoyA50QrzFfgOpPj5JbU2LABxNg6fLGfIEaCy6o2tSRytXS + UQF/KM6naplLRF1rGk79c6bHe2TJKxiEZp3muXEb2dsQliKFyvM/hTRlkTl19btS + 665wTa9VLWxbTzxXjVIYfI2ayTdEGlRRvo94Hpy27u2CkA== + =7aDn + -----END PGP MESSAGE----- + fp: 53B26AEDC08246715E15504B236B6291555E8401 + - created_at: "2023-05-16T22:33:50Z" + enc: | + -----BEGIN PGP MESSAGE----- + + hQIMA/YLzOYaRIJJARAAvbSFiqGaLSAeWycMlbPWCBA9cpi9wCy9MU4lnncThsMA + RukN44HtkO99wBilfS0ptQVYXe+2B7S4KxPKGj0DKhmV/Qvx+2/2Bfw0oxnYAOte + yDAlwnT7vTUa8qilDvUh9zfdf9hS5mohKJy+SeNbEXr7eJPCMFROrFJUQnVKIfou + hPsQMYCjuuxZCVY920l/7RW0dy9d47Ez1T1f/35CVpxcGKR02HNeP5rBx/rLdV0K + 3+gVB1f278oiJ8JC3/NpaPTSbrUZGTGnz021UJmbp0jxZzp0PesrSq2GhHH3A/hG + jrNhzrlRgIEVtrHuSX9V/kVacTGITWqw5VAUlS4XskxtYSBbMVx+RIxJFUkWI4t3 + JDFb6Ngq4tyB0kizxeQJf9yEINTDuHWh1yq36KZjgEJg3JMSWSUUfeoXbHGyyu3l + Xoq4pblDH7QVx2WGdHfbNzznp5mwZnJTIj1hGHMdeDVOa69lHwu5lREwK0UUHJRQ + HPheuEwun9FkEtCawh/CqpvT+6qG35arJx8LxHlnCNwbCYoVvsKEVmQODg785PKx + UFx+KCd1OFk72qlxGZs5iVqFNdnkq9Z911vzlQ55R4QSbmZXE1c4uMOxlmoDw2wQ + X4cmp2WPC2zx5A4xxxI2t8wkN4XTbH2njU1PeHWYB7mOj9TjKUl8u55Uk0mMFTPS + XgGwu/fNn7oTy+GdBxoxFdtgxlKPTAVPx6SyHwEdVGtZQZZ8JdASLdVESV8YXfr0 + PIibchLD18PABoK2I0WPA918TxraXqfnGrbs6/MXADlkyG3hzU/btf8fQfom4yc= + =31lf + -----END PGP MESSAGE----- + fp: 91EBE87016391323642A6803B966009D57E69CC6 + - created_at: "2023-05-16T22:33:50Z" + enc: |- + -----BEGIN PGP MESSAGE----- + + wcFMA7zUOKwzpAE7AQ//T05JZWXkqx1MfFvVWaef4an+35+GIrvcFhag17MXwCbE + p62FNyXo0J03isMj2Sy94T9fD/aBoYUwe/VEvm3fD7POiKaXQAbROUDmmRZ2MnmI + NO/0E7GOyNN4QltyebcvRno6/rorfTP3/st7jACXqiy/cWPgwQqeS0r91gwNkT5p + uuLFytmqphW5fSpsNzjLyvTswuRr2Hn/64lQp9771yFFzZFOLtpE50THpEJ3hBzW + gw2W6OQHSx1lkwaolGmyhXD2RLVxyUZt7j3z9JUM1R5b3HV+S3nCz7brZkF5+ns2 + mQHXUU/mMFlvmfyvoC9ChaqMszAYpdOR7nKFMmSr1IDGlLxHOMwjLk5/EwQPJtJX + +7RnpejrEnoNRJO2V9hm/BG8iXcmFwzogaE8H7CISzpXQvoY/RPmE997quhwGtoJ + h0Xx3IkMy2/D/u5sOuemJ2trV0oJfnapijBLqtN3wY7mFJ5gXADXgWuB6+K6BpzW + VsBl5QkKX1d2AMKCUTZQTF53bd/LD2IQ2mDd4j0oluiiqOTK8iuG2EhupTy7o5+M + CMB4M8hTXmqK2zOXGSlcTnrVnnn8LN8lknXHUg4ujHWUF4U1PRgVjzLz4aOyBCj1 + +RQQiwrKwGCdqzOyQXGoAxtAohVpRM7bGbKpg+9lEkdapxk/zuB71dpEvN1MrH7S + UQFG4HESmDmZ4t5yEzRO5mLLXR/wcpfnz6e0cO/spXrE56FP2KS7IL5teuNqYv5g + 4fP/Kc0VIzPR0Uxk12rR71BdAc70r3Ftpv8Kb+ZoNWYNzw== + =csKO + -----END PGP MESSAGE----- + fp: DD0998E6CDF294537FC604F991FA5E5BF9AA901C + unencrypted_suffix: _unencrypted + version: 3.7.3