diff --git a/.codeclimate.yml b/.codeclimate.yml deleted file mode 100644 index ce3bc33e17..0000000000 --- a/.codeclimate.yml +++ /dev/null @@ -1,12 +0,0 @@ ---- -exclude_patterns: - - public/lib/ - - public/js/lib/ - - public/fonts/ - - public/css/jquery-ui/ - - public/css/bootstrap-multiselect.css - - public/css/bootstrap-sortable.css - - public/css/bootstrap-tagsinput.css - - public/css/daterangepicker.css - - public/css/google-fonts.css - - .sandstorm/ diff --git a/.deploy/docker/cacert.pem b/.deploy/docker/cacert.pem new file mode 100644 index 0000000000..ee25bee119 --- /dev/null +++ b/.deploy/docker/cacert.pem @@ -0,0 +1,3314 @@ +## +## Bundle of CA Root Certificates +## +## Certificate data from Mozilla as of: Wed Jun 20 03:12:06 2018 GMT +## +## This is a bundle of X.509 certificates of public Certificate Authorities +## (CA). These were automatically extracted from Mozilla's root certificates +## file (certdata.txt). This file can be found in the mozilla source tree: +## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt +## +## It contains the certificates in PEM format and therefore +## can be directly used with curl / libcurl / php_curl, or with +## an Apache+mod_ssl webserver for SSL client authentication. +## Just configure this file as the SSLCACertificateFile. +## +## Conversion done with mk-ca-bundle.pl version 1.27. +## SHA256: c80f571d9f4ebca4a91e0ad3a546f263153d71afffc845c6f8f52ce9d1a2e8ec +## + + +GlobalSign Root CA +================== +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx +GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds +b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD +VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa +DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc +THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb +Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP +c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX +gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF +AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj +Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG +j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH +hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC +X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +GlobalSign Root CA - R2 +======================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 +ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp +s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN +S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL +TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C +ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i +YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN +BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp +9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu +01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 +9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 +EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc +cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw +EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj +055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f +j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 +xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa +t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- + +Entrust.net Premium 2048 Secure Server CA +========================================= +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u +ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp +bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV +BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx +NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 +d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl +MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u +ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL +Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr +hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW +nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi +VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ +KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy +T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT +J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e +nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- + +Baltimore CyberTrust Root +========================= +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE +ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li +ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC +SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs +dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME +uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB +UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C +G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 +XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr +l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI +VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB +BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh +cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 +hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa +Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H +RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +AddTrust External Root +====================== +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD +VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw +NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU +cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg +Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 ++iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw +Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo +aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy +2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 +7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL +VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk +VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB +IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl +j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 +e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u +G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- + +Entrust Root Certification Authority +==================================== +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw +b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG +A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 +MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu +MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu +Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v +dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz +A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww +Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 +j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN +rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 +MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH +hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM +Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa +v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS +W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 +tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +GeoTrust Global CA +================== +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw +MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo +BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet +8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc +T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU +vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk +DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q +zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 +d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 +mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p +XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm +Mw== +-----END CERTIFICATE----- + +GeoTrust Universal CA +===================== +-----BEGIN CERTIFICATE----- +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 +MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu +Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t +JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e +RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs +7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d +8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V +qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga +Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB +Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu +KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 +ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 +XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB +hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 +qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL +oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK +xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF +KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 +DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK +xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU +p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI +P/rmMuGNG2+k5o7Y+SlIis5z/iw= +-----END CERTIFICATE----- + +GeoTrust Universal CA 2 +======================= +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 +MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg +SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 +DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 +j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q +JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a +QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 +WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP +20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn +ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC +SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG +8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 ++/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E +BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ +4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ +mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq +A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg +Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP +pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d +FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp +gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm +X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +-----END CERTIFICATE----- + +Visa eCommerce Root +=================== +-----BEGIN CERTIFICATE----- +MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG +EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug +QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 +WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm +VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv +bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL +F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b +RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 +TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI +/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs +GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG +MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc +CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW +YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz +zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu +YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt +398znM/jra6O1I7mT1GvFpLgXPYHDw== +-----END CERTIFICATE----- + +Comodo AAA Services root +======================== +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw +MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl +c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV +BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG +C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs +i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW +Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH +Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK +Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f +BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl +cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz +LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm +7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z +8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C +12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +QuoVadis Root CA +================ +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE +ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz +MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp +cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD +EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk +J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL +F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL +YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen +AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w +PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y +ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 +MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj +YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs +ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW +Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu +BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw +FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 +tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo +fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul +LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x +gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi +5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi +5nrQNiOKSnQ2+Q== +-----END CERTIFICATE----- + +QuoVadis Root CA 2 +================== +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT +EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx +ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6 +XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk +lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB +lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy +lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt +66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn +wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh +D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy +BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie +J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud +DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU +a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv +Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 +UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm +VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK ++JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW +IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1 +WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X +f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II +4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8 +VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- + +QuoVadis Root CA 3 +================== +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT +EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx +OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg +DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij +KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K +DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv +BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp +p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8 +nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX +MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM +Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz +uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT +BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj +YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB +BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD +VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4 +ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE +AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV +qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s +hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z +POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2 +Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp +8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC +bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu +g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p +vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr +qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- + +Security Communication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw +8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM +DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX +5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd +DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 +JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g +0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a +mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ +s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ +6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi +FL39vmwLAw== +-----END CERTIFICATE----- + +Sonera Class 2 Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG +U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw +NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh +IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 +/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT +dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG +f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P +tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH +nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT +XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt +0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI +cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph +Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx +EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH +llpwrN9M +-----END CERTIFICATE----- + +XRamp Global CA Root +==================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE +BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj +dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx +HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg +U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu +IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx +foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE +zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs +AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry +xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap +oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC +AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc +/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n +nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz +8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +Go Daddy Class 2 CA +=================== +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY +VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG +A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g +RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD +ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv +2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 +qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j +YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY +vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O +BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o +atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu +MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG +A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim +PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt +I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI +Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b +vZ8= +-----END CERTIFICATE----- + +Starfield Class 2 CA +==================== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc +U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo +MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG +A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG +SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY +bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ +JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm +epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN +F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF +MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f +hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo +bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g +QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs +afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM +PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD +KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 +QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +Taiwan GRCA +=========== +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG +EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X +DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv +dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN +w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 +BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O +1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO +htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov +J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 +Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t +B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB +O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 +lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV +HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 +09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ +TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj +Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 +Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU +D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz +DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk +Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk +7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ +CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy ++fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS +-----END CERTIFICATE----- + +DigiCert Assured ID Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx +MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO +9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy +UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW +/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy +oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf +GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF +66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq +hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc +EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn +SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i +8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +DigiCert Global Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw +MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn +TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 +BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H +4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y +7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB +o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm +8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF +BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr +EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt +tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 +UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +DigiCert High Assurance EV Root CA +================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw +KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw +MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ +MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu +Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t +Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS +OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 +MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ +NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe +h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB +Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY +JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ +V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp +myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK +mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K +-----END CERTIFICATE----- + +Certplus Class 2 Primary CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE +BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN +OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy +dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR +5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ +Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO +YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e +e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME +CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ +YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t +L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD +P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R +TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ +7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW +//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 +l7+ijrRU +-----END CERTIFICATE----- + +DST Root CA X3 +============== +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK +ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X +DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 +cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT +rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 +UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy +xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d +utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ +MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug +dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE +GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw +RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS +fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE----- + +SwissSign Gold CA - G2 +====================== +-----BEGIN CERTIFICATE----- +MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw +EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN +MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp +c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq +t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C +jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg +vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF +ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR +AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend +jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO +peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR +7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi +GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64 +OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov +L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm +5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr +44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf +Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m +Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp +mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk +vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf +KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br +NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj +viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ +-----END CERTIFICATE----- + +SwissSign Silver CA - G2 +======================== +-----BEGIN CERTIFICATE----- +MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT +BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X +DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3 +aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG +9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644 +N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm ++/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH +6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu +MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h +qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5 +FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs +ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc +celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X +CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB +tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 +cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P +4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F +kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L +3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx +/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa +DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP +e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu +WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ +DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub +DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority +======================================== +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ +cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN +b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 +nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge +RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt +tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI +hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K +Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN +NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa +Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG +1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- + +thawte Primary Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 +MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg +SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv +KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT +FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs +oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ +1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc +q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K +aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p +afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF +AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE +uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 +jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH +z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G5 +============================================================ +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln +biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh +dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz +j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD +Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ +Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r +fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ +BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv +Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG +SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ +X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE +KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC +Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE +ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- + +SecureTrust CA +============== +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy +dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe +BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX +OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t +DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH +GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b +01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH +ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj +aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu +SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf +mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ +nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +Secure Global CA +================ +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH +bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg +MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx +YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ +bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g +8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV +HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi +0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn +oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA +MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ +OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn +CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 +3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +COMODO Certification Authority +============================== +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb +MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD +T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH ++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww +xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV +4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA +1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI +rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k +b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC +AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP +OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc +IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN ++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== +-----END CERTIFICATE----- + +Network Solutions Certificate Authority +======================================= +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG +EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr +IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx +MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx +jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT +aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT +crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc +/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB +AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv +bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA +A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q +4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ +GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD +ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +COMODO ECC Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix +GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X +4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni +wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG +FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA +U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GA CA +=============================== +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE +BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG +A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH +bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD +VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw +IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 +IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 +Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg +Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD +d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ +/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R +LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm +MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 ++vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY +okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= +-----END CERTIFICATE----- + +Certigna +======== +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw +EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 +MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI +Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q +XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH +GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p +ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg +DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf +Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ +tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ +BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J +SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA +hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ +ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu +PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY +1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +Deutsche Telekom Root CA 2 +========================== +-----BEGIN CERTIFICATE----- +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT +RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG +A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 +MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G +A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS +b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 +bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI +KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY +AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK +Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV +jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV +HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr +E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy +zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 +rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G +dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== +-----END CERTIFICATE----- + +Cybertrust Global Root +====================== +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li +ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 +MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD +ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA ++Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW +0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL +AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin +89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT +8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 +MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G +A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO +lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi +5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 +hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T +X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +ePKI Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx +MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq +MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs +IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi +lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv +qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX +12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O +WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ +ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao +lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ +vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi +Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi +MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 +1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq +KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV +xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP +NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r +GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE +xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx +gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy +sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD +BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +certSIGN ROOT CA +================ +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD +VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa +Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE +CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I +JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH +rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 +ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD +0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 +AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B +Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB +AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 +SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 +x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt +vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz +TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G3 +============================================= +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 +IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz +NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo +YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT +LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j +K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE +c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C +IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu +dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr +2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 +cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE +Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s +t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- + +thawte Primary Root CA - G2 +=========================== +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC +VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu +IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg +Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV +MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG +b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt +IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS +LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 +8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU +mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN +G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K +rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- + +thawte Primary Root CA - G3 +=========================== +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w +ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD +VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG +A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At +P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC ++BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY +7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW +vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ +KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK +A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC +8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm +er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G2 +============================================= +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu +Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 +OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl +b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG +BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc +KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ +EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m +ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 +npaqBA+K +-----END CERTIFICATE----- + +VeriSign Universal Root Certification Authority +=============================================== +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj +1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP +MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 +9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I +AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR +tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G +CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O +a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 +Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx +Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx +P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P +wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 +mJO37M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G4 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC +VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz +ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU +cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 +Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz +rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw +HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u +Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD +A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx +AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- + +NetLock Arany (Class Gold) Főtanúsítvány +======================================== +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G +A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 +dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB +cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx +MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO +ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 +c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu +0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw +/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk +H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw +fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 +neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW +qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta +YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna +NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu +dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA - G2 +================================== +-----BEGIN CERTIFICATE----- +MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC +TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l +ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ +5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn +vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj +CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil +e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR +OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI +CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65 +48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi +trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737 +qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB +AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC +ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA +A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz ++51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj +f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN +kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk +CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF +URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb +CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h +oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV +IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm +66+KAQ== +-----END CERTIFICATE----- + +Hongkong Post Root CA 1 +======================= +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT +DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx +NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n +IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 +ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr +auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh +qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY +V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV +HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i +h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio +l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei +IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps +T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT +c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== +-----END CERTIFICATE----- + +SecureSign RootCA11 +=================== +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi +SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS +b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw +KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 +cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL +TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO +wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq +g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP +O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA +bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX +t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh +OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r +bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ +Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 +y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 +lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER +MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv +c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE +BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt +U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA +fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG +0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA +pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm +1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC +AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf +QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE +FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o +lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX +I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 +yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi +LXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +GlobalSign Root CA - R3 +======================= +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt +iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ +0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 +rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl +OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 +xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 +lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 +EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E +bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 +YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r +kpeDMdmztcpHWD9f +-----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud +EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH +DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA +bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx +ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx +51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk +R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP +T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f +Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl +osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR +crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR +saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD +KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi +6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +Izenpe.com +========== +-----BEGIN CERTIFICATE----- +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG +EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz +MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu +QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ +03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK +ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU ++zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC +PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT +OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK +F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK +0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ +0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB +leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID +AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ +SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG +NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l +Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga +kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q +hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs +g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 +aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 +nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC +ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo +Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z +WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +-----END CERTIFICATE----- + +Chambers of Commerce Root - 2008 +================================ +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy +Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl +ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF +EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl +cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA +XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj +h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ +ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk +NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g +D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 +lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ +0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 +EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI +G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ +BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh +bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh +bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC +CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH +AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 +wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH +3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU +RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 +M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 +YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF +9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK +zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG +nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ +-----END CERTIFICATE----- + +Global Chambersign Root - 2008 +============================== +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx +NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg +Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ +QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf +VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf +XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 +ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB +/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA +TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M +H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe +Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF +HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB +AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT +BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE +BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm +aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm +aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp +1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 +dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG +/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 +ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s +dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg +9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH +foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du +qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr +P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq +c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- + +Go Daddy Root Certificate Authority - G2 +======================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu +MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G +A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq +9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD ++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd +fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl +NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 +BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac +vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r +5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV +N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 +-----END CERTIFICATE----- + +Starfield Root Certificate Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 +eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw +DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg +VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB +dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv +W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs +bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk +N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf +ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU +JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol +TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx +4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw +F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ +c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +Starfield Services Root Certificate Authority - G2 +================================================== +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl +IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT +dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 +h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa +hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP +LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB +rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG +SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP +E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy +xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza +YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 +-----END CERTIFICATE----- + +AffirmTrust Commercial +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw +MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb +DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV +C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 +BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww +MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV +HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG +hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi +qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv +0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh +sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +AffirmTrust Networking +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw +MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE +Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI +dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 +/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb +h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV +HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu +UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 +12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 +WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 +/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +AffirmTrust Premium +=================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy +OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy +dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn +BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV +5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs ++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd +GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R +p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI +S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 +6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 +/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo ++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv +MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC +6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S +L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK ++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV +BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg +IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 +g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb +zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== +-----END CERTIFICATE----- + +AffirmTrust Premium ECC +======================= +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV +BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx +MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U +cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ +N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW +BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X +57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM +eQ== +-----END CERTIFICATE----- + +Certum Trusted Network CA +========================= +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK +ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy +MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU +ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC +l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J +J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 +fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 +cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB +Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw +DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj +jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 +mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj +Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +TWCA Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ +VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG +EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB +IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx +QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC +oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP +4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r +y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG +9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC +mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW +QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY +T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny +Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +Security Communication RootCA2 +============================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC +SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy +aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ ++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R +3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV +spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K +EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 +QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB +CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj +u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk +3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q +tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 +mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +EC-ACC +====== +-----BEGIN CERTIFICATE----- +MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE +BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w +ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD +VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE +CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT +BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 +MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt +SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl +Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh +cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK +w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT +ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 +HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a +E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw +0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD +VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 +Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l +dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ +lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa +Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe +l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 +E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D +5EI= +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2011 +======================================================= +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT +O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y +aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT +AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo +IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI +1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa +71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u +8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH +3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ +MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 +MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu +b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt +XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD +/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N +7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +Actalis Authentication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM +BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE +AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky +MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz +IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ +wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa +by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 +zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f +YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 +oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l +EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 +hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 +EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 +jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY +iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI +WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 +JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx +K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ +Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC +4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo +2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz +lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem +OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 +vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +Trustis FPS Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG +EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 +IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV +BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ +RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk +H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa +cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt +o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA +AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd +BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c +GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC +yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P +8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV +l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl +iB6XzCGcKQENZetX2fNXlrtIzYE= +-----END CERTIFICATE----- + +Buypass Class 2 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X +DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 +g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn +9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b +/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU +CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff +awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI +zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn +Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX +Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs +M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI +osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S +aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd +DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD +LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 +oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC +wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS +CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN +rJgWVqA= +-----END CERTIFICATE----- + +Buypass Class 3 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X +DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH +sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR +5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh +7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ +ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH +2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV +/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ +RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA +Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq +j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G +uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG +Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 +ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 +KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz +6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug +UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe +eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi +Cp/HuZc= +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 3 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx +MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK +9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU +NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF +iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W +0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr +AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb +fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT +ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h +P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== +-----END CERTIFICATE----- + +EE Certification Centre Root CA +=============================== +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG +EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy +dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw +MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB +UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy +ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM +TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2 +rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw +93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN +P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ +MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF +BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj +xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM +lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU +3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM +dcGWxZ0= +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe +Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE +LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD +ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA +BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv +KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z +p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC +AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ +4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y +eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw +MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G +PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw +OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm +2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV +dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph +X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 EV 2009 +================================= +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS +egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh +zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T +7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 +sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 +11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv +cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v +ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El +MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp +b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh +c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ +PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX +ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA +NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv +w9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +CA Disig Root R2 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC +w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia +xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 +A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S +GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV +g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa +5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE +koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A +Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i +Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u +Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV +sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je +dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 +1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx +mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 +utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 +sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg +UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV +7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +ACCVRAIZ1 +========= +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB +SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 +MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH +UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM +jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 +RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD +aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ +0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG +WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 +8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR +5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J +9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK +Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw +Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu +Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM +Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA +QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh +AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA +YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj +AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA +IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk +aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 +dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 +MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI +hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E +R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN +YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 +nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ +TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 +sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg +Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd +3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p +EfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +TWCA Global Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT +CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD +QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK +EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg +Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C +nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV +r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR +Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV +tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W +KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 +sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p +yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn +kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI +zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g +cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M +8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg +/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg +lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP +A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m +i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 +EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 +zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= +-----END CERTIFICATE----- + +TeliaSonera Root CA v1 +====================== +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE +CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 +MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW +VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ +6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA +3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k +B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn +Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH +oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 +F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ +oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 +gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc +TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB +AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW +DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm +zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW +pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV +G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc +c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT +JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 +qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 +Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems +WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +E-Tugra Certification Authority +=============================== +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w +DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls +ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw +NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx +QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl +cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD +DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd +hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K +CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g +ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ +BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 +E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz +rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq +jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 +dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB +/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG +MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK +kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO +XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 +VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo +a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc +dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV +KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT +Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 +8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G +C7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 2 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx +MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ +SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F +vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 +2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV +WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy +YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 +r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf +vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR +3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== +-----END CERTIFICATE----- + +Atos TrustedRoot 2011 +===================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU +cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 +MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG +A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV +hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr +54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ +DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 +HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR +z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R +l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ +bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h +k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh +TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 +61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G +3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +QuoVadis Root CA 1 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE +PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm +PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 +Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN +ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l +g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV +7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX +9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f +iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg +t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI +hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 +GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct +Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP ++V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh +3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa +wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 +O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 +FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV +hMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +QuoVadis Root CA 2 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh +ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY +NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t +oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o +MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l +V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo +L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ +sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD +6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh +lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI +hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K +pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 +x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz +dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X +U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw +mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD +zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN +JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr +O3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +QuoVadis Root CA 3 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 +IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL +Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe +6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 +I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U +VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 +5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi +Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM +dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt +rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI +hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS +t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ +TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du +DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib +Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD +hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX +0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW +dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 +PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +DigiCert Assured ID Root G2 +=========================== +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw +MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH +35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq +bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw +VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP +YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn +lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO +w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv +0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz +d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW +hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M +jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +DigiCert Assured ID Root G3 +=========================== +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD +VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ +BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb +RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs +KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF +UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy +YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy +1vUhZscv6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +DigiCert Global Root G2 +======================= +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx +MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ +kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO +3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV +BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM +UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB +o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu +5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr +F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U +WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH +QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ +iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +DigiCert Global Root G3 +======================= +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD +VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw +MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k +aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C +AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O +YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp +Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y +3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 +VOKa5Vt8sycX +-----END CERTIFICATE----- + +DigiCert Trusted Root G4 +======================== +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o +k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa +vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY +QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 +MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm +mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 +f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH +dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 +oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY +ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr +yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy +7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah +ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN +5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb +/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa +5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK +G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP +82Z+ +-----END CERTIFICATE----- + +COMODO RSA Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwHhcNMTAwMTE5MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0Rn +dJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZ +FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+ +5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pG +x8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z+pUX +2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQL +OvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3 +sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+C +GCe01a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5 +WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w +DQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvlwFTPoCWOAvn9sKIN9SCYPBMt +rFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+ +nq6PK7o9mfjYcwlYRm6mnPTXJ9OV2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSg +tZx8jb8uk2IntznaFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwW +sRqZCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiKboHGhfKp +pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA +zMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yLS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHq +ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52 +7RH89elWsn2/x20Kk4yl0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7I +LaZRfyHBNVOFBkpdn627G190 +-----END CERTIFICATE----- + +USERTrust RSA Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK +ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK +ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCAEmUXNg7D2wiz +0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2j +Y0K2dvKpOyuR+OJv0OwWIJAJPuLodMkYtJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFn +RghRy4YUVD+8M/5+bJz/Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O ++T23LLb2VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT79uq +/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6c0Plfg6lZrEpfDKE +Y1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmTYo61Zs8liM2EuLE/pDkP2QKe6xJM +lXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97lc6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8 +yexDJtC/QV9AqURE9JnnV4eeUB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+ +eLf8ZxXhyVeEHg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd +BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPFUp/L+M+ZBn8b2kMVn54CVVeW +FPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KOVWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ +7l8wXEskEVX/JJpuXior7gtNn3/3ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQ +Eg9zKC7F4iRO/Fjs8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM +8WcRiQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYzeSf7dNXGi +FSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZXHlKYC6SQK5MNyosycdi +yA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9c +J2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRBVXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGw +sAvgnEzDHNb842m1R0aBL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gx +Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +USERTrust ECC Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 +0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez +nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV +HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB +HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu +9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R4 +=========================== +-----BEGIN CERTIFICATE----- +MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl +OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P +AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV +MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF +JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R5 +=========================== +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 +SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS +h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx +uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 +yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA - G3 +================================== +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMC +TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l +ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4y +olQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2t +x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy +EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K +Tj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUur +mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5 +1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp +07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDo +FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE +41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleu +yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD +U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPq +KqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1 +v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA +8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b +8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0r +mj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq +1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeI +JG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksV +tzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk= +-----END CERTIFICATE----- + +Staat der Nederlanden EV Root CA +================================ +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M +MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl +cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk +SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW +O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r +0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 +Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV +XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr +08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV +0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd +74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx +fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa +ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu +c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq +5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN +b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN +f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi +5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 +WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK +DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy +eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== +-----END CERTIFICATE----- + +IdenTrust Commercial Root CA 1 +============================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS +b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES +MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB +IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld +hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ +mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi +1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C +XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl +3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy +NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV +WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg +xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix +uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI +hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg +ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt +ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV +YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX +feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro +kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe +2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz +Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R +cGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +IdenTrust Public Sector Root CA 1 +================================= +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv +ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV +UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS +b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy +P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 +Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI +rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf +qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS +mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn +ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh +LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v +iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL +4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B +Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw +DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A +mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt +GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt +m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx +NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 +Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI +ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC +ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ +3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +Entrust Root Certification Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy +bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug +b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw +HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT +DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx +OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP +/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz +HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU +s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y +TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx +AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 +0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z +iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi +nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ +vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO +e4pIb4tF9g== +-----END CERTIFICATE----- + +Entrust Root Certification Authority - EC1 +========================================== +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx +FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn +YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw +FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs +LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg +dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy +AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef +9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h +vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 +kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +CFCA EV ROOT +============ +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE +CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB +IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw +MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD +DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV +BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD +7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN +uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW +ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 +xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f +py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K +gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol +hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ +tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf +BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q +ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua +4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG +E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX +BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn +aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy +PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX +kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C +ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +Certinomis - Root CA +==================== +-----BEGIN CERTIFICATE----- +MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjETMBEGA1UEChMK +Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAbBgNVBAMTFENlcnRpbm9taXMg +LSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMzMTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIx +EzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRD +ZXJ0aW5vbWlzIC0gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQos +P5L2fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJflLieY6pOo +d5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQVWZUKxkd8aRi5pwP5ynap +z8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDFTKWrteoB4owuZH9kb/2jJZOLyKIOSY00 +8B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09x +RLWtwHkziOC/7aOgFLScCbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE +6OXWk6RiwsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJwx3t +FvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SGm/lg0h9tkQPTYKbV +PZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4F2iw4lNVYC2vPsKD2NkJK/DAZNuH +i5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZngWVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGj +YzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I +6tNxIqSSaHh02TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF +AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/0KGRHCwPT5iV +WVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWwF6YSjNRieOpWauwK0kDDPAUw +Pk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZSg081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAX +lCOotQqSD7J6wWAsOMwaplv/8gzjqh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJ +y29SWwNyhlCVCNSNh4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9 +Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng +DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi +I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM +cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr +hkIGuUE= +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GB CA +=============================== +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG +EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw +MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds +b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX +scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP +rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk +9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o +Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg +GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI +hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD +dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0 +VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui +HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +SZAFIR ROOT CA2 +=============== +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG +A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV +BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ +BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD +VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q +qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK +DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE +2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ +ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi +ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P +AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC +AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5 +O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67 +oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul +4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6 ++/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- + +Certum Trusted Network CA 2 +=========================== +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE +BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1 +bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y +ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ +TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB +IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9 +7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o +CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b +Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p +uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130 +GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ +9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB +Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye +hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM +BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI +hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW +Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA +L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo +clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM +pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb +w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo +J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm +ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX +is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7 +zAYspsbiDrW5viSP +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2015 +======================================================= +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT +BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0 +aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl +YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx +MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg +QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV +BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw +MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv +bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh +iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+ +6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd +FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr +i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F +GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2 +fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu +iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI +hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+ +D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM +d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y +d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn +82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb +davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F +Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt +J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa +JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q +p/UsQu0yrbYhnr68 +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions ECC RootCA 2015 +=========================================================== +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0 +aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u +cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj +aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw +MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj +IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD +VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290 +Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP +dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK +Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA +GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn +dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- + +Certplus Root CA G1 +=================== +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgISESBVg+QtPlRWhS2DN7cs3EYRMA0GCSqGSIb3DQEBDQUAMD4xCzAJBgNV +BAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTAe +Fw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhD +ZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBANpQh7bauKk+nWT6VjOaVj0W5QOVsjQcmm1iBdTYj+eJZJ+622SLZOZ5KmHN +r49aiZFluVj8tANfkT8tEBXgfs+8/H9DZ6itXjYj2JizTfNDnjl8KvzsiNWI7nC9hRYt6kuJPKNx +Qv4c/dMcLRC4hlTqQ7jbxofaqK6AJc96Jh2qkbBIb6613p7Y1/oA/caP0FG7Yn2ksYyy/yARujVj +BYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTv +LRN6HkJKHRUxrgwEV/xhc/MxVoYxgKDEEW4wduOU8F8ExKyHcomYxZ3MVwia9Az8fXoFOvpHgDm2 +z4QTd28n6v+WZxcIbekN1iNQMLAVdBM+5S//Ds3EC0pd8NgAM0lm66EYfFkuPSi5YXHLtaW6uOrc +4nBvCGrch2c0798wct3zyT8j/zXhviEpIDCB5BmlIOklynMxdCm+4kLV87ImZsdo/Rmz5yCTmehd +4F6H50boJZwKKSTUzViGUkAksnsPmBIgJPaQbEfIDbsYIC7Z/fyL8inqh3SV4EJQeIQEQWGw9CEj +jy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPOWftwenMGE9nTdDckQQoRb5fc5+R+ +ob0V8rqHDz1oihYHAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0G +A1UdDgQWBBSowcCbkahDFXxdBie0KlHYlwuBsTAfBgNVHSMEGDAWgBSowcCbkahDFXxdBie0KlHY +lwuBsTANBgkqhkiG9w0BAQ0FAAOCAgEAnFZvAX7RvUz1isbwJh/k4DgYzDLDKTudQSk0YcbX8ACh +66Ryj5QXvBMsdbRX7gp8CXrc1cqh0DQT+Hern+X+2B50ioUHj3/MeXrKls3N/U/7/SMNkPX0XtPG +YX2eEeAC7gkE2Qfdpoq3DIMku4NQkv5gdRE+2J2winq14J2by5BSS7CTKtQ+FjPlnsZlFT5kOwQ/ +2wyPX1wdaR+v8+khjPPvl/aatxm2hHSco1S1cE5j2FddUyGbQJJD+tZ3VTNPZNX70Cxqjm0lpu+F +6ALEUz65noe8zDUa3qHpimOHZR4RKttjd5cUvpoUmRGywO6wT/gUITJDT5+rosuoD6o7BlXGEilX +CNQ314cnrUlZp5GrRHpejXDbl85IULFzk/bwg2D5zfHhMf1bfHEhYxQUqq/F3pN+aLHsIqKqkHWe +tUNy6mSjhEv9DKgma3GX7lZjZuhCVPnHHd/Qj1vfyDBviP4NxDMcU6ij/UgQ8uQKTuEVV/xuZDDC +VRHc6qnNSlSsKWNEz0pAoNZoWRsz+e86i9sgktxChL8Bq4fA1SCC28a5g4VCXA9DO2pJNdWY9BW/ ++mGBDAkgGNLQFwzLSABQ6XaCjGTXOqAHVcweMcDvOrRl++O/QmueD6i9a5jc2NvLi6Td11n0bt3+ +qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo= +-----END CERTIFICATE----- + +Certplus Root CA G2 +=================== +-----BEGIN CERTIFICATE----- +MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4xCzAJBgNVBAYT +AkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjAeFw0x +NDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0 +cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IA +BM0PW1aC3/BFGtat93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uN +Am8xIk0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMB8GA1Ud +IwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqGSM49BAMDA2gAMGUCMHD+sAvZ94OX7PNV +HdTcswYO/jOYnYs5kGuUIe22113WTNchp+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjl +vPl5adytRSv3tjFzzAalU5ORGpOucGpnutee5WEaXw== +-----END CERTIFICATE----- + +OpenTrust Root CA G1 +==================== +-----BEGIN CERTIFICATE----- +MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUAMEAxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcx +MB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM +CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7fa +Yp6bwiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX/uMftk87 +ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR077F9jAHiOH3BX2pfJLKO +YheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGPuY4zbGneWK2gDqdkVBFpRGZPTBKnjix9 +xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLxp2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO +9z0M+Yo0FMT7MzUj8czxKselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq +3ywgsNw2TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+WG+Oi +n6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPwvFEVVJSmdz7QdFG9 +URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYYEQRVzXR7z2FwefR7LFxckvzluFqr +TJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUl0YhVyE12jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/Px +N3DlCPaTKbYwDQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E +PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kfgLMtMrpkZ2Cv +uVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbSFXJfLkur1J1juONI5f6ELlgK +n0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLh +X4SPgPL0DTatdrOjteFkdjpY3H1PXlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80 +nR14SohWZ25g/4/Ii+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcm +GS3tTAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L9109S5zvE/ +bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/KyPu1svf0OnWZzsD2097+o +4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJAwSQiumPv+i2tCqjI40cHLI5kqiPAlxA +OXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj1oxx +-----END CERTIFICATE----- + +OpenTrust Root CA G2 +==================== +-----BEGIN CERTIFICATE----- +MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUAMEAxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcy +MB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM +CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+ +Ntmh/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78eCbY2albz +4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/61UWY0jUJ9gNDlP7ZvyCV +eYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fEFY8ElggGQgT4hNYdvJGmQr5J1WqIP7wt +UdGejeBSzFfdNTVY27SPJIjki9/ca1TSgSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz +3GIZ38i1MH/1PCZ1Eb3XG7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj +3CzMpSZyYhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaHvGOz +9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4t/bQWVyJ98LVtZR0 +0dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/gh7PU3+06yzbXfZqfUAkBXKJOAGT +y3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUajn6QiL35okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59 +M4PLuG53hq8wDQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz +Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0nXGEL8pZ0keI +mUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qTRmTFAHneIWv2V6CG1wZy7HBG +S4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpTwm+bREx50B1ws9efAvSyB7DH5fitIw6mVskp +EndI2S9G/Tvw/HRwkqWOOAgfZDC2t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ +6e18CL13zSdkzJTaTkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97kr +gCf2o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU3jg9CcCo +SmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eAiN1nE28daCSLT7d0geX0 +YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14fWKGVyasvc0rQLW6aWQ9VGHgtPFGml4vm +u7JwqkwR3v98KzfUetF3NI/n+UL3PIEMS1IK +-----END CERTIFICATE----- + +OpenTrust Root CA G3 +==================== +-----BEGIN CERTIFICATE----- +MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAxCzAJBgNVBAYT +AkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEczMB4X +DTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9w +ZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAARK7liuTcpm3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5B +ta1doYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4GA1UdDwEB +/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAf +BgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAKBggqhkjOPQQDAwNpADBmAjEAj6jcnboM +BBf6Fek9LykBl7+BFjNAk2z8+e2AcG+qj9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta +3U1fJAuwACEl74+nBCZx4nxp5V2a+EEfOzmTk51V6s2N8fvB +-----END CERTIFICATE----- + +ISRG Root X1 +============ +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE +BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD +EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG +EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT +DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r +Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1 +3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K +b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN +Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ +4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf +1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu +hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH +usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r +OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G +A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY +9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV +0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt +hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw +TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx +e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA +JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD +YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n +JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ +m+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- + +AC RAIZ FNMT-RCM +================ +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT +AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw +MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD +TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf +qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr +btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL +j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou +08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw +WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT +tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ +47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC +ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa +i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o +dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s +D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ +j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT +Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW ++YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 +Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d +8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm +5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG +rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + +Amazon Root CA 1 +================ +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD +VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1 +MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv +bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH +FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ +gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t +dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce +VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3 +DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM +CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy +8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa +2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2 +xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- + +Amazon Root CA 2 +================ +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD +VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1 +MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv +bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4 +kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp +N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9 +AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd +fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx +kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS +btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0 +Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN +c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+ +3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw +DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA +A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE +YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW +xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ +gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW +aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV +Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3 +KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi +JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw= +-----END CERTIFICATE----- + +Amazon Root CA 3 +================ +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG +EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy +NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ +MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB +f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr +Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43 +rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc +eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw== +-----END CERTIFICATE----- + +Amazon Root CA 4 +================ +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG +EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy +NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ +MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN +/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri +83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA +MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1 +AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- + +LuxTrust Global Root 2 +====================== +-----BEGIN CERTIFICATE----- +MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQELBQAwRjELMAkG +A1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNVBAMMFkx1eFRydXN0IEdsb2Jh +bCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUwMzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEW +MBQGA1UECgwNTHV4VHJ1c3QgUy5BLjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCC +AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wm +Kb3FibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTemhfY7RBi2 +xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1EMShduxq3sVs35a0VkBC +wGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsnXpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm +1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkm +FRseTJIpgp7VkoGSQXAZ96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niF +wpN6cj5mj5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4gDEa/ +a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+8kPREd8vZS9kzl8U +ubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2jX5t/Lax5Gw5CMZdjpPuKadUiDTSQ +MC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmHhFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB +/zBCBgNVHSAEOzA5MDcGByuBKwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5 +Lmx1eHRydXN0Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT ++Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQELBQADggIBAGoZ +FO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9BzZAcg4atmpZ1gDlaCDdLnIN +H2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTOjFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW +7MM3LGVYvlcAGvI1+ut7MV3CwRI9loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIu +ZY+kt9J/Z93I055cqqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWA +VWe+2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/JEAdemrR +TxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKrezrnK+T+Tb/mjuuqlPpmt +/f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQfLSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc +7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31I +iyBMz2TWuJdGsE7RKlY6oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr +-----END CERTIFICATE----- + +TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 +============================================= +-----BEGIN CERTIFICATE----- +MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT +D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr +IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g +TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp +ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD +VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt +c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth +bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11 +IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8 +6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc +wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0 +3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9 +WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU +ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ +KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh +AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc +lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R +e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j +q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= +-----END CERTIFICATE----- + +GDCA TrustAUTH R5 ROOT +====================== +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCQ04xMjAw +BgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8wHQYDVQQD +DBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVow +YjELMAkGA1UEBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJjDp6L3TQs +AlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBjTnnEt1u9ol2x8kECK62p +OqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+uKU49tm7srsHwJ5uu4/Ts765/94Y9cnrr +pftZTqfrlYwiOXnhLQiPzLyRuEH3FMEjqcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ +9Cy5WmYqsBebnh52nUpmMUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQ +xXABZG12ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloPzgsM +R6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3GkL30SgLdTMEZeS1SZ +D2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeCjGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4 +oR24qoAATILnsn8JuLwwoC8N9VKejveSswoAHQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx +9hoh49pwBiFYFIeFd3mqgnkCAwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlR +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZmDRd9FBUb1Ov9 +H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5COmSdI31R9KrO9b7eGZONn35 +6ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ryL3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd ++PwyvzeG5LuOmCd+uh8W4XAR8gPfJWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQ +HtZa37dG/OaG+svgIHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBD +F8Io2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV09tL7ECQ +8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQXR4EzzffHqhmsYzmIGrv +/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrqT8p+ck0LcIymSLumoRT2+1hEmRSuqguT +aaApJUqlyyvdimYHFngVV3Eb7PVHhPOeMTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- + +TrustCor RootCert CA-1 +====================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP +MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig +U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx +MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu +YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe +VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy +dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq +jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4 +pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0 +JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h +gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw +/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j +BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5 +mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf +ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C +qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P +3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk= +-----END CERTIFICATE----- + +TrustCor RootCert CA-2 +====================== +-----BEGIN CERTIFICATE----- +MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNVBAYTAlBBMQ8w +DQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBT +eXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0 +eTEfMB0GA1UEAwwWVHJ1c3RDb3IgUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEy +MzExNzI2MzlaMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5h +bWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0 +IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnIG7CKqJiJJWQdsg4foDSq8Gb +ZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9Nk +RvRUqdw6VC0xK5mC8tkq1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1 +oYxOdqHp2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nKDOOb +XUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hapeaz6LMvYHL1cEksr1 +/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF3wP+TfSvPd9cW436cOGlfifHhi5q +jxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQP +eSghYA2FFn3XVDjxklb9tTNMg9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+Ctg +rKAmrhQhJ8Z3mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh +8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAdBgNVHQ4EFgQU +2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6UnrybPZx9mCAZ5YwwYrIwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/h +Osh80QA9z+LqBrWyOrsGS2h60COXdKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnp +kpfbsEZC89NiqpX+MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv +2wnL/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RXCI/hOWB3 +S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYaZH9bDTMJBzN7Bj8RpFxw +PIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dv +DDqPys/cA8GiCcjl/YBeyGBCARsaU1q7N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYU +RpFHmygk71dSTlxCnKr3Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANE +xdqtvArBAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp5KeX +RKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu1uwJ +-----END CERTIFICATE----- + +TrustCor ECA-1 +============== +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP +MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig +U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw +N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5 +MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y +IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR +MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23 +xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc +p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+ +fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj +YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL +f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF +AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u +/ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F +hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs +J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC +jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g== +-----END CERTIFICATE----- + +SSL.com Root Certification Authority RSA +======================================== +-----BEGIN CERTIFICATE----- +MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxDjAM +BgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24x +MTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYw +MjEyMTczOTM5WhcNNDEwMjEyMTczOTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx +EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NM +LmNvbSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2RxFdHaxh3a3by/ZPkPQ/C +Fp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aXqhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8 +P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcCC52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/ge +oeOy3ZExqysdBP+lSgQ36YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkp +k8zruFvh/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrFYD3Z +fBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93EJNyAKoFBbZQ+yODJ +gUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVcUS4cK38acijnALXRdMbX5J+tB5O2 +UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi8 +1xtZPCvM8hnIk2snYxnP/Okm+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4s +bE6x/c+cCbqiM+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGVcpNxJK1ok1iOMq8bs3AD/CUr +dIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBcHadm47GUBwwyOabqG7B52B2ccETjit3E+ZUf +ijhDPwGFpUenPUayvOUiaPd7nNgsPgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAsl +u1OJD7OAUN5F7kR/q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjq +erQ0cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jra6x+3uxj +MxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90IH37hVZkLId6Tngr75qNJ +vTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/YK9f1JmzJBjSWFupwWRoyeXkLtoh/D1JI +Pb9s2KJELtFOt3JY04kTlf5Eq/jXixtunLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406y +wKBjYZC6VWg3dGq2ktufoYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NI +WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- + +SSL.com Root Certification Authority ECC +======================================== +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV +BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv +BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy +MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO +BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA +BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+ +8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR +hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT +jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW +e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z +5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- + +SSL.com EV Root Certification Authority RSA R2 +============================================== +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w +DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u +MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD +VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh +hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w +cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO +Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+ +B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh +CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim +9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto +RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm +JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48 ++qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp +qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1 +++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx +Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G +guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz +OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7 +CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq +lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR +rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1 +hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX +9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- + +SSL.com EV Root Certification Authority ECC +=========================================== +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV +BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy +BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw +MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx +EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM +LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy +3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O +BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe +5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ +N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm +m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- diff --git a/.env.docker b/.env.docker index 381c961798..f31a88af50 100644 --- a/.env.docker +++ b/.env.docker @@ -43,12 +43,25 @@ DB_HOST=${FF_DB_HOST} DB_PORT=${FF_DB_PORT} DB_DATABASE=${FF_DB_NAME} DB_USERNAME=${FF_DB_USER} -DB_PASSWORD=${FF_DB_PASSWORD} +DB_PASSWORD="${FF_DB_PASSWORD}" # If you're looking for performance improvements, you could install memcached. CACHE_DRIVER=file SESSION_DRIVER=file +# You can configure another file storage backend if you cannot use the local storage option. +# To set this up, fill in the following variables. The upload path is used to store uploaded +# files and the export path is to store exported data (before download). +SFTP_HOST=${SFTP_HOST} +SFTP_PORT=${SFTP_PORT} +SFTP_UPLOAD_PATH=${SFTP_UPLOAD_PATH} +SFTP_EXPORT_PATH=${SFTP_EXPORT_PATH} + +# SFTP uses either the username/password combination or the private key to authenticate. +SFTP_USERNAME=${SFTP_USERNAME} +SFTP_PASSWORD="${SFTP_PASSWORD}" +SFTP_PRIV_KEY=${SFTP_PRIV_KEY} + # Cookie settings. Should not be necessary to change these. COOKIE_PATH="/" COOKIE_DOMAIN= @@ -61,7 +74,7 @@ MAIL_HOST=${MAIL_HOST} MAIL_PORT=${MAIL_PORT} MAIL_FROM=${MAIL_FROM} MAIL_USERNAME=${MAIL_USERNAME} -MAIL_PASSWORD=${MAIL_PASSWORD} +MAIL_PASSWORD="${MAIL_PASSWORD}" MAIL_ENCRYPTION=${MAIL_ENCRYPTION} # Other mail drivers: @@ -74,6 +87,9 @@ SPARKPOST_SECRET=${SPARKPOST_SECRET} SEND_REGISTRATION_MAIL=true SEND_ERROR_MESSAGE=false +# These messages contain (sensitive) transaction information: +SEND_REPORT_JOURNALS=${SEND_REPORT_JOURNALS} + # Set a Mapbox API key here (see mapbox.com) so there might be a map available at various places. MAPBOX_API_KEY=${MAPBOX_API_KEY} @@ -89,9 +105,51 @@ ANALYTICS_ID=${ANALYTICS_ID} # This makes it easier to migrate your database. Not that some fields will never be decrypted. USE_ENCRYPTION=true +# Firefly III has two options for user authentication. "eloquent" is the default, +# and "adldap" for LDAP servers. +# For full instructions on these settings please visit: +# https://firefly-iii.readthedocs.io/en/latest/installation/authentication.html +LOGIN_PROVIDER=${LOGIN_PROVIDER} + +# LDAP connection configuration +ADLDAP_CONNECTION_SCHEME=${ADLDAP_CONNECTION_SCHEME} +ADLDAP_AUTO_CONNECT=${ADLDAP_AUTO_CONNECT} + +# LDAP connection settings +ADLDAP_CONTROLLERS=${ADLDAP_CONTROLLERS} +ADLDAP_PORT=${ADLDAP_PORT} +ADLDAP_TIMEOUT=${ADLDAP_TIMEOUT} +ADLDAP_BASEDN="${ADLDAP_BASEDN}" +ADLDAP_FOLLOW_REFFERALS=${ADLDAP_FOLLOW_REFFERALS} +ADLDAP_USE_SSL=${ADLDAP_USE_SSL} +ADLDAP_USE_TLS=${ADLDAP_USE_TLS} + +ADLDAP_ADMIN_USERNAME=${ADLDAP_ADMIN_USERNAME} +ADLDAP_ADMIN_PASSWORD="${ADLDAP_ADMIN_PASSWORD}" + +ADLDAP_ACCOUNT_PREFIX="${ADLDAP_ACCOUNT_PREFIX}" +ADLDAP_ACCOUNT_SUFFIX="${ADLDAP_ACCOUNT_SUFFIX}" +ADLDAP_ADMIN_ACCOUNT_PREFIX="${ADLDAP_ADMIN_ACCOUNT_PREFIX}" +ADLDAP_ADMIN_ACCOUNT_SUFFIX="${ADLDAP_ADMIN_ACCOUNT_SUFFIX}" + +# LDAP authentication settings. +ADLDAP_PASSWORD_SYNC=${ADLDAP_PASSWORD_SYNC} +ADLDAP_LOGIN_FALLBACK=${ADLDAP_LOGIN_FALLBACK} + +ADLDAP_DISCOVER_FIELD=${ADLDAP_DISCOVER_FIELD} +ADLDAP_AUTH_FIELD=${ADLDAP_AUTH_FIELD} + +# Will allow SSO if your server provides an AUTH_USER field. +WINDOWS_SSO_DISCOVER=${WINDOWS_SSO_DISCOVER} +WINDOWS_SSO_KEY=${WINDOWS_SSO_KEY} + +# field to sync as local username. +ADLDAP_SYNC_FIELD=${ADLDAP_SYNC_FIELD} + # Leave the following configuration vars as is. # Unless you like to tinker and know what you're doing. APP_NAME=FireflyIII +ADLDAP_CONNECTION=default BROADCAST_DRIVER=log QUEUE_DRIVER=sync REDIS_HOST=127.0.0.1 @@ -108,5 +166,3 @@ IS_DOCKER=true IS_SANDSTORM=false IS_HEROKU=false BUNQ_USE_SANDBOX=false -MAILGUN_DOMAIN= -MAILGUN_SECRET= diff --git a/.env.example b/.env.example index b8c33e380e..9f016e8b25 100644 --- a/.env.example +++ b/.env.example @@ -49,6 +49,19 @@ DB_PASSWORD=secret CACHE_DRIVER=file SESSION_DRIVER=file +# You can configure another file storage backend if you cannot use the local storage option. +# To set this up, fill in the following variables. The upload path is used to store uploaded +# files and the export path is to store exported data (before download). +SFTP_HOST= +SFTP_PORT= +SFTP_UPLOAD_PATH= +SFTP_EXPORT_PATH= + +# SFTP uses either the username/password combination or the private key to authenticate. +SFTP_USERNAME= +SFTP_PASSWORD= +SFTP_PRIV_KEY= + # Cookie settings. Should not be necessary to change these. COOKIE_PATH="/" COOKIE_DOMAIN= @@ -74,6 +87,9 @@ SPARKPOST_SECRET= SEND_REGISTRATION_MAIL=true SEND_ERROR_MESSAGE=true +# These messages contain (sensitive) transaction information: +SEND_REPORT_JOURNALS=true + # Set a Mapbox API key here (see mapbox.com) so there might be a map available at various places. MAPBOX_API_KEY= @@ -89,9 +105,52 @@ ANALYTICS_ID= # This makes it easier to migrate your database. Not that some fields will never be decrypted. USE_ENCRYPTION=true +# Firefly III has two options for user authentication. "eloquent" is the default, +# and "adldap" for LDAP servers. +# For full instructions on these settings please visit: +# https://firefly-iii.readthedocs.io/en/latest/installation/authentication.html +LOGIN_PROVIDER=eloquent + +# LDAP connection configuration +# OpenLDAP, FreeIPA or ActiveDirectory +ADLDAP_CONNECTION_SCHEME=OpenLDAP +ADLDAP_AUTO_CONNECT=true + +# LDAP connection settings +ADLDAP_CONTROLLERS= +ADLDAP_PORT=389 +ADLDAP_TIMEOUT=5 +ADLDAP_BASEDN="" +ADLDAP_FOLLOW_REFFERALS=false +ADLDAP_USE_SSL=false +ADLDAP_USE_TLS=false + +ADLDAP_ADMIN_USERNAME= +ADLDAP_ADMIN_PASSWORD= + +ADLDAP_ACCOUNT_PREFIX= +ADLDAP_ACCOUNT_SUFFIX= +ADLDAP_ADMIN_ACCOUNT_PREFIX= +ADLDAP_ADMIN_ACCOUNT_SUFFIX= + +# LDAP authentication settings. +ADLDAP_PASSWORD_SYNC=false +ADLDAP_LOGIN_FALLBACK=false + +ADLDAP_DISCOVER_FIELD=distinguishedname +ADLDAP_AUTH_FIELD=distinguishedname + +# Will allow SSO if your server provides an AUTH_USER field. +WINDOWS_SSO_DISCOVER=samaccountname +WINDOWS_SSO_KEY=AUTH_USER + +# field to sync as local username. +ADLDAP_SYNC_FIELD=userprincipalname + # Leave the following configuration vars as is. # Unless you like to tinker and know what you're doing. APP_NAME=FireflyIII +ADLDAP_CONNECTION=default BROADCAST_DRIVER=log QUEUE_DRIVER=sync REDIS_HOST=127.0.0.1 @@ -108,5 +167,3 @@ IS_DOCKER=false IS_SANDSTORM=false IS_HEROKU=false BUNQ_USE_SANDBOX=false -MAILGUN_DOMAIN= -MAILGUN_SECRET= diff --git a/.env.heroku b/.env.heroku index c16376ea76..30106f2072 100644 --- a/.env.heroku +++ b/.env.heroku @@ -49,6 +49,19 @@ DB_CONNECTION=pgsql CACHE_DRIVER=file SESSION_DRIVER=file +# You can configure another file storage backend if you cannot use the local storage option. +# To set this up, fill in the following variables. The upload path is used to store uploaded +# files and the export path is to store exported data (before download). +SFTP_HOST= +SFTP_PORT= +SFTP_UPLOAD_PATH= +SFTP_EXPORT_PATH= + +# SFTP uses either the username/password combination or the private key to authenticate. +SFTP_USERNAME= +SFTP_PASSWORD= +SFTP_PRIV_KEY= + # Cookie settings. Should not be necessary to change these. COOKIE_PATH="/" COOKIE_DOMAIN= @@ -74,6 +87,9 @@ SPARKPOST_SECRET= SEND_REGISTRATION_MAIL=true SEND_ERROR_MESSAGE=true +# These messages contain (sensitive) transaction information: +SEND_REPORT_JOURNALS=true + # Set a Mapbox API key here (see mapbox.com) so there might be a map available at various places. MAPBOX_API_KEY= @@ -89,9 +105,52 @@ ANALYTICS_ID= # This makes it easier to migrate your database. Not that some fields will never be decrypted. USE_ENCRYPTION=true +# Firefly III has two options for user authentication. "eloquent" is the default, +# and "adldap" for LDAP servers. +# For full instructions on these settings please visit: +# https://firefly-iii.readthedocs.io/en/latest/installation/authentication.html +LOGIN_PROVIDER=eloquent + +# LDAP connection configuration +# OpenLDAP, FreeIPA or ActiveDirectory +ADLDAP_CONNECTION_SCHEME=OpenLDAP +ADLDAP_AUTO_CONNECT=true + +# LDAP connection settings +ADLDAP_CONTROLLERS= +ADLDAP_PORT=389 +ADLDAP_TIMEOUT=5 +ADLDAP_BASEDN="" +ADLDAP_FOLLOW_REFFERALS=false +ADLDAP_USE_SSL=false +ADLDAP_USE_TLS=false + +ADLDAP_ADMIN_USERNAME= +ADLDAP_ADMIN_PASSWORD= + +ADLDAP_ACCOUNT_PREFIX= +ADLDAP_ACCOUNT_SUFFIX= +ADLDAP_ADMIN_ACCOUNT_PREFIX= +ADLDAP_ADMIN_ACCOUNT_SUFFIX= + +# LDAP authentication settings. +ADLDAP_PASSWORD_SYNC=false +ADLDAP_LOGIN_FALLBACK=false + +ADLDAP_DISCOVER_FIELD=distinguishedname +ADLDAP_AUTH_FIELD=distinguishedname + +# Will allow SSO if your server provides an AUTH_USER field. +WINDOWS_SSO_DISCOVER=samaccountname +WINDOWS_SSO_KEY=AUTH_USER + +# field to sync as local username. +ADLDAP_SYNC_FIELD=userprincipalname + # Leave the following configuration vars as is. # Unless you like to tinker and know what you're doing. APP_NAME=FireflyIII +ADLDAP_CONNECTION=default BROADCAST_DRIVER=log QUEUE_DRIVER=sync REDIS_HOST=127.0.0.1 @@ -108,5 +167,3 @@ IS_DOCKER=false IS_SANDSTORM=false IS_HEROKU=true BUNQ_USE_SANDBOX=false -MAILGUN_DOMAIN= -MAILGUN_SECRET= diff --git a/.env.sandstorm b/.env.sandstorm index ce73089fe8..9c1100bc59 100755 --- a/.env.sandstorm +++ b/.env.sandstorm @@ -49,6 +49,19 @@ DB_PASSWORD=firefly CACHE_DRIVER=file SESSION_DRIVER=file +# You can configure another file storage backend if you cannot use the local storage option. +# To set this up, fill in the following variables. The upload path is used to store uploaded +# files and the export path is to store exported data (before download). +SFTP_HOST= +SFTP_PORT= +SFTP_UPLOAD_PATH= +SFTP_EXPORT_PATH= + +# SFTP uses either the username/password combination or the private key to authenticate. +SFTP_USERNAME= +SFTP_PASSWORD= +SFTP_PRIV_KEY= + # Cookie settings. Should not be necessary to change these. COOKIE_PATH="/" COOKIE_DOMAIN= @@ -74,6 +87,9 @@ SPARKPOST_SECRET= SEND_REGISTRATION_MAIL=true SEND_ERROR_MESSAGE=true +# These messages contain (sensitive) transaction information: +SEND_REPORT_JOURNALS=true + # Set a Mapbox API key here (see mapbox.com) so there might be a map available at various places. MAPBOX_API_KEY= @@ -89,9 +105,52 @@ ANALYTICS_ID= # This makes it easier to migrate your database. Not that some fields will never be decrypted. USE_ENCRYPTION=true +# Firefly III has two options for user authentication. "eloquent" is the default, +# and "adldap" for LDAP servers. +# For full instructions on these settings please visit: +# https://firefly-iii.readthedocs.io/en/latest/installation/authentication.html +LOGIN_PROVIDER=eloquent + +# LDAP connection configuration + # or FreeIPA or ActiveDirectory +ADLDAP_CONNECTION_SCHEME=OpenLDAP +ADLDAP_AUTO_CONNECT=true + +# LDAP connection settings +ADLDAP_CONTROLLERS= +ADLDAP_PORT=389 +ADLDAP_TIMEOUT=5 +ADLDAP_BASEDN="" +ADLDAP_FOLLOW_REFFERALS=false +ADLDAP_USE_SSL=false +ADLDAP_USE_TLS=false + +ADLDAP_ADMIN_USERNAME= +ADLDAP_ADMIN_PASSWORD= + +ADLDAP_ACCOUNT_PREFIX= +ADLDAP_ACCOUNT_SUFFIX= +ADLDAP_ADMIN_ACCOUNT_PREFIX= +ADLDAP_ADMIN_ACCOUNT_SUFFIX= + +# LDAP authentication settings. +ADLDAP_PASSWORD_SYNC=false +ADLDAP_LOGIN_FALLBACK=false + +ADLDAP_DISCOVER_FIELD=distinguishedname +ADLDAP_AUTH_FIELD=distinguishedname + +# Will allow SSO if your server provides an AUTH_USER field. +WINDOWS_SSO_DISCOVER=samaccountname +WINDOWS_SSO_KEY=AUTH_USER + +# field to sync as local username. +ADLDAP_SYNC_FIELD=userprincipalname + # Leave the following configuration vars as is. # Unless you like to tinker and know what you're doing. APP_NAME=FireflyIII +ADLDAP_CONNECTION=default BROADCAST_DRIVER=log QUEUE_DRIVER=sync REDIS_HOST=127.0.0.1 @@ -108,5 +167,3 @@ IS_DOCKER=false IS_SANDSTORM=true IS_HEROKU=false BUNQ_USE_SANDBOX=false -MAILGUN_DOMAIN= -MAILGUN_SECRET= diff --git a/.env.testing b/.env.testing index 224ed8711a..abab43b463 100644 --- a/.env.testing +++ b/.env.testing @@ -49,6 +49,19 @@ DB_CONNECTION=sqlite CACHE_DRIVER=file SESSION_DRIVER=file +# You can configure another file storage backend if you cannot use the local storage option. +# To set this up, fill in the following variables. The upload path is used to store uploaded +# files and the export path is to store exported data (before download). +SFTP_HOST= +SFTP_PORT= +SFTP_UPLOAD_PATH= +SFTP_EXPORT_PATH= + +# SFTP uses either the username/password combination or the private key to authenticate. +SFTP_USERNAME= +SFTP_PASSWORD= +SFTP_PRIV_KEY= + # Cookie settings. Should not be necessary to change these. COOKIE_PATH="/" COOKIE_DOMAIN= @@ -74,6 +87,9 @@ SPARKPOST_SECRET= SEND_REGISTRATION_MAIL=true SEND_ERROR_MESSAGE=false +# These messages contain (sensitive) transaction information: +SEND_REPORT_JOURNALS=true + # Set a Mapbox API key here (see mapbox.com) so there might be a map available at various places. MAPBOX_API_KEY= @@ -89,9 +105,52 @@ ANALYTICS_ID= # This makes it easier to migrate your database. Not that some fields will never be decrypted. USE_ENCRYPTION=false +# Firefly III has two options for user authentication. "eloquent" is the default, +# and "adldap" for LDAP servers. +# For full instructions on these settings please visit: +# https://firefly-iii.readthedocs.io/en/latest/installation/authentication.html +LOGIN_PROVIDER=eloquent + +# LDAP connection configuration + # or FreeIPA or ActiveDirectory +ADLDAP_CONNECTION_SCHEME=OpenLDAP +ADLDAP_AUTO_CONNECT=true + +# LDAP connection settings +ADLDAP_CONTROLLERS= +ADLDAP_PORT=389 +ADLDAP_TIMEOUT=5 +ADLDAP_BASEDN="" +ADLDAP_FOLLOW_REFFERALS=false +ADLDAP_USE_SSL=false +ADLDAP_USE_TLS=false + +ADLDAP_ADMIN_USERNAME= +ADLDAP_ADMIN_PASSWORD= + +ADLDAP_ACCOUNT_PREFIX= +ADLDAP_ACCOUNT_SUFFIX= +ADLDAP_ADMIN_ACCOUNT_PREFIX= +ADLDAP_ADMIN_ACCOUNT_SUFFIX= + +# LDAP authentication settings. +ADLDAP_PASSWORD_SYNC=false +ADLDAP_LOGIN_FALLBACK=false + +ADLDAP_DISCOVER_FIELD=distinguishedname +ADLDAP_AUTH_FIELD=distinguishedname + +# Will allow SSO if your server provides an AUTH_USER field. +WINDOWS_SSO_DISCOVER=samaccountname +WINDOWS_SSO_KEY=AUTH_USER + +# field to sync as local username. +ADLDAP_SYNC_FIELD=userprincipalname + # Leave the following configuration vars as is. # Unless you like to tinker and know what you're doing. APP_NAME=FireflyIII +ADLDAP_CONNECTION=default BROADCAST_DRIVER=log QUEUE_DRIVER=sync REDIS_HOST=127.0.0.1 @@ -108,5 +167,3 @@ IS_DOCKER=false IS_SANDSTORM=false IS_HEROKU=false BUNQ_USE_SANDBOX=true -MAILGUN_DOMAIN= -MAILGUN_SECRET= diff --git a/.locales b/.locales new file mode 100644 index 0000000000..c7badfc286 --- /dev/null +++ b/.locales @@ -0,0 +1,9 @@ +en_US +de_DE +fr_FR +it_IT +nl_NL +pl_PL +pt_BR +ru_RU +tr_TR diff --git a/.sandstorm/changelog.md b/.sandstorm/changelog.md index 8ec8b15d43..f7d15ca193 100644 --- a/.sandstorm/changelog.md +++ b/.sandstorm/changelog.md @@ -1,3 +1,37 @@ +$ 4.7.8 + +- [Issue 1005](https://github.com/firefly-iii/firefly-iii/issues/1005) You can now configure Firefly III to use LDAP. +- [Issue 1071](https://github.com/firefly-iii/firefly-iii/issues/1071) You can execute transaction rules using the command line (so you can cronjob it) +- [Issue 1108](https://github.com/firefly-iii/firefly-iii/issues/1108) You can now reorder budgets. +- [Issue 1159](https://github.com/firefly-iii/firefly-iii/issues/1159) The ability to import transactions from FinTS-enabled banks. +- [Issue 1727](https://github.com/firefly-iii/firefly-iii/issues/1727) You can now use SFTP as storage for uploads and exports. +- [Issue 1733](https://github.com/firefly-iii/firefly-iii/issues/1733) You can configure Firefly III not to send emails with transaction information in them. +- [Issue 1040](https://github.com/firefly-iii/firefly-iii/issues/1040) Fixed various things that would not scale properly in the past. +- [Issue 1771](https://github.com/firefly-iii/firefly-iii/issues/1771) A link to the transaction that fits the bill. +- [Issue 1800](https://github.com/firefly-iii/firefly-iii/issues/1800) Icon updated to match others. +- MySQL database connection now forces the InnoDB to be used. +- [Issue 1583](https://github.com/firefly-iii/firefly-iii/issues/1583) Some times recurring transactions would not fire. +- [Issue 1607](https://github.com/firefly-iii/firefly-iii/issues/1607) Problems with the bunq API, finally solved?! (I feel like a clickbait YouTube video now) +- [Issue 1698](https://github.com/firefly-iii/firefly-iii/issues/1698) Certificate problems in the Docker container +- [Issue 1751](https://github.com/firefly-iii/firefly-iii/issues/1751) Bug in autocomplete +- [Issue 1760](https://github.com/firefly-iii/firefly-iii/issues/1760) Tag report bad math +- [Issue 1765](https://github.com/firefly-iii/firefly-iii/issues/1765) API inconsistencies for piggy banks. +- [Issue 1774](https://github.com/firefly-iii/firefly-iii/issues/1774) Integer exception in SQLite databases +- [Issue 1775](https://github.com/firefly-iii/firefly-iii/issues/1775) Heroku now supports all locales +- [Issue 1778](https://github.com/firefly-iii/firefly-iii/issues/1778) More autocomplete problems fixed +- [Issue 1747](https://github.com/firefly-iii/firefly-iii/issues/1747) Rules now stop at the right moment. +- [Issue 1781](https://github.com/firefly-iii/firefly-iii/issues/1781) Problems when creating new rules. +- [Issue 1784](https://github.com/firefly-iii/firefly-iii/issues/1784) Can now create a liability with an empty balance. +- [Issue 1785](https://github.com/firefly-iii/firefly-iii/issues/1785) Redirect error +- [Issue 1790](https://github.com/firefly-iii/firefly-iii/issues/1790) Show attachments for bills. +- [Issue 1792](https://github.com/firefly-iii/firefly-iii/issues/1792) Mention excluded accounts. +- [Issue 1798](https://github.com/firefly-iii/firefly-iii/issues/1798) Could not recreate deleted piggy banks +- [Issue 1805](https://github.com/firefly-iii/firefly-iii/issues/1805) Fixes when handling foreign currencies +- [Issue 1807](https://github.com/firefly-iii/firefly-iii/issues/1807) Also decrypt deleted records. +- [Issue 1812](https://github.com/firefly-iii/firefly-iii/issues/1812) Fix in transactions API +- [Issue 1815](https://github.com/firefly-iii/firefly-iii/issues/1815) Opening balance account name can now be translated. +- [Issue 1830](https://github.com/firefly-iii/firefly-iii/issues/1830) Multi-user in a single browser could leak autocomplete data. + # 4.7.7 - [Issue 954](https://github.com/firefly-iii/firefly-iii/issues/954) Some additional view chart ranges - [Issue 1710](https://github.com/firefly-iii/firefly-iii/issues/1710) Added a new currency ([hamuz](https://github.com/hamuz)) diff --git a/.sandstorm/sandstorm-files.list b/.sandstorm/sandstorm-files.list index 77c8159158..15c1aaac96 100644 --- a/.sandstorm/sandstorm-files.list +++ b/.sandstorm/sandstorm-files.list @@ -553,6 +553,8 @@ opt/app/app/Import/Converter/RabobankDebitCredit.php opt/app/app/Import/JobConfiguration/BunqJobConfiguration.php opt/app/app/Import/JobConfiguration/FakeJobConfiguration.php opt/app/app/Import/JobConfiguration/FileJobConfiguration.php +opt/app/app/Import/JobConfiguration/FinTSConfigurationSteps.php +opt/app/app/Import/JobConfiguration/FinTSJobConfiguration.php opt/app/app/Import/JobConfiguration/JobConfigurationInterface.php opt/app/app/Import/JobConfiguration/SpectreJobConfiguration.php opt/app/app/Import/JobConfiguration/YnabJobConfiguration.php @@ -578,6 +580,7 @@ opt/app/app/Import/Prerequisites/YnabPrerequisites.php opt/app/app/Import/Routine/BunqRoutine.php opt/app/app/Import/Routine/FakeRoutine.php opt/app/app/Import/Routine/FileRoutine.php +opt/app/app/Import/Routine/FinTSRoutine.php opt/app/app/Import/Routine/RoutineInterface.php opt/app/app/Import/Routine/SpectreRoutine.php opt/app/app/Import/Routine/YnabRoutine.php @@ -782,6 +785,7 @@ opt/app/app/Support/Facades/FireflyConfig.php opt/app/app/Support/Facades/Navigation.php opt/app/app/Support/Facades/Preferences.php opt/app/app/Support/Facades/Steam.php +opt/app/app/Support/FinTS/FinTS.php opt/app/app/Support/FireflyConfig.php opt/app/app/Support/Http/Controllers/AugumentData.php opt/app/app/Support/Http/Controllers/BasicDataSupport.php @@ -805,6 +809,9 @@ opt/app/app/Support/Import/JobConfiguration/File/ConfigureRolesHandler.php opt/app/app/Support/Import/JobConfiguration/File/ConfigureUploadHandler.php opt/app/app/Support/Import/JobConfiguration/File/FileConfigurationInterface.php opt/app/app/Support/Import/JobConfiguration/File/NewFileJobHandler.php +opt/app/app/Support/Import/JobConfiguration/FinTS/ChooseAccountHandler.php +opt/app/app/Support/Import/JobConfiguration/FinTS/FinTSConfigurationInterface.php +opt/app/app/Support/Import/JobConfiguration/FinTS/NewFinTSJobHandler.php opt/app/app/Support/Import/JobConfiguration/Spectre/AuthenticatedHandler.php opt/app/app/Support/Import/JobConfiguration/Spectre/ChooseAccountsHandler.php opt/app/app/Support/Import/JobConfiguration/Spectre/ChooseLoginHandler.php @@ -833,6 +840,7 @@ opt/app/app/Support/Import/Routine/File/MappedValuesValidator.php opt/app/app/Support/Import/Routine/File/MappingConverger.php opt/app/app/Support/Import/Routine/File/OFXProcessor.php opt/app/app/Support/Import/Routine/File/OpposingAccountMapper.php +opt/app/app/Support/Import/Routine/FinTS/StageImportDataHandler.php opt/app/app/Support/Import/Routine/Spectre/StageAuthenticatedHandler.php opt/app/app/Support/Import/Routine/Spectre/StageImportDataHandler.php opt/app/app/Support/Import/Routine/Spectre/StageNewHandler.php @@ -1201,6 +1209,7 @@ opt/app/public/images/logos/bunq.png opt/app/public/images/logos/csv.png opt/app/public/images/logos/fake.png opt/app/public/images/logos/file.png +opt/app/public/images/logos/fints.png opt/app/public/images/logos/plaid.png opt/app/public/images/logos/quovo.png opt/app/public/images/logos/spectre.png @@ -1718,6 +1727,8 @@ opt/app/resources/views/import/file/configure-upload.twig opt/app/resources/views/import/file/map.twig opt/app/resources/views/import/file/new.twig opt/app/resources/views/import/file/roles.twig +opt/app/resources/views/import/fints/choose_account.twig +opt/app/resources/views/import/fints/new.twig opt/app/resources/views/import/index.twig opt/app/resources/views/import/spectre/accounts.twig opt/app/resources/views/import/spectre/choose-login.twig @@ -3030,6 +3041,7 @@ opt/app/vendor/laravel/framework/src/Illuminate/Contracts/Support/MessageBag.php opt/app/vendor/laravel/framework/src/Illuminate/Contracts/Support/MessageProvider.php opt/app/vendor/laravel/framework/src/Illuminate/Contracts/Support/Renderable.php opt/app/vendor/laravel/framework/src/Illuminate/Contracts/Support/Responsable.php +opt/app/vendor/laravel/framework/src/Illuminate/Contracts/Translation/HasLocalePreference.php opt/app/vendor/laravel/framework/src/Illuminate/Contracts/Translation/Loader.php opt/app/vendor/laravel/framework/src/Illuminate/Contracts/Translation/Translator.php opt/app/vendor/laravel/framework/src/Illuminate/Contracts/Validation/Factory.php @@ -3099,6 +3111,7 @@ opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/QueueEntityRes opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/RelationNotFoundException.php opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php +opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Concerns/AsPivot.php opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Concerns/InteractsWithPivotTable.php opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Concerns/SupportsDefaultModels.php opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasMany.php @@ -3485,6 +3498,7 @@ opt/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php opt/app/vendor/laravel/framework/src/Illuminate/Pipeline/PipelineServiceProvider.php opt/app/vendor/laravel/framework/src/Illuminate/Pipeline/composer.json opt/app/vendor/laravel/framework/src/Illuminate/Queue/BeanstalkdQueue.php +opt/app/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedClosure.php opt/app/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php opt/app/vendor/laravel/framework/src/Illuminate/Queue/Capsule/Manager.php opt/app/vendor/laravel/framework/src/Illuminate/Queue/Connectors/BeanstalkdConnector.php @@ -3537,6 +3551,7 @@ opt/app/vendor/laravel/framework/src/Illuminate/Queue/QueueManager.php opt/app/vendor/laravel/framework/src/Illuminate/Queue/QueueServiceProvider.php opt/app/vendor/laravel/framework/src/Illuminate/Queue/README.md opt/app/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php +opt/app/vendor/laravel/framework/src/Illuminate/Queue/SerializableClosure.php opt/app/vendor/laravel/framework/src/Illuminate/Queue/SerializesAndRestoresModelIdentifiers.php opt/app/vendor/laravel/framework/src/Illuminate/Queue/SerializesModels.php opt/app/vendor/laravel/framework/src/Illuminate/Queue/SqsQueue.php @@ -4373,6 +4388,94 @@ opt/app/vendor/monolog/monolog/tests/Monolog/Processor/WebProcessorTest.php opt/app/vendor/monolog/monolog/tests/Monolog/PsrLogCompatTest.php opt/app/vendor/monolog/monolog/tests/Monolog/RegistryTest.php opt/app/vendor/monolog/monolog/tests/Monolog/TestCase.php +opt/app/vendor/mschindler83/fints-hbci-php/COMPATIBILITY.md +opt/app/vendor/mschindler83/fints-hbci-php/LICENSE +opt/app/vendor/mschindler83/fints-hbci-php/README.md +opt/app/vendor/mschindler83/fints-hbci-php/Samples/saldo.php +opt/app/vendor/mschindler83/fints-hbci-php/Samples/statement_of_account.php +opt/app/vendor/mschindler83/fints-hbci-php/composer.json +opt/app/vendor/mschindler83/fints-hbci-php/composer.lock +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Adapter/AdapterInterface.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Adapter/Curl.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Adapter/Debug.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Adapter/Exception/AdapterException.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Adapter/Exception/CurlException.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Connection.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/DataElementGroups/EncryptionAlgorithm.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/DataElementGroups/HashAlgorithm.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/DataElementGroups/KeyName.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/DataElementGroups/SecurityDateTime.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/DataElementGroups/SecurityIdentificationDetails.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/DataElementGroups/SecurityProfile.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/DataElementGroups/SignatureAlgorithm.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/DataTypes/Bin.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/DataTypes/Dat.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/DataTypes/Kik.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/DataTypes/Kti.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/DataTypes/Ktv.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Deg.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Dialog/Dialog.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Dialog/Exception/FailedRequestException.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/FinTs.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Message/AbstractMessage.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Message/Message.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Model/Account.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Model/SEPAAccount.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Model/Saldo.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Model/StatementOfAccount/Statement.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Model/StatementOfAccount/StatementOfAccount.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Model/StatementOfAccount/Transaction.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Parser/Exception/MT940Exception.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Parser/MT940.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Response/GetAccounts.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Response/GetSEPAAccounts.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Response/GetSaldo.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Response/GetStatementOfAccount.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Response/Initialization.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Response/Response.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Segment/AbstractSegment.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Segment/HKEND.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Segment/HKIDN.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Segment/HKKAZ.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Segment/HKSAL.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Segment/HKSPA.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Segment/HKSYN.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Segment/HKVVB.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Segment/HNHBK.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Segment/HNHBS.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Segment/HNSHA.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Segment/HNSHK.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Segment/HNVSD.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Segment/HNVSK.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Segment/NameMapping.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Segment/Segment.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Fhp/Segment/SegmentInterface.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/ConnectionTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/DataElementGroups/EncryptionAlgorithmTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/DataElementGroups/HashAlgorithmTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/DataElementGroups/KeyNameTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/DataElementGroups/SecurityDateTimeTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/DataElementGroups/SecurityIdentificationDetailsTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/DataElementGroups/SecurityProfileTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/DataElementGroups/SignatureAlgorithmTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/DataTypes/BinTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/DataTypes/DatTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/DataTypes/KikTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/DataTypes/KtiTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/DataTypes/KtvTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/DegTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/FinTsTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/Message/MessageTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/Model/AccountTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/Model/SEPAAccountTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/Model/SaldoTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/Model/StatementOfAccount/StatementOfAccountTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/Model/StatementOfAccount/StatementTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/Model/StatementOfAccount/TransactionTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/Fhp/ResponseTest/ResponseTest.php +opt/app/vendor/mschindler83/fints-hbci-php/lib/Tests/TestInit.php +opt/app/vendor/mschindler83/fints-hbci-php/phplint.sh +opt/app/vendor/mschindler83/fints-hbci-php/phpunit.xml.dist opt/app/vendor/nesbot/carbon/LICENSE opt/app/vendor/nesbot/carbon/composer.json opt/app/vendor/nesbot/carbon/readme.md @@ -4456,6 +4559,23 @@ opt/app/vendor/nesbot/carbon/src/Carbon/Lang/zh_TW.php opt/app/vendor/nesbot/carbon/src/Carbon/Laravel/ServiceProvider.php opt/app/vendor/nesbot/carbon/src/Carbon/Translator.php opt/app/vendor/nesbot/carbon/src/JsonSerializable.php +opt/app/vendor/opis/closure/CHANGELOG.md +opt/app/vendor/opis/closure/LICENSE +opt/app/vendor/opis/closure/NOTICE +opt/app/vendor/opis/closure/README.md +opt/app/vendor/opis/closure/autoload.php +opt/app/vendor/opis/closure/composer.json +opt/app/vendor/opis/closure/functions.php +opt/app/vendor/opis/closure/src/Analyzer.php +opt/app/vendor/opis/closure/src/ClosureContext.php +opt/app/vendor/opis/closure/src/ClosureScope.php +opt/app/vendor/opis/closure/src/ClosureStream.php +opt/app/vendor/opis/closure/src/ISecurityProvider.php +opt/app/vendor/opis/closure/src/ReflectionClosure.php +opt/app/vendor/opis/closure/src/SecurityException.php +opt/app/vendor/opis/closure/src/SecurityProvider.php +opt/app/vendor/opis/closure/src/SelfReference.php +opt/app/vendor/opis/closure/src/SerializableClosure.php opt/app/vendor/paragonie/constant_time_encoding/LICENSE.txt opt/app/vendor/paragonie/constant_time_encoding/README.md opt/app/vendor/paragonie/constant_time_encoding/composer.json @@ -5458,6 +5578,7 @@ opt/app/vendor/symfony/debug/Tests/Fixtures/DeprecatedInterface.php opt/app/vendor/symfony/debug/Tests/Fixtures/ExtendedFinalMethod.php opt/app/vendor/symfony/debug/Tests/Fixtures/FinalClass.php opt/app/vendor/symfony/debug/Tests/Fixtures/FinalMethod.php +opt/app/vendor/symfony/debug/Tests/Fixtures/FinalMethod2Trait.php opt/app/vendor/symfony/debug/Tests/Fixtures/InternalClass.php opt/app/vendor/symfony/debug/Tests/Fixtures/InternalInterface.php opt/app/vendor/symfony/debug/Tests/Fixtures/InternalTrait.php @@ -5466,6 +5587,7 @@ opt/app/vendor/symfony/debug/Tests/Fixtures/NonDeprecatedInterface.php opt/app/vendor/symfony/debug/Tests/Fixtures/PEARClass.php opt/app/vendor/symfony/debug/Tests/Fixtures/Throwing.php opt/app/vendor/symfony/debug/Tests/Fixtures/ToStringThrower.php +opt/app/vendor/symfony/debug/Tests/Fixtures/TraitWithInternalMethod.php opt/app/vendor/symfony/debug/Tests/Fixtures/casemismatch.php opt/app/vendor/symfony/debug/Tests/Fixtures/notPsr0Bis.php opt/app/vendor/symfony/debug/Tests/Fixtures/psr4/Psr4CaseMismatch.php @@ -6539,6 +6661,7 @@ opt/app/vendor/symfony/var-dumper/Tests/Caster/XmlReaderCasterTest.php opt/app/vendor/symfony/var-dumper/Tests/Cloner/DataTest.php opt/app/vendor/symfony/var-dumper/Tests/Cloner/VarClonerTest.php opt/app/vendor/symfony/var-dumper/Tests/Dumper/CliDumperTest.php +opt/app/vendor/symfony/var-dumper/Tests/Dumper/FunctionsTest.php opt/app/vendor/symfony/var-dumper/Tests/Dumper/HtmlDumperTest.php opt/app/vendor/symfony/var-dumper/Tests/Dumper/ServerDumperTest.php opt/app/vendor/symfony/var-dumper/Tests/Fixtures/FooInterface.php diff --git a/.sandstorm/sandstorm-pkgdef.capnp b/.sandstorm/sandstorm-pkgdef.capnp index afd4c76cc8..0386fbe2b9 100644 --- a/.sandstorm/sandstorm-pkgdef.capnp +++ b/.sandstorm/sandstorm-pkgdef.capnp @@ -15,8 +15,8 @@ const pkgdef :Spk.PackageDefinition = ( manifest = ( appTitle = (defaultText = "Firefly III"), - appVersion = 17, - appMarketingVersion = (defaultText = "4.7.7"), + appVersion = 18, + appMarketingVersion = (defaultText = "4.7.8"), actions = [ # Define your "new document" handlers here. diff --git a/Dockerfile b/Dockerfile index 4b62a179e0..adbe63bd93 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,9 +8,9 @@ ENV CORES ${CORES:-1} ENV FIREFLY_PATH /var/www/firefly-iii/ ENV CURL_VERSION 7.60.0 ENV OPENSSL_VERSION 1.1.1-pre6 +ENV COMPOSER_ALLOW_SUPERUSER 1 -LABEL version="1.0" maintainer="thegrumpydictator@gmail.com" - +LABEL version="1.1" maintainer="thegrumpydictator@gmail.com" # install packages RUN apt-get update -y && \ @@ -20,6 +20,7 @@ RUN apt-get update -y && \ wget \ libpng-dev \ libicu-dev \ + libldap2-dev \ libedit-dev \ libtidy-dev \ libxml2-dev \ @@ -35,6 +36,8 @@ RUN apt-get update -y && \ locales && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* +# LDAP install +RUN docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ && docker-php-ext-install ldap # Install latest curl RUN cd /tmp && \ @@ -66,6 +69,9 @@ COPY ./.deploy/docker/firefly-iii.conf /etc/supervisor/conf.d/firefly-iii.conf # copy cron job supervisor conf file. COPY ./.deploy/docker/cronjob.conf /etc/supervisor/conf.d/cronjob.conf +# copy ca certs to correct location +COPY ./.deploy/docker/cacert.pem /usr/local/ssl/cert.pem + # test crons added via crontab RUN echo "0 3 * * * /usr/local/bin/php /var/www/firefly-iii/artisan firefly:cron" | crontab - #RUN (crontab -l ; echo "*/1 * * * * free >> /var/www/firefly-iii/public/cron.html") 2>&1 | crontab - @@ -104,7 +110,6 @@ ADD . $FIREFLY_PATH RUN rm -rf /usr/local/lib/libcurl.so.4 && ln -s /usr/lib/x86_64-linux-gnu/libcurl.so.4.4.0 /usr/local/lib/libcurl.so.4 # Run composer -ENV COMPOSER_ALLOW_SUPERUSER 1 RUN composer install --prefer-dist --no-dev --no-scripts --no-suggest # Expose port 80 diff --git a/app.json b/app.json index 82677845eb..366ce7bf04 100644 --- a/app.json +++ b/app.json @@ -51,6 +51,9 @@ "buildpacks": [ { "url": "heroku/php" + }, + { + "url": "https://github.com/heroku/heroku-buildpack-locale" } ], "env": { diff --git a/app/Api/V1/Controllers/TransactionController.php b/app/Api/V1/Controllers/TransactionController.php index 1d73833931..870c4c635c 100644 --- a/app/Api/V1/Controllers/TransactionController.php +++ b/app/Api/V1/Controllers/TransactionController.php @@ -290,6 +290,7 @@ class TransactionController extends Controller 'withdrawal' => [TransactionType::WITHDRAWAL,], 'withdrawals' => [TransactionType::WITHDRAWAL,], 'expense' => [TransactionType::WITHDRAWAL,], + 'expenses' => [TransactionType::WITHDRAWAL,], 'income' => [TransactionType::DEPOSIT,], 'deposit' => [TransactionType::DEPOSIT,], 'deposits' => [TransactionType::DEPOSIT,], diff --git a/app/Api/V1/Requests/PiggyBankRequest.php b/app/Api/V1/Requests/PiggyBankRequest.php index 3024b0eac9..080a9fe8c1 100644 --- a/app/Api/V1/Requests/PiggyBankRequest.php +++ b/app/Api/V1/Requests/PiggyBankRequest.php @@ -58,8 +58,8 @@ class PiggyBankRequest extends Request 'account_id' => $this->integer('account_id'), 'targetamount' => $this->string('target_amount'), 'current_amount' => $current, - 'start_date' => $this->date('start_date'), - 'target_date' => $this->date('target_date'), + 'startdate' => $this->date('start_date'), + 'targetdate' => $this->date('target_date'), 'notes' => $this->string('notes'), ]; } diff --git a/app/Api/V1/Requests/RuleRequest.php b/app/Api/V1/Requests/RuleRequest.php index f8e50e4da2..95f2316abf 100644 --- a/app/Api/V1/Requests/RuleRequest.php +++ b/app/Api/V1/Requests/RuleRequest.php @@ -75,8 +75,10 @@ class RuleRequest extends Request $validTriggers = array_keys(config('firefly.rule-triggers')); $validActions = array_keys(config('firefly.rule-actions')); - // some actions require text: - $contextActions = implode(',', config('firefly.rule-actions-text')); + // some triggers and actions require text: + $contextTriggers = implode(',', config('firefly.context-rule-triggers')); + $contextActions = implode(',', config('firefly.context-rule-actions')); + $rules = [ 'title' => 'required|between:1,100|uniqueObjectForUser:rules,title', @@ -86,7 +88,7 @@ class RuleRequest extends Request 'trigger' => 'required|in:store-journal,update-journal', 'rule_triggers.*.name' => 'required|in:' . implode(',', $validTriggers), 'rule_triggers.*.stop_processing' => 'boolean', - 'rule_triggers.*.value' => 'required|min:1|ruleTriggerValue', + 'rule_triggers.*.value' => 'required_if:rule_actions.*.type,' . $contextTriggers . '|min:1|ruleTriggerValue', 'rule_actions.*.name' => 'required|in:' . implode(',', $validActions), 'rule_actions.*.value' => 'required_if:rule_actions.*.type,' . $contextActions . '|ruleActionValue', 'rule_actions.*.stop_processing' => 'boolean', diff --git a/app/Console/Commands/ApplyRules.php b/app/Console/Commands/ApplyRules.php new file mode 100644 index 0000000000..72fde55db6 --- /dev/null +++ b/app/Console/Commands/ApplyRules.php @@ -0,0 +1,392 @@ +accounts = new Collection; + $this->rules = new Collection; + $this->ruleGroups = new Collection; + $this->results = new Collection; + } + + /** + * Execute the console command. + * + * @return int + * @throws \FireflyIII\Exceptions\FireflyException + */ + public function handle(): int + { + if (!$this->verifyAccessToken()) { + $this->error('Invalid access token.'); + + return 1; + } + + $result = $this->verifyInput(); + if (false === $result) { + return 1; + } + + + // get transactions from asset accounts. + /** @var TransactionCollectorInterface $collector */ + $collector = app(TransactionCollectorInterface::class); + $collector->setUser($this->getUser()); + $collector->setAccounts($this->accounts); + $collector->setRange($this->startDate, $this->endDate); + $transactions = $collector->getTransactions(); + $count = $transactions->count(); + + // first run all rule groups: + /** @var RuleGroupRepositoryInterface $ruleGroupRepos */ + $ruleGroupRepos = app(RuleGroupRepositoryInterface::class); + $ruleGroupRepos->setUser($this->getUser()); + + /** @var RuleGroup $ruleGroup */ + foreach ($this->ruleGroups as $ruleGroup) { + $this->line(sprintf('Going to apply rule group "%s" to %d transaction(s).', $ruleGroup->title, $count)); + $rules = $ruleGroupRepos->getActiveStoreRules($ruleGroup); + $this->applyRuleSelection($rules, $transactions, true); + } + + // then run all rules (rule groups should be empty). + if ($this->rules->count() > 0) { + + $this->line(sprintf('Will apply %d rule(s) to %d transaction(s)', $this->rules->count(), $transactions->count())); + $this->applyRuleSelection($this->rules, $transactions, false); + } + + // filter results: + $this->results = $this->results->unique( + function (Transaction $transaction) { + return (int)$transaction->journal_id; + } + ); + + $this->line(''); + if (0 === $this->results->count()) { + $this->line('The rules were fired but did not influence any transactions.'); + } + if ($this->results->count() > 0) { + $this->line(sprintf('The rule(s) was/were fired, and influenced %d transaction(s).', $this->results->count())); + foreach ($this->results as $result) { + $this->line( + vsprintf( + 'Transaction #%d: "%s" (%s %s)', + [ + $result->journal_id, + $result->description, + $result->transaction_currency_code, + round($result->transaction_amount, $result->transaction_currency_dp), + ] + ) + ); + } + } + + return 0; + } + + /** + * @param Collection $rules + * @param Collection $transactions + * @param bool $breakProcessing + * + * @throws \FireflyIII\Exceptions\FireflyException + */ + private function applyRuleSelection(Collection $rules, Collection $transactions, bool $breakProcessing): void + { + $bar = $this->output->createProgressBar($rules->count() * $transactions->count()); + foreach ($rules as $rule) { + /** @var Processor $processor */ + $processor = app(Processor::class); + $processor->make($rule, true); + + /** @var Transaction $transaction */ + foreach ($transactions as $transaction) { + /** @var Rule $rule */ + $bar->advance(); + $result = $processor->handleTransaction($transaction); + if (true === $result) { + $this->results->push($transaction); + } + } + if (true === $rule->stop_processing && true === $breakProcessing) { + $this->line(''); + $this->line(sprintf('Rule #%d ("%s") says to stop processing.', $rule->id, $rule->title)); + + return; + } + } + $this->line(''); + } + + /** + * + */ + private function grabAllRules(): void + { + if (true === $this->option('all_rules')) { + /** @var RuleRepositoryInterface $ruleRepos */ + $ruleRepos = app(RuleRepositoryInterface::class); + $ruleRepos->setUser($this->getUser()); + $this->rules = $ruleRepos->getAll(); + + // reset rule groups. + $this->ruleGroups = new Collection; + } + } + + /** + * + */ + private function parseDates(): void + { + // parse start date. + $startDate = Carbon::create()->startOfMonth(); + $startString = $this->option('start_date'); + if (null === $startString) { + /** @var JournalRepositoryInterface $repository */ + $repository = app(JournalRepositoryInterface::class); + $repository->setUser($this->getUser()); + $first = $repository->firstNull(); + if (null !== $first) { + $startDate = $first->date; + } + } + if (null !== $startString && '' !== $startString) { + $startDate = Carbon::createFromFormat('Y-m-d', $startString); + } + + // parse end date + $endDate = Carbon::now(); + $endString = $this->option('end_date'); + if (null !== $endString && '' !== $endString) { + $endDate = Carbon::createFromFormat('Y-m-d', $endString); + } + + if ($startDate > $endDate) { + [$endDate, $startDate] = [$startDate, $endDate]; + } + + $this->startDate = $startDate; + $this->endDate = $endDate; + } + + /** + * @return bool + * @throws \FireflyIII\Exceptions\FireflyException + */ + private function verifyInput(): bool + { + // verify account. + $result = $this->verifyInputAccounts(); + if (false === $result) { + return $result; + } + + // verify rule groups. + $result = $this->verifyRuleGroups(); + if (false === $result) { + return $result; + } + + // verify rules. + $result = $this->verifyRules(); + if (false === $result) { + return $result; + } + + $this->grabAllRules(); + $this->parseDates(); + + //$this->line('Number of rules found: ' . $this->rules->count()); + $this->line('Start date is ' . $this->startDate->format('Y-m-d')); + $this->line('End date is ' . $this->endDate->format('Y-m-d')); + + return true; + } + + /** + * @return bool + * @throws \FireflyIII\Exceptions\FireflyException + */ + private function verifyInputAccounts(): bool + { + $accountString = $this->option('accounts'); + if (null === $accountString || '' === $accountString) { + $this->error('Please use the --accounts to indicate the accounts to apply rules to.'); + + return false; + } + $finalList = new Collection; + $accountList = explode(',', $accountString); + + if (0 === \count($accountList)) { + $this->error('Please use the --accounts to indicate the accounts to apply rules to.'); + + return false; + } + + /** @var AccountRepositoryInterface $accountRepository */ + $accountRepository = app(AccountRepositoryInterface::class); + $accountRepository->setUser($this->getUser()); + + foreach ($accountList as $accountId) { + $accountId = (int)$accountId; + $account = $accountRepository->findNull($accountId); + if (null !== $account + && \in_array( + $account->accountType->type, [AccountType::DEFAULT, AccountType::DEBT, AccountType::ASSET, AccountType::LOAN, AccountType::MORTGAGE], true + )) { + $finalList->push($account); + } + } + + if (0 === $finalList->count()) { + $this->error('Please make sure all accounts in --accounts are asset accounts or liabilities.'); + + return false; + } + $this->accounts = $finalList; + + return true; + + } + + /** + * @return bool + * @throws \FireflyIII\Exceptions\FireflyException + */ + private function verifyRuleGroups(): bool + { + $ruleGroupString = $this->option('rule_groups'); + if (null === $ruleGroupString || '' === $ruleGroupString) { + // can be empty. + return true; + } + $ruleGroupList = explode(',', $ruleGroupString); + + if (0 === \count($ruleGroupList)) { + // can be empty. + + return true; + } + /** @var RuleGroupRepositoryInterface $ruleGroupRepos */ + $ruleGroupRepos = app(RuleGroupRepositoryInterface::class); + $ruleGroupRepos->setUser($this->getUser()); + + foreach ($ruleGroupList as $ruleGroupId) { + $ruleGroupId = (int)$ruleGroupId; + $ruleGroup = $ruleGroupRepos->find($ruleGroupId); + $this->ruleGroups->push($ruleGroup); + } + + return true; + } + + /** + * @return bool + * @throws \FireflyIII\Exceptions\FireflyException + */ + private function verifyRules(): bool + { + $ruleString = $this->option('rules'); + if (null === $ruleString || '' === $ruleString) { + // can be empty. + return true; + } + $finalList = new Collection; + $ruleList = explode(',', $ruleString); + + if (0 === \count($ruleList)) { + // can be empty. + + return true; + } + /** @var RuleRepositoryInterface $ruleRepos */ + $ruleRepos = app(RuleRepositoryInterface::class); + $ruleRepos->setUser($this->getUser()); + + foreach ($ruleList as $ruleId) { + $ruleId = (int)$ruleId; + $rule = $ruleRepos->find($ruleId); + if (null !== $rule) { + $finalList->push($rule); + } + } + if ($finalList->count() > 0) { + // reset rule groups. + $this->ruleGroups = new Collection; + $this->rules = $finalList; + } + + return true; + } + + +} diff --git a/app/Console/Commands/CreateExport.php b/app/Console/Commands/CreateExport.php index 73b4d3384f..4c66cceb91 100644 --- a/app/Console/Commands/CreateExport.php +++ b/app/Console/Commands/CreateExport.php @@ -33,7 +33,7 @@ use FireflyIII\Repositories\ExportJob\ExportJobRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; use Illuminate\Console\Command; -use Storage; +use Illuminate\Support\Facades\Storage; /** * Class CreateExport. @@ -136,10 +136,14 @@ class CreateExport extends Command $processor->createZipFile(); $disk = Storage::disk('export'); $fileName = sprintf('export-%s.zip', date('Y-m-d_H-i-s')); - $disk->move($job->key . '.zip', $fileName); + $localPath = storage_path('export') . '/' . $job->key . '.zip'; - $this->line('The export has finished! You can find the ZIP file in this location:'); - $this->line(storage_path(sprintf('export/%s', $fileName))); + // "move" from local to export disk + $disk->put($fileName, file_get_contents($localPath)); + unlink($localPath); + + $this->line('The export has finished! You can find the ZIP file in export disk with file name:'); + $this->line($fileName); return 0; } diff --git a/app/Console/Commands/EncryptFile.php b/app/Console/Commands/EncryptFile.php index 08d9683afa..6c0e6d4272 100644 --- a/app/Console/Commands/EncryptFile.php +++ b/app/Console/Commands/EncryptFile.php @@ -39,7 +39,7 @@ class EncryptFile extends Command * * @var string */ - protected $description = 'Encrypts a file and places it in the storage/upload directory.'; + protected $description = 'Encrypts a file and places it in the upload disk.'; /** * The name and signature of the console command. diff --git a/app/Console/Commands/UseEncryption.php b/app/Console/Commands/UseEncryption.php index 55ef87eee9..3f50aeadd0 100644 --- a/app/Console/Commands/UseEncryption.php +++ b/app/Console/Commands/UseEncryption.php @@ -79,7 +79,7 @@ class UseEncryption extends Command $fqn = sprintf('FireflyIII\Models\%s', $class); $encrypt = true === config('firefly.encryption') ? 0 : 1; /** @noinspection PhpUndefinedMethodInspection */ - $set = $fqn::where($indicator, $encrypt)->get(); + $set = $fqn::where($indicator, $encrypt)->withTrashed()->get(); foreach ($set as $entry) { $newName = $entry->$field; diff --git a/app/Console/Commands/VerifiesAccessToken.php b/app/Console/Commands/VerifiesAccessToken.php index a0224ae0d6..39f300d796 100644 --- a/app/Console/Commands/VerifiesAccessToken.php +++ b/app/Console/Commands/VerifiesAccessToken.php @@ -23,17 +23,37 @@ declare(strict_types=1); namespace FireflyIII\Console\Commands; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Repositories\User\UserRepositoryInterface; +use FireflyIII\User; use Log; /** * Trait VerifiesAccessToken. * * Verifies user access token for sensitive commands. + * * @codeCoverageIgnore */ trait VerifiesAccessToken { + /** + * @return User + * @throws FireflyException + */ + public function getUser(): User + { + $userId = (int)$this->option('user'); + /** @var UserRepositoryInterface $repository */ + $repository = app(UserRepositoryInterface::class); + $user = $repository->findNull($userId); + if (null === $user) { + throw new FireflyException('User is unexpectedly NULL'); + } + + return $user; + } + /** * Abstract method to make sure trait knows about method "option". * diff --git a/app/Export/ExpandedProcessor.php b/app/Export/ExpandedProcessor.php index 4adb9499cf..ba5feceb21 100644 --- a/app/Export/ExpandedProcessor.php +++ b/app/Export/ExpandedProcessor.php @@ -42,7 +42,7 @@ use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use Illuminate\Support\Collection; use Log; -use Storage; +use Illuminate\Support\Facades\Storage; use ZipArchive; /** @@ -184,7 +184,7 @@ class ExpandedProcessor implements ProcessorInterface } /** - * Create a ZIP file. + * Create a ZIP file locally (!) in storage_path('export'). * * @return bool * @@ -195,9 +195,9 @@ class ExpandedProcessor implements ProcessorInterface { $zip = new ZipArchive; $file = $this->job->key . '.zip'; - $fullPath = storage_path('export') . '/' . $file; + $localPath = storage_path('export') . '/' . $file; - if (true !== $zip->open($fullPath, ZipArchive::CREATE)) { + if (true !== $zip->open($localPath, ZipArchive::CREATE)) { throw new FireflyException('Cannot store zip file.'); } // for each file in the collection, add it to the zip file. diff --git a/app/Export/Exporter/CsvExporter.php b/app/Export/Exporter/CsvExporter.php index 6e4a7b96d1..f7d57c26b8 100644 --- a/app/Export/Exporter/CsvExporter.php +++ b/app/Export/Exporter/CsvExporter.php @@ -26,7 +26,7 @@ namespace FireflyIII\Export\Exporter; use FireflyIII\Export\Entry\Entry; use League\Csv\Writer; -use Storage; +use Illuminate\Support\Facades\Storage; /** * Class CsvExporter. @@ -57,15 +57,11 @@ class CsvExporter extends BasicExporter implements ExporterInterface */ public function run(): bool { - // create temporary file: - $this->tempFile(); - - // necessary for CSV writer: - $fullPath = storage_path('export') . DIRECTORY_SEPARATOR . $this->fileName; - + // choose file name: + $this->fileName = $this->job->key . '-records.csv'; //we create the CSV into memory - $writer = Writer::createFromPath($fullPath); + $writer = Writer::createFromString(''); $rows = []; // get field names for header row: @@ -86,18 +82,9 @@ class CsvExporter extends BasicExporter implements ExporterInterface $rows[] = $line; } $writer->insertAll($rows); + $disk = Storage::disk('export'); + $disk->put($this->fileName, $writer->getContent()); return true; } - - /** - * Make a temp file. - */ - private function tempFile() - { - $this->fileName = $this->job->key . '-records.csv'; - // touch file in export directory: - $disk = Storage::disk('export'); - $disk->put($this->fileName, ''); - } } diff --git a/app/Factory/TransactionFactory.php b/app/Factory/TransactionFactory.php index ab66656da7..611ca37a93 100644 --- a/app/Factory/TransactionFactory.php +++ b/app/Factory/TransactionFactory.php @@ -120,8 +120,8 @@ class TransactionFactory Log::debug(sprintf('Expect source destination to be of type "%s"', $destinationType)); // find source and destination account: - $sourceAccount = $this->findAccount($sourceType, $data['source_id'], $data['source_name']); - $destinationAccount = $this->findAccount($destinationType, $data['destination_id'], $data['destination_name']); + $sourceAccount = $this->findAccount($sourceType, (int)$data['source_id'], $data['source_name']); + $destinationAccount = $this->findAccount($destinationType, (int)$data['destination_id'], $data['destination_name']); if (null === $sourceAccount || null === $destinationAccount) { $debugData = $data; diff --git a/app/Generator/Report/Tag/MonthReportGenerator.php b/app/Generator/Report/Tag/MonthReportGenerator.php index 2b6e3d067d..5f6de0bbc9 100644 --- a/app/Generator/Report/Tag/MonthReportGenerator.php +++ b/app/Generator/Report/Tag/MonthReportGenerator.php @@ -29,6 +29,7 @@ use Carbon\Carbon; use FireflyIII\Generator\Report\ReportGeneratorInterface; use FireflyIII\Generator\Report\Support; use FireflyIII\Helpers\Collector\TransactionCollectorInterface; +use FireflyIII\Helpers\Filter\DoubleTransactionFilter; use FireflyIII\Helpers\Filter\NegativeAmountFilter; use FireflyIII\Helpers\Filter\OpposingAccountFilter; use FireflyIII\Helpers\Filter\PositiveAmountFilter; @@ -216,9 +217,9 @@ class MonthReportGenerator extends Support implements ReportGeneratorInterface ->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER]) ->setTags($this->tags)->withOpposingAccount(); $collector->removeFilter(TransferFilter::class); - $collector->addFilter(OpposingAccountFilter::class); $collector->addFilter(PositiveAmountFilter::class); + $collector->addFilter(DoubleTransactionFilter::class); $transactions = $collector->getTransactions(); $this->expenses = $transactions; diff --git a/app/Handlers/Events/AutomationHandler.php b/app/Handlers/Events/AutomationHandler.php index 2b1464010c..75d04fbc2d 100644 --- a/app/Handlers/Events/AutomationHandler.php +++ b/app/Handlers/Events/AutomationHandler.php @@ -45,6 +45,12 @@ class AutomationHandler */ public function reportJournals(RequestedReportOnJournals $event): bool { + $sendReport = envNonEmpty('SEND_REPORT_JOURNALS', true); + + if (false === $sendReport) { + return true; + } + Log::debug('In reportJournals.'); /** @var UserRepositoryInterface $repository */ $repository = app(UserRepositoryInterface::class); diff --git a/app/Helpers/Attachments/AttachmentHelper.php b/app/Helpers/Attachments/AttachmentHelper.php index 637a74045f..34a15813a5 100644 --- a/app/Helpers/Attachments/AttachmentHelper.php +++ b/app/Helpers/Attachments/AttachmentHelper.php @@ -30,7 +30,7 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Collection; use Illuminate\Support\MessageBag; use Log; -use Storage; +use Illuminate\Support\Facades\Storage; use Symfony\Component\HttpFoundation\File\UploadedFile; /** @@ -94,7 +94,7 @@ class AttachmentHelper implements AttachmentHelperInterface } /** - * Returns the file location for an attachment, + * Returns the file path relative to upload disk for an attachment, * * @param Attachment $attachment * @@ -102,8 +102,7 @@ class AttachmentHelper implements AttachmentHelperInterface */ public function getAttachmentLocation(Attachment $attachment): string { - $path = sprintf('%s%sat-%d.data', storage_path('upload'), DIRECTORY_SEPARATOR, (int)$attachment->id); - + $path = sprintf('%sat-%d.data', DIRECTORY_SEPARATOR, (int)$attachment->id); return $path; } @@ -192,7 +191,7 @@ class AttachmentHelper implements AttachmentHelperInterface public function saveAttachmentsForModel(object $model, ?array $files): bool { if(!($model instanceof Model)) { - return false; + return false; // @codeCoverageIgnore } Log::debug(sprintf('Now in saveAttachmentsForModel for model %s', \get_class($model))); if (\is_array($files)) { @@ -270,7 +269,7 @@ class AttachmentHelper implements AttachmentHelperInterface $fileObject->rewind(); if(0 === $file->getSize()) { - throw new FireflyException('Cannot upload empty or non-existent file.'); + throw new FireflyException('Cannot upload empty or non-existent file.'); // @codeCoverageIgnore } $content = $fileObject->fread($file->getSize()); diff --git a/app/Helpers/Collector/TransactionCollector.php b/app/Helpers/Collector/TransactionCollector.php index 5e7456b938..46c4b200a2 100644 --- a/app/Helpers/Collector/TransactionCollector.php +++ b/app/Helpers/Collector/TransactionCollector.php @@ -28,6 +28,7 @@ use Carbon\Carbon; use DB; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Helpers\Filter\CountAttachmentsFilter; +use FireflyIII\Helpers\Filter\DoubleTransactionFilter; use FireflyIII\Helpers\Filter\FilterInterface; use FireflyIII\Helpers\Filter\InternalTransferFilter; use FireflyIII\Helpers\Filter\NegativeAmountFilter; @@ -53,26 +54,14 @@ use Log; /** * Class TransactionCollector * - * @codeCoverageIgnore + * @codeCoverageIgnore */ class TransactionCollector implements TransactionCollectorInterface { - /** - * Constructor. - */ - public function __construct() - { - if ('testing' === env('APP_ENV')) { - Log::warning(sprintf('%s should not be instantiated in the TEST environment!', \get_class($this))); - } - } - - /** @var array */ private $accountIds = []; /** @var int */ private $count = 0; - /** @var array */ private $fields = [ @@ -139,6 +128,16 @@ class TransactionCollector implements TransactionCollectorInterface /** @var User */ private $user; + /** + * Constructor. + */ + public function __construct() + { + if ('testing' === env('APP_ENV')) { + Log::warning(sprintf('%s should not be instantiated in the TEST environment!', \get_class($this))); + } + } + /** * @param string $filter * @@ -253,6 +252,30 @@ class TransactionCollector implements TransactionCollectorInterface return $this->count; } + /** + * @return LengthAwarePaginator + * @throws FireflyException + */ + public function getPaginatedTransactions(): LengthAwarePaginator + { + if (true === $this->run) { + throw new FireflyException('Cannot getPaginatedTransactions after run in TransactionCollector.'); + } + $this->count(); + $set = $this->getTransactions(); + $journals = new LengthAwarePaginator($set, $this->count, $this->limit, $this->page); + + return $journals; + } + + /** + * @return EloquentBuilder + */ + public function getQuery(): EloquentBuilder + { + return $this->query; + } + /** * @return Collection */ @@ -309,30 +332,6 @@ class TransactionCollector implements TransactionCollectorInterface return $set; } - /** - * @return LengthAwarePaginator - * @throws FireflyException - */ - public function getPaginatedTransactions(): LengthAwarePaginator - { - if (true === $this->run) { - throw new FireflyException('Cannot getPaginatedTransactions after run in TransactionCollector.'); - } - $this->count(); - $set = $this->getTransactions(); - $journals = new LengthAwarePaginator($set, $this->count, $this->limit, $this->page); - - return $journals; - } - - /** - * @return EloquentBuilder - */ - public function getQuery(): EloquentBuilder - { - return $this->query; - } - /** * @return TransactionCollectorInterface */ @@ -784,14 +783,15 @@ class TransactionCollector implements TransactionCollectorInterface { // create all possible filters: $filters = [ - InternalTransferFilter::class => new InternalTransferFilter($this->accountIds), - OpposingAccountFilter::class => new OpposingAccountFilter($this->accountIds), - TransferFilter::class => new TransferFilter, - PositiveAmountFilter::class => new PositiveAmountFilter, - NegativeAmountFilter::class => new NegativeAmountFilter, - SplitIndicatorFilter::class => new SplitIndicatorFilter, - CountAttachmentsFilter::class => new CountAttachmentsFilter, - TransactionViewFilter::class => new TransactionViewFilter, + InternalTransferFilter::class => new InternalTransferFilter($this->accountIds), + OpposingAccountFilter::class => new OpposingAccountFilter($this->accountIds), + TransferFilter::class => new TransferFilter, + PositiveAmountFilter::class => new PositiveAmountFilter, + NegativeAmountFilter::class => new NegativeAmountFilter, + SplitIndicatorFilter::class => new SplitIndicatorFilter, + CountAttachmentsFilter::class => new CountAttachmentsFilter, + TransactionViewFilter::class => new TransactionViewFilter, + DoubleTransactionFilter::class => new DoubleTransactionFilter, ]; Log::debug(sprintf('Will run %d filters on the set.', \count($this->filters))); foreach ($this->filters as $enabled) { diff --git a/app/Helpers/Filter/DoubleTransactionFilter.php b/app/Helpers/Filter/DoubleTransactionFilter.php new file mode 100644 index 0000000000..ce35b22c60 --- /dev/null +++ b/app/Helpers/Filter/DoubleTransactionFilter.php @@ -0,0 +1,60 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Helpers\Filter; + + +use FireflyIII\Models\Transaction; +use Illuminate\Support\Collection; + +/** + * + * Used when the final collection contains double transactions, which can happen when viewing the tag report. + * Class DoubleTransactionFilter + */ +class DoubleTransactionFilter implements FilterInterface +{ + + /** + * Apply the filter. + * + * @param Collection $set + * + * @return Collection + */ + public function filter(Collection $set): Collection + { + $count = []; + $result = new Collection; + /** @var Transaction $transaction */ + foreach ($set as $transaction) { + $id = (int)$transaction->id; + $count[$id] = isset($count[$id]) ? $count[$id] + 1 : 1; + if (1 === $count[$id]) { + $result->push($transaction); + } + } + + return $result; + } +} \ No newline at end of file diff --git a/app/Helpers/Filter/TransferFilter.php b/app/Helpers/Filter/TransferFilter.php index 159096792b..ab606ca1f2 100644 --- a/app/Helpers/Filter/TransferFilter.php +++ b/app/Helpers/Filter/TransferFilter.php @@ -63,10 +63,14 @@ class TransferFilter implements FilterInterface $key = $journalId . '-' . implode(',', $transactionIds) . '-' . implode(',', $accountIds) . '-' . $amount; Log::debug(sprintf('Current transaction key is "%s"', $key)); if (!isset($count[$key])) { + Log::debug(sprintf('First instance of transaction #%d, add it.', $transaction->id)); // not yet counted? add to new set and count it: $new->push($transaction); $count[$key] = 1; } + if (isset($count[$key])) { + Log::debug(sprintf('Second instance of transaction #%d, do NOT add it.', $transaction->id)); + } } return $new; diff --git a/app/Http/Controllers/Account/ReconcileController.php b/app/Http/Controllers/Account/ReconcileController.php index 1283863a73..69bd4f07f3 100644 --- a/app/Http/Controllers/Account/ReconcileController.php +++ b/app/Http/Controllers/Account/ReconcileController.php @@ -123,7 +123,6 @@ class ReconcileController extends Controller * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\View\View * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) - * @throws FireflyException */ public function reconcile(Account $account, Carbon $start = null, Carbon $end = null) { diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php index ccdb13e75c..c8fe3b60fe 100644 --- a/app/Http/Controllers/Auth/ForgotPasswordController.php +++ b/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -30,6 +30,7 @@ use FireflyIII\User; use Illuminate\Foundation\Auth\SendsPasswordResetEmails; use Illuminate\Http\Request; use Illuminate\Support\Facades\Password; +use Log; /** * Class ForgotPasswordController @@ -58,6 +59,13 @@ class ForgotPasswordController extends Controller */ public function sendResetLinkEmail(Request $request, UserRepositoryInterface $repository) { + $loginProvider = envNonEmpty('LOGIN_PROVIDER','eloquent'); + if ('eloquent' !== $loginProvider) { + $message = sprintf('Cannot reset password when authenticating over "%s".', $loginProvider); + Log::error($message); + return view('error', compact('message')); + } + $this->validateEmail($request); // verify if the user is not a demo user. If so, we give him back an error. @@ -90,6 +98,13 @@ class ForgotPasswordController extends Controller */ public function showLinkRequestForm() { + $loginProvider = envNonEmpty('LOGIN_PROVIDER','eloquent'); + if ('eloquent' !== $loginProvider) { + $message = sprintf('Cannot reset password when authenticating over "%s".', $loginProvider); + + return view('error', compact('message')); + } + // is allowed to? $singleUserMode = FireflyConfig::get('single_user_mode', config('firefly.configuration.single_user_mode'))->data; $userCount = User::count(); diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 0ca4c9f6b7..329c189e22 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -129,8 +129,9 @@ class LoginController extends Controller */ public function showLoginForm(Request $request) { - $count = DB::table('users')->count(); - if (0 === $count) { + $count = DB::table('users')->count(); + $loginProvider = envNonEmpty('LOGIN_PROVIDER','eloquent'); + if (0 === $count && 'eloquent' === $loginProvider) { return redirect(route('register')); // @codeCoverageIgnore } @@ -141,13 +142,20 @@ class LoginController extends Controller $singleUserMode = FireflyConfig::get('single_user_mode', config('firefly.configuration.single_user_mode'))->data; $userCount = User::count(); $allowRegistration = true; + $allowReset = true; if (true === $singleUserMode && $userCount > 0) { $allowRegistration = false; } + // single user mode is ignored when the user is not using eloquent: + if ('eloquent' !== $loginProvider) { + $allowRegistration = false; + $allowReset = false; + } + $email = $request->old('email'); $remember = $request->old('remember'); - return view('auth.login', compact('allowRegistration', 'email', 'remember')); + return view('auth.login', compact('allowRegistration', 'email', 'remember','allowReset')); } } diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index 2ece879132..0f09de03b4 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -71,9 +71,19 @@ class RegisterController extends Controller public function register(Request $request) { // is allowed to? - $singleUserMode = FireflyConfig::get('single_user_mode', config('firefly.configuration.single_user_mode'))->data; - $userCount = User::count(); - if (true === $singleUserMode && $userCount > 0) { + $allowRegistration = true; + $loginProvider = envNonEmpty('LOGIN_PROVIDER','eloquent'); + $singleUserMode = FireflyConfig::get('single_user_mode', config('firefly.configuration.single_user_mode'))->data; + $userCount = User::count(); + if (true === $singleUserMode && $userCount > 0 && 'eloquent' === $loginProvider) { + $allowRegistration = false; + } + + if ('eloquent' !== $loginProvider) { + $allowRegistration = false; + } + + if (false === $allowRegistration) { $message = 'Registration is currently not available.'; return view('error', compact('message')); @@ -102,13 +112,25 @@ class RegisterController extends Controller */ public function showRegistrationForm(Request $request) { - // is demo site? - $isDemoSite = FireflyConfig::get('is_demo_site', config('firefly.configuration.is_demo_site'))->data; + $allowRegistration = true; + $loginProvider = envNonEmpty('LOGIN_PROVIDER','eloquent'); + $isDemoSite = FireflyConfig::get('is_demo_site', config('firefly.configuration.is_demo_site'))->data; + $singleUserMode = FireflyConfig::get('single_user_mode', config('firefly.configuration.single_user_mode'))->data; + $userCount = User::count(); - // is allowed to? - $singleUserMode = FireflyConfig::get('single_user_mode', config('firefly.configuration.single_user_mode'))->data; - $userCount = User::count(); - if (true === $singleUserMode && $userCount > 0) { + if (true === $isDemoSite) { + $allowRegistration = false; + } + + if (true === $singleUserMode && $userCount > 0 && 'eloquent' === $loginProvider) { + $allowRegistration = false; + } + + if ('eloquent' !== $loginProvider) { + $allowRegistration = false; + } + + if (false === $allowRegistration) { $message = 'Registration is currently not available.'; return view('error', compact('message')); diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php index a5401c488d..a54db5b1a6 100644 --- a/app/Http/Controllers/Auth/ResetPasswordController.php +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -28,6 +28,7 @@ use FireflyIII\Http\Controllers\Controller; use FireflyIII\User; use Illuminate\Foundation\Auth\ResetsPasswords; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Password; /** * Class ResetPasswordController @@ -70,7 +71,15 @@ class ResetPasswordController extends Controller */ public function showResetForm(Request $request, $token = null) { - // is allowed to? + $loginProvider = envNonEmpty('LOGIN_PROVIDER','eloquent'); + if ('eloquent' !== $loginProvider) { + $message = sprintf('Cannot reset password when authenticating over "%s".', $loginProvider); + + return view('error', compact('message')); + } + + + // is allowed to register? $singleUserMode = FireflyConfig::get('single_user_mode', config('firefly.configuration.single_user_mode'))->data; $userCount = User::count(); $allowRegistration = true; @@ -83,4 +92,42 @@ class ResetPasswordController extends Controller ['token' => $token, 'email' => $request->email, 'allowRegistration' => $allowRegistration] ); } + + /** + * Reset the given user's password. + * + * @param \Illuminate\Http\Request $request + * + * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse + * @throws \Illuminate\Validation\ValidationException + */ + public function reset(Request $request) + { + $loginProvider = envNonEmpty('LOGIN_PROVIDER','eloquent'); + if ('eloquent' !== $loginProvider) { + $message = sprintf('Cannot reset password when authenticating over "%s".', $loginProvider); + + return view('error', compact('message')); + } + + $this->validate($request, $this->rules(), $this->validationErrorMessages()); + + // Here we will attempt to reset the user's password. If it is successful we + // will update the password on an actual user model and persist it to the + // database. Otherwise we will parse the error and return the response. + $response = $this->broker()->reset( + $this->credentials($request), function ($user, $password) { + $this->resetPassword($user, $password); + } + ); + + // If the password was successfully reset, we will redirect the user back to + // the application's home authenticated view. If there is an error we can + // redirect them back to where they came from with their error message. + return $response === Password::PASSWORD_RESET + ? $this->sendResetResponse($request, $response) + : $this->sendResetFailedResponse($request, $response); + } + + } diff --git a/app/Http/Controllers/Budget/IndexController.php b/app/Http/Controllers/Budget/IndexController.php index 78bd66d719..8db0e98e64 100644 --- a/app/Http/Controllers/Budget/IndexController.php +++ b/app/Http/Controllers/Budget/IndexController.php @@ -28,6 +28,7 @@ use Carbon\Carbon; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Support\Http\Controllers\DateCalculation; +use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; @@ -63,7 +64,6 @@ class IndexController extends Controller ); } - /** * Show all budgets. * @@ -134,5 +134,29 @@ class IndexController extends Controller ); } + /** + * @param Request $request + * + * @return JsonResponse + */ + public function reorder(Request $request, BudgetRepositoryInterface $repository): JsonResponse + { + $budgetIds = $request->get('budgetIds'); + $page = (int)$request->get('page'); + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; + + $currentOrder = (($page - 1) * $pageSize) + 1; + foreach ($budgetIds as $budgetId) { + $budgetId = (int)$budgetId; + $budget = $repository->findNull($budgetId); + if (null !== $budget) { + $repository->setBudgetOrder($budget, $currentOrder); + } + $currentOrder++; + } + + return response()->json(['OK']); + } + } diff --git a/app/Http/Controllers/Budget/ShowController.php b/app/Http/Controllers/Budget/ShowController.php index 4347702490..170cf4ec19 100644 --- a/app/Http/Controllers/Budget/ShowController.php +++ b/app/Http/Controllers/Budget/ShowController.php @@ -88,7 +88,7 @@ class ShowController extends Controller 'firefly.without_budget_between', ['start' => $start->formatLocalized($this->monthAndDayFormat), 'end' => $end->formatLocalized($this->monthAndDayFormat)] ); - $periods = $this->getBudgetPeriodOverview($end); + $periods = $this->getNoBudgetPeriodOverview($end); $page = (int)$request->get('page'); $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; diff --git a/app/Http/Controllers/Chart/AccountController.php b/app/Http/Controllers/Chart/AccountController.php index ddbe34b07c..498d60fd75 100644 --- a/app/Http/Controllers/Chart/AccountController.php +++ b/app/Http/Controllers/Chart/AccountController.php @@ -375,7 +375,7 @@ class AccountController extends Controller $cache->addProperty($end); $cache->addProperty('chart.account.income-category'); if ($cache->has()) { - //return response()->json($cache->get()); // @codeCoverageIgnore + return response()->json($cache->get()); // @codeCoverageIgnore } // grab all journals: @@ -531,7 +531,7 @@ class AccountController extends Controller $cache->addProperty($end); $cache->addProperty('chart.account.revenue-accounts'); if ($cache->has()) { - //return response()->json($cache->get()); // @codeCoverageIgnore + return response()->json($cache->get()); // @codeCoverageIgnore } $start->subDay(); diff --git a/app/Http/Controllers/Chart/BillController.php b/app/Http/Controllers/Chart/BillController.php index 3472335bec..e0af3ad201 100644 --- a/app/Http/Controllers/Chart/BillController.php +++ b/app/Http/Controllers/Chart/BillController.php @@ -68,7 +68,7 @@ class BillController extends Controller $cache->addProperty($end); $cache->addProperty('chart.bill.frontpage'); if ($cache->has()) { - //return response()->json($cache->get()); // @codeCoverageIgnore + return response()->json($cache->get()); // @codeCoverageIgnore } /** @var CurrencyRepositoryInterface $currencyRepository */ $currencyRepository = app(CurrencyRepositoryInterface::class); diff --git a/app/Http/Controllers/Chart/CategoryController.php b/app/Http/Controllers/Chart/CategoryController.php index 7e6a17eefd..411ff6cad0 100644 --- a/app/Http/Controllers/Chart/CategoryController.php +++ b/app/Http/Controllers/Chart/CategoryController.php @@ -32,6 +32,7 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Category\CategoryRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\CacheProperties; +use FireflyIII\Support\Http\Controllers\DateCalculation; use Illuminate\Http\JsonResponse; use Illuminate\Support\Collection; @@ -40,6 +41,7 @@ use Illuminate\Support\Collection; */ class CategoryController extends Controller { + use DateCalculation; /** @var GeneratorInterface Chart generation methods. */ protected $generator; @@ -97,17 +99,36 @@ class CategoryController extends Controller 'entries' => [], 'type' => 'line', 'fill' => false, ], ]; - - while ($start <= $end) { - $currentEnd = app('navigation')->endOfPeriod($start, $range); - $spent = $repository->spentInPeriod(new Collection([$category]), $accounts, $start, $currentEnd); - $earned = $repository->earnedInPeriod(new Collection([$category]), $accounts, $start, $currentEnd); - $sum = bcadd($spent, $earned); - $label = app('navigation')->periodShow($start, $range); - $chartData[0]['entries'][$label] = round(bcmul($spent, '-1'), 12); - $chartData[1]['entries'][$label] = round($earned, 12); - $chartData[2]['entries'][$label] = round($sum, 12); - $start = app('navigation')->addPeriod($start, $range, 0); + $step = $this->calculateStep($start, $end); + $current = clone $start; + switch ($step) { + case '1D': + while ($current <= $end) { + $spent = $repository->spentInPeriod(new Collection([$category]), $accounts, $current, $current); + $earned = $repository->earnedInPeriod(new Collection([$category]), $accounts, $current, $current); + $sum = bcadd($spent, $earned); + $label = app('navigation')->periodShow($current, $step); + $chartData[0]['entries'][$label] = round(bcmul($spent, '-1'), 12); + $chartData[1]['entries'][$label] = round($earned, 12); + $chartData[2]['entries'][$label] = round($sum, 12); + $current->addDay(); + } + break; + case '1W': + case '1M': + case '1Y': + while ($current <= $end) { + $currentEnd = app('navigation')->endOfPeriod($current, $range); + $spent = $repository->spentInPeriod(new Collection([$category]), $accounts, $current, $currentEnd); + $earned = $repository->earnedInPeriod(new Collection([$category]), $accounts, $current, $currentEnd); + $sum = bcadd($spent, $earned); + $label = app('navigation')->periodShow($current, $step); + $chartData[0]['entries'][$label] = round(bcmul($spent, '-1'), 12); + $chartData[1]['entries'][$label] = round($earned, 12); + $chartData[2]['entries'][$label] = round($sum, 12); + $current= app('navigation')->addPeriod($current, $step, 0); + } + break; } $data = $this->generator->multiSet($chartData); @@ -135,7 +156,7 @@ class CategoryController extends Controller $cache->addProperty($end); $cache->addProperty('chart.category.frontpage'); if ($cache->has()) { - //return response()->json($cache->get()); // @codeCoverageIgnore + return response()->json($cache->get()); // @codeCoverageIgnore } // currency repos: @@ -168,7 +189,7 @@ class CategoryController extends Controller $noCategory = $repository->spentInPeriodPcWoCategory(new Collection, $start, $end); foreach ($noCategory as $currencyId => $spent) { $currencies[$currencyId] = $currencies[$currencyId] ?? $currencyRepository->findNull($currencyId); - $tempData[] = [ + $tempData[] = [ 'name' => trans('firefly.no_category'), 'spent' => bcmul($spent, '-1'), 'spent_float' => (float)bcmul($spent, '-1'), diff --git a/app/Http/Controllers/Import/JobStatusController.php b/app/Http/Controllers/Import/JobStatusController.php index d211001939..9d256a5817 100644 --- a/app/Http/Controllers/Import/JobStatusController.php +++ b/app/Http/Controllers/Import/JobStatusController.php @@ -85,7 +85,7 @@ class JobStatusController extends Controller */ public function json(ImportJob $importJob): JsonResponse { - $count = \count($importJob->transactions); + $count = $this->repository->countTransactions($importJob); $json = [ 'status' => $importJob->status, 'errors' => $importJob->errors, diff --git a/app/Http/Controllers/JavascriptController.php b/app/Http/Controllers/JavascriptController.php index d5527846a6..dd81fccb52 100644 --- a/app/Http/Controllers/JavascriptController.php +++ b/app/Http/Controllers/JavascriptController.php @@ -48,7 +48,9 @@ class JavascriptController extends Controller */ public function accounts(AccountRepositoryInterface $repository, CurrencyRepositoryInterface $currencyRepository): Response { - $accounts = $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET, AccountType::DEBT,AccountType::LOAN,AccountType::MORTGAGE, AccountType::CREDITCARD]); + $accounts = $repository->getAccountsByType( + [AccountType::DEFAULT, AccountType::ASSET, AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::CREDITCARD] + ); $preference = app('preferences')->get('currencyPreference', config('firefly.default_currency', 'EUR')); /** @noinspection NullPointerExceptionInspection */ $default = $currencyRepository->findByCodeNull($preference->data); @@ -124,6 +126,7 @@ class JavascriptController extends Controller /** @noinspection NullPointerExceptionInspection */ $lang = $pref->data; $dateRange = $this->getDateRangeConfig(); + $uid = substr(hash('sha256', auth()->user()->id . auth()->user()->email), 0, 12); $data = [ 'currencyCode' => $currency->code, @@ -133,6 +136,7 @@ class JavascriptController extends Controller 'language' => $lang, 'dateRangeTitle' => $dateRange['title'], 'dateRangeConfig' => $dateRange['configuration'], + 'uid' => $uid, ]; $request->session()->keep(['two-factor-secret']); diff --git a/app/Http/Controllers/Json/AutoCompleteController.php b/app/Http/Controllers/Json/AutoCompleteController.php index f441948828..dbd993aedd 100644 --- a/app/Http/Controllers/Json/AutoCompleteController.php +++ b/app/Http/Controllers/Json/AutoCompleteController.php @@ -22,6 +22,7 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers\Json; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Helpers\Collector\TransactionCollectorInterface; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\Account; @@ -37,58 +38,16 @@ use FireflyIII\Repositories\Tag\TagRepositoryInterface; use FireflyIII\Support\CacheProperties; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Illuminate\Support\Collection; /** - * TODO refactor so each auto-complete thing is a function call because lots of code duplication. * Class AutoCompleteController. * - * @SuppressWarnings(PHPMD.TooManyPublicMethods) * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class AutoCompleteController extends Controller { - /** - * Returns a JSON list of all accounts. - * - * @param Request $request - * @param AccountRepositoryInterface $repository - * - * @return JsonResponse - */ - public function allAccounts(Request $request, AccountRepositoryInterface $repository): JsonResponse - { - $search = (string)$request->get('search'); - $cache = new CacheProperties; - $cache->addProperty('ac-all-accounts'); - // very unlikely a user will actually search for this string. - $key = '' === $search ? 'skjf0893j89fj2398hd89dh289h2398hr7isd8900828u209ujnxs88929282u' : $search; - $cache->addProperty($key); - if ($cache->has()) { - return response()->json($cache->get()); - } - // find everything: - $return = array_values( - array_unique( - $repository->getAccountsByType( - [AccountType::REVENUE, AccountType::EXPENSE, AccountType::BENEFICIARY, AccountType::DEFAULT, AccountType::ASSET] - )->pluck('name')->toArray() - ) - ); - if ('' !== $search) { - $return = array_values( - array_filter( - $return, function (string $value) use ($search) { - return !(false === stripos($value, $search)); - }, ARRAY_FILTER_USE_BOTH - ) - ); - } - $cache->store($return); - - return response()->json($return); - } - /** * List of all journals. * @@ -106,7 +65,7 @@ class AutoCompleteController extends Controller $key = '' === $search ? 'skjf0893j89fj2398hd89dh289h2398hr7isd8900828u209ujnxs88929282u' : $search; $cache->addProperty($key); if ($cache->has()) { - return response()->json($cache->get()); + return response()->json($cache->get()); // @codeCoverageIgnore } // find everything: $collector->setLimit(250)->setPage(1); @@ -129,251 +88,79 @@ class AutoCompleteController extends Controller } /** - * List of revenue accounts. - * - * @param Request $request - * @param AccountRepositoryInterface $repository + * @param Request $request + * @param string $subject * + * @throws FireflyException * @return JsonResponse */ - public function assetAccounts(Request $request, AccountRepositoryInterface $repository): JsonResponse + public function autoComplete(Request $request, string $subject): JsonResponse { - $search = (string)$request->get('search'); - $cache = new CacheProperties; - $cache->addProperty('ac-asset-accounts'); - // very unlikely a user will actually search for this string. - $key = '' === $search ? 'skjf0893j89fj2398hd89dh289h2398hr7isd8900828u209ujnxs88929282u' : $search; - $cache->addProperty($key); - if ($cache->has()) { - return response()->json($cache->get()); - } - // find everything: - $set = $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]); - $filtered = $set->filter( - function (Account $account) { - if (true === $account->active) { - return $account; - } + $search = (string)$request->get('search'); + $unfiltered = null; + $filtered = null; - return false; // @codeCoverageIgnore - } - ); - $return = array_values(array_unique($filtered->pluck('name')->toArray())); - - if ('' !== $search) { - $return = array_values( - array_unique( - array_filter( - $return, function (string $value) use ($search) { - return !(false === stripos($value, $search)); - }, ARRAY_FILTER_USE_BOTH - ) - ) + // search for all accounts. + if ('all-accounts' === $subject) { + $unfiltered = $this->getAccounts( + [AccountType::REVENUE, AccountType::EXPENSE, AccountType::BENEFICIARY, AccountType::DEFAULT, AccountType::ASSET, AccountType::LOAN, + AccountType::DEBT, AccountType::MORTGAGE] ); } - $cache->store($return); - return response()->json($return); - } - - /** - * Returns a JSON list of all bills. - * - * @param Request $request - * @param BillRepositoryInterface $repository - * - * @return JsonResponse - */ - public function bills(Request $request, BillRepositoryInterface $repository): JsonResponse - { - $search = (string)$request->get('search'); - $cache = new CacheProperties; - $cache->addProperty('ac-bills'); - // very unlikely a user will actually search for this string. - $key = '' === $search ? 'skjf0893j89fj2398hd89dh289h2398hr7isd8900828u209ujnxs88929282u' : $search; - $cache->addProperty($key); - if ($cache->has()) { - return response()->json($cache->get()); + // search for expense accounts. + if ('expense-accounts' === $subject) { + $unfiltered = $this->getAccounts([AccountType::EXPENSE, AccountType::BENEFICIARY]); } - // find everything: - $return = array_unique($repository->getActiveBills()->pluck('name')->toArray()); - if ('' !== $search) { - $return = array_values( - array_unique( - array_filter( - $return, function (string $value) use ($search) { - return !(false === stripos($value, $search)); - }, ARRAY_FILTER_USE_BOTH - ) - ) - ); + // search for revenue accounts. + if ('revenue-accounts' === $subject) { + $unfiltered = $this->getAccounts([AccountType::REVENUE]); } - $cache->store($return); - return response()->json($return); - } - - /** - * List of budgets. - * - * @param Request $request - * @param BudgetRepositoryInterface $repository - * - * @return JsonResponse - */ - public function budgets(Request $request, BudgetRepositoryInterface $repository): JsonResponse - { - $search = (string)$request->get('search'); - $cache = new CacheProperties; - $cache->addProperty('ac-budgets'); - // very unlikely a user will actually search for this string. - $key = '' === $search ? 'skjf0893j89fj2398hd89dh289h2398hr7isd8900828u209ujnxs88929282u' : $search; - $cache->addProperty($key); - if ($cache->has()) { - return response()->json($cache->get()); + // search for asset accounts. + if ('asset-accounts' === $subject) { + $unfiltered = $this->getAccounts([AccountType::ASSET, AccountType::DEFAULT]); } - // find everything: - $return = array_unique($repository->getBudgets()->pluck('name')->toArray()); - if ('' !== $search) { - $return = array_values( - array_unique( - array_filter( - $return, function (string $value) use ($search) { - return !(false === stripos($value, $search)); - }, ARRAY_FILTER_USE_BOTH - ) - ) - ); + // search for categories. + if ('categories' === $subject) { + $unfiltered = $this->getCategories(); } - $cache->store($return); - return response()->json($return); - } - - /** - * Returns a list of categories. - * - * @param Request $request - * @param CategoryRepositoryInterface $repository - * - * @return JsonResponse - */ - public function categories(Request $request, CategoryRepositoryInterface $repository): JsonResponse - { - $search = (string)$request->get('search'); - $cache = new CacheProperties; - $cache->addProperty('ac-categories'); - // very unlikely a user will actually search for this string. - $key = '' === $search ? 'skjf0893j89fj2398hd89dh289h2398hr7isd8900828u209ujnxs88929282u' : $search; - $cache->addProperty($key); - if ($cache->has()) { - return response()->json($cache->get()); + // search for budgets. + if ('budgets' === $subject) { + $unfiltered = $this->getBudgets(); } - // find everything: - $return = array_unique($repository->getCategories()->pluck('name')->toArray()); - if ('' !== $search) { - $return = array_values( - array_filter( - $return, function (string $value) use ($search) { - return !(false === stripos($value, $search)); - }, ARRAY_FILTER_USE_BOTH - ) - ); + + // search for tags + if ('tags' === $subject) { + $unfiltered = $this->getTags(); } - $cache->store($return); - return response()->json($return); - } - - /** - * List of currency names. - * - * @param Request $request - * @param CurrencyRepositoryInterface $repository - * - * @return JsonResponse - */ - public function currencyNames(Request $request, CurrencyRepositoryInterface $repository): JsonResponse - { - $search = (string)$request->get('search'); - $cache = new CacheProperties; - $cache->addProperty('ac-currency-names'); - // very unlikely a user will actually search for this string. - $key = '' === $search ? 'skjf0893j89fj2398hd89dh289h2398hr7isd8900828u209ujnxs88929282u' : $search; - $cache->addProperty($key); - if ($cache->has()) { - return response()->json($cache->get()); + // search for bills + if ('bills' === $subject) { + $unfiltered = $this->getBills(); } - // find everything: - $return = $repository->get()->pluck('name')->toArray(); - sort($return); - - if ('' !== $search) { - $return = array_values( - array_unique( - array_filter( - $return, function (string $value) use ($search) { - return !(false === stripos($value, $search)); - }, ARRAY_FILTER_USE_BOTH - ) - ) - ); + // search for currency names. + if ('currency-names' === $subject) { + $unfiltered = $this->getCurrencyNames(); } - $cache->store($return); - - return response()->json($return); - } - - /** - * Returns a JSON list of all beneficiaries. - * - * @param Request $request - * @param AccountRepositoryInterface $repository - * - * @return JsonResponse - */ - public function expenseAccounts(Request $request, AccountRepositoryInterface $repository): JsonResponse - { - $search = (string)$request->get('search'); - $cache = new CacheProperties; - $cache->addProperty('ac-expense-accounts'); - // very unlikely a user will actually search for this string. - $key = '' === $search ? 'skjf0893j89fj2398hd89dh289h2398hr7isd8900828u209ujnxs88929282u' : $search; - $cache->addProperty($key); - if ($cache->has()) { - return response()->json($cache->get()); + if ('transaction_types' === $subject) { + $unfiltered = $this->getTransactionTypes(); } - // find everything: - $set = $repository->getAccountsByType([AccountType::EXPENSE, AccountType::BENEFICIARY]); - $filtered = $set->filter( - function (Account $account) { - if (true === $account->active) { - return $account; - } - - return false; - } - ); - $return = array_unique($filtered->pluck('name')->toArray()); - - sort($return); - - if ('' !== $search) { - $return = array_values( - array_unique( - array_filter( - $return, function (string $value) use ($search) { - return !(false === stripos($value, $search)); - }, ARRAY_FILTER_USE_BOTH - ) - ) - ); + if ('transaction-types' === $subject) { + $unfiltered = $this->getTransactionTypes(); } - $cache->store($return); - return response()->json($return); + // filter results + $filtered = $this->filterResult($unfiltered, $search); + + if (null === $filtered) { + throw new FireflyException(sprintf('Auto complete handler cannot handle "%s"', $subject)); // @codeCoverageIgnore + } + + return response()->json($filtered); } /** @@ -394,7 +181,7 @@ class AutoCompleteController extends Controller $key = '' === $search ? 'skjf0893j89fj2398hd89dh289h2398hr7isd8900828u209ujnxs88929282u' : $search; $cache->addProperty($key); if ($cache->has()) { - return response()->json($cache->get()); + return response()->json($cache->get()); // @codeCoverageIgnore } // find everything: $collector->setLimit(400)->setPage(1); @@ -413,105 +200,14 @@ class AutoCompleteController extends Controller sort($return); if ('' !== $search) { - $return = array_values( - array_unique( - array_filter( - $return, function (array $array) use ($search) { - $value = $array['name']; - - return !(false === stripos($value, $search)); - }, ARRAY_FILTER_USE_BOTH - ) - ) - ); - } - $cache->store($return); - - return response()->json($return); - } - - /** - * List of revenue accounts. - * - * @param Request $request - * @param AccountRepositoryInterface $repository - * - * @return JsonResponse - */ - public function revenueAccounts(Request $request, AccountRepositoryInterface $repository): JsonResponse - { - $search = (string)$request->get('search'); - $cache = new CacheProperties; - $cache->addProperty('ac-revenue-accounts'); - // very unlikely a user will actually search for this string. - $key = '' === $search ? 'skjf0893j89fj2398hd89dh289h2398hr7isd8900828u209ujnxs88929282u' : $search; - $cache->addProperty($key); - if ($cache->has()) { - return response()->json($cache->get()); - } - // find everything: - $set = $repository->getAccountsByType([AccountType::REVENUE]); - $filtered = $set->filter( - function (Account $account) { - if (true === $account->active) { - return $account; - } - - return false; + $return = array_filter( + $return, function (array $array) use ($search) { + $haystack = $array['name']; + $result = stripos($haystack, $search); + return !(false === $result); } - ); - $return = array_unique($filtered->pluck('name')->toArray()); - sort($return); - - if ('' !== $search) { - $return = array_values( - array_unique( - array_filter( - $return, function (string $value) use ($search) { - return !(false === stripos($value, $search)); - }, ARRAY_FILTER_USE_BOTH - ) - ) ); - } - $cache->store($return); - return response()->json($return); - } - - /** - * Returns a JSON list of all beneficiaries. - * - * @param Request $request - * @param TagRepositoryInterface $tagRepository - * - * @return JsonResponse - */ - public function tags(Request $request, TagRepositoryInterface $tagRepository): JsonResponse - { - $search = (string)$request->get('search'); - $cache = new CacheProperties; - $cache->addProperty('ac-revenue-accounts'); - // very unlikely a user will actually search for this string. - $key = '' === $search ? 'skjf0893j89fj2398hd89dh289h2398hr7isd8900828u209ujnxs88929282u' : $search; - $cache->addProperty($key); - if ($cache->has()) { - return response()->json($cache->get()); - } - // find everything: - $return = array_unique($tagRepository->get()->pluck('tag')->toArray()); - sort($return); - - if ('' !== $search) { - $return = array_values( - array_unique( - array_filter( - $return, function (string $value) use ($search) { - return !(false === stripos($value, $search)); - }, ARRAY_FILTER_USE_BOTH - ) - ) - ); } $cache->store($return); @@ -536,7 +232,7 @@ class AutoCompleteController extends Controller $key = '' === $search ? 'skjf0893j89fj2398hd89dh289h2398hr7isd8900828u209ujnxs88929282u' : $search; $cache->addProperty($key); if ($cache->has()) { - return response()->json($cache->get()); + return response()->json($cache->get()); // @codeCoverageIgnore } // find everything: $type = config('firefly.transactionTypesByWhat.' . $what); @@ -563,43 +259,119 @@ class AutoCompleteController extends Controller } /** - * List if transaction types. + * @param array $unfiltered + * @param string $query * - * @param Request $request - * @param JournalRepositoryInterface $repository - * - * @return JsonResponse + * @return array|null */ - public function transactionTypes(Request $request, JournalRepositoryInterface $repository): JsonResponse + private function filterResult(?array $unfiltered, string $query): ?array { - $search = (string)$request->get('search'); - $cache = new CacheProperties; - $cache->addProperty('ac-revenue-accounts'); - // very unlikely a user will actually search for this string. - $key = '' === $search ? 'skjf0893j89fj2398hd89dh289h2398hr7isd8900828u209ujnxs88929282u' : $search; - $cache->addProperty($key); - if ($cache->has()) { - return response()->json($cache->get()); + if (null === $unfiltered) { + return null; // @codeCoverageIgnore } - // find everything: - $return = array_unique($repository->getTransactionTypes()->pluck('type')->toArray()); - sort($return); + if ('' === $query) { + sort($unfiltered); - if ('' !== $search) { + return $unfiltered; + } + $return = []; + if ('' !== $query) { $return = array_values( - array_unique( - array_filter( - $return, function (string $value) use ($search) { - return !(false === stripos($value, $search)); - }, ARRAY_FILTER_USE_BOTH - ) + array_filter( + $unfiltered, function (string $value) use ($query) { + return !(false === stripos($value, $query)); + }, ARRAY_FILTER_USE_BOTH ) ); } - $cache->store($return); + sort($return); - return response()->json($return); + return $return; + } + + /** + * @param string $query + * @param array $types + * + * @return array + */ + private function getAccounts(array $types): array + { + $repository = app(AccountRepositoryInterface::class); + // find everything: + /** @var Collection $collection */ + $collection = $repository->getAccountsByType($types); + $filtered = $collection->filter( + function (Account $account) { + return $account->active === true; + } + ); + $return = array_values(array_unique($filtered->pluck('name')->toArray())); + + return $return; } + + /** + * @return array + */ + private function getBills(): array + { + $repository = app(BillRepositoryInterface::class); + + return array_unique($repository->getActiveBills()->pluck('name')->toArray()); + } + + /** + * @return array + */ + private function getBudgets(): array + { + $repository = app(BudgetRepositoryInterface::class); + + return array_unique($repository->getBudgets()->pluck('name')->toArray()); + } + + /** + * @return array + */ + private function getCategories(): array + { + $repository = app(CategoryRepositoryInterface::class); + + return array_unique($repository->getCategories()->pluck('name')->toArray()); + } + + /** + * @return array + */ + private function getCurrencyNames(): array + { + /** @var CurrencyRepositoryInterface $repository */ + $repository = app(CurrencyRepositoryInterface::class); + + return $repository->get()->pluck('name')->toArray(); + } + + /** + * @return array + */ + private function getTags(): array + { + /** @var TagRepositoryInterface $repository */ + $repository = app(TagRepositoryInterface::class); + + return array_unique($repository->get()->pluck('tag')->toArray()); + } + + /** + * @return array + */ + private function getTransactionTypes(): array + { + $repository = app(JournalRepositoryInterface::class); + + return array_unique($repository->getTransactionTypes()->pluck('type')->toArray()); + } } diff --git a/app/Http/Controllers/Json/ReconcileController.php b/app/Http/Controllers/Json/ReconcileController.php index 0739102c7c..7c523d8430 100644 --- a/app/Http/Controllers/Json/ReconcileController.php +++ b/app/Http/Controllers/Json/ReconcileController.php @@ -111,15 +111,49 @@ class ReconcileController extends Controller $cleared = $this->repository->getTransactionsById($clearedIds); $countCleared = 0; + Log::debug('Start transaction loop'); /** @var Transaction $transaction */ foreach ($transactions as $transaction) { - $amount = bcadd($amount, $transaction->amount); - } + // find the account and opposing account for this transaction + Log::debug(sprintf('Now at transaction #%d: %s', $transaction->journal_id, $transaction->description)); + $srcAccount = $this->accountRepos->findNull((int)$transaction->account_id); + $dstAccount = $this->accountRepos->findNull((int)$transaction->opposing_account_id); + $srcCurrency = (int)$this->accountRepos->getMetaValue($srcAccount, 'currency_id'); + $dstCurrency = (int)$this->accountRepos->getMetaValue($dstAccount, 'currency_id'); + // is $account source or destination? + if ($account->id === $srcAccount->id) { + // source, and it matches the currency id or is 0 + if ($srcCurrency === $transaction->transaction_currency_id || 0 === $srcCurrency) { + Log::debug(sprintf('Source matches currency: %s', $transaction->transaction_amount)); + $amount = bcadd($amount, $transaction->transaction_amount); + } + // destination, and it matches the foreign currency ID. + if ($srcCurrency === $transaction->foreign_currency_id) { + Log::debug(sprintf('Source matches foreign currency: %s', $transaction->transaction_foreign_amount)); + $amount = bcadd($amount, $transaction->transaction_foreign_amount); + } + } + + if ($account->id === $dstAccount->id) { + // destination, and it matches the currency id or is 0 + if ($dstCurrency === $transaction->transaction_currency_id || 0 === $dstCurrency) { + Log::debug(sprintf('Destination matches currency: %s', app('steam')->negative($transaction->transaction_amount))); + $amount = bcadd($amount, app('steam')->negative($transaction->transaction_amount)); + } + // destination, and it matches the foreign currency ID. + if ($dstCurrency === $transaction->foreign_currency_id) { + Log::debug(sprintf('Destination matches foreign currency: %s', $transaction->transaction_foreign_amount)); + $amount = bcadd($amount, $transaction->transaction_foreign_amount); + } + } + Log::debug(sprintf('Amount is now %s', $amount)); + } + Log::debug('End transaction loop'); /** @var Transaction $transaction */ foreach ($cleared as $transaction) { - if ($transaction->transactionJournal->date <= $end) { - $clearedAmount = bcadd($clearedAmount, $transaction->amount); // @codeCoverageIgnore + if ($transaction->date <= $end) { + $clearedAmount = bcadd($clearedAmount, $transaction->transaction_amount); // @codeCoverageIgnore ++$countCleared; } } @@ -201,6 +235,7 @@ class ReconcileController extends Controller Log::debug(sprintf('Could not render: %s', $e->getMessage())); $html = 'Could not render accounts.reconcile.transactions'; } + // @codeCoverageIgnoreEnd return response()->json(['html' => $html, 'startBalance' => $startBalance, 'endBalance' => $endBalance]); diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index a22196b051..755e2f4df1 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -41,6 +41,7 @@ use FireflyIII\User; use Google2FA; use Hash; use Illuminate\Contracts\Auth\Guard; +use Illuminate\Http\Request; use Illuminate\Support\Collection; use Laravel\Passport\ClientRepository; use Log; @@ -71,6 +72,7 @@ class ProfileController extends Controller return $next($request); } ); + $this->middleware(IsDemoUser::class)->except(['index']); $this->middleware(IsSandStormUser::class)->except('index'); } @@ -80,8 +82,15 @@ class ProfileController extends Controller * * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ - public function changeEmail() + public function changeEmail(Request $request) { + $loginProvider = config('firefly.login_provider'); + if ('eloquent' !== $loginProvider) { + $request->session()->flash('error', trans('firefly.login_provider_local_only', ['login_provider' => $loginProvider])); + + return redirect(route('profile.index')); + } + $title = auth()->user()->email; $email = auth()->user()->email; $subTitle = (string)trans('firefly.change_your_email'); @@ -95,8 +104,15 @@ class ProfileController extends Controller * * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ - public function changePassword() + public function changePassword(Request $request) { + $loginProvider = config('firefly.login_provider'); + if ('eloquent' !== $loginProvider) { + $request->session()->flash('error', trans('firefly.login_provider_local_only', ['login_provider' => $loginProvider])); + + return redirect(route('profile.index')); + } + $title = auth()->user()->email; $subTitle = (string)trans('firefly.change_your_password'); $subTitleIcon = 'fa-key'; @@ -132,6 +148,10 @@ class ProfileController extends Controller */ public function confirmEmailChange(UserRepositoryInterface $repository, string $token) { + $loginProvider = config('firefly.login_provider'); + if ('eloquent' !== $loginProvider) { + throw new FireflyException('Cannot confirm email change when authentication provider is not local.'); + } // find preference with this token value. /** @var Collection $set */ $set = app('preferences')->findByName('email_change_confirm_token'); @@ -163,8 +183,12 @@ class ProfileController extends Controller * * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ - public function deleteAccount() + public function deleteAccount(Request $request) { + $loginProvider = config('firefly.login_provider'); + if ('eloquent' !== $loginProvider) { + $request->session()->flash('warning', trans('firefly.delete_local_info_only', ['login_provider' => $loginProvider])); + } $title = auth()->user()->email; $subTitle = (string)trans('firefly.delete_account'); $subTitleIcon = 'fa-trash'; @@ -216,6 +240,7 @@ class ProfileController extends Controller */ public function index() { + $loginProvider = config('firefly.login_provider'); // check if client token thing exists (default one) $count = DB::table('oauth_clients') ->where('personal_access_client', 1) @@ -241,7 +266,7 @@ class ProfileController extends Controller $accessToken = app('preferences')->set('access_token', $token); } - return view('profile.index', compact('subTitle', 'userId', 'accessToken', 'enabled2FA')); + return view('profile.index', compact('subTitle', 'userId', 'accessToken', 'enabled2FA', 'loginProvider')); } /** @@ -254,6 +279,13 @@ class ProfileController extends Controller */ public function postChangeEmail(EmailFormRequest $request, UserRepositoryInterface $repository) { + $loginProvider = config('firefly.login_provider'); + if ('eloquent' !== $loginProvider) { + $request->session()->flash('error', trans('firefly.login_provider_local_only', ['login_provider' => $loginProvider])); + + return redirect(route('profile.index')); + } + /** @var User $user */ $user = auth()->user(); $newEmail = $request->string('email'); @@ -299,6 +331,13 @@ class ProfileController extends Controller */ public function postChangePassword(ProfileFormRequest $request, UserRepositoryInterface $repository) { + $loginProvider = config('firefly.login_provider'); + if ('eloquent' !== $loginProvider) { + $request->session()->flash('error', trans('firefly.login_provider_local_only', ['login_provider' => $loginProvider])); + + return redirect(route('profile.index')); + } + // the request has already validated both new passwords must be equal. $current = $request->get('current_password'); $new = $request->get('new_password'); @@ -396,6 +435,11 @@ class ProfileController extends Controller */ public function undoEmailChange(UserRepositoryInterface $repository, string $token, string $hash) { + $loginProvider = config('firefly.login_provider'); + if ('eloquent' !== $loginProvider) { + throw new FireflyException('Cannot confirm email change when authentication provider is not local.'); + } + // find preference with this token value. $set = app('preferences')->findByName('email_change_undo_token'); $user = null; diff --git a/app/Http/Controllers/TagController.php b/app/Http/Controllers/TagController.php index a2731043dc..7dba1172fa 100644 --- a/app/Http/Controllers/TagController.php +++ b/app/Http/Controllers/TagController.php @@ -192,7 +192,7 @@ class TagController extends Controller 'firefly.journals_in_period_for_tag', ['tag' => $tag->tag, 'start' => $start->formatLocalized($this->monthAndDayFormat), 'end' => $end->formatLocalized($this->monthAndDayFormat),] ); - $periods = $this->getTagPeriodOverview($tag); + $periods = $this->getTagPeriodOverview($tag, $start); $path = route('tags.show', [$tag->id, $start->format('Y-m-d'), $end->format('Y-m-d')]); /** @var TransactionCollectorInterface $collector */ diff --git a/app/Http/Middleware/SecureHeaders.php b/app/Http/Middleware/SecureHeaders.php index 016e40c0a9..39168deabe 100644 --- a/app/Http/Middleware/SecureHeaders.php +++ b/app/Http/Middleware/SecureHeaders.php @@ -37,7 +37,6 @@ class SecureHeaders * * @param \Illuminate\Http\Request $request * @param \Closure $next - * @param string|null $guard * * @return mixed */ @@ -51,6 +50,7 @@ class SecureHeaders } $csp = [ "default-src 'none'", + "object-src 'self'", sprintf("script-src 'self' 'unsafe-eval' 'unsafe-inline' %s", $google), "style-src 'self' 'unsafe-inline'", "base-uri 'self'", diff --git a/app/Http/Requests/AccountFormRequest.php b/app/Http/Requests/AccountFormRequest.php index 3d01ff4a3c..33d3310334 100644 --- a/app/Http/Requests/AccountFormRequest.php +++ b/app/Http/Requests/AccountFormRequest.php @@ -24,6 +24,7 @@ namespace FireflyIII\Http\Requests; use FireflyIII\Models\Account; use FireflyIII\Rules\UniqueIban; +use FireflyIII\Rules\ZeroOrMore; /** * Class AccountFormRequest. @@ -116,7 +117,7 @@ class AccountFormRequest extends Request ]; if ('liabilities' === $this->get('what')) { - $rules['openingBalance'] = 'numeric|required|more:0'; + $rules['openingBalance'] = ['numeric', 'required', new ZeroOrMore]; $rules['openingBalanceDate'] = 'date|required'; } diff --git a/app/Http/Requests/RuleFormRequest.php b/app/Http/Requests/RuleFormRequest.php index 40df4da5d8..acca6dba81 100644 --- a/app/Http/Requests/RuleFormRequest.php +++ b/app/Http/Requests/RuleFormRequest.php @@ -75,32 +75,31 @@ class RuleFormRequest extends Request $validTriggers = array_keys(config('firefly.rule-triggers')); $validActions = array_keys(config('firefly.rule-actions')); - // some actions require text: - $contextActions = implode(',', config('firefly.rule-actions-text')); + // some actions require text (aka context): + $contextActions = implode(',', config('firefly.context-rule-actions')); - $titleRule = 'required|between:1,100|uniqueObjectForUser:rules,title'; - /** @var Rule $rule */ - $rule = $this->route()->parameter('rule'); + // some triggers require text (aka context): + $contextTriggers = implode(',', config('firefly.context-rule-triggers')); - if (null !== $rule) { - $titleRule = 'required|between:1,100|uniqueObjectForUser:rules,title,' . $rule->id; - } + // initial set of rules: $rules = [ - 'title' => $titleRule, + 'title' => 'required|between:1,100|uniqueObjectForUser:rules,title', 'description' => 'between:1,5000|nullable', 'stop_processing' => 'boolean', 'rule_group_id' => 'required|belongsToUser:rule_groups', 'trigger' => 'required|in:store-journal,update-journal', 'rule_triggers.*.name' => 'required|in:' . implode(',', $validTriggers), - 'rule_triggers.*.value' => 'required|min:1|ruleTriggerValue', + 'rule_triggers.*.value' => sprintf('required_if:rule_triggers.*.name,%s|min:1|ruleTriggerValue', $contextTriggers), 'rule-actions.*.name' => 'required|in:' . implode(',', $validActions), + 'rule_actions.*.value' => sprintf('required_if:rule_actions.*.name,%s|min:1|ruleActionValue', $contextActions), 'strict' => 'in:0,1', ]; - // since Laravel does not support this stuff yet, here's a trick. - for ($i = 0; $i < 10; ++$i) { - $key = sprintf('rule_actions.%d.value', $i); - $rule = sprintf('required-if:rule_actions.%d.name,%s|ruleActionValue', $i, $contextActions); - $rules[$key] = $rule; + + /** @var Rule $rule */ + $rule = $this->route()->parameter('rule'); + + if (null !== $rule) { + $rules['title'] = 'required|between:1,100|uniqueObjectForUser:rules,title,' . $rule->id; } return $rules; diff --git a/app/Http/Requests/SplitJournalFormRequest.php b/app/Http/Requests/SplitJournalFormRequest.php index 7cedd16a18..0ad4321f26 100644 --- a/app/Http/Requests/SplitJournalFormRequest.php +++ b/app/Http/Requests/SplitJournalFormRequest.php @@ -168,8 +168,10 @@ class SplitJournalFormRequest extends Request /** @var array $array */ foreach ($transactions as $array) { if (null !== $array['destination_id'] && null !== $array['source_id'] && $array['destination_id'] === $array['source_id']) { + // @codeCoverageIgnoreStart $validator->errors()->add('journal_source_id', (string)trans('validation.source_equals_destination')); $validator->errors()->add('journal_destination_id', (string)trans('validation.source_equals_destination')); + // @codeCoverageIgnoreEnd } } diff --git a/app/Import/JobConfiguration/FinTSConfigurationSteps.php b/app/Import/JobConfiguration/FinTSConfigurationSteps.php new file mode 100644 index 0000000000..6f77b61b09 --- /dev/null +++ b/app/Import/JobConfiguration/FinTSConfigurationSteps.php @@ -0,0 +1,35 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Import\JobConfiguration; + +/** + * + * Class FinTSConfigurationSteps + */ +abstract class FinTSConfigurationSteps +{ + public const NEW = 'new'; + public const CHOOSE_ACCOUNT = 'choose_account'; + public const GO_FOR_IMPORT = 'go-for-import'; +} \ No newline at end of file diff --git a/app/Import/JobConfiguration/FinTSJobConfiguration.php b/app/Import/JobConfiguration/FinTSJobConfiguration.php new file mode 100644 index 0000000000..4b9c337343 --- /dev/null +++ b/app/Import/JobConfiguration/FinTSJobConfiguration.php @@ -0,0 +1,134 @@ +. + */ +declare(strict_types=1); + +namespace FireflyIII\Import\JobConfiguration; + +use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Models\ImportJob; +use FireflyIII\Support\Import\JobConfiguration\FinTS\ChooseAccountHandler; +use FireflyIII\Support\Import\JobConfiguration\FinTS\FinTSConfigurationInterface; +use FireflyIII\Support\Import\JobConfiguration\FinTS\NewFinTSJobHandler; +use Illuminate\Support\MessageBag; + +/** + * + * Class FinTSJobConfiguration + */ +class FinTSJobConfiguration implements JobConfigurationInterface +{ + /** @var ImportJob */ + private $importJob; + + /** + * Returns true when the initial configuration for this job is complete. + * + * @return bool + */ + public function configurationComplete(): bool + { + return $this->importJob->stage === FinTSConfigurationSteps::GO_FOR_IMPORT; + } + + /** + * Store any data from the $data array into the job. Anything in the message bag will be flashed + * as an error to the user, regardless of its content. + * + * @param array $data + * + * @return MessageBag + * @throws FireflyException + */ + public function configureJob(array $data): MessageBag + { + return $this->getConfigurationObject()->configureJob($data); + } + + /** + * Return the data required for the next step in the job configuration. + * + * @return array + * @throws FireflyException + */ + public function getNextData(): array + { + return $this->getConfigurationObject()->getNextData(); + } + + /** + * Returns the view of the next step in the job configuration. + * + * @return string + * @throws FireflyException + */ + public function getNextView(): string + { + switch ($this->importJob->stage) { + case FinTSConfigurationSteps::NEW: + case FinTSConfigurationSteps::CHOOSE_ACCOUNT: + return 'import.fints.' . $this->importJob->stage; + break; + default: + // @codeCoverageIgnoreStart + throw new FireflyException( + sprintf('FinTSJobConfiguration::getNextView() cannot handle stage "%s"', $this->importJob->stage) + ); + // @codeCoverageIgnoreEnd + } + } + + /** + * @param ImportJob $importJob + */ + public function setImportJob(ImportJob $importJob): void + { + $this->importJob = $importJob; + } + + /** + * Get the configuration handler for this specific stage. + * + * @return FinTSConfigurationInterface + * @throws FireflyException + */ + private function getConfigurationObject(): FinTSConfigurationInterface + { + $class = 'DoNotExist'; + switch ($this->importJob->stage) { + case FinTSConfigurationSteps::NEW: + $class = NewFinTSJobHandler::class; + break; + case FinTSConfigurationSteps::CHOOSE_ACCOUNT: + $class = ChooseAccountHandler::class; + break; + } + if (!class_exists($class)) { + throw new FireflyException(sprintf('Class %s does not exist in getConfigurationClass().', $class)); // @codeCoverageIgnore + } + + $configurator = app($class); + $configurator->setImportJob($this->importJob); + + return $configurator; + } + + +} \ No newline at end of file diff --git a/app/Import/Routine/BunqRoutine.php b/app/Import/Routine/BunqRoutine.php index c53c75a720..f5b6deb3b3 100644 --- a/app/Import/Routine/BunqRoutine.php +++ b/app/Import/Routine/BunqRoutine.php @@ -78,13 +78,13 @@ class BunqRoutine implements RoutineInterface $handler->run(); $transactions = $handler->getTransactions(); // could be that more transactions will arrive in a second run. - if (true === $handler->stillRunning) { + if (true === $handler->isStillRunning()) { Log::debug('Handler indicates that it is still working.'); $this->repository->setStatus($this->importJob, 'ready_to_run'); $this->repository->setStage($this->importJob, 'go-for-import'); } $this->repository->appendTransactions($this->importJob, $transactions); - if (false === $handler->stillRunning) { + if (false === $handler->isStillRunning()) { Log::info('Handler indicates that its done!'); $this->repository->setStatus($this->importJob, 'provider_finished'); $this->repository->setStage($this->importJob, 'final'); @@ -98,6 +98,8 @@ class BunqRoutine implements RoutineInterface } + + /** * Set the import job. * diff --git a/app/Import/Routine/FinTSRoutine.php b/app/Import/Routine/FinTSRoutine.php new file mode 100644 index 0000000000..7248c10a3f --- /dev/null +++ b/app/Import/Routine/FinTSRoutine.php @@ -0,0 +1,88 @@ +. + */ +declare(strict_types=1); + +namespace FireflyIII\Import\Routine; + + +use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Import\JobConfiguration\FinTSConfigurationSteps; +use FireflyIII\Models\ImportJob; +use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface; +use FireflyIII\Support\Import\Routine\FinTS\StageImportDataHandler; +use Illuminate\Support\Facades\Log; + +/** + * + * Class FinTSRoutine + */ +class FinTSRoutine implements RoutineInterface +{ + /** @var ImportJob */ + private $importJob; + /** @var ImportJobRepositoryInterface */ + private $repository; + + /** + * At the end of each run(), the import routine must set the job to the expected status. + * + * The final status of the routine must be "provider_finished". + * + * @throws FireflyException + */ + public function run(): void + { + Log::debug(sprintf('Now in FinTSRoutine::run() with status "%s" and stage "%s".', $this->importJob->status, $this->importJob->stage)); + $valid = ['ready_to_run']; // should be only ready_to_run + if (\in_array($this->importJob->status, $valid, true)) { + switch ($this->importJob->stage) { + default: + throw new FireflyException(sprintf('FinTSRoutine cannot handle stage "%s".', $this->importJob->stage)); // @codeCoverageIgnore + case FinTSConfigurationSteps::GO_FOR_IMPORT: + $this->repository->setStatus($this->importJob, 'running'); + /** @var StageImportDataHandler $handler */ + $handler = app(StageImportDataHandler::class); + $handler->setImportJob($this->importJob); + $handler->run(); + $transactions = $handler->getTransactions(); + + $this->repository->setTransactions($this->importJob, $transactions); + $this->repository->setStatus($this->importJob, 'provider_finished'); + $this->repository->setStage($this->importJob, 'final'); + + return; + } + } + } + + /** + * @param ImportJob $importJob + * + * @return void + */ + public function setImportJob(ImportJob $importJob): void + { + $this->importJob = $importJob; + $this->repository = app(ImportJobRepositoryInterface::class); + $this->repository->setUser($importJob->user); + } + +} \ No newline at end of file diff --git a/app/Import/Storage/ImportArrayStorage.php b/app/Import/Storage/ImportArrayStorage.php index 76e2605347..4d649883f9 100644 --- a/app/Import/Storage/ImportArrayStorage.php +++ b/app/Import/Storage/ImportArrayStorage.php @@ -46,7 +46,7 @@ use Illuminate\Support\Collection; use Log; /** - * Creates new transactions based upon arrays. Will first check the array for duplicates. + * Creates new transactions based on arrays. * * Class ImportArrayStorage * @@ -58,11 +58,11 @@ class ImportArrayStorage private $checkForTransfers = false; /** @var ImportJob The import job */ private $importJob; - /** @var JournalRepositoryInterface */ + /** @var JournalRepositoryInterface Journal repository for storage. */ private $journalRepos; /** @var ImportJobRepositoryInterface Import job repository */ private $repository; - /** @var Collection The transfers. */ + /** @var Collection The transfers the user already has. */ private $transfers; /** @@ -72,12 +72,12 @@ class ImportArrayStorage */ public function setImportJob(ImportJob $importJob): void { - $this->importJob = $importJob; - $this->countTransfers(); - + $this->importJob = $importJob; $this->repository = app(ImportJobRepositoryInterface::class); $this->repository->setUser($importJob->user); + $this->countTransfers(); + $this->journalRepos = app(JournalRepositoryInterface::class); $this->journalRepos->setUser($importJob->user); @@ -116,7 +116,7 @@ class ImportArrayStorage app('preferences')->mark(); // email about this: - event(new RequestedReportOnJournals($this->importJob->user_id, $collection)); + event(new RequestedReportOnJournals((int)$this->importJob->user_id, $collection)); return $collection; } @@ -152,14 +152,14 @@ class ImportArrayStorage /** * Count the number of transfers in the array. If this is zero, don't bother checking for double transfers. - * - * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ private function countTransfers(): void { - Log::debug('Now in count transfers.'); + Log::debug('Now in countTransfers()'); /** @var array $array */ - $array = $this->importJob->transactions; + $array = $this->repository->getTransactions($this->importJob); + + $count = 0; foreach ($array as $index => $transaction) { if (strtolower(TransactionType::TRANSFER) === strtolower($transaction['type'])) { @@ -167,17 +167,44 @@ class ImportArrayStorage Log::debug(sprintf('Row #%d is a transfer, increase count to %d', $index + 1, $count)); } } - if (0 === $count) { - Log::debug('Count is zero, will not check for duplicate transfers.'); - } + Log::debug(sprintf('Count of transfers in import array is %d.', $count)); if ($count > 0) { - Log::debug(sprintf('Count is %d, will check for duplicate transfers.', $count)); $this->checkForTransfers = true; - + Log::debug('Will check for duplicate transfers.'); // get users transfers. Needed for comparison. $this->getTransfers(); } + } + /** + * @param int $index + * @param array $transaction + * + * @return bool + * @throws FireflyException + */ + private function duplicateDetected(int $index, array $transaction): bool + { + $hash = $this->getHash($transaction); + $existingId = $this->hashExists($hash); + if (null !== $existingId) { + $message = sprintf('Row #%d ("%s") could not be imported. It already exists.', $index, $transaction['description']); + $this->logDuplicateObject($transaction, $existingId); + $this->repository->addErrorMessage($this->importJob, $message); + + return true; + } + + // do transfer detection: + if ($this->checkForTransfers && $this->transferExists($transaction)) { + $message = sprintf('Row #%d ("%s") could not be imported. Such a transfer already exists.', $index, $transaction['description']); + $this->logDuplicateTransfer($transaction); + $this->repository->addErrorMessage($this->importJob, $message); + + return true; + } + + return false; } /** @@ -193,9 +220,11 @@ class ImportArrayStorage unset($transaction['importHashV2'], $transaction['original-source']); $json = json_encode($transaction); if (false === $json) { + // @codeCoverageIgnoreStart /** @noinspection ForgottenDebugOutputInspection */ Log::error('Could not encode import array.', print_r($transaction, true)); - throw new FireflyException('Could not encode import array. Please see the logs.'); // @codeCoverageIgnore + throw new FireflyException('Could not encode import array. Please see the logs.'); + // @codeCoverageIgnoreEnd } $hash = hash('sha256', $json, false); Log::debug(sprintf('The hash is: %s', $hash)); @@ -391,38 +420,21 @@ class ImportArrayStorage private function storeArray(): Collection { /** @var array $array */ - $array = $this->importJob->transactions; + $array = $this->repository->getTransactions($this->importJob); $count = \count($array); $toStore = []; - Log::debug(sprintf('Now in store(). Count of items is %d', $count)); + Log::debug(sprintf('Now in store(). Count of items is %d.', $count)); + /* + * Detect duplicates in initial array: + */ foreach ($array as $index => $transaction) { Log::debug(sprintf('Now at item %d out of %d', $index + 1, $count)); - $hash = $this->getHash($transaction); - $existingId = $this->hashExists($hash); - if (null !== $existingId) { - $this->logDuplicateObject($transaction, $existingId); - $this->repository->addErrorMessage( - $this->importJob, sprintf( - 'Row #%d ("%s") could not be imported. It already exists.', - $index, $transaction['description'] - ) - ); + if ($this->duplicateDetected($index, $transaction)) { continue; } - if ($this->checkForTransfers && $this->transferExists($transaction)) { - $this->logDuplicateTransfer($transaction); - $this->repository->addErrorMessage( - $this->importJob, sprintf( - 'Row #%d ("%s") could not be imported. Such a transfer already exists.', - $index, - $transaction['description'] - ) - ); - continue; - } - $transaction['importHashV2'] = $hash; + $transaction['importHashV2'] = $this->getHash($transaction); $toStore[] = $transaction; } $count = \count($toStore); @@ -436,31 +448,8 @@ class ImportArrayStorage // now actually store them: $collection = new Collection; foreach ($toStore as $index => $store) { - // do duplicate detection again! - $hash = $this->getHash($store); - $existingId = $this->hashExists($hash); - if (null !== $existingId) { - $this->logDuplicateObject($store, $existingId); - $this->repository->addErrorMessage( - $this->importJob, sprintf( - 'Row #%d ("%s") could not be imported. It already exists.', - $index, $store['description'] - ) - ); - continue; - } - - // do transfer detection again! - if ($this->checkForTransfers && $this->transferExists($store)) { - $this->logDuplicateTransfer($store); - $this->repository->addErrorMessage( - $this->importJob, sprintf( - 'Row #%d ("%s") could not be imported. Such a transfer already exists.', - $index, - $store['description'] - ) - ); + if ($this->duplicateDetected($index, $store)) { continue; } @@ -554,8 +543,9 @@ class ImportArrayStorage Log::debug(sprintf('Comparison is a hit! (%s)', $hits)); // compare description: - Log::debug(sprintf('Comparing "%s" to "%s"', $description, $transfer->description)); - if ($description !== $transfer->description) { + $comparison = '(empty description)' === $transfer->description ? '' : $transfer->description; + Log::debug(sprintf('Comparing "%s" to "%s" (original: "%s")', $description, $transfer->description, $comparison)); + if ($description !== $comparison) { continue; // @codeCoverageIgnore } ++$hits; diff --git a/app/Jobs/ExecuteRuleGroupOnExistingTransactions.php b/app/Jobs/ExecuteRuleGroupOnExistingTransactions.php index f6901a6f3f..ec1931df95 100644 --- a/app/Jobs/ExecuteRuleGroupOnExistingTransactions.php +++ b/app/Jobs/ExecuteRuleGroupOnExistingTransactions.php @@ -154,15 +154,15 @@ class ExecuteRuleGroupOnExistingTransactions extends Job implements ShouldQueue $processors = $this->collectProcessors(); // Execute the rules for each transaction - foreach ($transactions as $transaction) { - /** @var Processor $processor */ - foreach ($processors as $processor) { + foreach ($processors as $processor) { + foreach ($transactions as $transaction) { + /** @var Processor $processor */ $processor->handleTransaction($transaction); - // Stop processing this group if the rule specifies 'stop_processing' - if ($processor->getRule()->stop_processing) { - break; - } + } + // Stop processing this group if the rule specifies 'stop_processing' + if ($processor->getRule()->stop_processing) { + break; } } } @@ -203,6 +203,7 @@ class ExecuteRuleGroupOnExistingTransactions extends Job implements ShouldQueue /** @var Processor $processor */ $processor = app(Processor::class); $processor->make($rule); + return $processor; }, $rules->all() diff --git a/app/Jobs/ExecuteRuleOnExistingTransactions.php b/app/Jobs/ExecuteRuleOnExistingTransactions.php index 16d0e660d2..51c7943e8b 100644 --- a/app/Jobs/ExecuteRuleOnExistingTransactions.php +++ b/app/Jobs/ExecuteRuleOnExistingTransactions.php @@ -179,10 +179,6 @@ class ExecuteRuleOnExistingTransactions extends Job implements ShouldQueue ++$misses; } Log::info(sprintf('Current progress: %d Transactions. Hits: %d, misses: %d', $total, $hits, $misses)); - // Stop processing this group if the rule specifies 'stop_processing' - if ($processor->getRule()->stop_processing) { - break; - } } Log::info(sprintf('Total transactions: %d. Hits: %d, misses: %d', $total, $hits, $misses)); } diff --git a/app/Models/Budget.php b/app/Models/Budget.php index 0ef5142e05..5efdbe2b58 100644 --- a/app/Models/Budget.php +++ b/app/Models/Budget.php @@ -42,6 +42,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property-read string $email * @property bool encrypted * @property Collection budgetlimits + * @property int $order */ class Budget extends Model { @@ -61,7 +62,7 @@ class Budget extends Model 'encrypted' => 'boolean', ]; /** @var array Fields that can be filled */ - protected $fillable = ['user_id', 'name', 'active']; + protected $fillable = ['user_id', 'name', 'active','order']; /** @var array Hidden from view */ protected $hidden = ['encrypted']; diff --git a/app/Models/ImportJob.php b/app/Models/ImportJob.php index aebbf35b45..b45502a5cf 100644 --- a/app/Models/ImportJob.php +++ b/app/Models/ImportJob.php @@ -22,6 +22,7 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use FireflyIII\User; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -45,6 +46,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property array $errors * @property array extended_status * @property int id + * @property Carbon $created_at */ class ImportJob extends Model { @@ -56,6 +58,7 @@ class ImportJob extends Model */ protected $casts = [ + 'user_id' => 'int', 'created_at' => 'datetime', 'updated_at' => 'datetime', 'configuration' => 'array', diff --git a/app/Providers/FireflyServiceProvider.php b/app/Providers/FireflyServiceProvider.php index 92de23b578..396c2589ad 100644 --- a/app/Providers/FireflyServiceProvider.php +++ b/app/Providers/FireflyServiceProvider.php @@ -71,6 +71,7 @@ use FireflyIII\Validation\FireflyValidator; use Illuminate\Foundation\Application; use Illuminate\Support\ServiceProvider; use Twig; +use Twig_Extension_Debug; use TwigBridge\Extension\Loader\Functions; use Validator; @@ -105,6 +106,7 @@ class FireflyServiceProvider extends ServiceProvider Twig::addExtension(new Transaction); Twig::addExtension(new Rule); Twig::addExtension(new AmountFormat); + Twig::addExtension(new Twig_Extension_Debug); } /** diff --git a/app/Repositories/Attachment/AttachmentRepository.php b/app/Repositories/Attachment/AttachmentRepository.php index 501c846a0c..c3b9987639 100644 --- a/app/Repositories/Attachment/AttachmentRepository.php +++ b/app/Repositories/Attachment/AttachmentRepository.php @@ -34,7 +34,7 @@ use FireflyIII\User; use Illuminate\Contracts\Filesystem\FileNotFoundException; use Illuminate\Support\Collection; use Log; -use Storage; +use Illuminate\Support\Facades\Storage; /** * Class AttachmentRepository. @@ -66,9 +66,9 @@ class AttachmentRepository implements AttachmentRepositoryInterface /** @var AttachmentHelperInterface $helper */ $helper = app(AttachmentHelperInterface::class); - $file = $helper->getAttachmentLocation($attachment); + $path = $helper->getAttachmentLocation($attachment); try { - unlink($file); + Storage::disk('upload')->delete($path); } catch (Exception $e) { Log::error(sprintf('Could not delete file for attachment %d: %s', $attachment->id, $e->getMessage())); } diff --git a/app/Repositories/Bill/BillRepository.php b/app/Repositories/Bill/BillRepository.php index d9578b8cad..0b2f837e54 100644 --- a/app/Repositories/Bill/BillRepository.php +++ b/app/Repositories/Bill/BillRepository.php @@ -381,7 +381,9 @@ class BillRepository implements BillRepositoryInterface */ public function getPaidDatesInRange(Bill $bill, Carbon $start, Carbon $end): Collection { - $dates = $bill->transactionJournals()->before($end)->after($start)->get(['transaction_journals.date'])->pluck('date'); + $dates = $bill->transactionJournals()->before($end)->after($start)->get([ + 'transaction_journals.id','transaction_journals.date' + ])->pluck('date', 'id'); return $dates; } diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php index 3787219f0e..b1a18f6719 100644 --- a/app/Repositories/Budget/BudgetRepository.php +++ b/app/Repositories/Budget/BudgetRepository.php @@ -107,6 +107,7 @@ class BudgetRepository implements BudgetRepositoryInterface } catch (Exception $e) { Log::debug(sprintf('Could not delete budget limit: %s', $e->getMessage())); } + Budget::where('order',0)->update(['order' => 100]); // do the clean up by hand because Sqlite can be tricky with this. $budgetLimits = BudgetLimit::orderBy('created_at', 'DESC')->get(['id', 'budget_id', 'start_date', 'end_date']); @@ -289,11 +290,14 @@ class BudgetRepository implements BudgetRepositoryInterface public function getActiveBudgets(): Collection { /** @var Collection $set */ - $set = $this->user->budgets()->where('active', 1)->get(); + $set = $this->user->budgets()->where('active', 1) + ->get(); $set = $set->sortBy( function (Budget $budget) { - return strtolower($budget->name); + $str = str_pad((string)$budget->order, 4, '0', STR_PAD_LEFT) . strtolower($budget->name); + + return $str; } ); @@ -554,7 +558,9 @@ class BudgetRepository implements BudgetRepositoryInterface $set = $set->sortBy( function (Budget $budget) { - return strtolower($budget->name); + $str = str_pad((string)$budget->order, 4, '0', STR_PAD_LEFT) . strtolower($budget->name); + + return $str; } ); @@ -583,7 +589,9 @@ class BudgetRepository implements BudgetRepositoryInterface $set = $set->sortBy( function (Budget $budget) { - return strtolower($budget->name); + $str = str_pad((string)$budget->order, 4, '0', STR_PAD_LEFT) . strtolower($budget->name); + + return $str; } ); @@ -652,6 +660,18 @@ class BudgetRepository implements BudgetRepositoryInterface return $availableBudget; } + /** + * @param Budget $budget + * @param int $order + */ + public function setBudgetOrder(Budget $budget, int $order): void + { + $budget->order = $order; + $budget->save(); + } + + /** @noinspection MoreThanThreeArgumentsInspection */ + /** * @param User $user */ @@ -660,7 +680,6 @@ class BudgetRepository implements BudgetRepositoryInterface $this->user = $user; } - /** @noinspection MoreThanThreeArgumentsInspection */ /** * @param Collection $budgets * @param Collection $accounts @@ -825,6 +844,8 @@ class BudgetRepository implements BudgetRepositoryInterface } + /** @noinspection MoreThanThreeArgumentsInspection */ + /** * @param BudgetLimit $budgetLimit * @param array $data @@ -848,7 +869,6 @@ class BudgetRepository implements BudgetRepositoryInterface return $budgetLimit; } - /** @noinspection MoreThanThreeArgumentsInspection */ /** * @param Budget $budget * @param Carbon $start diff --git a/app/Repositories/Budget/BudgetRepositoryInterface.php b/app/Repositories/Budget/BudgetRepositoryInterface.php index d6df2f54c6..54433c9ace 100644 --- a/app/Repositories/Budget/BudgetRepositoryInterface.php +++ b/app/Repositories/Budget/BudgetRepositoryInterface.php @@ -156,7 +156,6 @@ interface BudgetRepositoryInterface */ public function getBudgetLimits(Budget $budget, Carbon $start = null, Carbon $end = null): Collection; - /** @noinspection MoreThanThreeArgumentsInspection */ /** * @param Collection $budgets * @param Collection $accounts @@ -167,6 +166,8 @@ interface BudgetRepositoryInterface */ public function getBudgetPeriodReport(Collection $budgets, Collection $accounts, Carbon $start, Carbon $end): array; + /** @noinspection MoreThanThreeArgumentsInspection */ + /** * @return Collection */ @@ -195,7 +196,6 @@ interface BudgetRepositoryInterface */ public function getNoBudgetPeriodReport(Collection $accounts, Carbon $start, Carbon $end): array; - /** @noinspection MoreThanThreeArgumentsInspection */ /** * @param TransactionCurrency $currency * @param Carbon $start @@ -206,6 +206,14 @@ interface BudgetRepositoryInterface */ public function setAvailableBudget(TransactionCurrency $currency, Carbon $start, Carbon $end, string $amount): AvailableBudget; + /** @noinspection MoreThanThreeArgumentsInspection */ + + /** + * @param Budget $budget + * @param int $order + */ + public function setBudgetOrder(Budget $budget, int $order): void; + /** * @param User $user */ diff --git a/app/Repositories/ExportJob/ExportJobRepository.php b/app/Repositories/ExportJob/ExportJobRepository.php index 9ffd1b11b7..735e4e45f5 100644 --- a/app/Repositories/ExportJob/ExportJobRepository.php +++ b/app/Repositories/ExportJob/ExportJobRepository.php @@ -28,8 +28,8 @@ use FireflyIII\Models\ExportJob; use FireflyIII\User; use Illuminate\Contracts\Filesystem\FileNotFoundException; use Illuminate\Support\Str; +use Illuminate\Support\Facades\Storage; use Log; -use Storage; /** * Class ExportJobRepository. @@ -74,15 +74,17 @@ class ExportJobRepository implements ExportJobRepositoryInterface ->whereIn('status', ['never_started', 'export_status_finished', 'export_downloaded']) ->get(); + $disk = Storage::disk('export'); + $files = $disk->files(); + // loop set: /** @var ExportJob $entry */ foreach ($set as $entry) { $key = $entry->key; - $files = scandir(storage_path('export'), SCANDIR_SORT_NONE); - /** @var string $file */ + /** @var array $file */ foreach ($files as $file) { - if (0 === strpos($file, $key)) { - unlink(storage_path('export') . DIRECTORY_SEPARATOR . $file); + if (0 === strpos($file['basename'], $key)) { + $disk->delete($file['path']); } } try { diff --git a/app/Repositories/ImportJob/ImportJobRepository.php b/app/Repositories/ImportJob/ImportJobRepository.php index a6d6f54e46..2a9fec1634 100644 --- a/app/Repositories/ImportJob/ImportJobRepository.php +++ b/app/Repositories/ImportJob/ImportJobRepository.php @@ -84,26 +84,36 @@ class ImportJobRepository implements ImportJobRepositoryInterface * @param array $transactions * * @return ImportJob + * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException */ public function appendTransactions(ImportJob $job, array $transactions): ImportJob { Log::debug(sprintf('Now in appendTransactions(%s)', $job->key)); - $existingTransactions = $job->transactions; - if (!\is_array($existingTransactions)) { - $existingTransactions = []; - } - $new = array_merge($existingTransactions, $transactions); + $existingTransactions = $this->getTransactions($job); + $new = array_merge($existingTransactions, $transactions); Log::debug(sprintf('Old transaction count: %d', \count($existingTransactions))); Log::debug(sprintf('To be added transaction count: %d', \count($transactions))); Log::debug(sprintf('New count: %d', \count($new))); - $job->transactions = $new; - - - $job->save(); + $this->setTransactions($job, $new); return $job; } + /** + * @param ImportJob $job + * + * @return int + */ + public function countTransactions(ImportJob $job): int + { + $info = $job->transactions ?? []; + if (isset($info['count'])) { + return (int)$info['count']; + } + + return 0; + } + /** * @param string $importProvider * @@ -201,6 +211,31 @@ class ImportJobRepository implements ImportJobRepositoryInterface return []; } + /** + * Return transactions from attachment. + * + * @param ImportJob $job + * + * @return array + * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException + */ + public function getTransactions(ImportJob $job): array + { + // this will overwrite all transactions currently in the job. + $disk = Storage::disk('upload'); + $filename = sprintf('%s-%s.crypt.json', $job->created_at->format('Ymd'), $job->key); + $array = []; + if ($disk->exists($filename)) { + $json = Crypt::decrypt($disk->get($filename)); + $array = json_decode($json, true); + } + if (false === $array) { + $array = []; + } + + return $array; + } + /** * @param ImportJob $job * @param array $configuration @@ -272,8 +307,17 @@ class ImportJobRepository implements ImportJobRepositoryInterface */ public function setTransactions(ImportJob $job, array $transactions): ImportJob { - $job->transactions = $transactions; + // this will overwrite all transactions currently in the job. + $disk = Storage::disk('upload'); + $filename = sprintf('%s-%s.crypt.json', $job->created_at->format('Ymd'), $job->key); + $json = Crypt::encrypt(json_encode($transactions)); + + // set count for easy access + $array = ['count' => \count($transactions)]; + $job->transactions = $array; $job->save(); + // store file. + $disk->put($filename, $json); return $job; } @@ -377,7 +421,7 @@ class ImportJobRepository implements ImportJobRepositoryInterface $fileObject->rewind(); - if(0 === $file->getSize()) { + if (0 === $file->getSize()) { throw new FireflyException('Cannot upload empty or non-existent file.'); } @@ -390,7 +434,6 @@ class ImportJobRepository implements ImportJobRepositoryInterface return new MessageBag; } - /** * @codeCoverageIgnore * diff --git a/app/Repositories/ImportJob/ImportJobRepositoryInterface.php b/app/Repositories/ImportJob/ImportJobRepositoryInterface.php index f63fd236bc..ad621010f1 100644 --- a/app/Repositories/ImportJob/ImportJobRepositoryInterface.php +++ b/app/Repositories/ImportJob/ImportJobRepositoryInterface.php @@ -35,6 +35,7 @@ use Symfony\Component\HttpFoundation\File\UploadedFile; */ interface ImportJobRepositoryInterface { + /** * Add message to job. * @@ -55,6 +56,13 @@ interface ImportJobRepositoryInterface */ public function appendTransactions(ImportJob $job, array $transactions): ImportJob; + /** + * @param ImportJob $job + * + * @return int + */ + public function countTransactions(ImportJob $job): int; + /** * @param string $importProvider * @@ -96,6 +104,15 @@ interface ImportJobRepositoryInterface */ public function getExtendedStatus(ImportJob $job): array; + /** + * Return transactions from attachment. + * + * @param ImportJob $job + * + * @return array + */ + public function getTransactions(ImportJob $job): array; + /** * @param ImportJob $job * @param array $configuration diff --git a/app/Repositories/Journal/JournalRepository.php b/app/Repositories/Journal/JournalRepository.php index 4250739b81..0b42bdfb3d 100644 --- a/app/Repositories/Journal/JournalRepository.php +++ b/app/Repositories/Journal/JournalRepository.php @@ -27,6 +27,9 @@ use Exception; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Factory\TransactionJournalFactory; use FireflyIII\Factory\TransactionJournalMetaFactory; +use FireflyIII\Helpers\Collector\TransactionCollectorInterface; +use FireflyIII\Helpers\Filter\InternalTransferFilter; +use FireflyIII\Helpers\Filter\TransferFilter; use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; use FireflyIII\Models\PiggyBankEvent; @@ -581,14 +584,23 @@ class JournalRepository implements JournalRepositoryInterface */ public function getTransactionsById(array $transactionIds): Collection { - $set = Transaction::leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->whereIn('transactions.id', $transactionIds) - ->where('transaction_journals.user_id', $this->user->id) - ->whereNull('transaction_journals.deleted_at') - ->whereNull('transactions.deleted_at') - ->get(['transactions.*']); + $journalIds = Transaction::whereIn('id', $transactionIds)->get(['transaction_journal_id'])->pluck('transaction_journal_id')->toArray(); + $journals = new Collection; + foreach($journalIds as $journalId) { + $result = $this->findNull((int)$journalId); + if(null !== $result) { + $journals->push($result); + } + } + /** @var TransactionCollectorInterface $collector */ + $collector = app(TransactionCollectorInterface::class); + $collector->setUser($this->user); + $collector->setAllAssetAccounts(); + $collector->removeFilter(InternalTransferFilter::class); + //$collector->addFilter(TransferFilter::class); - return $set; + $collector->setJournals($journals)->withOpposingAccount(); + return $collector->getTransactions(); } /** diff --git a/app/Repositories/Tag/TagRepository.php b/app/Repositories/Tag/TagRepository.php index 928bd97b0f..3a9b261bfd 100644 --- a/app/Repositories/Tag/TagRepository.php +++ b/app/Repositories/Tag/TagRepository.php @@ -92,6 +92,23 @@ class TagRepository implements TagRepositoryInterface return (string)$set->sum('transaction_amount'); } + /** + * @param Tag $tag + * @param Carbon $start + * @param Carbon $end + * + * @return Collection + */ + public function expenseInPeriod(Tag $tag, Carbon $start, Carbon $end): Collection + { + /** @var TransactionCollectorInterface $collector */ + $collector = app(TransactionCollectorInterface::class); + $collector->setUser($this->user); + $collector->setRange($start, $end)->setTypes([TransactionType::WITHDRAWAL])->setAllAssetAccounts()->setTag($tag); + + return $collector->getTransactions(); + } + /** * @param string $tag * @@ -151,6 +168,23 @@ class TagRepository implements TagRepositoryInterface return $tags; } + /** + * @param Tag $tag + * @param Carbon $start + * @param Carbon $end + * + * @return Collection + */ + public function incomeInPeriod(Tag $tag, Carbon $start, Carbon $end): Collection + { + /** @var TransactionCollectorInterface $collector */ + $collector = app(TransactionCollectorInterface::class); + $collector->setUser($this->user); + $collector->setRange($start, $end)->setTypes([TransactionType::DEPOSIT])->setAllAssetAccounts()->setTag($tag); + + return $collector->getTransactions(); + } + /** * @param Tag $tag * @@ -315,6 +349,23 @@ class TagRepository implements TagRepositoryInterface return $return; } + /** + * @param Tag $tag + * @param Carbon $start + * @param Carbon $end + * + * @return Collection + */ + public function transferredInPeriod(Tag $tag, Carbon $start, Carbon $end): Collection + { + /** @var TransactionCollectorInterface $collector */ + $collector = app(TransactionCollectorInterface::class); + $collector->setUser($this->user); + $collector->setRange($start, $end)->setTypes([TransactionType::TRANSFER])->setAllAssetAccounts()->setTag($tag); + + return $collector->getTransactions(); + } + /** * @param Tag $tag * @param array $data diff --git a/app/Repositories/Tag/TagRepositoryInterface.php b/app/Repositories/Tag/TagRepositoryInterface.php index bedfef3cb7..223b61e22c 100644 --- a/app/Repositories/Tag/TagRepositoryInterface.php +++ b/app/Repositories/Tag/TagRepositoryInterface.php @@ -55,6 +55,15 @@ interface TagRepositoryInterface */ public function earnedInPeriod(Tag $tag, Carbon $start, Carbon $end): string; + /** + * @param Tag $tag + * @param Carbon $start + * @param Carbon $end + * + * @return Collection + */ + public function expenseInPeriod(Tag $tag, Carbon $start, Carbon $end): Collection; + /** * @param string $tag * @@ -83,6 +92,15 @@ interface TagRepositoryInterface */ public function get(): Collection; + /** + * @param Tag $tag + * @param Carbon $start + * @param Carbon $end + * + * @return Collection + */ + public function incomeInPeriod(Tag $tag, Carbon $start, Carbon $end): Collection; + /** * @param Tag $tag * @@ -147,6 +165,15 @@ interface TagRepositoryInterface */ public function tagCloud(?int $year): array; + /** + * @param Tag $tag + * @param Carbon $start + * @param Carbon $end + * + * @return Collection + */ + public function transferredInPeriod(Tag $tag, Carbon $start, Carbon $end): Collection; + /** * Update a tag. * diff --git a/app/Rules/ZeroOrMore.php b/app/Rules/ZeroOrMore.php new file mode 100644 index 0000000000..07e1d8c46b --- /dev/null +++ b/app/Rules/ZeroOrMore.php @@ -0,0 +1,45 @@ + 0) { + return false; + } + + return true; + } +} diff --git a/app/Services/Internal/Destroy/AccountDestroyService.php b/app/Services/Internal/Destroy/AccountDestroyService.php index cec7a802b3..a747cbd7fc 100644 --- a/app/Services/Internal/Destroy/AccountDestroyService.php +++ b/app/Services/Internal/Destroy/AccountDestroyService.php @@ -26,6 +26,7 @@ namespace FireflyIII\Services\Internal\Destroy; use DB; use Exception; use FireflyIII\Models\Account; +use FireflyIII\Models\PiggyBank; use FireflyIII\Models\RecurrenceTransaction; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; @@ -97,6 +98,9 @@ class AccountDestroyService } } + // delete piggy banks: + PiggyBank::where('account_id', $account->id)->delete(); + try { $account->delete(); } catch (Exception $e) { // @codeCoverageIgnore diff --git a/app/Services/Internal/File/EncryptService.php b/app/Services/Internal/File/EncryptService.php index 5380efcd83..50558c8586 100644 --- a/app/Services/Internal/File/EncryptService.php +++ b/app/Services/Internal/File/EncryptService.php @@ -26,6 +26,7 @@ namespace FireflyIII\Services\Internal\File; use Crypt; use FireflyIII\Exceptions\FireflyException; use Illuminate\Contracts\Encryption\EncryptException; +use Illuminate\Support\Facades\Storage; use Log; /** @@ -63,9 +64,8 @@ class EncryptService throw new FireflyException($message); } $newName = sprintf('%s.upload', $key); - $path = storage_path('upload') . '/' . $newName; - - file_put_contents($path, $content); + $disk = Storage::disk('upload'); + $disk->put($newName, $content); } } diff --git a/app/Services/Internal/Support/AccountServiceTrait.php b/app/Services/Internal/Support/AccountServiceTrait.php index 8d0c087605..d58661fda4 100644 --- a/app/Services/Internal/Support/AccountServiceTrait.php +++ b/app/Services/Internal/Support/AccountServiceTrait.php @@ -217,13 +217,13 @@ trait AccountServiceTrait */ public function storeOpposingAccount(User $user, string $name): Account { - $name .= ' initial balance'; + $opposingAccountName = (string)trans('firefly.initial_balance_account', ['name' => $name]); Log::debug('Going to create an opening balance opposing account.'); /** @var AccountFactory $factory */ $factory = app(AccountFactory::class); $factory->setUser($user); - - return $factory->findOrCreate($name, AccountType::INITIAL_BALANCE); + + return $factory->findOrCreate($opposingAccountName, AccountType::INITIAL_BALANCE); } /** diff --git a/app/Support/Binder/CLIToken.php b/app/Support/Binder/CLIToken.php index faeb5aef34..62a750f4bf 100644 --- a/app/Support/Binder/CLIToken.php +++ b/app/Support/Binder/CLIToken.php @@ -51,7 +51,7 @@ class CLIToken implements BinderInterface foreach ($users as $user) { $accessToken = app('preferences')->getForUser($user, 'access_token', null); - if ($accessToken->data === $value) { + if(null !== $accessToken && $accessToken->data === $value) { Log::info(sprintf('Recognized user #%d (%s) from his acccess token.', $user->id, $user->email)); return $value; diff --git a/app/Support/FinTS/FinTS.php b/app/Support/FinTS/FinTS.php new file mode 100644 index 0000000000..1b1d1afadb --- /dev/null +++ b/app/Support/FinTS/FinTS.php @@ -0,0 +1,121 @@ +. + */ +declare(strict_types=1); + +namespace FireflyIII\Support\FinTS; + +use Fhp\Model\SEPAAccount; +use FireflyIII\Exceptions\FireflyException; +use Illuminate\Support\Facades\Crypt; + +/** + * + * Class FinTS + */ +class FinTS +{ + /** @var \Fhp\FinTs */ + private $finTS; + + /** + * @param array $config + * + * @throws FireflyException + */ + public function __construct(array $config) + { + if (!isset($config['fints_url'], $config['fints_port'], $config['fints_bank_code'], $config['fints_username'], $config['fints_password'])) { + throw new FireflyException('Constructed FinTS with incomplete config.'); + } + $this->finTS = new \Fhp\FinTs( + $config['fints_url'], + $config['fints_port'], + $config['fints_bank_code'], + $config['fints_username'], + Crypt::decrypt($config['fints_password']) + ); + } + + /** + * @return bool|string + */ + public function checkConnection() + { + try { + $this->finTS->getSEPAAccounts(); + + return true; + } catch (\Exception $exception) { + return $exception->getMessage(); + } + } + + /** + * @param string $accountNumber + * + * @return SEPAAccount + * @throws FireflyException + */ + public function getAccount(string $accountNumber) + { + $accounts = $this->getAccounts(); + $filteredAccounts = array_filter( + $accounts, function (SEPAAccount $account) use ($accountNumber) { + return $account->getAccountNumber() === $accountNumber; + } + ); + if (count($filteredAccounts) != 1) { + throw new FireflyException("Cannot find account with number " . $accountNumber); + } + + return reset($filteredAccounts); + } + + /** + * @return SEPAAccount[] + * @throws FireflyException + */ + public function getAccounts() + { + try { + return $this->finTS->getSEPAAccounts(); + } catch (\Exception $exception) { + throw new FireflyException($exception->getMessage()); + } + } + + /** + * @param SEPAAccount $account + * @param \DateTime $from + * @param \DateTIme $to + * + * @return \Fhp\Model\StatementOfAccount\StatementOfAccount|null + * @throws FireflyException + */ + public function getStatementOfAccount(SEPAAccount $account, \DateTime $from, \DateTIme $to) + { + try { + return $this->finTS->getStatementOfAccount($account, $from, $to); + } catch (\Exception $exception) { + throw new FireflyException($exception->getMessage()); + } + } +} \ No newline at end of file diff --git a/app/Support/FinTS/MetadataParser.php b/app/Support/FinTS/MetadataParser.php new file mode 100644 index 0000000000..73f17405a2 --- /dev/null +++ b/app/Support/FinTS/MetadataParser.php @@ -0,0 +1,49 @@ +. + */ +declare(strict_types=1); + +namespace FireflyIII\Support\FinTS; + +use Fhp\Model\StatementOfAccount\Transaction as FinTSTransaction; + +/** + * + * Class MetadataParser + */ +class MetadataParser +{ + /** + * @param FinTSTransaction $transaction + * + * @return string + */ + public function getDescription(FinTSTransaction $transaction): string + { + //Given a description like 'EREF+AbcCRED+DE123SVWZ+DefABWA+Ghi' or 'EREF+AbcCRED+DE123SVWZ+Def' return 'Def' + $finTSDescription = $transaction->getDescription1(); + $matches = []; + if (1 === preg_match('/SVWZ\+([^\+]*)([A-Z]{4}\+|$)/', $finTSDescription, $matches)) { + return $matches[1]; + } + + return $finTSDescription; + } +} \ No newline at end of file diff --git a/app/Support/Http/Controllers/PeriodOverview.php b/app/Support/Http/Controllers/PeriodOverview.php index 93e302af63..5d92acdbf9 100644 --- a/app/Support/Http/Controllers/PeriodOverview.php +++ b/app/Support/Http/Controllers/PeriodOverview.php @@ -60,12 +60,14 @@ trait PeriodOverview * and for each period, the amount of money spent and earned. This is a complex operation which is cached for * performance reasons. * - * @param Account $account the account involved - * @param Carbon $date + * The method has been refactored recently for better performance. + * + * @param Account $account The account involved + * @param Carbon $date The start date. * * @return Collection */ - protected function getAccountPeriodOverview(Account $account, Carbon $date): Collection // period overview + protected function getAccountPeriodOverview(Account $account, Carbon $date): Collection { /** @var AccountRepositoryInterface $repository */ $repository = app(AccountRepositoryInterface::class); @@ -95,15 +97,15 @@ trait PeriodOverview $collector = app(TransactionCollectorInterface::class); $collector->setAccounts(new Collection([$account]))->setRange($currentDate['start'], $currentDate['end'])->setTypes([TransactionType::DEPOSIT]) ->withOpposingAccount(); - $set = $collector->getTransactions(); - $earned = $this->groupByCurrency($set); + $earnedSet = $collector->getTransactions(); + $earned = $this->groupByCurrency($earnedSet); /** @var TransactionCollectorInterface $collector */ $collector = app(TransactionCollectorInterface::class); $collector->setAccounts(new Collection([$account]))->setRange($currentDate['start'], $currentDate['end'])->setTypes([TransactionType::WITHDRAWAL]) ->withOpposingAccount(); - $set = $collector->getTransactions(); - $spent = $this->groupByCurrency($set); + $spentSet = $collector->getTransactions(); + $spent = $this->groupByCurrency($spentSet); $title = app('navigation')->periodShow($currentDate['start'], $currentDate['period']); /** @noinspection PhpUndefinedMethodInspection */ @@ -115,7 +117,6 @@ trait PeriodOverview 'earned' => $earned, 'transferred' => '0', 'route' => route('accounts.show', [$account->id, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), - ] ); } @@ -126,11 +127,84 @@ trait PeriodOverview } /** - * Gets period overview used for budgets. + * Overview for single category. Has been refactored recently. + * + * @param Category $category + * @param Carbon $date * * @return Collection */ - protected function getBudgetPeriodOverview(Carbon $date): Collection + protected function getCategoryPeriodOverview(Category $category, Carbon $date): Collection + { + /** @var JournalRepositoryInterface $journalRepository */ + $journalRepository = app(JournalRepositoryInterface::class); + $range = app('preferences')->get('viewRange', '1M')->data; + $first = $journalRepository->firstNull(); + $end = null === $first ? new Carbon : $first->date; + $start = clone $date; + + if ($end < $start) { + [$start, $end] = [$end, $start]; // @codeCoverageIgnore + } + + // properties for entries with their amounts. + $cache = new CacheProperties(); + $cache->addProperty($start); + $cache->addProperty($end); + $cache->addProperty($range); + $cache->addProperty('category-show-period-entries'); + $cache->addProperty($category->id); + + if ($cache->has()) { + return $cache->get(); // @codeCoverageIgnore + } + /** @var array $dates */ + $dates = app('navigation')->blockPeriods($start, $end, $range); + $entries = new Collection; + /** @var CategoryRepositoryInterface $categoryRepository */ + $categoryRepository = app(CategoryRepositoryInterface::class); + + foreach ($dates as $currentDate) { + $spent = $categoryRepository->spentInPeriodCollection(new Collection([$category]), new Collection, $currentDate['start'], $currentDate['end']); + $earned = $categoryRepository->earnedInPeriodCollection(new Collection([$category]), new Collection, $currentDate['start'], $currentDate['end']); + $spent = $this->groupByCurrency($spent); + $earned = $this->groupByCurrency($earned); + + // amount transferred + /** @var TransactionCollectorInterface $collector */ + $collector = app(TransactionCollectorInterface::class); + $collector->setAllAssetAccounts()->setRange($currentDate['start'], $currentDate['end'])->setCategory($category) + ->withOpposingAccount()->setTypes([TransactionType::TRANSFER]); + $collector->removeFilter(InternalTransferFilter::class); + $transferred = $this->groupByCurrency($collector->getTransactions()); + + $title = app('navigation')->periodShow($currentDate['end'], $currentDate['period']); + $entries->push( + [ + 'transactions' => 0, + 'title' => $title, + 'spent' => $spent, + 'earned' => $earned, + 'transferred' => $transferred, + 'route' => route('categories.show', [$category->id, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), + ] + ); + } + $cache->store($entries); + + return $entries; + } + + /** + * Same as above, but for lists that involve transactions without a budget. + * + * This method has been refactored recently. + * + * @param Carbon $date + * + * @return Collection + */ + protected function getNoBudgetPeriodOverview(Carbon $date): Collection { /** @var JournalRepositoryInterface $repository */ $repository = app(JournalRepositoryInterface::class); @@ -138,8 +212,12 @@ trait PeriodOverview $end = null === $first ? new Carbon : $first->date; $start = clone $date; $range = app('preferences')->get('viewRange', '1M')->data; - $entries = new Collection; - $cache = new CacheProperties; + + if ($end < $start) { + [$start, $end] = [$end, $start]; // @codeCoverageIgnore + } + + $cache = new CacheProperties; $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('no-budget-period-entries'); @@ -149,7 +227,8 @@ trait PeriodOverview } /** @var array $dates */ - $dates = app('navigation')->blockPeriods($start, $end, $range); + $dates = app('navigation')->blockPeriods($start, $end, $range); + $entries = new Collection; foreach ($dates as $currentDate) { /** @var TransactionCollectorInterface $collector */ $collector = app(TransactionCollectorInterface::class); @@ -162,12 +241,12 @@ trait PeriodOverview $title = app('navigation')->periodShow($currentDate['end'], $currentDate['period']); $entries->push( [ - 'route' => route('budgets.no-budget', [$currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), 'transactions' => $count, 'title' => $title, 'spent' => $spent, 'earned' => '0', 'transferred' => '0', + 'route' => route('budgets.no-budget', [$currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), ] ); } @@ -177,133 +256,70 @@ trait PeriodOverview } /** - * Get a period overview for category. - * - * TODO refactor me. - * - * @param Category $category - * @param Carbon $date - * - * @return Collection - */ - protected function getCategoryPeriodOverview(Category $category, Carbon $date): Collection // periodOverview method - { - /** @var JournalRepositoryInterface $journalRepository */ - $journalRepository = app(JournalRepositoryInterface::class); - /** @var CategoryRepositoryInterface $categoryRepository */ - $categoryRepository = app(CategoryRepositoryInterface::class); - - - $range = app('preferences')->get('viewRange', '1M')->data; - $first = $journalRepository->firstNull(); - $end = null === $first ? new Carbon : $first->date; - $start = clone $date; - - // properties for entries with their amounts. - $cache = new CacheProperties(); - $cache->addProperty($start); - $cache->addProperty($end); - $cache->addProperty($range); - $cache->addProperty('categories.entries'); - $cache->addProperty($category->id); - - if ($cache->has()) { - //return $cache->get(); // @codeCoverageIgnore - } - /** @var array $dates */ - $dates = app('navigation')->blockPeriods($start, $end, $range); - $entries = new Collection; - - foreach ($dates as $currentDate) { - $spent = $categoryRepository->spentInPeriodCollection(new Collection([$category]), new Collection, $currentDate['start'], $currentDate['end']); - $earned = $categoryRepository->earnedInPeriodCollection(new Collection([$category]), new Collection, $currentDate['start'], $currentDate['end']); - $spent = $this->groupByCurrency($spent); - $earned = $this->groupByCurrency($earned); - // amount transferred - /** @var TransactionCollectorInterface $collector */ - $collector = app(TransactionCollectorInterface::class); - $collector->setAllAssetAccounts()->setRange($currentDate['start'], $currentDate['end'])->setCategory($category) - ->withOpposingAccount()->setTypes([TransactionType::TRANSFER]); - $collector->removeFilter(InternalTransferFilter::class); - $transferred = $this->groupByCurrency($collector->getTransactions()); - $title = app('navigation')->periodShow($currentDate['end'], $currentDate['period']); - $entries->push( - [ - 'route' => route('categories.show', [$category->id, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), - 'title' => $title, - 'spent' => $spent, - 'earned' => $earned, - 'transferred' => $transferred, - ] - ); - } - $cache->store($entries); - - return $entries; - } - - /** - * Get overview of periods for tag. - * - * TODO refactor this. + * This shows a period overview for a tag. It goes back in time and lists all relevant transactions and sums. * * @param Tag $tag * * @return Collection */ - protected function getTagPeriodOverview(Tag $tag): Collection // period overview for tags. + protected function getTagPeriodOverview(Tag $tag, Carbon $date): Collection // period overview for tags. { /** @var TagRepositoryInterface $repository */ $repository = app(TagRepositoryInterface::class); - // get first and last tag date from tag: - $range = app('preferences')->get('viewRange', '1M')->data; + $range = app('preferences')->get('viewRange', '1M')->data; /** @var Carbon $end */ - $end = app('navigation')->endOfX($repository->lastUseDate($tag) ?? new Carbon, $range, null); - $start = $repository->firstUseDate($tag) ?? new Carbon; + $start = clone $date; + $end = $repository->firstUseDate($tag) ?? new Carbon; + if ($end < $start) { + [$start, $end] = [$end, $start]; // @codeCoverageIgnore + } + // properties for entries with their amounts. $cache = new CacheProperties; $cache->addProperty($start); $cache->addProperty($end); - $cache->addProperty('tag.entries'); + $cache->addProperty('tag-period-entries'); $cache->addProperty($tag->id); if ($cache->has()) { return $cache->get(); // @codeCoverageIgnore } - $collection = new Collection; - $currentEnd = clone $end; + /** @var array $dates */ + $dates = app('navigation')->blockPeriods($start, $end, $range); + $entries = new Collection; // while end larger or equal to start - while ($currentEnd >= $start) { - $currentStart = app('navigation')->startOfPeriod($currentEnd, $range); + foreach ($dates as $currentDate) { - // get expenses and what-not in this period and this tag. - $arr = [ - 'string' => $end->format('Y-m-d'), - 'name' => app('navigation')->periodShow($currentEnd, $range), - 'start' => clone $currentStart, - 'end' => clone $currentEnd, - 'date' => clone $end, - 'spent' => $repository->spentInPeriod($tag, $currentStart, $currentEnd), - 'earned' => $repository->earnedInPeriod($tag, $currentStart, $currentEnd), - ]; - $collection->push($arr); + $spentSet = $repository->expenseInPeriod($tag, $currentDate['start'], $currentDate['end']); + $spent = $this->groupByCurrency($spentSet); + $earnedSet = $repository->incomeInPeriod($tag, $currentDate['start'], $currentDate['end']); + $earned = $this->groupByCurrency($earnedSet); + $transferredSet = $repository->transferredInPeriod($tag, $currentDate['start'], $currentDate['end']); + $transferred = $this->groupByCurrency($transferredSet); + $title = app('navigation')->periodShow($currentDate['end'], $currentDate['period']); + + $entries->push( + [ + 'transactions' => $spentSet->count() + $earnedSet->count() + $transferredSet->count(), + 'title' => $title, + 'spent' => $spent, + 'earned' => $earned, + 'transferred' => $transferred, + 'route' => route('tags.show', [$tag->id, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), + ] + ); - /** @var Carbon $currentEnd */ - $currentEnd = clone $currentStart; - $currentEnd->subDay(); } - $cache->store($collection); + $cache->store($entries); - return $collection; + return $entries; } /** - * Get period overview for index. - * - * TODO refactor me. + * This list shows the overview of a type of transaction, for the period blocks on the list of transactions. * * @param string $what * @param Carbon $date @@ -315,42 +331,60 @@ trait PeriodOverview /** @var JournalRepositoryInterface $repository */ $repository = app(JournalRepositoryInterface::class); $range = app('preferences')->get('viewRange', '1M')->data; - $first = $repository->firstNull(); - $start = Carbon::now()->subYear(); + $endJournal = $repository->firstNull(); + $end = null === $endJournal ? new Carbon : $endJournal->date; + $start = clone $date; $types = config('firefly.transactionTypesByWhat.' . $what); - $entries = new Collection; - if (null !== $first) { - $start = $first->date; - } - if ($date < $start) { - [$start, $date] = [$date, $start]; // @codeCoverageIgnore + + + if ($end < $start) { + [$start, $end] = [$end, $start]; // @codeCoverageIgnore } + // properties for entries with their amounts. + $cache = new CacheProperties; + $cache->addProperty($start); + $cache->addProperty($end); + $cache->addProperty('transactions-period-entries'); + $cache->addProperty($what); + + /** @var array $dates */ - $dates = app('navigation')->blockPeriods($start, $date, $range); + $dates = app('navigation')->blockPeriods($start, $end, $range); + $entries = new Collection; foreach ($dates as $currentDate) { + + // get all expenses, income or transfers: /** @var TransactionCollectorInterface $collector */ $collector = app(TransactionCollectorInterface::class); $collector->setAllAssetAccounts()->setRange($currentDate['start'], $currentDate['end'])->withOpposingAccount()->setTypes($types); $collector->removeFilter(InternalTransferFilter::class); $transactions = $collector->getTransactions(); - - if ($transactions->count() > 0) { - $sums = $this->sumPerCurrency($transactions); - $dateName = app('navigation')->periodShow($currentDate['start'], $currentDate['period']); - $sum = $transactions->sum('transaction_amount'); - /** @noinspection PhpUndefinedMethodInspection */ - $entries->push( - [ - 'name' => $dateName, - 'sums' => $sums, - 'sum' => $sum, - 'start' => $currentDate['start']->format('Y-m-d'), - 'end' => $currentDate['end']->format('Y-m-d'), - ] - ); + $title = app('navigation')->periodShow($currentDate['end'], $currentDate['period']); + $grouped = $this->groupByCurrency($transactions); + $spent = []; + $earned = []; + $transferred = []; + if ('expenses' === $what || 'withdrawal' === $what) { + $spent = $grouped; } + if ('revenue' === $what || 'deposit' === $what) { + $earned = $grouped; + } + if ('transfer' === $what || 'transfers' === $what) { + $transferred = $grouped; + } + $entries->push( + [ + 'transactions' => $transactions->count(), + 'title' => $title, + 'spent' => $spent, + 'earned' => $earned, + 'transferred' => $transferred, + 'route' => route('transactions.index', [$what, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), + ] + ); } return $entries; diff --git a/app/Support/Http/Controllers/UserNavigation.php b/app/Support/Http/Controllers/UserNavigation.php index f6bcd2ddf3..3119328c52 100644 --- a/app/Support/Http/Controllers/UserNavigation.php +++ b/app/Support/Http/Controllers/UserNavigation.php @@ -28,6 +28,7 @@ use FireflyIII\Models\AccountType; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use Illuminate\Http\RedirectResponse; +use Illuminate\Support\ViewErrorBag; use Log; use URL; @@ -141,6 +142,10 @@ trait UserNavigation */ protected function rememberPreviousUri(string $identifier): void { - session()->put($identifier, URL::previous()); + /** @var ViewErrorBag $errors */ + $errors = session()->get('errors'); + if(null === $errors || (null !== $errors && 0=== $errors->count())) { + session()->put($identifier, URL::previous()); + } } } \ No newline at end of file diff --git a/app/Support/Import/JobConfiguration/FinTS/ChooseAccountHandler.php b/app/Support/Import/JobConfiguration/FinTS/ChooseAccountHandler.php new file mode 100644 index 0000000000..7f3ce9a511 --- /dev/null +++ b/app/Support/Import/JobConfiguration/FinTS/ChooseAccountHandler.php @@ -0,0 +1,123 @@ +. + */ +declare(strict_types=1); + +namespace FireflyIII\Support\Import\JobConfiguration\FinTS; + + +use Carbon\Carbon; +use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Import\JobConfiguration\FinTSConfigurationSteps; +use FireflyIII\Models\AccountType; +use FireflyIII\Models\ImportJob; +use FireflyIII\Repositories\Account\AccountRepositoryInterface; +use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface; +use FireflyIII\Support\FinTS\FinTS; +use Illuminate\Support\MessageBag; + +/** + * + * Class ChooseAccountHandler + */ +class ChooseAccountHandler implements FinTSConfigurationInterface +{ + /** @var AccountRepositoryInterface */ + private $accountRepository; + /** @var ImportJob */ + private $importJob; + /** @var ImportJobRepositoryInterface */ + private $repository; + + /** + * Store data associated with current stage. + * + * @param array $data + * + * @return MessageBag + */ + public function configureJob(array $data): MessageBag + { + $config = $this->repository->getConfiguration($this->importJob); + $config['fints_account'] = (string)($data['fints_account'] ?? ''); + $config['local_account'] = (string)($data['local_account'] ?? ''); + $config['from_date'] = (string)($data['from_date'] ?? ''); + $config['to_date'] = (string)($data['to_date'] ?? ''); + $this->repository->setConfiguration($this->importJob, $config); + + try { + $finTS = app(FinTS::class, ['config' => $config]); + $finTS->getAccount($config['fints_account']); + } catch (FireflyException $e) { + return new MessageBag([$e->getMessage()]); + } + + $this->repository->setStage($this->importJob, FinTSConfigurationSteps::GO_FOR_IMPORT); + + return new MessageBag(); + } + + /** + * Get the data necessary to show the configuration screen. + * + * @return array + * @throws \FireflyIII\Exceptions\FireflyException + */ + public function getNextData(): array + { + $finTS = app(FinTS::class, ['config' => $this->importJob->configuration]); + $finTSAccounts = $finTS->getAccounts(); + $finTSAccountsData = []; + foreach ($finTSAccounts as $account) { + $finTSAccountsData[$account->getAccountNumber()] = $account->getIban(); + } + + $localAccounts = []; + foreach ($this->accountRepository->getAccountsByType([AccountType::ASSET]) as $localAccount) { + $display_name = $localAccount->name; + if ($localAccount->iban) { + $display_name .= sprintf(' - %s', $localAccount->iban); + } + $localAccounts[$localAccount->id] = $display_name; + } + + $data = [ + 'fints_accounts' => $finTSAccountsData, + 'fints_account' => $this->importJob->configuration['fints_account'] ?? null, + 'local_accounts' => $localAccounts, + 'local_account' => $this->importJob->configuration['local_account'] ?? null, + 'from_date' => $this->importJob->configuration['from_date'] ?? (new Carbon('now - 1 month'))->format('Y-m-d'), + 'to_date' => $this->importJob->configuration['to_date'] ?? (new Carbon('now'))->format('Y-m-d'), + ]; + + return $data; + } + + /** + * @param ImportJob $importJob + */ + public function setImportJob(ImportJob $importJob): void + { + $this->importJob = $importJob; + $this->repository = app(ImportJobRepositoryInterface::class); + $this->accountRepository = app(AccountRepositoryInterface::class); + $this->repository->setUser($importJob->user); + } +} \ No newline at end of file diff --git a/app/Support/Import/JobConfiguration/FinTS/FinTSConfigurationInterface.php b/app/Support/Import/JobConfiguration/FinTS/FinTSConfigurationInterface.php new file mode 100644 index 0000000000..81bfd45c8c --- /dev/null +++ b/app/Support/Import/JobConfiguration/FinTS/FinTSConfigurationInterface.php @@ -0,0 +1,53 @@ +. + */ +declare(strict_types=1); + +namespace FireflyIII\Support\Import\JobConfiguration\FinTS; + +use FireflyIII\Models\ImportJob; +use Illuminate\Support\MessageBag; + +/** + * + */ +interface FinTSConfigurationInterface +{ + /** + * Store data associated with current stage. + * + * @param array $data + * + * @return MessageBag + */ + public function configureJob(array $data): MessageBag; + + /** + * Get the data necessary to show the configuration screen. + * + * @return array + */ + public function getNextData(): array; + + /** + * @param ImportJob $importJob + */ + public function setImportJob(ImportJob $importJob): void; +} \ No newline at end of file diff --git a/app/Support/Import/JobConfiguration/FinTS/NewFinTSJobHandler.php b/app/Support/Import/JobConfiguration/FinTS/NewFinTSJobHandler.php new file mode 100644 index 0000000000..b3f30a6da9 --- /dev/null +++ b/app/Support/Import/JobConfiguration/FinTS/NewFinTSJobHandler.php @@ -0,0 +1,110 @@ +. + */ +declare(strict_types=1); + + +namespace FireflyIII\Support\Import\JobConfiguration\FinTS; + + +use FireflyIII\Import\JobConfiguration\FinTSConfigurationSteps; +use FireflyIII\Models\ImportJob; +use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface; +use FireflyIII\Support\FinTS\FinTS; +use Illuminate\Support\Facades\Crypt; +use Illuminate\Support\MessageBag; + +/** + * + * Class NewFinTSJobHandler + */ +class NewFinTSJobHandler implements FinTSConfigurationInterface +{ + /** @var ImportJob */ + private $importJob; + /** @var ImportJobRepositoryInterface */ + private $repository; + + /** + * Store data associated with current stage. + * + * @param array $data + * + * @return MessageBag + * @throws \FireflyIII\Exceptions\FireflyException + */ + public function configureJob(array $data): MessageBag + { + $config = []; + + $config['fints_url'] = trim($data['fints_url'] ?? ''); + $config['fints_port'] = (int)($data['fints_port'] ?? ''); + $config['fints_bank_code'] = (string)($data['fints_bank_code'] ?? ''); + $config['fints_username'] = (string)($data['fints_username'] ?? ''); + $config['fints_password'] = (string)(Crypt::encrypt($data['fints_password']) ?? ''); + + $this->repository->setConfiguration($this->importJob, $config); + + $incomplete = false; + foreach ($config as $value) { + $incomplete = '' === $value or $incomplete; + } + if ($incomplete) { + return new MessageBag([trans('import.incomplete_fints_form')]); + } + + $finTS = app(FinTS::class, ['config' => $this->importJob->configuration]); + if (true !== ($checkConnection = $finTS->checkConnection())) { + return new MessageBag([trans('import.fints_connection_failed', ['originalError' => $checkConnection])]); + } + + $this->repository->setStage($this->importJob, FinTSConfigurationSteps::CHOOSE_ACCOUNT); + + return new MessageBag(); + } + + /** + * Get the data necessary to show the configuration screen. + * + * @return array + */ + public function getNextData(): array + { + $config = $this->importJob->configuration; + + return [ + 'fints_url' => $config['fints_url'] ?? '', + 'fints_port' => $config['fints_port'] ?? '443', + 'fints_bank_code' => $config['fints_bank_code'] ?? '', + 'fints_username' => $config['fints_username'] ?? '', + ]; + } + + /** + * @param ImportJob $importJob + */ + public function setImportJob(ImportJob $importJob): void + { + $this->importJob = $importJob; + $this->repository = app(ImportJobRepositoryInterface::class); + $this->repository->setUser($importJob->user); + } + +} \ No newline at end of file diff --git a/app/Support/Import/Routine/Bunq/StageImportDataHandler.php b/app/Support/Import/Routine/Bunq/StageImportDataHandler.php index 2f9822b9fe..704cc0bb62 100644 --- a/app/Support/Import/Routine/Bunq/StageImportDataHandler.php +++ b/app/Support/Import/Routine/Bunq/StageImportDataHandler.php @@ -80,6 +80,14 @@ class StageImportDataHandler return $this->transactions; } + /** + * @return bool + */ + public function isStillRunning(): bool + { + return $this->stillRunning; + } + /** * * @throws FireflyException diff --git a/app/Support/Import/Routine/FinTS/StageImportDataHandler.php b/app/Support/Import/Routine/FinTS/StageImportDataHandler.php new file mode 100644 index 0000000000..16bb14fafb --- /dev/null +++ b/app/Support/Import/Routine/FinTS/StageImportDataHandler.php @@ -0,0 +1,189 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Support\Import\Routine\FinTS; + + +use Fhp\Model\StatementOfAccount\Transaction; +use Fhp\Model\StatementOfAccount\Transaction as FinTSTransaction; +use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Models\Account as LocalAccount; +use FireflyIII\Models\AccountType; +use FireflyIII\Models\ImportJob; +use FireflyIII\Models\TransactionType; +use FireflyIII\Repositories\Account\AccountRepositoryInterface; +use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface; +use FireflyIII\Support\FinTS\FinTS; +use FireflyIII\Support\FinTS\MetadataParser; +use FireflyIII\Support\Import\Routine\File\OpposingAccountMapper; +use Illuminate\Support\Facades\Log; + +/** + * + * Class StageImportDataHandler + */ +class StageImportDataHandler +{ + /** @var AccountRepositoryInterface */ + private $accountRepository; + /** @var ImportJob */ + private $importJob; + /** @var OpposingAccountMapper */ + private $mapper; + /** @var ImportJobRepositoryInterface */ + private $repository; + /** @var array */ + private $transactions; + + /** + * @return array + */ + public function getTransactions(): array + { + return $this->transactions; + } + + /** + * @throws FireflyException + */ + public function run() + { + Log::debug('Now in StageImportDataHandler::run()'); + + $localAccount = $this->accountRepository->findNull((int)$this->importJob->configuration['local_account']); + if (null === $localAccount) { + throw new FireflyException(sprintf('Cannot find Firefly account with id #%d ' , $this->importJob->configuration['local_account'])); + } + $finTS = app(FinTS::class, ['config' => $this->importJob->configuration]); + $fintTSAccount = $finTS->getAccount($this->importJob->configuration['fints_account']); + $statementOfAccount = $finTS->getStatementOfAccount( + $fintTSAccount, new \DateTime($this->importJob->configuration['from_date']), new \DateTime($this->importJob->configuration['to_date']) + ); + $collection = []; + foreach ($statementOfAccount->getStatements() as $statement) { + foreach ($statement->getTransactions() as $transaction) { + $collection[] = $this->convertTransaction($transaction, $localAccount); + } + } + + $this->transactions = $collection; + } + + /** + * @param ImportJob $importJob + * + * @return void + */ + public function setImportJob(ImportJob $importJob): void + { + $this->transactions = []; + $this->importJob = $importJob; + $this->repository = app(ImportJobRepositoryInterface::class); + $this->accountRepository = app(AccountRepositoryInterface::class); + $this->mapper = app(OpposingAccountMapper::class); + $this->mapper->setUser($importJob->user); + $this->repository->setUser($importJob->user); + $this->accountRepository->setUser($importJob->user); + } + + /** + * @param FinTSTransaction $transaction + * @param LocalAccount $source + * + * @return array + */ + private function convertTransaction(FinTSTransaction $transaction, LocalAccount $source): array + { + Log::debug(sprintf('Start converting transaction %s', $transaction->getDescription1())); + + $amount = (string)$transaction->getAmount(); + $debitOrCredit = $transaction->getCreditDebit(); + // assume deposit. + $type = TransactionType::DEPOSIT; + Log::debug(sprintf('Amount is %s', $amount)); + + // inverse if not. + if ($debitOrCredit !== Transaction::CD_CREDIT) { + $type = TransactionType::WITHDRAWAL; + $amount = bcmul($amount, '-1'); + } + + $destination = $this->mapper->map( + null, + $amount, + ['iban' => $transaction->getAccountNumber(), 'name' => $transaction->getName()] + ); + if ($debitOrCredit === Transaction::CD_CREDIT) { + [$source, $destination] = [$destination, $source]; + } + + if ($source->accountType->type === AccountType::ASSET && $destination->accountType->type === AccountType::ASSET) { + $type = TransactionType::TRANSFER; + Log::debug('Both are assets, will make transfer.'); + } + + $metadataParser = new MetadataParser(); + $description = $metadataParser->getDescription($transaction); + + $storeData = [ + 'user' => $this->importJob->user_id, + 'type' => $type, + 'date' => $transaction->getValutaDate()->format('Y-m-d'), + 'description' => $description, + 'piggy_bank_id' => null, + 'piggy_bank_name' => null, + 'bill_id' => null, + 'bill_name' => null, + 'tags' => [], + 'internal_reference' => null, + 'external_id' => null, + 'notes' => null, + 'bunq_payment_id' => null, + 'original-source' => sprintf('fints-v%s', config('firefly.version')), + 'transactions' => [ + // single transaction: + [ + 'description' => null, + 'amount' => $amount, + 'currency_id' => null, + 'currency_code' => 'EUR', + 'foreign_amount' => null, + 'foreign_currency_id' => null, + 'foreign_currency_code' => null, + 'budget_id' => null, + 'budget_name' => null, + 'category_id' => null, + 'category_name' => null, + 'source_id' => $source->id, + 'source_name' => null, + 'destination_id' => $destination->id, + 'destination_name' => null, + 'reconciled' => false, + 'identifier' => 0, + ], + ], + ]; + + return $storeData; + } +} \ No newline at end of file diff --git a/app/Support/Twig/Extension/Transaction.php b/app/Support/Twig/Extension/Transaction.php index 7e544001ab..6dcb4a8953 100644 --- a/app/Support/Twig/Extension/Transaction.php +++ b/app/Support/Twig/Extension/Transaction.php @@ -225,6 +225,7 @@ class Transaction extends Twig_Extension } $name = app('steam')->tryDecrypt($transaction->account_name); + $iban = $transaction->account_iban; $transactionId = (int)$transaction->account_id; $type = $transaction->account_type; @@ -233,6 +234,7 @@ class Transaction extends Twig_Extension $name = $transaction->opposing_account_name; $transactionId = (int)$transaction->opposing_account_id; $type = $transaction->opposing_account_type; + $iban = $transaction->opposing_account_iban; } // Find the opposing account and use that one: @@ -264,7 +266,7 @@ class Transaction extends Twig_Extension return $txt; } - $txt = sprintf('%1$s', e($name), route('accounts.show', [$transactionId])); + $txt = sprintf('%1$s', e($name), route('accounts.show', [$transactionId]), $iban); return $txt; } @@ -385,12 +387,14 @@ class Transaction extends Twig_Extension $name = app('steam')->tryDecrypt($transaction->account_name); $transactionId = (int)$transaction->account_id; $type = $transaction->account_type; + $iban = $transaction->account_iban; // name is present in object, use that one: if (null !== $transaction->opposing_account_id && 1 === bccomp($transaction->transaction_amount, '0')) { $name = $transaction->opposing_account_name; $transactionId = (int)$transaction->opposing_account_id; $type = $transaction->opposing_account_type; + $iban = $transaction->opposing_account_iban; } // Find the opposing account and use that one: if (null === $transaction->opposing_account_id && 1 === bccomp($transaction->transaction_amount, '0')) { @@ -415,7 +419,7 @@ class Transaction extends Twig_Extension return $txt; } - $txt = sprintf('%1$s', e($name), route('accounts.show', [$transactionId])); + $txt = sprintf('%1$s', e($name), route('accounts.show', [$transactionId]), $iban); return $txt; } diff --git a/app/TransactionRules/Actions/PrependDescription.php b/app/TransactionRules/Actions/PrependDescription.php index 56a355f721..23b5153402 100644 --- a/app/TransactionRules/Actions/PrependDescription.php +++ b/app/TransactionRules/Actions/PrependDescription.php @@ -27,7 +27,7 @@ use FireflyIII\Models\TransactionJournal; use Log; /** - * Class AppendDescription. + * Class PrependDescription. */ class PrependDescription implements ActionInterface { diff --git a/app/TransactionRules/Triggers/ToAccountIs.php b/app/TransactionRules/Triggers/ToAccountIs.php index 1e9a1d8051..00f7f3cfd1 100644 --- a/app/TransactionRules/Triggers/ToAccountIs.php +++ b/app/TransactionRules/Triggers/ToAccountIs.php @@ -90,7 +90,7 @@ final class ToAccountIs extends AbstractTrigger implements TriggerInterface return true; } - Log::debug(sprintf('RuleTrigger ToAccountIs for journal #%d: "%s" is NOT "%s", return true.', $journal->id, $toAccountName, $search)); + Log::debug(sprintf('RuleTrigger ToAccountIs for journal #%d: "%s" is NOT "%s", return false.', $journal->id, $toAccountName, $search)); return false; } diff --git a/app/Validation/FireflyValidator.php b/app/Validation/FireflyValidator.php index 1c62516695..cc4766ed26 100644 --- a/app/Validation/FireflyValidator.php +++ b/app/Validation/FireflyValidator.php @@ -313,10 +313,8 @@ class FireflyValidator extends Validator * * @return bool */ - public function validateRuleTriggerValue(string $attribute, string $value): bool + public function validateRuleTriggerValue(string $attribute, string $value = null): bool { - // - // first, get the index from this string: $parts = explode('.', $attribute); $index = (int)($parts[1] ?? '0'); diff --git a/bootstrap/app.php b/bootstrap/app.php index 0abe08a8d8..a2f85126e0 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -46,7 +46,7 @@ if (!function_exists('envNonEmpty')) { function envNonEmpty(string $key, $default = null) { $result = env($key, $default); - if (is_string($result) && $result === '') { + if (is_string($result) && '' === $result) { $result = $default; } diff --git a/changelog.md b/changelog.md index 2a32d471a9..4ab44325eb 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,46 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## [4.7.8] - 2018-10-28 +### Added +- [Issue 1005](https://github.com/firefly-iii/firefly-iii/issues/1005) You can now configure Firefly III to use LDAP. +- [Issue 1071](https://github.com/firefly-iii/firefly-iii/issues/1071) You can execute transaction rules using the command line (so you can cronjob it) +- [Issue 1108](https://github.com/firefly-iii/firefly-iii/issues/1108) You can now reorder budgets. +- [Issue 1159](https://github.com/firefly-iii/firefly-iii/issues/1159) The ability to import transactions from FinTS-enabled banks. +- [Issue 1727](https://github.com/firefly-iii/firefly-iii/issues/1727) You can now use SFTP as storage for uploads and exports. +- [Issue 1733](https://github.com/firefly-iii/firefly-iii/issues/1733) You can configure Firefly III not to send emails with transaction information in them. + + + +### Changed +- [Issue 1040](https://github.com/firefly-iii/firefly-iii/issues/1040) Fixed various things that would not scale properly in the past. +- [Issue 1771](https://github.com/firefly-iii/firefly-iii/issues/1771) A link to the transaction that fits the bill. +- [Issue 1800](https://github.com/firefly-iii/firefly-iii/issues/1800) Icon updated to match others. +- MySQL database connection now forces the InnoDB to be used. + +### Fixed +- [Issue 1583](https://github.com/firefly-iii/firefly-iii/issues/1583) Some times recurring transactions would not fire. +- [Issue 1607](https://github.com/firefly-iii/firefly-iii/issues/1607) Problems with the bunq API, finally solved?! (I feel like a clickbait YouTube video now) +- [Issue 1698](https://github.com/firefly-iii/firefly-iii/issues/1698) Certificate problems in the Docker container +- [Issue 1751](https://github.com/firefly-iii/firefly-iii/issues/1751) Bug in autocomplete +- [Issue 1760](https://github.com/firefly-iii/firefly-iii/issues/1760) Tag report bad math +- [Issue 1765](https://github.com/firefly-iii/firefly-iii/issues/1765) API inconsistencies for piggy banks. +- [Issue 1774](https://github.com/firefly-iii/firefly-iii/issues/1774) Integer exception in SQLite databases +- [Issue 1775](https://github.com/firefly-iii/firefly-iii/issues/1775) Heroku now supports all locales +- [Issue 1778](https://github.com/firefly-iii/firefly-iii/issues/1778) More autocomplete problems fixed +- [Issue 1747](https://github.com/firefly-iii/firefly-iii/issues/1747) Rules now stop at the right moment. +- [Issue 1781](https://github.com/firefly-iii/firefly-iii/issues/1781) Problems when creating new rules. +- [Issue 1784](https://github.com/firefly-iii/firefly-iii/issues/1784) Can now create a liability with an empty balance. +- [Issue 1785](https://github.com/firefly-iii/firefly-iii/issues/1785) Redirect error +- [Issue 1790](https://github.com/firefly-iii/firefly-iii/issues/1790) Show attachments for bills. +- [Issue 1792](https://github.com/firefly-iii/firefly-iii/issues/1792) Mention excluded accounts. +- [Issue 1798](https://github.com/firefly-iii/firefly-iii/issues/1798) Could not recreate deleted piggy banks +- [Issue 1805](https://github.com/firefly-iii/firefly-iii/issues/1805) Fixes when handling foreign currencies +- [Issue 1807](https://github.com/firefly-iii/firefly-iii/issues/1807) Also decrypt deleted records. +- [Issue 1812](https://github.com/firefly-iii/firefly-iii/issues/1812) Fix in transactions API +- [Issue 1815](https://github.com/firefly-iii/firefly-iii/issues/1815) Opening balance account name can now be translated. +- [Issue 1830](https://github.com/firefly-iii/firefly-iii/issues/1830) Multi-user in a single browser could leak autocomplete data. + ## [4.7.7] - 2018-10-01 This version of Firefly III requires PHP 7.2. I've already started using several features from 7.2. Please make sure you upgrade. diff --git a/composer.json b/composer.json index 3a22067015..69ca74589e 100644 --- a/composer.json +++ b/composer.json @@ -53,8 +53,12 @@ "ext-intl": "*", "ext-xml": "*", "ext-zip": "*", + "ext-json": "*", + "ext-ldap": "*", + "adldap2/adldap2-laravel": "^4.0", "bacon/bacon-qr-code": "1.*", "bunq/sdk_php": "dev-master#8c1faefc111d9b970168a1837ca165d854954941", + "danhunsaker/laravel-flysystem-others": "^1.3", "davejamesmiller/laravel-breadcrumbs": "5.*", "doctrine/dbal": "2.*", "fideloper/proxy": "4.*", @@ -63,7 +67,11 @@ "laravelcollective/html": "5.7.*", "league/commonmark": "0.*", "league/csv": "9.*", + "league/flysystem-replicate-adapter": "^1.0", + "league/flysystem-sftp": "^1.0", "league/fractal": "^0.17.0", + "litipk/flysystem-fallback-adapter": "0.1.2", + "mschindler83/fints-hbci-php": "^1.0", "pragmarx/google2fa": "3.*", "pragmarx/google2fa-laravel": "0.*", "rcrowe/twigbridge": "0.9.*", diff --git a/composer.lock b/composer.lock index 0ee40dde37..1bc1317445 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,113 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9297702ac3c2fc200aac5fc68821bdd6", + "content-hash": "a24c113aaca8cbdc1d0b0074c6e61392", "packages": [ + { + "name": "adldap2/adldap2", + "version": "v8.1.5", + "source": { + "type": "git", + "url": "https://github.com/Adldap2/Adldap2.git", + "reference": "54722408c68f12942fcbf4a1b666d90a178ddc5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Adldap2/Adldap2/zipball/54722408c68f12942fcbf4a1b666d90a178ddc5c", + "reference": "54722408c68f12942fcbf4a1b666d90a178ddc5c", + "shasum": "" + }, + "require": { + "ext-ldap": "*", + "illuminate/support": "~5.0", + "php": ">=5.5.9" + }, + "require-dev": { + "mockery/mockery": "~0.9|~1.0", + "phpunit/phpunit": "~4.8|~5.6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Adldap\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Steve Bauman", + "email": "steven_bauman@outlook.com", + "role": "Developer" + } + ], + "description": "A PHP LDAP Package for humans.", + "keywords": [ + "active directory", + "ad", + "adLDAP", + "adldap2", + "directory", + "ldap", + "windows" + ], + "time": "2018-04-19T15:06:54+00:00" + }, + { + "name": "adldap2/adldap2-laravel", + "version": "v4.0.10", + "source": { + "type": "git", + "url": "https://github.com/Adldap2/Adldap2-Laravel.git", + "reference": "a5196cce3b5394d7b5e84eb68b38260cb9f0fd3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Adldap2/Adldap2-Laravel/zipball/a5196cce3b5394d7b5e84eb68b38260cb9f0fd3c", + "reference": "a5196cce3b5394d7b5e84eb68b38260cb9f0fd3c", + "shasum": "" + }, + "require": { + "adldap2/adldap2": "^8.0", + "php": ">=7.0" + }, + "require-dev": { + "mockery/mockery": "~1.0", + "orchestra/testbench": "~3.2", + "phpunit/phpunit": "~6.0" + }, + "type": "project", + "extra": { + "laravel": { + "providers": [ + "Adldap\\Laravel\\AdldapServiceProvider", + "Adldap\\Laravel\\AdldapAuthServiceProvider" + ], + "aliases": { + "Adldap": "Adldap\\Laravel\\Facades\\Adldap" + } + } + }, + "autoload": { + "psr-4": { + "Adldap\\Laravel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "LDAP Authentication & Management for Laravel.", + "keywords": [ + "adLDAP", + "adldap2", + "laravel", + "ldap" + ], + "time": "2018-09-18T14:27:05+00:00" + }, { "name": "bacon/bacon-qr-code", "version": "1.0.3", @@ -116,6 +221,178 @@ ], "time": "2018-09-01T12:54:04+00:00" }, + { + "name": "danhunsaker/laravel-flysystem-others", + "version": "v1.3.4", + "source": { + "type": "git", + "url": "https://github.com/danhunsaker/laravel-flysystem-others.git", + "reference": "43c5e3bf8cbb9bc22a2e228cb644882f0be52f29" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danhunsaker/laravel-flysystem-others/zipball/43c5e3bf8cbb9bc22a2e228cb644882f0be52f29", + "reference": "43c5e3bf8cbb9bc22a2e228cb644882f0be52f29", + "shasum": "" + }, + "require": { + "danhunsaker/laravel-flysystem-service": "^1.1", + "illuminate/filesystem": "^5.0", + "illuminate/support": "^5.0", + "league/flysystem": "^1.0" + }, + "suggest": { + "aliyuncs/aliyun-oss-flysystem": "One of the options to use the 'oss' adapter (^1.2)", + "aobozhang/aliyun-oss-adapter": "One of the options to use the 'oss' adapter (^1.0)", + "apollopy/flysystem-aliyun-oss": "One of the options to use the 'oss' adapter (^1.2)", + "argentcrusade/flysystem-selectel": "Required to use the 'selectel' adapter (^1.2)", + "arhitector/yandex-disk-flysystem": "Required to use the 'yandex' adapter (^1.0)", + "boofw/flysystem-qiniu": "One of the options to use the 'qiniu' adapter (^1.0)", + "carlosocarvalho/flysystem-cloudinary": "One of the options to use the 'cloudinary' adapter (^1.0)", + "cedricziel/flysystem-gcs": "One of the options to use the 'google' adapter (^2.0)", + "danhunsaker/flysystem-redis": "Required to use the 'redis' adapter (^1.0)", + "emgag/flysystem-tempdir": "Required to use the 'temp' adapter (^0.1)", + "engineor/flysystem-runabove": "Required to use the 'runabove' adapter (^1.0)", + "enl/flysystem-cloudinary": "One of the options to use the 'cloudinary' adapter (^1.1)", + "eqingdan/flysystem-qiniu": "One of the options to use the 'qiniu' adapter (^0.1)", + "freyo/flysystem-qcloud-cos-v3": "One of the options to use the 'qcloud' adapter (^)", + "freyo/flysystem-qcloud-cos-v4": "One of the options to use the 'qcloud' adapter (^)", + "freyo/flysystem-qcloud-cos-v5": "One of the options to use the 'qcloud' adapter (^)", + "ignited/flysystem-google-drive": "One of the options to use the 'gdrive' adapter (dev-master)", + "ignited/flysystem-onedrive": "One of the options to use the 'onedrive' adapter (dev-master)", + "integral/flysystem-pdo-adapter": "One of the options to use the 'pdo' adapter (^1.0)", + "jacekbarecki/flysystem-onedrive": "One of the options to use the 'onedrive' adapter (^1.0)", + "jellybool/flysystem-upyun": "Required to use the 'upyun' adapter (^1.0)", + "kapersoft/flysystem-sharefile": "Required to use the 'sharefile' adapter (^1.1)", + "litipk/flysystem-fallback-adapter": "Required to use the 'fallback' adapter, and with league/flysystem-replicate-adapter, the 'mirror' adapter (^0.1)", + "mgriego/flysystem-clamav": "Scans files for viruses before storing them on an actual filesystem (^1.0)", + "mhetreramesh/flysystem-backblaze": "Required to use the 'backblaze' adapter (^1.1)", + "monster/flysystem-aliyun-oss": "One of the options to use the 'oss' adapter, but not recommended, since it uses the League namespace without being a Leage package (^1.0)", + "nao-pon/flysystem-google-drive": "One of the options to use the 'gdrive' adapter (^1.1)", + "nicolasbeauvais/flysystem-onedrive": "One of the options to use the 'onedrive' adapter (^1.0)", + "nimbusoft/flysystem-openstack-swift": "Required to use the 'openstack' adapter (^0.2)", + "orzcc/aliyun-oss": "One of the options to use the 'oss' adapter (dev-master)", + "overtrue/flysystem-qiniu": "One of the options to use the 'qiniu' adapter (^1.0)", + "phlib/flysystem-pdo": "One of the options to use the 'pdo' adapter (^1.1)", + "potherca/flysystem-github": "Required to use the 'github' adapter (^0.2)", + "private-it/flysystem-google-drive": "One of the options to use the 'gdrive' adapter (dev-master)", + "robgridley/flysystem-smb": "Required to use the 'smb' adapter (dev-master)", + "rokde/flysystem-local-database-adapter": "Required to use the 'eloquent' adapter (^0.0)", + "shion/aliyun-oss": "One of the options to use the 'oss' adapter (dev-master)", + "spatie/flysystem-dropbox": "Required to use the 'dropbox' adapter in PHP 7 (^1.0)", + "srmklive/flysystem-dropbox-v2": "Required to use the 'dropbox' adapter in PHP 5 (^1.0)", + "superbalist/flysystem-google-storage": "One of the options to use the 'google' adapter (^7.0)", + "t3chnik/flysystem-cloudinary-adapter": "One of the options to use the 'cloudinary' adapter (dev-master)", + "twistor/flysystem-guzzle": "One of the options to use the (read-only) 'http' adapter (^6.0)", + "twistor/flysystem-http": "One of the options to use the (read-only) 'http' adapter (^0.2)", + "twistor/flysystem-stream-wrapper": "Allows access to Flysystem drives using 'drive://path' streams (^1.0)", + "xxtime/flysystem-aliyun-oss": "One of the options to use the 'oss' adapter (^1.2)", + "zhuxiaoqiao/flysystem-baidu-bos": "Required to use the 'bos' adapter (^1.0)" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "laravel": { + "providers": [ + "Danhunsaker\\Laravel\\Flysystem\\FlysystemOtherServiceProvider" + ], + "dont-discover": [ + "danhunsaker/laravel-flysystem-service" + ] + } + }, + "autoload": { + "psr-4": { + "Danhunsaker\\Laravel\\Flysystem\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Hunsaker", + "email": "danhunsaker@gmail.com" + } + ], + "description": "Automatically registers every third-party Flysystem adapter it recognizes as a Laravel Filesystem Driver.", + "keywords": [ + "Flysystem", + "laravel" + ], + "time": "2018-08-16T11:20:15+00:00" + }, + { + "name": "danhunsaker/laravel-flysystem-service", + "version": "v1.2.2", + "source": { + "type": "git", + "url": "https://github.com/danhunsaker/laravel-flysystem-service.git", + "reference": "0d077a0ddadc08e80fa2f152da2ee7aaaea37735" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danhunsaker/laravel-flysystem-service/zipball/0d077a0ddadc08e80fa2f152da2ee7aaaea37735", + "reference": "0d077a0ddadc08e80fa2f152da2ee7aaaea37735", + "shasum": "" + }, + "require": { + "illuminate/filesystem": "^5.0", + "illuminate/support": "^5.0", + "league/flysystem": "^1.0" + }, + "suggest": { + "league/flysystem-aws-s3-v3": "Required to use the 's3' adapter (^1.0)", + "league/flysystem-azure-blob-storage": "Required to use the 'azure' adapter (^1.0)", + "league/flysystem-cached-adapter": "Required to use metadata caching (^1.0)", + "league/flysystem-eventable-filesystem": "Required to hook into filesystem Events (^1.0)", + "league/flysystem-gridfs": "Required to use the 'gridfs' adapter (^1.0)", + "league/flysystem-memory": "Required to use the 'memory' adapter (^1.0)", + "league/flysystem-phpcr": "Required to use the 'phpcr' adapter (^1.0)", + "league/flysystem-rackspace": "Required to use the 'rackspace' adapter (^1.0)", + "league/flysystem-replicate-adapter": "Required to use the 'replicate' adapter (^1.0)", + "league/flysystem-sftp": "Required to use the 'sftp' adapter (^1.0)", + "league/flysystem-vfs": "Required to use the 'vfs' adapter (^1.0)", + "league/flysystem-webdav": "Required to use the 'webdav' adapter (^1.0)", + "league/flysystem-ziparchive": "Required to use the 'zip' adapter (^1.0)", + "madewithlove/illuminate-psr-cache-bridge": "Required to use Laravel's cache implementation for Flysystem caching (^1.0)" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "laravel": { + "providers": [ + "Danhunsaker\\Laravel\\Flysystem\\FlysystemServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Danhunsaker\\Laravel\\Flysystem\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Hunsaker", + "email": "danhunsaker@gmail.com" + } + ], + "description": "Automatically registers every Flysystem adapter it recognizes as a Laravel Filesystem Driver.", + "keywords": [ + "Flysystem", + "laravel" + ], + "time": "2018-08-13T22:27:45+00:00" + }, { "name": "davejamesmiller/laravel-breadcrumbs", "version": "5.1.2", @@ -1022,16 +1299,16 @@ }, { "name": "laravel/framework", - "version": "v5.7.6", + "version": "v5.7.11", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "93e761bb5367166ce98ba908d5eb0edd6be76792" + "reference": "52ee19c53c4fcd7fea8a83aacae5b8bc212ae19b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/93e761bb5367166ce98ba908d5eb0edd6be76792", - "reference": "93e761bb5367166ce98ba908d5eb0edd6be76792", + "url": "https://api.github.com/repos/laravel/framework/zipball/52ee19c53c4fcd7fea8a83aacae5b8bc212ae19b", + "reference": "52ee19c53c4fcd7fea8a83aacae5b8bc212ae19b", "shasum": "" }, "require": { @@ -1043,6 +1320,7 @@ "league/flysystem": "^1.0.8", "monolog/monolog": "^1.12", "nesbot/carbon": "^1.26.3", + "opis/closure": "^3.1", "php": "^7.1.3", "psr/container": "^1.0", "psr/simple-cache": "^1.0", @@ -1112,6 +1390,7 @@ "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", + "filp/whoops": "Required for friendly error pages in development (^2.1.4).", "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", "laravel/tinker": "Required to use the tinker console command (^1.0).", @@ -1159,20 +1438,20 @@ "framework", "laravel" ], - "time": "2018-09-25T14:29:00+00:00" + "time": "2018-10-24T12:50:20+00:00" }, { "name": "laravel/passport", - "version": "v7.0.2", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/laravel/passport.git", - "reference": "7bb53d1ae4f8f375cc9461d232053958740002da" + "reference": "404b345775c91cd04443e77e8d6164b9727a3448" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/passport/zipball/7bb53d1ae4f8f375cc9461d232053958740002da", - "reference": "7bb53d1ae4f8f375cc9461d232053958740002da", + "url": "https://api.github.com/repos/laravel/passport/zipball/404b345775c91cd04443e77e8d6164b9727a3448", + "reference": "404b345775c91cd04443e77e8d6164b9727a3448", "shasum": "" }, "require": { @@ -1228,7 +1507,7 @@ "oauth", "passport" ], - "time": "2018-09-25T14:23:48+00:00" + "time": "2018-10-22T14:47:22+00:00" }, { "name": "laravelcollective/html", @@ -1544,16 +1823,16 @@ }, { "name": "league/flysystem", - "version": "1.0.47", + "version": "1.0.48", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "a11e4a75f256bdacf99d20780ce42d3b8272975c" + "reference": "a6ded5b2f6055e2db97b4b859fdfca2b952b78aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a11e4a75f256bdacf99d20780ce42d3b8272975c", - "reference": "a11e4a75f256bdacf99d20780ce42d3b8272975c", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a6ded5b2f6055e2db97b4b859fdfca2b952b78aa", + "reference": "a6ded5b2f6055e2db97b4b859fdfca2b952b78aa", "shasum": "" }, "require": { @@ -1624,7 +1903,95 @@ "sftp", "storage" ], - "time": "2018-09-14T15:30:29+00:00" + "time": "2018-10-15T13:53:10+00:00" + }, + { + "name": "league/flysystem-replicate-adapter", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-replicate-adapter.git", + "reference": "864e80409c0918b0ed6921c3941247017d9db77c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-replicate-adapter/zipball/864e80409c0918b0ed6921c3941247017d9db77c", + "reference": "864e80409c0918b0ed6921c3941247017d9db77c", + "shasum": "" + }, + "require": { + "league/flysystem": "~1.0", + "php": ">=5.4.0" + }, + "require-dev": { + "mockery/mockery": "0.9.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Flysystem\\Replicate\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Flysystem adapter for Replica's", + "time": "2015-08-18T21:07:17+00:00" + }, + { + "name": "league/flysystem-sftp", + "version": "1.0.17", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-sftp.git", + "reference": "49e216f1074b42e3ff344809e700672c2a3264ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-sftp/zipball/49e216f1074b42e3ff344809e700672c2a3264ed", + "reference": "49e216f1074b42e3ff344809e700672c2a3264ed", + "shasum": "" + }, + "require": { + "league/flysystem": "~1.0", + "php": ">=5.6.0", + "phpseclib/phpseclib": "~2.0" + }, + "require-dev": { + "mockery/mockery": "0.9.*", + "phpunit/phpunit": "^5.7.25" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Sftp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Flysystem adapter for SFTP", + "time": "2018-10-14T21:07:28+00:00" }, { "name": "league/fractal", @@ -1760,6 +2127,47 @@ ], "time": "2018-06-23T16:57:59+00:00" }, + { + "name": "litipk/flysystem-fallback-adapter", + "version": "0.1.2", + "source": { + "type": "git", + "url": "https://github.com/Litipk/flysystem-fallback-adapter.git", + "reference": "9f3c35099a52c9f5339ab71ef6a7055fdab5243d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Litipk/flysystem-fallback-adapter/zipball/9f3c35099a52c9f5339ab71ef6a7055fdab5243d", + "reference": "9f3c35099a52c9f5339ab71ef6a7055fdab5243d", + "shasum": "" + }, + "require": { + "league/flysystem": "~1.0", + "php": ">=5.4.0" + }, + "require-dev": { + "mockery/mockery": "0.9.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Litipk\\Flysystem\\Fallback\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrés Correa Casablanca", + "email": "castarco@litipk.com" + } + ], + "description": "Flysystem adapter for fallback filesystems", + "time": "2015-10-22T21:39:15+00:00" + }, { "name": "monolog/monolog", "version": "1.23.0", @@ -1838,6 +2246,41 @@ ], "time": "2017-06-19T01:22:40+00:00" }, + { + "name": "mschindler83/fints-hbci-php", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/mschindler83/fints-hbci-php.git", + "reference": "e58cb825c178d4c39a8974a9dd93abbc8094551f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mschindler83/fints-hbci-php/zipball/e58cb825c178d4c39a8974a9dd93abbc8094551f", + "reference": "e58cb825c178d4c39a8974a9dd93abbc8094551f", + "shasum": "" + }, + "require": { + "php": ">=5.3.2", + "psr/log": "~1.0" + }, + "suggest": { + "monolog/monolog": "Allow sending log messages to a variety of different handlers" + }, + "type": "library", + "autoload": { + "psr-0": { + "Fhp": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHP Library for the protocols fints and hbci", + "homepage": "http://fints-hbci-php.markus-schindler.de", + "time": "2017-02-15T13:48:21+00:00" + }, { "name": "nesbot/carbon", "version": "1.34.0", @@ -1893,6 +2336,67 @@ ], "time": "2018-09-20T19:36:25+00:00" }, + { + "name": "opis/closure", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "d3209e46ad6c69a969b705df0738fd0dbe26ef9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/d3209e46ad6c69a969b705df0738fd0dbe26ef9e", + "reference": "d3209e46ad6c69a969b705df0738fd0dbe26ef9e", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Opis\\Closure\\": "src/" + }, + "files": [ + "functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "time": "2018-10-02T13:36:53+00:00" + }, { "name": "paragonie/constant_time_encoding", "version": "v2.2.2", @@ -2502,16 +3006,16 @@ }, { "name": "rcrowe/twigbridge", - "version": "v0.9.8", + "version": "v0.9.9", "source": { "type": "git", "url": "https://github.com/rcrowe/TwigBridge.git", - "reference": "d0c998ae6d39f154c4e2d01ef914e49d0b7d5d68" + "reference": "04ee299bf1eecf55d27120c85da71720aabe7f40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rcrowe/TwigBridge/zipball/d0c998ae6d39f154c4e2d01ef914e49d0b7d5d68", - "reference": "d0c998ae6d39f154c4e2d01ef914e49d0b7d5d68", + "url": "https://api.github.com/repos/rcrowe/TwigBridge/zipball/04ee299bf1eecf55d27120c85da71720aabe7f40", + "reference": "04ee299bf1eecf55d27120c85da71720aabe7f40", "shasum": "" }, "require": { @@ -2570,7 +3074,7 @@ "laravel", "twig" ], - "time": "2018-08-31T13:30:10+00:00" + "time": "2018-10-25T19:11:00+00:00" }, { "name": "swiftmailer/swiftmailer", @@ -2633,16 +3137,16 @@ }, { "name": "symfony/console", - "version": "v4.1.4", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "ca80b8ced97cf07390078b29773dc384c39eee1f" + "reference": "dc7122fe5f6113cfaba3b3de575d31112c9aa60b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/ca80b8ced97cf07390078b29773dc384c39eee1f", - "reference": "ca80b8ced97cf07390078b29773dc384c39eee1f", + "url": "https://api.github.com/repos/symfony/console/zipball/dc7122fe5f6113cfaba3b3de575d31112c9aa60b", + "reference": "dc7122fe5f6113cfaba3b3de575d31112c9aa60b", "shasum": "" }, "require": { @@ -2697,20 +3201,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-07-26T11:24:31+00:00" + "time": "2018-10-03T08:15:46+00:00" }, { "name": "symfony/css-selector", - "version": "v4.1.4", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "2a4df7618f869b456f9096781e78c57b509d76c7" + "reference": "d67de79a70a27d93c92c47f37ece958bf8de4d8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/2a4df7618f869b456f9096781e78c57b509d76c7", - "reference": "2a4df7618f869b456f9096781e78c57b509d76c7", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/d67de79a70a27d93c92c47f37ece958bf8de4d8a", + "reference": "d67de79a70a27d93c92c47f37ece958bf8de4d8a", "shasum": "" }, "require": { @@ -2750,20 +3254,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2018-07-26T09:10:45+00:00" + "time": "2018-10-02T16:36:10+00:00" }, { "name": "symfony/debug", - "version": "v4.1.4", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "47ead688f1f2877f3f14219670f52e4722ee7052" + "reference": "e3f76ce6198f81994e019bb2b4e533e9de1b9b90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/47ead688f1f2877f3f14219670f52e4722ee7052", - "reference": "47ead688f1f2877f3f14219670f52e4722ee7052", + "url": "https://api.github.com/repos/symfony/debug/zipball/e3f76ce6198f81994e019bb2b4e533e9de1b9b90", + "reference": "e3f76ce6198f81994e019bb2b4e533e9de1b9b90", "shasum": "" }, "require": { @@ -2806,11 +3310,11 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2018-08-03T11:13:38+00:00" + "time": "2018-10-02T16:36:10+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.1.4", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", @@ -2873,16 +3377,16 @@ }, { "name": "symfony/finder", - "version": "v4.1.4", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "e162f1df3102d0b7472805a5a9d5db9fcf0a8068" + "reference": "1f17195b44543017a9c9b2d437c670627e96ad06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/e162f1df3102d0b7472805a5a9d5db9fcf0a8068", - "reference": "e162f1df3102d0b7472805a5a9d5db9fcf0a8068", + "url": "https://api.github.com/repos/symfony/finder/zipball/1f17195b44543017a9c9b2d437c670627e96ad06", + "reference": "1f17195b44543017a9c9b2d437c670627e96ad06", "shasum": "" }, "require": { @@ -2918,20 +3422,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2018-07-26T11:24:31+00:00" + "time": "2018-10-03T08:47:56+00:00" }, { "name": "symfony/http-foundation", - "version": "v4.1.4", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "3a5c91e133b220bb882b3cd773ba91bf39989345" + "reference": "d528136617ff24f530e70df9605acc1b788b08d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/3a5c91e133b220bb882b3cd773ba91bf39989345", - "reference": "3a5c91e133b220bb882b3cd773ba91bf39989345", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d528136617ff24f530e70df9605acc1b788b08d4", + "reference": "d528136617ff24f530e70df9605acc1b788b08d4", "shasum": "" }, "require": { @@ -2972,20 +3476,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2018-08-27T17:47:02+00:00" + "time": "2018-10-03T08:48:45+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.1.4", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "33de0a1ff2e1720096189e3ced682d7a4e8f5e35" + "reference": "f5e7c15a5d010be0e16ce798594c5960451d4220" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/33de0a1ff2e1720096189e3ced682d7a4e8f5e35", - "reference": "33de0a1ff2e1720096189e3ced682d7a4e8f5e35", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f5e7c15a5d010be0e16ce798594c5960451d4220", + "reference": "f5e7c15a5d010be0e16ce798594c5960451d4220", "shasum": "" }, "require": { @@ -3059,7 +3563,7 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2018-08-28T06:17:42+00:00" + "time": "2018-10-03T12:53:38+00:00" }, { "name": "symfony/polyfill-ctype", @@ -3343,16 +3847,16 @@ }, { "name": "symfony/process", - "version": "v4.1.4", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "86cdb930a6a855b0ab35fb60c1504cb36184f843" + "reference": "ee33c0322a8fee0855afcc11fff81e6b1011b529" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/86cdb930a6a855b0ab35fb60c1504cb36184f843", - "reference": "86cdb930a6a855b0ab35fb60c1504cb36184f843", + "url": "https://api.github.com/repos/symfony/process/zipball/ee33c0322a8fee0855afcc11fff81e6b1011b529", + "reference": "ee33c0322a8fee0855afcc11fff81e6b1011b529", "shasum": "" }, "require": { @@ -3388,7 +3892,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2018-08-03T11:13:38+00:00" + "time": "2018-10-02T12:40:59+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -3453,16 +3957,16 @@ }, { "name": "symfony/routing", - "version": "v4.1.4", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "a5784c2ec4168018c87b38f0e4f39d2278499f51" + "reference": "537803f0bdfede36b9acef052d2e4d447d9fa0e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/a5784c2ec4168018c87b38f0e4f39d2278499f51", - "reference": "a5784c2ec4168018c87b38f0e4f39d2278499f51", + "url": "https://api.github.com/repos/symfony/routing/zipball/537803f0bdfede36b9acef052d2e4d447d9fa0e9", + "reference": "537803f0bdfede36b9acef052d2e4d447d9fa0e9", "shasum": "" }, "require": { @@ -3526,20 +4030,20 @@ "uri", "url" ], - "time": "2018-08-03T07:58:40+00:00" + "time": "2018-10-02T12:40:59+00:00" }, { "name": "symfony/translation", - "version": "v4.1.4", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "fa2182669f7983b7aa5f1a770d053f79f0ef144f" + "reference": "9f0b61e339160a466ebcde167a6c5521c810e304" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/fa2182669f7983b7aa5f1a770d053f79f0ef144f", - "reference": "fa2182669f7983b7aa5f1a770d053f79f0ef144f", + "url": "https://api.github.com/repos/symfony/translation/zipball/9f0b61e339160a466ebcde167a6c5521c810e304", + "reference": "9f0b61e339160a466ebcde167a6c5521c810e304", "shasum": "" }, "require": { @@ -3595,20 +4099,20 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2018-08-07T12:45:11+00:00" + "time": "2018-10-02T16:36:10+00:00" }, { "name": "symfony/var-dumper", - "version": "v4.1.4", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "a05426e27294bba7b0226ffc17dd01a3c6ef9777" + "reference": "60319b45653580b0cdacca499344577d87732f16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a05426e27294bba7b0226ffc17dd01a3c6ef9777", - "reference": "a05426e27294bba7b0226ffc17dd01a3c6ef9777", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/60319b45653580b0cdacca499344577d87732f16", + "reference": "60319b45653580b0cdacca499344577d87732f16", "shasum": "" }, "require": { @@ -3670,7 +4174,7 @@ "debug", "dump" ], - "time": "2018-08-02T09:24:26+00:00" + "time": "2018-10-02T16:36:10+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -4026,16 +4530,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "46afded9720f40b9dc63542af4e3e43a1177acb0" + "reference": "8afa52cd417f4ec417b4bfe86b68106538a87660" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/46afded9720f40b9dc63542af4e3e43a1177acb0", - "reference": "46afded9720f40b9dc63542af4e3e43a1177acb0", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/8afa52cd417f4ec417b4bfe86b68106538a87660", + "reference": "8afa52cd417f4ec417b4bfe86b68106538a87660", "shasum": "" }, "require": { @@ -4078,7 +4582,7 @@ "ssl", "tls" ], - "time": "2018-08-08T08:57:40+00:00" + "time": "2018-10-18T06:09:13+00:00" }, { "name": "composer/composer", @@ -4383,16 +4887,16 @@ }, { "name": "filp/whoops", - "version": "2.2.1", + "version": "2.3.1", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "e79cd403fb77fc8963a99ecc30e80ddd885b3311" + "reference": "bc0fd11bc455cc20ee4b5edabc63ebbf859324c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/e79cd403fb77fc8963a99ecc30e80ddd885b3311", - "reference": "e79cd403fb77fc8963a99ecc30e80ddd885b3311", + "url": "https://api.github.com/repos/filp/whoops/zipball/bc0fd11bc455cc20ee4b5edabc63ebbf859324c7", + "reference": "bc0fd11bc455cc20ee4b5edabc63ebbf859324c7", "shasum": "" }, "require": { @@ -4440,7 +4944,7 @@ "throwable", "whoops" ], - "time": "2018-06-30T13:14:06+00:00" + "time": "2018-10-23T09:00:00+00:00" }, { "name": "fzaninotto/faker", @@ -4656,16 +5160,16 @@ }, { "name": "mockery/mockery", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "99e29d3596b16dabe4982548527d5ddf90232e99" + "reference": "100633629bf76d57430b86b7098cd6beb996a35a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/99e29d3596b16dabe4982548527d5ddf90232e99", - "reference": "99e29d3596b16dabe4982548527d5ddf90232e99", + "url": "https://api.github.com/repos/mockery/mockery/zipball/100633629bf76d57430b86b7098cd6beb996a35a", + "reference": "100633629bf76d57430b86b7098cd6beb996a35a", "shasum": "" }, "require": { @@ -4674,8 +5178,7 @@ "php": ">=5.6.0" }, "require-dev": { - "phpdocumentor/phpdocumentor": "^2.9", - "phpunit/phpunit": "~5.7.10|~6.5" + "phpunit/phpunit": "~5.7.10|~6.5|~7.0" }, "type": "library", "extra": { @@ -4718,7 +5221,7 @@ "test double", "testing" ], - "time": "2018-05-08T08:54:48+00:00" + "time": "2018-10-02T21:52:37+00:00" }, { "name": "myclabs/deep-copy", @@ -5170,16 +5673,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "6.0.7", + "version": "6.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a" + "reference": "4d3ae9b21a7d7e440bd0cf65565533117976859f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/865662550c384bc1db7e51d29aeda1c2c161d69a", - "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4d3ae9b21a7d7e440bd0cf65565533117976859f", + "reference": "4d3ae9b21a7d7e440bd0cf65565533117976859f", "shasum": "" }, "require": { @@ -5190,7 +5693,7 @@ "phpunit/php-text-template": "^1.2.1", "phpunit/php-token-stream": "^3.0", "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.1", + "sebastian/environment": "^3.1 || ^4.0", "sebastian/version": "^2.0.1", "theseer/tokenizer": "^1.1" }, @@ -5203,7 +5706,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.0-dev" + "dev-master": "6.1-dev" } }, "autoload": { @@ -5229,7 +5732,7 @@ "testing", "xunit" ], - "time": "2018-06-01T07:51:50+00:00" + "time": "2018-10-23T05:59:32+00:00" }, { "name": "phpunit/php-file-iterator", @@ -5422,16 +5925,16 @@ }, { "name": "phpunit/phpunit", - "version": "7.3.5", + "version": "7.4.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "7b331efabbb628c518c408fdfcaf571156775de2" + "reference": "c151651fb6ed264038d486ea262e243af72e5e64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7b331efabbb628c518c408fdfcaf571156775de2", - "reference": "7b331efabbb628c518c408fdfcaf571156775de2", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c151651fb6ed264038d486ea262e243af72e5e64", + "reference": "c151651fb6ed264038d486ea262e243af72e5e64", "shasum": "" }, "require": { @@ -5452,11 +5955,11 @@ "phpunit/php-timer": "^2.0", "sebastian/comparator": "^3.0", "sebastian/diff": "^3.0", - "sebastian/environment": "^3.1", + "sebastian/environment": "^3.1 || ^4.0", "sebastian/exporter": "^3.1", "sebastian/global-state": "^2.0", "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^1.0", + "sebastian/resource-operations": "^2.0", "sebastian/version": "^2.0.1" }, "conflict": { @@ -5476,7 +5979,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "7.3-dev" + "dev-master": "7.4-dev" } }, "autoload": { @@ -5502,7 +6005,7 @@ "testing", "xunit" ], - "time": "2018-09-08T15:14:29+00:00" + "time": "2018-10-23T05:57:41+00:00" }, { "name": "roave/security-advisories", @@ -5510,6 +6013,7 @@ "conflict": { "3f/pygmentize": "<1.2", "adodb/adodb-php": "<5.20.12", + "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amphp/artax": "<1.0.6|>=2,<2.0.6", "amphp/http": "<1.0.1", "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", @@ -5537,12 +6041,14 @@ "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1", "dompdf/dompdf": ">=0.6,<0.6.2", - "drupal/core": ">=7,<7.59|>=8,<8.4.8|>=8.5,<8.5.3", - "drupal/drupal": ">=7,<7.59|>=8,<8.4.8|>=8.5,<8.5.3", + "drupal/core": ">=7,<7.60|>=8,<8.5.8|>=8.6,<8.6.2", + "drupal/drupal": ">=7,<7.60|>=8,<8.5.8|>=8.6,<8.6.2", "erusev/parsedown": "<1.7", "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.3|>=5.4,<5.4.11.3|>=2017.8,<2017.8.1.1|>=2017.12,<2017.12.2.1", "ezyang/htmlpurifier": "<4.1.1", "firebase/php-jwt": "<2", + "fooman/tcpdf": "<6.2.22", + "fossar/tcpdf-parser": "<6.2.22", "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", "fuel/core": "<1.8.1", @@ -5559,11 +6065,12 @@ "jsmitty12/phpwhois": "<5.1", "kazist/phpwhois": "<=4.2.6", "kreait/firebase-php": ">=3.2,<3.8.1", + "la-haute-societe/tcpdf": "<6.2.22", "laravel/framework": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.42|>=5.6,<5.6.30", "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", "magento/magento1ce": "<1.9.3.9", "magento/magento1ee": ">=1.9,<1.14.3.2", - "magento/product-community-edition": ">=2,<2.2.5", + "magento/product-community-edition": ">=2,<2.2.6", "monolog/monolog": ">=1.8,<1.12", "namshi/jose": "<2.2", "onelogin/php-saml": "<2.10.4", @@ -5581,6 +6088,7 @@ "propel/propel": ">=2.0.0-alpha1,<=2.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", "pusher/pusher-php-server": "<2.2.1", + "robrichards/xmlseclibs": ">=1,<3.0.2", "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", "sensiolabs/connect": "<4.2.3", "serluck/phpwhois": "<=4.2.6", @@ -5596,6 +6104,7 @@ "slim/slim": "<2.6", "smarty/smarty": "<3.1.33", "socalnick/scn-social-auth": "<1.15.2", + "spoonity/tcpdf": "<6.2.22", "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", "stormpath/sdk": ">=0,<9.9.99", "swiftmailer/swiftmailer": ">=4,<5.4.5", @@ -5620,8 +6129,9 @@ "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", + "tecnickcom/tcpdf": "<6.2.22", "thelia/backoffice-default-template": ">=2.1,<2.1.2", - "thelia/thelia": ">=2.1.0-beta1,<2.1.3|>=2.1,<2.1.2", + "thelia/thelia": ">=2.1,<2.1.2|>=2.1.0-beta1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", "titon/framework": ">=0,<9.9.99", "truckersmp/phpwhois": "<=4.3.1", @@ -5630,6 +6140,7 @@ "typo3/cms-core": ">=8,<8.7.17|>=9,<9.3.2", "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5", "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4", + "wallabag/tcpdf": "<6.2.22", "willdurand/js-translation-bundle": "<2.1.1", "yiisoft/yii": ">=1.1.14,<1.1.15", "yiisoft/yii2": "<2.0.15", @@ -5677,7 +6188,7 @@ } ], "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", - "time": "2018-09-17T20:20:31+00:00" + "time": "2018-10-21T18:01:48+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -6159,25 +6670,25 @@ }, { "name": "sebastian/resource-operations", - "version": "1.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", "shasum": "" }, "require": { - "php": ">=5.6.0" + "php": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -6197,7 +6708,7 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28T20:34:47+00:00" + "time": "2018-10-04T04:07:39+00:00" }, { "name": "sebastian/version", @@ -6337,16 +6848,16 @@ }, { "name": "symfony/config", - "version": "v4.1.4", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "76015a3cc372b14d00040ff58e18e29f69eba717" + "reference": "b3d4d7b567d7a49e6dfafb6d4760abc921177c96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/76015a3cc372b14d00040ff58e18e29f69eba717", - "reference": "76015a3cc372b14d00040ff58e18e29f69eba717", + "url": "https://api.github.com/repos/symfony/config/zipball/b3d4d7b567d7a49e6dfafb6d4760abc921177c96", + "reference": "b3d4d7b567d7a49e6dfafb6d4760abc921177c96", "shasum": "" }, "require": { @@ -6396,20 +6907,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2018-08-08T06:37:38+00:00" + "time": "2018-09-08T13:24:10+00:00" }, { "name": "symfony/filesystem", - "version": "v4.1.4", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "c0f5f62db218fa72195b8b8700e4b9b9cf52eb5e" + "reference": "596d12b40624055c300c8b619755b748ca5cf0b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/c0f5f62db218fa72195b8b8700e4b9b9cf52eb5e", - "reference": "c0f5f62db218fa72195b8b8700e4b9b9cf52eb5e", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/596d12b40624055c300c8b619755b748ca5cf0b5", + "reference": "596d12b40624055c300c8b619755b748ca5cf0b5", "shasum": "" }, "require": { @@ -6446,20 +6957,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2018-08-18T16:52:46+00:00" + "time": "2018-10-02T12:40:59+00:00" }, { "name": "symfony/stopwatch", - "version": "v4.1.4", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "966c982df3cca41324253dc0c7ffe76b6076b705" + "reference": "5bfc064125b73ff81229e19381ce1c34d3416f4b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/966c982df3cca41324253dc0c7ffe76b6076b705", - "reference": "966c982df3cca41324253dc0c7ffe76b6076b705", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5bfc064125b73ff81229e19381ce1c34d3416f4b", + "reference": "5bfc064125b73ff81229e19381ce1c34d3416f4b", "shasum": "" }, "require": { @@ -6495,20 +7006,20 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2018-07-26T11:00:49+00:00" + "time": "2018-10-02T12:40:59+00:00" }, { "name": "symfony/yaml", - "version": "v4.1.4", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "b832cc289608b6d305f62149df91529a2ab3c314" + "reference": "367e689b2fdc19965be435337b50bc8adf2746c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/b832cc289608b6d305f62149df91529a2ab3c314", - "reference": "b832cc289608b6d305f62149df91529a2ab3c314", + "url": "https://api.github.com/repos/symfony/yaml/zipball/367e689b2fdc19965be435337b50bc8adf2746c9", + "reference": "367e689b2fdc19965be435337b50bc8adf2746c9", "shasum": "" }, "require": { @@ -6554,7 +7065,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-08-18T16:52:46+00:00" + "time": "2018-10-02T16:36:10+00:00" }, { "name": "theseer/tokenizer", @@ -6662,7 +7173,9 @@ "ext-gd": "*", "ext-intl": "*", "ext-xml": "*", - "ext-zip": "*" + "ext-zip": "*", + "ext-json": "*", + "ext-ldap": "*" }, "platform-dev": [] } diff --git a/config/adldap.php b/config/adldap.php new file mode 100644 index 0000000000..4b879bcc0c --- /dev/null +++ b/config/adldap.php @@ -0,0 +1,259 @@ + [ + + 'default' => [ + + /* + |-------------------------------------------------------------------------- + | Auto Connect + |-------------------------------------------------------------------------- + | + | If auto connect is true, Adldap will try to automatically connect to + | your LDAP server in your configuration. This allows you to assume + | connectivity rather than having to connect manually + | in your application. + | + | If this is set to false, you **must** connect manually before running + | LDAP operations. + | + */ + + 'auto_connect' => env('ADLDAP_AUTO_CONNECT', true), + + /* + |-------------------------------------------------------------------------- + | Connection + |-------------------------------------------------------------------------- + | + | The connection class to use to run raw LDAP operations on. + | + | Custom connection classes must implement: + | + | Adldap\Connections\ConnectionInterface + | + */ + + 'connection' => Adldap\Connections\Ldap::class, + + /* + |-------------------------------------------------------------------------- + | Schema + |-------------------------------------------------------------------------- + | + | The schema class to use for retrieving attributes and generating models. + | + | You can also set this option to `null` to use the default schema class. + | + | For OpenLDAP, you must use the schema: + | + | Adldap\Schemas\OpenLDAP::class + | + | For FreeIPA, you must use the schema: + | + | Adldap\Schemas\FreeIPA::class + | + | Custom schema classes must implement Adldap\Schemas\SchemaInterface + | + */ + + 'schema' => $schema, + + /* + |-------------------------------------------------------------------------- + | Connection Settings + |-------------------------------------------------------------------------- + | + | This connection settings array is directly passed into the Adldap constructor. + | + | Feel free to add or remove settings you don't need. + | + */ + + 'connection_settings' => [ + + /* + |-------------------------------------------------------------------------- + | Account Prefix + |-------------------------------------------------------------------------- + | + | The account prefix option is the prefix of your user accounts in LDAP directory. + | + | This string is prepended to authenticating users usernames. + | + */ + + 'account_prefix' => env('ADLDAP_ACCOUNT_PREFIX', ''), + + /* + |-------------------------------------------------------------------------- + | Account Suffix + |-------------------------------------------------------------------------- + | + | The account suffix option is the suffix of your user accounts in your LDAP directory. + | + | This string is appended to authenticating users usernames. + | + */ + + 'account_suffix' => env('ADLDAP_ACCOUNT_SUFFIX', ''), + + /* + |-------------------------------------------------------------------------- + | Domain Controllers + |-------------------------------------------------------------------------- + | + | The domain controllers option is an array of servers located on your + | network that serve Active Directory. You can insert as many servers or + | as little as you'd like depending on your forest (with the + | minimum of one of course). + | + | These can be IP addresses of your server(s), or the host name. + | + */ + + 'domain_controllers' => explode(' ', env('ADLDAP_CONTROLLERS', '127.0.0.1')), + + /* + |-------------------------------------------------------------------------- + | Port + |-------------------------------------------------------------------------- + | + | The port option is used for authenticating and binding to your LDAP server. + | + */ + + 'port' => env('ADLDAP_PORT', 389), + + /* + |-------------------------------------------------------------------------- + | Timeout + |-------------------------------------------------------------------------- + | + | The timeout option allows you to configure the amount of time in + | seconds that your application waits until a response + | is received from your LDAP server. + | + */ + + 'timeout' => env('ADLDAP_TIMEOUT', 5), + + /* + |-------------------------------------------------------------------------- + | Base Distinguished Name + |-------------------------------------------------------------------------- + | + | The base distinguished name is the base distinguished name you'd + | like to perform query operations on. An example base DN would be: + | + | dc=corp,dc=acme,dc=org + | + | A correct base DN is required for any query results to be returned. + | + */ + + 'base_dn' => env('ADLDAP_BASEDN', 'dc=temp'), + + /* + |-------------------------------------------------------------------------- + | Administrator Account Suffix / Prefix + |-------------------------------------------------------------------------- + | + | This option allows you to set a different account prefix and suffix + | for your configured administrator account upon binding. + | + | If left empty or set to `null`, your `account_prefix` and + | `account_suffix` options above will be used. + | + */ + + 'admin_account_prefix' => env('ADLDAP_ADMIN_ACCOUNT_PREFIX', ''), + 'admin_account_suffix' => env('ADLDAP_ADMIN_ACCOUNT_SUFFIX', ''), + + /* + |-------------------------------------------------------------------------- + | Administrator Username & Password + |-------------------------------------------------------------------------- + | + | When connecting to your LDAP server, a username and password is required + | to be able to query and run operations on your server(s). You can + | use any user account that has these permissions. This account + | does not need to be a domain administrator unless you + | require changing and resetting user passwords. + | + */ + + 'admin_username' => env('ADLDAP_ADMIN_USERNAME', ''), + 'admin_password' => env('ADLDAP_ADMIN_PASSWORD', ''), + + /* + |-------------------------------------------------------------------------- + | Follow Referrals + |-------------------------------------------------------------------------- + | + | The follow referrals option is a boolean to tell active directory + | to follow a referral to another server on your network if the + | server queried knows the information your asking for exists, + | but does not yet contain a copy of it locally. + | + | This option is defaulted to false. + | + */ + + 'follow_referrals' => env('ADLDAP_FOLLOW_REFFERALS', false), + + /* + |-------------------------------------------------------------------------- + | SSL & TLS + |-------------------------------------------------------------------------- + | + | If you need to be able to change user passwords on your server, then an + | SSL or TLS connection is required. All other operations are allowed + | on unsecured protocols. + | + | One of these options are definitely recommended if you + | have the ability to connect to your server securely. + | + */ + + 'use_ssl' => env('ADLDAP_USE_SSL', false), + 'use_tls' => env('ADLDAP_USE_TLS', false), + + ], + + ], + + ], + +]; diff --git a/config/adldap_auth.php b/config/adldap_auth.php new file mode 100644 index 0000000000..ec1ce2674c --- /dev/null +++ b/config/adldap_auth.php @@ -0,0 +1,317 @@ + envNonEmpty('ADLDAP_CONNECTION', 'default'), + + /* + |-------------------------------------------------------------------------- + | Provider + |-------------------------------------------------------------------------- + | + | The LDAP authentication provider to use depending + | if you require database synchronization. + | + | For synchronizing LDAP users to your local applications database, use the provider: + | + | Adldap\Laravel\Auth\DatabaseUserProvider::class + | + | Otherwise, if you just require LDAP authentication, use the provider: + | + | Adldap\Laravel\Auth\NoDatabaseUserProvider::class + | + */ + + 'provider' => Adldap\Laravel\Auth\DatabaseUserProvider::class, + //'provider' => Adldap\Laravel\Auth\NoDatabaseUserProvider::class, + /* + |-------------------------------------------------------------------------- + | Rules + |-------------------------------------------------------------------------- + | + | Rules allow you to control user authentication requests depending on scenarios. + | + | You can create your own rules and insert them here. + | + | All rules must extend from the following class: + | + | Adldap\Laravel\Validation\Rules\Rule + | + */ + + 'rules' => [ + + // Denys deleted users from authenticating. + Adldap\Laravel\Validation\Rules\DenyTrashed::class, + + // Allows only manually imported users to authenticate. + // Adldap\Laravel\Validation\Rules\OnlyImported::class, + + ], + + /* + |-------------------------------------------------------------------------- + | Scopes + |-------------------------------------------------------------------------- + | + | Scopes allow you to restrict the LDAP query that locates + | users upon import and authentication. + | + | All scopes must implement the following interface: + | + | Adldap\Laravel\Scopes\ScopeInterface + |[ + + // Only allows users with a user principal name to authenticate. + // Remove this if you're using OpenLDAP. + //Adldap\Laravel\Scopes\UpnScope::class, + + // Only allows users with a uid to authenticate. + // Uncomment if you're using OpenLDAP. + Adldap\Laravel\Scopes\UidScope::class, + + ], + */ + + 'scopes' => $scopes, + + 'usernames' => [ + + /* + |-------------------------------------------------------------------------- + | LDAP + |-------------------------------------------------------------------------- + | + | Discover: + | + | The discover value is the users attribute you would + | like to locate LDAP users by in your directory. + | + | For example, using the default configuration below, if you're + | authenticating users with an email address, your LDAP server + | will be queried for a user with the a `userprincipalname` + | equal to the entered email address. + | + | Authenticate: + | + | The authenticate value is the users attribute you would + | like to use to bind to your LDAP server. + | + | For example, when a user is located by the above 'discover' + | attribute, the users attribute you specify below will + | be used as the username to bind to your LDAP server. + | + */ + + 'ldap' => [ + + 'discover' => envNonEmpty('ADLDAP_DISCOVER_FIELD', 'userprincipalname'), + 'authenticate' => envNonEmpty('ADLDAP_AUTH_FIELD', 'distinguishedname'), + + ], + + /* + |-------------------------------------------------------------------------- + | Eloquent + |-------------------------------------------------------------------------- + | + | The value you enter is the database column name used for locating + | the local database record of the authenticating user. + | + | If you're using a `username` column instead, change this to `username`. + | + | This option is only applicable to the DatabaseUserProvider. + | + */ + + 'eloquent' => 'email', + + /* + |-------------------------------------------------------------------------- + | Windows Authentication Middleware (SSO) + |-------------------------------------------------------------------------- + | + | Discover: + | + | The 'discover' value is the users attribute you would + | like to locate LDAP users by in your directory. + | + | For example, if 'samaccountname' is the value, then your LDAP server is + | queried for a user with the 'samaccountname' equal to the value of + | $_SERVER['AUTH_USER']. + | + | If a user is found, they are imported (if using the DatabaseUserProvider) + | into your local database, then logged in. + | + | Key: + | + | The 'key' value represents the 'key' of the $_SERVER + | array to pull the users account name from. + | + | For example, $_SERVER['AUTH_USER']. + | + */ + + 'windows' => [ + 'discover' => envNonEmpty('WINDOWS_SSO_DISCOVER', 'samaccountname'), + 'key' => envNonEmpty('WINDOWS_SSO_KEY', 'AUTH_USER'), + ], + ], + + 'passwords' => [ + + /* + |-------------------------------------------------------------------------- + | Password Sync + |-------------------------------------------------------------------------- + | + | The password sync option allows you to automatically synchronize users + | LDAP passwords to your local database. These passwords are hashed + | natively by Laravel using the bcrypt() method. + | + | Enabling this option would also allow users to login to their accounts + | using the password last used when an LDAP connection was present. + | + | If this option is disabled, the local database account is applied a + | random 16 character hashed password upon every login, and will + | lose access to this account upon loss of LDAP connectivity. + | + | This option must be true or false and is only applicable + | to the DatabaseUserProvider. + | + */ + + 'sync' => env('ADLDAP_PASSWORD_SYNC', false), + + /* + |-------------------------------------------------------------------------- + | Column + |-------------------------------------------------------------------------- + | + | This is the column of your users database table + | that is used to store passwords. + | + | Set this to `null` if you do not have a password column. + | + | This option is only applicable to the DatabaseUserProvider. + | + */ + + 'column' => 'password', + + ], + + /* + |-------------------------------------------------------------------------- + | Login Fallback + |-------------------------------------------------------------------------- + | + | The login fallback option allows you to login as a user located on the + | local database if active directory authentication fails. + | + | Set this to true if you would like to enable it. + | + | This option must be true or false and is only + | applicable to the DatabaseUserProvider. + | + */ + + 'login_fallback' => env('ADLDAP_LOGIN_FALLBACK', false), + + /* + |-------------------------------------------------------------------------- + | Sync Attributes + |-------------------------------------------------------------------------- + | + | Attributes specified here will be added / replaced on the user model + | upon login, automatically synchronizing and keeping the attributes + | up to date. + | + | The array key represents the users Laravel model key, and + | the value represents the users LDAP attribute. + | + | This option must be an array and is only applicable + | to the DatabaseUserProvider. + | + */ + + 'sync_attributes' => [ + + 'email' => envNonEmpty('ADLDAP_SYNC_FIELD', 'userprincipalname'), + //'name' => 'cn', + + ], + + /* + |-------------------------------------------------------------------------- + | Logging + |-------------------------------------------------------------------------- + | + | User authentication attempts will be logged using Laravel's + | default logger if this setting is enabled. + | + | No credentials are logged, only usernames. + | + | This is usually stored in the '/storage/logs' directory + | in the root of your application. + | + | This option is useful for debugging as well as auditing. + | + | You can freely remove any events you would not like to log below, + | as well as use your own listeners if you would prefer. + | + */ + + 'logging' => [ + 'enabled' => true, + 'events' => [ + + \Adldap\Laravel\Events\Importing::class => \Adldap\Laravel\Listeners\LogImport::class, + \Adldap\Laravel\Events\Synchronized::class => \Adldap\Laravel\Listeners\LogSynchronized::class, + \Adldap\Laravel\Events\Synchronizing::class => \Adldap\Laravel\Listeners\LogSynchronizing::class, + \Adldap\Laravel\Events\Authenticated::class => \Adldap\Laravel\Listeners\LogAuthenticated::class, + \Adldap\Laravel\Events\Authenticating::class => \Adldap\Laravel\Listeners\LogAuthentication::class, + \Adldap\Laravel\Events\AuthenticationFailed::class => \Adldap\Laravel\Listeners\LogAuthenticationFailure::class, + \Adldap\Laravel\Events\AuthenticationRejected::class => \Adldap\Laravel\Listeners\LogAuthenticationRejection::class, + \Adldap\Laravel\Events\AuthenticationSuccessful::class => \Adldap\Laravel\Listeners\LogAuthenticationSuccess::class, + \Adldap\Laravel\Events\DiscoveredWithCredentials::class => \Adldap\Laravel\Listeners\LogDiscovery::class, + \Adldap\Laravel\Events\AuthenticatedWithWindows::class => \Adldap\Laravel\Listeners\LogWindowsAuth::class, + \Adldap\Laravel\Events\AuthenticatedModelTrashed::class => \Adldap\Laravel\Listeners\LogTrashedModel::class, + + ], + ], + +]; diff --git a/config/auth.php b/config/auth.php index fec9f2f764..66afef9de3 100644 --- a/config/auth.php +++ b/config/auth.php @@ -62,7 +62,6 @@ return [ 'driver' => 'session', 'provider' => 'users', ], - 'api' => [ 'driver' => 'passport', 'provider' => 'users', @@ -88,14 +87,9 @@ return [ 'providers' => [ 'users' => [ - 'driver' => 'eloquent', + 'driver' => envNonEmpty('LOGIN_PROVIDER', 'eloquent'),//'adldap', 'model' => FireflyIII\User::class, ], - - // 'users' => [ - // 'driver' => 'database', - // 'table' => 'users', - // ], ], /* diff --git a/config/database.php b/config/database.php index 50c1e8ede9..fffe561ea3 100644 --- a/config/database.php +++ b/config/database.php @@ -28,7 +28,7 @@ $username = ''; $password = ''; $database = ''; -if (!($databaseUrl === false)) { +if (!(false === $databaseUrl)) { $options = parse_url($databaseUrl); $host = $options['host']; $username = $options['user']; @@ -57,7 +57,7 @@ return [ 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, - 'engine' => null, + 'engine' => 'InnoDB', ], 'pgsql' => [ 'driver' => 'pgsql', diff --git a/config/filesystems.php b/config/filesystems.php index 1633b48e06..ef78fbf9de 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -21,6 +21,21 @@ declare(strict_types=1); +$uploadDisk = [ + 'driver' => 'mirror', + 'disks' => ['local-upload'], +]; + +$exportDisk = [ + 'driver' => 'mirror', + 'disks' => ['local-export'], +]; + +// setting the SFTP host is enough to trigger the SFTP option. +if ('' !== env('SFTP_HOST', '')) { + array_push($uploadDisk['disks'], 'sftp-upload'); + array_push($exportDisk['disks'], 'sftp-export'); +} return [ @@ -59,25 +74,68 @@ return [ | may even configure multiple disks of the same driver. Defaults have | been setup for each driver as an example of the required options. | - | Supported Drivers: "local", "ftp", "s3", "rackspace" + | Supported: "local", "ftp", "s3", "rackspace", "null", "azure", "copy", + | "dropbox", "gridfs", "memory", "phpcr", "replicate", "sftp", + | "vfs", "webdav", "zip", "bos", "cloudinary", "eloquent", + | "fallback", "github", "gdrive", "google", "mirror", "onedrive", + | "oss", "qiniu", "redis", "runabove", "sae", "smb", "temp" | */ 'disks' => [ - 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ], - 'upload' => [ + // local storage configuration for upload and export: + 'local-upload' => [ 'driver' => 'local', 'root' => storage_path('upload'), ], - 'export' => [ + 'local-export' => [ 'driver' => 'local', 'root' => storage_path('export'), ], + + // SFTP storage configuration for upload and export: + 'sftp-upload' => [ + 'driver' => 'sftp', + 'host' => env('SFTP_HOST', '127.0.0.1'), + 'port' => env('SFTP_PORT', 22), + 'username' => env('SFTP_USERNAME', 'anonymous'), + 'password' => env('SFTP_PASSWORD', ''), + 'root' => env('SFTP_UPLOAD_PATH', ''), + 'privateKey' => env('SFTP_PRIV_KEY'), + + // Optional SFTP Settings + // 'timeout' => 30, + // 'directoryPerm' => 0755, + // 'permPublic' => 0644, + // 'permPrivate' => 0600, + ], + + 'sftp-export' => [ + 'driver' => 'sftp', + 'host' => env('SFTP_HOST', '127.0.0.1'), + 'port' => env('SFTP_PORT', 22), + 'username' => env('SFTP_USERNAME', 'anonymous'), + 'password' => env('SFTP_PASSWORD', ''), + 'root' => env('SFTP_EXPORT_PATH', ''), + 'privateKey' => env('SFTP_PRIV_KEY'), + + // Optional SFTP Settings + // 'timeout' => 30, + // 'directoryPerm' => 0755, + // 'permPublic' => 0644, + // 'permPrivate' => 0600, + ], + + // final configuration of upload disk and export disk. + 'upload' => $uploadDisk, + 'export' => $exportDisk, + + // various other paths: 'database' => [ 'driver' => 'local', 'root' => storage_path('database'), @@ -98,6 +156,9 @@ return [ 'visibility' => 'public', ], + // unused storage backends. + /* + 's3' => [ 'driver' => 's3', 'key' => env('AWS_KEY'), @@ -106,6 +167,340 @@ return [ 'bucket' => env('AWS_BUCKET'), ], + 'sftp' => [ + 'driver' => 'sftp', + 'host' => 'sftp.example.com', + 'username' => 'username', + 'password' => 'password', + // Optional SFTP Settings + // 'privateKey' => 'path/to/or/contents/of/privatekey', + // 'port' => 22, + // 'root' => '/path/to/root', + // 'timeout' => 30, + // 'directoryPerm' => 0755, + // 'permPublic' => 0644, + // 'permPrivate' => 0600, + ], + + 'rackspace' => [ + 'driver' => 'rackspace', + 'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/', + 'username' => 'your-username', + 'key' => 'your-key', + 'region' => 'IAD', + 'url_type' => 'publicURL', + 'container' => 'your-container', + ], + + 'null' => [ + 'driver' => 'null', + ], + + 'azure' => [ + 'driver' => 'azure', + 'accountName' => 'your-account-name', + 'apiKey' => 'your-api-key', + 'container' => 'your-container', + ], + + 'gridfs' => [ + 'driver' => 'gridfs', + 'server' => 'your-server', + 'context' => 'your-context', + 'dbName' => 'your-db-name', + // You can also provide other MongoDB connection options here + ], + + 'memory' => [ + 'driver' => 'memory', + ], + + 'phpcr-jackrabbit' => [ + 'driver' => 'phpcr', + 'jackrabbit_url' => 'your-jackrabbit-url', + 'workspace' => 'your-workspace', + 'root' => 'your-root', + // Optional PHPCR Settings + // 'userId' => 'your-user-id', + // 'password' => 'your-password', + ], + + 'phpcr-dbal' => [ + 'driver' => 'phpcr', + 'database' => 'mysql', + 'workspace' => 'your-workspace', + 'root' => 'your-root', + // Optional PHPCR Settings + // 'userId' => 'your-user-id', + // 'password' => 'your-password', + ], + + 'phpcr-prismic' => [ + 'driver' => 'phpcr', + 'prismic_uri' => 'your-prismic-uri', + 'workspace' => 'your-workspace', + 'root' => 'your-root', + // Optional PHPCR Settings + // 'userId' => 'your-user-id', + // 'password' => 'your-password', + ], + + 'replicate' => [ + 'driver' => 'replicate', + 'master' => 'local', + 'replica' => 's3', + ], + + 'vfs' => [ + 'driver' => 'vfs', + ], + + 'webdav' => [ + 'driver' => 'webdav', + 'baseUri' => 'http://example.org/dav/', + // Optional WebDAV Settings + // 'userName' => 'user', + // 'password' => 'password', + // 'proxy' => 'locahost:8888', + // 'authType' => 'digest', // alternately 'ntlm' or 'basic' + // 'encoding' => 'all', // same as ['deflate', 'gzip', 'identity'] + ], + + 'zip' => [ + 'driver' => 'zip', + 'path' => 'path/to/file.zip', + // Alternate value if twistor/flysystem-stream-wrapper is available + // 'path' => 'local://path/to/file.zip', + ], + + 'backblaze' => [ + 'driver' => 'backblaze', + 'account_id' => 'your-account-id', + 'application_key' => 'your-app-key', + 'bucket' => 'your-bucket', + ], + + 'bos' => [ + 'driver' => 'bos', + 'credentials' => [ + 'ak' => 'your-access-key-id', + 'sk' => 'your-secret-access-key', + ], + 'bucket' => 'your-bucket', + // Optional BOS Settings + // 'endpoint' => 'http://bj.bcebos.com', + ], + + 'clamav' => [ + 'driver' => 'clamav', + 'server' => 'tcp://127.0.0.1:3310', + 'drive' => 'local', + // Optional ClamAV Settings + // 'copy_scan' => false, + ], + + 'cloudinary' => [ + 'driver' => 'cloudinary', + 'api_key' => env('CLOUDINARY_API_KEY'), + 'api_secret' => env('CLOUDINARY_API_SECRET'), + 'cloud_name' => env('CLOUDINARY_CLOUD_NAME'), + ], + + 'dropbox' => [ + 'driver' => 'dropbox', + 'authToken' => 'your-auth-token', + ], + + 'eloquent' => [ + 'driver' => 'eloquent', + // Optional Eloquent Settings + // 'model' => '\Rokde\Flysystem\Adapter\Model\FileModel', + ], + + 'fallback' => [ + 'driver' => 'fallback', + 'main' => 'local', + 'fallback' => 's3', + ], + + 'gdrive' => [ + 'driver' => 'gdrive', + 'client_id' => 'your-client-id', + 'secret' => 'your-secret', + 'token' => 'your-token', + // Optional GDrive Settings + // 'root' => 'your-root-directory', + // 'paths_sheet' => 'your-paths-sheet', + // 'paths_cache_drive' => 'local', + ], + + 'github' => [ + 'driver' => 'github', + 'project' => 'yourname/project', + 'token' => 'your-github-token', + ], + + 'google' => [ + 'driver' => 'google', + 'project_id' => 'your-project-id', + 'bucket' => 'your-bucket', + // Optional Google Cloud Storage Settings + // 'prefix' => 'prefix/path/for/drive', + // 'url' => 'http://your.custom.cname/', + // 'key_file' => 'path/to/file.json', + // + // Alternate value if twistor/flysystem-stream-wrapper is available + // 'key_file' => 'local://path/to/file.json', + ], + + 'http' => [ + 'driver' => 'http', + 'root' => 'http://example.com', + // Optional HTTP Settings + // 'use_head' => true, + // 'context' => [], + ], + + 'onedrive' => [ + 'driver' => 'onedrive', + 'access_token' => 'your-access-token', + // Options only needed for ignited/flysystem-onedrive + // 'base_url' => 'https://api.onedrive.com/v1.0/', + // 'use_logger' => false, + // Option only used by nicolasbeauvais/flysystem-onedrive + // 'root' => 'root', + ], + + 'openstack' => [ + 'driver' => 'openstack', + 'auth_url' => 'your-auth-url', + 'region' => 'your-region', + 'user_id' => 'your-user-id', + 'password' => 'your-password', + 'project_id' => 'your-project-id', + 'container' => 'your-container', + ], + + 'oss' => [ + 'driver' => 'oss', + 'access_id' => env('OSS_ACCESS_KEY_ID'), + 'access_key' => env('OSS_ACCESS_KEY_SECRET'), + 'endpoint' => env('OSS_ENDPOINT'), + 'bucket' => env('OSS_BUCKET'), + // Optional OSS Settings + // 'prefix' => '', + // 'region' => '', // One of 'hangzhou', 'qingdao', 'beijing', 'hongkong', + // // 'shenzhen', 'shanghai', 'west-1' and 'southeast-1' + ], + + 'pdo' => [ + 'driver' => 'pdo', + 'database' => 'default', + ], + + 'qcloud' => [ + 'driver' => 'qcloud', + 'app_id' => 'your-app-id', + 'secret_id' => 'your-secret-id', + 'secret_key' => 'your-secret-key', + 'bucket' => 'your-bucket-name', + 'protocol' => 'https', + // Optional Tencent/Qcloud COS Settings + // 'domain' => 'your-domain', + // 'timeout' => 60, + // 'region' => 'gz', + ], + + 'qiniu' => [ + 'driver' => 'qiniu', + 'accessKey' => 'your-access-key', + 'secretKey' => 'your-secret-key', + 'bucket' => 'your-bucket', + 'domain' => 'xxxx.qiniudn.com', + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'runabove' => [ + 'driver' => 'runabove', + 'username' => 'your-username', + 'password' => 'your-password', + 'tenantId' => 'your-tenantId', + // Optional Runabove Settings + // 'container' => 'container', + // 'region' => 'SBG1', // One of 'SBG1', 'BHS1', and 'GRA1' + ], + + 'selectel' => [ + 'driver' => 'selectel', + 'username' => 'your-username', + 'password' => 'your-password', + 'container' => 'your-container', + // Optional Selectel Settings + // 'domain' => '', + ], + + 'sharefile' => [ + 'driver' => 'sharefile', + 'hostname' => 'sharefile.example.com', + 'client_id' => 'your-client-id', + 'secret' => 'your-secret', + 'username' => 'your-username', + 'password' => 'your-password', + ], + + 'smb' => [ + 'driver' => 'smb', + 'host' => 'smb.example.com', + 'username' => 'your-username', + 'password' => 'your-password', + 'path' => 'path/to/shared/directory/for/root', + ], + + 'temp' => [ + 'driver' => 'temp', + // Optional TempDir Settings + // 'prefix' => '', + // 'tempdir' => '/tmp', + ], + + 'upyun' => [ + 'driver' => 'upyun', + 'bucket' => 'your-bucket', + 'operator' => 'operator-name', + 'password' => 'operator-password', + 'protocol' => 'https', + 'domain' => 'example.b0.upaiyun.com', + ], + + 'yandex' => [ + 'driver' => 'yandex', + 'access_token' => 'your-access-token', + // Optional Yandex Settings + // 'prefix' => 'app:/', + ], + */ ], + /* + |-------------------------------------------------------------------------- + | Automatically Register Stream Wrappers + |-------------------------------------------------------------------------- + | + | This is a list of the filesystem "disks" to automatically register the + | stream wrappers for on application start. Any "disk" you don't want to + | register on every application load will have to be manually referenced + | before attempting stream access, as the stream wrapper is otherwise only + | registered when used. + | + */ + /* + // Disabled, pending "twistor/flysystem-stream-wrapper" dependency + 'autowrap' => [ + 'local', + ], + */ ]; diff --git a/config/firefly.php b/config/firefly.php index 3168d62dfe..ddff5a6df3 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -91,10 +91,11 @@ return [ 'is_demo_site' => false, ], 'encryption' => null === env('USE_ENCRYPTION') || env('USE_ENCRYPTION') === true, - 'version' => '4.7.7', - 'api_version' => '0.8', - 'db_version' => 5, + 'version' => '4.7.8', + 'api_version' => '0.81', + 'db_version' => 6, 'maxUploadSize' => 15242880, + 'login_provider' => env('LOGIN_PROVIDER', 'eloquent'), 'allowedMimes' => [ /* plain files */ 'text/plain', @@ -238,16 +239,25 @@ return [ 'languages' => [ // completed languages 'en_US' => ['name_locale' => 'English', 'name_english' => 'English'], - 'es_ES' => ['name_locale' => 'Español', 'name_english' => 'Spanish'], - 'de_DE' => ['name_locale' => 'Deutsch', 'name_english' => 'German'], - 'fr_FR' => ['name_locale' => 'Français', 'name_english' => 'French'], - //'id_ID' => ['name_locale' => 'Bahasa Indonesia', 'name_english' => 'Indonesian'], - 'it_IT' => ['name_locale' => 'Italiano', 'name_english' => 'Italian'], - 'nl_NL' => ['name_locale' => 'Nederlands', 'name_english' => 'Dutch'], - 'pl_PL' => ['name_locale' => 'Polski', 'name_english' => 'Polish '], - //'pt_BR' => ['name_locale' => 'Português do Brasil', 'name_english' => 'Portuguese (Brazil)'], - 'ru_RU' => ['name_locale' => 'Русский', 'name_english' => 'Russian'], - //'tr_TR' => ['name_locale' => 'Türkçe', 'name_english' => 'Turkish'], + 'es_ES' => ['name_locale' => 'Español', 'name_english' => 'Spanish'], // 2018-10-26: 96% + 'de_DE' => ['name_locale' => 'Deutsch', 'name_english' => 'German'], // 2018-10-26: 100% + 'fr_FR' => ['name_locale' => 'Français', 'name_english' => 'French'], // 2018-10-26: 100% + //'id_ID' => ['name_locale' => 'Bahasa Indonesia', 'name_english' => 'Indonesian'], // 2018-10-26: 61% :( + 'it_IT' => ['name_locale' => 'Italiano', 'name_english' => 'Italian'], // 2018-10-26: 100% + 'nl_NL' => ['name_locale' => 'Nederlands', 'name_english' => 'Dutch'], // 2018-10-26: 100% + 'pl_PL' => ['name_locale' => 'Polski', 'name_english' => 'Polish '], // 2018-10-26: 76% + 'pt_BR' => ['name_locale' => 'Português do Brasil', 'name_english' => 'Portuguese (Brazil)'], // 2018-10-26: 77% + 'ru_RU' => ['name_locale' => 'Русский', 'name_english' => 'Russian'], // 2018-10-26: 80% + //'tr_TR' => ['name_locale' => 'Türkçe', 'name_english' => 'Turkish'], // 2018-10-26: 71% + + // very far away: + //'ca_ES' => ['name_locale' => 'Catalan', 'name_english' => 'Catalan'], // 2018-10-26: 0% + //'cs_CZ' => ['name_locale' => 'Czech', 'name_english' => 'Czech'], // 2018-10-26: 8% + //'he_IL' => ['name_locale' => 'Hebrew', 'name_english' => 'Hebrew'], // 2018-10-26: 3% + //'hu_HU' => ['name_locale' => 'Hungarian', 'name_english' => 'Hungarian'], // 2018-10-26: 40% + //'nb_NO' => ['name_locale' => 'Norwegian', 'name_english' => 'Norwegian'], // 2018-10-26: 54% + //'sl_SI' => ['name_locale' => 'Slovenian', 'name_english' => 'Slovenian'], // 2018-10-26: 10% + //'uk_UA' => ['name_locale' => 'Ukranian', 'name_english' => 'Ukranian'], // 2018-10-26: 3% ], 'transactionTypesByWhat' => [ 'expenses' => ['Withdrawal'], @@ -374,23 +384,59 @@ return [ 'convert_deposit' => ConvertToDeposit::class, 'convert_transfer' => ConvertToTransfer::class, ], - 'rule-actions-text' => [ + 'context-rule-actions' => [ 'set_category', 'set_budget', 'add_tag', 'remove_tag', - 'link_to_bill', 'set_description', 'append_description', 'prepend_description', + 'set_source_account', + 'set_destination_account', + 'set_notes', + 'append_notes', + 'prepend_notes', + 'link_to_bill', + 'convert_withdrawal', + 'convert_deposit', + 'convert_transfer', ], - 'test-triggers' => [ + 'context-rule-triggers' => [ + 'from_account_starts', + 'from_account_ends', + 'from_account_is', + 'from_account_contains', + 'to_account_starts', + 'to_account_ends', + 'to_account_is', + 'to_account_contains', + 'amount_less', + 'amount_exactly', + 'amount_more', + 'description_starts', + 'description_ends', + 'description_contains', + 'description_is', + 'transaction_type', + 'category_is', + 'budget_is', + 'tag_is', + 'currency_is', + 'notes_contain', + 'notes_start', + 'notes_end', + 'notes_are', + ], + + + 'test-triggers' => [ 'limit' => 10, 'range' => 200, ], - 'default_currency' => 'EUR', - 'default_language' => 'en_US', - 'search_modifiers' => ['amount_is', 'amount', 'amount_max', 'amount_min', 'amount_less', 'amount_more', 'source', 'destination', 'category', - 'budget', 'bill', 'type', 'date', 'date_before', 'date_after', 'on', 'before', 'after'], + 'default_currency' => 'EUR', + 'default_language' => 'en_US', + 'search_modifiers' => ['amount_is', 'amount', 'amount_max', 'amount_min', 'amount_less', 'amount_more', 'source', 'destination', 'category', + 'budget', 'bill', 'type', 'date', 'date_before', 'date_after', 'on', 'before', 'after'], // tag notes has_attachments ]; diff --git a/config/import.php b/config/import.php index 5f6a724700..ff93e167ae 100644 --- a/config/import.php +++ b/config/import.php @@ -25,6 +25,7 @@ declare(strict_types=1); use FireflyIII\Import\JobConfiguration\BunqJobConfiguration; use FireflyIII\Import\JobConfiguration\FakeJobConfiguration; use FireflyIII\Import\JobConfiguration\FileJobConfiguration; +use FireflyIII\Import\JobConfiguration\FinTSJobConfiguration; use FireflyIII\Import\JobConfiguration\SpectreJobConfiguration; use FireflyIII\Import\JobConfiguration\YnabJobConfiguration; use FireflyIII\Import\Prerequisites\BunqPrerequisites; @@ -34,6 +35,7 @@ use FireflyIII\Import\Prerequisites\YnabPrerequisites; use FireflyIII\Import\Routine\BunqRoutine; use FireflyIII\Import\Routine\FakeRoutine; use FireflyIII\Import\Routine\FileRoutine; +use FireflyIII\Import\Routine\FinTSRoutine; use FireflyIII\Import\Routine\SpectreRoutine; use FireflyIII\Import\Routine\YnabRoutine; use FireflyIII\Support\Import\Routine\File\CSVProcessor; @@ -49,6 +51,7 @@ return [ 'plaid' => false, 'quovo' => false, 'yodlee' => false, + 'fints' => true, 'bad' => false, // always disabled ], // demo user can use these import providers (when enabled): @@ -61,6 +64,7 @@ return [ 'plaid' => false, 'quovo' => false, 'yodlee' => false, + 'fints' => false, ], // a normal user user can use these import providers (when enabled): 'allowed_for_user' => [ @@ -72,6 +76,7 @@ return [ 'plaid' => true, 'quovo' => true, 'yodlee' => true, + 'fints' => true, ], // some providers have pre-requisites. 'has_prereq' => [ @@ -83,6 +88,7 @@ return [ 'plaid' => true, 'quovo' => true, 'yodlee' => true, + 'fints' => false, ], // if so, there must be a class to handle them. 'prerequisites' => [ @@ -94,6 +100,7 @@ return [ 'plaid' => false, 'quovo' => false, 'yodlee' => false, + 'fints' => false, ], // some providers may need extra configuration per job 'has_job_config' => [ @@ -105,6 +112,7 @@ return [ 'plaid' => false, 'quovo' => false, 'yodlee' => false, + 'fints' => true, ], // if so, this is the class that handles it. 'configuration' => [ @@ -116,6 +124,7 @@ return [ 'plaid' => false, 'quovo' => false, 'yodlee' => false, + 'fints' => FinTSJobConfiguration::class, ], // this is the routine that runs the actual import. 'routine' => [ @@ -127,6 +136,7 @@ return [ 'plaid' => false, 'quovo' => false, 'yodlee' => false, + 'fints' => FinTSRoutine::class, ], 'options' => [ diff --git a/docker-compose.yml b/docker-compose.yml index 8175a631d0..3e0311928b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,7 +14,7 @@ services: - FF_DB_CONNECTION=pgsql - TZ=Europe/Amsterdam - APP_LOG_LEVEL=debug - image: jc5x/firefly-iii:develop + image: jc5x/firefly-iii links: - firefly_iii_db networks: @@ -34,7 +34,7 @@ services: environment: - POSTGRES_PASSWORD=firefly - POSTGRES_USER=firefly - image: "postgres:latest" + image: "postgres:10" networks: - firefly_iii_net volumes: diff --git a/public/images/logos/fints.png b/public/images/logos/fints.png new file mode 100644 index 0000000000..0024f8af41 Binary files /dev/null and b/public/images/logos/fints.png differ diff --git a/public/js/ff/budgets/index.js b/public/js/ff/budgets/index.js index ea31da14e3..fb962528d4 100644 --- a/public/js/ff/budgets/index.js +++ b/public/js/ff/budgets/index.js @@ -48,8 +48,101 @@ $(function () { } }); + // sortable! + if (typeof $(".sortable-table tbody").sortable !== "undefined") { + $(".sortable-table tbody").sortable( + { + helper: fixHelper, + items: 'tr:not(.ignore)', + stop: sortStop, + handle: '.handle', + start: function (event, ui) { + // Build a placeholder cell that spans all the cells in the row + var cellCount = 0; + $('td, th', ui.helper).each(function () { + // For each TD or TH try and get it's colspan attribute, and add that or 1 to the total + var colspan = 1; + var colspanAttr = $(this).attr('colspan'); + if (colspanAttr > 1) { + colspan = colspanAttr; + } + cellCount += colspan; + }); + + // Add the placeholder UI - note that this is the item's content, so TD rather than TR + ui.placeholder.html('
storage/logs para tener instrucciones.',
- 'two_factor_lost_fix_owner' => 'Otherwise, email the site owner, :site_owner and ask them to reset your two factor authentication y pidale a ellos restablecer su autenticacion de dos factores.',
+ 'two_factor_lost_fix_owner' => 'De lo contrario, comuníquese por mail con el dueño del sitio, :site_owner y pídale que restablezca su autenticación de dos pasos.',
'warning_much_data' => ':days días de datos pueden tomar tiempo en cargarse.',
'registered' => '¡Te has registrado con éxito!',
'Default asset account' => 'Cuenta de ingresos por defecto',
- 'no_budget_pointer' => 'You seem to have no budgets yet. You should create some on the budgets-page. Budgets can help you keep track of expenses.',
+ 'no_budget_pointer' => 'Parece que aún no tiene presupuestos. Debe crear algunos en la página presupuestos. Los presupuestos pueden ayudarle a realizar un seguimiento de los gastos.',
'Savings account' => 'Cuenta de ahorros',
'Credit card' => 'Tarjeta de crédito',
'source_accounts' => 'Cuenta(s) origen',
@@ -115,7 +115,7 @@ return [
'sum_of_income' => 'Total ingresos',
'spent_in_specific_budget' => 'Gastado en el presupuesto ":budget"',
'sum_of_expenses_in_budget' => 'Gastar todo en el presupuesto ":budget"',
- 'left_in_budget_limit' => 'Dejar de gastar acorde del presupuesto',
+ 'left_in_budget_limit' => 'Saldo para gastar acorde con el presupuesto',
'current_period' => 'Período actual',
'show_the_current_period_and_overview' => 'Mostrar el período actual y el resumen',
'pref_languages_locale' => 'Para que un idioma distinto al inglés funcione correctamente, su sistema operativo debe disponer de la información regional correcta. Si no está disponible, los datos de divisas, fechas y cantidades pueden tener un formato incorrecto.',
@@ -136,7 +136,7 @@ return [
'intro_prev_label' => 'Anterior',
'intro_skip_label' => 'Saltar',
'intro_done_label' => 'Listo',
- 'between_dates_breadcrumb' => 'Entre inicio y fin',
+ 'between_dates_breadcrumb' => 'Entre :start y :end',
'all_journals_without_budget' => 'Todas las transacciones sin presupuesto',
'journals_without_budget' => 'Transacciones sin un presupuesto',
'all_journals_without_category' => 'Todas las transacciones sin una categoría',
@@ -149,47 +149,47 @@ return [
'all_transactions' => 'Todas las transacciones',
'title_withdrawal_between' => 'Todos los gastos entre :start y :end',
'all_deposit' => 'Todos los ingresos',
- 'title_deposit_between' => 'Toda ganacia entre :start y :end',
+ 'title_deposit_between' => 'Toda ganancia entre :start y :end',
'all_transfers' => 'Todas las transferencias',
'title_transfers_between' => 'Todas las transferencias entre :start y :end',
'all_transfer' => 'Todas las transferencias',
'all_journals_for_tag' => 'Todas las transacciones etiquetadas como ":tag"',
'title_transfer_between' => 'Todas las transferencias entre :start y :end',
- 'all_journals_for_category' => 'Todas las transacciones por categoria :name',
+ 'all_journals_for_category' => 'Todas las transacciones para la categoría :name',
'all_journals_for_budget' => 'Todas las transacciones para el presupuesto :name',
- 'chart_all_journals_for_budget' => 'Recuadro de todas las transacciones para presupuesto :name',
+ 'chart_all_journals_for_budget' => 'Gráfico de todas las transacciones para presupuesto :name',
'journals_in_period_for_category' => 'Todas las transacciones para la categoría :name entre :start y :end',
- 'journals_in_period_for_tag' => 'Todas las transacciones para etiquetas :tag entre :start y :end',
- 'not_available_demo_user' => 'La característica que usted trata de acceder no es válida para usuarios del demo.',
- 'exchange_rate_instructions' => 'La cuenta de activos "@nombre" solo acepta transacciones en @moneda_nativa. Si usted desea usar @moneda_extranjera, asegurese que la cantidad en @moneda_nativa sea conocida también:',
- 'transfer_exchange_rate_instructions' => 'Cuentas de activos de origen "@source-name" solo acepta transacciones en" @source-currency. cuenta de activos de destino "dest-name" solo acepta transacciones en @dest-currency. Usted debe proveer la cantidad transferida en ambas monedas.',
+ 'journals_in_period_for_tag' => 'Todas las transacciones para etiqueta :tag entre :start y :end',
+ 'not_available_demo_user' => 'La característica a la que usted trata de acceder no está disponible para usuarios del demo.',
+ 'exchange_rate_instructions' => 'La cuenta de activos "@name" sólo acepta transacciones en @native_currency. Si usted desea usar @foreign_currency, asegúrese que la cantidad en @native_currency sea conocida también:',
+ 'transfer_exchange_rate_instructions' => 'La cuenta de activos "@source_name" solo acepta transacciones en "@source_currency". cuenta de activos de destino "@dest_name" solo acepta transacciones en @dest_currency. Usted debe proveer la cantidad correcta transferida en ambas monedas.',
'transaction_data' => 'Datos de transacción',
'invalid_server_configuration' => 'Configuración del servidor no válida',
'invalid_locale_settings' => 'FireFly III no puede formatear cantidades monetarias porque a su servidor le faltan los paquetes requeridos. Hay instrucciones de cómo hacer esto.',
'quickswitch' => 'Cambio rápido',
- 'sign_in_to_start' => 'Iniciar sesión para comenzar su sesión',
+ 'sign_in_to_start' => 'Iniciar sesión para comenzar',
'sign_in' => 'Iniciar sesión',
'register_new_account' => 'Registrar una nueva cuenta',
'forgot_my_password' => 'He perdido mi contraseña',
'problems_with_input' => 'Hubo algunos problemas con su entrada.',
'reset_password' => 'Reestablecer su contraseña',
'button_reset_password' => 'Reestablecer contraseña',
- 'reset_button' => 'Reiniciar',
- 'want_to_login' => 'Yo quiero entrar al sistema',
- 'button_register' => 'Registrar',
+ 'reset_button' => 'Restablecer',
+ 'want_to_login' => 'Quiero entrar al sistema',
+ 'button_register' => 'Registrarse',
'authorization' => 'Autorización',
- 'active_bills_only' => 'solo facturas activas',
- 'average_per_bill' => 'media por factura',
+ 'active_bills_only' => 'sólo facturas activas',
+ 'average_per_bill' => 'promedio por cuenta',
'expected_total' => 'total esperado',
// API access
'authorization_request' => 'Firefly III v:version Solicitud de autorización',
- 'authorization_request_intro' => 'El :client está solicitando permiso para acceder a su administración financiera. ¿Desea autorizar :client para acceder a estos registros?',
+ 'authorization_request_intro' => ':client está solicitando permiso para acceder a su administración financiera. ¿Desea autorizar a :client para acceder a estos registros?',
'scopes_will_be_able' => 'Esta aplicación podrá:',
'button_authorize' => 'Autorizar',
'none_in_select_list' => '(ninguno)',
- 'name_in_currency' => ':name in :currency',
- 'paid_in_currency' => 'Paid in :currency',
- 'unpaid_in_currency' => 'Unpaid in :currency',
+ 'name_in_currency' => ':name en :currency',
+ 'paid_in_currency' => 'Pagado en :currency',
+ 'unpaid_in_currency' => 'Impago en :currency',
// check for updates:
'update_check_title' => 'Ver actualizaciones',
@@ -279,7 +279,7 @@ return [
'save_rules_by_moving' => 'Guardar esta(s) regla(s) moviéndola(s) a otro grupo:',
'make_new_rule' => 'Crea una nueva regla en el grupo ":title"',
'make_new_rule_no_group' => 'Crea una nueva regla',
- 'instructions_rule_from_bill' => 'In order to match transactions to your new bill ":name", Firefly III can create a rule that will automatically be checked against any transactions you store. Please verify the details below and store the rule to have Firefly III automatically match transactions to your new bill.',
+ 'instructions_rule_from_bill' => 'A fin de hacer coincidir las transacciones con su nueva cuenta ":name", Firefly III puede crear una regla que chequeará automáticamente todas las transacciones que guardes. Por favor, verifique los detalles debajo y guarde la regla para que Firefly III automáticamente haga coincidir las transacciones con su nueva cuenta.',
'rule_is_strict' => 'regla estricta',
'rule_is_not_strict' => 'regla no estricta',
'rule_help_stop_processing' => 'Al marcar esta casilla, las reglas posteriores de este grupo no se ejecutarán.',
@@ -425,12 +425,12 @@ return [
'rule_action_link_to_bill_choice' => 'Enlace a una factura..',
'rule_action_link_to_bill' => 'Enlace a una factura ":action_value"',
'rule_action_set_notes' => 'Establecer notas para:action_value',
- 'rule_action_convert_deposit_choice' => 'Convert the transaction to a deposit',
- 'rule_action_convert_deposit' => 'Convert the transaction to a deposit from ":action_value"',
- 'rule_action_convert_withdrawal_choice' => 'Convert the transaction to a withdrawal',
- 'rule_action_convert_withdrawal' => 'Convert the transaction to a withdrawal to ":action_value"',
- 'rule_action_convert_transfer_choice' => 'Convert the transaction to a transfer',
- 'rule_action_convert_transfer' => 'Convert the transaction to a transfer with ":action_value"',
+ 'rule_action_convert_deposit_choice' => 'Convierta esta transacción en un depósito',
+ 'rule_action_convert_deposit' => 'Convierta la transacción en un depósito de ":action_value"',
+ 'rule_action_convert_withdrawal_choice' => 'Convierta esta transacción en un retiro',
+ 'rule_action_convert_withdrawal' => 'Convierta la transacción en un depósito de ":action_value"',
+ 'rule_action_convert_transfer_choice' => 'Convierta la transacción a una transferencia',
+ 'rule_action_convert_transfer' => 'Convierta la transacción a una transferencia con ":action_value"',
'rules_have_read_warning' => '¿Has leído la advertencia?',
'apply_rule_warning' => 'Advertencia: Ejecutando una regla (grupo) en una gran selección de transacciones podría tomar años, y podría exceder el tiempo de espera. Si lo hace, la regla (grupo) solo se aplicara a un subconjunto desconocido de sus transacciones. Esto podría dejar a su administración financiera en ruinas. por favor tenga cuidado.',
@@ -441,7 +441,7 @@ return [
'create_rule_for_bill' => 'Crear una nueva regla para la factura ":name"',
'create_rule_for_bill_txt' => 'Acaba de crear una nueva factura llamada ":name", ¡enhorabuena! Firefly III puede asociar de manera automágica nuevas retiradas con esta factura. Por ejemplo, siempre que pague su alquiler, la factura "alquiler" será enlazada a ese gasto. De esta manera, Firefly III puede mostrarle de forma precisa qué facturas han vencido y cuáles no. Para ello, una nueva regla debe ser creada. Si estos valores son correctos, Firefly III enlazará automáticamente el retiro correspondiente con la factura correcta. Por favor, revise los desencadenadores para ver si son correctos, y añada algunos si son incorrectos.',
'new_rule_for_bill_title' => 'Regla para la factura ":name"',
- 'new_rule_for_bill_description' => 'This rule marks transactions for bill ":name".',
+ 'new_rule_for_bill_description' => 'Esta regla marca las transacciones para la cuenta ":name".',
// tags
'store_new_tag' => 'Almacenar nueva etiqueta',
@@ -460,7 +460,7 @@ return [
'pref_home_screen_accounts' => 'Cuentas de la pantalla de inicio',
'pref_home_screen_accounts_help' => '¿Qué cuentas se deben mostrar en la página de inicio?',
'pref_view_range' => 'Rango de vision',
- 'pref_view_range_help' => 'Some charts are automatically grouped in periods. Your budgets will also be grouped in periods. What period would you prefer?',
+ 'pref_view_range_help' => 'Algunas gráficas se agrupan automáticamente en periodos. Sus presupuestos se agruparán también en períodos. ¿Qué período prefieres?',
'pref_1D' => 'Un dia',
'pref_1W' => 'Una semana',
'pref_1M' => 'Un mes',
@@ -482,7 +482,7 @@ return [
'pref_two_factor_auth_code_help' => 'Escanee el código QR con una aplicación en su teléfono como Authy o Google autenticator y ingrese el código generado.',
'pref_two_factor_auth_reset_code' => 'Reiniciar código de verificación',
'pref_two_factor_auth_disable_2fa' => 'Deshabilitar 2FA',
- '2fa_use_secret_instead' => 'If you cannot scan the QR code, feel free to use the secret instead: :secret.',
+ '2fa_use_secret_instead' => 'Si no puede escanear el código QR, no dude en utilizar el secreto en su lugar: :secret.',
'pref_save_settings' => 'Guardar la configuración',
'saved_preferences' => '¡Preferencias guardadas!',
'preferences_general' => 'General',
@@ -535,10 +535,10 @@ return [
'what_is_pw_security' => '¿Que es "verificar la seguridad de contraseña?',
'secure_pw_title' => 'Como escoger una contraseña segura',
'secure_pw_history' => 'En agosto de 2017 el conocido investigador de seguridad Troy Hunt publicó una lista de 306 millones de contraseñas robadas. Estas contraseñas fueron robadas durante intrusiones a empresas como LinkedIn, Adobe y NeoPets (y muchos más).',
- 'secure_pw_check_box' => 'By checking the box, Firefly III will send the first five characters of the SHA1 hash of your password to the website of Troy Hunt to see if it is on the list. This will stop you from using unsafe passwords as is recommended in the latest NIST Special Publication on this subject.',
+ 'secure_pw_check_box' => 'Chequeando la casilla, Firefly III enviará los cinco primeros caracteres del hash SHA1 de su contraseña a el sitio web de Troy Hunt para ver si esta en la lista. Esto le ayudará a usted a usar contraseñas mas seguras, como se recomienda en la última Publicación especial NIST sobre este tema.',
'secure_pw_sha1' => '¿Pero pensé que SHA1 estaba dañado?',
- 'secure_pw_hash_speed' => 'Yes, but not in this context. As you can read on the website detailing how they broke SHA1, it is now slightly easier to find a "collision": another digest that results in the same SHA1-hash. It now only takes 10,000 years using a single-GPU machine.',
- 'secure_pw_hash_security' => 'This digest would not be equal to your password, nor would it be useful on (a site like) Firefly III. This application does not use SHA1 for password verification. So it is safe to check this box. Your password is hashed and only the first five characters of this digest are sent over HTTPS.',
+ 'secure_pw_hash_speed' => 'Si, pero no en este contexto. Como usted puede leer en el sitio web que detalla como rompieron SHA1-hash. Ahora solo toma 10,000 años usando una máquina "single-GPU".',
+ 'secure_pw_hash_security' => 'Este sumario no será igual a su contraseña, ni será útil en (un sitio como) Firefly III. Esta aplicación no usa SHA1 para la verificación de contraseña. Así que es seguro chequear esta casilla. Su contraseña es cifrada y sólo los primeros cinco caracteres de este sumario son enviados a través de HTTPS.',
'secure_pw_should' => '¿Debo chequear la casilla?',
'secure_pw_long_password' => 'Si usted acaba de generar una contraseña larga de un solo uso para Firefly III usando algún tipo de generador de contraseñas:no.',
'secure_pw_short' => 'Si usted acaba de entrar la contraseña que siempre usa:Por favor si .',
@@ -551,6 +551,8 @@ return [
'email_changed_logout' => 'Hasta que usted verifique su dirección de correo electrónico, usted no puede iniciar sesión.',
'login_with_new_email' => 'Usted puede ahora iniciar sesión con su nueva dirección de correo electrónico.',
'login_with_old_email' => 'Usted puede ahora iniciar sesión con su vieja dirección de correo electrónico otra vez.',
+ 'login_provider_local_only' => 'This action is not available when authenticating through ":login_provider".',
+ 'delete_local_info_only' => 'Because you authenticate through ":login_provider", this will only delete local Firefly III information.',
// attachments
'nr_of_attachments' => 'Un archivo adjunto:count archivos adjuntos',
@@ -604,7 +606,7 @@ return [
'converted_to_Deposit' => 'La transacción se ha convertido en un deposito',
'converted_to_Transfer' => 'La transacción se convirtió en transferencia',
'invalid_convert_selection' => 'L a cuenta que usted ha selecionado ya esta en uso o no existe.',
- 'source_or_dest_invalid' => 'Cannot find the correct transaction details. Conversion is not possible.',
+ 'source_or_dest_invalid' => 'No pude encontrar los detalles correctos de la transacción. La conversión no es posible.',
// create new stuff:
'create_new_withdrawal' => 'Crear nuevo retiro',
@@ -624,7 +626,7 @@ return [
'cannot_delete_currency' => 'No puede eliminar :name porque todavía esta en uso.',
'deleted_currency' => 'Moneda :name eliminada',
'created_currency' => 'Moneda :name creada',
- 'could_not_store_currency' => 'Could not store the new currency.',
+ 'could_not_store_currency' => 'No se puede almacenar la nueva moneda.',
'updated_currency' => 'Moneda :name actualizada',
'ask_site_owner' => 'Por favor pregunte :owner por agregar,elimine o edite monedas.',
'currencies_intro' => 'Firefly III respalda varias monedas que usted puede establecer y habilitar aquí.',
@@ -659,11 +661,11 @@ return [
'available_amount_indication' => 'Use estos montos para obtener una indicación de cual podría ser el presupuesto total.',
'suggested' => 'Sugerido',
'average_between' => 'Promedio entre :start y :end',
- 'over_budget_warn' => ' Normally you budget about :amount per day. This is :over_amount per day.',
+ 'over_budget_warn' => ' Normalmente usas de tu presupuesto, cerca de :amount por día. Se trata de :over_amount por día.',
// bills:
- 'match_between_amounts' => 'Bill matches transactions between :low and :high.',
- 'bill_related_rules' => 'Rules related to this bill',
+ 'match_between_amounts' => 'La cuenta iguala transacciones entre :low y :high.',
+ 'bill_related_rules' => 'Reglas relacionadas con esta cuenta',
'repeats' => 'Repeticiones',
'connected_journals' => 'Transacciones conectadas',
'auto_match_on' => 'Automáticamente igualado por Firefly III',
@@ -673,24 +675,24 @@ return [
'deleted_bill' => 'Eliminar factura ":name"',
'edit_bill' => 'Editar factura ":name"',
'more' => 'Mas',
- 'rescan_old' => 'Run rules again, on all transactions',
+ 'rescan_old' => 'Ejecutar las reglas de nuevo, en todas las transacciones',
'update_bill' => 'Actualizar factura',
'updated_bill' => 'Actualizar factura ":name"',
'store_new_bill' => 'Almacenar nueva factura',
'stored_new_bill' => 'Almacenar nueva factura ":name"',
'cannot_scan_inactive_bill' => 'Las facturas inactivas no pueden ser escaneadas.',
- 'rescanned_bill' => 'Rescanned everything, and linked :total transaction(s) to the bill.',
+ 'rescanned_bill' => 'Se reescaneó todo y se linkearon :total transaccion(es) a la cuenta.',
'average_bill_amount_year' => 'Monto promedio de la factura (:year)',
'average_bill_amount_overall' => 'Monto promedio de la factura (sobretodo)',
'bill_is_active' => 'Bill esta activo',
'bill_expected_between' => 'Esperado entre :start y :end',
'bill_will_automatch' => 'Bill se vinculara automáticamente a transacciones coincidentes',
'skips_over' => 'salta sobre',
- 'bill_store_error' => 'An unexpected error occurred while storing your new bill. Please check the log files',
+ 'bill_store_error' => 'Se ha producido un error inesperado mientras se almacenaba su nueva factura. Por favor, compruebe los archivos de registro',
'list_inactive_rule' => 'regla inactiva',
// accounts:
- 'account_missing_transaction' => 'Account #:id (":name") cannot be viewed directly, but Firefly is missing redirect information.',
+ 'account_missing_transaction' => 'Cuenta #:id (":name") no puede ser vista directamente, Firefly perdió información de redirección.',
'details_for_asset' => 'Detalles para la cuenta de activos ":name"',
'details_for_expense' => 'Detalles para la cuenta de gastos ":name"',
'details_for_revenue' => 'Detalles para la cuenta de ingresos ":name"',
@@ -704,18 +706,18 @@ return [
'delete_asset_account' => 'Eliminar cuenta de activo ":name"',
'delete_expense_account' => 'Eliminar cuenta de gastos ":name"',
'delete_revenue_account' => 'Eliminar cuenta de ganancias ":name"',
- 'delete_liabilities_account' => 'Delete liability ":name"',
+ 'delete_liabilities_account' => 'Eliminar pasivo ":name"',
'asset_deleted' => 'Se ha eliminado exitosamente la cuenta de activos ":name"',
'expense_deleted' => 'Exitosamente eliminado la cuenta de gastos ":name"',
'revenue_deleted' => 'Exitosamente eliminado cuenta de ganacias ":name"',
'update_asset_account' => 'Actualizar cuenta de activos',
- 'update_liabilities_account' => 'Update liability',
+ 'update_liabilities_account' => 'Actualizar pasivo',
'update_expense_account' => 'Actualizar cuenta de gastos',
'update_revenue_account' => 'Actualizar cuenta de ingresos',
'make_new_asset_account' => 'Crear nueva cuenta de activo',
'make_new_expense_account' => 'Crear nueva cuenta de gastos',
'make_new_revenue_account' => 'Crear nueva cuenta de ingresos',
- 'make_new_liabilities_account' => 'Create a new liability',
+ 'make_new_liabilities_account' => 'Crear un nuevo pasivo',
'asset_accounts' => 'Cuenta de activos',
'expense_accounts' => 'Cuentas de gastos',
'revenue_accounts' => 'Cuentas de ingresos',
@@ -723,7 +725,7 @@ return [
'Cash account' => 'Cuenta de efectivo',
'liabilities_accounts' => 'Pasivos',
'reconcile_account' => 'Reconciliar cuenta ":account"',
- 'overview_of_reconcile_modal' => 'Overview of reconciliation',
+ 'overview_of_reconcile_modal' => 'Resumen de reconciliación',
'delete_reconciliation' => 'Eliminar reconciliacion',
'update_reconciliation' => 'Actualizar reconciliacion',
'amount_cannot_be_zero' => 'El monto no puede ser cero',
@@ -755,7 +757,7 @@ return [
'select_more_than_one_category' => 'Por favor seleccione mas de una categoría',
'select_more_than_one_budget' => 'Por favor seleccione mas de un presupuesto',
'select_more_than_one_tag' => 'Por favor seleccione mas de una etiqueta',
- 'account_default_currency' => 'This will be the default currency associated with this account.',
+ 'account_default_currency' => 'Esta será la moneda por defecto asociada a esta cuenta.',
'reconcile_has_more' => 'Su libro principal de Firefly III tiene mas dinero de lo que su banco afirma debería tener, Hay varias opciones. por favor elija que hacer. luego, presione "confirmar reconciliación".',
'reconcile_has_less' => 'Su libro principal de Firefly III tiene menos dinero de el que su banco dice que usted debería tener. hay varias opciones. Por favor elija que hacer, luego presione " Confirmar reconciliación".',
'reconcile_is_equal' => 'Su libro principal de Firefly III y sus estados de cuenta coinciden. No hay nada que hacer. por favor presione "Confirmar reconciliación" para confirmar su entrada.',
@@ -777,6 +779,7 @@ return [
'interest_calc_daily' => 'Por dia',
'interest_calc_monthly' => 'Por mes',
'interest_calc_yearly' => 'Por año',
+ 'initial_balance_account' => 'Initial balance account of :name',
// categories:
'new_category' => 'Nueva categoría',
@@ -823,7 +826,7 @@ return [
'no_bulk_tags' => 'No actualizar etiqueta(s)',
'bulk_edit' => 'Edición masiva',
'cannot_edit_other_fields' => 'Usted no puede editar en masa otros campos ademas de los que están aquí, porque no hay espacio para mostrarlos. siga el enlace y editelo uno a uno, si usted necesita editar estos campos.',
- 'no_budget' => '(no budget)',
+ 'no_budget' => '(sin presupuesto)',
'no_budget_squared' => '(sin presupuesto)',
'perm-delete-many' => 'Eliminar muchos elementos de una sola vez puede ser perturbador. Por favor sea cuidadoso.',
'mass_deleted_transactions_success' => 'Eliminar :amount transacción (es).',
@@ -834,29 +837,29 @@ return [
'opt_group_savingAsset' => 'Cuenta de ahorros',
'opt_group_sharedAsset' => 'Cuenta de activos compartidas',
'opt_group_ccAsset' => 'Tarjetas de credito',
- 'opt_group_cashWalletAsset' => 'Cash wallets',
- 'opt_group_l_Loan' => 'Liability: Loan',
- 'opt_group_l_Debt' => 'Liability: Debt',
- 'opt_group_l_Mortgage' => 'Liability: Mortgage',
- 'opt_group_l_Credit card' => 'Liability: Credit card',
+ 'opt_group_cashWalletAsset' => 'Billeteras de efectivo',
+ 'opt_group_l_Loan' => 'Pasivo: Préstamo',
+ 'opt_group_l_Debt' => 'Pasivo: Deuda',
+ 'opt_group_l_Mortgage' => 'Pasivo: Hipoteca',
+ 'opt_group_l_Credit card' => 'Pasivo: Tarjeta de crédito',
'notes' => 'Notas',
- 'unknown_journal_error' => 'Could not store the transaction. Please check the log files.',
+ 'unknown_journal_error' => 'No se pudo guardar la transacción. Por favor, revise los archivos de registro.',
// new user:
'welcome' => 'Bienvenido a Firefly III!',
'submit' => 'Enviar',
- 'submit_yes_really' => 'Submit (I know what I\'m doing)',
+ 'submit_yes_really' => 'Enviar (Se lo que estoy haciendo)',
'getting_started' => 'Comenzando',
'to_get_started' => 'Es bueno ver que usted ha instalado con éxito Firefly III. Para comenzar con esta regla, por favor ingrese el nombre de su banco y el saldo de su cuenta de cheques principal. No se preocupe todavía si tiene varias cuentas. usted puede agregarlas luego. Es solo que Firefly III necesita algo para empezar.',
'savings_balance_text' => 'Firefly II creara automáticamente una cuenta de ahorros para usted. Por
defecto. No abra dinero en su cuenta de ahorros. pero si le dice a Firefly III el saldo se almacenara como tal.',
'finish_up_new_user' => 'Eso es! Usted puede continuar presionando. Usted sera llevado al indice de Firefly III.',
'stored_new_accounts_new_user' => 'Hurra! Sus nuevas cuentas han sido almacenadas.',
- 'set_preferred_language' => 'If you prefer to use Firefly III in another language, please indicate so here.',
+ 'set_preferred_language' => 'Si prefiere usar Firefly II en otro lenguaje, por favor indíquelo aquí.',
'language' => 'Idioma',
- 'new_savings_account' => ':bank_name savings account',
- 'cash_wallet' => 'Cash wallet',
- 'currency_not_present' => 'If the currency you normally use is not listed do not worry. You can create your own currencies under Options > Currencies.',
+ 'new_savings_account' => ':bank_name Cuenta de ahorros',
+ 'cash_wallet' => 'Billetera de efectivo',
+ 'currency_not_present' => 'Si la moneda que normalmente utiliza no se encuentra listada, no se preocupe. Puede crear su propia moneda desde Opciones>Monedas.',
// home page:
'yourAccounts' => 'Tus cuentas',
@@ -867,7 +870,7 @@ return [
'newTransfer' => 'Nueva transferencia',
'bills_to_pay' => 'Facturas por pagar',
'per_day' => 'Por dia',
- 'left_to_spend_per_day' => 'Dejar para gastar por dia',
+ 'left_to_spend_per_day' => 'Saldo para gastar por día',
'bills_paid' => 'Facturas pagadas',
// menu and titles, should be recycled as often as possible:
@@ -918,9 +921,9 @@ return [
'monthly' => 'Mensual',
'profile' => 'Perfil',
'errors' => 'Errores',
- 'debt_start_date' => 'Start date of debt',
- 'debt_start_amount' => 'Start amount of debt',
- 'debt_start_amount_help' => 'Please enter the original amount of this liability as a positive number. You may also enter the current amount. Make sure to edit the date below to match.',
+ 'debt_start_date' => 'Fecha de inicio de deuda',
+ 'debt_start_amount' => 'Cantidad inicial de la deuda',
+ 'debt_start_amount_help' => 'Introduce la cantidad original de este pasivo como un número positivo. También puede ingresar la cantidad actual. Asegúrese de editar la fecha de abajo para que coincida.',
'store_new_liabilities_account' => 'Store new liability',
'edit_liabilities_account' => 'Edit liability ":name"',
@@ -1013,15 +1016,16 @@ return [
'account_role_sharedAsset' => 'Compartir cuenta de ingresos',
'account_role_savingAsset' => 'Cuentas de ahorros',
'account_role_ccAsset' => 'Tarjeta de Crédito',
- 'account_role_cashWalletAsset' => 'Cash wallet',
+ 'account_role_cashWalletAsset' => 'Billetera de efectivo',
'budget_chart_click' => 'Por favor de click el nombre del presupuesto en la tabla de arriba para ver el cuadro.',
'category_chart_click' => 'Por favor de click en el nombre de categoría en la tabla de arriba para ver el cuadro.',
'in_out_accounts' => 'Ganado y gastado por combinación',
'in_out_per_category' => 'Ganado y gastado por categoría',
'out_per_budget' => 'Gasto por presupuesto',
'select_expense_revenue' => 'Seleccione cuenta de gastos/ingresos',
- 'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.',
- 'sum_in_default_currency' => 'The sum will always be in your default currency.',
+ 'multi_currency_report_sum' => 'Como esta lista contiene cuentas con múltiples monedas, la(s) suma(s) que veas puede no tener sentido. El reporte siempre figurará en tu moneda predeterminada.',
+ 'sum_in_default_currency' => 'La suma siempre estará en tu moneda predeterminada.',
+ 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.',
// charts:
'chart' => 'Grafico',
@@ -1058,13 +1062,13 @@ return [
'left_for_piggy_banks' => 'Apartado para las huchas',
'sum_of_piggy_banks' => 'Total de huchas',
'saved_so_far' => 'Guardado hasta el momento',
- 'left_to_save' => 'Izquierda para guardar',
+ 'left_to_save' => 'Saldo para guardar',
'suggested_amount' => 'Sugerir monto mensual para guardar',
'add_money_to_piggy_title' => 'Añadir dinero a la alcancía ":name"',
'remove_money_from_piggy_title' => 'Quitar dinero de la alcancía ":name"',
'add' => 'Añadir',
'no_money_for_piggy' => 'Usted no tiene dinero para colocar en esta alcancía.',
- 'suggested_savings_per_month' => 'Suggested per month',
+ 'suggested_savings_per_month' => 'Sugerido por mes',
'remove' => 'Eliminar',
'max_amount_add' => 'La cantidad máxima que usted puede agregar es',
@@ -1076,7 +1080,7 @@ return [
'events' => 'Eventos',
'target_amount' => 'Cantidad objetivo',
'start_date' => 'Fecha de inicio',
- 'no_start_date' => 'No start date',
+ 'no_start_date' => 'Sin fecha de inicio',
'target_date' => 'Fecha objetivo',
'no_target_date' => 'Sin fecha de objetivo',
'table' => 'Mesa',
@@ -1108,7 +1112,7 @@ return [
'instance_configuration' => 'Configuracion',
'firefly_instance_configuration' => 'Opciones de configuración de Firefly III',
'setting_single_user_mode' => 'Modo de usuario único',
- 'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you uncheck this box, others can use your instance as well, assuming they can reach it (when it is connected to the internet).',
+ 'setting_single_user_mode_explain' => 'Por defecto, Firefly III solo acepta un (1) registro: Usted. Esta es una medida de seguridad que impide que otros utilicen su instancia a menos que usted lo permita. Los registros futuros están bloqueados. Cuando usted desbloquee esta casilla, otros pueden usar su instancia también, suponiendo que puedan alcanzarla ( cuando este conectada a Internet).',
'store_configuration' => 'Configuración de tienda',
'single_user_administration' => 'Administración de usuarios para :email',
'edit_user' => 'Editar usuario :email',
@@ -1163,7 +1167,7 @@ return [
'invalid_link_selection' => 'No se puede vincular esta transacción',
'journals_linked' => 'Las transacciones están vinculadas.',
'journals_error_linked' => 'Estas transacciones ya están vinculadas.',
- 'journals_link_to_self' => 'You cannot link a transaction to itself',
+ 'journals_link_to_self' => 'No puede relacionar una transacción consigo misma',
'journal_links' => 'Enlaces de transacciones',
'this_withdrawal' => 'Este retiro',
'this_deposit' => 'Este deposito',
@@ -1176,16 +1180,16 @@ return [
'deleted_link' => 'Enlace borrado',
// link translations:
- 'Paid_name' => 'Paid',
- 'Refund_name' => 'Refund',
- 'Reimbursement_name' => 'Reimbursement',
- 'Related_name' => 'Related',
+ 'Paid_name' => 'Pagado',
+ 'Refund_name' => 'Reembolso',
+ 'Reimbursement_name' => 'Reembolso',
+ 'Related_name' => 'Relacionado',
'relates to_inward' => 'relacionado con',
'is (partially) refunded by_inward' => 'es (parcialmente) es devuelto por',
'is (partially) paid for by_inward' => 'es(parcialmente) pagado por',
'is (partially) reimbursed by_inward' => 'es(parcialmente) reembolsado por',
- 'inward_transaction' => 'Inward transaction',
- 'outward_transaction' => 'Outward transaction',
+ 'inward_transaction' => 'Transacción interna',
+ 'outward_transaction' => 'Transacción externa',
'relates to_outward' => 'relacionado con',
'(partially) refunds_outward' => '(parcialmente) reembolso',
'(partially) pays for_outward' => '(parcialmente) paga por',
@@ -1203,13 +1207,13 @@ return [
'cannot_edit_multiple_dest' => 'Usted no puede editar transacciones divididas #:id con descripción ":description" porque contiene múltiples cuentas destino.',
'cannot_edit_reconciled' => 'Usted no puede editar transacciones #:id con descripción ":description" porque se ha marcado como reconciliado.',
'cannot_edit_opening_balance' => 'Usted no puede editar el balance de apertura de una cuenta.',
- 'no_edit_multiple_left' => 'Usted ha seleccionado transacciones no validas para editar.',
+ 'no_edit_multiple_left' => 'Usted no ha seleccionado transacciones válidas para editar.',
'cannot_convert_split_journal' => 'No se puede convertir una transacción dividida',
// Import page (general strings only)
- 'import_index_title' => 'Import transactions into Firefly III',
+ 'import_index_title' => 'Importar transacciones a Firefly III',
'import_data' => 'Importar datos',
- 'import_transactions' => 'Import transactions',
+ 'import_transactions' => 'Importar transacciones',
// sandstorm.io errors and messages:
'sandstorm_not_available' => 'Esta función no esta disponible cuando usted esta utilizando Firefly III dentro de un ambiente Sandstorm.io.',
@@ -1227,10 +1231,10 @@ return [
'no_accounts_intro_revenue' => 'Usted no tiene cuentas de ingresos aun. Cuentas de ingresos son los lugares donde usted recibe dinero, como su empleador.',
'no_accounts_imperative_revenue' => 'Las cuentas de ganancias se crean automáticamente cuando usted crea transacciones, pero usted puede crear una manualmente también, si usted quiere. vamos a crear una ahora:',
'no_accounts_create_revenue' => 'Crear una cuenta de ingresos',
- 'no_accounts_title_liabilities' => 'Let\'s create a liability!',
- 'no_accounts_intro_liabilities' => 'You have no liabilities yet. Liabilities are the accounts that register your credit card(s), (student) loans and other debts.',
- 'no_accounts_imperative_liabilities' => 'You don\'t have to use this feature, but it can be useful if you want to keep track of these things.',
- 'no_accounts_create_liabilities' => 'Create a liability',
+ 'no_accounts_title_liabilities' => '¡Vamos a crear un pasivo!',
+ 'no_accounts_intro_liabilities' => 'Usted aún no tiene pasivos. Los pasivos son cuentas que registran sus tarjeta(s) de crédito, préstamos y otros débitos.',
+ 'no_accounts_imperative_liabilities' => 'No necesita usar esta función pero, puede ser muy útil si desea hacer un seguimiento de estas cosas.',
+ 'no_accounts_create_liabilities' => 'Crear un pasivo',
'no_budgets_title_default' => 'Vamos a crear un presupuesto',
'no_budgets_intro_default' => 'Todavía no tienes presupuestos. Los presupuestos se usan para organizar tus gastos en grupos, a los que puedes asignar un tope para limitarlos.',
'no_budgets_imperative_default' => 'Los presupuestos son las herramientas básicas de la gestión financiera. Vamos a crear uno ahora:',
@@ -1265,68 +1269,68 @@ return [
'no_bills_create_default' => 'Crear una factura',
// recurring transactions
- 'recurrences' => 'Recurring transactions',
- 'no_recurring_title_default' => 'Let\'s create a recurring transaction!',
- 'no_recurring_intro_default' => 'You have no recurring transactions yet. You can use these to make Firefly III automatically create transactions for you.',
- 'no_recurring_imperative_default' => 'This is a pretty advanced feature but it can be extremely useful. Make sure you read the documentation (?)-icon in the top right corner) before you continue.',
- 'no_recurring_create_default' => 'Create a recurring transaction',
- 'make_new_recurring' => 'Create a recurring transaction',
+ 'recurrences' => 'Transacciones Recurrentes',
+ 'no_recurring_title_default' => 'Vamos a crear una transacción recurrente!',
+ 'no_recurring_intro_default' => 'Usted no tiene transacciones recurrentes aún. Puede usar esto para hacer que Firefly III cree transacciones por usted.',
+ 'no_recurring_imperative_default' => 'Esta es una característica bastante avanzada pero, puede ser extremadamente útil. Asegúrese de haber leído la documentación (?- Icono en la esquina derecha) antes de continuar.',
+ 'no_recurring_create_default' => 'Crear una transacción recurrente',
+ 'make_new_recurring' => 'Crear una transacción recurrente',
'recurring_daily' => 'Diario',
'recurring_weekly' => 'Cada semana los :weekday',
- 'recurring_monthly' => 'Every month on the :dayOfMonth(st/nd/rd/th) day',
- 'recurring_ndom' => 'Every month on the :dayOfMonth(st/nd/rd/th) :weekday',
+ 'recurring_monthly' => 'Todos los meses el día: :dayOfMonth(st/nd/rd/th)',
+ 'recurring_ndom' => 'Todos los meses el día: :dayOfMonth(st/nd/rd/th) :weekday',
'recurring_yearly' => 'Cada año en :date',
- 'overview_for_recurrence' => 'Overview for recurring transaction ":title"',
+ 'overview_for_recurrence' => 'Resumen de transacción recurrente ":title"',
'warning_duplicates_repetitions' => 'En algunas ocasiones, las fechas aparecen duplicadas en esta lista. Esto puede ocurrir porque múltiples repeticiones chocan. Firefly III siempre generará una transacción por día.',
'created_transactions' => 'Transacciones relacionadas',
'expected_Withdrawals' => 'Retiradas previstas',
- 'expected_Deposits' => 'Expected deposits',
+ 'expected_Deposits' => 'Depósitos previstos',
'expected_Transfers' => 'Transferencias previstas',
'created_Withdrawals' => 'Retiradas creadas',
- 'created_Deposits' => 'Created deposits',
+ 'created_Deposits' => 'Depósitos creados',
'created_Transfers' => 'Transferencias creadas',
- 'created_from_recurrence' => 'Created from recurring transaction ":title" (#:id)',
- 'recurring_never_cron' => 'It seems the cron job that is necessary to support recurring transactions has never run. This is of course normal when you have just installed Firefly III, but this should be something to set up as soon as possible. Please check out the help-pages using the (?)-icon in the top right corner of the page.',
- 'recurring_cron_long_ago' => 'It looks like it has been more than 36 hours since the cron job to support recurring transactions has fired for the last time. Are you sure it has been set up correctly? Please check out the help-pages using the (?)-icon in the top right corner of the page.',
+ 'created_from_recurrence' => 'Creado a partir de transacción recurrente ":title" (#:id)',
+ 'recurring_never_cron' => 'Al parecer, el cron job necesario para realizar las transacciones recurrentes nunca se ejecutó. Esto es normal por supuesto, cuando acabas de instalar Firefly III pero, es algo que deberías configurar lo antes posible. Por favor, revisa las páginas de ayuda usando el ícono-(?) en la esquina derecha de la página.',
+ 'recurring_cron_long_ago' => 'Aparentemente han pasado mas de 36 horas desde que el cron job para dar soporte a las transacciones recurrentes se ha disparado por última vez. Está usted seguro que lo ha configurado correctamente? Por favor, revise las páginas de ayuda usando el ícono-(?) en la esquina derecha de la página.',
'recurring_meta_field_tags' => 'Etiquetas',
'recurring_meta_field_notes' => 'Notas',
'recurring_meta_field_bill_id' => 'Factura',
'recurring_meta_field_piggy_bank_id' => 'Hucha',
'create_new_recurrence' => 'Crear transacción recurrente',
- 'help_first_date' => 'Indicate the first expected recurrence. This must be in the future.',
- 'help_first_date_no_past' => 'Indicate the first expected recurrence. Firefly III will not create transactions in the past.',
+ 'help_first_date' => 'Indique la primera recurrencia esperada. Esto debe ser en un tiempo futuro.',
+ 'help_first_date_no_past' => 'Indique la primera recurrencia esperada. Firefly III no creará transacciones en el pasado.',
'no_currency' => '(sin moneda)',
- 'mandatory_for_recurring' => 'Mandatory recurrence information',
- 'mandatory_for_transaction' => 'Mandatory transaction information',
- 'optional_for_recurring' => 'Optional recurrence information',
- 'optional_for_transaction' => 'Optional transaction information',
- 'change_date_other_options' => 'Change the "first date" to see more options.',
- 'mandatory_fields_for_tranaction' => 'The values here will end up in the transaction(s) being created',
- 'click_for_calendar' => 'Click here for a calendar that shows you when the transaction would repeat.',
- 'repeat_forever' => 'Repeat forever',
+ 'mandatory_for_recurring' => 'Información de recurrencia obligatorio',
+ 'mandatory_for_transaction' => 'Información obligatoria de transacción',
+ 'optional_for_recurring' => 'Información de recurrencia opcional',
+ 'optional_for_transaction' => 'Información de transacción opcional',
+ 'change_date_other_options' => 'Cambie la "primera fecha" para ver más opciones.',
+ 'mandatory_fields_for_tranaction' => 'Los valores de aquí van a terminar en las transaccion(es) que se están creando',
+ 'click_for_calendar' => 'Haga clic aquí para ver un calendario que le muestra cuando se repetirá la transacción.',
+ 'repeat_forever' => 'Repetir por siempre',
'repeat_until_date' => 'Repetir hasta',
- 'repeat_times' => 'Repeat a number of times',
- 'recurring_skips_one' => 'Every other',
- 'recurring_skips_more' => 'Skips :count occurrences',
- 'store_new_recurrence' => 'Store recurring transaction',
- 'stored_new_recurrence' => 'Recurring transaction ":title" stored successfully.',
- 'edit_recurrence' => 'Edit recurring transaction ":title"',
+ 'repeat_times' => 'Repetir un número de veces',
+ 'recurring_skips_one' => 'Intercalado',
+ 'recurring_skips_more' => 'Saltea :count ocurrencias',
+ 'store_new_recurrence' => 'Almacenar transacción recurrente',
+ 'stored_new_recurrence' => 'Transacción recurrente ":title" almacenada con éxito.',
+ 'edit_recurrence' => 'Editar transacción recurrente ":title"',
'recurring_repeats_until' => 'Repetir hasta :date',
- 'recurring_repeats_forever' => 'Repeats forever',
- 'recurring_repeats_x_times' => 'Repeats :count time(s)',
- 'update_recurrence' => 'Update recurring transaction',
- 'updated_recurrence' => 'Updated recurring transaction ":title"',
- 'recurrence_is_inactive' => 'This recurring transaction is not active and will not generate new transactions.',
- 'delete_recurring' => 'Delete recurring transaction ":title"',
- 'new_recurring_transaction' => 'New recurring transaction',
- 'help_weekend' => 'What should Firefly III do when the recurring transaction falls on a Saturday or Sunday?',
- 'do_nothing' => 'Just create the transaction',
- 'skip_transaction' => 'Skip the occurence',
- 'jump_to_friday' => 'Create the transaction on the previous Friday instead',
- 'jump_to_monday' => 'Create the transaction on the next Monday instead',
- 'will_jump_friday' => 'Will be created on Friday instead of the weekends.',
- 'will_jump_monday' => 'Will be created on Monday instead of the weekends.',
- 'except_weekends' => 'Except weekends',
- 'recurrence_deleted' => 'Recurring transaction ":title" deleted',
+ 'recurring_repeats_forever' => 'Repetir por siempre',
+ 'recurring_repeats_x_times' => 'Repite :count veces',
+ 'update_recurrence' => 'Actualizar transacción recurrente',
+ 'updated_recurrence' => 'Transacción recurrente ":title" actualizada',
+ 'recurrence_is_inactive' => 'Esta transacción recurrente no está activa y no generará nuevas transacciones.',
+ 'delete_recurring' => 'Borrar Transacción Recurrente ":title"',
+ 'new_recurring_transaction' => 'Nueva Transacción Recurrente',
+ 'help_weekend' => '¿Qué debe hacer Firefly III cuando la transacción recurrente cae el sábado o el domingo?',
+ 'do_nothing' => 'Sólo crear la transacción',
+ 'skip_transaction' => 'Saltar la ocurrencia',
+ 'jump_to_friday' => 'Crear la transacción el viernes anterior en su lugar',
+ 'jump_to_monday' => 'Crear la transacción el lunes próximo en su lugar',
+ 'will_jump_friday' => 'Se creará el viernes en lugar de los fines de semana.',
+ 'will_jump_monday' => 'Se creará el lunes en lugar de los fines de semana.',
+ 'except_weekends' => 'Excluir los fines de semana',
+ 'recurrence_deleted' => 'Transacción recurrente ":title" eliminada',
];
diff --git a/resources/lang/es_ES/form.php b/resources/lang/es_ES/form.php
index ef2be7dd06..4fa3a971a6 100644
--- a/resources/lang/es_ES/form.php
+++ b/resources/lang/es_ES/form.php
@@ -191,6 +191,7 @@ return [
'password_confirmation' => 'Contraseña (otra vez)',
'blocked' => '¿Está bloqueado?',
'blocked_code' => 'Razón del bloqueo',
+ 'login_name' => 'Login',
// import
'apply_rules' => 'Apply rules',
@@ -222,6 +223,16 @@ return [
'public_key' => 'Llave pública',
'country_code' => 'Código del país',
'provider_code' => 'Banco o proveedor de datos',
+ 'fints_url' => 'FinTS API URL',
+ 'fints_port' => 'Port',
+ 'fints_bank_code' => 'Bank code',
+ 'fints_username' => 'Username',
+ 'fints_password' => 'PIN / Password',
+ 'fints_account' => 'FinTS account',
+ 'local_account' => 'Firefly III account',
+ 'from_date' => 'Date from',
+ 'to_date' => 'Date to',
+
'due_date' => 'Fecha de vencimiento',
'payment_date' => 'Fecha de pago',
diff --git a/resources/lang/es_ES/import.php b/resources/lang/es_ES/import.php
index f3a339fc14..61c0910599 100644
--- a/resources/lang/es_ES/import.php
+++ b/resources/lang/es_ES/import.php
@@ -25,287 +25,298 @@ declare(strict_types=1);
return [
// ALL breadcrumbs and subtitles:
'index_breadcrumb' => 'Importar datos a Firefly III',
- 'prerequisites_breadcrumb_fake' => 'Requisitos para el proveedor de importación falso',
- 'prerequisites_breadcrumb_spectre' => 'Requisitos previos para Spectre',
- 'prerequisites_breadcrumb_bunq' => 'Requisitos previos para bunq',
- 'prerequisites_breadcrumb_ynab' => 'Prerequisites for YNAB',
+ 'prerequisites_breadcrumb_fake' => 'Pre requisitos para el proveedor de importación falso',
+ 'prerequisites_breadcrumb_spectre' => 'Pre requisitos para Spectre',
+ 'prerequisites_breadcrumb_bunq' => 'Pre requisitos para bunq',
+ 'prerequisites_breadcrumb_ynab' => 'Pre requisitos para YNAB',
'job_configuration_breadcrumb' => 'Configuración para ":key"',
- 'job_status_breadcrumb' => 'Import status for ":key"',
- 'cannot_create_for_provider' => 'Firefly III cannot create a job for the ":provider"-provider.',
- 'disabled_for_demo_user' => 'disabled in demo',
+ 'job_status_breadcrumb' => 'Estado de importación de ":key"',
+ 'cannot_create_for_provider' => 'Firefly III no puede crear un trabajo para el ":provider"-proveedor.',
+ 'disabled_for_demo_user' => 'deshabilitado en demo',
// index page:
'general_index_title' => 'Importar un archivo',
- 'general_index_intro' => 'Welcome to Firefly III\'s import routine. There are a few ways of importing data into Firefly III, displayed here as buttons.',
+ 'general_index_intro' => 'Bienvenido a la rutina de importación de Firefly III. Hay algunas formas de importar datos a Firefly III, que se muestran aquí como botones.',
// import provider strings (index):
- 'button_fake' => 'Fake an import',
+ 'button_fake' => 'Simular una importación',
'button_file' => 'Importar un archivo',
'button_bunq' => 'Importar desde bunq',
'button_spectre' => 'Importar usando Spectre',
'button_plaid' => 'Importar usando Plaid',
'button_yodlee' => 'Importar usando Yodlee',
'button_quovo' => 'Importar usando Quovo',
- 'button_ynab' => 'Import from You Need A Budget',
+ 'button_ynab' => 'Importar desde Usted Necesita Un Presupuesto',
+ 'button_fints' => 'Importar usando FinTS',
+
+
// global config box (index)
- 'global_config_title' => 'Global import configuration',
- 'global_config_text' => 'In the future, this box will feature preferences that apply to ALL import providers above.',
+ 'global_config_title' => 'Configuración global de importación',
+ 'global_config_text' => 'En el futuro, este cuadro contará con preferencias que se aplican a todos los proveedores de importación anterior.',
// prerequisites box (index)
'need_prereq_title' => 'Importar requisitos previos',
- 'need_prereq_intro' => 'Some import methods need your attention before they can be used. For example, they might require special API keys or application secrets. You can configure them here. The icon indicates if these prerequisites have been met.',
- 'do_prereq_fake' => 'Prerequisites for the fake provider',
- 'do_prereq_file' => 'Prerequisites for file imports',
- 'do_prereq_bunq' => 'Prerequisites for imports from bunq',
- 'do_prereq_spectre' => 'Prerequisites for imports using Spectre',
- 'do_prereq_plaid' => 'Prerequisites for imports using Plaid',
- 'do_prereq_yodlee' => 'Prerequisites for imports using Yodlee',
- 'do_prereq_quovo' => 'Prerequisites for imports using Quovo',
- 'do_prereq_ynab' => 'Prerequisites for imports from YNAB',
+ 'need_prereq_intro' => 'Algunos métodos de importación necesitan su atención antes de que se pueden utilizar. Por ejemplo, podrían requerir claves API especiales o secretos de aplicación. Usted puede configurarlos aquí. El icono indica si se han cumplido los requisitos previos.',
+ 'do_prereq_fake' => 'Pre requisitos para el proveedor de falso',
+ 'do_prereq_file' => 'Pre requisitos para las importaciones de archivos',
+ 'do_prereq_bunq' => 'Pre requisitos para las importaciones desde bunq',
+ 'do_prereq_spectre' => 'Pre requisitos para las importaciones usando Spectre',
+ 'do_prereq_plaid' => 'Pre requisitos para las importaciones usando Plaid',
+ 'do_prereq_yodlee' => 'Pre requisitos para las importaciones usando Yodlee',
+ 'do_prereq_quovo' => 'Pre requisitos para las importaciones usando Quovo',
+ 'do_prereq_ynab' => 'Pre requisitos para las importaciones desde YNAB',
// provider config box (index)
- 'can_config_title' => 'Import configuration',
- 'can_config_intro' => 'Some import methods can be configured to your liking. They have extra settings you can tweak.',
- 'do_config_fake' => 'Configuration for the fake provider',
- 'do_config_file' => 'Configuration for file imports',
- 'do_config_bunq' => 'Configuration for bunq imports',
- 'do_config_spectre' => 'Configuration for imports from Spectre',
- 'do_config_plaid' => 'Configuration for imports from Plaid',
- 'do_config_yodlee' => 'Configuration for imports from Yodlee',
- 'do_config_quovo' => 'Configuration for imports from Quovo',
+ 'can_config_title' => 'Importar configuración',
+ 'can_config_intro' => 'Algunos métodos de importación se pueden configurar a su gusto. Tienen configuración extra que usted puede modificar.',
+ 'do_config_fake' => 'Configuración para el proveedor de falso',
+ 'do_config_file' => 'Configuración para la importación de archivos',
+ 'do_config_bunq' => 'Configuración para la importación de bunq',
+ 'do_config_spectre' => 'Configuración de importaciones desde Spectre',
+ 'do_config_plaid' => 'Configuración de importaciones desde Plaid',
+ 'do_config_yodlee' => 'Configuración de importaciones desde Yodlee',
+ 'do_config_quovo' => 'Configuración de importaciones desde Quovo',
// prerequisites:
- 'prereq_fake_title' => 'Prerequisites for an import from the fake import provider',
- 'prereq_fake_text' => 'This fake provider requires a fake API key. It must be 32 characters long. You can use this one: 123456789012345678901234567890AA',
- 'prereq_spectre_title' => 'Prerequisites for an import using the Spectre API',
- 'prereq_spectre_text' => 'In order to import data using the Spectre API (v4), you must provide Firefly III with two secret values. They can be found on the secrets page.',
- 'prereq_spectre_pub' => 'Likewise, the Spectre API needs to know the public key you see below. Without it, it will not recognize you. Please enter this public key on your secrets page.',
- 'prereq_bunq_title' => 'Prerequisites for an import from bunq',
- 'prereq_bunq_text' => 'In order to import from bunq, you need to obtain an API key. You can do this through the app. Please note that the import function for bunq is in BETA. It has only been tested against the sandbox API.',
- 'prereq_bunq_ip' => 'bunq requires your externally facing IP address. Firefly III has tried to fill this in using the ipify service. Make sure this IP address is correct, or the import will fail.',
- 'prereq_ynab_title' => 'Prerequisites for an import from YNAB',
- 'prereq_ynab_text' => 'In order to be able to download transactions from YNAB, please create a new application on your Developer Settings Page and enter the client ID and secret on this page.',
- 'prereq_ynab_redirect' => 'To complete the configuration, enter the following URL at the Developer Settings Page under the "Redirect URI(s)".',
- 'callback_not_tls' => 'Firefly III has detected the following callback URI. It seems your server is not set up to accept TLS-connections (https). YNAB will not accept this URI. You may continue with the import (because Firefly III could be wrong) but please keep this in mind.',
+ 'prereq_fake_title' => 'Pre requisitos para una importación desde el proveedor de importación falso',
+ 'prereq_fake_text' => 'Este proveedor falso requiere una clave de API falsa. Debe ser 32 caracteres de largo. Puede utilizar este: 123456789012345678901234567890AA',
+ 'prereq_spectre_title' => 'Pre requisitos para una importación usando la API de Spectre',
+ 'prereq_spectre_text' => 'Para importar datos usando la API de Spectre (v4), usted debe proveer a FIrefly III dos valores secretos. Se pueden encontrar en pagina de secretos.',
+ 'prereq_spectre_pub' => 'Del mismo modo, la API de Spectre necesita saber la clave pública que ve debajo. Sin ella, no lo reconocerá. Por favor, ingrese esta clave pública en su pagina de secretos.',
+ 'prereq_bunq_title' => 'Pre requisitos para una importación de bunq',
+ 'prereq_bunq_text' => 'Para importar desde bunq, usted necesita obtener una clave API. Puede hacerlo a través de la app. Por favor, tenga en cuenta que la función de importación desde bunq, es una BETA. Sólo ha sido probada con una API de sandbox.',
+ 'prereq_bunq_ip' => 'bunq requiere su dirección IP externa. Firefly III ha intentado completarla usando el servicio de ipify. Asegúrese de que esta dirección IP sea correcta, o la importación fallará.',
+ 'prereq_ynab_title' => 'Pre requisitos para importar desde YNAB',
+ 'prereq_ynab_text' => 'A fin de poder bajar transacciones desde YNAB, por favor cree una nueva aplicación en su Pagina de configuraciones de Desarrolladores e ingrese el ID de cliente y el secreto en esta página.',
+ 'prereq_ynab_redirect' => 'Para completar la configuración, introduzca la siguiente URL en Pagina de configuraciones de Desarrolladores bajo el ítem "Redirect URI(s)".',
+ 'callback_not_tls' => 'Firefly III ha detectado la siguiente URI de devolución de llamada. Parece que su servidor no está configurado para aceptar conecciones TLS (https). YNAB no aceptará esta URI. Usted puede continuar con la importación ( ya que Firefly III puede equivocarse) pero por favor, téngalo en mente.',
// prerequisites success messages:
- 'prerequisites_saved_for_fake' => 'Fake API key stored successfully!',
+ 'prerequisites_saved_for_fake' => 'Clave API falsa guardada con éxito!',
'prerequisites_saved_for_spectre' => '¡App ID y secreto guardados!',
'prerequisites_saved_for_bunq' => '¡Clave de API e IP almacenadas!',
- 'prerequisites_saved_for_ynab' => 'YNAB client ID and secret stored!',
+ 'prerequisites_saved_for_ynab' => '¡ID de cliente YNAB y secreto guardados!',
// job configuration:
- 'job_config_apply_rules_title' => 'Job configuration - apply your rules?',
- 'job_config_apply_rules_text' => 'Once the fake provider has run, your rules can be applied to the transactions. This adds time to the import.',
- 'job_config_input' => 'Your input',
+ 'job_config_apply_rules_title' => 'Configuración de trabajo - aplicar sus reglas?',
+ 'job_config_apply_rules_text' => 'Una vez que el proovedor falso se ejecutó, sus reglas pueden ser aplicadas a las transacciones. Esto agrega tiempo a la importación.',
+ 'job_config_input' => 'Su entrada',
// job configuration for the fake provider:
- 'job_config_fake_artist_title' => 'Enter album name',
- 'job_config_fake_artist_text' => 'Many import routines have a few configuration steps you must go through. In the case of the fake import provider, you must answer some weird questions. In this case, enter "David Bowie" to continue.',
- 'job_config_fake_song_title' => 'Enter song name',
- 'job_config_fake_song_text' => 'Mention the song "Golden years" to continue with the fake import.',
- 'job_config_fake_album_title' => 'Enter album name',
- 'job_config_fake_album_text' => 'Some import routines require extra data halfway through the import. In the case of the fake import provider, you must answer some weird questions. Enter "Station to station" to continue.',
+ 'job_config_fake_artist_title' => 'Introduzca el nombre del álbum',
+ 'job_config_fake_artist_text' => 'Muchas de las rutinas de importación tienen unos pasos de configuración que debe atravesar. En el caso del proveedor de importación falso, debe responder algunas preguntas extrañas. En este caso, escriba "David Bowie" para continuar.',
+ 'job_config_fake_song_title' => 'Introduzca el nombre de la canción',
+ 'job_config_fake_song_text' => 'Mencione la canción "Golden years" para continuar con la importación falsa.',
+ 'job_config_fake_album_title' => 'Introduzca el nombre del álbum',
+ 'job_config_fake_album_text' => 'Algunas rutinas de importación requieren datos adicionales a medio camino a través de la importación. En el caso del proveedor de importación falso, debe responder algunas preguntas extrañas. Entra en "Estación a estación" para continuar.',
// job configuration form the file provider
- 'job_config_file_upload_title' => 'Import setup (1/4) - Upload your file',
- 'job_config_file_upload_text' => 'This routine will help you import files from your bank into Firefly III. ',
- 'job_config_file_upload_help' => 'Select your file. Please make sure the file is UTF-8 encoded.',
- 'job_config_file_upload_config_help' => 'If you have previously imported data into Firefly III, you may have a configuration file, which will pre-set configuration values for you. For some banks, other users have kindly provided their configuration file',
- 'job_config_file_upload_type_help' => 'Select the type of file you will upload',
- 'job_config_file_upload_submit' => 'Upload files',
+ 'job_config_file_upload_title' => 'Importar configuración (1/4) - Subir archivo',
+ 'job_config_file_upload_text' => 'Esta rutina le ayudará a importar archivos de su banco en Firefly III. ',
+ 'job_config_file_upload_help' => 'Seleccione su archivo. Por favor, asegúrese de que el archivo está codificado en UTF-8.',
+ 'job_config_file_upload_config_help' => 'Si previamente ha importado datos en Firefly III, puede tener un archivo de configuración, el cual preestablecerá valores de configuración por usted. Para algunos bancos, otros usuarios han proporcionado amablemente sus archivo de configuración',
+ 'job_config_file_upload_type_help' => 'Seleccione el tipo de archivo que subirá',
+ 'job_config_file_upload_submit' => 'Subir archivos',
'import_file_type_csv' => 'CSV (valores separados por comas)',
'import_file_type_ofx' => 'OFX',
- 'file_not_utf8' => 'The file you have uploaded is not encoded as UTF-8 or ASCII. Firefly III cannot handle such files. Please use Notepad++ or Sublime to convert your file to UTF-8.',
- 'job_config_uc_title' => 'Import setup (2/4) - Basic file setup',
- 'job_config_uc_text' => 'To be able to import your file correctly, please validate the options below.',
- 'job_config_uc_header_help' => 'Check this box if the first row of your CSV file are the column titles.',
- 'job_config_uc_date_help' => 'Date time format in your file. Follow the format as this page indicates. The default value will parse dates that look like this: :dateExample.',
- 'job_config_uc_delimiter_help' => 'Choose the field delimiter that is used in your input file. If not sure, comma is the safest option.',
- 'job_config_uc_account_help' => 'If your file does NOT contain information about your asset account(s), use this dropdown to select to which account the transactions in the file belong to.',
+ 'file_not_utf8' => 'El archivo que ha subido no es codificado como UTF-8 o ASCII. Firefly III no puede manejar este tipo de archivos. Utilice Notepad++ ó Sublime para convertir el archivo a UTF-8.',
+ 'job_config_uc_title' => 'Importación de configuración (2/4) - Archivo de configuración básica',
+ 'job_config_uc_text' => 'Para poder importar correctamente el archivo, por favor valide las opciones a continuación.',
+ 'job_config_uc_header_help' => 'Marque esta casilla si la primera fila del archivo CSV son los títulos de columna.',
+ 'job_config_uc_date_help' => 'Formato de fecha y hora en su archivo. Siga un formato como los que indica esta página. El valor por defecto interpretará fechas que se vean así: :dateExample.',
+ 'job_config_uc_delimiter_help' => 'Elija el delimitador de campo que se utiliza en el archivo de entrada. Si no está seguro, coma es la opción más segura.',
+ 'job_config_uc_account_help' => 'Si su archivo NO contiene información sobre sus cuenta(s) de activo(s), utilice esta lista desplegable para seleccionar la cuenta a la que pertenecen las transacciones en el archivo.',
'job_config_uc_apply_rules_title' => 'Aplicar reglas',
- 'job_config_uc_apply_rules_text' => 'Applies your rules to every imported transaction. Note that this slows the import significantly.',
- 'job_config_uc_specifics_title' => 'Bank-specific options',
- 'job_config_uc_specifics_txt' => 'Some banks deliver badly formatted files. Firefly III can fix those automatically. If your bank delivers such files but it\'s not listed here, please open an issue on GitHub.',
- 'job_config_uc_submit' => 'Continue',
- 'invalid_import_account' => 'You have selected an invalid account to import into.',
- 'import_liability_select' => 'Liability',
+ 'job_config_uc_apply_rules_text' => 'Aplica las reglas a cada transacción importada. Tenga en cuenta que esto reduce significativamente la velocidad de importación.',
+ 'job_config_uc_specifics_title' => 'Opciones específicas del Banco',
+ 'job_config_uc_specifics_txt' => 'Algunos bancos ofrecen archivos mal formateados. Firefly III los puede corregir automáticamente. Si su banco ofrece este tipo de archivos pero no aparece aquí, por favor abre un tema en GitHub.',
+ 'job_config_uc_submit' => 'Continuar',
+ 'invalid_import_account' => 'Ha seleccionado una cuenta inválida a la cuál importar.',
+ 'import_liability_select' => 'Pasivo',
// job configuration for Spectre:
- 'job_config_spectre_login_title' => 'Choose your login',
- 'job_config_spectre_login_text' => 'Firefly III has found :count existing login(s) in your Spectre account. Which one would you like to use to import from?',
- 'spectre_login_status_active' => 'Active',
- 'spectre_login_status_inactive' => 'Inactive',
- 'spectre_login_status_disabled' => 'Disabled',
- 'spectre_login_new_login' => 'Login with another bank, or one of these banks with different credentials.',
- 'job_config_spectre_accounts_title' => 'Select accounts to import from',
- 'job_config_spectre_accounts_text' => 'You have selected ":name" (:country). You have :count account(s) available from this provider. Please select the Firefly III asset account(s) where the transactions from these accounts should be stored. Remember, in order to import data both the Firefly III account and the ":name"-account must have the same currency.',
- 'spectre_no_supported_accounts' => 'You cannot import from this account due to a currency mismatch.',
- 'spectre_do_not_import' => '(do not import)',
- 'spectre_no_mapping' => 'It seems you have not selected any accounts to import from.',
- 'imported_from_account' => 'Imported from ":account"',
- 'spectre_account_with_number' => 'Account :number',
- 'job_config_spectre_apply_rules' => 'Apply rules',
- 'job_config_spectre_apply_rules_text' => 'By default, your rules will be applied to the transactions created during this import routine. If you do not want this to happen, deselect this checkbox.',
+ 'job_config_spectre_login_title' => 'Escoja su login',
+ 'job_config_spectre_login_text' => 'Firefly III ha encontrado :count login(s) existente(s) en su cuenta de Spectre. ¿Cual desea utilizar para importar?',
+ 'spectre_login_status_active' => 'Activo',
+ 'spectre_login_status_inactive' => 'Inactivo',
+ 'spectre_login_status_disabled' => 'Deshabilitado',
+ 'spectre_login_new_login' => 'Iniciar sesión con otro banco, o uno de estos bancos con credenciales diferentes.',
+ 'job_config_spectre_accounts_title' => 'Seleccione las cuentas desde las cuáles importar',
+ 'job_config_spectre_accounts_text' => 'Usted ha seleccionado ":name" (:country). Tienes :count cuenta(s) de este proveedor. Por favor, seleccione las cuentas de activo de Firefly III donde las transacciones provenientes de estas cuentas deben ser guardadas. Recuerde que, para poder importar datos, la cuenta de Firefly III y el ":name"-cuenta deben tener la misma moneda.',
+ 'spectre_no_supported_accounts' => 'No se puede importar desde esta cuenta debido a un desajuste de monedas.',
+ 'spectre_do_not_import' => '(no importar)',
+ 'spectre_no_mapping' => 'Parece que no ha seleccionado ninguna cuenta desde la cual importar.',
+ 'imported_from_account' => 'Importado de ":account"',
+ 'spectre_account_with_number' => 'Cuenta :number',
+ 'job_config_spectre_apply_rules' => 'Aplicar reglas',
+ 'job_config_spectre_apply_rules_text' => 'De forma predeterminada, sus reglas se aplicarán a las transacciones creadas durante esta rutina de importación. Si no desea que esto suceda, desactive esta casilla de verificación.',
// job configuration for bunq:
- 'job_config_bunq_accounts_title' => 'bunq accounts',
- 'job_config_bunq_accounts_text' => 'These are the accounts associated with your bunq account. Please select the accounts from which you want to import, and in which account the transactions must be imported.',
- 'bunq_no_mapping' => 'It seems you have not selected any accounts.',
- 'should_download_config' => 'You should download the configuration file for this job. This will make future imports way easier.',
- 'share_config_file' => 'If you have imported data from a public bank, you should share your configuration file so it will be easy for other users to import their data. Sharing your configuration file will not expose your financial details.',
- 'job_config_bunq_apply_rules' => 'Apply rules',
- 'job_config_bunq_apply_rules_text' => 'By default, your rules will be applied to the transactions created during this import routine. If you do not want this to happen, deselect this checkbox.',
+ 'job_config_bunq_accounts_title' => 'cuentas de bunq',
+ 'job_config_bunq_accounts_text' => 'Estas son las cuentas asociadas a tu cuenta de bunq. Por favor, seleccione las cuentas desde las que desea importar, y en que cuenta deben importarse las transacciones.',
+ 'bunq_no_mapping' => 'Parece que no ha seleccionado ninguna cuenta.',
+ 'should_download_config' => 'Debería descargar el archivo de configuración para este trabajo. Esto hará las importaciones futuras de manera más fácil.',
+ 'share_config_file' => 'Si ha importado los datos de un banco público, debe compartir su archivo de configuración para que sea fácil para otros usuarios importar sus propios datos. Compartiendo su archivo de configuración no expondrá sus datos financieros.',
+ 'job_config_bunq_apply_rules' => 'Aplicar reglas',
+ 'job_config_bunq_apply_rules_text' => 'De forma predeterminada, sus reglas se aplicarán a las transacciones creadas durante esta rutina de importación. Si no desea que esto suceda, desactive esta casilla de verificación.',
- 'ynab_account_closed' => 'Account is closed!',
- 'ynab_account_deleted' => 'Account is deleted!',
- 'ynab_account_type_savings' => 'savings account',
- 'ynab_account_type_checking' => 'checking account',
- 'ynab_account_type_cash' => 'cash account',
- 'ynab_account_type_creditCard' => 'credit card',
- 'ynab_account_type_lineOfCredit' => 'line of credit',
- 'ynab_account_type_otherAsset' => 'other asset account',
- 'ynab_account_type_otherLiability' => 'other liabilities',
+ 'ynab_account_closed' => '¡La cuenta ha sido cerrada!',
+ 'ynab_account_deleted' => '¡La cuenta ha sido borrada!',
+ 'ynab_account_type_savings' => 'cuenta de ahorros',
+ 'ynab_account_type_checking' => 'cuenta corriente',
+ 'ynab_account_type_cash' => 'cuenta de efectivo',
+ 'ynab_account_type_creditCard' => 'tarjeta de crédito',
+ 'ynab_account_type_lineOfCredit' => 'línea de crédito',
+ 'ynab_account_type_otherAsset' => 'otra cuenta de activos',
+ 'ynab_account_type_otherLiability' => 'otros pasivos',
'ynab_account_type_payPal' => 'Paypal',
- 'ynab_account_type_merchantAccount' => 'merchant account',
- 'ynab_account_type_investmentAccount' => 'investment account',
- 'ynab_account_type_mortgage' => 'mortgage',
- 'ynab_do_not_import' => '(do not import)',
- 'job_config_ynab_apply_rules' => 'Apply rules',
- 'job_config_ynab_apply_rules_text' => 'By default, your rules will be applied to the transactions created during this import routine. If you do not want this to happen, deselect this checkbox.',
+ 'ynab_account_type_merchantAccount' => 'cuenta de comerciante',
+ 'ynab_account_type_investmentAccount' => 'cuenta de inversión',
+ 'ynab_account_type_mortgage' => 'hipoteca',
+ 'ynab_do_not_import' => '(no importar)',
+ 'job_config_ynab_apply_rules' => 'Aplicar reglas',
+ 'job_config_ynab_apply_rules_text' => 'De forma predeterminada, sus reglas se aplicarán a las transacciones creadas durante esta rutina de importación. Si no desea que esto suceda, desactive esta casilla de verificación.',
// job configuration for YNAB:
- 'job_config_ynab_select_budgets' => 'Select your budget',
- 'job_config_ynab_select_budgets_text' => 'You have :count budgets stored at YNAB. Please select the one from which Firefly III will import the transactions.',
- 'job_config_ynab_no_budgets' => 'There are no budgets available to be imported from.',
- 'ynab_no_mapping' => 'It seems you have not selected any accounts to import from.',
- 'job_config_ynab_bad_currency' => 'You cannot import from the following budget(s), because you do not have accounts with the same currency as these budgets.',
- 'job_config_ynab_accounts_title' => 'Select accounts',
- 'job_config_ynab_accounts_text' => 'You have the following accounts available in this budget. Please select from which accounts you want to import, and where the transactions should be stored.',
+ 'job_config_ynab_select_budgets' => 'Seleccione su presupuesto',
+ 'job_config_ynab_select_budgets_text' => 'Usted tiene :count presupuestos almacenados en YNAB. Por favor seleccione uno del cual Firefly III importará las transacciones.',
+ 'job_config_ynab_no_budgets' => 'No hay presupuestos disponibles para importar.',
+ 'ynab_no_mapping' => 'Parece que no ha seleccionado ninguna cuenta desde la cual importar.',
+ 'job_config_ynab_bad_currency' => 'No se pueden importar de los presupuestos siguientes, porque no tiene cuentas con la misma moneda que estos presupuestos.',
+ 'job_config_ynab_accounts_title' => 'Seleccionar cuentas',
+ 'job_config_ynab_accounts_text' => 'Usted tiene las siguientes cuentas disponibles en este presupuesto. Por favor, seleccione de que cuentas desea importar, y dónde las transacciones deben ser guardadas.',
// keys from "extra" array:
'spectre_extra_key_iban' => 'IBAN',
'spectre_extra_key_swift' => 'SWIFT',
- 'spectre_extra_key_status' => 'Status',
- 'spectre_extra_key_card_type' => 'Card type',
- 'spectre_extra_key_account_name' => 'Account name',
- 'spectre_extra_key_client_name' => 'Client name',
- 'spectre_extra_key_account_number' => 'Account number',
- 'spectre_extra_key_blocked_amount' => 'Blocked amount',
- 'spectre_extra_key_available_amount' => 'Available amount',
- 'spectre_extra_key_credit_limit' => 'Credit limit',
- 'spectre_extra_key_interest_rate' => 'Interest rate',
- 'spectre_extra_key_expiry_date' => 'Expiry date',
- 'spectre_extra_key_open_date' => 'Open date',
- 'spectre_extra_key_current_time' => 'Current time',
- 'spectre_extra_key_current_date' => 'Current date',
- 'spectre_extra_key_cards' => 'Cards',
- 'spectre_extra_key_units' => 'Units',
- 'spectre_extra_key_unit_price' => 'Unit price',
- 'spectre_extra_key_transactions_count' => 'Transaction count',
+ 'spectre_extra_key_status' => 'Estado',
+ 'spectre_extra_key_card_type' => 'Tipo de tarjeta',
+ 'spectre_extra_key_account_name' => 'Nombre de la cuenta',
+ 'spectre_extra_key_client_name' => 'Nombre del cliente',
+ 'spectre_extra_key_account_number' => 'Número de cuenta',
+ 'spectre_extra_key_blocked_amount' => 'Monto bloqueado',
+ 'spectre_extra_key_available_amount' => 'Monto disponible',
+ 'spectre_extra_key_credit_limit' => 'Limite de crédito',
+ 'spectre_extra_key_interest_rate' => 'Tasa de interés',
+ 'spectre_extra_key_expiry_date' => 'Fecha de vencimiento',
+ 'spectre_extra_key_open_date' => 'Fecha de apertura',
+ 'spectre_extra_key_current_time' => 'Tiempo actual',
+ 'spectre_extra_key_current_date' => 'Fecha actual',
+ 'spectre_extra_key_cards' => 'Tarjetas',
+ 'spectre_extra_key_units' => 'Unidades',
+ 'spectre_extra_key_unit_price' => 'Precio unitario',
+ 'spectre_extra_key_transactions_count' => 'Nro. de transacciones',
+ //job configuration for finTS
+ 'fints_connection_failed' => 'Se ha producido un error al intentar conectar a su banco. Por favor, asegúrese de que todos los datos que escribió son correctos. Mensaje de error original: :originalError',
+
+ 'job_config_fints_url_help' => 'Por ejemplo, https://banking-dkb.s-fints-pt-dkb.de/fints30',
+ 'job_config_fints_username_help' => 'Para muchos bancos este es su número de cuenta.',
+ 'job_config_fints_port_help' => 'El puerto predeterminado es 443.',
+ 'job_config_fints_account_help' => 'Elegir la cuenta de banco para el que desea importar las transacciones.',
+ 'job_config_local_account_help' => 'Elegir la cuenta de Firefly III correspondiente a su cuenta bancaria elegida encima.',
// specifics:
- 'specific_ing_name' => 'ING NL',
- 'specific_ing_descr' => 'Create better descriptions in ING exports',
- 'specific_sns_name' => 'SNS / Volksbank NL',
- 'specific_sns_descr' => 'Trim quotes from SNS / Volksbank export files',
- 'specific_abn_name' => 'ABN AMRO NL',
- 'specific_abn_descr' => 'Fixes potential problems with ABN AMRO files',
- 'specific_rabo_name' => 'Rabobank NL',
- 'specific_rabo_descr' => 'Fixes potential problems with Rabobank files',
- 'specific_pres_name' => 'President\'s Choice Financial CA',
- 'specific_pres_descr' => 'Fixes potential problems with PC files',
+ 'specific_ing_name' => 'ING NL',
+ 'specific_ing_descr' => 'Crear descripciones mejores en las exportaciones ING',
+ 'specific_sns_name' => 'SNS / Volksbank NL',
+ 'specific_sns_descr' => 'Eliminar comillas a archivos de exportación de SNS / Volksbank',
+ 'specific_abn_name' => 'ABN AMRO NL',
+ 'specific_abn_descr' => 'Corrige los posibles problemas con archivos de ABN AMRO',
+ 'specific_rabo_name' => 'Rabobank NL',
+ 'specific_rabo_descr' => 'Corrige los posibles problemas con archivos de Rabobank',
+ 'specific_pres_name' => 'President\'s Choice Financial CA',
+ 'specific_pres_descr' => 'Soluciona problemas potenciales con archivos de PC',
// job configuration for file provider (stage: roles)
- 'job_config_roles_title' => 'Import setup (3/4) - Define each column\'s role',
- 'job_config_roles_text' => 'Each column in your CSV file contains certain data. Please indicate what kind of data the importer should expect. The option to "map" data means that you will link each entry found in the column to a value in your database. An often mapped column is the column that contains the IBAN of the opposing account. That can be easily matched to IBAN\'s present in your database already.',
- 'job_config_roles_submit' => 'Continue',
- 'job_config_roles_column_name' => 'Name of column',
- 'job_config_roles_column_example' => 'Column example data',
- 'job_config_roles_column_role' => 'Column data meaning',
- 'job_config_roles_do_map_value' => 'Map these values',
- 'job_config_roles_no_example' => 'No example data available',
- 'job_config_roles_fa_warning' => 'If you mark a column as containing an amount in a foreign currency, you must also set the column that contains which currency it is.',
- 'job_config_roles_rwarning' => 'At the very least, mark one column as the amount-column. It is advisable to also select a column for the description, date and the opposing account.',
- 'job_config_roles_colum_count' => 'Column',
+ 'job_config_roles_title' => 'Importar configuración (3/4) - definir el papel de cada columna',
+ 'job_config_roles_text' => 'Cada columna en su archivo CSV contiene ciertos datos. Indique qué tipo de datos debe esperar el importador. La opción de "mapear" datos significa que enlazará cada entrada encontrada en la columna con un valor en su base de datos. Una columna a menudo mapeada es la columna que contiene el IBAN de la cuenta de contrapartida. Eso puede enlazarse fácilmente con cuentas IBAN ya presentes en su base de datos.',
+ 'job_config_roles_submit' => 'Continuar',
+ 'job_config_roles_column_name' => 'Nombre de la columna',
+ 'job_config_roles_column_example' => 'Datos de ejemplo de columna',
+ 'job_config_roles_column_role' => 'Significado de los datos de la columna',
+ 'job_config_roles_do_map_value' => 'Mapear estos valores',
+ 'job_config_roles_no_example' => 'No hay datos de ejemplo disponibles',
+ 'job_config_roles_fa_warning' => 'Si usted marca una columna que contiene un importe en una moneda extranjera, también debe marcar la columna que indica que moneda es.',
+ 'job_config_roles_rwarning' => 'Por lo menos, marque una columna como la columna de importe. También es aconsejable seleccionar una columna para la descripción. la fecha y la cuenta contraria.',
+ 'job_config_roles_colum_count' => 'Columna',
// job config for the file provider (stage: mapping):
- 'job_config_map_title' => 'Import setup (4/4) - Connect import data to Firefly III data',
- 'job_config_map_text' => 'In the following tables, the left value shows you information found in your uploaded file. It is your task to map this value, if possible, to a value already present in your database. Firefly will stick to this mapping. If there is no value to map to, or you do not wish to map the specific value, select nothing.',
- 'job_config_map_nothing' => 'There is no data present in your file that you can map to existing values. Please press "Start the import" to continue.',
- 'job_config_field_value' => 'Field value',
- 'job_config_field_mapped' => 'Mapped to',
- 'map_do_not_map' => '(no mapear)',
- 'job_config_map_submit' => 'Start the import',
+ 'job_config_map_title' => 'Importar configuración (4/4) - Conecta datos de importación a los datos de Firefly III',
+ 'job_config_map_text' => 'En las siguientes tablas, el valor de la izquierda muestra información encontrada en el archivo cargado. Es su tarea mapear este valor, si es posible, a un valor ya presente en su base de datos. Firefly Iii respetará este mapeo. Si no hay un valor hacia el cual mapear o no se desea mapear un valor especifico, no seleccione ninguno.',
+ 'job_config_map_nothing' => 'No hay datos presentes en su archivo que pueda asignar a los valores existentes. Por favor presione "comenzar la importación" para continuar.',
+ 'job_config_field_value' => 'Valor del campo',
+ 'job_config_field_mapped' => 'Mapeado a',
+ 'map_do_not_map' => '(no mapear)',
+ 'job_config_map_submit' => 'Iniciar la importación',
// import status page:
- 'import_with_key' => 'Importar con la clave \':key\'',
- 'status_wait_title' => 'Por favor espere...',
- 'status_wait_text' => 'Esta caja va a desaparecer en un momento.',
- 'status_running_title' => 'La importación se está ejecutando',
- 'status_job_running' => 'Please wait, running the import...',
- 'status_job_storing' => 'Please wait, storing data...',
- 'status_job_rules' => 'Please wait, running rules...',
- 'status_fatal_title' => 'Fatal error',
- 'status_fatal_text' => 'The import has suffered from an error it could not recover from. Apologies!',
- 'status_fatal_more' => 'This (possibly very cryptic) error message is complemented by log files, which you can find on your hard drive, or in the Docker container where you run Firefly III from.',
- 'status_finished_title' => 'Import finished',
- 'status_finished_text' => 'The import has finished.',
- 'finished_with_errors' => 'There were some errors during the import. Please review them carefully.',
- 'unknown_import_result' => 'Unknown import result',
- 'result_no_transactions' => 'No transactions have been imported. Perhaps they were all duplicates is simply no transactions where present to be imported. Perhaps the log files can tell you what happened. If you import data regularly, this is normal.',
- 'result_one_transaction' => 'Exactly one transaction has been imported. It is stored under tag :tag where you can inspect it further.',
- 'result_many_transactions' => 'Firefly III has imported :count transactions. They are stored under tag :tag where you can inspect them further.',
+ 'import_with_key' => 'Importar con la clave \':key\'',
+ 'status_wait_title' => 'Por favor espere...',
+ 'status_wait_text' => 'Esta caja va a desaparecer en un momento.',
+ 'status_running_title' => 'La importación se está ejecutando',
+ 'status_job_running' => 'Por favor espere, ejecutando la importación...',
+ 'status_job_storing' => 'Por favor espere, guardando datos...',
+ 'status_job_rules' => 'Por favor espere, ejecutando reglas...',
+ 'status_fatal_title' => 'Error fatal',
+ 'status_fatal_text' => 'La importación ha sufrido un error del cual no pudo recuperarse, Disculpas!',
+ 'status_fatal_more' => 'Este (posiblemente muy críptico) mensaje de error, se complementa con archivos de log, que puedes encontrar en tu HDD o en tu contenedor de Docker en el cual corres Firefly III.',
+ 'status_finished_title' => 'Importación finalizada',
+ 'status_finished_text' => 'La importación ha terminado.',
+ 'finished_with_errors' => 'Han habido algunos errores durante la importación. Por favor, revíselos cuidadosamente.',
+ 'unknown_import_result' => 'Resultado de importación desconocido',
+ 'result_no_transactions' => 'No se han importado transacciones. Quizás habían sólo duplicados y por eso no hubo transacciones que importar. Quizás los archivos log puedan decirle que sucedió. Si importa data regularmente, esto es normal.',
+ 'result_one_transaction' => 'Exactamente una transacción fue importada. Se encuentra guardada bajo el tag :tag donde puedes inspeccionarla mas a fondo.',
+ 'result_many_transactions' => 'Firefly III ha importado :count transacciones. Se encuentran guardadas bajo el tag :tag donde puedes inspeccionarlas mas a fondo.',
// general errors and warnings:
- 'bad_job_status' => 'To access this page, your import job cannot have status ":status".',
+ 'bad_job_status' => 'Para acceder a esta página, tu trabajo de importación no puede tener el status ":status".',
// column roles for CSV import:
- 'column__ignore' => '(Ignorar esta columna)',
- 'column_account-iban' => 'Caja de ahorros (IBAN)',
- 'column_account-id' => 'Identificación de Cuenta de ingresos (coincide con FF3)',
- 'column_account-name' => 'Caja de ahorros (nombre)',
- 'column_account-bic' => 'Asset account (BIC)',
- 'column_amount' => 'Cantidad',
- 'column_amount_foreign' => 'Monto ( en moneda extranjera)',
- 'column_amount_debit' => 'Cantidad (columna de débito)',
- 'column_amount_credit' => 'Cantidad (columna de crédito)',
- 'column_amount_negated' => 'Amount (negated column)',
- 'column_amount-comma-separated' => 'Cantidad (coma como decimal separador)',
- 'column_bill-id' => 'ID factura (coincide FF3)',
- 'column_bill-name' => 'Nombre de la factura',
- 'column_budget-id' => 'ID presupuesto (coincide FF3)',
- 'column_budget-name' => 'Nombre del presupuesto',
- 'column_category-id' => 'ID de categoría (coincide FF3)',
- 'column_category-name' => 'Nombre de la categoría',
- 'column_currency-code' => 'Código de la moneda (ISO 4217)',
- 'column_foreign-currency-code' => 'Código de moneda extranjera ( ISO 4217)',
- 'column_currency-id' => 'ID de moneda (coincide FF3)',
- 'column_currency-name' => 'Nombre de moneda (coincide FF3)',
- 'column_currency-symbol' => 'Símbolo de moneda (coincide FF3)',
- 'column_date-interest' => 'Fecha de cálculo de intereses',
- 'column_date-book' => 'Fecha de registro de la transacción',
- 'column_date-process' => 'Fecha del proceso de transacción',
- 'column_date-transaction' => 'Fecha',
- 'column_date-due' => 'Transaction due date',
- 'column_date-payment' => 'Transaction payment date',
- 'column_date-invoice' => 'Transaction invoice date',
- 'column_description' => 'Descripción',
- 'column_opposing-iban' => 'Cuenta opuesta (IBAN)',
- 'column_opposing-bic' => 'Opposing account (BIC)',
- 'column_opposing-id' => 'ID de cuenta opuesta (coincide FF3)',
- 'column_external-id' => 'Identificación externa',
- 'column_opposing-name' => 'Cuenta opuesta (nombre)',
- 'column_rabo-debit-credit' => 'Indicador especifico débito/crédito de Rabobank',
- 'column_ing-debit-credit' => 'Indicador especifico débito/crédito de ING',
- 'column_sepa-ct-id' => 'SEPA end-to-end Identifier',
- 'column_sepa-ct-op' => 'SEPA Opposing Account Identifier',
- 'column_sepa-db' => 'SEPA Mandate Identifier',
- 'column_sepa-cc' => 'SEPA Clearing Code',
- 'column_sepa-ci' => 'SEPA Creditor Identifier',
- 'column_sepa-ep' => 'SEPA External Purpose',
- 'column_sepa-country' => 'SEPA Country Code',
- 'column_tags-comma' => 'Etiquetas ( separadas por comas)',
- 'column_tags-space' => 'Etiquetas ( separadas por espacio)',
- 'column_account-number' => 'Cuenta de archivos ( numero de cuenta)',
- 'column_opposing-number' => 'Cuenta opuesta (numero de cuenta)',
- 'column_note' => 'Nota (s)',
- 'column_internal-reference' => 'Internal reference',
+ 'column__ignore' => '(Ignorar esta columna)',
+ 'column_account-iban' => 'Caja de ahorros (IBAN)',
+ 'column_account-id' => 'Identificación de Cuenta de ingresos (coincide con FF3)',
+ 'column_account-name' => 'Caja de ahorros (nombre)',
+ 'column_account-bic' => 'Caja de ahorro (BIC)',
+ 'column_amount' => 'Cantidad',
+ 'column_amount_foreign' => 'Monto ( en moneda extranjera)',
+ 'column_amount_debit' => 'Cantidad (columna de débito)',
+ 'column_amount_credit' => 'Cantidad (columna de crédito)',
+ 'column_amount_negated' => 'Amount (negated column)',
+ 'column_amount-comma-separated' => 'Cantidad (coma como decimal separador)',
+ 'column_bill-id' => 'ID factura (coincide FF3)',
+ 'column_bill-name' => 'Nombre de la factura',
+ 'column_budget-id' => 'ID presupuesto (coincide FF3)',
+ 'column_budget-name' => 'Nombre del presupuesto',
+ 'column_category-id' => 'ID de categoría (coincide FF3)',
+ 'column_category-name' => 'Nombre de la categoría',
+ 'column_currency-code' => 'Código de la moneda (ISO 4217)',
+ 'column_foreign-currency-code' => 'Código de moneda extranjera ( ISO 4217)',
+ 'column_currency-id' => 'ID de moneda (coincide FF3)',
+ 'column_currency-name' => 'Nombre de moneda (coincide FF3)',
+ 'column_currency-symbol' => 'Símbolo de moneda (coincide FF3)',
+ 'column_date-interest' => 'Fecha de cálculo de intereses',
+ 'column_date-book' => 'Fecha de registro de la transacción',
+ 'column_date-process' => 'Fecha del proceso de transacción',
+ 'column_date-transaction' => 'Fecha',
+ 'column_date-due' => 'Transaction due date',
+ 'column_date-payment' => 'Transaction payment date',
+ 'column_date-invoice' => 'Fecha de la factura de la transacción',
+ 'column_description' => 'Descripción',
+ 'column_opposing-iban' => 'Cuenta opuesta (IBAN)',
+ 'column_opposing-bic' => 'Cuenta opuesta (BIC)',
+ 'column_opposing-id' => 'ID de cuenta opuesta (coincide FF3)',
+ 'column_external-id' => 'Identificación externa',
+ 'column_opposing-name' => 'Cuenta opuesta (nombre)',
+ 'column_rabo-debit-credit' => 'Indicador especifico débito/crédito de Rabobank',
+ 'column_ing-debit-credit' => 'Indicador especifico débito/crédito de ING',
+ 'column_sepa-ct-id' => 'Identificador de end-to-end SEPA',
+ 'column_sepa-ct-op' => 'Identificador de cuenta opuesta SEPA',
+ 'column_sepa-db' => 'Identificador de mandato SEPA',
+ 'column_sepa-cc' => 'Código de clearing SEPA',
+ 'column_sepa-ci' => 'Identificador de acreedor SEPA',
+ 'column_sepa-ep' => 'Propósito externo SEPA',
+ 'column_sepa-country' => 'Código del país SEPA',
+ 'column_tags-comma' => 'Etiquetas ( separadas por comas)',
+ 'column_tags-space' => 'Etiquetas ( separadas por espacio)',
+ 'column_account-number' => 'Cuenta de archivos ( numero de cuenta)',
+ 'column_opposing-number' => 'Cuenta opuesta (numero de cuenta)',
+ 'column_note' => 'Nota (s)',
+ 'column_internal-reference' => 'Referencia interna',
];
diff --git a/resources/lang/es_ES/intro.php b/resources/lang/es_ES/intro.php
index 619ddbafae..6b0350fb19 100644
--- a/resources/lang/es_ES/intro.php
+++ b/resources/lang/es_ES/intro.php
@@ -39,48 +39,48 @@ return [
// budgets index
'budgets_index_intro' => 'Los presupuestos se utilizan para administrar sus finanzas y son una de las funciones básicas de Firefly III.',
- 'budgets_index_set_budget' => 'Coloque su total presupuesto para cada periodo y así Firefly III puede decirle si usted si has presupuestado todo el dinero disponible.',
+ 'budgets_index_set_budget' => 'Coloque su presupuesto total para cada período y así Firefly III puede decirle si usted ha presupuestado todo el dinero disponible.',
'budgets_index_see_expenses_bar' => 'Gastar dinero irá llenando poco a poco esta barra.',
'budgets_index_navigate_periods' => 'Navega a través de períodos para configurar fácilmente presupuestos con anticipación.',
'budgets_index_new_budget' => 'Crea nuevos presupuestos como mejor te parezca.',
- 'budgets_index_list_of_budgets' => 'Use esta tabla para establecer el monto de cada presupuesto y ver como usted lo está haciendo.',
+ 'budgets_index_list_of_budgets' => 'Use esta tabla para establecer el monto de cada presupuesto y ver como lo viene administrando.',
'budgets_index_outro' => 'Para aprender mas acerca de los presupuestos, revise el icono de ayuda en el tope de la esquina derecha.',
// reports (index)
- 'reports_index_intro' => 'Utilice estos reportes para tener información detallada en sus finanzas.',
- 'reports_index_inputReportType' => 'Escoge un tipo de reporte. Revise las páginas de ayuda para ver lo que te muestra cada reporte.',
+ 'reports_index_intro' => 'Utilice estos reportes para tener información detallada de sus finanzas.',
+ 'reports_index_inputReportType' => 'Escoja un tipo de reporte. Revise las páginas de ayuda para ver lo que le muestra cada reporte.',
'reports_index_inputAccountsSelect' => 'Usted puede excluir o incluir cuentas de activos como mejor le cuadre.',
'reports_index_inputDateRange' => 'El rango de fecha seleccionada depende completamente de usted: de un día a 10 años.',
- 'reports_index_extra-options-box' => 'Dependiendo del informe que usted haya seleccionado, usted puede seleccionar filtros y opciones extras aquí. Mire este recuadro cuando usted cambie los tipos de informes.',
+ 'reports_index_extra-options-box' => 'Dependiendo del informe que usted haya seleccionado, puede seleccionar filtros y opciones extras aquí. Mire este recuadro cuando cambie los tipos de informes.',
// reports (reports)
'reports_report_default_intro' => 'Este informe le dará un rápido y comprensivo resumen de sus finanzas. Si usted desea ver algo mas, ¡por favor no dude en ponerse en contacto conmigo!',
'reports_report_audit_intro' => 'Este informe le dará información detallada en sus cuentas de activos.',
- 'reports_report_audit_optionsBox' => 'Use estos recuadros de verificación para ver u ocultar las columnas que a usted le interesa.',
+ 'reports_report_audit_optionsBox' => 'Use estos recuadros de verificación para ver u ocultar las columnas que a usted le interesan.',
'reports_report_category_intro' => 'Este informe le dará una idea en una o múltiples categorías.',
'reports_report_category_pieCharts' => 'Estos gráficos le darán una idea de sus gastos e ingresos por categoría o por cuenta.',
'reports_report_category_incomeAndExpensesChart' => 'Estos gráficos muestran sus gastos e ingresos por categoría.',
'reports_report_tag_intro' => 'Este informe le dará una idea de una o múltiples etiquetas.',
- 'reports_report_tag_pieCharts' => 'Este gráfico le dará una idea de gastos e ingresos por etiqueta, cuenta, categoría o presupuesto.',
- 'reports_report_tag_incomeAndExpensesChart' => 'Estos gráficos le muestran gastos e ingresos por etiqueta.',
+ 'reports_report_tag_pieCharts' => 'Estos gráficos le darán una idea de gastos e ingresos por etiqueta, cuenta, categoría o presupuesto.',
+ 'reports_report_tag_incomeAndExpensesChart' => 'Este gráfico le muestra gastos e ingresos por etiqueta.',
'reports_report_budget_intro' => 'Este informe le dará una idea de uno o múltiples presupuestos.',
- 'reports_report_budget_pieCharts' => 'Estos gráficos le dará a usted una idea de los gastos por presupuesto o por cuenta.',
+ 'reports_report_budget_pieCharts' => 'Estos gráficos le darán a usted una idea de los gastos por presupuesto o por cuenta.',
'reports_report_budget_incomeAndExpensesChart' => 'Este gráfico le muestra sus gastos por presupuesto.',
// create transaction
'transactions_create_switch_box' => 'Utilice estos botones para cambiar rápidamente el tipo de transacción que usted desea guardar.',
- 'transactions_create_ffInput_category' => 'Usted puede libremente escribir en este campo. Previamente cree categorías que se sugerirán.',
+ 'transactions_create_ffInput_category' => 'Usted puede escribir libremente en este campo. Se le sugerirán categorías creadas previamente.',
'transactions_create_withdrawal_ffInput_budget' => 'Vincula su retiro con un presupuesto para un mejor control financiero.',
- 'transactions_create_withdrawal_currency_dropdown_amount' => 'Use esta lista desplegable cuando su retiro esta en otra moneda.',
- 'transactions_create_deposit_currency_dropdown_amount' => 'Use esta lista desplegable cuando su deposito este en otra moneda.',
+ 'transactions_create_withdrawal_currency_dropdown_amount' => 'Use esta lista desplegable cuando su retiro esté en otra moneda.',
+ 'transactions_create_deposit_currency_dropdown_amount' => 'Use esta lista desplegable cuando su deposito esté en otra moneda.',
'transactions_create_transfer_ffInput_piggy_bank_id' => 'Seleccione una alcancía y vincule esta transferencia con sus ahorros.',
// piggy banks index:
- 'piggy-banks_index_saved' => 'Este campo le muestra cuanto usted ha ahorrado en cada alcancía.',
- 'piggy-banks_index_button' => 'Junto con esta barra de progresoo hay dos botones (+ y -) para añadir o eliminar dinero de cada alcancía.',
+ 'piggy-banks_index_saved' => 'Este campo le muestra cuanto ha ahorrado usted en cada alcancía.',
+ 'piggy-banks_index_button' => 'Junto con esta barra de progreso hay dos botones (+ y -) para añadir o eliminar dinero de cada alcancía.',
'piggy-banks_index_accountStatus' => 'Para cada cuenta de activos con al menos una alcancía, el estado esta listado en esta tabla.',
// create piggy
@@ -90,39 +90,39 @@ return [
// show piggy
'piggy-banks_show_piggyChart' => 'Este informe le mostrara la historia de esta alcancía.',
'piggy-banks_show_piggyDetails' => 'Algunos detalles sobre tu alcancía',
- 'piggy-banks_show_piggyEvents' => 'Cualquier adición o eliminación también se ponen en lista aquí.',
+ 'piggy-banks_show_piggyEvents' => 'Cualquier adición o eliminación también se listan aquí.',
// bill index
- 'bills_index_rules' => 'Here you see which rules will check if this bill is hit',
+ 'bills_index_rules' => 'Aquí verá que reglas serán comprobadas si esta factura es seleccionada',
'bills_index_paid_in_period' => 'Este campo indica cuando la factura fue pagada por última vez.',
- 'bills_index_expected_in_period' => 'Este campo indica para cada factura si se espera que llegue la próxima factura.',
+ 'bills_index_expected_in_period' => 'Este campo indica para cada factura, si y cuándo se espera que llegue la próxima factura.',
// show bill
'bills_show_billInfo' => 'Esta tabla muestra alguna información general acerca de esta factura.',
- 'bills_show_billButtons' => 'Use este botón para volver a escanear transacciones viejas, para que ellos coincidan con esta factura.',
+ 'bills_show_billButtons' => 'Use este botón para volver a escanear transacciones viejas, para que coincidan con esta factura.',
'bills_show_billChart' => 'Este gráfico muestra las transacciones vinculadas con esta factura.',
// create bill
- 'bills_create_intro' => 'Use cuentas para rastrear la cantidad de dinero correspondiente a cada periodo. Piense en gastos como renta, seguro o pagos de credito de vivienda.',
+ 'bills_create_intro' => 'Use facturas para rastrear la cantidad de dinero correspondiente a cada período. Piense en gastos como renta, seguro o pagos de hipoteca.',
'bills_create_name' => 'Use un nombre descriptivo como "alquiler" o "seguro de salud".',
//'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.',
'bills_create_amount_min_holder' => 'Seleccione un monto mínimo y uno máximo para esta factura.',
- 'bills_create_repeat_freq_holder' => 'Muchas facturas se repiten mensualmente, pero usted puede establecer otra frecuencia aquí.',
+ 'bills_create_repeat_freq_holder' => 'La mayoría de facturas se repiten mensualmente, pero usted puede establecer otra frecuencia aquí.',
'bills_create_skip_holder' => 'Si una cuenta se repite cada 2 semanas, el campo "saltar" debe estar marcado como "1" para saltar una semana y generar el gasto cada 2.',
// rules index
- 'rules_index_intro' => 'Firefly III le permite administrar reglas, que automáticamente se aplicaran para cualquier transacción que cree o edite.',
+ 'rules_index_intro' => 'Firefly III le permite administrar reglas que, automáticamente se aplicarán a cualquier transacción que cree o edite.',
'rules_index_new_rule_group' => 'Usted puede combinar reglas en grupos para una administración mas fácil.',
- 'rules_index_new_rule' => 'Crear tantas reglas como usted quiera.',
- 'rules_index_prio_buttons' => 'Ordenarlos de la forma que mejor le parezca.',
+ 'rules_index_new_rule' => 'Cree tantas reglas como usted quiera.',
+ 'rules_index_prio_buttons' => 'Ordénelos de la forma que mejor le parezca.',
'rules_index_test_buttons' => 'Usted puede probar sus reglas o aplicarlas a transacciones existentes.',
'rules_index_rule-triggers' => 'Las reglas tienen "disparadores" y "acciones" que usted puede ordenar arrastrando y soltando.',
- 'rules_index_outro' => '¡Asegúrese de revisar las paginas de ayuda usando el icono (?) en el tope derecho!',
+ 'rules_index_outro' => '¡Asegúrese de revisar las páginas de ayuda usando el ícono (?) en el tope derecho!',
// create rule:
- 'rules_create_mandatory' => 'Elija un titulo descriptivo, y establezca cuando la regla deba ser botada.',
- 'rules_create_ruletriggerholder' => 'Añadir tantos desencadenantes como desee, pero recuerde que TODOS los desencadenadores deben coincidir antes de que cualquier acción sea eliminada.',
- 'rules_create_test_rule_triggers' => 'Use este botón para ser cuales transacciones coincidirán con su regla.',
+ 'rules_create_mandatory' => 'Elija un título descriptivo, y establezca cuando la regla deba ser botada.',
+ 'rules_create_ruletriggerholder' => 'Añadir tantos desencadenantes como desee, pero recuerde que TODOS los desencadenantes deben coincidir antes de que cualquier acción sea eliminada.',
+ 'rules_create_test_rule_triggers' => 'Use este botón para ver cuáles transacciones coincidirán con su regla.',
'rules_create_actions' => 'Establezca tantas acciones como usted lo desee.',
// preferences
@@ -133,5 +133,5 @@ return [
'currencies_index_default' => 'Firefly III tiene una moneda por defecto. Usted por supuesto puede siempre cambiarla usando estos botones.',
// create currency
- 'currencies_create_code' => 'Este código debe ser compatible con ISO (Google para su nueva moneda).',
+ 'currencies_create_code' => 'Este código debe ser compatible con ISO (Googlee para su nueva moneda).',
];
diff --git a/resources/lang/es_ES/validation.php b/resources/lang/es_ES/validation.php
index 651a47e5d0..7616ba03ff 100644
--- a/resources/lang/es_ES/validation.php
+++ b/resources/lang/es_ES/validation.php
@@ -24,6 +24,7 @@ declare(strict_types=1);
return [
'iban' => 'Este no es un IBAN válido.',
+ 'zero_or_more' => 'The value cannot be negative.',
'source_equals_destination' => 'La cuenta origen es igual que la cuenta destino.',
'unique_account_number_for_user' => 'Parece que este número de cuenta ya está en uso.',
'unique_iban_for_user' => 'Parece que este IBAN ya está en uso.',
diff --git a/resources/lang/fr_FR/firefly.php b/resources/lang/fr_FR/firefly.php
index 8d736f5843..f3dada3a19 100644
--- a/resources/lang/fr_FR/firefly.php
+++ b/resources/lang/fr_FR/firefly.php
@@ -551,6 +551,8 @@ return [
'email_changed_logout' => 'Vous ne pouvez pas vous connecter tant que vous n\'aurez pas vérifié votre adresse e-mail.',
'login_with_new_email' => 'Vous pouvez désormais vous connecter avec votre nouvelle adresse e-mail.',
'login_with_old_email' => 'Vous pouvez à nouveau vous connecter à l\'aide de votre ancienne adresse e-mail.',
+ 'login_provider_local_only' => 'Cette action n’est pas disponible lors de l’authentification par ":login_provider".',
+ 'delete_local_info_only' => 'Comme vous vous authentifiez via ":login_provider", cela ne supprimera que les informations locales de Firefly III.',
// attachments
'nr_of_attachments' => 'Une pièce jointe|:count pièces jointes',
@@ -777,6 +779,7 @@ return [
'interest_calc_daily' => 'Par jour',
'interest_calc_monthly' => 'Par mois',
'interest_calc_yearly' => 'Par an',
+ 'initial_balance_account' => 'Initial balance account of :name',
// categories:
'new_category' => 'Nouvelle catégorie',
@@ -1021,6 +1024,7 @@ return [
'select_expense_revenue' => 'Sélectionner le compte de dépenses / recettes',
'multi_currency_report_sum' => 'Cette liste contenant des comptes dans des devises différentes, les sommes que vous voyez peuvent ne pas faire sens. Le rapport sera lui toujours généré dans votre devise par défaut.',
'sum_in_default_currency' => 'La somme sera toujours dans votre devise par défaut.',
+ 'net_filtered_prefs' => 'Ce graphique n’inclura jamais les comptes dont l\'option « inclure dans la valeur nette » n\'est pas cochée.',
// charts:
'chart' => 'Graphique',
diff --git a/resources/lang/fr_FR/form.php b/resources/lang/fr_FR/form.php
index 858bcc931e..d8c7c399a0 100644
--- a/resources/lang/fr_FR/form.php
+++ b/resources/lang/fr_FR/form.php
@@ -191,6 +191,7 @@ return [
'password_confirmation' => 'Entrer à nouveau le mot de passe',
'blocked' => 'Est bloqué ?',
'blocked_code' => 'Raison du blocage',
+ 'login_name' => 'Identifiant',
// import
'apply_rules' => 'Appliquer les règles',
@@ -222,6 +223,16 @@ return [
'public_key' => 'Clé publique',
'country_code' => 'Code pays',
'provider_code' => 'Banque ou fournisseur de données',
+ 'fints_url' => 'URL de l\'API FinTS',
+ 'fints_port' => 'Port',
+ 'fints_bank_code' => 'Code banque',
+ 'fints_username' => 'Nom d\'utilisateur',
+ 'fints_password' => 'Code PIN / Mot de passe',
+ 'fints_account' => 'Compte FinTS',
+ 'local_account' => 'Compte Firefly III',
+ 'from_date' => 'À partir du',
+ 'to_date' => 'Jusqu\'au',
+
'due_date' => 'Échéance',
'payment_date' => 'Date de paiement',
diff --git a/resources/lang/fr_FR/import.php b/resources/lang/fr_FR/import.php
index ae893cc3af..d9d4265da5 100644
--- a/resources/lang/fr_FR/import.php
+++ b/resources/lang/fr_FR/import.php
@@ -47,6 +47,9 @@ return [
'button_yodlee' => 'Importer en utilisant Yodlee',
'button_quovo' => 'Importer en utilisant Quovo',
'button_ynab' => 'Importer depuis "You Need A Budget"',
+ 'button_fints' => 'Importer en utilisant FinTS',
+
+
// global config box (index)
'global_config_title' => 'Configuration d\'importation globale',
'global_config_text' => 'À l\'avenir, cette boîte contiendra les préférences qui s\'appliquent à TOUTES les sources d\'importation ci-dessus.',
@@ -200,112 +203,120 @@ return [
'spectre_extra_key_unit_price' => 'Prix unitaire',
'spectre_extra_key_transactions_count' => 'Nombre de transactions',
+ //job configuration for finTS
+ 'fints_connection_failed' => 'Une erreur s’est produite lors de la tentative de connexion à votre banque. Veuillez vous assurer que toutes les données saisies sont correctes. Message d’erreur d\'origine : :originalError',
+
+ 'job_config_fints_url_help' => 'Par exemple https://banking-dkb.s-fints-pt-dkb.de/fints30',
+ 'job_config_fints_username_help' => 'Pour bon nombre de banques, il s’agit de votre numéro de compte.',
+ 'job_config_fints_port_help' => 'Le port par défaut est 443.',
+ 'job_config_fints_account_help' => 'Choisir le compte bancaire vers lequel vous souhaitez importer des transactions.',
+ 'job_config_local_account_help' => 'Choisissez le compte Firefly III correspondant à votre compte bancaire choisi ci-dessus.',
// specifics:
- 'specific_ing_name' => 'ING NL',
- 'specific_ing_descr' => 'Créer de meilleures descriptions dans les exports ING',
- 'specific_sns_name' => 'SNS / Volksbank NL',
- 'specific_sns_descr' => 'Supprime les guillemets des fichiers SNS / Volksbank',
- 'specific_abn_name' => 'ABN AMRO NL',
- 'specific_abn_descr' => 'Corrige d\'éventuels problèmes avec les fichiers ABN AMRO',
- 'specific_rabo_name' => 'Rabobank NL',
- 'specific_rabo_descr' => 'Corrige d\'éventuels problèmes avec les fichiers Rabobank',
- 'specific_pres_name' => 'President\'s Choice Financial CA',
- 'specific_pres_descr' => 'Corrige d\'éventuels problèmes avec les fichiers PC',
+ 'specific_ing_name' => 'ING NL',
+ 'specific_ing_descr' => 'Créer de meilleures descriptions dans les exports ING',
+ 'specific_sns_name' => 'SNS / Volksbank NL',
+ 'specific_sns_descr' => 'Supprime les guillemets des fichiers SNS / Volksbank',
+ 'specific_abn_name' => 'ABN AMRO NL',
+ 'specific_abn_descr' => 'Corrige d\'éventuels problèmes avec les fichiers ABN AMRO',
+ 'specific_rabo_name' => 'Rabobank NL',
+ 'specific_rabo_descr' => 'Corrige d\'éventuels problèmes avec les fichiers Rabobank',
+ 'specific_pres_name' => 'President\'s Choice Financial CA',
+ 'specific_pres_descr' => 'Corrige d\'éventuels problèmes avec les fichiers PC',
// job configuration for file provider (stage: roles)
- 'job_config_roles_title' => 'Configuration de l\'importation (3/4) - Définir le rôle de chaque colonne',
- 'job_config_roles_text' => 'Chaque colonne de votre fichier CSV contient des données différentes. Veuillez indiquer quel type de données l’importateur doit attendre. L’option de « mapper » les données signifie que vous allez lier chaque entrée trouvée dans la colonne à une valeur dans votre base de données. Une colonne souvent mappée est celle contenant l\'IBAN du compte opposé. Il est facile de le faire correspondre avec un IBAN déjà présent dans votre base de données.',
- 'job_config_roles_submit' => 'Continuer',
- 'job_config_roles_column_name' => 'Nom de colonne',
- 'job_config_roles_column_example' => 'Données d’exemple de colonne',
- 'job_config_roles_column_role' => 'Signification des données de colonne',
- 'job_config_roles_do_map_value' => 'Mapper ces valeurs',
- 'job_config_roles_no_example' => 'Aucun exemple de données disponible',
- 'job_config_roles_fa_warning' => 'Si vous marquez une colonne comme contenant un montant dans une devise étrangère, vous devez également indiquer quelle colonne définie cette devise.',
- 'job_config_roles_rwarning' => 'Vous devez à minima marquer une colonne en tant que colonne "Montant". Il est également conseillé de sélectionner une colonne pour la description, la date et le compte opposé.',
- 'job_config_roles_colum_count' => 'Colonne',
+ 'job_config_roles_title' => 'Configuration de l\'importation (3/4) - Définir le rôle de chaque colonne',
+ 'job_config_roles_text' => 'Chaque colonne de votre fichier CSV contient des données différentes. Veuillez indiquer quel type de données l’importateur doit attendre. L’option de « mapper » les données signifie que vous allez lier chaque entrée trouvée dans la colonne à une valeur dans votre base de données. Une colonne souvent mappée est celle contenant l\'IBAN du compte opposé. Il est facile de le faire correspondre avec un IBAN déjà présent dans votre base de données.',
+ 'job_config_roles_submit' => 'Continuer',
+ 'job_config_roles_column_name' => 'Nom de colonne',
+ 'job_config_roles_column_example' => 'Données d’exemple de colonne',
+ 'job_config_roles_column_role' => 'Signification des données de colonne',
+ 'job_config_roles_do_map_value' => 'Mapper ces valeurs',
+ 'job_config_roles_no_example' => 'Aucun exemple de données disponible',
+ 'job_config_roles_fa_warning' => 'Si vous marquez une colonne comme contenant un montant dans une devise étrangère, vous devez également indiquer quelle colonne définie cette devise.',
+ 'job_config_roles_rwarning' => 'Vous devez à minima marquer une colonne en tant que colonne "Montant". Il est également conseillé de sélectionner une colonne pour la description, la date et le compte opposé.',
+ 'job_config_roles_colum_count' => 'Colonne',
// job config for the file provider (stage: mapping):
- 'job_config_map_title' => 'Configuration de l\'importation (4/4) - Connecter les données à importer aux données de Firefly III',
- 'job_config_map_text' => 'Dans les tableaux suivants, la valeur située à gauche vous montre l\'information trouvée dans votre fichier téléchargé. C’est à vous de mapper cette valeur, si possible, avec une valeur déjà présente dans votre base de données. Firefly III s’en tiendra à ce mappage. Si il n’y a pas de valeur correspondante ou que vous ne souhaitez pas mapper de valeur spécifique, ne sélectionnez rien.',
- 'job_config_map_nothing' => 'Il n\'y a aucun donnée dans votre fichier qui puisse être mappée aux valeurs existantes. Merci de cliquer sur "Démarrez l\'importation" pour continuer.',
- 'job_config_field_value' => 'Valeur du champ',
- 'job_config_field_mapped' => 'Mappé à',
- 'map_do_not_map' => '(ne pas mapper)',
- 'job_config_map_submit' => 'Démarrez l\'importation',
+ 'job_config_map_title' => 'Configuration de l\'importation (4/4) - Connecter les données à importer aux données de Firefly III',
+ 'job_config_map_text' => 'Dans les tableaux suivants, la valeur située à gauche vous montre l\'information trouvée dans votre fichier téléchargé. C’est à vous de mapper cette valeur, si possible, avec une valeur déjà présente dans votre base de données. Firefly III s’en tiendra à ce mappage. Si il n’y a pas de valeur correspondante ou que vous ne souhaitez pas mapper de valeur spécifique, ne sélectionnez rien.',
+ 'job_config_map_nothing' => 'Il n\'y a aucun donnée dans votre fichier qui puisse être mappée aux valeurs existantes. Merci de cliquer sur "Démarrez l\'importation" pour continuer.',
+ 'job_config_field_value' => 'Valeur du champ',
+ 'job_config_field_mapped' => 'Mappé à',
+ 'map_do_not_map' => '(ne pas mapper)',
+ 'job_config_map_submit' => 'Démarrez l\'importation',
// import status page:
- 'import_with_key' => 'Importer avec la clé \':key\'',
- 'status_wait_title' => 'Veuillez patienter...',
- 'status_wait_text' => 'Cette boîte disparaîtra dans un instant.',
- 'status_running_title' => 'L\'importation est en cours d\'exécution',
- 'status_job_running' => 'Veuillez patienter, importation des données en cours...',
- 'status_job_storing' => 'Veuillez patientez, enregistrement des données en cours...',
- 'status_job_rules' => 'Veuillez patienter, exécution des règles...',
- 'status_fatal_title' => 'Erreur fatale',
- 'status_fatal_text' => 'L\'importation a rencontré une erreur qui l\'a empêché de s\'achever correctement. Toutes nos excuses !',
- 'status_fatal_more' => 'Ce message d\'erreur (probablement très énigmatique) est complété par les fichiers de log que vous trouverez sur votre disque dur ou dans le container Docker depuis lequel vous exécutez Firefly III.',
- 'status_finished_title' => 'Importation terminée',
- 'status_finished_text' => 'L\'importation est terminée.',
- 'finished_with_errors' => 'Des erreurs se sont produites pendant l\'importation. Veuillez les examiner avec attention.',
- 'unknown_import_result' => 'Résultat de l\'importation inconnu',
- 'result_no_transactions' => 'Aucune opération n\'a été importée. Il s\'agissait peut être de doublons, ou il n\'y avait simplement aucune opération a importer. Le fichier de log pourra peut être vous en dire plus sur ce qu\'il s\'est passé. Si vous importez des données régulièrement, ceci est normal.',
- 'result_one_transaction' => 'Une seule transaction a été importée. Elle est stockée sous le tag :tag où vous pouvez l\'afficher en détail.',
- 'result_many_transactions' => 'Firefly III a importé :count transactions. Elles sont stockées sous le tag :tag où vous pouvez les afficher en détail.',
+ 'import_with_key' => 'Importer avec la clé \':key\'',
+ 'status_wait_title' => 'Veuillez patienter...',
+ 'status_wait_text' => 'Cette boîte disparaîtra dans un instant.',
+ 'status_running_title' => 'L\'importation est en cours d\'exécution',
+ 'status_job_running' => 'Veuillez patienter, importation des données en cours...',
+ 'status_job_storing' => 'Veuillez patientez, enregistrement des données en cours...',
+ 'status_job_rules' => 'Veuillez patienter, exécution des règles...',
+ 'status_fatal_title' => 'Erreur fatale',
+ 'status_fatal_text' => 'L\'importation a rencontré une erreur qui l\'a empêché de s\'achever correctement. Toutes nos excuses !',
+ 'status_fatal_more' => 'Ce message d\'erreur (probablement très énigmatique) est complété par les fichiers de log que vous trouverez sur votre disque dur ou dans le container Docker depuis lequel vous exécutez Firefly III.',
+ 'status_finished_title' => 'Importation terminée',
+ 'status_finished_text' => 'L\'importation est terminée.',
+ 'finished_with_errors' => 'Des erreurs se sont produites pendant l\'importation. Veuillez les examiner avec attention.',
+ 'unknown_import_result' => 'Résultat de l\'importation inconnu',
+ 'result_no_transactions' => 'Aucune opération n\'a été importée. Il s\'agissait peut être de doublons, ou il n\'y avait simplement aucune opération a importer. Le fichier de log pourra peut être vous en dire plus sur ce qu\'il s\'est passé. Si vous importez des données régulièrement, ceci est normal.',
+ 'result_one_transaction' => 'Une seule transaction a été importée. Elle est stockée sous le tag :tag où vous pouvez l\'afficher en détail.',
+ 'result_many_transactions' => 'Firefly III a importé :count transactions. Elles sont stockées sous le tag :tag où vous pouvez les afficher en détail.',
// general errors and warnings:
- 'bad_job_status' => 'Vous ne pouvez pas accéder à cette page tant que l\'importation a le statut ":status".',
+ 'bad_job_status' => 'Vous ne pouvez pas accéder à cette page tant que l\'importation a le statut ":status".',
// column roles for CSV import:
- 'column__ignore' => '(ignorer cette colonne)',
- 'column_account-iban' => 'Compte d’actif (IBAN)',
- 'column_account-id' => 'Compte d\'actif (ID correspondant à FF3)',
- 'column_account-name' => 'Compte d’actif (nom)',
- 'column_account-bic' => 'Compte d’actif (BIC)',
- 'column_amount' => 'Montant',
- 'column_amount_foreign' => 'Montant (en devise étrangère)',
- 'column_amount_debit' => 'Montant (colonne débit)',
- 'column_amount_credit' => 'Montant (colonne de crédit)',
- 'column_amount_negated' => 'Montant (colonne aux valeurs opposées)',
- 'column_amount-comma-separated' => 'Montant (virgule comme séparateur décimal)',
- 'column_bill-id' => 'Facture (ID correspondant à FF3)',
- 'column_bill-name' => 'Nom de la facture',
- 'column_budget-id' => 'Budget (ID correspondant à FF3)',
- 'column_budget-name' => 'Nom du budget',
- 'column_category-id' => 'Catégorie (ID correspondant à FF3)',
- 'column_category-name' => 'Nom de catégorie',
- 'column_currency-code' => 'Code de la devise (ISO 4217)',
- 'column_foreign-currency-code' => 'Code de devise étrangère (ISO 4217)',
- 'column_currency-id' => 'Devise (ID correspondant à FF3)',
- 'column_currency-name' => 'Nom de la devise (correspondant à FF3)',
- 'column_currency-symbol' => 'Symbole de la devise (correspondant à FF3)',
- 'column_date-interest' => 'Date de calcul des intérêts',
- 'column_date-book' => 'Date d\'enregistrement de la transaction',
- 'column_date-process' => 'Date de traitement de la transaction',
- 'column_date-transaction' => 'Date',
- 'column_date-due' => 'Date d\'échéance de la transaction',
- 'column_date-payment' => 'Date de paiement de la transaction',
- 'column_date-invoice' => 'Date de facturation de la transaction',
- 'column_description' => 'Description',
- 'column_opposing-iban' => 'Compte opposé (IBAN)',
- 'column_opposing-bic' => 'Compte opposé (BIC)',
- 'column_opposing-id' => 'Compte opposé (ID correspondant à FF3)',
- 'column_external-id' => 'ID externe',
- 'column_opposing-name' => 'Compte opposé (nom)',
- 'column_rabo-debit-credit' => 'Indicateur de débit/crédit spécifique à Rabobank',
- 'column_ing-debit-credit' => 'Indicateur de débit/crédit spécifique à ING',
- 'column_sepa-ct-id' => 'Référence de bout en bout SEPA',
- 'column_sepa-ct-op' => 'Référence SEPA du compte opposé',
- 'column_sepa-db' => 'Référence Unique de Mandat SEPA',
- 'column_sepa-cc' => 'Code de rapprochement SEPA',
- 'column_sepa-ci' => 'Identifiant Créancier SEPA',
- 'column_sepa-ep' => 'Objectif externe SEPA',
- 'column_sepa-country' => 'Code de pays SEPA',
- 'column_tags-comma' => 'Tags (séparés par des virgules)',
- 'column_tags-space' => 'Tags (séparés par un espace)',
- 'column_account-number' => 'Compte d’actif (numéro de compte)',
- 'column_opposing-number' => 'Compte opposé (numéro de compte)',
- 'column_note' => 'Note(s)',
- 'column_internal-reference' => 'Référence interne',
+ 'column__ignore' => '(ignorer cette colonne)',
+ 'column_account-iban' => 'Compte d’actif (IBAN)',
+ 'column_account-id' => 'Compte d\'actif (ID correspondant à FF3)',
+ 'column_account-name' => 'Compte d’actif (nom)',
+ 'column_account-bic' => 'Compte d’actif (BIC)',
+ 'column_amount' => 'Montant',
+ 'column_amount_foreign' => 'Montant (en devise étrangère)',
+ 'column_amount_debit' => 'Montant (colonne débit)',
+ 'column_amount_credit' => 'Montant (colonne de crédit)',
+ 'column_amount_negated' => 'Montant (colonne aux valeurs opposées)',
+ 'column_amount-comma-separated' => 'Montant (virgule comme séparateur décimal)',
+ 'column_bill-id' => 'Facture (ID correspondant à FF3)',
+ 'column_bill-name' => 'Nom de la facture',
+ 'column_budget-id' => 'Budget (ID correspondant à FF3)',
+ 'column_budget-name' => 'Nom du budget',
+ 'column_category-id' => 'Catégorie (ID correspondant à FF3)',
+ 'column_category-name' => 'Nom de catégorie',
+ 'column_currency-code' => 'Code de la devise (ISO 4217)',
+ 'column_foreign-currency-code' => 'Code de devise étrangère (ISO 4217)',
+ 'column_currency-id' => 'Devise (ID correspondant à FF3)',
+ 'column_currency-name' => 'Nom de la devise (correspondant à FF3)',
+ 'column_currency-symbol' => 'Symbole de la devise (correspondant à FF3)',
+ 'column_date-interest' => 'Date de calcul des intérêts',
+ 'column_date-book' => 'Date d\'enregistrement de la transaction',
+ 'column_date-process' => 'Date de traitement de la transaction',
+ 'column_date-transaction' => 'Date',
+ 'column_date-due' => 'Date d\'échéance de la transaction',
+ 'column_date-payment' => 'Date de paiement de la transaction',
+ 'column_date-invoice' => 'Date de facturation de la transaction',
+ 'column_description' => 'Description',
+ 'column_opposing-iban' => 'Compte opposé (IBAN)',
+ 'column_opposing-bic' => 'Compte opposé (BIC)',
+ 'column_opposing-id' => 'Compte opposé (ID correspondant à FF3)',
+ 'column_external-id' => 'ID externe',
+ 'column_opposing-name' => 'Compte opposé (nom)',
+ 'column_rabo-debit-credit' => 'Indicateur de débit/crédit spécifique à Rabobank',
+ 'column_ing-debit-credit' => 'Indicateur de débit/crédit spécifique à ING',
+ 'column_sepa-ct-id' => 'Référence de bout en bout SEPA',
+ 'column_sepa-ct-op' => 'Référence SEPA du compte opposé',
+ 'column_sepa-db' => 'Référence Unique de Mandat SEPA',
+ 'column_sepa-cc' => 'Code de rapprochement SEPA',
+ 'column_sepa-ci' => 'Identifiant Créancier SEPA',
+ 'column_sepa-ep' => 'Objectif externe SEPA',
+ 'column_sepa-country' => 'Code de pays SEPA',
+ 'column_tags-comma' => 'Tags (séparés par des virgules)',
+ 'column_tags-space' => 'Tags (séparés par un espace)',
+ 'column_account-number' => 'Compte d’actif (numéro de compte)',
+ 'column_opposing-number' => 'Compte opposé (numéro de compte)',
+ 'column_note' => 'Note(s)',
+ 'column_internal-reference' => 'Référence interne',
];
diff --git a/resources/lang/fr_FR/validation.php b/resources/lang/fr_FR/validation.php
index 059de2fb0a..0e5fb928d0 100644
--- a/resources/lang/fr_FR/validation.php
+++ b/resources/lang/fr_FR/validation.php
@@ -24,6 +24,7 @@ declare(strict_types=1);
return [
'iban' => 'Il ne s\'agit pas d\'un IBAN valide.',
+ 'zero_or_more' => 'Le montant ne peut pas être négatif.',
'source_equals_destination' => 'Le compte source est identique au compte de destination.',
'unique_account_number_for_user' => 'Il semble que ce numéro de compte est déjà utilisé.',
'unique_iban_for_user' => 'Il semble que cet IBAN soit déjà utilisé.',
diff --git a/resources/lang/id_ID/firefly.php b/resources/lang/id_ID/firefly.php
index c05114bb72..4566057278 100644
--- a/resources/lang/id_ID/firefly.php
+++ b/resources/lang/id_ID/firefly.php
@@ -551,6 +551,8 @@ return [
'email_changed_logout' => 'Sampai Anda memverifikasi alamat email Anda, Anda tidak dapat login.',
'login_with_new_email' => 'Anda sekarang bisa masuk dengan alamat email baru Anda.',
'login_with_old_email' => 'Anda sekarang dapat login dengan alamat email lama Anda lagi.',
+ 'login_provider_local_only' => 'This action is not available when authenticating through ":login_provider".',
+ 'delete_local_info_only' => 'Because you authenticate through ":login_provider", this will only delete local Firefly III information.',
// attachments
'nr_of_attachments' => 'Satu lampiran |:count lampiran',
@@ -777,6 +779,7 @@ return [
'interest_calc_daily' => 'Per day',
'interest_calc_monthly' => 'Per month',
'interest_calc_yearly' => 'Per year',
+ 'initial_balance_account' => 'Initial balance account of :name',
// categories:
'new_category' => 'Kategori baru',
@@ -1021,6 +1024,7 @@ return [
'select_expense_revenue' => 'Pilih akun biaya / pendapatan',
'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.',
'sum_in_default_currency' => 'The sum will always be in your default currency.',
+ 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.',
// charts:
'chart' => 'Grafik',
diff --git a/resources/lang/id_ID/form.php b/resources/lang/id_ID/form.php
index 70ed171a64..290ad304b9 100644
--- a/resources/lang/id_ID/form.php
+++ b/resources/lang/id_ID/form.php
@@ -191,6 +191,7 @@ return [
'password_confirmation' => 'Password (lagi)',
'blocked' => 'Apakah diblokir?',
'blocked_code' => 'Alasan untuk blok',
+ 'login_name' => 'Login',
// import
'apply_rules' => 'Apply rules',
@@ -222,6 +223,16 @@ return [
'public_key' => 'Kunci publik',
'country_code' => 'Kode negara',
'provider_code' => 'Bank atau penyedia data',
+ 'fints_url' => 'FinTS API URL',
+ 'fints_port' => 'Port',
+ 'fints_bank_code' => 'Bank code',
+ 'fints_username' => 'Username',
+ 'fints_password' => 'PIN / Password',
+ 'fints_account' => 'FinTS account',
+ 'local_account' => 'Firefly III account',
+ 'from_date' => 'Date from',
+ 'to_date' => 'Date to',
+
'due_date' => 'Batas tanggal terakhir',
'payment_date' => 'Tanggal pembayaran',
diff --git a/resources/lang/id_ID/import.php b/resources/lang/id_ID/import.php
index e07fa52526..006f4ac73c 100644
--- a/resources/lang/id_ID/import.php
+++ b/resources/lang/id_ID/import.php
@@ -47,6 +47,9 @@ return [
'button_yodlee' => 'Import using Yodlee',
'button_quovo' => 'Import using Quovo',
'button_ynab' => 'Import from You Need A Budget',
+ 'button_fints' => 'Import using FinTS',
+
+
// global config box (index)
'global_config_title' => 'Global import configuration',
'global_config_text' => 'In the future, this box will feature preferences that apply to ALL import providers above.',
@@ -200,112 +203,120 @@ return [
'spectre_extra_key_unit_price' => 'Unit price',
'spectre_extra_key_transactions_count' => 'Transaction count',
+ //job configuration for finTS
+ 'fints_connection_failed' => 'An error occurred while trying to connecting to your bank. Please make sure that all the data you entered is correct. Original error message: :originalError',
+
+ 'job_config_fints_url_help' => 'E.g. https://banking-dkb.s-fints-pt-dkb.de/fints30',
+ 'job_config_fints_username_help' => 'For many banks this is your account number.',
+ 'job_config_fints_port_help' => 'The default port is 443.',
+ 'job_config_fints_account_help' => 'Choose the bank account for which you want to import transactions.',
+ 'job_config_local_account_help' => 'Choose the Firefly III account corresponding to your bank account chosen above.',
// specifics:
- 'specific_ing_name' => 'ING NL',
- 'specific_ing_descr' => 'Create better descriptions in ING exports',
- 'specific_sns_name' => 'SNS / Volksbank NL',
- 'specific_sns_descr' => 'Trim quotes from SNS / Volksbank export files',
- 'specific_abn_name' => 'ABN AMRO NL',
- 'specific_abn_descr' => 'Fixes potential problems with ABN AMRO files',
- 'specific_rabo_name' => 'Rabobank NL',
- 'specific_rabo_descr' => 'Fixes potential problems with Rabobank files',
- 'specific_pres_name' => 'President\'s Choice Financial CA',
- 'specific_pres_descr' => 'Fixes potential problems with PC files',
+ 'specific_ing_name' => 'ING NL',
+ 'specific_ing_descr' => 'Create better descriptions in ING exports',
+ 'specific_sns_name' => 'SNS / Volksbank NL',
+ 'specific_sns_descr' => 'Trim quotes from SNS / Volksbank export files',
+ 'specific_abn_name' => 'ABN AMRO NL',
+ 'specific_abn_descr' => 'Fixes potential problems with ABN AMRO files',
+ 'specific_rabo_name' => 'Rabobank NL',
+ 'specific_rabo_descr' => 'Fixes potential problems with Rabobank files',
+ 'specific_pres_name' => 'President\'s Choice Financial CA',
+ 'specific_pres_descr' => 'Fixes potential problems with PC files',
// job configuration for file provider (stage: roles)
- 'job_config_roles_title' => 'Import setup (3/4) - Define each column\'s role',
- 'job_config_roles_text' => 'Each column in your CSV file contains certain data. Please indicate what kind of data the importer should expect. The option to "map" data means that you will link each entry found in the column to a value in your database. An often mapped column is the column that contains the IBAN of the opposing account. That can be easily matched to IBAN\'s present in your database already.',
- 'job_config_roles_submit' => 'Continue',
- 'job_config_roles_column_name' => 'Name of column',
- 'job_config_roles_column_example' => 'Column example data',
- 'job_config_roles_column_role' => 'Column data meaning',
- 'job_config_roles_do_map_value' => 'Map these values',
- 'job_config_roles_no_example' => 'No example data available',
- 'job_config_roles_fa_warning' => 'If you mark a column as containing an amount in a foreign currency, you must also set the column that contains which currency it is.',
- 'job_config_roles_rwarning' => 'At the very least, mark one column as the amount-column. It is advisable to also select a column for the description, date and the opposing account.',
- 'job_config_roles_colum_count' => 'Column',
+ 'job_config_roles_title' => 'Import setup (3/4) - Define each column\'s role',
+ 'job_config_roles_text' => 'Each column in your CSV file contains certain data. Please indicate what kind of data the importer should expect. The option to "map" data means that you will link each entry found in the column to a value in your database. An often mapped column is the column that contains the IBAN of the opposing account. That can be easily matched to IBAN\'s present in your database already.',
+ 'job_config_roles_submit' => 'Continue',
+ 'job_config_roles_column_name' => 'Name of column',
+ 'job_config_roles_column_example' => 'Column example data',
+ 'job_config_roles_column_role' => 'Column data meaning',
+ 'job_config_roles_do_map_value' => 'Map these values',
+ 'job_config_roles_no_example' => 'No example data available',
+ 'job_config_roles_fa_warning' => 'If you mark a column as containing an amount in a foreign currency, you must also set the column that contains which currency it is.',
+ 'job_config_roles_rwarning' => 'At the very least, mark one column as the amount-column. It is advisable to also select a column for the description, date and the opposing account.',
+ 'job_config_roles_colum_count' => 'Column',
// job config for the file provider (stage: mapping):
- 'job_config_map_title' => 'Import setup (4/4) - Connect import data to Firefly III data',
- 'job_config_map_text' => 'In the following tables, the left value shows you information found in your uploaded file. It is your task to map this value, if possible, to a value already present in your database. Firefly will stick to this mapping. If there is no value to map to, or you do not wish to map the specific value, select nothing.',
- 'job_config_map_nothing' => 'There is no data present in your file that you can map to existing values. Please press "Start the import" to continue.',
- 'job_config_field_value' => 'Field value',
- 'job_config_field_mapped' => 'Mapped to',
- 'map_do_not_map' => '(jangan memetakan)',
- 'job_config_map_submit' => 'Start the import',
+ 'job_config_map_title' => 'Import setup (4/4) - Connect import data to Firefly III data',
+ 'job_config_map_text' => 'In the following tables, the left value shows you information found in your uploaded file. It is your task to map this value, if possible, to a value already present in your database. Firefly will stick to this mapping. If there is no value to map to, or you do not wish to map the specific value, select nothing.',
+ 'job_config_map_nothing' => 'There is no data present in your file that you can map to existing values. Please press "Start the import" to continue.',
+ 'job_config_field_value' => 'Field value',
+ 'job_config_field_mapped' => 'Mapped to',
+ 'map_do_not_map' => '(jangan memetakan)',
+ 'job_config_map_submit' => 'Start the import',
// import status page:
- 'import_with_key' => 'Impor dengan kunci \':key\'',
- 'status_wait_title' => 'Tolong tunggu sebentar...',
- 'status_wait_text' => 'Kotak ini akan hilang dalam sekejap.',
- 'status_running_title' => 'Impor sedang berjalan',
- 'status_job_running' => 'Please wait, running the import...',
- 'status_job_storing' => 'Please wait, storing data...',
- 'status_job_rules' => 'Please wait, running rules...',
- 'status_fatal_title' => 'Fatal error',
- 'status_fatal_text' => 'The import has suffered from an error it could not recover from. Apologies!',
- 'status_fatal_more' => 'This (possibly very cryptic) error message is complemented by log files, which you can find on your hard drive, or in the Docker container where you run Firefly III from.',
- 'status_finished_title' => 'Import finished',
- 'status_finished_text' => 'The import has finished.',
- 'finished_with_errors' => 'There were some errors during the import. Please review them carefully.',
- 'unknown_import_result' => 'Unknown import result',
- 'result_no_transactions' => 'No transactions have been imported. Perhaps they were all duplicates is simply no transactions where present to be imported. Perhaps the log files can tell you what happened. If you import data regularly, this is normal.',
- 'result_one_transaction' => 'Exactly one transaction has been imported. It is stored under tag :tag where you can inspect it further.',
- 'result_many_transactions' => 'Firefly III has imported :count transactions. They are stored under tag :tag where you can inspect them further.',
+ 'import_with_key' => 'Impor dengan kunci \':key\'',
+ 'status_wait_title' => 'Tolong tunggu sebentar...',
+ 'status_wait_text' => 'Kotak ini akan hilang dalam sekejap.',
+ 'status_running_title' => 'Impor sedang berjalan',
+ 'status_job_running' => 'Please wait, running the import...',
+ 'status_job_storing' => 'Please wait, storing data...',
+ 'status_job_rules' => 'Please wait, running rules...',
+ 'status_fatal_title' => 'Fatal error',
+ 'status_fatal_text' => 'The import has suffered from an error it could not recover from. Apologies!',
+ 'status_fatal_more' => 'This (possibly very cryptic) error message is complemented by log files, which you can find on your hard drive, or in the Docker container where you run Firefly III from.',
+ 'status_finished_title' => 'Import finished',
+ 'status_finished_text' => 'The import has finished.',
+ 'finished_with_errors' => 'There were some errors during the import. Please review them carefully.',
+ 'unknown_import_result' => 'Unknown import result',
+ 'result_no_transactions' => 'No transactions have been imported. Perhaps they were all duplicates is simply no transactions where present to be imported. Perhaps the log files can tell you what happened. If you import data regularly, this is normal.',
+ 'result_one_transaction' => 'Exactly one transaction has been imported. It is stored under tag :tag where you can inspect it further.',
+ 'result_many_transactions' => 'Firefly III has imported :count transactions. They are stored under tag :tag where you can inspect them further.',
// general errors and warnings:
- 'bad_job_status' => 'To access this page, your import job cannot have status ":status".',
+ 'bad_job_status' => 'To access this page, your import job cannot have status ":status".',
// column roles for CSV import:
- 'column__ignore' => '(abaikan kolom ini)',
- 'column_account-iban' => 'Akun aset (IBAN)',
- 'column_account-id' => 'Asset account ID (matching FF3)',
- 'column_account-name' => 'Akun aset (nama)',
- 'column_account-bic' => 'Asset account (BIC)',
- 'column_amount' => 'Jumlah',
- 'column_amount_foreign' => 'Amount (in foreign currency)',
- 'column_amount_debit' => 'Jumlah (kolom debit)',
- 'column_amount_credit' => 'Jumlah (kolom kredit)',
- 'column_amount_negated' => 'Amount (negated column)',
- 'column_amount-comma-separated' => 'Jumlah (koma sebagai pemisah desimal)',
- 'column_bill-id' => 'Bill ID (matching FF3)',
- 'column_bill-name' => 'Nama tagihan',
- 'column_budget-id' => 'Budget ID (matching FF3)',
- 'column_budget-name' => 'Nama anggaran',
- 'column_category-id' => 'Category ID (matching FF3)',
- 'column_category-name' => 'Nama Kategori',
- 'column_currency-code' => 'Kode mata uang (ISO 4217)',
- 'column_foreign-currency-code' => 'Foreign currency code (ISO 4217)',
- 'column_currency-id' => 'Currency ID (matching FF3)',
- 'column_currency-name' => 'Currency name (matching FF3)',
- 'column_currency-symbol' => 'Currency symbol (matching FF3)',
- 'column_date-interest' => 'Tanggal perhitungan bunga',
- 'column_date-book' => 'Tanggal pemesanan transaksi',
- 'column_date-process' => 'Tanggal proses transaksi',
- 'column_date-transaction' => 'Tanggal',
- 'column_date-due' => 'Transaction due date',
- 'column_date-payment' => 'Transaction payment date',
- 'column_date-invoice' => 'Transaction invoice date',
- 'column_description' => 'Deskripsi',
- 'column_opposing-iban' => 'Akun lawan (IBAN)',
- 'column_opposing-bic' => 'Opposing account (BIC)',
- 'column_opposing-id' => 'Opposing account ID (matching FF3)',
- 'column_external-id' => 'ID eksternal',
- 'column_opposing-name' => 'Akun lawan (nama)',
- 'column_rabo-debit-credit' => 'Indikator debit / kredit khusus Rabobank',
- 'column_ing-debit-credit' => 'Indikator debit / kredit ING yang spesifik',
- 'column_sepa-ct-id' => 'SEPA end-to-end Identifier',
- 'column_sepa-ct-op' => 'SEPA Opposing Account Identifier',
- 'column_sepa-db' => 'SEPA Mandate Identifier',
- 'column_sepa-cc' => 'SEPA Clearing Code',
- 'column_sepa-ci' => 'SEPA Creditor Identifier',
- 'column_sepa-ep' => 'SEPA External Purpose',
- 'column_sepa-country' => 'SEPA Country Code',
- 'column_tags-comma' => 'Tag (dipisahkan koma)',
- 'column_tags-space' => 'Tag (spasi terpisah)',
- 'column_account-number' => 'Akun aset (nomor rekening)',
- 'column_opposing-number' => 'Akun lawan (nomor rekening)',
- 'column_note' => 'Catatan (s)',
- 'column_internal-reference' => 'Internal reference',
+ 'column__ignore' => '(abaikan kolom ini)',
+ 'column_account-iban' => 'Akun aset (IBAN)',
+ 'column_account-id' => 'Asset account ID (matching FF3)',
+ 'column_account-name' => 'Akun aset (nama)',
+ 'column_account-bic' => 'Asset account (BIC)',
+ 'column_amount' => 'Jumlah',
+ 'column_amount_foreign' => 'Amount (in foreign currency)',
+ 'column_amount_debit' => 'Jumlah (kolom debit)',
+ 'column_amount_credit' => 'Jumlah (kolom kredit)',
+ 'column_amount_negated' => 'Amount (negated column)',
+ 'column_amount-comma-separated' => 'Jumlah (koma sebagai pemisah desimal)',
+ 'column_bill-id' => 'Bill ID (matching FF3)',
+ 'column_bill-name' => 'Nama tagihan',
+ 'column_budget-id' => 'Budget ID (matching FF3)',
+ 'column_budget-name' => 'Nama anggaran',
+ 'column_category-id' => 'Category ID (matching FF3)',
+ 'column_category-name' => 'Nama Kategori',
+ 'column_currency-code' => 'Kode mata uang (ISO 4217)',
+ 'column_foreign-currency-code' => 'Foreign currency code (ISO 4217)',
+ 'column_currency-id' => 'Currency ID (matching FF3)',
+ 'column_currency-name' => 'Currency name (matching FF3)',
+ 'column_currency-symbol' => 'Currency symbol (matching FF3)',
+ 'column_date-interest' => 'Tanggal perhitungan bunga',
+ 'column_date-book' => 'Tanggal pemesanan transaksi',
+ 'column_date-process' => 'Tanggal proses transaksi',
+ 'column_date-transaction' => 'Tanggal',
+ 'column_date-due' => 'Transaction due date',
+ 'column_date-payment' => 'Transaction payment date',
+ 'column_date-invoice' => 'Transaction invoice date',
+ 'column_description' => 'Deskripsi',
+ 'column_opposing-iban' => 'Akun lawan (IBAN)',
+ 'column_opposing-bic' => 'Opposing account (BIC)',
+ 'column_opposing-id' => 'Opposing account ID (matching FF3)',
+ 'column_external-id' => 'ID eksternal',
+ 'column_opposing-name' => 'Akun lawan (nama)',
+ 'column_rabo-debit-credit' => 'Indikator debit / kredit khusus Rabobank',
+ 'column_ing-debit-credit' => 'Indikator debit / kredit ING yang spesifik',
+ 'column_sepa-ct-id' => 'SEPA end-to-end Identifier',
+ 'column_sepa-ct-op' => 'SEPA Opposing Account Identifier',
+ 'column_sepa-db' => 'SEPA Mandate Identifier',
+ 'column_sepa-cc' => 'SEPA Clearing Code',
+ 'column_sepa-ci' => 'SEPA Creditor Identifier',
+ 'column_sepa-ep' => 'SEPA External Purpose',
+ 'column_sepa-country' => 'SEPA Country Code',
+ 'column_tags-comma' => 'Tag (dipisahkan koma)',
+ 'column_tags-space' => 'Tag (spasi terpisah)',
+ 'column_account-number' => 'Akun aset (nomor rekening)',
+ 'column_opposing-number' => 'Akun lawan (nomor rekening)',
+ 'column_note' => 'Catatan (s)',
+ 'column_internal-reference' => 'Internal reference',
];
diff --git a/resources/lang/id_ID/validation.php b/resources/lang/id_ID/validation.php
index 41997561bf..b7c3bc56c1 100644
--- a/resources/lang/id_ID/validation.php
+++ b/resources/lang/id_ID/validation.php
@@ -24,6 +24,7 @@ declare(strict_types=1);
return [
'iban' => 'Ini bukan IBAN yang valid.',
+ 'zero_or_more' => 'The value cannot be negative.',
'source_equals_destination' => 'The source account equals the destination account.',
'unique_account_number_for_user' => 'Sepertinya nomor rekening ini sudah digunakan.',
'unique_iban_for_user' => 'It looks like this IBAN is already in use.',
diff --git a/resources/lang/it_IT/components.php b/resources/lang/it_IT/components.php
index 296fa36c83..15f73fa840 100644
--- a/resources/lang/it_IT/components.php
+++ b/resources/lang/it_IT/components.php
@@ -28,5 +28,5 @@ return [
// bills:
'not_expected_period' => 'Non previsto questo periodo',
- 'not_or_not_yet' => 'Non ancora',
+ 'not_or_not_yet' => 'Non (ancora)',
];
diff --git a/resources/lang/it_IT/firefly.php b/resources/lang/it_IT/firefly.php
index 2ce4688079..61ad132c4a 100644
--- a/resources/lang/it_IT/firefly.php
+++ b/resources/lang/it_IT/firefly.php
@@ -195,14 +195,14 @@ return [
'update_check_title' => 'Controlla aggiornamenti',
'admin_update_check_title' => 'Controlla automaticamente aggiornamento',
'admin_update_check_explain' => 'Firefly III può verificare automaticamente gli aggiornamenti. Quando attivi questa impostazione, contatterà Github per verificare se è disponibile una nuova versione di Firefly III. Quando lo sarà, riceverai una notifica. Puoi testare questa notifica usando il pulsante a destra. Indicare di seguito se si desidera che Firefly III controlli gli aggiornamenti.',
- 'check_for_updates_permission' => 'Firefly III può controllare gli aggiornamenti, ma è necessario il tuo permesso per farlo. Vai alla amministrazione per indicare se desideri che questa funzione sia abilitata.',
+ 'check_for_updates_permission' => 'Firefly III può controllare gli aggiornamenti, ma è necessario il tuo permesso per farlo. Vai nell\'amministrazione per indicare se desideri che questa funzione sia abilitata.',
'updates_ask_me_later' => 'Chiedimelo più tardi',
'updates_do_not_check' => 'Non controllare gli aggiornamenti',
'updates_enable_check' => 'Abilita il controllo degli aggiornamenti',
'admin_update_check_now_title' => 'Controlla gli aggiornamenti ora',
'admin_update_check_now_explain' => 'Se si preme il pulsante, Firefly III controllerà se la versione corrente è la più recente.',
'check_for_updates_button' => 'Controlla ora!',
- 'update_new_version_alert' => 'È disponibile una nuova versione di Firefly III. Stai eseguendo v:your_version, l\'ultima versione è v:new_version che è stata rilasciata :date.',
+ 'update_new_version_alert' => 'È disponibile una nuova versione di Firefly III. Stai eseguendo v:your_version, l\'ultima versione è v:new_version che è stata rilasciata il :date.',
'update_current_version_alert' => 'Stai eseguendo v:version, che è l\'ultima versione disponibile.',
'update_newer_version_alert' => 'Stai eseguendo v:your_version, che è più recente rispetto all\'ultima versione, v:new_version.',
'update_check_error' => 'Si è verificato un errore durante il controllo degli aggiornamenti. Si prega di visualizzare i file di log.',
@@ -365,7 +365,7 @@ return [
'rule_trigger_currency_is' => 'La valuta della transazione è ":trigger_value"',
'rule_trigger_has_attachments_choice' => 'Ha almeno così tanti allegati',
'rule_trigger_has_attachments' => 'Ha almeno :trigger_value allegati',
- 'rule_trigger_store_journal' => 'Quando viene creata una transazione',
+ 'rule_trigger_store_journal' => 'Quando una transazione viene creata',
'rule_trigger_update_journal' => 'Quando una transazione viene aggiornata',
'rule_trigger_has_no_category_choice' => 'Non ha categoria',
'rule_trigger_has_no_category' => 'La transazione non ha categoria',
@@ -468,7 +468,7 @@ return [
'pref_6M' => 'Sei mesi',
'pref_1Y' => 'Un anno',
'pref_languages' => 'Lingue',
- 'pref_languages_help' => 'Firefly III supporta diverse lingue.',
+ 'pref_languages_help' => 'Firefly III supporta diverse lingue. Quale di queste preferisci?',
'pref_custom_fiscal_year' => 'Impostazioni anno fiscale',
'pref_custom_fiscal_year_label' => 'Abilita',
'pref_custom_fiscal_year_help' => 'Nei paesi che utilizzano un anno finanziario diverso rispetto al dal 1 gennaio al 31 dicembre, è possibile attivarlo e specificare i giorni di inizio / fine dell\'anno fiscale',
@@ -551,6 +551,8 @@ return [
'email_changed_logout' => 'Fino a quando non verifichi il tuo indirizzo email, non puoi effettuare il login.',
'login_with_new_email' => 'Ora puoi accedere con il tuo nuovo indirizzo email.',
'login_with_old_email' => 'Ora puoi accedere nuovamente con il tuo vecchio indirizzo email.',
+ 'login_provider_local_only' => 'Questa azione non è disponibile quando ci si autenticato con ":login_provider".',
+ 'delete_local_info_only' => 'Poiché ti sei autenticato con ":login_provider", questo eliminerà solamente le informazioni locali di Firefly III.',
// attachments
'nr_of_attachments' => 'Un allegato|:count attachments',
@@ -777,6 +779,7 @@ return [
'interest_calc_daily' => 'Al giorno',
'interest_calc_monthly' => 'Al mese',
'interest_calc_yearly' => 'All\'anno',
+ 'initial_balance_account' => 'Saldo iniziale del conto :name',
// categories:
'new_category' => 'Nuova categoria',
@@ -1021,6 +1024,7 @@ return [
'select_expense_revenue' => 'Seleziona conto spese/entrate',
'multi_currency_report_sum' => 'Poiché questo elenco contiene conti con più valute, le somme potrebbero non avere senso. Il rapporto ripiegherà sempre sulla valuta predefinita.',
'sum_in_default_currency' => 'La somma sarà sempre nella tua valuta predefinita.',
+ 'net_filtered_prefs' => 'Questo grafico non includerà i conti che hanno l\'opzione "Includi nel patrimonio" non selezionata.',
// charts:
'chart' => 'Grafico',
@@ -1045,7 +1049,7 @@ return [
'balance' => 'Saldo',
'sum' => 'Somma',
'average' => 'Media',
- 'balanceFor' => 'Saldo di :name',
+ 'balanceFor' => 'Saldo per :name',
// piggy banks:
'add_money_to_piggy' => 'Aggiungi denaro al salvadanaio":name"',
diff --git a/resources/lang/it_IT/form.php b/resources/lang/it_IT/form.php
index 8fa70789e3..cfb439b4f7 100644
--- a/resources/lang/it_IT/form.php
+++ b/resources/lang/it_IT/form.php
@@ -26,7 +26,7 @@ return [
// new user:
'bank_name' => 'Nome banca',
'bank_balance' => 'Saldo',
- 'savings_balance' => 'Saldo risparmio',
+ 'savings_balance' => 'Saldo risparmi',
'credit_card_limit' => 'Limite carta di credito',
'automatch' => 'Abbina automaticamente',
'skip' => 'Salta ogni',
@@ -124,7 +124,7 @@ return [
'attachments[]' => 'Allegati',
'store_new_withdrawal' => 'Salva nuovo prelievo',
'store_new_deposit' => 'Salva nuovo deposito',
- 'store_new_transfer' => 'Salva nuova trasferimento',
+ 'store_new_transfer' => 'Salva nuovo trasferimento',
'add_new_withdrawal' => 'Aggiungi nuovo prelievo',
'add_new_deposit' => 'Aggiungi nuovo deposito',
'add_new_transfer' => 'Aggiungi un nuovo trasferimento',
@@ -191,6 +191,7 @@ return [
'password_confirmation' => 'Password (ancora)',
'blocked' => 'È bloccato?',
'blocked_code' => 'Motivo del blocco',
+ 'login_name' => 'Login',
// import
'apply_rules' => 'Applica regole',
@@ -222,6 +223,16 @@ return [
'public_key' => 'Chiave Pubblica',
'country_code' => 'Codice Nazione',
'provider_code' => 'Banca o fornitore di dati',
+ 'fints_url' => 'URL API FinTS',
+ 'fints_port' => 'Porta',
+ 'fints_bank_code' => 'Codice banca',
+ 'fints_username' => 'Nome utente',
+ 'fints_password' => 'PIN / Password',
+ 'fints_account' => 'Conto FinTS',
+ 'local_account' => 'Conto Firefly III',
+ 'from_date' => 'Data inizio',
+ 'to_date' => 'Alla data',
+
'due_date' => 'Data scadenza',
'payment_date' => 'Data pagamento',
diff --git a/resources/lang/it_IT/import.php b/resources/lang/it_IT/import.php
index ac3869816a..fa43c46319 100644
--- a/resources/lang/it_IT/import.php
+++ b/resources/lang/it_IT/import.php
@@ -47,6 +47,9 @@ return [
'button_yodlee' => 'Importa usando Yodlee',
'button_quovo' => 'Importa usando Quovo',
'button_ynab' => 'Importa da You Need A Budget',
+ 'button_fints' => 'Importa usando FinTS',
+
+
// global config box (index)
'global_config_title' => 'Configurazione globale di importazione',
'global_config_text' => 'In futuro questo riquadro presenterà le preferenze che si applicano a TUTTI i fornitori di importazione di cui sopra.',
@@ -200,112 +203,120 @@ return [
'spectre_extra_key_unit_price' => 'Prezzo unitario',
'spectre_extra_key_transactions_count' => 'Conteggio transazioni',
+ //job configuration for finTS
+ 'fints_connection_failed' => 'Si è verificato un errore durante il tentativo di collegamento alla tua banca. Assicurati che tutti i dati inseriti siano corretti. Messaggio di errore originale: :originalError',
+
+ 'job_config_fints_url_help' => 'Es. https://banking-dkb.s-fints-pt-dkb.de/fints30',
+ 'job_config_fints_username_help' => 'Per molto banche questo corrisponde al numero di conto.',
+ 'job_config_fints_port_help' => 'La porta predefinita è 443.',
+ 'job_config_fints_account_help' => 'Scegli il conto bancario per il quale desideri importare le transazioni.',
+ 'job_config_local_account_help' => 'Scegli il conto Firefly III corrispondente al conto bancario scelto sopra.',
// specifics:
- 'specific_ing_name' => 'ING NL',
- 'specific_ing_descr' => 'Crea descrizioni migliori nelle esportazioni ING',
- 'specific_sns_name' => 'SNS / Volksbank NL',
- 'specific_sns_descr' => 'Elimina le virgolette dai file di esportazione di SNS / Volksbank',
- 'specific_abn_name' => 'ABN AMRO NL',
- 'specific_abn_descr' => 'Risolvi i possibili problemi con i file ABN AMRO',
- 'specific_rabo_name' => 'Rabobank NL',
- 'specific_rabo_descr' => 'Risolvi i possibili problemi con i file Rabobank',
- 'specific_pres_name' => 'CA finanziaria scelta dal Presidente',
- 'specific_pres_descr' => 'Risolvi i possibili problemi con i file da PC',
+ 'specific_ing_name' => 'ING NL',
+ 'specific_ing_descr' => 'Crea descrizioni migliori nelle esportazioni ING',
+ 'specific_sns_name' => 'SNS / Volksbank NL',
+ 'specific_sns_descr' => 'Elimina le virgolette dai file di esportazione di SNS / Volksbank',
+ 'specific_abn_name' => 'ABN AMRO NL',
+ 'specific_abn_descr' => 'Risolvi i possibili problemi con i file ABN AMRO',
+ 'specific_rabo_name' => 'Rabobank NL',
+ 'specific_rabo_descr' => 'Risolvi i possibili problemi con i file Rabobank',
+ 'specific_pres_name' => 'CA finanziaria scelta dal Presidente',
+ 'specific_pres_descr' => 'Risolvi i possibili problemi con i file da PC',
// job configuration for file provider (stage: roles)
- 'job_config_roles_title' => 'Configurazione di importazione (3/4) - Definisci il ruolo di ogni colonna',
- 'job_config_roles_text' => 'Ogni colonna nel tuo file CSV contiene determinati dati. Si prega di indicare il tipo di dati che l\'importatore dovrebbe aspettarsi. L\'opzione per "mappare" i dati significa che collegherete ogni voce trovata nella colonna con un valore nel vostro database. Una colonna spesso mappata è la colonna che contiene l\'IBAN del conto. Questo può essere facilmente abbinato all\'IBAN già presente nel tuo database.',
- 'job_config_roles_submit' => 'Continua',
- 'job_config_roles_column_name' => 'Nome della colonna',
- 'job_config_roles_column_example' => 'Dati di esempio della colonna',
- 'job_config_roles_column_role' => 'Significato dei dati della colonna',
- 'job_config_roles_do_map_value' => 'Mappa questi valori',
- 'job_config_roles_no_example' => 'Nessun dato di esempio disponibile',
- 'job_config_roles_fa_warning' => 'Se contrassegni una colonna come contenente un importo in una valuta straniera, devi anche impostare la colonna che contiene di quale valuta si tratta.',
- 'job_config_roles_rwarning' => 'Come minimo contrassegna una colonna come colonna dell\'importo. Si consiglia di selezionare anche una colonna per la descrizione, la data e il conto della controparte.',
- 'job_config_roles_colum_count' => 'Colonna',
+ 'job_config_roles_title' => 'Configurazione di importazione (3/4) - Definisci il ruolo di ogni colonna',
+ 'job_config_roles_text' => 'Ogni colonna nel tuo file CSV contiene determinati dati. Si prega di indicare il tipo di dati che l\'importatore dovrebbe aspettarsi. L\'opzione per "mappare" i dati significa che collegherete ogni voce trovata nella colonna con un valore nel vostro database. Una colonna spesso mappata è la colonna che contiene l\'IBAN del conto. Questo può essere facilmente abbinato all\'IBAN già presente nel tuo database.',
+ 'job_config_roles_submit' => 'Continua',
+ 'job_config_roles_column_name' => 'Nome della colonna',
+ 'job_config_roles_column_example' => 'Dati di esempio della colonna',
+ 'job_config_roles_column_role' => 'Significato dei dati della colonna',
+ 'job_config_roles_do_map_value' => 'Mappa questi valori',
+ 'job_config_roles_no_example' => 'Nessun dato di esempio disponibile',
+ 'job_config_roles_fa_warning' => 'Se contrassegni una colonna come contenente un importo in una valuta straniera, devi anche impostare la colonna che contiene di quale valuta si tratta.',
+ 'job_config_roles_rwarning' => 'Come minimo contrassegna una colonna come colonna dell\'importo. Si consiglia di selezionare anche una colonna per la descrizione, la data e il conto della controparte.',
+ 'job_config_roles_colum_count' => 'Colonna',
// job config for the file provider (stage: mapping):
- 'job_config_map_title' => 'Configurazione di importazione (4/4) - Collega i dati importati con i dati di Firefly III',
- 'job_config_map_text' => 'Nelle seguenti tabelle, il valore a sinistra mostra le informazioni trovate nel file caricato. È tuo compito mappare questo valore, se possibile, su un valore già presente nel tuo database. Firefly si atterrà a questa mappatura. Se non ci sono valori da mappare o non si desidera mappare il valore specifico, non selezionare niente.',
- 'job_config_map_nothing' => 'Non ci sono dati presenti nel tuo file che puoi mappare a valori esistenti. Si prega di premere "Inizia l\'importazione" per continuare.',
- 'job_config_field_value' => 'Valore campo',
- 'job_config_field_mapped' => 'Mappato a',
- 'map_do_not_map' => '(non mappare)',
- 'job_config_map_submit' => 'Inizia l\'importazione',
+ 'job_config_map_title' => 'Configurazione di importazione (4/4) - Collega i dati importati con i dati di Firefly III',
+ 'job_config_map_text' => 'Nelle seguenti tabelle, il valore a sinistra mostra le informazioni trovate nel file caricato. È tuo compito mappare questo valore, se possibile, su un valore già presente nel tuo database. Firefly si atterrà a questa mappatura. Se non ci sono valori da mappare o non si desidera mappare il valore specifico, non selezionare niente.',
+ 'job_config_map_nothing' => 'Non ci sono dati presenti nel tuo file che puoi mappare a valori esistenti. Si prega di premere "Inizia l\'importazione" per continuare.',
+ 'job_config_field_value' => 'Valore campo',
+ 'job_config_field_mapped' => 'Mappato a',
+ 'map_do_not_map' => '(non mappare)',
+ 'job_config_map_submit' => 'Inizia l\'importazione',
// import status page:
- 'import_with_key' => 'Importa con chiave \':key\'',
- 'status_wait_title' => 'Per favore attendere...',
- 'status_wait_text' => 'Questa finestra si chiuderà tra un momento.',
- 'status_running_title' => 'L\'importazione è in esecuzione',
- 'status_job_running' => 'Attendere, importazione in corso...',
- 'status_job_storing' => 'Attendere, memorizzazione dei dati...',
- 'status_job_rules' => 'Attendere, applicazione delle regole...',
- 'status_fatal_title' => 'Errore fatale',
- 'status_fatal_text' => 'L\'importazione ha subito un errore irreversibile. Scusa!',
- 'status_fatal_more' => 'Questo messaggio di errore (probabilmente molto criptico) è completato dai file di log, che puoi trovare sul tuo disco rigido, o nel contenitore Docker da cui esegui Firefly III.',
- 'status_finished_title' => 'Importazione completata',
- 'status_finished_text' => 'L\'importazione è finita.',
- 'finished_with_errors' => 'Si sono verificati alcuni errori durante l\'importazione. Controllali attentamente.',
- 'unknown_import_result' => 'Risultato di importazione sconosciuto',
- 'result_no_transactions' => 'Nessuna transazione è stata importata. Forse erano tutte dei duplicati o semplicemente non c\'era nessuna transazione da importare. Forse i file di log possono dirti cosa è successo. Questo è normale se importi i dati regolarmente.',
- 'result_one_transaction' => 'È stata importata esattamente una transazione. È memorizzata sotto l\'etichetta :tag dove è possibile ispezionarla ulteriormente.',
- 'result_many_transactions' => 'Firefly III ha importato :count transazioni. Sono memorizzate sotto l\'etichetta :tag dove è possibile ispezionarle ulteriormente.',
+ 'import_with_key' => 'Importa con chiave \':key\'',
+ 'status_wait_title' => 'Per favore attendere...',
+ 'status_wait_text' => 'Questa finestra si chiuderà tra un momento.',
+ 'status_running_title' => 'L\'importazione è in esecuzione',
+ 'status_job_running' => 'Attendere, importazione in corso...',
+ 'status_job_storing' => 'Attendere, memorizzazione dei dati...',
+ 'status_job_rules' => 'Attendere, applicazione delle regole...',
+ 'status_fatal_title' => 'Errore fatale',
+ 'status_fatal_text' => 'L\'importazione ha subito un errore irreversibile. Scusa!',
+ 'status_fatal_more' => 'Questo messaggio di errore (probabilmente molto criptico) è completato dai file di log, che puoi trovare sul tuo disco rigido, o nel contenitore Docker da cui esegui Firefly III.',
+ 'status_finished_title' => 'Importazione completata',
+ 'status_finished_text' => 'L\'importazione è finita.',
+ 'finished_with_errors' => 'Si sono verificati alcuni errori durante l\'importazione. Controllali attentamente.',
+ 'unknown_import_result' => 'Risultato di importazione sconosciuto',
+ 'result_no_transactions' => 'Nessuna transazione è stata importata. Forse erano tutte dei duplicati o semplicemente non c\'era nessuna transazione da importare. Forse i file di log possono dirti cosa è successo. Questo è normale se importi i dati regolarmente.',
+ 'result_one_transaction' => 'È stata importata esattamente una transazione. È memorizzata sotto l\'etichetta :tag dove è possibile ispezionarla ulteriormente.',
+ 'result_many_transactions' => 'Firefly III ha importato :count transazioni. Sono memorizzate sotto l\'etichetta :tag dove è possibile ispezionarle ulteriormente.',
// general errors and warnings:
- 'bad_job_status' => 'Per accedere a questa pagina l\'operazione di importazione non può avere lo stato ":status".',
+ 'bad_job_status' => 'Per accedere a questa pagina l\'operazione di importazione non può avere lo stato ":status".',
// column roles for CSV import:
- 'column__ignore' => '(ignora questa colonna)',
- 'column_account-iban' => 'Conto attività (IBAN)',
- 'column_account-id' => 'ID conto attività (mappa FF3)',
- 'column_account-name' => 'Conto attività (nome)',
- 'column_account-bic' => 'Conto attività (BIC)',
- 'column_amount' => 'Importo',
- 'column_amount_foreign' => 'Importo (in altra valuta)',
- 'column_amount_debit' => 'Importo (colonna debito)',
- 'column_amount_credit' => 'Importo (colonna credito)',
- 'column_amount_negated' => 'Importo (negato)',
- 'column_amount-comma-separated' => 'Importo (virgola come separatore decimale)',
- 'column_bill-id' => 'ID bolletta (mappa FF3)',
- 'column_bill-name' => 'Nome bolletta',
- 'column_budget-id' => 'ID budget (mappa FF3)',
- 'column_budget-name' => 'Nome budget',
- 'column_category-id' => 'ID categoria (mappa FF3)',
- 'column_category-name' => 'Nome categoria',
- 'column_currency-code' => 'Codice valuta (ISO 4217)',
- 'column_foreign-currency-code' => 'Codice valuta straniera (ISO 4217)',
- 'column_currency-id' => 'ID valuta (mappa FF3)',
- 'column_currency-name' => 'Nome valuta (mappa FF3)',
- 'column_currency-symbol' => 'Simbolo valuta (mappa FF3)',
- 'column_date-interest' => 'Data calcolo interessi',
- 'column_date-book' => 'Data contabile della transazione',
- 'column_date-process' => 'Data processo della transazione',
- 'column_date-transaction' => 'Data',
- 'column_date-due' => 'Data di scadenza della transazione',
- 'column_date-payment' => 'Data di pagamento della transazione',
- 'column_date-invoice' => 'Data di fatturazione della transazione',
- 'column_description' => 'Descrizione',
- 'column_opposing-iban' => 'Conto controparte (IBAN)',
- 'column_opposing-bic' => 'Conto controparte (BIC)',
- 'column_opposing-id' => 'ID conto controparte (mappa FF3)',
- 'column_external-id' => 'ID esterno',
- 'column_opposing-name' => 'Conto controparte (nome)',
- 'column_rabo-debit-credit' => 'Indicatore di addebito/accredito specifico di Rabobank',
- 'column_ing-debit-credit' => 'Indicatore di debito/credito specifico di ING',
- 'column_sepa-ct-id' => 'ID end-to-end del bonifico SEPA',
- 'column_sepa-ct-op' => 'Identificatore SEPA conto controparte',
- 'column_sepa-db' => 'Addebito diretto SEPA',
- 'column_sepa-cc' => 'Codice Compensazione SEPA',
- 'column_sepa-ci' => 'Identificativo Creditore SEPA',
- 'column_sepa-ep' => 'SEPA External Purpose',
- 'column_sepa-country' => 'Codice Paese SEPA',
- 'column_tags-comma' => 'Etichette (separate da virgola)',
- 'column_tags-space' => 'Etichette (separate con spazio)',
- 'column_account-number' => 'Conto attività (numero conto)',
- 'column_opposing-number' => 'Conto controparte (numero conto)',
- 'column_note' => 'Note',
- 'column_internal-reference' => 'Riferimento interno',
+ 'column__ignore' => '(ignora questa colonna)',
+ 'column_account-iban' => 'Conto attività (IBAN)',
+ 'column_account-id' => 'ID conto attività (mappa FF3)',
+ 'column_account-name' => 'Conto attività (nome)',
+ 'column_account-bic' => 'Conto attività (BIC)',
+ 'column_amount' => 'Importo',
+ 'column_amount_foreign' => 'Importo (in altra valuta)',
+ 'column_amount_debit' => 'Importo (colonna debito)',
+ 'column_amount_credit' => 'Importo (colonna credito)',
+ 'column_amount_negated' => 'Importo (negato)',
+ 'column_amount-comma-separated' => 'Importo (virgola come separatore decimale)',
+ 'column_bill-id' => 'ID bolletta (mappa FF3)',
+ 'column_bill-name' => 'Nome bolletta',
+ 'column_budget-id' => 'ID budget (mappa FF3)',
+ 'column_budget-name' => 'Nome budget',
+ 'column_category-id' => 'ID categoria (mappa FF3)',
+ 'column_category-name' => 'Nome categoria',
+ 'column_currency-code' => 'Codice valuta (ISO 4217)',
+ 'column_foreign-currency-code' => 'Codice valuta straniera (ISO 4217)',
+ 'column_currency-id' => 'ID valuta (mappa FF3)',
+ 'column_currency-name' => 'Nome valuta (mappa FF3)',
+ 'column_currency-symbol' => 'Simbolo valuta (mappa FF3)',
+ 'column_date-interest' => 'Data calcolo interessi',
+ 'column_date-book' => 'Data contabile della transazione',
+ 'column_date-process' => 'Data processo della transazione',
+ 'column_date-transaction' => 'Data',
+ 'column_date-due' => 'Data di scadenza della transazione',
+ 'column_date-payment' => 'Data di pagamento della transazione',
+ 'column_date-invoice' => 'Data di fatturazione della transazione',
+ 'column_description' => 'Descrizione',
+ 'column_opposing-iban' => 'Conto controparte (IBAN)',
+ 'column_opposing-bic' => 'Conto controparte (BIC)',
+ 'column_opposing-id' => 'ID conto controparte (mappa FF3)',
+ 'column_external-id' => 'ID esterno',
+ 'column_opposing-name' => 'Conto controparte (nome)',
+ 'column_rabo-debit-credit' => 'Indicatore di addebito/accredito specifico di Rabobank',
+ 'column_ing-debit-credit' => 'Indicatore di debito/credito specifico di ING',
+ 'column_sepa-ct-id' => 'ID end-to-end del bonifico SEPA',
+ 'column_sepa-ct-op' => 'Identificatore SEPA conto controparte',
+ 'column_sepa-db' => 'Addebito diretto SEPA',
+ 'column_sepa-cc' => 'Codice Compensazione SEPA',
+ 'column_sepa-ci' => 'Identificativo Creditore SEPA',
+ 'column_sepa-ep' => 'SEPA External Purpose',
+ 'column_sepa-country' => 'Codice Paese SEPA',
+ 'column_tags-comma' => 'Etichette (separate da virgola)',
+ 'column_tags-space' => 'Etichette (separate con spazio)',
+ 'column_account-number' => 'Conto attività (numero conto)',
+ 'column_opposing-number' => 'Conto controparte (numero conto)',
+ 'column_note' => 'Note',
+ 'column_internal-reference' => 'Riferimento interno',
];
diff --git a/resources/lang/it_IT/validation.php b/resources/lang/it_IT/validation.php
index 1caca7f8d7..8911ec8de4 100644
--- a/resources/lang/it_IT/validation.php
+++ b/resources/lang/it_IT/validation.php
@@ -24,6 +24,7 @@ declare(strict_types=1);
return [
'iban' => 'Questo non è un IBAN valido.',
+ 'zero_or_more' => 'Il valore non può essere negativo.',
'source_equals_destination' => 'Il conto di origine è uguale al conto di destinazione.',
'unique_account_number_for_user' => 'Sembra che questo numero di conto sia già in uso.',
'unique_iban_for_user' => 'Sembra che questo IBAN sia già in uso.',
@@ -134,7 +135,7 @@ return [
'piggy_bank_id' => 'ID salvadanaio',
'targetamount' => 'importo obiettivo',
'openingBalanceDate' => 'data saldo di apertura',
- 'openingBalance' => 'saldo apertura',
+ 'openingBalance' => 'saldo di apertura',
'match' => 'abbinamento',
'amount_min' => 'importo minimo',
'amount_max' => 'importo massimo',
diff --git a/resources/lang/nl_NL/firefly.php b/resources/lang/nl_NL/firefly.php
index 191c6b4626..9527cf191c 100644
--- a/resources/lang/nl_NL/firefly.php
+++ b/resources/lang/nl_NL/firefly.php
@@ -551,6 +551,8 @@ return [
'email_changed_logout' => 'Je kan niet inloggen tot je je emailadres bevestigd.',
'login_with_new_email' => 'Je kan nu inloggen met je nieuwe emailadres.',
'login_with_old_email' => 'Je kan nu weer inloggen met je oude emailadres.',
+ 'login_provider_local_only' => 'Je kan dit niet doen als je inlogt via ":login_provider".',
+ 'delete_local_info_only' => 'Omdat je inlogt via ":login_provider" verwijder je alleen lokale Firefly III informatie.',
// attachments
'nr_of_attachments' => 'Eén bijlage|:count bijlagen',
@@ -777,6 +779,7 @@ return [
'interest_calc_daily' => 'Per dag',
'interest_calc_monthly' => 'Per maand',
'interest_calc_yearly' => 'Per jaar',
+ 'initial_balance_account' => 'Startsaldorekening voor :name',
// categories:
'new_category' => 'Nieuwe categorie',
@@ -1021,6 +1024,7 @@ return [
'select_expense_revenue' => 'Selecteer debiteur+crediteur',
'multi_currency_report_sum' => 'Omdat deze tabel rekeningen met diverse valuta bevat, kan het zijn dat de optelsommen nergens op slaan. De pagina valt altijd terug op je standaardvaluta.',
'sum_in_default_currency' => 'Deze lijst is altijd in je standaardvaluta.',
+ 'net_filtered_prefs' => 'Deze grafiek bevat nooit betaalrekeningen die je niet het vinkje "meetellen in kapitaal" hebt gegeven.',
// charts:
'chart' => 'Diagram',
diff --git a/resources/lang/nl_NL/form.php b/resources/lang/nl_NL/form.php
index 1eaf0227f8..8c293cb67d 100644
--- a/resources/lang/nl_NL/form.php
+++ b/resources/lang/nl_NL/form.php
@@ -191,6 +191,7 @@ return [
'password_confirmation' => 'Wachtwoord (nogmaals)',
'blocked' => 'Is geblokkeerd?',
'blocked_code' => 'Reden voor blokkade',
+ 'login_name' => 'Login',
// import
'apply_rules' => 'Regels toepassen',
@@ -222,6 +223,16 @@ return [
'public_key' => 'Publieke sleutel',
'country_code' => 'Landcode',
'provider_code' => 'Bank of gegevensprovider',
+ 'fints_url' => 'FinTS API URL',
+ 'fints_port' => 'Poort',
+ 'fints_bank_code' => 'Bankcode',
+ 'fints_username' => 'Gebruikersnaam',
+ 'fints_password' => 'Pincode / wachtwoord',
+ 'fints_account' => 'FinTS-rekening',
+ 'local_account' => 'Firefly III rekening',
+ 'from_date' => 'Datum van',
+ 'to_date' => 'Datum tot',
+
'due_date' => 'Vervaldatum',
'payment_date' => 'Betalingsdatum',
diff --git a/resources/lang/nl_NL/import.php b/resources/lang/nl_NL/import.php
index d449d163ee..1e2102f436 100644
--- a/resources/lang/nl_NL/import.php
+++ b/resources/lang/nl_NL/import.php
@@ -47,6 +47,9 @@ return [
'button_yodlee' => 'Importeer via Spectre',
'button_quovo' => 'Importeer via Quovo',
'button_ynab' => 'Importeren van "You Need A Budget"',
+ 'button_fints' => 'Importeer via FinTS',
+
+
// global config box (index)
'global_config_title' => 'Configuratiebestand',
'global_config_text' => 'In de toekomst bevat dit vak voorkeuren die van toepassing zijn op ALLE bovenstaande importproviders.',
@@ -200,112 +203,120 @@ return [
'spectre_extra_key_unit_price' => 'Prijs per eenheid',
'spectre_extra_key_transactions_count' => 'Transacties',
+ //job configuration for finTS
+ 'fints_connection_failed' => 'Er is een fout opgetreden tijdens het verbinden met je bank. Zorg ervoor dat de ingevoerde gegevens kloppen. Oorspronkelijke foutbericht: :originalError',
+
+ 'job_config_fints_url_help' => 'Bijvoorbeeld https://banking-dkb.s-fints-pt-dkb.de/fints30',
+ 'job_config_fints_username_help' => 'Dit is meestal je rekeningnummer.',
+ 'job_config_fints_port_help' => 'Standaardpoort is 443.',
+ 'job_config_fints_account_help' => 'Kies de rekening die je wilt importeren.',
+ 'job_config_local_account_help' => 'Kies de Firefly III betaalrekening die correspondeert met de gekozen rekening.',
// specifics:
- 'specific_ing_name' => 'ING NL',
- 'specific_ing_descr' => 'Maak betere beschrijvingen in de export van ING',
- 'specific_sns_name' => 'SNS / Volksbank NL',
- 'specific_sns_descr' => 'Trim citaten uit exportbestanden van SNS / Volksbank',
- 'specific_abn_name' => 'ABN AMRO NL',
- 'specific_abn_descr' => 'Lost mogelijke problemen op met ABN AMRO-bestanden',
- 'specific_rabo_name' => 'Rabobank NL',
- 'specific_rabo_descr' => 'Lost mogelijke problemen op met Rabobank txt-bestanden',
- 'specific_pres_name' => 'President\'s Choice Financial CA',
- 'specific_pres_descr' => 'Lost mogelijke problemen op met PC bestanden',
+ 'specific_ing_name' => 'ING NL',
+ 'specific_ing_descr' => 'Maak betere beschrijvingen in de export van ING',
+ 'specific_sns_name' => 'SNS / Volksbank NL',
+ 'specific_sns_descr' => 'Trim citaten uit exportbestanden van SNS / Volksbank',
+ 'specific_abn_name' => 'ABN AMRO NL',
+ 'specific_abn_descr' => 'Lost mogelijke problemen op met ABN AMRO-bestanden',
+ 'specific_rabo_name' => 'Rabobank NL',
+ 'specific_rabo_descr' => 'Lost mogelijke problemen op met Rabobank txt-bestanden',
+ 'specific_pres_name' => 'President\'s Choice Financial CA',
+ 'specific_pres_descr' => 'Lost mogelijke problemen op met PC bestanden',
// job configuration for file provider (stage: roles)
- 'job_config_roles_title' => 'Importinstellingen (3/4) - rol van elke kolom definiëren',
- 'job_config_roles_text' => 'Elke kolom in je CSV-bestand bevat bepaalde gegevens. Gelieve aan te geven wat voor soort gegevens de import-routine kan verwachten. De optie "maak een link" betekent dat u elke vermelding in die kolom linkt aan een waarde uit je database. Een vaak gelinkte kolom is die met de IBAN-code van de tegenrekening. Die kan je dan linken aan de IBAN in jouw database.',
- 'job_config_roles_submit' => 'Volgende',
- 'job_config_roles_column_name' => 'Kolomnaam',
- 'job_config_roles_column_example' => 'Voorbeeldgegevens',
- 'job_config_roles_column_role' => 'Kolomrol',
- 'job_config_roles_do_map_value' => 'Maak een link',
- 'job_config_roles_no_example' => 'Geen voorbeeldgegevens',
- 'job_config_roles_fa_warning' => 'Als je een kolom markeert als "vreemde valuta" moet je ook aangeven in welke kolom de valuta staat.',
- 'job_config_roles_rwarning' => 'Geef minstens de kolom aan waar het bedrag in staat. Als het even kan, ook een kolom voor de omschrijving, datum en de andere rekening.',
- 'job_config_roles_colum_count' => 'Kolom',
+ 'job_config_roles_title' => 'Importinstellingen (3/4) - rol van elke kolom definiëren',
+ 'job_config_roles_text' => 'Elke kolom in je CSV-bestand bevat bepaalde gegevens. Gelieve aan te geven wat voor soort gegevens de import-routine kan verwachten. De optie "maak een link" betekent dat u elke vermelding in die kolom linkt aan een waarde uit je database. Een vaak gelinkte kolom is die met de IBAN-code van de tegenrekening. Die kan je dan linken aan de IBAN in jouw database.',
+ 'job_config_roles_submit' => 'Volgende',
+ 'job_config_roles_column_name' => 'Kolomnaam',
+ 'job_config_roles_column_example' => 'Voorbeeldgegevens',
+ 'job_config_roles_column_role' => 'Kolomrol',
+ 'job_config_roles_do_map_value' => 'Maak een link',
+ 'job_config_roles_no_example' => 'Geen voorbeeldgegevens',
+ 'job_config_roles_fa_warning' => 'Als je een kolom markeert als "vreemde valuta" moet je ook aangeven in welke kolom de valuta staat.',
+ 'job_config_roles_rwarning' => 'Geef minstens de kolom aan waar het bedrag in staat. Als het even kan, ook een kolom voor de omschrijving, datum en de andere rekening.',
+ 'job_config_roles_colum_count' => 'Kolom',
// job config for the file provider (stage: mapping):
- 'job_config_map_title' => 'Importinstellingen (4/4) - Link importgegevens aan Firefly III-gegevens',
- 'job_config_map_text' => 'In deze tabellen is de linkerwaarde een waarde uit je CSV bestand. Jij moet de link leggen, als mogelijk, met een waarde uit jouw database. Firefly houdt zich hier aan. Als er geen waarde is, selecteer dan ook niets.',
- 'job_config_map_nothing' => 'Je gaat geen gegevens importeren die te mappen zijn. Klik op "Start import" om verder te gaan.',
- 'job_config_field_value' => 'Veldwaarde',
- 'job_config_field_mapped' => 'Gelinkt aan',
- 'map_do_not_map' => '(niet linken)',
- 'job_config_map_submit' => 'Start importeren',
+ 'job_config_map_title' => 'Importinstellingen (4/4) - Link importgegevens aan Firefly III-gegevens',
+ 'job_config_map_text' => 'In deze tabellen is de linkerwaarde een waarde uit je CSV bestand. Jij moet de link leggen, als mogelijk, met een waarde uit jouw database. Firefly houdt zich hier aan. Als er geen waarde is, selecteer dan ook niets.',
+ 'job_config_map_nothing' => 'Je gaat geen gegevens importeren die te mappen zijn. Klik op "Start import" om verder te gaan.',
+ 'job_config_field_value' => 'Veldwaarde',
+ 'job_config_field_mapped' => 'Gelinkt aan',
+ 'map_do_not_map' => '(niet linken)',
+ 'job_config_map_submit' => 'Start importeren',
// import status page:
- 'import_with_key' => 'Import met code \':key\'',
- 'status_wait_title' => 'Momentje...',
- 'status_wait_text' => 'Dit vak verdwijnt zometeen.',
- 'status_running_title' => 'De import is bezig',
- 'status_job_running' => 'Even geduld, de import loopt...',
- 'status_job_storing' => 'Even geduld, de gegevens worden opgeslagen...',
- 'status_job_rules' => 'Even gedult, je regels worden toegepast...',
- 'status_fatal_title' => 'Onherstelbare fout',
- 'status_fatal_text' => 'De import is tegen een fout aangelopen waar-ie niet meer van terug kan komen. Excuses!',
- 'status_fatal_more' => 'Deze (waarschijnlijk zeer cryptische) foutmelding wordt aangevuld door logbestanden, die je kan vinden op je harde schijf of in de Docker-container waar je Firefly III draait.',
- 'status_finished_title' => 'Importeren voltooid',
- 'status_finished_text' => 'Het importeren is voltooid.',
- 'finished_with_errors' => 'Er zijn enkele fouten opgetreden tijdens het importeren. Beoordeel ze zorgvuldig.',
- 'unknown_import_result' => 'Onbekend importresultaat',
- 'result_no_transactions' => 'Er zijn geen transacties geïmporteerd. Misschien waren ze allemaal dubbel, of er zijn simpelweg geen transacties gevonden die kunnen worden geïmporteerd. Misschien kunnen de logbestanden je vertellen wat er is gebeurd. Als je regelmatig gegevens importeert, is dit normaal.',
- 'result_one_transaction' => 'Precies één transactie is geïmporteerd. Je kan deze bekijken onder tag :tag.',
- 'result_many_transactions' => 'Firefly III heeft :count transacties geïmporteerd. Je kan ze inspecteren onder tag :tag.',
+ 'import_with_key' => 'Import met code \':key\'',
+ 'status_wait_title' => 'Momentje...',
+ 'status_wait_text' => 'Dit vak verdwijnt zometeen.',
+ 'status_running_title' => 'De import is bezig',
+ 'status_job_running' => 'Even geduld, de import loopt...',
+ 'status_job_storing' => 'Even geduld, de gegevens worden opgeslagen...',
+ 'status_job_rules' => 'Even geduld, je regels worden toegepast...',
+ 'status_fatal_title' => 'Onherstelbare fout',
+ 'status_fatal_text' => 'De import is tegen een fout aangelopen waar-ie niet meer van terug kan komen. Excuses!',
+ 'status_fatal_more' => 'Deze (waarschijnlijk zeer cryptische) foutmelding wordt aangevuld door logbestanden, die je kan vinden op je harde schijf of in de Docker-container waar je Firefly III draait.',
+ 'status_finished_title' => 'Importeren voltooid',
+ 'status_finished_text' => 'Het importeren is voltooid.',
+ 'finished_with_errors' => 'Er zijn enkele fouten opgetreden tijdens het importeren. Beoordeel ze zorgvuldig.',
+ 'unknown_import_result' => 'Onbekend importresultaat',
+ 'result_no_transactions' => 'Er zijn geen transacties geïmporteerd. Misschien waren ze allemaal dubbel, of er zijn simpelweg geen transacties gevonden die kunnen worden geïmporteerd. Misschien kunnen de logbestanden je vertellen wat er is gebeurd. Als je regelmatig gegevens importeert, is dit normaal.',
+ 'result_one_transaction' => 'Precies één transactie is geïmporteerd. Je kan deze bekijken onder tag :tag.',
+ 'result_many_transactions' => 'Firefly III heeft :count transacties geïmporteerd. Je kan ze inspecteren onder tag :tag.',
// general errors and warnings:
- 'bad_job_status' => 'Om deze pagina te bekijken mag je import-job niet de status ":status" hebben.',
+ 'bad_job_status' => 'Om deze pagina te bekijken mag je import-job niet de status ":status" hebben.',
// column roles for CSV import:
- 'column__ignore' => '(negeer deze kolom)',
- 'column_account-iban' => 'Betaalrekening (IBAN)',
- 'column_account-id' => 'Betaalrekening (ID gelijk aan FF3)',
- 'column_account-name' => 'Betaalrekeningnaam',
- 'column_account-bic' => 'Betaalrekening (BIC)',
- 'column_amount' => 'Bedrag',
- 'column_amount_foreign' => 'Bedrag (in vreemde valuta)',
- 'column_amount_debit' => 'Bedrag (debetkolom)',
- 'column_amount_credit' => 'Bedrag (creditkolom)',
- 'column_amount_negated' => 'Bedrag (omgekeerd)',
- 'column_amount-comma-separated' => 'Bedrag (komma as decimaalscheidingsteken)',
- 'column_bill-id' => 'Contract (ID gelijk aan FF3)',
- 'column_bill-name' => 'Contractnaam',
- 'column_budget-id' => 'Budget (ID gelijk aan FF3)',
- 'column_budget-name' => 'Budgetnaam',
- 'column_category-id' => 'Categorie (ID gelijk aan FF3)',
- 'column_category-name' => 'Categorienaam',
- 'column_currency-code' => 'Valutacode (ISO 4217)',
- 'column_foreign-currency-code' => 'Vreemde valutacode (ISO 4217)',
- 'column_currency-id' => 'Valuta (ID gelijk aan FF3)',
- 'column_currency-name' => 'Valutanaam (gelijk aan FF3)',
- 'column_currency-symbol' => 'Valutasymbool',
- 'column_date-interest' => 'Datum (renteberekening)',
- 'column_date-book' => 'Datum (boeking)',
- 'column_date-process' => 'Datum (verwerking)',
- 'column_date-transaction' => 'Datum',
- 'column_date-due' => 'Verstrijkingsdatum',
- 'column_date-payment' => 'Datum (betaling)',
- 'column_date-invoice' => 'Datum (factuur)',
- 'column_description' => 'Omschrijving',
- 'column_opposing-iban' => 'Tegenrekening (IBAN)',
- 'column_opposing-bic' => 'BIC van tegenrekeningbank',
- 'column_opposing-id' => 'Tegenrekening (ID gelijk aan FF3)',
- 'column_external-id' => 'Externe ID',
- 'column_opposing-name' => 'Tegenrekeningnaam',
- 'column_rabo-debit-credit' => 'Rabobankspecifiek bij/af indicator',
- 'column_ing-debit-credit' => 'ING-specifieke bij/af indicator',
- 'column_sepa-ct-id' => 'SEPA end-to-end identificatie',
- 'column_sepa-ct-op' => 'SEPA identificatie tegenpartij',
- 'column_sepa-db' => 'SEPA mandaatidentificatie',
- 'column_sepa-cc' => 'SEPA vrijwaringscode',
- 'column_sepa-ci' => 'SEPA crediteuridentificatie',
- 'column_sepa-ep' => 'SEPA transactiedoeleinde',
- 'column_sepa-country' => 'SEPA landcode',
- 'column_tags-comma' => 'Tags (kommagescheiden)',
- 'column_tags-space' => 'Tags (spatiegescheiden)',
- 'column_account-number' => 'Betaalrekening (rekeningnummer)',
- 'column_opposing-number' => 'Tegenrekening (rekeningnummer)',
- 'column_note' => 'Opmerking(en)',
- 'column_internal-reference' => 'Interne referentie',
+ 'column__ignore' => '(negeer deze kolom)',
+ 'column_account-iban' => 'Betaalrekening (IBAN)',
+ 'column_account-id' => 'Betaalrekening (ID gelijk aan FF3)',
+ 'column_account-name' => 'Betaalrekeningnaam',
+ 'column_account-bic' => 'Betaalrekening (BIC)',
+ 'column_amount' => 'Bedrag',
+ 'column_amount_foreign' => 'Bedrag (in vreemde valuta)',
+ 'column_amount_debit' => 'Bedrag (debetkolom)',
+ 'column_amount_credit' => 'Bedrag (creditkolom)',
+ 'column_amount_negated' => 'Bedrag (omgekeerd)',
+ 'column_amount-comma-separated' => 'Bedrag (komma as decimaalscheidingsteken)',
+ 'column_bill-id' => 'Contract (ID gelijk aan FF3)',
+ 'column_bill-name' => 'Contractnaam',
+ 'column_budget-id' => 'Budget (ID gelijk aan FF3)',
+ 'column_budget-name' => 'Budgetnaam',
+ 'column_category-id' => 'Categorie (ID gelijk aan FF3)',
+ 'column_category-name' => 'Categorienaam',
+ 'column_currency-code' => 'Valutacode (ISO 4217)',
+ 'column_foreign-currency-code' => 'Vreemde valutacode (ISO 4217)',
+ 'column_currency-id' => 'Valuta (ID gelijk aan FF3)',
+ 'column_currency-name' => 'Valutanaam (gelijk aan FF3)',
+ 'column_currency-symbol' => 'Valutasymbool',
+ 'column_date-interest' => 'Datum (renteberekening)',
+ 'column_date-book' => 'Datum (boeking)',
+ 'column_date-process' => 'Datum (verwerking)',
+ 'column_date-transaction' => 'Datum',
+ 'column_date-due' => 'Verstrijkingsdatum',
+ 'column_date-payment' => 'Datum (betaling)',
+ 'column_date-invoice' => 'Datum (factuur)',
+ 'column_description' => 'Omschrijving',
+ 'column_opposing-iban' => 'Tegenrekening (IBAN)',
+ 'column_opposing-bic' => 'BIC van tegenrekeningbank',
+ 'column_opposing-id' => 'Tegenrekening (ID gelijk aan FF3)',
+ 'column_external-id' => 'Externe ID',
+ 'column_opposing-name' => 'Tegenrekeningnaam',
+ 'column_rabo-debit-credit' => 'Rabobankspecifiek bij/af indicator',
+ 'column_ing-debit-credit' => 'ING-specifieke bij/af indicator',
+ 'column_sepa-ct-id' => 'SEPA end-to-end identificatie',
+ 'column_sepa-ct-op' => 'SEPA identificatie tegenpartij',
+ 'column_sepa-db' => 'SEPA mandaatidentificatie',
+ 'column_sepa-cc' => 'SEPA vrijwaringscode',
+ 'column_sepa-ci' => 'SEPA crediteuridentificatie',
+ 'column_sepa-ep' => 'SEPA transactiedoeleinde',
+ 'column_sepa-country' => 'SEPA landcode',
+ 'column_tags-comma' => 'Tags (kommagescheiden)',
+ 'column_tags-space' => 'Tags (spatiegescheiden)',
+ 'column_account-number' => 'Betaalrekening (rekeningnummer)',
+ 'column_opposing-number' => 'Tegenrekening (rekeningnummer)',
+ 'column_note' => 'Opmerking(en)',
+ 'column_internal-reference' => 'Interne referentie',
];
diff --git a/resources/lang/nl_NL/validation.php b/resources/lang/nl_NL/validation.php
index 6ba5ad8d9b..6c154ca299 100644
--- a/resources/lang/nl_NL/validation.php
+++ b/resources/lang/nl_NL/validation.php
@@ -24,6 +24,7 @@ declare(strict_types=1);
return [
'iban' => 'Dit is niet een geldige IBAN.',
+ 'zero_or_more' => 'De waarde mag niet negatief zijn.',
'source_equals_destination' => 'De bronrekening is gelijk aan de doelrekening.',
'unique_account_number_for_user' => 'Het lijkt erop dat dit rekeningnummer al in gebruik is.',
'unique_iban_for_user' => 'Het lijkt erop dat deze IBAN al in gebruik is.',
diff --git a/resources/lang/pl_PL/firefly.php b/resources/lang/pl_PL/firefly.php
index 441da593d0..fce6b141f6 100644
--- a/resources/lang/pl_PL/firefly.php
+++ b/resources/lang/pl_PL/firefly.php
@@ -28,10 +28,10 @@ return [
'actions' => 'Akcje',
'edit' => 'Modyfikuj',
'delete' => 'Usuń',
- 'split' => 'Split',
- 'clone' => 'Clone',
- 'last_seven_days' => 'Last seven days',
- 'last_thirty_days' => 'Last thirty days',
+ 'split' => 'Podziel',
+ 'clone' => 'Sklonuj',
+ 'last_seven_days' => 'Ostatnie 7 dni',
+ 'last_thirty_days' => 'Ostanie 30 dni',
'welcomeBack' => 'Co jest grane?',
'everything' => 'Wszystko',
'today' => 'dzisiaj',
@@ -41,7 +41,7 @@ return [
'cancel' => 'Anuluj',
'from' => 'Z',
'to' => 'Do',
- 'help_translating' => 'This help text is not yet available in your language. Will you help translate?',
+ 'help_translating' => 'Tekst pomocy nie jest jeszcze dostępny w Twoim języku. Może chcesz pomóc w tłumaczeniu?',
'showEverything' => 'Pokaż wszystko',
'never' => 'Nigdy',
'no_results_for_empty_search' => 'Twoje zapytanie były puste, wiec nic nie zostało znalezione.',
@@ -94,7 +94,7 @@ return [
'warning_much_data' => 'Załadowanie danych z :days dni może trochę potrwać.',
'registered' => 'Zarejestrowałeś się pomyślnie!',
'Default asset account' => 'Domyślne konto aktywów',
- 'no_budget_pointer' => 'You seem to have no budgets yet. You should create some on the budgets-page. Budgets can help you keep track of expenses.',
+ 'no_budget_pointer' => 'Wygląda na to, że nie masz jeszcze żadnych budżetów. Powinieneś stworzyć kilka na stronie - budgets. Budżety pomogą Ci śledzić Twoje wydatki.',
'Savings account' => 'Konto oszczędnościowe',
'Credit card' => 'Karta kredytowa',
'source_accounts' => 'Konto(a) źródłowe',
@@ -187,9 +187,9 @@ return [
'scopes_will_be_able' => 'Ta aplikacja będzie mogła:',
'button_authorize' => 'Autoryzuj',
'none_in_select_list' => '(żadne)',
- 'name_in_currency' => ':name in :currency',
- 'paid_in_currency' => 'Paid in :currency',
- 'unpaid_in_currency' => 'Unpaid in :currency',
+ 'name_in_currency' => ':name w :currency',
+ 'paid_in_currency' => 'Płatne w :currency',
+ 'unpaid_in_currency' => 'Niezapłacone w :currency',
// check for updates:
'update_check_title' => 'Sprawdź aktualizacje',
@@ -277,8 +277,8 @@ return [
'move_rule_group_up' => 'Przenieś grupę reguł w górę',
'move_rule_group_down' => 'Przenieś grupę reguł w dół',
'save_rules_by_moving' => 'Zapisz te reguły, przenosząc je do innej grupy reguł:',
- 'make_new_rule' => 'Make a new rule in rule group ":title"',
- 'make_new_rule_no_group' => 'Make a new rule',
+ 'make_new_rule' => 'Utwórz nową regułę w grupie reguł ":title"',
+ 'make_new_rule_no_group' => 'Stwórz nową regułę',
'instructions_rule_from_bill' => 'In order to match transactions to your new bill ":name", Firefly III can create a rule that will automatically be checked against any transactions you store. Please verify the details below and store the rule to have Firefly III automatically match transactions to your new bill.',
'rule_is_strict' => 'ścisła reguła',
'rule_is_not_strict' => 'swobodna reguła',
@@ -425,11 +425,11 @@ return [
'rule_action_link_to_bill_choice' => 'Powiąż z rachunkiem..',
'rule_action_link_to_bill' => 'Powiąż z rachunkiem ":action_value"',
'rule_action_set_notes' => 'Ustaw notatki na ":action_value"',
- 'rule_action_convert_deposit_choice' => 'Convert the transaction to a deposit',
+ 'rule_action_convert_deposit_choice' => 'Konwertuj transfer na wpłatę',
'rule_action_convert_deposit' => 'Convert the transaction to a deposit from ":action_value"',
'rule_action_convert_withdrawal_choice' => 'Convert the transaction to a withdrawal',
'rule_action_convert_withdrawal' => 'Convert the transaction to a withdrawal to ":action_value"',
- 'rule_action_convert_transfer_choice' => 'Convert the transaction to a transfer',
+ 'rule_action_convert_transfer_choice' => 'Konwertuj transfer na wpłatę',
'rule_action_convert_transfer' => 'Convert the transaction to a transfer with ":action_value"',
'rules_have_read_warning' => 'Czy przeczytałeś ostrzeżenie?',
@@ -551,6 +551,8 @@ return [
'email_changed_logout' => 'Dopóki nie zweryfikujesz swojego adresu e-mail, nie możesz się zalogować.',
'login_with_new_email' => 'Teraz możesz logować się nowym adresem e-mail.',
'login_with_old_email' => 'Teraz ponownie możesz logować się starym adresem e-mail.',
+ 'login_provider_local_only' => 'This action is not available when authenticating through ":login_provider".',
+ 'delete_local_info_only' => 'Because you authenticate through ":login_provider", this will only delete local Firefly III information.',
// attachments
'nr_of_attachments' => 'Jeden załącznik |:count załączników',
@@ -773,10 +775,11 @@ return [
'already_cleared_transactions' => 'Transakcje uzgodnione wcześniej (:count)',
'submitted_end_balance' => 'Przesłane saldo końcowe',
'initial_balance_description' => 'Saldo początkowe dla ":account"',
- 'interest_calc_' => 'unknown',
- 'interest_calc_daily' => 'Per day',
+ 'interest_calc_' => 'nieznany',
+ 'interest_calc_daily' => 'Na dzień',
'interest_calc_monthly' => 'Per month',
'interest_calc_yearly' => 'Per year',
+ 'initial_balance_account' => 'Initial balance account of :name',
// categories:
'new_category' => 'Nowa kategoria',
@@ -823,12 +826,12 @@ return [
'no_bulk_tags' => 'Nie aktualizuj tagów',
'bulk_edit' => 'Hurtowa edycja',
'cannot_edit_other_fields' => 'Nie możesz masowo modyfikować innych pól niż te tutaj, ponieważ nie ma miejsca, aby je pokazać. Proszę użyć ikony edycji i edytować je jedno po drugim, jeśli chcesz edytować te pola.',
- 'no_budget' => '(no budget)',
+ 'no_budget' => '(brak budżetu)',
'no_budget_squared' => '(brak budżetu)',
'perm-delete-many' => 'Usuwanie wielu elementów jednocześnie może być bardzo destrukcyjne. Proszę zachować ostrożność.',
'mass_deleted_transactions_success' => 'Usunięto :amount transakcję(i).',
'mass_edited_transactions_success' => 'Zaktualizowano :amount transakcję(i)',
- 'opt_group_' => '(no account type)',
+ 'opt_group_' => '(brak typu konta)',
'opt_group_no_account_type' => '(brak typu konta)',
'opt_group_defaultAsset' => 'Domyślne konta aktywów',
'opt_group_savingAsset' => 'Konta oszczędnościowe',
@@ -885,9 +888,9 @@ return [
'Revenue account' => 'Konto przychodów',
'Initial balance account' => 'Początkowe saldo konta',
'account_type_Debt' => 'Debt',
- 'account_type_Loan' => 'Loan',
+ 'account_type_Loan' => 'Pożyczka',
'account_type_Mortgage' => 'Mortgage',
- 'account_type_Credit card' => 'Credit card',
+ 'account_type_Credit card' => 'Karta kredytowa',
'budgets' => 'Budżety',
'tags' => 'Tagi',
'reports' => 'Raporty',
@@ -1021,6 +1024,7 @@ return [
'select_expense_revenue' => 'Wybierz konto wydatków/przychodów',
'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.',
'sum_in_default_currency' => 'The sum will always be in your default currency.',
+ 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.',
// charts:
'chart' => 'Wykres',
diff --git a/resources/lang/pl_PL/form.php b/resources/lang/pl_PL/form.php
index 6cec977301..0d9fa64cca 100644
--- a/resources/lang/pl_PL/form.php
+++ b/resources/lang/pl_PL/form.php
@@ -50,9 +50,9 @@ return [
'source_account' => 'Konto źródłowe',
'destination_account' => 'Konto docelowe',
'journal_destination_id' => 'Konto aktywów (przeznaczenie)',
- 'asset_destination_account' => 'Destination account',
+ 'asset_destination_account' => 'Konto docelowe',
'include_net_worth' => 'Include in net worth',
- 'asset_source_account' => 'Source account',
+ 'asset_source_account' => 'Konto źródłowe',
'journal_description' => 'Opis',
'note' => 'Notatki',
'split_journal' => 'Podziel tę transakcję',
@@ -191,6 +191,7 @@ return [
'password_confirmation' => 'Hasło (ponownie)',
'blocked' => 'Jest zablokowany?',
'blocked_code' => 'Powód blokady',
+ 'login_name' => 'Login',
// import
'apply_rules' => 'Zastosuj reguły',
@@ -222,6 +223,16 @@ return [
'public_key' => 'Klucz publiczny',
'country_code' => 'Kod kraju',
'provider_code' => 'Dostawca banku lub danych',
+ 'fints_url' => 'FinTS API URL',
+ 'fints_port' => 'Port',
+ 'fints_bank_code' => 'Bank code',
+ 'fints_username' => 'Nazwa użytkownika',
+ 'fints_password' => 'Kodu PIN / hasło',
+ 'fints_account' => 'FinTS account',
+ 'local_account' => 'Konto Firefly III',
+ 'from_date' => 'Data od',
+ 'to_date' => 'Data do',
+
'due_date' => 'Termin realizacji',
'payment_date' => 'Data płatności',
diff --git a/resources/lang/pl_PL/import.php b/resources/lang/pl_PL/import.php
index 86665c5a3e..0ee780fa8c 100644
--- a/resources/lang/pl_PL/import.php
+++ b/resources/lang/pl_PL/import.php
@@ -47,6 +47,9 @@ return [
'button_yodlee' => 'Importuj za pomocą Yodlee',
'button_quovo' => 'Importuj za pomocą Quovo',
'button_ynab' => 'Import from You Need A Budget',
+ 'button_fints' => 'Import using FinTS',
+
+
// global config box (index)
'global_config_title' => 'Globalna konfiguracja importu',
'global_config_text' => 'In the future, this box will feature preferences that apply to ALL import providers above.',
@@ -153,24 +156,24 @@ return [
'job_config_bunq_apply_rules_text' => 'By default, your rules will be applied to the transactions created during this import routine. If you do not want this to happen, deselect this checkbox.',
'ynab_account_closed' => 'Account is closed!',
- 'ynab_account_deleted' => 'Account is deleted!',
- 'ynab_account_type_savings' => 'savings account',
+ 'ynab_account_deleted' => 'Konto usunięte!',
+ 'ynab_account_type_savings' => 'konto oszczędnościowe',
'ynab_account_type_checking' => 'checking account',
- 'ynab_account_type_cash' => 'cash account',
- 'ynab_account_type_creditCard' => 'credit card',
+ 'ynab_account_type_cash' => 'konto gotówkowe',
+ 'ynab_account_type_creditCard' => 'karta kredytowa',
'ynab_account_type_lineOfCredit' => 'line of credit',
'ynab_account_type_otherAsset' => 'other asset account',
'ynab_account_type_otherLiability' => 'other liabilities',
- 'ynab_account_type_payPal' => 'Paypal',
+ 'ynab_account_type_payPal' => 'PayPal',
'ynab_account_type_merchantAccount' => 'merchant account',
'ynab_account_type_investmentAccount' => 'investment account',
'ynab_account_type_mortgage' => 'mortgage',
'ynab_do_not_import' => '(do not import)',
- 'job_config_ynab_apply_rules' => 'Apply rules',
+ 'job_config_ynab_apply_rules' => 'Zastosuj reguły',
'job_config_ynab_apply_rules_text' => 'By default, your rules will be applied to the transactions created during this import routine. If you do not want this to happen, deselect this checkbox.',
// job configuration for YNAB:
- 'job_config_ynab_select_budgets' => 'Select your budget',
+ 'job_config_ynab_select_budgets' => 'Wybierz swój budżet',
'job_config_ynab_select_budgets_text' => 'You have :count budgets stored at YNAB. Please select the one from which Firefly III will import the transactions.',
'job_config_ynab_no_budgets' => 'There are no budgets available to be imported from.',
'ynab_no_mapping' => 'It seems you have not selected any accounts to import from.',
@@ -200,112 +203,120 @@ return [
'spectre_extra_key_unit_price' => 'Cena jednostkowa',
'spectre_extra_key_transactions_count' => 'Liczba transakcji',
+ //job configuration for finTS
+ 'fints_connection_failed' => 'An error occurred while trying to connecting to your bank. Please make sure that all the data you entered is correct. Original error message: :originalError',
+
+ 'job_config_fints_url_help' => 'E.g. https://banking-dkb.s-fints-pt-dkb.de/fints30',
+ 'job_config_fints_username_help' => 'For many banks this is your account number.',
+ 'job_config_fints_port_help' => 'The default port is 443.',
+ 'job_config_fints_account_help' => 'Choose the bank account for which you want to import transactions.',
+ 'job_config_local_account_help' => 'Choose the Firefly III account corresponding to your bank account chosen above.',
// specifics:
- 'specific_ing_name' => 'ING NL',
- 'specific_ing_descr' => 'Create better descriptions in ING exports',
- 'specific_sns_name' => 'SNS / Volksbank NL',
- 'specific_sns_descr' => 'Trim quotes from SNS / Volksbank export files',
- 'specific_abn_name' => 'ABN AMRO NL',
- 'specific_abn_descr' => 'Fixes potential problems with ABN AMRO files',
- 'specific_rabo_name' => 'Rabobank NL',
- 'specific_rabo_descr' => 'Fixes potential problems with Rabobank files',
- 'specific_pres_name' => 'President\'s Choice Financial CA',
- 'specific_pres_descr' => 'Fixes potential problems with PC files',
+ 'specific_ing_name' => 'ING NL',
+ 'specific_ing_descr' => 'Create better descriptions in ING exports',
+ 'specific_sns_name' => 'SNS / Volksbank NL',
+ 'specific_sns_descr' => 'Trim quotes from SNS / Volksbank export files',
+ 'specific_abn_name' => 'ABN AMRO NL',
+ 'specific_abn_descr' => 'Fixes potential problems with ABN AMRO files',
+ 'specific_rabo_name' => 'Rabobank NL',
+ 'specific_rabo_descr' => 'Fixes potential problems with Rabobank files',
+ 'specific_pres_name' => 'President\'s Choice Financial CA',
+ 'specific_pres_descr' => 'Fixes potential problems with PC files',
// job configuration for file provider (stage: roles)
- 'job_config_roles_title' => 'Import setup (3/4) - Define each column\'s role',
- 'job_config_roles_text' => 'Each column in your CSV file contains certain data. Please indicate what kind of data the importer should expect. The option to "map" data means that you will link each entry found in the column to a value in your database. An often mapped column is the column that contains the IBAN of the opposing account. That can be easily matched to IBAN\'s present in your database already.',
- 'job_config_roles_submit' => 'Continue',
- 'job_config_roles_column_name' => 'Name of column',
- 'job_config_roles_column_example' => 'Column example data',
- 'job_config_roles_column_role' => 'Column data meaning',
- 'job_config_roles_do_map_value' => 'Map these values',
- 'job_config_roles_no_example' => 'No example data available',
- 'job_config_roles_fa_warning' => 'If you mark a column as containing an amount in a foreign currency, you must also set the column that contains which currency it is.',
- 'job_config_roles_rwarning' => 'At the very least, mark one column as the amount-column. It is advisable to also select a column for the description, date and the opposing account.',
- 'job_config_roles_colum_count' => 'Kolumna',
+ 'job_config_roles_title' => 'Import setup (3/4) - Define each column\'s role',
+ 'job_config_roles_text' => 'Each column in your CSV file contains certain data. Please indicate what kind of data the importer should expect. The option to "map" data means that you will link each entry found in the column to a value in your database. An often mapped column is the column that contains the IBAN of the opposing account. That can be easily matched to IBAN\'s present in your database already.',
+ 'job_config_roles_submit' => 'Kontynuuj',
+ 'job_config_roles_column_name' => 'Nazwa kolumny',
+ 'job_config_roles_column_example' => 'Column example data',
+ 'job_config_roles_column_role' => 'Column data meaning',
+ 'job_config_roles_do_map_value' => 'Map these values',
+ 'job_config_roles_no_example' => 'No example data available',
+ 'job_config_roles_fa_warning' => 'If you mark a column as containing an amount in a foreign currency, you must also set the column that contains which currency it is.',
+ 'job_config_roles_rwarning' => 'At the very least, mark one column as the amount-column. It is advisable to also select a column for the description, date and the opposing account.',
+ 'job_config_roles_colum_count' => 'Kolumna',
// job config for the file provider (stage: mapping):
- 'job_config_map_title' => 'Import setup (4/4) - Connect import data to Firefly III data',
- 'job_config_map_text' => 'In the following tables, the left value shows you information found in your uploaded file. It is your task to map this value, if possible, to a value already present in your database. Firefly will stick to this mapping. If there is no value to map to, or you do not wish to map the specific value, select nothing.',
- 'job_config_map_nothing' => 'There is no data present in your file that you can map to existing values. Please press "Start the import" to continue.',
- 'job_config_field_value' => 'Wartość pola',
- 'job_config_field_mapped' => 'Zmapowane na',
- 'map_do_not_map' => '(nie mapuj)',
- 'job_config_map_submit' => 'Rozpocznij import',
+ 'job_config_map_title' => 'Import setup (4/4) - Connect import data to Firefly III data',
+ 'job_config_map_text' => 'In the following tables, the left value shows you information found in your uploaded file. It is your task to map this value, if possible, to a value already present in your database. Firefly will stick to this mapping. If there is no value to map to, or you do not wish to map the specific value, select nothing.',
+ 'job_config_map_nothing' => 'There is no data present in your file that you can map to existing values. Please press "Start the import" to continue.',
+ 'job_config_field_value' => 'Wartość pola',
+ 'job_config_field_mapped' => 'Zmapowane na',
+ 'map_do_not_map' => '(nie mapuj)',
+ 'job_config_map_submit' => 'Rozpocznij import',
// import status page:
- 'import_with_key' => 'Import z kluczem \':key\'',
- 'status_wait_title' => 'Proszę czekać...',
- 'status_wait_text' => 'To pole za chwilę zniknie.',
- 'status_running_title' => 'Trwa importowanie',
- 'status_job_running' => 'Proszę czekać, trwa importowanie danych...',
- 'status_job_storing' => 'Proszę czekać, zapisuję dane...',
- 'status_job_rules' => 'Proszę czekać, trwa procesowanie reguł...',
- 'status_fatal_title' => 'Błąd krytyczny',
- 'status_fatal_text' => 'The import has suffered from an error it could not recover from. Apologies!',
- 'status_fatal_more' => 'This (possibly very cryptic) error message is complemented by log files, which you can find on your hard drive, or in the Docker container where you run Firefly III from.',
- 'status_finished_title' => 'Import zakończony',
- 'status_finished_text' => 'Importowanie zostało zakończone.',
- 'finished_with_errors' => 'There were some errors during the import. Please review them carefully.',
- 'unknown_import_result' => 'Nieznany wynik importu',
- 'result_no_transactions' => 'No transactions have been imported. Perhaps they were all duplicates is simply no transactions where present to be imported. Perhaps the log files can tell you what happened. If you import data regularly, this is normal.',
- 'result_one_transaction' => 'Exactly one transaction has been imported. It is stored under tag :tag where you can inspect it further.',
- 'result_many_transactions' => 'Firefly III has imported :count transactions. They are stored under tag :tag where you can inspect them further.',
+ 'import_with_key' => 'Import z kluczem \':key\'',
+ 'status_wait_title' => 'Proszę czekać...',
+ 'status_wait_text' => 'To pole za chwilę zniknie.',
+ 'status_running_title' => 'Trwa importowanie',
+ 'status_job_running' => 'Proszę czekać, trwa importowanie danych...',
+ 'status_job_storing' => 'Proszę czekać, zapisuję dane...',
+ 'status_job_rules' => 'Proszę czekać, trwa procesowanie reguł...',
+ 'status_fatal_title' => 'Błąd krytyczny',
+ 'status_fatal_text' => 'The import has suffered from an error it could not recover from. Apologies!',
+ 'status_fatal_more' => 'This (possibly very cryptic) error message is complemented by log files, which you can find on your hard drive, or in the Docker container where you run Firefly III from.',
+ 'status_finished_title' => 'Import zakończony',
+ 'status_finished_text' => 'Importowanie zostało zakończone.',
+ 'finished_with_errors' => 'There were some errors during the import. Please review them carefully.',
+ 'unknown_import_result' => 'Nieznany wynik importu',
+ 'result_no_transactions' => 'No transactions have been imported. Perhaps they were all duplicates is simply no transactions where present to be imported. Perhaps the log files can tell you what happened. If you import data regularly, this is normal.',
+ 'result_one_transaction' => 'Exactly one transaction has been imported. It is stored under tag :tag where you can inspect it further.',
+ 'result_many_transactions' => 'Firefly III has imported :count transactions. They are stored under tag :tag where you can inspect them further.',
// general errors and warnings:
- 'bad_job_status' => 'To access this page, your import job cannot have status ":status".',
+ 'bad_job_status' => 'To access this page, your import job cannot have status ":status".',
// column roles for CSV import:
- 'column__ignore' => '(zignoruj tę kolumnę)',
- 'column_account-iban' => 'Konto aktywów (IBAN)',
- 'column_account-id' => 'ID konta aktywów (z bazy FF3)',
- 'column_account-name' => 'Konto aktywów (nazwa)',
- 'column_account-bic' => 'Asset account (BIC)',
- 'column_amount' => 'Kwota',
- 'column_amount_foreign' => 'Kwota (w obcej walucie)',
- 'column_amount_debit' => 'Kwota (kolumna debetowa)',
- 'column_amount_credit' => 'Kwota (kolumna kredytowa)',
- 'column_amount_negated' => 'Amount (negated column)',
- 'column_amount-comma-separated' => 'Kwota (przecinek jako separator dziesiętny)',
- 'column_bill-id' => 'ID rachunku (z bazy FF3)',
- 'column_bill-name' => 'Nazwa rachunku',
- 'column_budget-id' => 'ID budżetu (z bazy FF3)',
- 'column_budget-name' => 'Nazwa budżetu',
- 'column_category-id' => 'ID kategorii (z bazy FF3)',
- 'column_category-name' => 'Nazwa kategorii',
- 'column_currency-code' => 'Kod waluty (ISO 4217)',
- 'column_foreign-currency-code' => 'Kod obcej waluty (ISO 4217)',
- 'column_currency-id' => 'ID waluty (z bazy FF3)',
- 'column_currency-name' => 'Nazwa waluty (z bazy FF3)',
- 'column_currency-symbol' => 'Symbol waluty (z bazy FF3)',
- 'column_date-interest' => 'Data obliczenia odsetek',
- 'column_date-book' => 'Data księgowania transakcji',
- 'column_date-process' => 'Data przetworzenia transakcji',
- 'column_date-transaction' => 'Data',
- 'column_date-due' => 'Transaction due date',
- 'column_date-payment' => 'Transaction payment date',
- 'column_date-invoice' => 'Transaction invoice date',
- 'column_description' => 'Opis',
- 'column_opposing-iban' => 'Przeciwstawne konto (IBAN)',
- 'column_opposing-bic' => 'Przeciwstawne konto (BIC)',
- 'column_opposing-id' => 'ID przeciwstawnego konta (z bazy FF3)',
- 'column_external-id' => 'Zewnętrzne ID',
- 'column_opposing-name' => 'Przeciwstawne konto (nazwa)',
- 'column_rabo-debit-credit' => 'Specyficzny wskaźnik obciążenia/kredytu Rabobank',
- 'column_ing-debit-credit' => 'Specyficzny wskaźnik obciążenia/kredytu ING',
- 'column_sepa-ct-id' => 'SEPA end-to-end Identifier',
- 'column_sepa-ct-op' => 'SEPA Opposing Account Identifier',
- 'column_sepa-db' => 'SEPA Mandate Identifier',
- 'column_sepa-cc' => 'SEPA Clearing Code',
- 'column_sepa-ci' => 'SEPA Creditor Identifier',
- 'column_sepa-ep' => 'SEPA External Purpose',
- 'column_sepa-country' => 'SEPA Country Code',
- 'column_tags-comma' => 'Tagi (oddzielone przecinkami)',
- 'column_tags-space' => 'Tagi (oddzielone spacjami)',
- 'column_account-number' => 'Konto aktywów (numer konta)',
- 'column_opposing-number' => 'Konto przeciwne (numer konta)',
- 'column_note' => 'Notatki',
- 'column_internal-reference' => 'Internal reference',
+ 'column__ignore' => '(zignoruj tę kolumnę)',
+ 'column_account-iban' => 'Konto aktywów (IBAN)',
+ 'column_account-id' => 'ID konta aktywów (z bazy FF3)',
+ 'column_account-name' => 'Konto aktywów (nazwa)',
+ 'column_account-bic' => 'Asset account (BIC)',
+ 'column_amount' => 'Kwota',
+ 'column_amount_foreign' => 'Kwota (w obcej walucie)',
+ 'column_amount_debit' => 'Kwota (kolumna debetowa)',
+ 'column_amount_credit' => 'Kwota (kolumna kredytowa)',
+ 'column_amount_negated' => 'Amount (negated column)',
+ 'column_amount-comma-separated' => 'Kwota (przecinek jako separator dziesiętny)',
+ 'column_bill-id' => 'ID rachunku (z bazy FF3)',
+ 'column_bill-name' => 'Nazwa rachunku',
+ 'column_budget-id' => 'ID budżetu (z bazy FF3)',
+ 'column_budget-name' => 'Nazwa budżetu',
+ 'column_category-id' => 'ID kategorii (z bazy FF3)',
+ 'column_category-name' => 'Nazwa kategorii',
+ 'column_currency-code' => 'Kod waluty (ISO 4217)',
+ 'column_foreign-currency-code' => 'Kod obcej waluty (ISO 4217)',
+ 'column_currency-id' => 'ID waluty (z bazy FF3)',
+ 'column_currency-name' => 'Nazwa waluty (z bazy FF3)',
+ 'column_currency-symbol' => 'Symbol waluty (z bazy FF3)',
+ 'column_date-interest' => 'Data obliczenia odsetek',
+ 'column_date-book' => 'Data księgowania transakcji',
+ 'column_date-process' => 'Data przetworzenia transakcji',
+ 'column_date-transaction' => 'Data',
+ 'column_date-due' => 'Transaction due date',
+ 'column_date-payment' => 'Transaction payment date',
+ 'column_date-invoice' => 'Transaction invoice date',
+ 'column_description' => 'Opis',
+ 'column_opposing-iban' => 'Przeciwstawne konto (IBAN)',
+ 'column_opposing-bic' => 'Przeciwstawne konto (BIC)',
+ 'column_opposing-id' => 'ID przeciwstawnego konta (z bazy FF3)',
+ 'column_external-id' => 'Zewnętrzne ID',
+ 'column_opposing-name' => 'Przeciwstawne konto (nazwa)',
+ 'column_rabo-debit-credit' => 'Specyficzny wskaźnik obciążenia/kredytu Rabobank',
+ 'column_ing-debit-credit' => 'Specyficzny wskaźnik obciążenia/kredytu ING',
+ 'column_sepa-ct-id' => 'SEPA end-to-end Identifier',
+ 'column_sepa-ct-op' => 'SEPA Opposing Account Identifier',
+ 'column_sepa-db' => 'SEPA Mandate Identifier',
+ 'column_sepa-cc' => 'SEPA Clearing Code',
+ 'column_sepa-ci' => 'SEPA Creditor Identifier',
+ 'column_sepa-ep' => 'SEPA External Purpose',
+ 'column_sepa-country' => 'SEPA Country Code',
+ 'column_tags-comma' => 'Tagi (oddzielone przecinkami)',
+ 'column_tags-space' => 'Tagi (oddzielone spacjami)',
+ 'column_account-number' => 'Konto aktywów (numer konta)',
+ 'column_opposing-number' => 'Konto przeciwne (numer konta)',
+ 'column_note' => 'Notatki',
+ 'column_internal-reference' => 'Internal reference',
];
diff --git a/resources/lang/pl_PL/list.php b/resources/lang/pl_PL/list.php
index edcd5ded05..e1b8551961 100644
--- a/resources/lang/pl_PL/list.php
+++ b/resources/lang/pl_PL/list.php
@@ -104,7 +104,7 @@ return [
'sum_transfers' => 'Suma transferów',
'reconcile' => 'Uzgodnij',
'account_on_spectre' => 'Konto (Spectre)',
- 'account_on_ynab' => 'Account (YNAB)',
+ 'account_on_ynab' => 'Konto (YNAB)',
'do_import' => 'Importuj z tego konta',
'sepa-ct-id' => 'SEPA End to End Identifier',
'sepa-ct-op' => 'SEPA Opposing Account Identifier',
@@ -126,7 +126,7 @@ return [
'spectre_status' => 'Status',
'bunq_payment_id' => 'bunq payment ID',
'repetitions' => 'Repetitions',
- 'title' => 'Title',
+ 'title' => 'Tytuł',
'transaction_s' => 'Transakcja(e)',
'field' => 'Pole',
'value' => 'Wartość',
diff --git a/resources/lang/pl_PL/validation.php b/resources/lang/pl_PL/validation.php
index 6e20ec5fe0..855982247a 100644
--- a/resources/lang/pl_PL/validation.php
+++ b/resources/lang/pl_PL/validation.php
@@ -24,6 +24,7 @@ declare(strict_types=1);
return [
'iban' => 'To nie jest prawidłowy IBAN.',
+ 'zero_or_more' => 'The value cannot be negative.',
'source_equals_destination' => 'The source account equals the destination account.',
'unique_account_number_for_user' => 'Wygląda na to, że ten numer konta jest już w użyciu.',
'unique_iban_for_user' => 'Wygląda na to, że ten IBAN jest już w użyciu.',
diff --git a/resources/lang/pt_BR/demo.php b/resources/lang/pt_BR/demo.php
index 4b22a8a68e..bb511270e9 100644
--- a/resources/lang/pt_BR/demo.php
+++ b/resources/lang/pt_BR/demo.php
@@ -26,7 +26,7 @@ return [
'no_demo_text' => 'Desculpe, não há nenhum texto extra de explicação para esta página.',
'see_help_icon' => 'No entanto, o -ícone no canto superior direito pode lhe dizer mais.',
'index' => 'Bem-vindo ao Firefly III! Nesta página você pode obter uma rápida visão geral de suas finanças. Para mais informações, confira Contas de Ativos → Contas de Ativos e, claro, as páginas de Orçamentos e Relatório.Ou então, dê uma olhada ao redor e veja onde você vai parar.',
- 'accounts-index' => 'Asset accounts are your personal bank accounts. Expense accounts are the accounts you spend money at, such as stores and friends. Revenue accounts are accounts you receive money from, such as your job, the government or other sources of income. Liabilities are your debts and loans such as old credit card debts or student loans. On this page you can edit or remove them.',
+ 'accounts-index' => 'Contas de ativo são suas contas bancárias pessoais. Contas de despesa são aquilo em que você gasta seu dinheiro, tais como lojas e amigos. Contas de receitas são as fontes das quais você recebe seu dinheiro, como o seu trabalho, o governo ou outras fontes de renda. Passivos são suas dívidas e empréstimos, como dívidas antigas de cartão de crédito ou empréstimos estudantis. Nesta página você pode editá-los ou removê-los.',
'budgets-index' => 'Esta página mostra a você uma visão geral dos seus orçamentos. A barra superior mostra a quantidade disponível a ser orçamentada. Isto pode ser personalizado para qualquer valor clicando o montante à direita. A quantidade que você gastou de fato é mostrada na barra abaixo. Abaixo, estão as despesas para cada orçamento e o que você orçou neles.',
'reports-index-start' => 'Firefly III suporta vários tipos de relatórios. Leia sobre eles clicando no-ícone no canto superior direito.',
'reports-index-examples' => 'Certifique-se de verificar estes exemplos: um quadro financeiro mensal, um quadro financeiro anual e uma visão geral orçamentária.',
@@ -34,6 +34,6 @@ return [
'transactions-index' => 'Estas despesas, depósitos e transferências não são fantasiosas. Elas foram geradas automaticamente.',
'piggy-banks-index' => 'Como você pode ver, existem três cofrinhos. Use o sinal de mais e menos botões para influenciar a quantidade de dinheiro em cada cofrinho. Clique no nome do cofrinho para ver a administração de cada cofrinho.',
'import-index' => 'Qualquer arquivo CSV pode ser importado para o Firefly III. Importações de dados de bunq e Specter também são suportadas. Outros bancos e agregadores financeiros serão implementados futuramente. Como usuário de demonstração, no entanto, você só pode ver o provedor "falso" em ação. Ele irá gerar transações aleatórias para lhe mostrar como funciona o processo.',
- 'recurring-index' => 'Please note that this feature is under active development and may not work as expected.',
- 'recurring-create' => 'Please note that this feature is under active development and may not work as expected.',
+ 'recurring-index' => 'Por favor, note que este recurso está em desenvolvimento e pode não funcionar como esperado.',
+ 'recurring-create' => 'Por favor, note que este recurso está em desenvolvimento e pode não funcionar como esperado.',
];
diff --git a/resources/lang/pt_BR/firefly.php b/resources/lang/pt_BR/firefly.php
index 7e01bbd9c5..78a334925e 100644
--- a/resources/lang/pt_BR/firefly.php
+++ b/resources/lang/pt_BR/firefly.php
@@ -28,10 +28,10 @@ return [
'actions' => 'Ações',
'edit' => 'Editar',
'delete' => 'Apagar',
- 'split' => 'Split',
- 'clone' => 'Clone',
- 'last_seven_days' => 'Last seven days',
- 'last_thirty_days' => 'Last thirty days',
+ 'split' => 'Dividir',
+ 'clone' => 'Clonar',
+ 'last_seven_days' => 'Últimos sete dias',
+ 'last_thirty_days' => 'Últimos 30 dias',
'welcomeBack' => 'O que está passando?',
'everything' => 'Tudo',
'today' => 'hoje',
@@ -41,7 +41,7 @@ return [
'cancel' => 'Cancelar',
'from' => 'De',
'to' => 'Até',
- 'help_translating' => 'This help text is not yet available in your language. Will you help translate?',
+ 'help_translating' => 'Este texto de ajuda ainda não está disponível no seu idioma. Que tal ajudar a traduzí-lo?',
'showEverything' => 'Mostrar tudo',
'never' => 'Nunca',
'no_results_for_empty_search' => 'Sua pesquisa estava vazia, então nada foi encontrado.',
@@ -65,7 +65,7 @@ return [
'new_asset_account' => 'Nova conta de ativo',
'new_expense_account' => 'Nova conta de despesa',
'new_revenue_account' => 'Nova conta de receita',
- 'new_liabilities_account' => 'New liability',
+ 'new_liabilities_account' => 'Novo passivo',
'new_budget' => 'Novo orçamento',
'new_bill' => 'Nova fatura',
'block_account_logout' => 'Você foi desconectado. Contas bloqueadas não podem usar este site. Você se registrou com um email válido?',
@@ -94,7 +94,7 @@ return [
'warning_much_data' => ':days dias de dados podem demorar um pouco para carregar.',
'registered' => 'Você se registrou com sucesso!',
'Default asset account' => 'Conta padrão',
- 'no_budget_pointer' => 'You seem to have no budgets yet. You should create some on the budgets-page. Budgets can help you keep track of expenses.',
+ 'no_budget_pointer' => 'Parece que você ainda não tem orçamentos. Você deve criar alguns na página de orçamentos. Orçamentos podem ajudá-lo a manter o controle das despesas.',
'Savings account' => 'Conta poupança',
'Credit card' => 'Cartão de crédito',
'source_accounts' => 'Conta(s) de origem',
@@ -186,10 +186,10 @@ return [
'authorization_request_intro' => ':client está pedindo permissão para acessar sua administração financeira. Gostaria de autorizar :client para acessar esses registros?',
'scopes_will_be_able' => 'Esta aplicação será capaz de:',
'button_authorize' => 'Autorizar',
- 'none_in_select_list' => '(none)',
- 'name_in_currency' => ':name in :currency',
- 'paid_in_currency' => 'Paid in :currency',
- 'unpaid_in_currency' => 'Unpaid in :currency',
+ 'none_in_select_list' => '(nenhum)',
+ 'name_in_currency' => ':name em :currency',
+ 'paid_in_currency' => 'Pago em :currency',
+ 'unpaid_in_currency' => 'Não pago em :currency',
// check for updates:
'update_check_title' => 'Verificar Atualizações',
@@ -277,9 +277,9 @@ return [
'move_rule_group_up' => 'Subir o grupo de regras',
'move_rule_group_down' => 'Descer grupo de regras',
'save_rules_by_moving' => 'Salve essas regra(s), movendo-os para outro grupo de regra:',
- 'make_new_rule' => 'Make a new rule in rule group ":title"',
- 'make_new_rule_no_group' => 'Make a new rule',
- 'instructions_rule_from_bill' => 'In order to match transactions to your new bill ":name", Firefly III can create a rule that will automatically be checked against any transactions you store. Please verify the details below and store the rule to have Firefly III automatically match transactions to your new bill.',
+ 'make_new_rule' => 'Faça uma nova regra no grupo de regras ":title"',
+ 'make_new_rule_no_group' => 'Criar uma nova regra',
+ 'instructions_rule_from_bill' => 'Para conectar transações com sua nova fatura ":name", Firefly III pode criar uma regra que automaticamente será verificada a cada transação que você criar. Verifique os detalhes abaixo e salve a regra para que o Firefly III possa conectar automaticamente as transações a sua nova fatura.',
'rule_is_strict' => 'regra estrita',
'rule_is_not_strict' => 'regra não estrita',
'rule_help_stop_processing' => 'Quando você marcar essa caixa, regras posteriores deste grupo não serão executadas.',
@@ -425,12 +425,12 @@ return [
'rule_action_link_to_bill_choice' => 'Vincular a uma fatura..',
'rule_action_link_to_bill' => 'Vincular à fatura ":action_value"',
'rule_action_set_notes' => 'Defina notas para ":action_value"',
- 'rule_action_convert_deposit_choice' => 'Convert the transaction to a deposit',
- 'rule_action_convert_deposit' => 'Convert the transaction to a deposit from ":action_value"',
- 'rule_action_convert_withdrawal_choice' => 'Convert the transaction to a withdrawal',
- 'rule_action_convert_withdrawal' => 'Convert the transaction to a withdrawal to ":action_value"',
- 'rule_action_convert_transfer_choice' => 'Convert the transaction to a transfer',
- 'rule_action_convert_transfer' => 'Convert the transaction to a transfer with ":action_value"',
+ 'rule_action_convert_deposit_choice' => 'Converter esta transferência em depósito',
+ 'rule_action_convert_deposit' => 'Converter a transação em um depósito de ":action_value"',
+ 'rule_action_convert_withdrawal_choice' => 'Converter esta transferência em retirada',
+ 'rule_action_convert_withdrawal' => 'Converter a transação em uma retirada de ":action_value"',
+ 'rule_action_convert_transfer_choice' => 'Converter esta transação para transferência',
+ 'rule_action_convert_transfer' => 'Converter a transação em uma transferência de ":action_value"',
'rules_have_read_warning' => 'Você leu o aviso?',
'apply_rule_warning' => 'Aviso: executar uma regra (grupo) em uma grande seleção de transações pode levar tempo, e pode atingir um tempo limite. Se o fizer, a regra (grupo) só será aplicada a um subconjunto desconhecido de suas transações. Isso pode deixar a sua administração financeira aos pedaços. Por favor, seja cuidadoso.',
@@ -460,7 +460,7 @@ return [
'pref_home_screen_accounts' => 'Conta da tela inicial',
'pref_home_screen_accounts_help' => 'Que conta deve ser exibida na tela inicial?',
'pref_view_range' => 'Ver intervalo',
- 'pref_view_range_help' => 'Some charts are automatically grouped in periods. Your budgets will also be grouped in periods. What period would you prefer?',
+ 'pref_view_range_help' => 'Algumas tabelas estão automaticamente agrupadas em períodos. Seus orçamentos também serão agrupados em períodos. Qual período você prefere?',
'pref_1D' => 'Um dia',
'pref_1W' => 'Uma semana',
'pref_1M' => 'Um mês',
@@ -482,7 +482,7 @@ return [
'pref_two_factor_auth_code_help' => 'Scaneie o código QR com um aplicativo em seu telefone como Authy ou Google Authenticator e insira o código gerado.',
'pref_two_factor_auth_reset_code' => 'Redefinir o código de verificação',
'pref_two_factor_auth_disable_2fa' => 'Desativar verificação em duas etapas',
- '2fa_use_secret_instead' => 'If you cannot scan the QR code, feel free to use the secret instead: :secret.',
+ '2fa_use_secret_instead' => 'Se você não pode escanear o código QR, sinta-se à vontade para usar o código secreto: :secret.',
'pref_save_settings' => 'Salvar definições',
'saved_preferences' => 'Preferências salvas!',
'preferences_general' => 'Geral',
@@ -537,8 +537,8 @@ return [
'secure_pw_history' => 'Em agosto de 2017, a conhecida pesquisadora de segurança Troy Hunt lançou uma lista de 306 milhões de senhas roubadas. Essas senhas foram roubadas durante assalto em empresas como LinkedIn, Adobe e NeoPets (e muito mais).',
'secure_pw_check_box' => 'Ao marcar a caixa de seleção, Firefly III irá enviar os cinco primeiros caracteres do hash SHA1 de sua senha ao site Troy Hunt, para verificar se ela está na lista. Isso impede que você use senhas inseguras, como recomendado na última publicação NIST Special sobre esse tema.',
'secure_pw_sha1' => 'Mas pensei que SHA1 estava quebrado?',
- 'secure_pw_hash_speed' => 'Yes, but not in this context. As you can read on the website detailing how they broke SHA1, it is now slightly easier to find a "collision": another digest that results in the same SHA1-hash. It now only takes 10,000 years using a single-GPU machine.',
- 'secure_pw_hash_security' => 'This digest would not be equal to your password, nor would it be useful on (a site like) Firefly III. This application does not use SHA1 for password verification. So it is safe to check this box. Your password is hashed and only the first five characters of this digest are sent over HTTPS.',
+ 'secure_pw_hash_speed' => 'Sim, mas não neste contexto. Como você pode ler no site detalhando como eles quebraram a SHA1, agora é um pouco mais fácil encontrar uma "colisão": outra sequência que resulta na mesma marca SHA1-hash. Agora leva apenas 10.000 anos usando uma máquina de GPU única.',
+ 'secure_pw_hash_security' => 'Essa colisão não será igual à sua senha, e tampouco será útil no Firefly III (ou em um site semelhante). Esse aplicativo não usa SHA1 para a verificação de senha. Portanto, é seguro marcar essa caixa de seleção. O hash de sua senha é calculado é apenas os cinco primeiros caracteres são enviados via HTTPS.',
'secure_pw_should' => 'Devo verificar a caixa?',
'secure_pw_long_password' => 'Se você apenas gerou uma senha longa e de uso único para o Firefly III usando algum tipo de gerador de senhas: não.',
'secure_pw_short' => 'Se você acabou de inserir a senha que você usa sempre: Por favor, sim.',
@@ -551,6 +551,8 @@ return [
'email_changed_logout' => 'Até que você verifique seu endereço de e-mail, não pode iniciar sessão.',
'login_with_new_email' => 'Agora você pode fazer login com seu novo endereço de e-mail.',
'login_with_old_email' => 'Agora você pode fazer login novamente com o seu endereço de e-mail antigo.',
+ 'login_provider_local_only' => 'Esta ação não está disponível durante a autenticação por meio de ":login_provider".',
+ 'delete_local_info_only' => 'Como você se autentica por meio de ":login_provider", isso irá apagar apenas informações locais do Firefly III.',
// attachments
'nr_of_attachments' => 'Um anexo|:count anexos',
@@ -624,7 +626,7 @@ return [
'cannot_delete_currency' => 'Não é possível excluir :name porque ainda está em uso.',
'deleted_currency' => 'Moeda :name excluída',
'created_currency' => 'Moeda :name criada',
- 'could_not_store_currency' => 'Could not store the new currency.',
+ 'could_not_store_currency' => 'Não foi possível guardar a nova moeda.',
'updated_currency' => 'Moeda :name atualizada',
'ask_site_owner' => 'Por favor, pergunte ao :owner para adicionar, remover ou editar moedas.',
'currencies_intro' => 'Firefly III oferece suporte a várias moedas que você pode definir e ativar aqui.',
@@ -687,10 +689,10 @@ return [
'bill_will_automatch' => 'A fatura será automaticamente vinculada a transações correspondentes',
'skips_over' => 'ignorar',
'bill_store_error' => 'Um erro inesperado ocorreu ao armazenar sua nova fatura. Por favor, verifique os arquivos de log',
- 'list_inactive_rule' => 'inactive rule',
+ 'list_inactive_rule' => 'regra inativa',
// accounts:
- 'account_missing_transaction' => 'Account #:id (":name") cannot be viewed directly, but Firefly is missing redirect information.',
+ 'account_missing_transaction' => 'Conta #:id (":name") não pode ser visualizada diretamente, mas o Firefly está sem informação de redirecionamento.',
'details_for_asset' => 'Detalhes para a conta de ativo ":name"',
'details_for_expense' => 'Detalhes para a conta de despesas ":name"',
'details_for_revenue' => 'Detalhes para a conta de receitas ":name"',
@@ -704,12 +706,12 @@ return [
'delete_asset_account' => 'Excluir conta do activo ":name"',
'delete_expense_account' => 'Excluir conta de despesas ":name"',
'delete_revenue_account' => 'Excluir conta de receitas ":name"',
- 'delete_liabilities_account' => 'Delete liability ":name"',
+ 'delete_liabilities_account' => 'Apagar passivo ":name"',
'asset_deleted' => 'Conta de ativo ":name" excluído com sucesso',
'expense_deleted' => 'Conta de despesa ":name" excluída com sucesso',
'revenue_deleted' => 'Conta de receitas ":name" excluída com sucesso',
'update_asset_account' => 'Atualizar de conta de ativo',
- 'update_liabilities_account' => 'Update liability',
+ 'update_liabilities_account' => 'Atualizar passivo',
'update_expense_account' => 'Atualizar conta de despesas',
'update_revenue_account' => 'Atualizar conta de receita',
'make_new_asset_account' => 'Criar uma nova conta de ativo',
@@ -777,6 +779,7 @@ return [
'interest_calc_daily' => 'Per day',
'interest_calc_monthly' => 'Per month',
'interest_calc_yearly' => 'Per year',
+ 'initial_balance_account' => 'Initial balance account of :name',
// categories:
'new_category' => 'Nova categoria',
@@ -1021,6 +1024,7 @@ return [
'select_expense_revenue' => 'Selecione conta de despesa/receita',
'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.',
'sum_in_default_currency' => 'The sum will always be in your default currency.',
+ 'net_filtered_prefs' => 'Esse gráfico nunca irá incluir contas que têm a opção "incluir no patrimônio líquido" desmarcada.',
// charts:
'chart' => 'Gráfico',
diff --git a/resources/lang/pt_BR/form.php b/resources/lang/pt_BR/form.php
index f4367cc59a..32311efe7f 100644
--- a/resources/lang/pt_BR/form.php
+++ b/resources/lang/pt_BR/form.php
@@ -191,6 +191,7 @@ return [
'password_confirmation' => 'Senha(Confirmar)',
'blocked' => 'Está bloqueado?',
'blocked_code' => 'Razão para ser reportado',
+ 'login_name' => 'Login',
// import
'apply_rules' => 'Apply rules',
@@ -222,6 +223,16 @@ return [
'public_key' => 'Chave pública',
'country_code' => 'Código do país',
'provider_code' => 'Banco ou provedor de dados',
+ 'fints_url' => 'FinTS API URL',
+ 'fints_port' => 'Port',
+ 'fints_bank_code' => 'Bank code',
+ 'fints_username' => 'Username',
+ 'fints_password' => 'PIN / Password',
+ 'fints_account' => 'FinTS account',
+ 'local_account' => 'Firefly III account',
+ 'from_date' => 'Date from',
+ 'to_date' => 'Date to',
+
'due_date' => 'Data de vencimento',
'payment_date' => 'Data de pagamento',
diff --git a/resources/lang/pt_BR/import.php b/resources/lang/pt_BR/import.php
index 742f4011e6..feee02b640 100644
--- a/resources/lang/pt_BR/import.php
+++ b/resources/lang/pt_BR/import.php
@@ -24,34 +24,37 @@ declare(strict_types=1);
return [
// ALL breadcrumbs and subtitles:
- 'index_breadcrumb' => 'Import data into Firefly III',
- 'prerequisites_breadcrumb_fake' => 'Prerequisites for the fake import provider',
- 'prerequisites_breadcrumb_spectre' => 'Prerequisites for Spectre',
- 'prerequisites_breadcrumb_bunq' => 'Prerequisites for bunq',
- 'prerequisites_breadcrumb_ynab' => 'Prerequisites for YNAB',
- 'job_configuration_breadcrumb' => 'Configuration for ":key"',
- 'job_status_breadcrumb' => 'Import status for ":key"',
- 'cannot_create_for_provider' => 'Firefly III cannot create a job for the ":provider"-provider.',
- 'disabled_for_demo_user' => 'disabled in demo',
+ 'index_breadcrumb' => 'Importar dados para o Firefly III',
+ 'prerequisites_breadcrumb_fake' => 'Pré-requisitos para o provedor falso de importação',
+ 'prerequisites_breadcrumb_spectre' => 'Pré-requisitos para Spectre',
+ 'prerequisites_breadcrumb_bunq' => 'Pré-requisitos para bunq',
+ 'prerequisites_breadcrumb_ynab' => 'Pré-requisitos para YNAB',
+ 'job_configuration_breadcrumb' => 'Configuração para ":key"',
+ 'job_status_breadcrumb' => 'Status de importação para ":key"',
+ 'cannot_create_for_provider' => 'Firefly III não pode criar um trabalho para o provedor ":provider".',
+ 'disabled_for_demo_user' => 'desativado no modo demonstração',
// index page:
- 'general_index_title' => 'Import a file',
- 'general_index_intro' => 'Welcome to Firefly III\'s import routine. There are a few ways of importing data into Firefly III, displayed here as buttons.',
+ 'general_index_title' => 'Importar um arquivo',
+ 'general_index_intro' => 'Bem-vindo à rotina de importação do Firefly III. Existem algumas maneiras de importar dados no Firefly III; elas estão mostradas aqui como botões.',
// import provider strings (index):
- 'button_fake' => 'Fake an import',
- 'button_file' => 'Import a file',
- 'button_bunq' => 'Import from bunq',
- 'button_spectre' => 'Import using Spectre',
- 'button_plaid' => 'Import using Plaid',
- 'button_yodlee' => 'Import using Yodlee',
- 'button_quovo' => 'Import using Quovo',
- 'button_ynab' => 'Import from You Need A Budget',
+ 'button_fake' => 'Fingir uma importação',
+ 'button_file' => 'Importar um arquivo',
+ 'button_bunq' => 'Importar de bunq',
+ 'button_spectre' => 'Importar usando Spectre',
+ 'button_plaid' => 'Importar usando Plaid',
+ 'button_yodlee' => 'Importar usando Yodlee',
+ 'button_quovo' => 'Importar usando Quovo',
+ 'button_ynab' => 'Importar de You Need A Budget',
+ 'button_fints' => 'Importar usando FinTS',
+
+
// global config box (index)
- 'global_config_title' => 'Global import configuration',
- 'global_config_text' => 'In the future, this box will feature preferences that apply to ALL import providers above.',
+ 'global_config_title' => 'Configuração global de importação',
+ 'global_config_text' => 'No futuro, esta caixa terá preferências que se aplicam a TODOS os provedores de importação acima.',
// prerequisites box (index)
- 'need_prereq_title' => 'Import prerequisites',
+ 'need_prereq_title' => 'Pré-requisitos de importação',
'need_prereq_intro' => 'Some import methods need your attention before they can be used. For example, they might require special API keys or application secrets. You can configure them here. The icon indicates if these prerequisites have been met.',
'do_prereq_fake' => 'Prerequisites for the fake provider',
'do_prereq_file' => 'Prerequisites for file imports',
@@ -200,112 +203,120 @@ return [
'spectre_extra_key_unit_price' => 'Unit price',
'spectre_extra_key_transactions_count' => 'Transaction count',
+ //job configuration for finTS
+ 'fints_connection_failed' => 'An error occurred while trying to connecting to your bank. Please make sure that all the data you entered is correct. Original error message: :originalError',
+
+ 'job_config_fints_url_help' => 'E.g. https://banking-dkb.s-fints-pt-dkb.de/fints30',
+ 'job_config_fints_username_help' => 'For many banks this is your account number.',
+ 'job_config_fints_port_help' => 'The default port is 443.',
+ 'job_config_fints_account_help' => 'Choose the bank account for which you want to import transactions.',
+ 'job_config_local_account_help' => 'Choose the Firefly III account corresponding to your bank account chosen above.',
// specifics:
- 'specific_ing_name' => 'ING NL',
- 'specific_ing_descr' => 'Create better descriptions in ING exports',
- 'specific_sns_name' => 'SNS / Volksbank NL',
- 'specific_sns_descr' => 'Trim quotes from SNS / Volksbank export files',
- 'specific_abn_name' => 'ABN AMRO NL',
- 'specific_abn_descr' => 'Fixes potential problems with ABN AMRO files',
- 'specific_rabo_name' => 'Rabobank NL',
- 'specific_rabo_descr' => 'Fixes potential problems with Rabobank files',
- 'specific_pres_name' => 'President\'s Choice Financial CA',
- 'specific_pres_descr' => 'Fixes potential problems with PC files',
+ 'specific_ing_name' => 'ING NL',
+ 'specific_ing_descr' => 'Create better descriptions in ING exports',
+ 'specific_sns_name' => 'SNS / Volksbank NL',
+ 'specific_sns_descr' => 'Trim quotes from SNS / Volksbank export files',
+ 'specific_abn_name' => 'ABN AMRO NL',
+ 'specific_abn_descr' => 'Fixes potential problems with ABN AMRO files',
+ 'specific_rabo_name' => 'Rabobank NL',
+ 'specific_rabo_descr' => 'Fixes potential problems with Rabobank files',
+ 'specific_pres_name' => 'President\'s Choice Financial CA',
+ 'specific_pres_descr' => 'Fixes potential problems with PC files',
// job configuration for file provider (stage: roles)
- 'job_config_roles_title' => 'Import setup (3/4) - Define each column\'s role',
- 'job_config_roles_text' => 'Each column in your CSV file contains certain data. Please indicate what kind of data the importer should expect. The option to "map" data means that you will link each entry found in the column to a value in your database. An often mapped column is the column that contains the IBAN of the opposing account. That can be easily matched to IBAN\'s present in your database already.',
- 'job_config_roles_submit' => 'Continue',
- 'job_config_roles_column_name' => 'Name of column',
- 'job_config_roles_column_example' => 'Column example data',
- 'job_config_roles_column_role' => 'Column data meaning',
- 'job_config_roles_do_map_value' => 'Map these values',
- 'job_config_roles_no_example' => 'No example data available',
- 'job_config_roles_fa_warning' => 'If you mark a column as containing an amount in a foreign currency, you must also set the column that contains which currency it is.',
- 'job_config_roles_rwarning' => 'At the very least, mark one column as the amount-column. It is advisable to also select a column for the description, date and the opposing account.',
- 'job_config_roles_colum_count' => 'Column',
+ 'job_config_roles_title' => 'Import setup (3/4) - Define each column\'s role',
+ 'job_config_roles_text' => 'Each column in your CSV file contains certain data. Please indicate what kind of data the importer should expect. The option to "map" data means that you will link each entry found in the column to a value in your database. An often mapped column is the column that contains the IBAN of the opposing account. That can be easily matched to IBAN\'s present in your database already.',
+ 'job_config_roles_submit' => 'Continue',
+ 'job_config_roles_column_name' => 'Name of column',
+ 'job_config_roles_column_example' => 'Column example data',
+ 'job_config_roles_column_role' => 'Column data meaning',
+ 'job_config_roles_do_map_value' => 'Map these values',
+ 'job_config_roles_no_example' => 'No example data available',
+ 'job_config_roles_fa_warning' => 'If you mark a column as containing an amount in a foreign currency, you must also set the column that contains which currency it is.',
+ 'job_config_roles_rwarning' => 'At the very least, mark one column as the amount-column. It is advisable to also select a column for the description, date and the opposing account.',
+ 'job_config_roles_colum_count' => 'Column',
// job config for the file provider (stage: mapping):
- 'job_config_map_title' => 'Import setup (4/4) - Connect import data to Firefly III data',
- 'job_config_map_text' => 'In the following tables, the left value shows you information found in your uploaded file. It is your task to map this value, if possible, to a value already present in your database. Firefly will stick to this mapping. If there is no value to map to, or you do not wish to map the specific value, select nothing.',
- 'job_config_map_nothing' => 'There is no data present in your file that you can map to existing values. Please press "Start the import" to continue.',
- 'job_config_field_value' => 'Field value',
- 'job_config_field_mapped' => 'Mapped to',
- 'map_do_not_map' => '(não mapear)',
- 'job_config_map_submit' => 'Start the import',
+ 'job_config_map_title' => 'Import setup (4/4) - Connect import data to Firefly III data',
+ 'job_config_map_text' => 'In the following tables, the left value shows you information found in your uploaded file. It is your task to map this value, if possible, to a value already present in your database. Firefly will stick to this mapping. If there is no value to map to, or you do not wish to map the specific value, select nothing.',
+ 'job_config_map_nothing' => 'There is no data present in your file that you can map to existing values. Please press "Start the import" to continue.',
+ 'job_config_field_value' => 'Field value',
+ 'job_config_field_mapped' => 'Mapped to',
+ 'map_do_not_map' => '(não mapear)',
+ 'job_config_map_submit' => 'Start the import',
// import status page:
- 'import_with_key' => 'Importar com a chave \':key\'',
- 'status_wait_title' => 'Por favor espere...',
- 'status_wait_text' => 'Esta caixa desaparecerá em um instante.',
- 'status_running_title' => 'A importação está em execução',
- 'status_job_running' => 'Please wait, running the import...',
- 'status_job_storing' => 'Please wait, storing data...',
- 'status_job_rules' => 'Please wait, running rules...',
- 'status_fatal_title' => 'Fatal error',
- 'status_fatal_text' => 'The import has suffered from an error it could not recover from. Apologies!',
- 'status_fatal_more' => 'This (possibly very cryptic) error message is complemented by log files, which you can find on your hard drive, or in the Docker container where you run Firefly III from.',
- 'status_finished_title' => 'Import finished',
- 'status_finished_text' => 'The import has finished.',
- 'finished_with_errors' => 'There were some errors during the import. Please review them carefully.',
- 'unknown_import_result' => 'Unknown import result',
- 'result_no_transactions' => 'No transactions have been imported. Perhaps they were all duplicates is simply no transactions where present to be imported. Perhaps the log files can tell you what happened. If you import data regularly, this is normal.',
- 'result_one_transaction' => 'Exactly one transaction has been imported. It is stored under tag :tag where you can inspect it further.',
- 'result_many_transactions' => 'Firefly III has imported :count transactions. They are stored under tag :tag where you can inspect them further.',
+ 'import_with_key' => 'Importar com a chave \':key\'',
+ 'status_wait_title' => 'Por favor espere...',
+ 'status_wait_text' => 'Esta caixa desaparecerá em um instante.',
+ 'status_running_title' => 'A importação está em execução',
+ 'status_job_running' => 'Please wait, running the import...',
+ 'status_job_storing' => 'Please wait, storing data...',
+ 'status_job_rules' => 'Please wait, running rules...',
+ 'status_fatal_title' => 'Fatal error',
+ 'status_fatal_text' => 'The import has suffered from an error it could not recover from. Apologies!',
+ 'status_fatal_more' => 'This (possibly very cryptic) error message is complemented by log files, which you can find on your hard drive, or in the Docker container where you run Firefly III from.',
+ 'status_finished_title' => 'Import finished',
+ 'status_finished_text' => 'The import has finished.',
+ 'finished_with_errors' => 'There were some errors during the import. Please review them carefully.',
+ 'unknown_import_result' => 'Unknown import result',
+ 'result_no_transactions' => 'No transactions have been imported. Perhaps they were all duplicates is simply no transactions where present to be imported. Perhaps the log files can tell you what happened. If you import data regularly, this is normal.',
+ 'result_one_transaction' => 'Exactly one transaction has been imported. It is stored under tag :tag where you can inspect it further.',
+ 'result_many_transactions' => 'Firefly III has imported :count transactions. They are stored under tag :tag where you can inspect them further.',
// general errors and warnings:
- 'bad_job_status' => 'To access this page, your import job cannot have status ":status".',
+ 'bad_job_status' => 'To access this page, your import job cannot have status ":status".',
// column roles for CSV import:
- 'column__ignore' => '(ignorar esta coluna)',
- 'column_account-iban' => 'Conta de Ativo (IBAN)',
- 'column_account-id' => 'ID da Conta de Ativo (correspondente FF3)',
- 'column_account-name' => 'Conta de Ativo (nome)',
- 'column_account-bic' => 'Asset account (BIC)',
- 'column_amount' => 'Montante',
- 'column_amount_foreign' => 'Montante (em moeda estrangeira)',
- 'column_amount_debit' => 'Montante (coluna de débito)',
- 'column_amount_credit' => 'Montante (coluna de crédito)',
- 'column_amount_negated' => 'Amount (negated column)',
- 'column_amount-comma-separated' => 'Montante (vírgula como separador decimal)',
- 'column_bill-id' => 'ID da fatura (correspondente FF3)',
- 'column_bill-name' => 'Nome da Fatura',
- 'column_budget-id' => 'ID do Orçamento (correspondente FF3)',
- 'column_budget-name' => 'Nome do Orçamento',
- 'column_category-id' => 'ID da Categoria (correspondente FF3)',
- 'column_category-name' => 'Nome da Categoria',
- 'column_currency-code' => 'Código da Moeda (ISO 4217)',
- 'column_foreign-currency-code' => 'Código de moeda estrangeira (ISO 4217)',
- 'column_currency-id' => 'ID da Moeda (correspondente FF3)',
- 'column_currency-name' => 'Nome da Moeda (correspondente FF3)',
- 'column_currency-symbol' => 'Símbolo da Moeda (correspondente FF3)',
- 'column_date-interest' => 'Data de cálculo de juros',
- 'column_date-book' => 'Data da reserva de transação',
- 'column_date-process' => 'Data do processo de transação',
- 'column_date-transaction' => 'Data',
- 'column_date-due' => 'Data de vencimento da transação',
- 'column_date-payment' => 'Data de pagamento da transação',
- 'column_date-invoice' => 'Data da fatura da transação',
- 'column_description' => 'Descrição',
- 'column_opposing-iban' => 'Conta contrária (IBAN)',
- 'column_opposing-bic' => 'Conta contrária (BIC)',
- 'column_opposing-id' => 'ID da Conta Cotrária (correspondente FF3)',
- 'column_external-id' => 'ID Externo',
- 'column_opposing-name' => 'Conta contrária (nome)',
- 'column_rabo-debit-credit' => 'Indicador de débito/crédito específico do Rabobank',
- 'column_ing-debit-credit' => 'Indicador de débito/crédito específico do ING',
- 'column_sepa-ct-id' => 'SEPA identificador end-to-end',
- 'column_sepa-ct-op' => 'SEPA Identificador de conta de contrária',
- 'column_sepa-db' => 'SEPA Identificador de Mandato',
- 'column_sepa-cc' => 'SEPA Código de Compensação',
- 'column_sepa-ci' => 'SEPA Identificador Credor',
- 'column_sepa-ep' => 'SEPA Finalidade Externa',
- 'column_sepa-country' => 'SEPA Código do País',
- 'column_tags-comma' => 'Tags (separadas por vírgula)',
- 'column_tags-space' => 'Tags (separadas por espaço)',
- 'column_account-number' => 'Conta de ativo (número da conta)',
- 'column_opposing-number' => 'Conta Contrária (número da conta)',
- 'column_note' => 'Nota(s)',
- 'column_internal-reference' => 'Referência interna',
+ 'column__ignore' => '(ignorar esta coluna)',
+ 'column_account-iban' => 'Conta de Ativo (IBAN)',
+ 'column_account-id' => 'ID da Conta de Ativo (correspondente FF3)',
+ 'column_account-name' => 'Conta de Ativo (nome)',
+ 'column_account-bic' => 'Asset account (BIC)',
+ 'column_amount' => 'Montante',
+ 'column_amount_foreign' => 'Montante (em moeda estrangeira)',
+ 'column_amount_debit' => 'Montante (coluna de débito)',
+ 'column_amount_credit' => 'Montante (coluna de crédito)',
+ 'column_amount_negated' => 'Amount (negated column)',
+ 'column_amount-comma-separated' => 'Montante (vírgula como separador decimal)',
+ 'column_bill-id' => 'ID da fatura (correspondente FF3)',
+ 'column_bill-name' => 'Nome da Fatura',
+ 'column_budget-id' => 'ID do Orçamento (correspondente FF3)',
+ 'column_budget-name' => 'Nome do Orçamento',
+ 'column_category-id' => 'ID da Categoria (correspondente FF3)',
+ 'column_category-name' => 'Nome da Categoria',
+ 'column_currency-code' => 'Código da Moeda (ISO 4217)',
+ 'column_foreign-currency-code' => 'Código de moeda estrangeira (ISO 4217)',
+ 'column_currency-id' => 'ID da Moeda (correspondente FF3)',
+ 'column_currency-name' => 'Nome da Moeda (correspondente FF3)',
+ 'column_currency-symbol' => 'Símbolo da Moeda (correspondente FF3)',
+ 'column_date-interest' => 'Data de cálculo de juros',
+ 'column_date-book' => 'Data da reserva de transação',
+ 'column_date-process' => 'Data do processo de transação',
+ 'column_date-transaction' => 'Data',
+ 'column_date-due' => 'Data de vencimento da transação',
+ 'column_date-payment' => 'Data de pagamento da transação',
+ 'column_date-invoice' => 'Data da fatura da transação',
+ 'column_description' => 'Descrição',
+ 'column_opposing-iban' => 'Conta contrária (IBAN)',
+ 'column_opposing-bic' => 'Conta contrária (BIC)',
+ 'column_opposing-id' => 'ID da Conta Cotrária (correspondente FF3)',
+ 'column_external-id' => 'ID Externo',
+ 'column_opposing-name' => 'Conta contrária (nome)',
+ 'column_rabo-debit-credit' => 'Indicador de débito/crédito específico do Rabobank',
+ 'column_ing-debit-credit' => 'Indicador de débito/crédito específico do ING',
+ 'column_sepa-ct-id' => 'SEPA identificador end-to-end',
+ 'column_sepa-ct-op' => 'SEPA Identificador de conta de contrária',
+ 'column_sepa-db' => 'SEPA Identificador de Mandato',
+ 'column_sepa-cc' => 'SEPA Código de Compensação',
+ 'column_sepa-ci' => 'SEPA Identificador Credor',
+ 'column_sepa-ep' => 'SEPA Finalidade Externa',
+ 'column_sepa-country' => 'SEPA Código do País',
+ 'column_tags-comma' => 'Tags (separadas por vírgula)',
+ 'column_tags-space' => 'Tags (separadas por espaço)',
+ 'column_account-number' => 'Conta de ativo (número da conta)',
+ 'column_opposing-number' => 'Conta Contrária (número da conta)',
+ 'column_note' => 'Nota(s)',
+ 'column_internal-reference' => 'Referência interna',
];
diff --git a/resources/lang/pt_BR/list.php b/resources/lang/pt_BR/list.php
index 097b7eedb7..95506b9b5c 100644
--- a/resources/lang/pt_BR/list.php
+++ b/resources/lang/pt_BR/list.php
@@ -104,7 +104,7 @@ return [
'sum_transfers' => 'Soma das transferências',
'reconcile' => 'Pago',
'account_on_spectre' => 'Conta (Spectre)',
- 'account_on_ynab' => 'Account (YNAB)',
+ 'account_on_ynab' => 'Conta (YNAB)',
'do_import' => 'Importar desta conta',
'sepa-ct-id' => 'SEPA Identificador end-to-end',
'sepa-ct-op' => 'SEPA Identificador de conta de contrária',
@@ -113,24 +113,24 @@ return [
'sepa-cc' => 'SEPA Código de Compensação',
'sepa-ep' => 'SEPA Finalidade Externa',
'sepa-ci' => 'SEPA Identificador do Credor',
- 'sepa-batch-id' => 'SEPA Batch ID',
- 'external_id' => 'External ID',
+ 'sepa-batch-id' => 'ID de lote SEPA',
+ 'external_id' => 'ID externo',
'account_at_bunq' => 'Loja com bunq',
'file_name' => 'Nome do arquivo',
'file_size' => 'Tamanho do Arquivo',
'file_type' => 'Tipo do arquivo',
'attached_to' => 'Anexado a',
'file_exists' => 'Arquivo já existe',
- 'spectre_bank' => 'Bank',
- 'spectre_last_use' => 'Last login',
+ 'spectre_bank' => 'Banco',
+ 'spectre_last_use' => 'Último login',
'spectre_status' => 'Status',
- 'bunq_payment_id' => 'bunq payment ID',
- 'repetitions' => 'Repetitions',
- 'title' => 'Title',
- 'transaction_s' => 'Transaction(s)',
- 'field' => 'Field',
- 'value' => 'Value',
- 'interest' => 'Interest',
- 'interest_period' => 'interest period',
- 'liability_type' => 'Type of liability',
+ 'bunq_payment_id' => 'ID de pagamento bunq',
+ 'repetitions' => 'Repetições',
+ 'title' => 'Título',
+ 'transaction_s' => 'Transação(s)',
+ 'field' => 'Campo',
+ 'value' => 'Valor',
+ 'interest' => 'Juros',
+ 'interest_period' => 'período de juros',
+ 'liability_type' => 'Tipo de passivo',
];
diff --git a/resources/lang/pt_BR/validation.php b/resources/lang/pt_BR/validation.php
index 4d8605d479..13167eb964 100644
--- a/resources/lang/pt_BR/validation.php
+++ b/resources/lang/pt_BR/validation.php
@@ -24,6 +24,7 @@ declare(strict_types=1);
return [
'iban' => 'Este não é um válido IBAN.',
+ 'zero_or_more' => 'O valor não pode ser negativo.',
'source_equals_destination' => 'The source account equals the destination account.',
'unique_account_number_for_user' => 'Parece que este número de conta já está em uso.',
'unique_iban_for_user' => 'Parece que este IBAN já está em uso.',
diff --git a/resources/lang/ru_RU/firefly.php b/resources/lang/ru_RU/firefly.php
index 88443f3a75..290df54e20 100644
--- a/resources/lang/ru_RU/firefly.php
+++ b/resources/lang/ru_RU/firefly.php
@@ -551,6 +551,8 @@ return [
'email_changed_logout' => 'Пока вы не подтвердите свой адрес электронной почты, вы не сможете войти в систему.',
'login_with_new_email' => 'Теперь вы можете войти с новым адресом электронной почты.',
'login_with_old_email' => 'Теперь вы можете снова войти со своим старым адресом электронной почты.',
+ 'login_provider_local_only' => 'This action is not available when authenticating through ":login_provider".',
+ 'delete_local_info_only' => 'Because you authenticate through ":login_provider", this will only delete local Firefly III information.',
// attachments
'nr_of_attachments' => 'Одно вложение |:count вложений',
@@ -777,6 +779,7 @@ return [
'interest_calc_daily' => 'Per day',
'interest_calc_monthly' => 'Per month',
'interest_calc_yearly' => 'Per year',
+ 'initial_balance_account' => 'Initial balance account of :name',
// categories:
'new_category' => 'Новая категория',
@@ -1021,6 +1024,7 @@ return [
'select_expense_revenue' => 'Выберите счёт расходов или доходов',
'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.',
'sum_in_default_currency' => 'The sum will always be in your default currency.',
+ 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.',
// charts:
'chart' => 'Диаграмма',
diff --git a/resources/lang/ru_RU/form.php b/resources/lang/ru_RU/form.php
index db39b85cf4..b5916a634b 100644
--- a/resources/lang/ru_RU/form.php
+++ b/resources/lang/ru_RU/form.php
@@ -191,6 +191,7 @@ return [
'password_confirmation' => 'Пароль (ещё раз)',
'blocked' => 'Заблокирован?',
'blocked_code' => 'Причина блокировки',
+ 'login_name' => 'Login',
// import
'apply_rules' => 'Применить правила',
@@ -222,6 +223,16 @@ return [
'public_key' => 'Открытый ключ',
'country_code' => 'Код страны',
'provider_code' => 'Банк или поставщик данных',
+ 'fints_url' => 'FinTS API URL',
+ 'fints_port' => 'Port',
+ 'fints_bank_code' => 'Bank code',
+ 'fints_username' => 'Username',
+ 'fints_password' => 'PIN / Password',
+ 'fints_account' => 'FinTS account',
+ 'local_account' => 'Firefly III account',
+ 'from_date' => 'Date from',
+ 'to_date' => 'Date to',
+
'due_date' => 'Срок',
'payment_date' => 'Дата платежа',
diff --git a/resources/lang/ru_RU/import.php b/resources/lang/ru_RU/import.php
index eb5a00c61c..e6022e2b2b 100644
--- a/resources/lang/ru_RU/import.php
+++ b/resources/lang/ru_RU/import.php
@@ -47,6 +47,9 @@ return [
'button_yodlee' => 'Импорт с использованием Yodlee',
'button_quovo' => 'Импорт с использованием Quovo',
'button_ynab' => 'Импорт из \'You Need A Budget\'',
+ 'button_fints' => 'Import using FinTS',
+
+
// global config box (index)
'global_config_title' => 'Глобальные настройки импорта',
'global_config_text' => 'In the future, this box will feature preferences that apply to ALL import providers above.',
@@ -200,112 +203,120 @@ return [
'spectre_extra_key_unit_price' => 'Unit price',
'spectre_extra_key_transactions_count' => 'Transaction count',
+ //job configuration for finTS
+ 'fints_connection_failed' => 'An error occurred while trying to connecting to your bank. Please make sure that all the data you entered is correct. Original error message: :originalError',
+
+ 'job_config_fints_url_help' => 'E.g. https://banking-dkb.s-fints-pt-dkb.de/fints30',
+ 'job_config_fints_username_help' => 'For many banks this is your account number.',
+ 'job_config_fints_port_help' => 'The default port is 443.',
+ 'job_config_fints_account_help' => 'Choose the bank account for which you want to import transactions.',
+ 'job_config_local_account_help' => 'Choose the Firefly III account corresponding to your bank account chosen above.',
// specifics:
- 'specific_ing_name' => 'ING NL',
- 'specific_ing_descr' => 'Create better descriptions in ING exports',
- 'specific_sns_name' => 'SNS / Volksbank NL',
- 'specific_sns_descr' => 'Trim quotes from SNS / Volksbank export files',
- 'specific_abn_name' => 'ABN AMRO NL',
- 'specific_abn_descr' => 'Fixes potential problems with ABN AMRO files',
- 'specific_rabo_name' => 'Rabobank NL',
- 'specific_rabo_descr' => 'Fixes potential problems with Rabobank files',
- 'specific_pres_name' => 'President\'s Choice Financial CA',
- 'specific_pres_descr' => 'Fixes potential problems with PC files',
+ 'specific_ing_name' => 'ING NL',
+ 'specific_ing_descr' => 'Create better descriptions in ING exports',
+ 'specific_sns_name' => 'SNS / Volksbank NL',
+ 'specific_sns_descr' => 'Trim quotes from SNS / Volksbank export files',
+ 'specific_abn_name' => 'ABN AMRO NL',
+ 'specific_abn_descr' => 'Fixes potential problems with ABN AMRO files',
+ 'specific_rabo_name' => 'Rabobank NL',
+ 'specific_rabo_descr' => 'Fixes potential problems with Rabobank files',
+ 'specific_pres_name' => 'President\'s Choice Financial CA',
+ 'specific_pres_descr' => 'Fixes potential problems with PC files',
// job configuration for file provider (stage: roles)
- 'job_config_roles_title' => 'Настройка импорта (3/4). Определите роль каждого столбца',
- 'job_config_roles_text' => 'Each column in your CSV file contains certain data. Please indicate what kind of data the importer should expect. The option to "map" data means that you will link each entry found in the column to a value in your database. An often mapped column is the column that contains the IBAN of the opposing account. That can be easily matched to IBAN\'s present in your database already.',
- 'job_config_roles_submit' => 'Продолжить',
- 'job_config_roles_column_name' => 'Название столбца',
- 'job_config_roles_column_example' => 'Пример данных в столбце',
- 'job_config_roles_column_role' => 'Значение в столбце',
- 'job_config_roles_do_map_value' => 'Сопоставьте эти значения',
- 'job_config_roles_no_example' => 'Нет доступных данных для примера',
- 'job_config_roles_fa_warning' => 'Если вы пометите этот столбец, как содержащий сумму в иностранной валюте, вы также должны указать столбец, который указывает, какая именно это валюта.',
- 'job_config_roles_rwarning' => 'Пожалуйста, отметьте хотя бы один столбец как столбец с суммой. Также целесообразно выбрать столбец для описания, даты и спонсорского счёта.',
- 'job_config_roles_colum_count' => 'Столбец',
+ 'job_config_roles_title' => 'Настройка импорта (3/4). Определите роль каждого столбца',
+ 'job_config_roles_text' => 'Each column in your CSV file contains certain data. Please indicate what kind of data the importer should expect. The option to "map" data means that you will link each entry found in the column to a value in your database. An often mapped column is the column that contains the IBAN of the opposing account. That can be easily matched to IBAN\'s present in your database already.',
+ 'job_config_roles_submit' => 'Продолжить',
+ 'job_config_roles_column_name' => 'Название столбца',
+ 'job_config_roles_column_example' => 'Пример данных в столбце',
+ 'job_config_roles_column_role' => 'Значение в столбце',
+ 'job_config_roles_do_map_value' => 'Сопоставьте эти значения',
+ 'job_config_roles_no_example' => 'Нет доступных данных для примера',
+ 'job_config_roles_fa_warning' => 'Если вы пометите этот столбец, как содержащий сумму в иностранной валюте, вы также должны указать столбец, который указывает, какая именно это валюта.',
+ 'job_config_roles_rwarning' => 'Пожалуйста, отметьте хотя бы один столбец как столбец с суммой. Также целесообразно выбрать столбец для описания, даты и спонсорского счёта.',
+ 'job_config_roles_colum_count' => 'Столбец',
// job config for the file provider (stage: mapping):
- 'job_config_map_title' => 'Настройки импорта (4/4) - Сопоставление данных импорта с данными Firefly III',
- 'job_config_map_text' => 'В следующих таблицах значение слева отображает информацию, найденную в загруженном файле. Ваша задача - сопоставить это значение (если это возможно) со значением, уже имеющимся в вашей базе данных. Firefly будет придерживаться этого сопоставления. Если для сопоставления нет значения или вы не хотите отображать определённое значение, ничего не выбирайте.',
- 'job_config_map_nothing' => 'В вашем файле нет данных, которые можно сопоставить с существующими значениями. Нажмите «Начать импорт», чтобы продолжить.',
- 'job_config_field_value' => 'Значение поля',
- 'job_config_field_mapped' => 'Сопоставлено с',
- 'map_do_not_map' => '(не сопоставлено)',
- 'job_config_map_submit' => 'Начать импорт',
+ 'job_config_map_title' => 'Настройки импорта (4/4) - Сопоставление данных импорта с данными Firefly III',
+ 'job_config_map_text' => 'В следующих таблицах значение слева отображает информацию, найденную в загруженном файле. Ваша задача - сопоставить это значение (если это возможно) со значением, уже имеющимся в вашей базе данных. Firefly будет придерживаться этого сопоставления. Если для сопоставления нет значения или вы не хотите отображать определённое значение, ничего не выбирайте.',
+ 'job_config_map_nothing' => 'В вашем файле нет данных, которые можно сопоставить с существующими значениями. Нажмите «Начать импорт», чтобы продолжить.',
+ 'job_config_field_value' => 'Значение поля',
+ 'job_config_field_mapped' => 'Сопоставлено с',
+ 'map_do_not_map' => '(не сопоставлено)',
+ 'job_config_map_submit' => 'Начать импорт',
// import status page:
- 'import_with_key' => 'Импорт с ключем \':key\'',
- 'status_wait_title' => 'Пожалуйста, подождите...',
- 'status_wait_text' => 'Это сообщение исчезнет через мгновение.',
- 'status_running_title' => 'Выполняется импорт',
- 'status_job_running' => 'Пожалуйста, подождите, идёт импорт...',
- 'status_job_storing' => 'Пожалуйста, подождите, идет сохранение данных...',
- 'status_job_rules' => 'Пожалуйста, подождите, выполняются правила...',
- 'status_fatal_title' => 'Фатальная ошибка',
- 'status_fatal_text' => 'The import has suffered from an error it could not recover from. Apologies!',
- 'status_fatal_more' => 'This (possibly very cryptic) error message is complemented by log files, which you can find on your hard drive, or in the Docker container where you run Firefly III from.',
- 'status_finished_title' => 'Импорт завершён',
- 'status_finished_text' => 'Импорт завершен!',
- 'finished_with_errors' => 'There were some errors during the import. Please review them carefully.',
- 'unknown_import_result' => 'Неизвестный результат импорта',
- 'result_no_transactions' => 'No transactions have been imported. Perhaps they were all duplicates is simply no transactions where present to be imported. Perhaps the log files can tell you what happened. If you import data regularly, this is normal.',
- 'result_one_transaction' => 'Exactly one transaction has been imported. It is stored under tag :tag where you can inspect it further.',
- 'result_many_transactions' => 'Firefly III has imported :count transactions. They are stored under tag :tag where you can inspect them further.',
+ 'import_with_key' => 'Импорт с ключем \':key\'',
+ 'status_wait_title' => 'Пожалуйста, подождите...',
+ 'status_wait_text' => 'Это сообщение исчезнет через мгновение.',
+ 'status_running_title' => 'Выполняется импорт',
+ 'status_job_running' => 'Пожалуйста, подождите, идёт импорт...',
+ 'status_job_storing' => 'Пожалуйста, подождите, идет сохранение данных...',
+ 'status_job_rules' => 'Пожалуйста, подождите, выполняются правила...',
+ 'status_fatal_title' => 'Фатальная ошибка',
+ 'status_fatal_text' => 'The import has suffered from an error it could not recover from. Apologies!',
+ 'status_fatal_more' => 'This (possibly very cryptic) error message is complemented by log files, which you can find on your hard drive, or in the Docker container where you run Firefly III from.',
+ 'status_finished_title' => 'Импорт завершён',
+ 'status_finished_text' => 'Импорт завершен!',
+ 'finished_with_errors' => 'There were some errors during the import. Please review them carefully.',
+ 'unknown_import_result' => 'Неизвестный результат импорта',
+ 'result_no_transactions' => 'No transactions have been imported. Perhaps they were all duplicates is simply no transactions where present to be imported. Perhaps the log files can tell you what happened. If you import data regularly, this is normal.',
+ 'result_one_transaction' => 'Exactly one transaction has been imported. It is stored under tag :tag where you can inspect it further.',
+ 'result_many_transactions' => 'Firefly III has imported :count transactions. They are stored under tag :tag where you can inspect them further.',
// general errors and warnings:
- 'bad_job_status' => 'To access this page, your import job cannot have status ":status".',
+ 'bad_job_status' => 'To access this page, your import job cannot have status ":status".',
// column roles for CSV import:
- 'column__ignore' => '(игнорировать этот столбец)',
- 'column_account-iban' => 'Счет актива (IBAN)',
- 'column_account-id' => 'ID основного счёта (соответствующий FF3)',
- 'column_account-name' => 'Основной счёт (название)',
- 'column_account-bic' => 'Asset account (BIC)',
- 'column_amount' => 'Сумма',
- 'column_amount_foreign' => 'Сумма (в иностранной валюте)',
- 'column_amount_debit' => 'Сумма (столбец с дебетом)',
- 'column_amount_credit' => 'Сумма (столбец с кредитом)',
- 'column_amount_negated' => 'Amount (negated column)',
- 'column_amount-comma-separated' => 'Сумма (запятая как десятичный разделитель)',
- 'column_bill-id' => 'ID счёта на оплату (соответствующий FF3)',
- 'column_bill-name' => 'Название счета',
- 'column_budget-id' => 'ID бюджета (соответствующий FF3)',
- 'column_budget-name' => 'Название бюджета',
- 'column_category-id' => 'ID категории (соответствующий FF3)',
- 'column_category-name' => 'Название категории',
- 'column_currency-code' => 'Код валюты (ISO 4217)',
- 'column_foreign-currency-code' => 'Код иностранной валюты (ISO 4217)',
- 'column_currency-id' => 'ID валюты (соответствующий FF3)',
- 'column_currency-name' => 'Название валюты (соответствующее FF3)',
- 'column_currency-symbol' => 'Символ валюты (соответствующий FF3)',
- 'column_date-interest' => 'Дата расчета процентов',
- 'column_date-book' => 'Дата записи транзакции',
- 'column_date-process' => 'Дата обработки транзакции',
- 'column_date-transaction' => 'Дата',
- 'column_date-due' => 'Дата транзакции',
- 'column_date-payment' => 'Дата оплаты',
- 'column_date-invoice' => 'Дата выставления счёта',
- 'column_description' => 'Описание',
- 'column_opposing-iban' => 'Спонсорский счёт (IBAN)',
- 'column_opposing-bic' => 'Спонсорский счёт (BIC)',
- 'column_opposing-id' => 'ID спонсорского счёта (соответствующий FF3)',
- 'column_external-id' => 'Внешний ID',
- 'column_opposing-name' => 'Спонсорский счёт (название)',
- 'column_rabo-debit-credit' => 'Индикатор дебита/кредита, специфичный для Rabobank',
- 'column_ing-debit-credit' => 'Индикатор дебита/кредита, специфичный для ING',
- 'column_sepa-ct-id' => 'Идентификатор SEPA end-to-end',
- 'column_sepa-ct-op' => 'Идентификатор учетной записи SEPA',
- 'column_sepa-db' => 'Идентификатор SEPA Mandate',
- 'column_sepa-cc' => 'Код очистки SEPA',
- 'column_sepa-ci' => 'Идентификатор кредитора SEPA',
- 'column_sepa-ep' => 'Внешняя цель SEPA',
- 'column_sepa-country' => 'Код страны SEPA',
- 'column_tags-comma' => 'Метки (разделены запятыми)',
- 'column_tags-space' => 'Метки (разделены пробелами)',
- 'column_account-number' => 'Основной счёт (номер счёта)',
- 'column_opposing-number' => 'Спонсорский счёт (номер счёта)',
- 'column_note' => 'Примечания',
- 'column_internal-reference' => 'Внутренняя ссылка',
+ 'column__ignore' => '(игнорировать этот столбец)',
+ 'column_account-iban' => 'Счет актива (IBAN)',
+ 'column_account-id' => 'ID основного счёта (соответствующий FF3)',
+ 'column_account-name' => 'Основной счёт (название)',
+ 'column_account-bic' => 'Asset account (BIC)',
+ 'column_amount' => 'Сумма',
+ 'column_amount_foreign' => 'Сумма (в иностранной валюте)',
+ 'column_amount_debit' => 'Сумма (столбец с дебетом)',
+ 'column_amount_credit' => 'Сумма (столбец с кредитом)',
+ 'column_amount_negated' => 'Amount (negated column)',
+ 'column_amount-comma-separated' => 'Сумма (запятая как десятичный разделитель)',
+ 'column_bill-id' => 'ID счёта на оплату (соответствующий FF3)',
+ 'column_bill-name' => 'Название счета',
+ 'column_budget-id' => 'ID бюджета (соответствующий FF3)',
+ 'column_budget-name' => 'Название бюджета',
+ 'column_category-id' => 'ID категории (соответствующий FF3)',
+ 'column_category-name' => 'Название категории',
+ 'column_currency-code' => 'Код валюты (ISO 4217)',
+ 'column_foreign-currency-code' => 'Код иностранной валюты (ISO 4217)',
+ 'column_currency-id' => 'ID валюты (соответствующий FF3)',
+ 'column_currency-name' => 'Название валюты (соответствующее FF3)',
+ 'column_currency-symbol' => 'Символ валюты (соответствующий FF3)',
+ 'column_date-interest' => 'Дата расчета процентов',
+ 'column_date-book' => 'Дата записи транзакции',
+ 'column_date-process' => 'Дата обработки транзакции',
+ 'column_date-transaction' => 'Дата',
+ 'column_date-due' => 'Дата транзакции',
+ 'column_date-payment' => 'Дата оплаты',
+ 'column_date-invoice' => 'Дата выставления счёта',
+ 'column_description' => 'Описание',
+ 'column_opposing-iban' => 'Спонсорский счёт (IBAN)',
+ 'column_opposing-bic' => 'Спонсорский счёт (BIC)',
+ 'column_opposing-id' => 'ID спонсорского счёта (соответствующий FF3)',
+ 'column_external-id' => 'Внешний ID',
+ 'column_opposing-name' => 'Спонсорский счёт (название)',
+ 'column_rabo-debit-credit' => 'Индикатор дебита/кредита, специфичный для Rabobank',
+ 'column_ing-debit-credit' => 'Индикатор дебита/кредита, специфичный для ING',
+ 'column_sepa-ct-id' => 'Идентификатор SEPA end-to-end',
+ 'column_sepa-ct-op' => 'Идентификатор учетной записи SEPA',
+ 'column_sepa-db' => 'Идентификатор SEPA Mandate',
+ 'column_sepa-cc' => 'Код очистки SEPA',
+ 'column_sepa-ci' => 'Идентификатор кредитора SEPA',
+ 'column_sepa-ep' => 'Внешняя цель SEPA',
+ 'column_sepa-country' => 'Код страны SEPA',
+ 'column_tags-comma' => 'Метки (разделены запятыми)',
+ 'column_tags-space' => 'Метки (разделены пробелами)',
+ 'column_account-number' => 'Основной счёт (номер счёта)',
+ 'column_opposing-number' => 'Спонсорский счёт (номер счёта)',
+ 'column_note' => 'Примечания',
+ 'column_internal-reference' => 'Внутренняя ссылка',
];
diff --git a/resources/lang/ru_RU/validation.php b/resources/lang/ru_RU/validation.php
index d48bad2675..d0ab0006b0 100644
--- a/resources/lang/ru_RU/validation.php
+++ b/resources/lang/ru_RU/validation.php
@@ -24,6 +24,7 @@ declare(strict_types=1);
return [
'iban' => 'Это некорректный IBAN.',
+ 'zero_or_more' => 'The value cannot be negative.',
'source_equals_destination' => 'The source account equals the destination account.',
'unique_account_number_for_user' => 'Этот номер счёта уже используется.',
'unique_iban_for_user' => 'Этот IBAN уже используется.',
diff --git a/resources/lang/tr_TR/firefly.php b/resources/lang/tr_TR/firefly.php
index 1072338688..6aed53cb89 100644
--- a/resources/lang/tr_TR/firefly.php
+++ b/resources/lang/tr_TR/firefly.php
@@ -554,6 +554,8 @@ işlemlerin kontrol edildiğini lütfen unutmayın.',
'email_changed_logout' => 'E-posta adresinizi doğrulayana kadar giriş yapamazsınız.',
'login_with_new_email' => 'Artık yeni e-posta adresinizle giriş yapabilirsiniz.',
'login_with_old_email' => 'Artık eski e-posta adresinizle yeniden giriş yapabilirsiniz.',
+ 'login_provider_local_only' => 'This action is not available when authenticating through ":login_provider".',
+ 'delete_local_info_only' => 'Because you authenticate through ":login_provider", this will only delete local Firefly III information.',
// attachments
'nr_of_attachments' => 'Bir eklenti |:count eklenti',
@@ -780,6 +782,7 @@ işlemlerin kontrol edildiğini lütfen unutmayın.',
'interest_calc_daily' => 'Per day',
'interest_calc_monthly' => 'Per month',
'interest_calc_yearly' => 'Per year',
+ 'initial_balance_account' => 'Initial balance account of :name',
// categories:
'new_category' => 'Yeni Kategori',
@@ -1024,6 +1027,7 @@ işlemlerin kontrol edildiğini lütfen unutmayın.',
'select_expense_revenue' => 'Harcama / gelir hesabı seçin',
'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.',
'sum_in_default_currency' => 'The sum will always be in your default currency.',
+ 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.',
// charts:
'chart' => 'Grafik',
diff --git a/resources/lang/tr_TR/form.php b/resources/lang/tr_TR/form.php
index 5726fd8b3d..abadc143e1 100644
--- a/resources/lang/tr_TR/form.php
+++ b/resources/lang/tr_TR/form.php
@@ -35,16 +35,16 @@ return [
'amount_min' => 'Minimum tutar',
'amount_max' => 'Minimum tutar',
'match' => 'Eşleşti',
- 'strict' => 'Strict mode',
+ 'strict' => 'Sıkı mod',
'repeat_freq' => 'Tekrarlar',
'journal_currency_id' => 'Para birimi',
'currency_id' => 'Para birimi',
- 'transaction_currency_id' => 'Currency',
- 'external_ip' => 'Your server\'s external IP',
+ 'transaction_currency_id' => 'Para birimi',
+ 'external_ip' => 'Sunucunuzun dış IP adresi',
'attachments' => 'Ekler',
'journal_amount' => 'Tutar',
- 'journal_source_name' => 'Revenue account (source)',
- 'journal_source_id' => 'Asset account (source)',
+ 'journal_source_name' => 'Gelir hesabı (kaynak)',
+ 'journal_source_id' => 'Varlık Hesabı (kaynak)',
'BIC' => 'BIC',
'verify_password' => 'Parola güvenliğini doğrula',
'source_account' => 'Kaynak hesap',
@@ -191,6 +191,7 @@ return [
'password_confirmation' => 'Şifre (Tekrar)',
'blocked' => 'Engellendi mi?',
'blocked_code' => 'Blok nedeni',
+ 'login_name' => 'Login',
// import
'apply_rules' => 'Apply rules',
@@ -222,6 +223,16 @@ return [
'public_key' => 'Genel anahtar',
'country_code' => 'Ülke kodu',
'provider_code' => 'Banka ya da veri sağlayıcı',
+ 'fints_url' => 'FinTS API URL',
+ 'fints_port' => 'Port',
+ 'fints_bank_code' => 'Bank code',
+ 'fints_username' => 'Username',
+ 'fints_password' => 'PIN / Password',
+ 'fints_account' => 'FinTS account',
+ 'local_account' => 'Firefly III account',
+ 'from_date' => 'Date from',
+ 'to_date' => 'Date to',
+
'due_date' => 'Bitiş Tarihi',
'payment_date' => 'Ödeme Tarihi',
diff --git a/resources/lang/tr_TR/import.php b/resources/lang/tr_TR/import.php
index 3f29af82f8..c14a29c488 100644
--- a/resources/lang/tr_TR/import.php
+++ b/resources/lang/tr_TR/import.php
@@ -24,29 +24,32 @@ declare(strict_types=1);
return [
// ALL breadcrumbs and subtitles:
- 'index_breadcrumb' => 'Import data into Firefly III',
- 'prerequisites_breadcrumb_fake' => 'Prerequisites for the fake import provider',
- 'prerequisites_breadcrumb_spectre' => 'Prerequisites for Spectre',
- 'prerequisites_breadcrumb_bunq' => 'Prerequisites for bunq',
- 'prerequisites_breadcrumb_ynab' => 'Prerequisites for YNAB',
- 'job_configuration_breadcrumb' => 'Configuration for ":key"',
- 'job_status_breadcrumb' => 'Import status for ":key"',
- 'cannot_create_for_provider' => 'Firefly III cannot create a job for the ":provider"-provider.',
- 'disabled_for_demo_user' => 'disabled in demo',
+ 'index_breadcrumb' => 'Firefly III\'e veri aktarma',
+ 'prerequisites_breadcrumb_fake' => 'Sahte alma sağlayıcı için Önkoşullar',
+ 'prerequisites_breadcrumb_spectre' => 'Spectre için Önkoşullar',
+ 'prerequisites_breadcrumb_bunq' => 'Bunq için Önkoşullar',
+ 'prerequisites_breadcrumb_ynab' => 'YNAB için Önkoşullar',
+ 'job_configuration_breadcrumb' => 'Yapılandırma için ":key"',
+ 'job_status_breadcrumb' => 'Aktarma durumu ":key" için',
+ 'cannot_create_for_provider' => 'Firefly III bir iş için oluşturamıyor ":provider".',
+ 'disabled_for_demo_user' => 'demoda devre dışı',
// index page:
- 'general_index_title' => 'Import a file',
- 'general_index_intro' => 'Welcome to Firefly III\'s import routine. There are a few ways of importing data into Firefly III, displayed here as buttons.',
+ 'general_index_title' => 'Bir Dosyayı içe aktar',
+ 'general_index_intro' => 'Firefly aktarım programına hoş geldiniz. Firefly III içine dosya aktarmanın burada bir kaç yolu var, burada olarak görüntülenmekte.',
// import provider strings (index):
- 'button_fake' => 'Fake an import',
- 'button_file' => 'Import a file',
- 'button_bunq' => 'Import from bunq',
- 'button_spectre' => 'Import using Spectre',
- 'button_plaid' => 'Import using Plaid',
- 'button_yodlee' => 'Import using Yodlee',
- 'button_quovo' => 'Import using Quovo',
+ 'button_fake' => 'Sahte içe aktar',
+ 'button_file' => 'Bir Dosyayı içe aktar',
+ 'button_bunq' => 'Bunq\'dan aktar',
+ 'button_spectre' => 'Spectre kullanarak içe aktar',
+ 'button_plaid' => 'Palid kullanarak içe aktar',
+ 'button_yodlee' => 'Yodlee kullanarak içe aktarma',
+ 'button_quovo' => 'Quovo kullanarak içe aktarma',
'button_ynab' => 'Import from You Need A Budget',
+ 'button_fints' => 'Import using FinTS',
+
+
// global config box (index)
'global_config_title' => 'Global import configuration',
'global_config_text' => 'In the future, this box will feature preferences that apply to ALL import providers above.',
@@ -200,112 +203,120 @@ return [
'spectre_extra_key_unit_price' => 'Unit price',
'spectre_extra_key_transactions_count' => 'Transaction count',
+ //job configuration for finTS
+ 'fints_connection_failed' => 'An error occurred while trying to connecting to your bank. Please make sure that all the data you entered is correct. Original error message: :originalError',
+
+ 'job_config_fints_url_help' => 'E.g. https://banking-dkb.s-fints-pt-dkb.de/fints30',
+ 'job_config_fints_username_help' => 'For many banks this is your account number.',
+ 'job_config_fints_port_help' => 'The default port is 443.',
+ 'job_config_fints_account_help' => 'Choose the bank account for which you want to import transactions.',
+ 'job_config_local_account_help' => 'Choose the Firefly III account corresponding to your bank account chosen above.',
// specifics:
- 'specific_ing_name' => 'ING NL',
- 'specific_ing_descr' => 'Create better descriptions in ING exports',
- 'specific_sns_name' => 'SNS / Volksbank NL',
- 'specific_sns_descr' => 'Trim quotes from SNS / Volksbank export files',
- 'specific_abn_name' => 'ABN AMRO NL',
- 'specific_abn_descr' => 'Fixes potential problems with ABN AMRO files',
- 'specific_rabo_name' => 'Rabobank NL',
- 'specific_rabo_descr' => 'Fixes potential problems with Rabobank files',
- 'specific_pres_name' => 'President\'s Choice Financial CA',
- 'specific_pres_descr' => 'Fixes potential problems with PC files',
+ 'specific_ing_name' => 'ING NL',
+ 'specific_ing_descr' => 'Create better descriptions in ING exports',
+ 'specific_sns_name' => 'SNS / Volksbank NL',
+ 'specific_sns_descr' => 'Trim quotes from SNS / Volksbank export files',
+ 'specific_abn_name' => 'ABN AMRO NL',
+ 'specific_abn_descr' => 'Fixes potential problems with ABN AMRO files',
+ 'specific_rabo_name' => 'Rabobank NL',
+ 'specific_rabo_descr' => 'Fixes potential problems with Rabobank files',
+ 'specific_pres_name' => 'President\'s Choice Financial CA',
+ 'specific_pres_descr' => 'Fixes potential problems with PC files',
// job configuration for file provider (stage: roles)
- 'job_config_roles_title' => 'Import setup (3/4) - Define each column\'s role',
- 'job_config_roles_text' => 'Each column in your CSV file contains certain data. Please indicate what kind of data the importer should expect. The option to "map" data means that you will link each entry found in the column to a value in your database. An often mapped column is the column that contains the IBAN of the opposing account. That can be easily matched to IBAN\'s present in your database already.',
- 'job_config_roles_submit' => 'Continue',
- 'job_config_roles_column_name' => 'Name of column',
- 'job_config_roles_column_example' => 'Column example data',
- 'job_config_roles_column_role' => 'Column data meaning',
- 'job_config_roles_do_map_value' => 'Map these values',
- 'job_config_roles_no_example' => 'No example data available',
- 'job_config_roles_fa_warning' => 'If you mark a column as containing an amount in a foreign currency, you must also set the column that contains which currency it is.',
- 'job_config_roles_rwarning' => 'At the very least, mark one column as the amount-column. It is advisable to also select a column for the description, date and the opposing account.',
- 'job_config_roles_colum_count' => 'Column',
+ 'job_config_roles_title' => 'Import setup (3/4) - Define each column\'s role',
+ 'job_config_roles_text' => 'Each column in your CSV file contains certain data. Please indicate what kind of data the importer should expect. The option to "map" data means that you will link each entry found in the column to a value in your database. An often mapped column is the column that contains the IBAN of the opposing account. That can be easily matched to IBAN\'s present in your database already.',
+ 'job_config_roles_submit' => 'Continue',
+ 'job_config_roles_column_name' => 'Name of column',
+ 'job_config_roles_column_example' => 'Column example data',
+ 'job_config_roles_column_role' => 'Column data meaning',
+ 'job_config_roles_do_map_value' => 'Map these values',
+ 'job_config_roles_no_example' => 'No example data available',
+ 'job_config_roles_fa_warning' => 'If you mark a column as containing an amount in a foreign currency, you must also set the column that contains which currency it is.',
+ 'job_config_roles_rwarning' => 'At the very least, mark one column as the amount-column. It is advisable to also select a column for the description, date and the opposing account.',
+ 'job_config_roles_colum_count' => 'Column',
// job config for the file provider (stage: mapping):
- 'job_config_map_title' => 'Import setup (4/4) - Connect import data to Firefly III data',
- 'job_config_map_text' => 'In the following tables, the left value shows you information found in your uploaded file. It is your task to map this value, if possible, to a value already present in your database. Firefly will stick to this mapping. If there is no value to map to, or you do not wish to map the specific value, select nothing.',
- 'job_config_map_nothing' => 'There is no data present in your file that you can map to existing values. Please press "Start the import" to continue.',
- 'job_config_field_value' => 'Field value',
- 'job_config_field_mapped' => 'Mapped to',
- 'map_do_not_map' => '(eşleştirme)',
- 'job_config_map_submit' => 'Start the import',
+ 'job_config_map_title' => 'Import setup (4/4) - Connect import data to Firefly III data',
+ 'job_config_map_text' => 'In the following tables, the left value shows you information found in your uploaded file. It is your task to map this value, if possible, to a value already present in your database. Firefly will stick to this mapping. If there is no value to map to, or you do not wish to map the specific value, select nothing.',
+ 'job_config_map_nothing' => 'There is no data present in your file that you can map to existing values. Please press "Start the import" to continue.',
+ 'job_config_field_value' => 'Field value',
+ 'job_config_field_mapped' => 'Mapped to',
+ 'map_do_not_map' => '(eşleştirme)',
+ 'job_config_map_submit' => 'Start the import',
// import status page:
- 'import_with_key' => '\':key\' ile içe aktarın',
- 'status_wait_title' => 'Lütfen bekleyin...',
- 'status_wait_text' => 'Bu kutu bir dakika içinde kaybolacak.',
- 'status_running_title' => 'İçe aktarma işlemi sürüyor',
- 'status_job_running' => 'Please wait, running the import...',
- 'status_job_storing' => 'Please wait, storing data...',
- 'status_job_rules' => 'Please wait, running rules...',
- 'status_fatal_title' => 'Fatal error',
- 'status_fatal_text' => 'The import has suffered from an error it could not recover from. Apologies!',
- 'status_fatal_more' => 'This (possibly very cryptic) error message is complemented by log files, which you can find on your hard drive, or in the Docker container where you run Firefly III from.',
- 'status_finished_title' => 'Import finished',
- 'status_finished_text' => 'The import has finished.',
- 'finished_with_errors' => 'There were some errors during the import. Please review them carefully.',
- 'unknown_import_result' => 'Unknown import result',
- 'result_no_transactions' => 'No transactions have been imported. Perhaps they were all duplicates is simply no transactions where present to be imported. Perhaps the log files can tell you what happened. If you import data regularly, this is normal.',
- 'result_one_transaction' => 'Exactly one transaction has been imported. It is stored under tag :tag where you can inspect it further.',
- 'result_many_transactions' => 'Firefly III has imported :count transactions. They are stored under tag :tag where you can inspect them further.',
+ 'import_with_key' => '\':key\' ile içe aktarın',
+ 'status_wait_title' => 'Lütfen bekleyin...',
+ 'status_wait_text' => 'Bu kutu bir dakika içinde kaybolacak.',
+ 'status_running_title' => 'İçe aktarma işlemi sürüyor',
+ 'status_job_running' => 'Please wait, running the import...',
+ 'status_job_storing' => 'Please wait, storing data...',
+ 'status_job_rules' => 'Please wait, running rules...',
+ 'status_fatal_title' => 'Fatal error',
+ 'status_fatal_text' => 'The import has suffered from an error it could not recover from. Apologies!',
+ 'status_fatal_more' => 'This (possibly very cryptic) error message is complemented by log files, which you can find on your hard drive, or in the Docker container where you run Firefly III from.',
+ 'status_finished_title' => 'Import finished',
+ 'status_finished_text' => 'The import has finished.',
+ 'finished_with_errors' => 'There were some errors during the import. Please review them carefully.',
+ 'unknown_import_result' => 'Unknown import result',
+ 'result_no_transactions' => 'No transactions have been imported. Perhaps they were all duplicates is simply no transactions where present to be imported. Perhaps the log files can tell you what happened. If you import data regularly, this is normal.',
+ 'result_one_transaction' => 'Exactly one transaction has been imported. It is stored under tag :tag where you can inspect it further.',
+ 'result_many_transactions' => 'Firefly III has imported :count transactions. They are stored under tag :tag where you can inspect them further.',
// general errors and warnings:
- 'bad_job_status' => 'To access this page, your import job cannot have status ":status".',
+ 'bad_job_status' => 'To access this page, your import job cannot have status ":status".',
// column roles for CSV import:
- 'column__ignore' => '(bu sütünu yok say)',
- 'column_account-iban' => 'Öğe hesabı (IBAN)',
- 'column_account-id' => 'Asset account ID (matching FF3)',
- 'column_account-name' => 'Varlık hesabı (isim)',
- 'column_account-bic' => 'Asset account (BIC)',
- 'column_amount' => 'Tutar',
- 'column_amount_foreign' => 'Amount (in foreign currency)',
- 'column_amount_debit' => 'Miktar (borç sütunu)',
- 'column_amount_credit' => 'Miktar (kredi sütunu)',
- 'column_amount_negated' => 'Amount (negated column)',
- 'column_amount-comma-separated' => 'Miktar (virgül ondalık ayırıcı olarak)',
- 'column_bill-id' => 'Bill ID (matching FF3)',
- 'column_bill-name' => 'Fatura adı',
- 'column_budget-id' => 'Budget ID (matching FF3)',
- 'column_budget-name' => 'Bütçe adı',
- 'column_category-id' => 'Category ID (matching FF3)',
- 'column_category-name' => 'Kategori adı',
- 'column_currency-code' => 'Para birimi kodu (ISO 4217)',
- 'column_foreign-currency-code' => 'Foreign currency code (ISO 4217)',
- 'column_currency-id' => 'Currency ID (matching FF3)',
- 'column_currency-name' => 'Currency name (matching FF3)',
- 'column_currency-symbol' => 'Currency symbol (matching FF3)',
- 'column_date-interest' => 'Faiz hesaplama tarihi',
- 'column_date-book' => 'İşlem rezervasyon tarihi',
- 'column_date-process' => 'İşlem tarihi',
- 'column_date-transaction' => 'Tarih',
- 'column_date-due' => 'Transaction due date',
- 'column_date-payment' => 'Transaction payment date',
- 'column_date-invoice' => 'Transaction invoice date',
- 'column_description' => 'Açıklama',
- 'column_opposing-iban' => 'Karşı hesap (IBAN)',
- 'column_opposing-bic' => 'Opposing account (BIC)',
- 'column_opposing-id' => 'Opposing account ID (matching FF3)',
- 'column_external-id' => 'Harici Kimlik',
- 'column_opposing-name' => 'Karşı hesap (isim)',
- 'column_rabo-debit-credit' => 'Rabobank\'a özel borç / kredi göstergesi',
- 'column_ing-debit-credit' => 'ING\'ye özel borç/kredi göstergesi',
- 'column_sepa-ct-id' => 'SEPA end-to-end Identifier',
- 'column_sepa-ct-op' => 'SEPA Opposing Account Identifier',
- 'column_sepa-db' => 'SEPA Mandate Identifier',
- 'column_sepa-cc' => 'SEPA Clearing Code',
- 'column_sepa-ci' => 'SEPA Creditor Identifier',
- 'column_sepa-ep' => 'SEPA External Purpose',
- 'column_sepa-country' => 'SEPA Country Code',
- 'column_tags-comma' => 'Etiketler (virgülle ayrılmış)',
- 'column_tags-space' => 'Etiketler (boşlukla ayrılmış)',
- 'column_account-number' => 'Varlık hesabı (hesap numarası)',
- 'column_opposing-number' => 'Karşı hesap (hesap numarası)',
- 'column_note' => 'Not(lar)',
- 'column_internal-reference' => 'Internal reference',
+ 'column__ignore' => '(bu sütünu yok say)',
+ 'column_account-iban' => 'Öğe hesabı (IBAN)',
+ 'column_account-id' => 'Asset account ID (matching FF3)',
+ 'column_account-name' => 'Varlık hesabı (isim)',
+ 'column_account-bic' => 'Asset account (BIC)',
+ 'column_amount' => 'Tutar',
+ 'column_amount_foreign' => 'Amount (in foreign currency)',
+ 'column_amount_debit' => 'Miktar (borç sütunu)',
+ 'column_amount_credit' => 'Miktar (kredi sütunu)',
+ 'column_amount_negated' => 'Amount (negated column)',
+ 'column_amount-comma-separated' => 'Miktar (virgül ondalık ayırıcı olarak)',
+ 'column_bill-id' => 'Bill ID (matching FF3)',
+ 'column_bill-name' => 'Fatura adı',
+ 'column_budget-id' => 'Budget ID (matching FF3)',
+ 'column_budget-name' => 'Bütçe adı',
+ 'column_category-id' => 'Category ID (matching FF3)',
+ 'column_category-name' => 'Kategori adı',
+ 'column_currency-code' => 'Para birimi kodu (ISO 4217)',
+ 'column_foreign-currency-code' => 'Foreign currency code (ISO 4217)',
+ 'column_currency-id' => 'Currency ID (matching FF3)',
+ 'column_currency-name' => 'Currency name (matching FF3)',
+ 'column_currency-symbol' => 'Currency symbol (matching FF3)',
+ 'column_date-interest' => 'Faiz hesaplama tarihi',
+ 'column_date-book' => 'İşlem rezervasyon tarihi',
+ 'column_date-process' => 'İşlem tarihi',
+ 'column_date-transaction' => 'Tarih',
+ 'column_date-due' => 'Transaction due date',
+ 'column_date-payment' => 'Transaction payment date',
+ 'column_date-invoice' => 'Transaction invoice date',
+ 'column_description' => 'Açıklama',
+ 'column_opposing-iban' => 'Karşı hesap (IBAN)',
+ 'column_opposing-bic' => 'Opposing account (BIC)',
+ 'column_opposing-id' => 'Opposing account ID (matching FF3)',
+ 'column_external-id' => 'Harici Kimlik',
+ 'column_opposing-name' => 'Karşı hesap (isim)',
+ 'column_rabo-debit-credit' => 'Rabobank\'a özel borç / kredi göstergesi',
+ 'column_ing-debit-credit' => 'ING\'ye özel borç/kredi göstergesi',
+ 'column_sepa-ct-id' => 'SEPA end-to-end Identifier',
+ 'column_sepa-ct-op' => 'SEPA Opposing Account Identifier',
+ 'column_sepa-db' => 'SEPA Mandate Identifier',
+ 'column_sepa-cc' => 'SEPA Clearing Code',
+ 'column_sepa-ci' => 'SEPA Creditor Identifier',
+ 'column_sepa-ep' => 'SEPA External Purpose',
+ 'column_sepa-country' => 'SEPA Country Code',
+ 'column_tags-comma' => 'Etiketler (virgülle ayrılmış)',
+ 'column_tags-space' => 'Etiketler (boşlukla ayrılmış)',
+ 'column_account-number' => 'Varlık hesabı (hesap numarası)',
+ 'column_opposing-number' => 'Karşı hesap (hesap numarası)',
+ 'column_note' => 'Not(lar)',
+ 'column_internal-reference' => 'Internal reference',
];
diff --git a/resources/lang/tr_TR/intro.php b/resources/lang/tr_TR/intro.php
index 6e4291b465..4e1124df74 100644
--- a/resources/lang/tr_TR/intro.php
+++ b/resources/lang/tr_TR/intro.php
@@ -33,13 +33,13 @@ return [
// create account:
'accounts_create_iban' => 'Hesaplarınıza geçerli IBAN girin. Bu, ileride veri aktarma işlemini kolaylaştırabilir.',
- 'accounts_create_asset_opening_balance' => 'Assets accounts may have an "opening balance", indicating the start of this account\'s history in Firefly III.',
+ 'accounts_create_asset_opening_balance' => 'Aktif hesapların, Firefly\'da bu hesap geçmişinin başlangıcını gösteren bir "açılış bakiyesi" olabilir.',
'accounts_create_asset_currency' => 'Firefly III, birden fazla para birimini destekliyor. Varlık hesaplarının bir ana para birimi var, burada ayarlamanız gerekir.',
'accounts_create_asset_virtual' => 'Bazen hesabınıza sanal bir bakiye sağlamanıza yardımcı olabilir: ek bir miktar her zaman gerçek bakiyeye eklenir veya gerçek bakiyeden çıkarılır.',
// budgets index
'budgets_index_intro' => 'Bütçeler, finansmanınızı yönetmek ve Firefly III\'nin temel işlevlerinden birini oluşturmak için kullanılır.',
- 'budgets_index_set_budget' => 'Set your total budget for every period so Firefly III can tell you if you have budgeted all available money.',
+ 'budgets_index_set_budget' => 'Toplam bütçenizi her dönem için belirleyin, böylelikle Firefly size mevcut tüm parayı bütçelendirdiğinizde söyleyebilir.',
'budgets_index_see_expenses_bar' => 'Para harcamak yavaşça bu çubuğu dolduracaktır.',
'budgets_index_navigate_periods' => 'Bütçeleri önceden kolayca ayarlamak için dönemleri gezinin.',
'budgets_index_new_budget' => 'Uygun gördüğünüz yeni bütçeler oluşturun.',
diff --git a/resources/lang/tr_TR/validation.php b/resources/lang/tr_TR/validation.php
index 75fceb1296..9b946b4c5c 100644
--- a/resources/lang/tr_TR/validation.php
+++ b/resources/lang/tr_TR/validation.php
@@ -24,7 +24,8 @@ declare(strict_types=1);
return [
'iban' => 'Bu geçerli bir IBAN değil.',
- 'source_equals_destination' => 'The source account equals the destination account.',
+ 'zero_or_more' => 'The value cannot be negative.',
+ 'source_equals_destination' => 'Kaynak hesabın hedef hesap eşittir.',
'unique_account_number_for_user' => 'Bu hesap numarası zaten kullanılmaktadır.',
'unique_iban_for_user' => 'Bu IBAN numarası zaten kullanılmaktadır.',
'deleted_user' => 'Güvenlik kısıtlamaları nedeniyle, bu e-posta adresini kullanarak kayıt yapamazsınız.',
@@ -34,24 +35,24 @@ return [
'file_attached' => '":name" dosyası başarıyla yüklendi.',
'must_exist' => 'ID alanı :attribute veritabanın içinde yok.',
'all_accounts_equal' => 'Bu alandaki tüm hesapları eşit olmalıdır.',
- 'invalid_selection' => 'Your selection is invalid.',
+ 'invalid_selection' => 'Seçiminiz geçersiz.',
'belongs_user' => 'Bu değer bu alan için geçerli değil.',
'at_least_one_transaction' => 'En az bir işlem gerekir.',
- 'at_least_one_repetition' => 'Need at least one repetition.',
+ 'at_least_one_repetition' => 'En az bir tekrarı gerekir.',
'require_repeat_until' => 'Require either a number of repetitions, or an end date (repeat_until). Not both.',
'require_currency_info' => 'Bu alanın içeriği para birimi bilgileri geçersiz.',
'equal_description' => 'İşlem açıklaması genel açıklama eşit değildir.',
'file_invalid_mime' => '":name" dosyası ":mime" türünde olup yeni bir yükleme olarak kabul edilemez.',
'file_too_large' => '":name" dosyası çok büyük.',
- 'belongs_to_user' => 'The value of :attribute is unknown.',
+ 'belongs_to_user' => ':attribute\'nin değeri bilinmiyor',
'accepted' => ':attribute kabul edilmek zorunda.',
'bic' => 'Bu BIC geçerli değilrdir.',
- 'at_least_one_trigger' => 'Rule must have at least one trigger.',
- 'at_least_one_action' => 'Rule must have at least one action.',
+ 'at_least_one_trigger' => 'Kural en az bir tetikleyiciye sahip olması gerekir.',
+ 'at_least_one_action' => 'Kural en az bir eylem olması gerekir.',
'base64' => 'Bu geçerli Base64 olarak kodlanmış veri değildir.',
'model_id_invalid' => 'Verilen kimlik bu model için geçersiz görünüyor.',
- 'more' => ':attribute must be larger than zero.',
- 'less' => ':attribute must be less than 10,000,000',
+ 'more' => ':attribute sıfırdan büyük olmak zorundadır.',
+ 'less' => ':attribute 10.000.000 den daha az olmalıdır',
'active_url' => ':attribute geçerli bir URL değil.',
'after' => ':attribute :date tarihinden sonrası için tarihlendirilmelidir.',
'alpha' => ':attribute sadece harf içerebilir.',
@@ -60,8 +61,8 @@ return [
'array' => ':attribute bir dizi olmalıdır.',
'unique_for_user' => ':attribute\'de zaten bir girdi var.',
'before' => ':attribute :date tarihinden öncesi için tarihlendirilmelidir.',
- 'unique_object_for_user' => 'This name is already in use.',
- 'unique_account_for_user' => 'This account name is already in use.',
+ 'unique_object_for_user' => 'Bu isim zaten kullanılıyor.',
+ 'unique_account_for_user' => 'Bu hesap adı zaten kullanılıyor.',
'between.numeric' => ':attribute :min ve :max arasında olmalıdır.',
'between.file' => ':attribute, :min kilobayt ve :max kilobayt arasında olmalıdır.',
'between.string' => ':attribute :min karakter ve :max karakter olmalıdır.',
@@ -87,15 +88,15 @@ return [
'max.array' => ':attribute :max öğeden daha fazlasına sahip olamaz.',
'mimes' => ':attribute :values türünde bir dosya olmalı.',
'min.numeric' => ':attribute en az :min olmalıdır.',
- 'lte.numeric' => 'The :attribute must be less than or equal :value.',
+ 'lte.numeric' => ':attribute küçük veya eşit olması gerekir :value.',
'min.file' => ':attribute en az :min kilobayt olmalıdır.',
'min.string' => ':attribute en az :min karakter olmalıdır.',
'min.array' => ':attribute en az :min öğe içermelidir.',
'not_in' => 'Seçili :attribute geçersiz.',
'numeric' => ':attribute sayı olmalıdır.',
- 'numeric_native' => 'The native amount must be a number.',
- 'numeric_destination' => 'The destination amount must be a number.',
- 'numeric_source' => 'The source amount must be a number.',
+ 'numeric_native' => 'Yerli tutar bir sayı olması gerekir.',
+ 'numeric_destination' => 'Hedef tutar bir sayı olması gerekir.',
+ 'numeric_source' => 'Kaynak tutarın bir sayı olması gerekir.',
'regex' => ':attribute biçimi geçersiz.',
'required' => ':attribute alanı gereklidir.',
'required_if' => ':other :value iken :attribute alanı gereklidir.',
@@ -120,7 +121,7 @@ return [
'file' => ':attribute bir dosya olmalıdır.',
'in_array' => ':attribute alanı :other içinde olamaz.',
'present' => ':attribute alanı mevcut olmalıdır.',
- 'amount_zero' => 'The total amount cannot be zero.',
+ 'amount_zero' => 'Toplam tutarı sıfır olamaz.',
'unique_piggy_bank_for_user' => 'Kumbara adı benzersiz olmalıdır.',
'secure_password' => 'This is not a secure password. Please try again. For more information, visit http://bit.ly/FF3-password-security.',
'valid_recurrence_rep_type' => 'Invalid repetition type for recurring transactions.',
diff --git a/resources/views/auth/login.twig b/resources/views/auth/login.twig
index 094375048e..2029179ad5 100644
--- a/resources/views/auth/login.twig
+++ b/resources/views/auth/login.twig
@@ -29,7 +29,7 @@
|
-
-
- {% if att.data.title %}
- {{ att.data.title }}
+
+
+ {% if att.title %}
+ {{ att.title }}
{% else %}
- {{ att.data.filename }}
+ {{ att.filename }}
{% endif %}
- ({{ att.data.size|filesize }})
- {% if att.data.description %}
+ ({{ att.size|filesize }})
+ {% if att.description %}
- {{ att.data.description }} + {{ att.description }} {% endif %} |
-
- |
| + {% for budget in paginator %} + | ||
| + {% if budgetInformation[budget.id]['currentLimit'] %} + {{ budget.name }} + {% else %} + {{ budget.name }} + {% endif %} + | {% if budgetInformation[budget.id]['currentLimit'] %} - {{ budget.name }} + {% set repAmount = budgetInformation[budget.id]['budgeted'] %} {% else %} - {{ budget.name }} + {% set repAmount = '0' %} {% endif %} - - {% if budgetInformation[budget.id]['currentLimit'] %} - {% set repAmount = budgetInformation[budget.id]['budgeted'] %} - {% else %} - {% set repAmount = '0' %} - {% endif %} -
-
-
-
- {{ defaultCurrency.symbol|raw }}
-
-
- |
-
- - {{ (repAmount + budgetInformation[budget.id]['spent'])|formatAmount }} - {% if repAmount + budgetInformation[budget.id]['spent'] > 0 %} - ({{ ((repAmount + budgetInformation[budget.id]['spent']) / activeDaysLeft)|formatAmount }}) - {% endif %} - | -
+
+
+
+ {{ defaultCurrency.symbol|raw }}
+
+
+ |
+
+ + {{ (repAmount + budgetInformation[budget.id]['spent'])|formatAmount }} + {% if repAmount + budgetInformation[budget.id]['spent'] > 0 %} + ({{ ((repAmount + budgetInformation[budget.id]['spent']) / activeDaysLeft)|formatAmount }}) + {% endif %} + | + {% endfor %}