diff --git a/.travis.yml b/.travis.yml index 8c166ab12..ed58ce2ef 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,19 @@ language: python -python: 2.7 +python: + - "2.6" + - "2.7" + - "3.4" env: - TOX_ENV=py26 - TOX_ENV=py27 - TOX_ENV=py34 - TOX_ENV=flake8 -install: pip install tox -script: tox -e $TOX_ENV +before_install: + - sudo apt-get update + - sudo apt-get install -y libyaml-dev python-dev libffi-dev python-pip gnupg +install: + - pip install tox + - pip install -r requirements.txt +script: + - tox -e $TOX_ENV + - make functional-tests-once diff --git a/Makefile b/Makefile index 30122f055..aad391d11 100644 --- a/Makefile +++ b/Makefile @@ -36,6 +36,40 @@ tests: dev-requirements tests-once: install dev-requirements $(VENV)/bin/py.test --cov-report term-missing --cov sops tests/ +functional-tests: + gpg --import tests/sops_functional_tests_key.asc 2>&1 1>/dev/null || exit 0 + for type in yaml json txt; do \ + for ver in 2.6 2.7 3.4; do \ + echo "Testing Python$$ver $$type decryption" && \ + python$$ver sops/__init__.py -d example.$$type > /tmp/testdata.$$type && \ + echo "Testing Python$$ver $$type encryption" && \ + python$$ver sops/__init__.py -e /tmp/testdata.$$type > /tmp/testdata$$ver.$$type; \ + done && \ + echo "Testing Python2.6 decryption of a 2.7 $$type file" && \ + python2.6 sops/__init__.py -d /tmp/testdata2.7.$$type > /dev/null && \ + echo "Testing Python2.6 decryption of a 3.4 $$type file" && \ + python2.6 sops/__init__.py -d /tmp/testdata3.4.$$type > /dev/null && \ + echo "Testing Python2.7 decryption of a 2.6 $$type file" && \ + python2.7 sops/__init__.py -d /tmp/testdata2.6.$$type > /dev/null && \ + echo "Testing Python2.7 decryption of a 3.4 $$type file" && \ + python2.7 sops/__init__.py -d /tmp/testdata3.4.$$type > /dev/null && \ + echo "Testing Python3.4 decryption of a 2.6 $$type file" && \ + python3.4 sops/__init__.py -d /tmp/testdata2.6.$$type > /dev/null && \ + echo "Testing Python3.4 decryption of a 2.7 $$type file" && \ + python3.4 sops/__init__.py -d /tmp/testdata2.7.$$type > /dev/null || exit 1; \ + done + +functional-tests-once: + gpg --import tests/sops_functional_tests_key.asc 2>&1 1>/dev/null || exit 0 + for type in yaml json txt; do \ + echo "Testing $$type decryption" && \ + python sops/__init__.py -d example.$$type > /tmp/testdata.$$type && \ + echo "Testing $$type encryption" && \ + python sops/__init__.py -e /tmp/testdata.$$type > /tmp/testdataenc.$$type; \ + echo "Testing $$type re-decryption" && \ + python sops/__init__.py -d /tmp/testdataenc.$$type > /dev/null || exit 1; \ + done + pypi: $(PYTHON) setup.py sdist check upload --sign diff --git a/example.json b/example.json index 465bc313f..006b09640 100644 --- a/example.json +++ b/example.json @@ -19,7 +19,7 @@ } ], "sops": { - "mac": "ENC[AES256_GCM,data:sMQOEOLOyVoamdHBRCFceMgNfdXNzyb1DQYRPIjU5IMU3kGSP3qMVxBbf8Mv26AwrCo65/ai/Z0af81cxs2nIg1XegwuCMNpAgNi5q9+bZ1xG0rmrwUOmBaH/fIfmZeUbPYmczre89J8nfD2aTetIWqu1PwC/TyD2/snrif3Vns=,iv:MxMABoPMrUCBwzI/gX2xGpvT0/qo5k0CYuUuIt2U+G4=,tag:K4aeS24U+PzzeSrGJAcfvw==,type:str]", + "mac": "ENC[AES256_GCM,data:2ffgLOYXFoMS7ECteIOWzV0iyHa316sxCXN5Ms4nDYrMpOADf+l3xLYXO6UZa/LIhI2LcQaDplFv3ukrJ2Zrr1vntz52E+MDV2xwetY1/QioFM2GHCfG33vbL6PEoi2lUKlUyIj+3UejV1hY9B4xDVIkXP6b1I7IwPi9wqYCx0g=,iv:4vlcBtZ5iI/0WVes0ZDvenBToEXthCul2LA37z1SS+0=,tag:FbesWYn7mPemYbU/F8VUZg==,type:str]", "attention": "This section contains key material that should only be modified with extra care. See `sops -h`.", "kms": [ { @@ -34,6 +34,11 @@ } ], "pgp": [ + { + "fp": "1022470DE3F0BC54BC6AB62DE05550BC07FB1A0A", + "enc": "-----BEGIN PGP MESSAGE-----\nVersion: GnuPG v1\n\nhIwDEEVDpnzXnMABBACqAUiwqLNn7w7WyQ6J24oIxPC/9Hx5NmqWLperCA2W3lIM\ndvW8WHP10MsbPaj7CWCkillppKmxkuQqivRvgcxWeSMXbotlnCAfczwDCpf1o1/T\nJctzN4qSBlCpEF+2OyRTEVz22Zd7UfOZqzoJ4e7yA3WiLpe47X5YhpPie0HClNJe\nAZ1zPj9zvAuHLf1ZRthuLwpM40cyjfPmPI0jDknUpfvWV6GueXcozSuJEWJcVBKn\nDyR3mZfWpxPee0CVmuqTMT8OIM2p+5uNNrNWqy5eM8nhY6lRyMxN915xccN36g==\n=LxSJ\n-----END PGP MESSAGE-----\n", + "created_at": "2015-10-08T15:33:31Z" + }, { "fp": "85D77543B3D624B63CEA9E6DBC17301B491B3F21", "created_at": 1444233151.309663, @@ -42,4 +47,4 @@ ], "version": 0.8 } -} +} \ No newline at end of file diff --git a/example.txt b/example.txt index 58b618ed1..09a9de100 100644 --- a/example.txt +++ b/example.txt @@ -1,2 +1,2 @@ ENC[AES256_GCM,data:qe/cYirOA9x9zFw8AtonYzcRT+Sr9KEMtiRN55YOn1SNBEX7sE9s/M09KSfneKCbHIsNVdh5902vYNAwSFpJ6NhzO/6YR65ucwS1eBx4EQ7s3PYkEWHipgcibW0hXiNvEJGpR/4ZQ/er/xns2cpCUAgpv07Ry9DiGW+us4HM+gA5dplTpYUCdzMl7zGYoPYcIiJVHjkjaHK70w==,iv:v2BgZ6Oa895KpYAeikA0c9g9R8wcu2YOe2kp6vPEMX8=,tag:zQ/C7u2+veEuOVLSAEc1Mg==,type:str] -SOPS={"attention": "This section contains key material that should only be modified with extra care. See `sops -h`.", "kms": [{"arn": "arn:aws:kms:us-east-1:656532927350:key/920aff2e-c5f1-4040-943a-047fa387b27e", "created_at": 1444233233.692422, "enc": "CiC6yCOtzsnFhkfdIslYZ0bAf//gYLYCmIu87B3sy/5yYxKnAQEBAgB4usgjrc7JxYZH3SLJWGdGwH//4GC2ApiLvOwd7Mv+cmMAAAB+MHwGCSqGSIb3DQEHBqBvMG0CAQAwaAYJKoZIhvcNAQcBMB4GCWCGSAFlAwQBLjARBAxatks17s0ZWQIyPi8CARCAO65vxmVs4SOASbNDdnwdeOlg75rz7oeqWId2JyQU8sNyz7+TNvvsLIjIR50AGMwnbMIgTmbM99LDi6Vo"}, {"arn": "arn:aws:kms:ap-southeast-1:656532927350:key/9006a8aa-0fa6-4c14-930e-a2dfb916de1d", "created_at": 1444233235.129884, "enc": "CiBdfsKZbRNf/Li8Tf2SjeSdP76DineB1sbPjV0TV+meTxKnAQEBAgB4XX7CmW0TX/y4vE39ko3knT++g4p3gdbGz41dE1fpnk8AAAB+MHwGCSqGSIb3DQEHBqBvMG0CAQAwaAYJKoZIhvcNAQcBMB4GCWCGSAFlAwQBLjARBAzI3YJKPROE+fG2vJYCARCAO2IeX+3IeMkOOOsQauVrUTP9FVFmcmpXYDT41PDt8nhFvU/Q9RUUoVG1OLeWK+KBDZgu1NWGeUTN3TTs"}], "mac": "ENC[AES256_GCM,data:k6Y50bHFLFSgMLOUa7TnX7OzdPf+DAHYySIW4ASNRBE7pkKrn9TY0NEXgeYaWxGeVpE66c12fr9m8s483xjCOw9zBbjxsVF5myUX2SfguYH5giHuf7XvpzEp8d+zRh15CktOLdexipo39xuHPtr8iXz0MogVhG0IOelCHew0LN8=,iv:LG7hsalNUjna9ORMQP8RTWVVdpmEgxe7VFgKyX2RiHs=,tag:YNJWewM6/4MoaPRwt3z3LA==,type:str]", "pgp": [{"created_at": 1444233235.135862, "enc": "-----BEGIN PGP MESSAGE-----\nVersion: GnuPG v1\n\nhQIMA0t4uZHfl9qgAQ/9GNa5B4AkO7UODicvjpsgEGLd++1mJteKOwww/08src+H\nnfe/VtTvOdCNVNwvkeKtANvM5DCX9RVTjul4SH7iKd/O9XmTFXA66fhgAbRmEczm\npzQXog/res0u/q+mVwdSDqx/6qBViIcz1Zgc5oFnAneRlAke2/UsNFuFbtaQDZZh\nuralZFdrLx/DWjqEWXEh9D+caek2z/Tjhl/PQ6JNPEa7aZfMLjuTuaoPkSgd87Zc\ndnz/UL77Wx1zdv/cLtO2XvJhOvi0BF9dkg4evouTtNJs+WjQvkBCAijwdC5JdjTz\nWj4mV4H/YdlOn+j2ng3GGmF6GIX5x9FLLD5a9PjSgHVvAH8ZpXkCVY2U8e7QAW7+\nv3KLKGZFWvke62pmypj3777Z5MBj/SJAlzmuPdCLQCXIIpozqK4N4qTvg4Rt5TsN\n8YH9HYfWhX6fHvd67alwrz4IV3g1LgCKCGQd0EXl8pjYwErspGym3UOyZKSD4dDb\nH8zdbr2bQxZ2dJR3o+DVTdohfFjxUqHAZ8bO3vkUT4xblY8n2NnIUWxw3tDHdV/6\niXWVfRcgsIRmFM8qZ7CwwxDZFgLGY3oPhzNmze+B1g5xMG/l4MbKwjCb2EQ38CDr\nDG11GMG5ewhZUDwry4aDpxQMUhvuLBupve+caHzs62zTyWxurwLwfzOHbUyCxbjS\nXAEQ++zCoKncWsAxJdaoIvAvTJBEJeRyGToPESe8iYjmkT1jYZCMj30opOmOZ94M\nE0X4OYpb8FGL/QhOASMe8eW+wYUycySePsQZaQfdIkky7olIsMTBQmSxB16D\n=lXuh\n-----END PGP MESSAGE-----\n", "fp": "85D77543B3D624B63CEA9E6DBC17301B491B3F21"}], "version": 0.8} \ No newline at end of file +SOPS={"attention": "This section contains key material that should only be modified with extra care. See `sops -h`.", "kms": [{"arn": "arn:aws:kms:us-east-1:656532927350:key/920aff2e-c5f1-4040-943a-047fa387b27e", "created_at": 1444233233.692422, "enc": "CiC6yCOtzsnFhkfdIslYZ0bAf//gYLYCmIu87B3sy/5yYxKnAQEBAgB4usgjrc7JxYZH3SLJWGdGwH//4GC2ApiLvOwd7Mv+cmMAAAB+MHwGCSqGSIb3DQEHBqBvMG0CAQAwaAYJKoZIhvcNAQcBMB4GCWCGSAFlAwQBLjARBAxatks17s0ZWQIyPi8CARCAO65vxmVs4SOASbNDdnwdeOlg75rz7oeqWId2JyQU8sNyz7+TNvvsLIjIR50AGMwnbMIgTmbM99LDi6Vo"}, {"arn": "arn:aws:kms:ap-southeast-1:656532927350:key/9006a8aa-0fa6-4c14-930e-a2dfb916de1d", "created_at": 1444233235.129884, "enc": "CiBdfsKZbRNf/Li8Tf2SjeSdP76DineB1sbPjV0TV+meTxKnAQEBAgB4XX7CmW0TX/y4vE39ko3knT++g4p3gdbGz41dE1fpnk8AAAB+MHwGCSqGSIb3DQEHBqBvMG0CAQAwaAYJKoZIhvcNAQcBMB4GCWCGSAFlAwQBLjARBAzI3YJKPROE+fG2vJYCARCAO2IeX+3IeMkOOOsQauVrUTP9FVFmcmpXYDT41PDt8nhFvU/Q9RUUoVG1OLeWK+KBDZgu1NWGeUTN3TTs"}], "mac": "ENC[AES256_GCM,data:J1qg7jNkfSSFZYjgNIudoGKWKrdqmn1m26+KH6MzsDMUIcqT0LnppajHXH+HmLiV3u9KV3nvY6kFrI1M5OlmNt/iaQAHbgPiCqMYVkRqn3Us0dnGL0vIxIsA//HuGT3w3GjRVOcDIsbXpY0UHctV5ar9YuC4hIP/m4qfDwjUPwQ=,iv:e3fHDDi1PIJfqM/wvcIIhbqWJs7qo0V2I3sOgcBh3sA=,tag:jrDAl+2cRyrzB1K6BQNvow==,type:str]", "pgp": [{"created_at": "2015-10-08T15:32:06Z", "enc": "-----BEGIN PGP MESSAGE-----\nVersion: GnuPG v1\n\nhIwDEEVDpnzXnMABA/4uvvk2EDmAkmHKu4RMTq/NGSK7ZXuY7QATPdT+M0lkQGV4\nVmHlVVXe/y2qr5ouI+k3In3Fk7HR5yFDH5G2Jz3PwuosLVw3M2XmNXZ8bvcRcvKB\nI+6WNGOC2M1bvVeqTETL77nyd5fRuhDFVjQtf/oYym6IGiX9S1UH0Mx3rkDNyNJc\nAfVY+u3DNvLI5VDXMms/XQOkwEYiCL93QnWgGbSVxDXPRp3rDXTeoWEzZNXadJ6E\nKNEnToUnVXrjOH6YwHsjDc6p6djaONxlKhy+kEdoM/+AX04ukdgvyacUfbg=\n=kYWb\n-----END PGP MESSAGE-----\n", "fp": "1022470DE3F0BC54BC6AB62DE05550BC07FB1A0A"}, {"created_at": 1444233235.135862, "enc": "-----BEGIN PGP MESSAGE-----\nVersion: GnuPG v1\n\nhQIMA0t4uZHfl9qgAQ/9GNa5B4AkO7UODicvjpsgEGLd++1mJteKOwww/08src+H\nnfe/VtTvOdCNVNwvkeKtANvM5DCX9RVTjul4SH7iKd/O9XmTFXA66fhgAbRmEczm\npzQXog/res0u/q+mVwdSDqx/6qBViIcz1Zgc5oFnAneRlAke2/UsNFuFbtaQDZZh\nuralZFdrLx/DWjqEWXEh9D+caek2z/Tjhl/PQ6JNPEa7aZfMLjuTuaoPkSgd87Zc\ndnz/UL77Wx1zdv/cLtO2XvJhOvi0BF9dkg4evouTtNJs+WjQvkBCAijwdC5JdjTz\nWj4mV4H/YdlOn+j2ng3GGmF6GIX5x9FLLD5a9PjSgHVvAH8ZpXkCVY2U8e7QAW7+\nv3KLKGZFWvke62pmypj3777Z5MBj/SJAlzmuPdCLQCXIIpozqK4N4qTvg4Rt5TsN\n8YH9HYfWhX6fHvd67alwrz4IV3g1LgCKCGQd0EXl8pjYwErspGym3UOyZKSD4dDb\nH8zdbr2bQxZ2dJR3o+DVTdohfFjxUqHAZ8bO3vkUT4xblY8n2NnIUWxw3tDHdV/6\niXWVfRcgsIRmFM8qZ7CwwxDZFgLGY3oPhzNmze+B1g5xMG/l4MbKwjCb2EQ38CDr\nDG11GMG5ewhZUDwry4aDpxQMUhvuLBupve+caHzs62zTyWxurwLwfzOHbUyCxbjS\nXAEQ++zCoKncWsAxJdaoIvAvTJBEJeRyGToPESe8iYjmkT1jYZCMj30opOmOZ94M\nE0X4OYpb8FGL/QhOASMe8eW+wYUycySePsQZaQfdIkky7olIsMTBQmSxB16D\n=lXuh\n-----END PGP MESSAGE-----\n", "fp": "85D77543B3D624B63CEA9E6DBC17301B491B3F21"}], "version": 0.8} \ No newline at end of file diff --git a/example.yaml b/example.yaml index 9e5194ca4..b877b77c9 100644 --- a/example.yaml +++ b/example.yaml @@ -14,7 +14,7 @@ an_array: - ENC[AES256_GCM,data:oAkO6uRAV70w+ZOSScMLzUk5rtwybj0epc2tesZkeXuNuM9R0I8l34yQ2/jjCEgLcGYtqB6+i4ljGg==,iv:bniytY7Y+oZen0T3OjBBlQMoHVx4TwnYUI5IgHbf2AY=,tag:7CRdL76zQkwbumga9kWgsg==,type:str] - ENC[AES256_GCM,data:n5ZMVViz/IZwqRDgIljrQg==,iv:8A9X2UyYwyGsFKwoTO1MH69MCpUa31QJ3jSgde9i2Pc=,tag:vG4j9Y01cVg+oJ7peeA6PQ==,type:str] sops: - mac: ENC[AES256_GCM,data:sTti+RCOa7zLNhcgqiMTG7ikbYEr34WqESP+38M1KdF2tIADPNLe4JuRZlhRLbdKYuBhhOG+pAHpMyzz0DMlFHTzONACFL1CMivBj0ZyjZtaXLke8HXFO4wK4/7qEzTXBA2JrxzL4x3qSQYCRE+rKjhiWa8xHdS35dN8rjejPA4=,iv:mqb80ZfTgROVilsEr2XIWVycJJZSCpo3ZAGKKrki4+M=,tag:tWrQOMgxPlIISMGV3/UJbg==,type:str] + mac: ENC[AES256_GCM,data:AZ2oYrcDSYgvnVbKMUS35/qMfbnMz5dibgJCts1z/S6krwEXv/4+j5Mh4nZOgT+wav2WS88j8lmNzfbL81LwY7fI0ajAjNwYTQKnJvH/YP3vFyCSVuRfsR4meheg2DpdN5vALPfdmz8Ib70wgpyQLqWVgDqz46to+0RdCJHwMuk=,iv:Sy3CcFl19xxht7ZfBiwVW5RPxIeGILAt/0FgmCGPz2A=,tag:BKmcOD5XfglXh7rRlfhGfg==,type:str] attention: This section contains key material that should only be modified with extra care. See `sops -h`. kms: @@ -26,6 +26,19 @@ sops: arn: arn:aws:kms:ap-southeast-1:656532927350:key/9006a8aa-0fa6-4c14-930e-a2dfb916de1d version: 0.8 pgp: + - fp: 1022470DE3F0BC54BC6AB62DE05550BC07FB1A0A + enc: | + -----BEGIN PGP MESSAGE----- + Version: GnuPG v1 + + hIwDEEVDpnzXnMABA/458VE1tAIAgviKuG5g/Mv7CUf0abIz4PjMYkNKtqszClGb + 1yjyDxHkn+zBgs+Xp7YftDEhKIafmEVfeC5V0V6DMfNHdGu5h4mjuv+Hlm2rBbMK + PwCZcconWKKYPZskT7WTfaY/WTi+WtDvo6kxYB3+D8OGFF5uzGZyqQZ6kQghYdJe + AXO1DKKbxc/pzxAmnnSsKCksv7kvHAokGSQPuBhZ/tufjwH+BKPQU0Ivh9jpVjuK + JB6E7XZ02Qtt9yTXGkojZxBUD9cZJxe4De/X1MbXWgVAJ0J6ShkeFNl1PS44ig== + =oYdL + -----END PGP MESSAGE----- + created_at: '2015-10-08T15:33:10Z' - fp: 85D77543B3D624B63CEA9E6DBC17301B491B3F21 created_at: 1444233192.486551 enc: | diff --git a/sops/__init__.py b/sops/__init__.py index 0c2368006..578918f0c 100644 --- a/sops/__init__.py +++ b/sops/__init__.py @@ -35,6 +35,9 @@ else: import json from collections import OrderedDict +if sys.version_info[0] == 3: + raw_input = input + VERSION = 0.8 DESC = """ diff --git a/tests/sops_functional_tests_key.asc b/tests/sops_functional_tests_key.asc new file mode 100644 index 000000000..ad7ecc56c --- /dev/null +++ b/tests/sops_functional_tests_key.asc @@ -0,0 +1,34 @@ +-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: GnuPG v1 + +lQHYBFYWi4IBBADQCJUOJC3UOFtH2CTL0z1q+MiqX0/nDWCT+/HcmopzAv4g6nC4 +cYNohy2wImR4pLR2IoYdBBzV8iH/E030SSuY+KkO2WAA1QqyJChglrfIlC7VZL+R +/iA6IijQod6uhDUqjDrGVXQUWdEsFRyTjnH7wFiXCQz+Y9lgSMYhP63owwARAQAB +AAP+MJ+w5ytBovbBLxuwDgwDsPsRO/EnJeQUjMI4l81vSs6KQ3tIeXPeuRHPdfmz +7hbhLzOGkUWiz8bWd141vEFV9PFMfGUU4U4lxUT+fdCFdH7gcmfLeCcryeKvmORo +z8hlb/3rIpSXcdDVxA0hARsohZqqeIAVurzZC51BLIxL+uECAOAAEoVwJtb3hJDR +w9eVEqA8vtI80Y709Bu26uDaDO12XdPg80PQvKbJgV2W37LFil8HfUwl0eFVEvgR +sO9cDIkCAO3AlrDE/pva5okDmuy9N14v5wnOQk/ibGOKmvuVSkv0LCiSgSZCvQFI +w2+sxau3IEWbQCI1pDGzDjRQZt0Hb+sB/2+H5lDzh25XUTmNfHPWLob/4amPjaRf +NWGnVSBbXamA/q/dJnt3odNuUFZ1jBhFGrcDzjYPztk69cDhlmJY/TCow7RVU09Q +UyBGdW5jdGlvbmFsIFRlc3RzIChodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9z +b3BzLykgPHVsZnIrc29wc3Rlc3RzQG1vemlsbGEuY29tPoi3BBMBCAAhBQJWFouC +AhsDBQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAAAoJEOBVULwH+xoKn6cD/RcsXBkD +afH1kscS2zxhOeEqZiV8J+T3M2ZCrw1gEDn8tWyVdy/O5hwwOKVf10dqrXiKG9ld +3UeokljIhOpGE4izwTQQvE2O/ACdb70kp6BgBUpGsGHU0q+3/wCbDPJjtp4EqzwO +36LzLbaMZyrw0unTSR96sYRuEonuaxRKMwNZnQHYBFYWi4IBBACue2Pc46G2Hki2 +eVc5K7uroCTCsOf86WMX36c/jqTnXXsoaKPt3TrGoGo7w3fJvZfdTOseRzuoLVPd +Rel6npyTzvMzajDKOPL/DeVeleT8sn/GKeJwS9cqDxUH6ytZ4fo5nuUM/IGeRXSD +sK9Ri6gWytX7eRflXk0dySVuY5KeXwARAQABAAP+KG6CWRTMi8mfut0KV76pGd+d +tRnOYD5qzoTumh1BXDW+zMHWvs9lh9JzW47ziqWq88aXsyf5jIKYbO1+6YGosXt8 +mpc7JFxCthwDWcEGs3J6lSgjlNnsXVlHNwJB74Z/6nmRqVbLUBr2TuuCC+DvWIR2 +EP5i5PmwOp4dEdd/NE0CAMZJFrIT69YAXsxyE+6mP6IWYeAvBYPDU1KiHMt/unWk +JPLeiVSoE/AdvNouJJVadoCLO8uRS6dH9wg+j5zlUVsCAOFEn3LX1mGMIx0F3AFq +EfHkNcrWwhWTAy+Sv4pK12xpwN4Fb92/aeD8BSuIQeyZI2HsmCPuiPud1m6lAqe+ +Uk0B/2QiApmJOCBeqhXeJV5CaxDebaPKV0UVBsMLORnmAWRNBZ3onzU/XJYP5U5F +zhVfjg3smzHXD/vkfzO0xUqVfiGfUYifBBgBCAAJBQJWFouCAhsMAAoJEOBVULwH ++xoKz18D/2rLxAacpnu+qfKVUNdq+xQAlBF4Tt1xgmRayuYSI0ougvxKwyMFeuXj +sZlaMHbqJX6TpOiFU8FvMU8syhBgWNYYq/3JNKw9GVDabO5Ggbluup/q1/uJHO1y +v8bK3sq5s580DSaWamLgSLwl3UfCnL3Qa0XDT6SoY1L/Wzr1iW+9 +=zqxY +-----END PGP PRIVATE KEY BLOCK-----