diff --git a/CHANGELOG.md b/CHANGELOG.md
index a25d8ff..e9b2dd8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,146 @@ All notable changes to this project will be documented in this file.
 Each new release typically also includes the latest modulesync defaults.
 These should not affect the functionality of the module.
 
+## [v6.0.2](https://github.com/voxpupuli/puppet-archive/tree/v6.0.2) (2021-11-23)
+
+[Full Changelog](https://github.com/voxpupuli/puppet-archive/compare/v6.0.1...v6.0.2)
+
+**Merged pull requests:**
+
+- puppet-lint: fix top\_scope\_facts warnings [\#462](https://github.com/voxpupuli/puppet-archive/pull/462) ([bastelfreak](https://github.com/bastelfreak))
+
+## [v6.0.1](https://github.com/voxpupuli/puppet-archive/tree/v6.0.1) (2021-08-26)
+
+[Full Changelog](https://github.com/voxpupuli/puppet-archive/compare/v6.0.0...v6.0.1)
+
+**Fixed bugs:**
+
+- Fix `archive::download::digest_type` data type \(reverts 6.0.0 breaking change\) [\#460](https://github.com/voxpupuli/puppet-archive/pull/460) ([alexjfisher](https://github.com/alexjfisher))
+
+## [v6.0.0](https://github.com/voxpupuli/puppet-archive/tree/v6.0.0) (2021-08-25)
+
+[Full Changelog](https://github.com/voxpupuli/puppet-archive/compare/v5.0.0...v6.0.0)
+
+**Breaking changes:**
+
+- Drop Virtuozzo 6 [\#455](https://github.com/voxpupuli/puppet-archive/pull/455) ([genebean](https://github.com/genebean))
+- Drop EoL AIX versions [\#454](https://github.com/voxpupuli/puppet-archive/pull/454) ([genebean](https://github.com/genebean))
+- Drop EoL Windows versions [\#453](https://github.com/voxpupuli/puppet-archive/pull/453) ([genebean](https://github.com/genebean))
+- Drop Debian 9 [\#452](https://github.com/voxpupuli/puppet-archive/pull/452) ([genebean](https://github.com/genebean))
+- Drop Ubuntu 16.04 [\#451](https://github.com/voxpupuli/puppet-archive/pull/451) ([genebean](https://github.com/genebean))
+- Set optional param to undef to fix failing test \(REVERTED IN 6.0.1\) [\#449](https://github.com/voxpupuli/puppet-archive/pull/449) ([yachub](https://github.com/yachub))
+
+**Implemented enhancements:**
+
+- Add support for Debian 11 [\#458](https://github.com/voxpupuli/puppet-archive/pull/458) ([smortex](https://github.com/smortex))
+- Add ubuntu 20.04 [\#456](https://github.com/voxpupuli/puppet-archive/pull/456) ([genebean](https://github.com/genebean))
+- Update CA certificate bundle to 2021-05-25 [\#444](https://github.com/voxpupuli/puppet-archive/pull/444) ([l-avila](https://github.com/l-avila))
+
+**Fixed bugs:**
+
+- Fix Could not set 'present' on ensure: wrong number of arguments \(given 1, expected 0\) [\#443](https://github.com/voxpupuli/puppet-archive/pull/443) ([jeffmccune](https://github.com/jeffmccune))
+- Write downloaded files as binary [\#442](https://github.com/voxpupuli/puppet-archive/pull/442) ([benohara](https://github.com/benohara))
+
+**Merged pull requests:**
+
+- Allow stdlib 8.0.0 [\#457](https://github.com/voxpupuli/puppet-archive/pull/457) ([smortex](https://github.com/smortex))
+
+## [v5.0.0](https://github.com/voxpupuli/puppet-archive/tree/v5.0.0) (2021-04-16)
+
+[Full Changelog](https://github.com/voxpupuli/puppet-archive/compare/v4.6.0...v5.0.0)
+
+**Breaking changes:**
+
+- metadata.json: drop Puppet 5, add Puppet 7 support [\#436](https://github.com/voxpupuli/puppet-archive/pull/436) ([kenyon](https://github.com/kenyon))
+- Drop support for CentOS/RHEL 6 and variants [\#431](https://github.com/voxpupuli/puppet-archive/pull/431) ([alexjfisher](https://github.com/alexjfisher))
+
+**Implemented enhancements:**
+
+- Enable Debian 9/10 support [\#439](https://github.com/voxpupuli/puppet-archive/pull/439) ([bastelfreak](https://github.com/bastelfreak))
+- Support stdlib 7.x [\#437](https://github.com/voxpupuli/puppet-archive/pull/437) ([treydock](https://github.com/treydock))
+- Add `archives` parameter to make use with an ENC or hiera easier [\#423](https://github.com/voxpupuli/puppet-archive/pull/423) ([jcpunk](https://github.com/jcpunk))
+- Add initial support for gsutil and pulling from Google Storage buckets [\#421](https://github.com/voxpupuli/puppet-archive/pull/421) ([j0sh3rs](https://github.com/j0sh3rs))
+
+**Fixed bugs:**
+
+- Fix downloading when passwords contain spaces [\#430](https://github.com/voxpupuli/puppet-archive/pull/430) ([alexjfisher](https://github.com/alexjfisher))
+- Windows: find 7zip binary [\#428](https://github.com/voxpupuli/puppet-archive/pull/428) ([joerg16](https://github.com/joerg16))
+
+**Merged pull requests:**
+
+- Produce a better error for the puppet downloader when file not found [\#434](https://github.com/voxpupuli/puppet-archive/pull/434) ([hajee](https://github.com/hajee))
+- Pass over credentials in archive::artifactory [\#433](https://github.com/voxpupuli/puppet-archive/pull/433) ([jramosf](https://github.com/jramosf))
+- Clean up temporary files when checksums don't match [\#412](https://github.com/voxpupuli/puppet-archive/pull/412) ([benridley](https://github.com/benridley))
+
+## [v4.6.0](https://github.com/voxpupuli/puppet-archive/tree/v4.6.0) (2020-08-21)
+
+[Full Changelog](https://github.com/voxpupuli/puppet-archive/compare/v4.5.0...v4.6.0)
+
+**Implemented enhancements:**
+
+- Add `temp_dir` parameter to `archive::nexus` [\#415](https://github.com/voxpupuli/puppet-archive/pull/415) ([alexcit](https://github.com/alexcit))
+- Use curl netrc file instead of `--user` [\#399](https://github.com/voxpupuli/puppet-archive/pull/399) ([alexjfisher](https://github.com/alexjfisher))
+
+**Closed issues:**
+
+- Feature request: make password sensitive and hide on fail [\#397](https://github.com/voxpupuli/puppet-archive/issues/397)
+
+**Merged pull requests:**
+
+- README.md: correct spelling typo [\#414](https://github.com/voxpupuli/puppet-archive/pull/414) ([kenyon](https://github.com/kenyon))
+- Fix several markdown lint issues [\#408](https://github.com/voxpupuli/puppet-archive/pull/408) ([dhoppe](https://github.com/dhoppe))
+
+## [v4.5.0](https://github.com/voxpupuli/puppet-archive/tree/v4.5.0) (2020-04-02)
+
+[Full Changelog](https://github.com/voxpupuli/puppet-archive/compare/v4.4.0...v4.5.0)
+
+**Implemented enhancements:**
+
+- Add VZ 6/7 to metadata.json [\#402](https://github.com/voxpupuli/puppet-archive/pull/402) ([bastelfreak](https://github.com/bastelfreak))
+
+**Closed issues:**
+
+- Could not autoload puppet/parser/functions/artifactory\_sha1: no such file to load -- puppet\_x/bodeco/util [\#320](https://github.com/voxpupuli/puppet-archive/issues/320)
+
+**Merged pull requests:**
+
+- Convert `archive` class docs to puppet-strings and small README improvements [\#394](https://github.com/voxpupuli/puppet-archive/pull/394) ([alexjfisher](https://github.com/alexjfisher))
+- Convert `go_md5` function to modern API [\#392](https://github.com/voxpupuli/puppet-archive/pull/392) ([alexjfisher](https://github.com/alexjfisher))
+- Use `relative_require` in artifactory functions [\#391](https://github.com/voxpupuli/puppet-archive/pull/391) ([alexjfisher](https://github.com/alexjfisher))
+- Convert `assemble_nexus_url` to modern API [\#390](https://github.com/voxpupuli/puppet-archive/pull/390) ([alexjfisher](https://github.com/alexjfisher))
+- Remove duplicate CONTRIBUTING.md file [\#389](https://github.com/voxpupuli/puppet-archive/pull/389) ([dhoppe](https://github.com/dhoppe))
+- Add Darwin \(mac os x\) compatibility [\#387](https://github.com/voxpupuli/puppet-archive/pull/387) ([bjoernhaeuser](https://github.com/bjoernhaeuser))
+
+## [v4.4.0](https://github.com/voxpupuli/puppet-archive/tree/v4.4.0) (2019-11-04)
+
+[Full Changelog](https://github.com/voxpupuli/puppet-archive/compare/v4.3.0...v4.4.0)
+
+**Implemented enhancements:**
+
+- Extract .zip using PowerShell \(native\) as alternative to 7-zip [\#380](https://github.com/voxpupuli/puppet-archive/issues/380)
+- Add support for .tar.Z files and uncompress [\#385](https://github.com/voxpupuli/puppet-archive/pull/385) ([hajee](https://github.com/hajee))
+
+**Merged pull requests:**
+
+- Put the cookie option at the end when using curl [\#349](https://github.com/voxpupuli/puppet-archive/pull/349) ([kapouik](https://github.com/kapouik))
+
+## [v4.3.0](https://github.com/voxpupuli/puppet-archive/tree/v4.3.0) (2019-10-16)
+
+[Full Changelog](https://github.com/voxpupuli/puppet-archive/compare/v4.2.0...v4.3.0)
+
+**Implemented enhancements:**
+
+- Add Archlinux compatibility [\#383](https://github.com/voxpupuli/puppet-archive/pull/383) ([bastelfreak](https://github.com/bastelfreak))
+- Add CentOS/RHEL 8 compatibility [\#382](https://github.com/voxpupuli/puppet-archive/pull/382) ([bastelfreak](https://github.com/bastelfreak))
+
+## [v4.2.0](https://github.com/voxpupuli/puppet-archive/tree/v4.2.0) (2019-08-14)
+
+[Full Changelog](https://github.com/voxpupuli/puppet-archive/compare/v4.1.0...v4.2.0)
+
+**Implemented enhancements:**
+
+- add bunzip2 filetype support [\#378](https://github.com/voxpupuli/puppet-archive/pull/378) ([Dan33l](https://github.com/Dan33l))
+
 ## [v4.1.0](https://github.com/voxpupuli/puppet-archive/tree/v4.1.0) (2019-07-04)
 
 [Full Changelog](https://github.com/voxpupuli/puppet-archive/compare/v4.0.0...v4.1.0)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index ac8608c..0000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,97 +0,0 @@
-This module has grown over time based on a range of contributions from
-people using it. If you follow these contributing guidelines your patch
-will likely make it into a release a little quicker.
-
-
-## Contributing
-
-Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. [Contributor Code of Conduct](https://voxpupuli.org/coc/).
-
-1. Fork the repo.
-
-1. Create a separate branch for your change.
-
-1. Run the tests. We only take pull requests with passing tests, and
-   documentation.
-
-1. Add a test for your change. Only refactoring and documentation
-   changes require no new tests. If you are adding functionality
-   or fixing a bug, please add a test.
-
-1. Squash your commits down into logical components. Make sure to rebase
-   against the current master.
-
-1. Push the branch to your fork and submit a pull request.
-
-Please be prepared to repeat some of these steps as our contributors review
-your code.
-
-## Dependencies
-
-The testing and development tools have a bunch of dependencies,
-all managed by [bundler](http://bundler.io/) according to the
-[Puppet support matrix](http://docs.puppetlabs.com/guides/platforms.html#ruby-versions).
-
-By default the tests use a baseline version of Puppet.
-
-If you have Ruby 2.x or want a specific version of Puppet,
-you must set an environment variable such as:
-
-    export PUPPET_VERSION="~> 4.2.0"
-
-Install the dependencies like so...
-
-    bundle install
-
-## Syntax and style
-
-The test suite will run [Puppet Lint](http://puppet-lint.com/) and
-[Puppet Syntax](https://github.com/gds-operations/puppet-syntax) to
-check various syntax and style things. You can run these locally with:
-
-    bundle exec rake lint
-    bundle exec rake validate
-
-## Running the unit tests
-
-The unit test suite covers most of the code, as mentioned above please
-add tests if you're adding new functionality. If you've not used
-[rspec-puppet](http://rspec-puppet.com/) before then feel free to ask
-about how best to test your new feature.
-
-To run all the unit tests
-
-    bundle exec rake spec SPEC_OPTS='--format documentation'
-
-To run a specific spec test set the `SPEC` variable:
-
-    bundle exec rake spec SPEC=spec/foo_spec.rb
-
-To run the linter, the syntax checker and the unit tests:
-
-    bundle exec rake test
-
-
-## Integration tests
-
-The unit tests just check the code runs, not that it does exactly what
-we want on a real machine. For that we're using
-[beaker](https://github.com/puppetlabs/beaker).
-
-This fires up a new virtual machine (using vagrant) and runs a series of
-simple tests against it after applying the module. You can run this
-with:
-
-    bundle exec rake acceptance
-
-This will run the tests on an Ubuntu 12.04 virtual machine. You can also
-run the integration tests against Centos 6.5 with.
-
-    BEAKER_set=centos-64-x64 bundle exec rake acceptances
-
-If you don't want to have to recreate the virtual machine every time you
-can use `BEAKER_DESTROY=no` and `BEAKER_PROVISION=no`. On the first run you will
-at least need `BEAKER_PROVISION` set to yes (the default). The Vagrantfile
-for the created virtual machines will be in `.vagrant/beaker_vagrant_files`.
-
-# vim: syntax=markdown
diff --git a/Gemfile b/Gemfile
deleted file mode 100644
index 24dbb7f..0000000
--- a/Gemfile
+++ /dev/null
@@ -1,82 +0,0 @@
-source ENV['GEM_SOURCE'] || "https://rubygems.org"
-
-def location_for(place, fake_version = nil)
-  if place =~ /^(git[:@][^#]*)#(.*)/
-    [fake_version, { :git => $1, :branch => $2, :require => false }].compact
-  elsif place =~ /^file:\/\/(.*)/
-    ['>= 0', { :path => File.expand_path($1), :require => false }]
-  else
-    [place, { :require => false }]
-  end
-end
-
-group :test do
-  gem 'puppetlabs_spec_helper', '>= 2.14.0',                        :require => false
-  gem 'rspec-puppet-facts', '>= 1.8.0',                             :require => false
-  gem 'rspec-puppet-utils',                                         :require => false
-  gem 'puppet-lint-leading_zero-check',                             :require => false
-  gem 'puppet-lint-trailing_comma-check',                           :require => false
-  gem 'puppet-lint-version_comparison-check',                       :require => false
-  gem 'puppet-lint-classes_and_types_beginning_with_digits-check',  :require => false
-  gem 'puppet-lint-unquoted_string-check',                          :require => false
-  gem 'puppet-lint-variable_contains_upcase',                       :require => false
-  gem 'puppet-lint-absolute_classname-check',                       :require => false
-  gem 'metadata-json-lint',                                         :require => false
-  gem 'redcarpet',                                                  :require => false
-  gem 'rubocop', '~> 0.49.1',                                       :require => false
-  gem 'rubocop-rspec', '~> 1.15.0',                                 :require => false
-  gem 'mocha', '~> 1.4.0',                                          :require => false
-  gem 'coveralls',                                                  :require => false
-  gem 'simplecov-console',                                          :require => false
-  gem 'parallel_tests',                                             :require => false
-end
-
-group :development do
-  gem 'travis',                   :require => false
-  gem 'travis-lint',              :require => false
-  gem 'guard-rake',               :require => false
-  gem 'overcommit', '>= 0.39.1',  :require => false
-end
-
-group :system_tests do
-  gem 'winrm',                              :require => false
-  if beaker_version = ENV['BEAKER_VERSION']
-    gem 'beaker', *location_for(beaker_version)
-  else
-    gem 'beaker', '>= 4.2.0', :require => false
-  end
-  if beaker_rspec_version = ENV['BEAKER_RSPEC_VERSION']
-    gem 'beaker-rspec', *location_for(beaker_rspec_version)
-  else
-    gem 'beaker-rspec',  :require => false
-  end
-  gem 'serverspec',                         :require => false
-  gem 'beaker-hostgenerator', '>= 1.1.22',  :require => false
-  gem 'beaker-docker',                      :require => false
-  gem 'beaker-puppet',                      :require => false
-  gem 'beaker-puppet_install_helper',       :require => false
-  gem 'beaker-module_install_helper',       :require => false
-  gem 'rbnacl', '>= 4',                     :require => false
-  gem 'rbnacl-libsodium',                   :require => false
-  gem 'bcrypt_pbkdf',                       :require => false
-end
-
-group :release do
-  gem 'github_changelog_generator',  :require => false, :git => 'https://github.com/github-changelog-generator/github-changelog-generator'
-  gem 'puppet-blacksmith',           :require => false
-  gem 'voxpupuli-release',           :require => false, :git => 'https://github.com/voxpupuli/voxpupuli-release-gem'
-  gem 'puppet-strings', '>= 2.2',    :require => false
-end
-
-
-
-if facterversion = ENV['FACTER_GEM_VERSION']
-  gem 'facter', facterversion.to_s, :require => false, :groups => [:test]
-else
-  gem 'facter', :require => false, :groups => [:test]
-end
-
-ENV['PUPPET_VERSION'].nil? ? puppetversion = '~> 6.0' : puppetversion = ENV['PUPPET_VERSION'].to_s
-gem 'puppet', puppetversion, :require => false, :groups => [:test]
-
-# vim: syntax=ruby
diff --git a/README.md b/README.md
index 6f518ea..0882475 100644
--- a/README.md
+++ b/README.md
@@ -9,21 +9,22 @@
 [![Puppet Forge - scores](https://img.shields.io/puppetforge/f/puppet/archive.svg)](https://forge.puppetlabs.com/puppet/archive)
 [![Camptocamp compatible](https://img.shields.io/badge/camptocamp-compatible-orange.svg)](https://forge.puppet.com/camptocamp/archive)
 
-#### Table of Contents
+## Table of Contents
 
 1. [Overview](#overview)
-2. [Module Description](#module-description)
-3. [Setup](#setup)
-4. [Usage](#usage)
+1. [Module Description](#module-description)
+1. [Setup](#setup)
+1. [Usage](#usage)
    * [Example](#usage-example)
    * [Puppet URL](#puppet-url)
    * [File permission](#file-permission)
    * [Network files](#network-files)
    * [Extract customization](#extract-customization)
    * [S3 Bucket](#s3-bucket)
+   * [GS Bucket](#gs-bucket)
    * [Migrating from puppet-staging](#migrating-from-puppet-staging)
-5. [Reference](#reference)
-6. [Development](#development)
+1. [Reference](#reference)
+1. [Development](#development)
 
 ## Overview
 
@@ -61,7 +62,7 @@ Archive {
 }
 ```
 
-Users of the module is responsbile for archive package dependencies for
+Users of the module are responsible for archive package dependencies, for
 alternative providers and all extraction utilities such as tar, gunzip, bunzip:
 
 ```puppet
@@ -83,9 +84,9 @@ if $facts['osfamily'] != 'windows' {
 
 ## Usage
 
-Archive module dependency is managed by the archive class. This is only
-required for windows platform. By default 7zip is installed via chocolatey, but
-can be adjusted to use the msi package instead:
+Archive module dependencies are managed by the `archive` class. This is only
+required on Windows. By default 7zip is installed via chocolatey, but
+the MSI package can be installed instead:
 
 ```puppet
 class { 'archive':
@@ -95,9 +96,21 @@ class { 'archive':
 }
 ```
 
+To automatically load archives as part of this class you can define the
+`archives` parameter.
+
+```puppet
+class { 'archive':
+  archives => { '/tmp/jta-1.1.jar' => {
+                  'ensure' => 'present',
+                  'source'  => 'http://central.maven.org/maven2/javax/transaction/jta/1.1/jta-1.1.jar',
+                  }, }
+}
+```
+
 ### Usage Example
 
-Simple example that donwloads from web server:
+Simple example that downloads from web server:
 
 ```puppet
 archive { '/tmp/vagrant.deb':
@@ -276,10 +289,9 @@ archive { '/var/lib/example.zip':
 
 ### S3 bucket
 
-S3 support is implemented via the [AWS
-CLI](http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html).
-By default this dependency is only installed for Linux VMs running on AWS, or
-enabled via `aws_cli_install` option:
+S3 support is implemented via the [AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html).
+On non-Windows systems, the `archive` class will install this dependency when
+the `aws_cli_install` parameter is set to `true`:
 
 ```puppet
 class { 'archive':
@@ -306,13 +318,34 @@ archive { '/tmp/gravatar.png':
 NOTE: Alternative s3 provider support can be implemented by overriding the
 [s3_download method](lib/puppet/provider/archive/ruby.rb):
 
+### GS bucket
+
+GSUtil support is implemented via the [GSUtil Package](https://cloud.google.com/storage/docs/gsutil).
+On non-Windows systems, the `archive` class will install this dependency when
+the `gsutil_install` parameter is set to `true`:
+
+```puppet
+class { 'archive':
+  gsutil_install => true,
+}
+
+# See Google Cloud SDK cli guide for credential and configuration settings:
+# https://cloud.google.com/storage/docs/quickstart-gsutil
+
+archive { '/tmp/gravatar.png':
+  ensure => present,
+  source => 'gs://bodecoio/gravatar.png',
+}
+```
+
 ### Download customizations
 
-In some cases you may need custom flags for curl/wget/s3 which can be
+In some cases you may need custom flags for curl/wget/s3/gsutil which can be
 supplied via `download_options`. Since this parameter is provider specific,
 beware of the order of defaults:
 
 * s3:// files accepts aws cli options
+
   ```puppet
   archive { '/tmp/gravatar.png':
     ensure           => present,
@@ -320,7 +353,9 @@ beware of the order of defaults:
     download_options => ['--region', 'eu-central-1'],
   }
   ```
+
 * puppet `provider` override:
+
   ```puppet
   archive { '/tmp/jta-1.1.jar':
     ensure           => present,
@@ -329,9 +364,11 @@ beware of the order of defaults:
     download_options => '--continue',
   }
   ```
+
 * Linux default provider is `curl`, and Windows default is `ruby` (no effect).
 
 This option can also be applied globally to address issues for specific OS:
+
 ```puppet
 if $facts['osfamily'] != 'RedHat' {
   Archive {
@@ -345,9 +382,7 @@ if $facts['osfamily'] != 'RedHat' {
 It is recommended to use puppet-archive instead of puppet-staging.
 Users wishing to migrate may find the following examples useful.
 
-#### Simple example without extraction
-
-##### puppet-staging
+#### puppet-staging (without extraction)
 
 ```puppet
 class { 'staging':
@@ -359,7 +394,7 @@ staging::file { 'master.zip':
 }
 ```
 
-##### puppet-archive
+#### puppet-archive (without extraction)
 
 ```puppet
 archive { '/tmp/staging/master.zip':
@@ -367,9 +402,7 @@ archive { '/tmp/staging/master.zip':
 }
 ```
 
-#### Example with zip file extraction
-
-##### puppet-staging
+#### puppet-staging (with zip file extraction)
 
 ```puppet
 class { 'staging':
@@ -385,7 +418,7 @@ staging::extract { 'master.zip':
 }
 ```
 
-##### puppet-archive
+#### puppet-archive (with zip file extraction)
 
 ```puppet
 archive { '/tmp/staging/master.zip':
@@ -401,7 +434,8 @@ archive { '/tmp/staging/master.zip':
 
 ### Classes
 
-* `archive`: install 7zip package (Windows only) and aws cli for s3 support.
+* `archive`: install 7zip package (Windows only) and aws cli or gsutil for s3/gs support.
+  It also permits passing an `archives` argument to generate `archive` resources.
 * `archive::staging`: install package dependencies and creates staging directory
   for backwards compatibility. Use the archive class instead if you do not need
   the staging directory.
@@ -427,7 +461,7 @@ archive { '/tmp/staging/master.zip':
 * `ensure`: whether archive file should be present/absent (default: present)
 * `path`: namevar, archive file fully qualified file path.
 * `filename`: archive file name (derived from path).
-* `source`: archive file source, supports http|https|ftp|file|s3 uri.
+* `source`: archive file source, supports http|https|ftp|file|s3|gs uri.
 * `username`: username to download source file.
 * `password`: password to download source file.
 * `allow_insecure`: Ignore HTTPS certificate errors (true|false). (default: false)
@@ -441,9 +475,10 @@ archive { '/tmp/staging/master.zip':
   (default: false)
 * `extract_path`: target folder path to extract archive.
 * `extract_command`: custom extraction command ('tar xvf example.tar.gz'), also
-* `temp_dir`: specify an alternative temporary directory to use for file downloads, if unset the OS default is used
-  support sprintf format ('tar xvf %s') which will be processed with the
-  filename: sprintf('tar xvf %s', filename)
+   support sprintf format ('tar xvf %s') which will be processed with the filename:
+   sprintf('tar xvf %s', filename)
+* `temp_dir`: Specify an alternative temporary directory to use for copying files,
+   if unset then the operating system default will be used.
 * `extract_flags`: custom extraction options, this replaces the default flags.
   A string such as 'xvf' for a tar file would replace the default xf flag. A
   hash is useful when custom flags are needed for different platforms. {'tar'
diff --git a/REFERENCE.md b/REFERENCE.md
new file mode 100644
index 0000000..8dcadb2
--- /dev/null
+++ b/REFERENCE.md
@@ -0,0 +1,1191 @@
+# Reference
+
+<!-- DO NOT EDIT: This document was generated by Puppet Strings -->
+
+## Table of Contents
+
+### Classes
+
+#### Public Classes
+
+* [`archive`](#archive): Manages archive module's dependencies.
+* [`archive::staging`](#archivestaging): Class: archive::staging =======================  backwards compatibility class for staging module.
+
+#### Private Classes
+
+* `archive::params`: OS specific `archive` settings such as default user and file mode.
+
+### Defined types
+
+* [`archive::artifactory`](#archiveartifactory): Define: archive::artifactory ============================  archive wrapper for downloading files from artifactory  Parameters ----------  * p
+* [`archive::download`](#archivedownload): == Definition: archive::download  Archive downloader with integrity verification.  Parameters:  - *$url: - *$digest_url: - *$digest_string: D
+* [`archive::go`](#archivego): download from go
+* [`archive::nexus`](#archivenexus): define: archive::nexus ======================  archive wrapper for downloading files from Nexus using REST API. Nexus API: https://repository
+
+### Resource types
+
+* [`archive`](#archive): Manage archive file download, extraction, and cleanup.
+
+### Functions
+
+#### Public Functions
+
+* [`archive::artifactory_checksum`](#archiveartifactory_checksum): A function that returns the checksum value of an artifact stored in Artifactory
+* [`archive::artifactory_latest_url`](#archiveartifactory_latest_url)
+* [`archive::parse_artifactory_url`](#archiveparse_artifactory_url): A function to parse an Artifactory maven 2 repository URL
+
+#### Private Functions
+
+* `archive::assemble_nexus_url`: Assembles a complete nexus URL from the base url and query parameters
+* `archive::go_md5`: Retrieves and returns specific file's md5 from GoCD server md5 checksum file
+
+## Classes
+
+### <a name="archive"></a>`archive`
+
+Manages archive module's dependencies.
+
+#### Examples
+
+##### On Windows, ensure 7zip is installed using the default `chocolatey` provider.
+
+```puppet
+include archive
+```
+
+##### On Windows, install a 7zip MSI with the native `windows` package provider.
+
+```puppet
+class { 'archive':
+  seven_zip_name     => '7-Zip 9.20 (x64 edition)',
+  seven_zip_source   => 'C:/Windows/Temp/7z920-x64.msi',
+  seven_zip_provider => 'windows',
+}
+```
+
+##### Install the AWS CLI tool. (Not supported on Windows).
+
+```puppet
+class { 'archive':
+  aws_cli_install => true,
+}
+```
+
+##### Deploy a specific archive
+
+```puppet
+class { 'archive':
+  archives => { '/tmp/jta-1.1.jar' => {
+                  'ensure' => 'present',
+                  'source'  => 'http://central.maven.org/maven2/javax/transaction/jta/1.1/jta-1.1.jar',
+                  }, }
+}
+```
+
+#### Parameters
+
+The following parameters are available in the `archive` class:
+
+* [`seven_zip_name`](#seven_zip_name)
+* [`seven_zip_provider`](#seven_zip_provider)
+* [`seven_zip_source`](#seven_zip_source)
+* [`aws_cli_install`](#aws_cli_install)
+* [`gsutil_install`](#gsutil_install)
+* [`archives`](#archives)
+
+##### <a name="seven_zip_name"></a>`seven_zip_name`
+
+Data type: `Optional[String[1]]`
+
+7zip package name.  This parameter only applies to Windows.
+
+Default value: `$archive::params::seven_zip_name`
+
+##### <a name="seven_zip_provider"></a>`seven_zip_provider`
+
+Data type: `Optional[Enum['chocolatey','windows','']]`
+
+7zip package provider.  This parameter only applies to Windows where it defaults to `chocolatey`. Can be set to an empty string, (or `undef` via hiera), if you don't want this module to manage 7zip.
+
+Default value: `$archive::params::seven_zip_provider`
+
+##### <a name="seven_zip_source"></a>`seven_zip_source`
+
+Data type: `Optional[String[1]]`
+
+Alternative package source for 7zip.  This parameter only applies to Windows.
+
+Default value: ``undef``
+
+##### <a name="aws_cli_install"></a>`aws_cli_install`
+
+Data type: `Boolean`
+
+Installs the AWS CLI command needed for downloading from S3 buckets.  This parameter is currently not implemented on Windows.
+
+Default value: ``false``
+
+##### <a name="gsutil_install"></a>`gsutil_install`
+
+Data type: `Boolean`
+
+Installs the GSUtil CLI command needed for downloading from GS buckets.  This parameter is currently not implemented on Windows.
+
+Default value: ``false``
+
+##### <a name="archives"></a>`archives`
+
+Data type: `Hash`
+
+A hash of archive resources this module should create.
+
+Default value: `{}`
+
+### <a name="archivestaging"></a>`archive::staging`
+
+Class: archive::staging
+=======================
+
+backwards compatibility class for staging module.
+
+#### Parameters
+
+The following parameters are available in the `archive::staging` class:
+
+* [`path`](#path)
+* [`owner`](#owner)
+* [`group`](#group)
+* [`mode`](#mode)
+
+##### <a name="path"></a>`path`
+
+Data type: `String`
+
+
+
+Default value: `$archive::params::path`
+
+##### <a name="owner"></a>`owner`
+
+Data type: `String`
+
+
+
+Default value: `$archive::params::owner`
+
+##### <a name="group"></a>`group`
+
+Data type: `String`
+
+
+
+Default value: `$archive::params::group`
+
+##### <a name="mode"></a>`mode`
+
+Data type: `String`
+
+
+
+Default value: `$archive::params::mode`
+
+## Defined types
+
+### <a name="archiveartifactory"></a>`archive::artifactory`
+
+Define: archive::artifactory
+============================
+
+archive wrapper for downloading files from artifactory
+
+Parameters
+----------
+
+* path: fully qualified filepath for the download the file or use archive_path and only supply filename. (namevar).
+* ensure: ensure the file is present/absent.
+* url: artifactory download URL.
+* owner: file owner (see archive params for defaults).
+* group: file group (see archive params for defaults).
+* mode: file mode (see archive params for defaults).
+* archive_path: the parent directory of local filepath.
+* extract: whether to extract the files (true/false).
+* creates: the file created when the archive is extracted (true/false).
+* cleanup: remove archive file after file extraction (true/false).
+
+Examples
+--------
+
+archive::artifactory { '/tmp/logo.png':
+  url   => 'https://repo.jfrog.org/artifactory/distributions/images/Artifactory_120x75.png',
+  owner => 'root',
+  group => 'root',
+  mode  => '0644',
+}
+
+$dirname = 'gradle-1.0-milestone-4-20110723151213+0300'
+$filename = "${dirname}-bin.zip"
+
+archive::artifactory { $filename:
+  archive_path => '/tmp',
+  url          => "http://repo.jfrog.org/artifactory/distributions/org/gradle/${filename}",
+  extract      => true,
+  extract_path => '/opt',
+  creates      => "/opt/${dirname}",
+  cleanup      => true,
+}
+
+#### Parameters
+
+The following parameters are available in the `archive::artifactory` defined type:
+
+* [`url`](#url)
+* [`path`](#path)
+* [`ensure`](#ensure)
+* [`owner`](#owner)
+* [`group`](#group)
+* [`mode`](#mode)
+* [`extract`](#extract)
+* [`extract_path`](#extract_path)
+* [`creates`](#creates)
+* [`cleanup`](#cleanup)
+* [`username`](#username)
+* [`password`](#password)
+* [`archive_path`](#archive_path)
+
+##### <a name="url"></a>`url`
+
+Data type: `Stdlib::HTTPUrl`
+
+
+
+##### <a name="path"></a>`path`
+
+Data type: `String`
+
+
+
+Default value: `$name`
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `present`
+
+##### <a name="owner"></a>`owner`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="group"></a>`group`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="mode"></a>`mode`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="extract"></a>`extract`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="extract_path"></a>`extract_path`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="creates"></a>`creates`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="cleanup"></a>`cleanup`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="username"></a>`username`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="password"></a>`password`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="archive_path"></a>`archive_path`
+
+Data type: `Optional[Stdlib::Absolutepath]`
+
+
+
+Default value: ``undef``
+
+### <a name="archivedownload"></a>`archive::download`
+
+== Definition: archive::download
+
+Archive downloader with integrity verification.
+
+Parameters:
+
+- *$url:
+- *$digest_url:
+- *$digest_string: Default value undef
+- *$digest_type: Default value "md5".
+- *$timeout: Default value 120. (ignored)
+- *$src_target: Default value "/usr/src".
+- *$allow_insecure: Default value false.
+- *$follow_redirects: Default value false.
+- *$verbose: Default value true.
+- *$proxy_server: Default value undef.
+- *$user: The user used to download the archive
+
+Example usage:
+
+ archive::download {"apache-tomcat-6.0.26.tar.gz":
+   ensure => present,
+   url    => "http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.26/bin/apache-tomcat-6.0.26.tar.gz",
+ }
+
+ archive::download {"apache-tomcat-6.0.26.tar.gz":
+   ensure        => present,
+   digest_string => "f9eafa9bfd620324d1270ae8f09a8c89",
+   url           => "http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.26/bin/apache-tomcat-6.0.26.tar.gz",
+ }
+
+#### Parameters
+
+The following parameters are available in the `archive::download` defined type:
+
+* [`url`](#url)
+* [`ensure`](#ensure)
+* [`checksum`](#checksum)
+* [`digest_url`](#digest_url)
+* [`digest_string`](#digest_string)
+* [`digest_type`](#digest_type)
+* [`timeout`](#timeout)
+* [`src_target`](#src_target)
+* [`allow_insecure`](#allow_insecure)
+* [`follow_redirects`](#follow_redirects)
+* [`verbose`](#verbose)
+* [`path`](#path)
+* [`proxy_server`](#proxy_server)
+* [`user`](#user)
+
+##### <a name="url"></a>`url`
+
+Data type: `String`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `present`
+
+##### <a name="checksum"></a>`checksum`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="digest_url"></a>`digest_url`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="digest_string"></a>`digest_string`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="digest_type"></a>`digest_type`
+
+Data type: `Enum['none', 'md5', 'sha1', 'sha2','sha256', 'sha384', 'sha512']`
+
+
+
+Default value: `'md5'`
+
+##### <a name="timeout"></a>`timeout`
+
+Data type: `Integer`
+
+
+
+Default value: `120`
+
+##### <a name="src_target"></a>`src_target`
+
+Data type: `Stdlib::Compat::Absolute_path`
+
+
+
+Default value: `'/usr/src'`
+
+##### <a name="allow_insecure"></a>`allow_insecure`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="follow_redirects"></a>`follow_redirects`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="verbose"></a>`verbose`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="path"></a>`path`
+
+Data type: `String`
+
+
+
+Default value: `$facts['path']`
+
+##### <a name="proxy_server"></a>`proxy_server`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="user"></a>`user`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+### <a name="archivego"></a>`archive::go`
+
+download from go
+
+#### Parameters
+
+The following parameters are available in the `archive::go` defined type:
+
+* [`server`](#server)
+* [`port`](#port)
+* [`url_path`](#url_path)
+* [`md5_url_path`](#md5_url_path)
+* [`username`](#username)
+* [`password`](#password)
+* [`ensure`](#ensure)
+* [`path`](#path)
+* [`owner`](#owner)
+* [`group`](#group)
+* [`mode`](#mode)
+* [`extract`](#extract)
+* [`extract_path`](#extract_path)
+* [`creates`](#creates)
+* [`cleanup`](#cleanup)
+* [`archive_path`](#archive_path)
+
+##### <a name="server"></a>`server`
+
+Data type: `String`
+
+
+
+##### <a name="port"></a>`port`
+
+Data type: `Integer`
+
+
+
+##### <a name="url_path"></a>`url_path`
+
+Data type: `String`
+
+
+
+##### <a name="md5_url_path"></a>`md5_url_path`
+
+Data type: `String`
+
+
+
+##### <a name="username"></a>`username`
+
+Data type: `String`
+
+
+
+##### <a name="password"></a>`password`
+
+Data type: `String`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `present`
+
+##### <a name="path"></a>`path`
+
+Data type: `String`
+
+
+
+Default value: `$name`
+
+##### <a name="owner"></a>`owner`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="group"></a>`group`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="mode"></a>`mode`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="extract"></a>`extract`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="extract_path"></a>`extract_path`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="creates"></a>`creates`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="cleanup"></a>`cleanup`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="archive_path"></a>`archive_path`
+
+Data type: `Optional[Stdlib::Compat::Absolute_path]`
+
+
+
+Default value: ``undef``
+
+### <a name="archivenexus"></a>`archive::nexus`
+
+define: archive::nexus
+======================
+
+archive wrapper for downloading files from Nexus using REST API. Nexus API:
+https://repository.sonatype.org/nexus-restlet1x-plugin/default/docs/path__artifact_maven_content.html
+
+Parameters
+----------
+
+Examples
+--------
+
+archive::nexus { '/tmp/jtstand-ui-0.98.jar':
+  url        => 'https://oss.sonatype.org',
+  gav        => 'org.codehaus.jtstand:jtstand-ui:0.98',
+  repository => 'codehaus-releases',
+  packaging  => 'jar',
+  extract    => false,
+}
+
+#### Parameters
+
+The following parameters are available in the `archive::nexus` defined type:
+
+* [`url`](#url)
+* [`gav`](#gav)
+* [`repository`](#repository)
+* [`ensure`](#ensure)
+* [`checksum_type`](#checksum_type)
+* [`checksum_verify`](#checksum_verify)
+* [`packaging`](#packaging)
+* [`use_nexus3_urls`](#use_nexus3_urls)
+* [`classifier`](#classifier)
+* [`extension`](#extension)
+* [`username`](#username)
+* [`password`](#password)
+* [`user`](#user)
+* [`owner`](#owner)
+* [`group`](#group)
+* [`mode`](#mode)
+* [`extract`](#extract)
+* [`extract_path`](#extract_path)
+* [`extract_flags`](#extract_flags)
+* [`extract_command`](#extract_command)
+* [`creates`](#creates)
+* [`cleanup`](#cleanup)
+* [`proxy_server`](#proxy_server)
+* [`proxy_type`](#proxy_type)
+* [`allow_insecure`](#allow_insecure)
+* [`temp_dir`](#temp_dir)
+
+##### <a name="url"></a>`url`
+
+Data type: `String`
+
+
+
+##### <a name="gav"></a>`gav`
+
+Data type: `String`
+
+
+
+##### <a name="repository"></a>`repository`
+
+Data type: `String`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `present`
+
+##### <a name="checksum_type"></a>`checksum_type`
+
+Data type: `Enum['none', 'md5', 'sha1', 'sha2','sha256', 'sha384', 'sha512']`
+
+
+
+Default value: `'md5'`
+
+##### <a name="checksum_verify"></a>`checksum_verify`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="packaging"></a>`packaging`
+
+Data type: `String`
+
+
+
+Default value: `'jar'`
+
+##### <a name="use_nexus3_urls"></a>`use_nexus3_urls`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="classifier"></a>`classifier`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="extension"></a>`extension`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="username"></a>`username`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="password"></a>`password`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="user"></a>`user`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="owner"></a>`owner`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="group"></a>`group`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="mode"></a>`mode`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="extract"></a>`extract`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="extract_path"></a>`extract_path`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="extract_flags"></a>`extract_flags`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="extract_command"></a>`extract_command`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="creates"></a>`creates`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="cleanup"></a>`cleanup`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="proxy_server"></a>`proxy_server`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="proxy_type"></a>`proxy_type`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="allow_insecure"></a>`allow_insecure`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="temp_dir"></a>`temp_dir`
+
+Data type: `Optional[Stdlib::Absolutepath]`
+
+
+
+Default value: ``undef``
+
+## Resource types
+
+### <a name="archive"></a>`archive`
+
+Manage archive file download, extraction, and cleanup.
+
+#### Properties
+
+The following properties are available in the `archive` type.
+
+##### `creates`
+
+if file/directory exists, will not download/extract archive.
+
+##### `ensure`
+
+Valid values: `present`, `absent`
+
+whether archive file should be present/absent (default: present)
+
+Default value: `present`
+
+#### Parameters
+
+The following parameters are available in the `archive` type.
+
+* [`allow_insecure`](#allow_insecure)
+* [`checksum`](#checksum)
+* [`checksum_type`](#checksum_type)
+* [`checksum_url`](#checksum_url)
+* [`checksum_verify`](#checksum_verify)
+* [`cleanup`](#cleanup)
+* [`cookie`](#cookie)
+* [`digest_string`](#digest_string)
+* [`digest_type`](#digest_type)
+* [`digest_url`](#digest_url)
+* [`download_options`](#download_options)
+* [`extract`](#extract)
+* [`extract_command`](#extract_command)
+* [`extract_flags`](#extract_flags)
+* [`extract_path`](#extract_path)
+* [`filename`](#filename)
+* [`group`](#group)
+* [`password`](#password)
+* [`path`](#path)
+* [`provider`](#provider)
+* [`proxy_server`](#proxy_server)
+* [`proxy_type`](#proxy_type)
+* [`source`](#source)
+* [`target`](#target)
+* [`temp_dir`](#temp_dir)
+* [`url`](#url)
+* [`user`](#user)
+* [`username`](#username)
+
+##### <a name="allow_insecure"></a>`allow_insecure`
+
+Valid values: ``true``, ``false``, `yes`, `no`
+
+ignore HTTPS certificate errors
+
+Default value: ``false``
+
+##### <a name="checksum"></a>`checksum`
+
+Valid values: `%r{\b[0-9a-f]{5,128}\b}`, ``true``, ``false``, ``undef``, `nil`, `''`
+
+archive file checksum (match checksum_type).
+
+##### <a name="checksum_type"></a>`checksum_type`
+
+Valid values: `none`, `md5`, `sha1`, `sha2`, `sha256`, `sha384`, `sha512`
+
+archive file checksum type (none|md5|sha1|sha2|sha256|sha384|sha512).
+
+Default value: `none`
+
+##### <a name="checksum_url"></a>`checksum_url`
+
+archive file checksum source (instead of specifying checksum)
+
+##### <a name="checksum_verify"></a>`checksum_verify`
+
+Valid values: ``true``, ``false``
+
+whether checksum wil be verified (true|false).
+
+Default value: ``true``
+
+##### <a name="cleanup"></a>`cleanup`
+
+Valid values: ``true``, ``false``
+
+whether archive file will be removed after extraction (true|false).
+
+Default value: ``true``
+
+##### <a name="cookie"></a>`cookie`
+
+archive file download cookie.
+
+##### <a name="digest_string"></a>`digest_string`
+
+Valid values: `%r{\b[0-9a-f]{5,128}\b}`
+
+archive file checksum (match checksum_type)
+(this parameter is for camptocamp/archive compatibility).
+
+##### <a name="digest_type"></a>`digest_type`
+
+Valid values: `none`, `md5`, `sha1`, `sha2`, `sha256`, `sha384`, `sha512`
+
+archive file checksum type (none|md5|sha1|sha2|sha256|sha384|sha512)
+(this parameter is camptocamp/archive compatibility).
+
+##### <a name="digest_url"></a>`digest_url`
+
+archive file checksum source (instead of specifying checksum)
+(this parameter is for camptocamp/archive compatibility)
+
+##### <a name="download_options"></a>`download_options`
+
+provider download options (affects curl, wget, gs, and only s3 downloads for ruby provider)
+
+##### <a name="extract"></a>`extract`
+
+Valid values: ``true``, ``false``
+
+whether archive will be extracted after download (true|false).
+
+Default value: ``false``
+
+##### <a name="extract_command"></a>`extract_command`
+
+custom extraction command ('tar xvf example.tar.gz'), also support sprintf format ('tar xvf %s') which will be processed
+with the filename: sprintf('tar xvf %s', filename)
+
+##### <a name="extract_flags"></a>`extract_flags`
+
+custom extraction options, this replaces the default flags. A string such as 'xvf' for a tar file would replace the
+default xf flag. A hash is useful when custom flags are needed for different platforms. {'tar' => 'xzf', '7z' => 'x
+-aot'}.
+
+Default value: ``undef``
+
+##### <a name="extract_path"></a>`extract_path`
+
+target folder path to extract archive.
+
+##### <a name="filename"></a>`filename`
+
+archive file name (derived from path).
+
+##### <a name="group"></a>`group`
+
+extract command group (using this option will configure the archive file permisison to 0644 so the user can read the
+file).
+
+##### <a name="password"></a>`password`
+
+password to download source file.
+
+##### <a name="path"></a>`path`
+
+namevar, archive file fully qualified file path.
+
+##### <a name="provider"></a>`provider`
+
+The specific backend to use for this `archive` resource. You will seldom need to specify this --- Puppet will usually
+discover the appropriate provider for your platform.
+
+##### <a name="proxy_server"></a>`proxy_server`
+
+proxy address to use when accessing source
+
+##### <a name="proxy_type"></a>`proxy_type`
+
+Valid values: `none`, `ftp`, `http`, `https`
+
+proxy type (none|ftp|http|https)
+
+##### <a name="source"></a>`source`
+
+archive file source, supports puppet|http|https|ftp|file|s3|gs uri.
+
+##### <a name="target"></a>`target`
+
+target folder path to extract archive. (this parameter is for camptocamp/archive compatibility)
+
+##### <a name="temp_dir"></a>`temp_dir`
+
+Specify an alternative temporary directory to use for copying files, if unset then the operating system default will be
+used.
+
+##### <a name="url"></a>`url`
+
+archive file source, supports http|https|ftp|file uri.
+(for camptocamp/archive compatibility)
+
+##### <a name="user"></a>`user`
+
+extract command user (using this option will configure the archive file permission to 0644 so the user can read the
+file).
+
+##### <a name="username"></a>`username`
+
+username to download source file.
+
+## Functions
+
+### <a name="archiveartifactory_checksum"></a>`archive::artifactory_checksum`
+
+Type: Ruby 4.x API
+
+A function that returns the checksum value of an artifact stored in Artifactory
+
+#### `archive::artifactory_checksum(Stdlib::HTTPUrl $url, Optional[Enum['sha1','sha256','md5']] $checksum_type)`
+
+The archive::artifactory_checksum function.
+
+Returns: `String` Returns the checksum.
+
+##### `url`
+
+Data type: `Stdlib::HTTPUrl`
+
+The URL of the artifact.
+
+##### `checksum_type`
+
+Data type: `Optional[Enum['sha1','sha256','md5']]`
+
+The checksum type.
+Note the function will raise an error if you ask for sha256 but your artifactory instance doesn't have the sha256 value calculated.
+
+### <a name="archiveartifactory_latest_url"></a>`archive::artifactory_latest_url`
+
+Type: Ruby 4.x API
+
+The archive::artifactory_latest_url function.
+
+#### `archive::artifactory_latest_url(Variant[Stdlib::HTTPUrl, Stdlib::HTTPSUrl] $url, Hash $maven_data)`
+
+The archive::artifactory_latest_url function.
+
+Returns: `Any`
+
+##### `url`
+
+Data type: `Variant[Stdlib::HTTPUrl, Stdlib::HTTPSUrl]`
+
+
+
+##### `maven_data`
+
+Data type: `Hash`
+
+
+
+### <a name="archiveparse_artifactory_url"></a>`archive::parse_artifactory_url`
+
+Type: Ruby 4.x API
+
+A function to parse an Artifactory maven 2 repository URL
+
+#### `archive::parse_artifactory_url(Variant[Stdlib::HTTPUrl, Stdlib::HTTPSUrl] $url)`
+
+A function to parse an Artifactory maven 2 repository URL
+
+Returns: `Any`
+
+##### `url`
+
+Data type: `Variant[Stdlib::HTTPUrl, Stdlib::HTTPSUrl]`
+
+
+
diff --git a/Rakefile b/Rakefile
deleted file mode 100644
index 09701d0..0000000
--- a/Rakefile
+++ /dev/null
@@ -1,82 +0,0 @@
-require 'puppetlabs_spec_helper/rake_tasks'
-
-# load optional tasks for releases
-# only available if gem group releases is installed
-begin
-  require 'voxpupuli/release/rake_tasks'
-rescue LoadError
-end
-
-PuppetLint.configuration.log_format = '%{path}:%{line}:%{check}:%{KIND}:%{message}'
-PuppetLint.configuration.absolute_classname_reverse = true
-
-exclude_paths = %w(
-  pkg/**/*
-  vendor/**/*
-  .vendor/**/*
-  spec/**/*
-)
-PuppetLint.configuration.ignore_paths = exclude_paths
-PuppetSyntax.exclude_paths = exclude_paths
-
-desc 'Auto-correct puppet-lint offenses'
-task 'lint:auto_correct' do
-  Rake::Task[:lint_fix].invoke
-end
-
-desc 'Run acceptance tests'
-RSpec::Core::RakeTask.new(:acceptance) do |t|
-  t.pattern = 'spec/acceptance'
-end
-
-desc 'Run tests'
-task test: [:release_checks]
-
-namespace :check do
-  desc 'Check for trailing whitespace'
-  task :trailing_whitespace do
-    Dir.glob('**/*.md', File::FNM_DOTMATCH).sort.each do |filename|
-      next if filename =~ %r{^((modules|acceptance|\.?vendor|spec/fixtures|pkg)/|REFERENCE.md)}
-      File.foreach(filename).each_with_index do |line, index|
-        if line =~ %r{\s\n$}
-          puts "#{filename} has trailing whitespace on line #{index + 1}"
-          exit 1
-        end
-      end
-    end
-  end
-end
-Rake::Task[:release_checks].enhance ['check:trailing_whitespace']
-
-desc "Run main 'test' task and report merged results to coveralls"
-task test_with_coveralls: [:test] do
-  if Dir.exist?(File.expand_path('../lib', __FILE__))
-    require 'coveralls/rake/task'
-    Coveralls::RakeTask.new
-    Rake::Task['coveralls:push'].invoke
-  else
-    puts 'Skipping reporting to coveralls.  Module has no lib dir'
-  end
-end
-
-desc 'Generate REFERENCE.md'
-task :reference, [:debug, :backtrace] do |t, args|
-  patterns = ''
-  Rake::Task['strings:generate:reference'].invoke(patterns, args[:debug], args[:backtrace])
-end
-
-begin
-  require 'github_changelog_generator/task'
-  GitHubChangelogGenerator::RakeTask.new :changelog do |config|
-    version = (Blacksmith::Modulefile.new).version
-    config.future_release = "v#{version}" if version =~ /^\d+\.\d+.\d+$/
-    config.header = "# Changelog\n\nAll notable changes to this project will be documented in this file.\nEach new release typically also includes the latest modulesync defaults.\nThese should not affect the functionality of the module."
-    config.exclude_labels = %w{duplicate question invalid wontfix wont-fix modulesync skip-changelog}
-    config.user = 'voxpupuli'
-    metadata_json = File.join(File.dirname(__FILE__), 'metadata.json')
-    metadata = JSON.load(File.read(metadata_json))
-    config.project = metadata['name']
-  end
-rescue LoadError
-end
-# vim: syntax=ruby
diff --git a/checksums.json b/checksums.json
deleted file mode 100644
index 47de00d..0000000
--- a/checksums.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-  "CHANGELOG.md": "0f3f7b872013fe94c1338b6e19fbdcfc",
-  "CONTRIBUTING.md": "98c3a171150df9807d81367b50e8d4b3",
-  "Gemfile": "6a5e5e9ecc3ca124c77fb52b9251bd74",
-  "HISTORY.md": "3132d561f9b453a60205c3ea577c8c36",
-  "LICENSE": "05df9f06e6263ae53512bb080bcaf16b",
-  "README.md": "3539ca0b38ae39365825ced74717ec07",
-  "Rakefile": "b7136897d56da6d6696684a1f7bde264",
-  "examples/archive.pp": "5fb7cdce5c6a4c9d0e1b0bbf20504394",
-  "examples/artifactory.pp": "7702ed4d2195ba48f2d99939d2890b7a",
-  "examples/bad_source.pp": "22f4e83c82a080ce5f686c2d8c4b83c7",
-  "examples/cookie.pp": "725e603ffc7f4e64c49e80d9a4afdba7",
-  "examples/duplicate.pp": "eb7ff26392276f13bdf56bbefe88b0e1",
-  "examples/ftp.pp": "00f7e6df416c1d3d6fd2fe422d8b872f",
-  "examples/init.pp": "d41d8cd98f00b204e9800998ecf8427e",
-  "examples/java.pp": "a8477c786c158531dfef9ec69c01b3f4",
-  "examples/large_file.pp": "de93f8d8ea37469f5f148be7e0e87d24",
-  "examples/local.pp": "ad5311164035b604355e2f9ab44fd2ec",
-  "examples/nexus.pp": "1870eeb38c8e36d4585aa968ee378de3",
-  "examples/remote_checksum.pp": "dad8359db0ed2e2dc1f9424d62a51204",
-  "examples/ruby.pp": "3d78e0827481bc911250562fe6b9be28",
-  "examples/s3.pp": "c814db82c4b35b2ee927180eac6766c4",
-  "examples/tomcat.pp": "63ea76de259f6ab4931ce55101b80163",
-  "files/test.zip": "557e2ebb67b35d1fddff18090b6bc26b",
-  "lib/facter/archive_windir.rb": "a646f8234e87041223c97dd919801ad8",
-  "lib/puppet/functions/archive/artifactory_checksum.rb": "69924db7c6b1a3fecea1a8820b6f9a48",
-  "lib/puppet/functions/archive/artifactory_latest_url.rb": "cca81b7782bf47091ddf609d46887840",
-  "lib/puppet/functions/archive/parse_artifactory_url.rb": "0e12552ba58381b72b031e32a88f540c",
-  "lib/puppet/parser/functions/assemble_nexus_url.rb": "d37ee34c8b63728eefeca30ee3965509",
-  "lib/puppet/parser/functions/go_md5.rb": "7d185a1c58e49b716d594f0c825f2623",
-  "lib/puppet/provider/archive/curl.rb": "deda90d62289fdb443606135211dd54c",
-  "lib/puppet/provider/archive/ruby.rb": "859aa5575fca62a7ea13d26bcfcaff01",
-  "lib/puppet/provider/archive/wget.rb": "9e26372f0f3d31e3482b5a318a3cb347",
-  "lib/puppet/type/archive.rb": "a510f5b95b5ea766a3b8f4a098b72ea1",
-  "lib/puppet_x/bodeco/archive.rb": "56be811f4ce886f8e1d88f97ef2c6a81",
-  "lib/puppet_x/bodeco/cacert.pem": "f4a13fcdd32ca18c3e62c7a728ebb378",
-  "lib/puppet_x/bodeco/util.rb": "6961514aebe81450e9c50363b32dae55",
-  "manifests/artifactory.pp": "1a1d44a7784671d7e450470c9aef665e",
-  "manifests/download.pp": "ff36ba0ab48163f7f6f3da77b996f33e",
-  "manifests/go.pp": "b5dd450c9ed91920282b83c20f3731c4",
-  "manifests/init.pp": "5cdcae6be1eaf2dffca0c15cf390fbcb",
-  "manifests/nexus.pp": "7fa6c773be06ced8f6d9af5263fc6312",
-  "manifests/params.pp": "b88e4846da5769faa28453cb78913f5a",
-  "manifests/staging.pp": "dbe1801cf4b57ee47ba0837e7e4e4334",
-  "metadata.json": "236a960bff5153fffa2604dc3d892911",
-  "spec/acceptance/nodesets/archlinux-2-x64.yml": "daafcfcb4c8c8766856f52cec6ae5e86",
-  "spec/acceptance/nodesets/ec2/amazonlinux-2016091.yml": "b3dc2d81918fcc6d56855c88ba5b7ce8",
-  "spec/acceptance/nodesets/ec2/image_templates.yaml": "516f9c4c3407993a100090ce9e1a643c",
-  "spec/acceptance/nodesets/ec2/rhel-73-x64.yml": "e74670a1cb8eea32afc879a5d786f9bd",
-  "spec/acceptance/nodesets/ec2/sles-12sp2-x64.yml": "2506efcc9fb420132edc37bf88d6e21d",
-  "spec/acceptance/nodesets/ec2/ubuntu-1604-x64.yml": "87efd97ff1b073c3448f429a8ffc5a7c",
-  "spec/acceptance/nodesets/ec2/windows-2016-base-x64.yml": "e9db4dd16c60c52b433694130c2583a0",
-  "spec/classes/archive_spec.rb": "722ba909c412aeda8fe4b93c432d2833",
-  "spec/classes/staging_spec.rb": "68103b91c9ac25ada505d8989be52249",
-  "spec/defines/artifactory_spec.rb": "fdd097b893795d360c8fed1da34a9279",
-  "spec/defines/go_spec.rb": "83def23ff4015edc2052e90859cbfd6d",
-  "spec/defines/nexus_spec.rb": "0a82b1b89ccae00a9f6323d1ac1a1775",
-  "spec/fixtures/checksum/artifactory.json": "d6c742ed498965664c6f4f92efe950bb",
-  "spec/fixtures/checksum/gocd.md5": "36c84e1eec9b651d51c1287d02c92105",
-  "spec/functions/artifactory_checksum_spec.rb": "6a93148dd804b3a39820047ca2b57535",
-  "spec/functions/parse_artifactory_url_spec.rb": "91f540eea7c55c3835288117111682bf",
-  "spec/spec_helper.rb": "9f581c2a5e38c83514639d9e687d78d7",
-  "spec/support/shared_behaviour.rb": "5a430e7696895ba255fe556f51ec68b1",
-  "spec/support/shared_contexts.rb": "29aacfd14043366fa8fe9a4f575b5b8e",
-  "spec/unit/facter/archive_windir_spec.rb": "d192bbfe035d0fcf5f656706b88971b7",
-  "spec/unit/puppet/parser/functions/assemble_nexus_url_spec.rb": "60f8e0a9bb04488ee1c4b0f3fb89f4fb",
-  "spec/unit/puppet/parser/functions/go_md5_spec.rb": "a6c73d47c8ddb11e6e1cd740b585938a",
-  "spec/unit/puppet/provider/archive/curl_spec.rb": "70f842adaec3d3904464720cc9d1196b",
-  "spec/unit/puppet/provider/archive/ruby_spec.rb": "a93c9bdde664482882f2863434923212",
-  "spec/unit/puppet/provider/archive/wget_spec.rb": "2b6bd51c9ae5793cec9fadbfb8aff155",
-  "spec/unit/puppet/type/archive_spec.rb": "93d64571c4f70056efd1ce72729641c9",
-  "spec/unit/puppet_x/bodeco/archive_spec.rb": "87074e2b7cf1d2398c178b346a4e0481"
-}
\ No newline at end of file
diff --git a/examples/bad_source.pp b/examples/bad_source.pp
index 6bfd4ec..57407e8 100644
--- a/examples/bad_source.pp
+++ b/examples/bad_source.pp
@@ -2,4 +2,3 @@ archive { '/tmp/jta-1.1.jar':
   ensure => present,
   source => $bad_variable,
 }
-
diff --git a/examples/gs.pp b/examples/gs.pp
new file mode 100644
index 0000000..b7225c6
--- /dev/null
+++ b/examples/gs.pp
@@ -0,0 +1,8 @@
+class { 'archive':
+  gsutil_install => true,
+}
+
+archive { '/tmp/gravatar.png':
+  ensure => present,
+  source => 'gs://bodecoio/gravatar.png',
+}
diff --git a/lib/puppet/functions/archive/artifactory_checksum.rb b/lib/puppet/functions/archive/artifactory_checksum.rb
index e5f9a38..089b3dc 100644
--- a/lib/puppet/functions/archive/artifactory_checksum.rb
+++ b/lib/puppet/functions/archive/artifactory_checksum.rb
@@ -1,5 +1,5 @@
 require 'json'
-require 'puppet_x/bodeco/util'
+require_relative '../../../puppet_x/bodeco/util.rb'
 
 Puppet::Functions.create_function(:'archive::artifactory_checksum') do
   # @summary A function that returns the checksum value of an artifact stored in Artifactory
diff --git a/lib/puppet/functions/archive/artifactory_latest_url.rb b/lib/puppet/functions/archive/artifactory_latest_url.rb
index 30b0c51..57b24d9 100644
--- a/lib/puppet/functions/archive/artifactory_latest_url.rb
+++ b/lib/puppet/functions/archive/artifactory_latest_url.rb
@@ -1,5 +1,5 @@
 require 'json'
-require 'puppet_x/bodeco/util'
+require_relative '../../../puppet_x/bodeco/util.rb'
 
 Puppet::Functions.create_function(:'archive::artifactory_latest_url') do
   dispatch :artifactory_latest_url do
diff --git a/lib/puppet/functions/archive/assemble_nexus_url.rb b/lib/puppet/functions/archive/assemble_nexus_url.rb
new file mode 100644
index 0000000..0ad8d63
--- /dev/null
+++ b/lib/puppet/functions/archive/assemble_nexus_url.rb
@@ -0,0 +1,27 @@
+require 'cgi'
+
+# @summary
+#   Assembles a complete nexus URL from the base url and query parameters
+# @api private
+Puppet::Functions.create_function(:'archive::assemble_nexus_url') do
+  # @param nexus_url
+  #   The base nexus URL
+  # @param params
+  #   The query parameters as a hash
+  #
+  # @return [Stdlib::HTTPUrl]
+  #   The assembled URL
+  dispatch :default_impl do
+    param 'Stdlib::HTTPUrl', :nexus_url
+    param 'Hash', :params
+    return_type 'Stdlib::HTTPUrl'
+  end
+
+  def default_impl(nexus_url, params)
+    service_relative_url = 'service/local/artifact/maven/content'
+
+    query_string = params.to_a.map { |x| "#{x[0]}=#{CGI.escape(x[1])}" }.join('&')
+
+    "#{nexus_url}/#{service_relative_url}?#{query_string}"
+  end
+end
diff --git a/lib/puppet/functions/archive/go_md5.rb b/lib/puppet/functions/archive/go_md5.rb
new file mode 100644
index 0000000..017e421
--- /dev/null
+++ b/lib/puppet/functions/archive/go_md5.rb
@@ -0,0 +1,36 @@
+require_relative '../../../puppet_x/bodeco/util.rb'
+
+# @summary
+#   Retrieves and returns specific file's md5 from GoCD server md5 checksum file
+# @api private
+# @see http://www.thoughtworks.com/products/docs/go/12.4/help/Artifacts_API.html
+Puppet::Functions.create_function(:'archive::go_md5') do
+  # @param username
+  #   GoCD username
+  # @param password
+  #   GoCD password
+  # @param file
+  #   GoCD filename
+  # @param url
+  #   The GoCD MD5 checkum URL
+  # @return [String]
+  #   The MD5 string
+  dispatch :default_impl do
+    param 'String', :username
+    param 'String', :password
+    param 'String[1]', :file
+    param 'Stdlib::HTTPUrl', :url
+    return_type 'String'
+  end
+
+  def default_impl(username, password, file, url)
+    uri = URI(url)
+    response = PuppetX::Bodeco::Util.content(uri, username: username, password: password)
+
+    checksums = response.split("\n")
+    line = checksums.find { |x| x =~ %r{#{file}=} }
+    md5 = line.match(%r{\b[0-9a-f]{5,40}\b}) unless line.nil?
+    raise("Could not parse md5 from url #{url} response: #{response}") unless md5
+    md5[0]
+  end
+end
diff --git a/lib/puppet/parser/functions/assemble_nexus_url.rb b/lib/puppet/parser/functions/assemble_nexus_url.rb
deleted file mode 100644
index be7c6e0..0000000
--- a/lib/puppet/parser/functions/assemble_nexus_url.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-require 'cgi'
-
-module Puppet::Parser::Functions
-  newfunction(:assemble_nexus_url, type: :rvalue) do |args|
-    service_relative_url = 'service/local/artifact/maven/content'
-
-    nexus_url = args[0]
-    params = args[1]
-    query_string = params.to_a.map { |x| "#{x[0]}=#{CGI.escape(x[1])}" }.join('&')
-
-    "#{nexus_url}/#{service_relative_url}?#{query_string}"
-  end
-end
diff --git a/lib/puppet/parser/functions/go_md5.rb b/lib/puppet/parser/functions/go_md5.rb
deleted file mode 100644
index 668cf2d..0000000
--- a/lib/puppet/parser/functions/go_md5.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-require 'puppet_x/bodeco/util'
-
-module Puppet::Parser::Functions
-  # Public: go file md5 checksum
-  #
-  # args[0] - username
-  # args[1] - password
-  # args[2] - file_name
-  # args[3] - go md5 checksum url
-  #
-  # http://www.thoughtworks.com/products/docs/go/12.4/help/Artifacts_API.html
-  #
-  # Returns specific file's md5 from go server md5 checksum file
-  newfunction(:go_md5, type: :rvalue) do |args|
-    raise(ArgumentError, "Invalid go md5 info url #{args}") unless args.size == 4
-
-    username, password, file, url = args
-
-    uri = URI(url)
-    response = PuppetX::Bodeco::Util.content(uri, username: username, password: password)
-
-    checksums = response.split("\n")
-    line = checksums.find { |x| x =~ %r{#{file}=} }
-    md5 = line.match(%r{\b[0-9a-f]{5,40}\b})
-    raise("Could not parse md5 from url#{url} response: #{response.body}") unless md5
-    md5[0]
-  end
-end
diff --git a/lib/puppet/provider/archive/curl.rb b/lib/puppet/provider/archive/curl.rb
index e6969fa..87d207f 100644
--- a/lib/puppet/provider/archive/curl.rb
+++ b/lib/puppet/provider/archive/curl.rb
@@ -1,18 +1,43 @@
+require 'uri'
+require 'tempfile'
+
 Puppet::Type.type(:archive).provide(:curl, parent: :ruby) do
   commands curl: 'curl'
   defaultfor feature: :posix
 
   def curl_params(params)
-    account = [resource[:username], resource[:password]].compact.join(':') if resource[:username]
-    params += optional_switch(account, ['--user', '%s'])
-    params += optional_switch(resource[:cookie], ['--cookie', '%s'])
+    if resource[:username]
+      if resource[:username] =~ %r{\s} || resource[:password] =~ %r{\s}
+        Puppet.warning('Username or password contains a space.  Unable to use netrc file to hide credentials')
+        account = [resource[:username], resource[:password]].compact.join(':')
+        params += optional_switch(account, ['--user', '%s'])
+      else
+        create_netrcfile
+        params += ['--netrc-file', @netrc_file.path]
+      end
+    end
     params += optional_switch(resource[:proxy_server], ['--proxy', '%s'])
     params += ['--insecure'] if resource[:allow_insecure]
     params += resource[:download_options] if resource[:download_options]
+    params += optional_switch(resource[:cookie], ['--cookie', '%s'])
 
     params
   end
 
+  def create_netrcfile
+    @netrc_file = Tempfile.new('.puppet_archive_curl')
+    machine = URI.parse(resource[:source]).host
+    @netrc_file.write("machine #{machine}\nlogin #{resource[:username]}\npassword #{resource[:password]}\n")
+    @netrc_file.close
+  end
+
+  def delete_netrcfile
+    return if @netrc_file.nil?
+
+    @netrc_file.unlink
+    @netrc_file = nil
+  end
+
   def download(filepath)
     params = curl_params(
       [
@@ -25,7 +50,11 @@ Puppet::Type.type(:archive).provide(:curl, parent: :ruby) do
       ]
     )
 
-    curl(params)
+    begin
+      curl(params)
+    ensure
+      delete_netrcfile
+    end
   end
 
   def remote_checksum
@@ -38,6 +67,10 @@ Puppet::Type.type(:archive).provide(:curl, parent: :ruby) do
       ]
     )
 
-    curl(params)[%r{\b[\da-f]{32,128}\b}i]
+    begin
+      curl(params)[%r{\b[\da-f]{32,128}\b}i]
+    ensure
+      delete_netrcfile
+    end
   end
 end
diff --git a/lib/puppet/provider/archive/ruby.rb b/lib/puppet/provider/archive/ruby.rb
index 53b065f..244dbe8 100644
--- a/lib/puppet/provider/archive/ruby.rb
+++ b/lib/puppet/provider/archive/ruby.rb
@@ -66,6 +66,7 @@ require 'tempfile'
 
 Puppet::Type.type(:archive).provide(:ruby) do
   optional_commands aws: 'aws'
+  optional_commands gsutil: 'gsutil'
   defaultfor feature: :microsoft_windows
   attr_reader :archive_checksum
 
@@ -179,6 +180,8 @@ Puppet::Type.type(:archive).provide(:ruby) do
       FileUtils.copy(Puppet::Util.uri_to_path(uri), temppath)
     when %r{^s3}
       s3_download(temppath)
+    when %r{^gs}
+      gs_download(temppath)
     when nil
       raise(Puppet::Error, 'Unable to fetch archive, the source parameter is nil.')
     else
@@ -191,6 +194,8 @@ Puppet::Type.type(:archive).provide(:ruby) do
       archive = PuppetX::Bodeco::Archive.new(temppath)
       actual_checksum = archive.checksum(resource[:checksum_type])
       if actual_checksum != checksum
+        destroy
+        FileUtils.rm_f(temppath) if File.exist?(temppath)
         raise(Puppet::Error, "Download file checksum mismatch (expected: #{checksum} actual: #{actual_checksum})")
       end
     end
@@ -236,6 +241,17 @@ Puppet::Type.type(:archive).provide(:ruby) do
     aws(params)
   end
 
+  def gs_download(path)
+    params = [
+      'cp',
+      resource[:source],
+      path
+    ]
+    params += resource[:download_options] if resource[:download_options]
+
+    gsutil(params)
+  end
+
   def optional_switch(value, option)
     if value
       option.map { |flags| flags % value }
diff --git a/lib/puppet/provider/archive/wget.rb b/lib/puppet/provider/archive/wget.rb
index fc8e0b5..b360f81 100644
--- a/lib/puppet/provider/archive/wget.rb
+++ b/lib/puppet/provider/archive/wget.rb
@@ -2,8 +2,10 @@ Puppet::Type.type(:archive).provide(:wget, parent: :ruby) do
   commands wget: 'wget'
 
   def wget_params(params)
-    params += optional_switch(resource[:username], ['--user=%s'])
-    params += optional_switch(resource[:password], ['--password=%s'])
+    username = Shellwords.shellescape(resource[:username]) if resource[:username]
+    password = Shellwords.shellescape(resource[:password]) if resource[:password]
+    params += optional_switch(username, ['--user=%s'])
+    params += optional_switch(password, ['--password=%s'])
     params += optional_switch(resource[:cookie], ['--header="Cookie: %s"'])
     params += optional_switch(resource[:proxy_server], ['-e use_proxy=yes', "-e #{resource[:proxy_type]}_proxy=#{resource[:proxy_server]}"])
     params += ['--no-check-certificate'] if resource[:allow_insecure]
diff --git a/lib/puppet/type/archive.rb b/lib/puppet/type/archive.rb
index b6285c6..8a0c2ff 100644
--- a/lib/puppet/type/archive.rb
+++ b/lib/puppet/type/archive.rb
@@ -122,9 +122,9 @@ Puppet::Type.newtype(:archive) do
   end
 
   newparam(:source) do
-    desc 'archive file source, supports puppet|http|https|ftp|file|s3 uri.'
+    desc 'archive file source, supports puppet|http|https|ftp|file|s3|gs uri.'
     validate do |value|
-      unless value =~ URI.regexp(%w[puppet http https ftp file s3]) || Puppet::Util.absolute_path?(value)
+      unless value =~ URI.regexp(%w[puppet http https ftp file s3 gs]) || Puppet::Util.absolute_path?(value)
         raise ArgumentError, "invalid source url: #{value}"
       end
     end
@@ -235,7 +235,7 @@ Puppet::Type.newtype(:archive) do
   end
 
   newparam(:download_options) do
-    desc 'provider download options (affects curl, wget, and only s3 downloads for ruby provider)'
+    desc 'provider download options (affects curl, wget, gs, and only s3 downloads for ruby provider)'
 
     validate do |val|
       unless val.is_a?(::String) || val.is_a?(::Array)
@@ -266,6 +266,10 @@ Puppet::Type.newtype(:archive) do
     ['install_aws_cli']
   end
 
+  autorequire(:exec) do
+    ['install_gsutil']
+  end
+
   validate do
     filepath = Pathname.new(self[:path])
     self[:filename] = filepath.basename.to_s
diff --git a/lib/puppet_x/bodeco/archive.rb b/lib/puppet_x/bodeco/archive.rb
index 506feb6..9915bdb 100644
--- a/lib/puppet_x/bodeco/archive.rb
+++ b/lib/puppet_x/bodeco/archive.rb
@@ -65,6 +65,8 @@ module PuppetX
           'C:\\Program Files\\7-Zip\\7z.exe'
         elsif File.directory?('C:\\Program Files (x86)\\7-zip')
           'C:\\Program Files (x86)\\7-Zip\\7z.exe'
+        elsif system("where 7z.exe")
+          '7z.exe'
         elsif @file_path =~ %r{.zip"$}
           # Fallback to powershell for zipfiles - this works with windows
           # 2012+ if your powershell/.net is too old the script will fail
@@ -140,6 +142,12 @@ module PuppetX
           when %r{(\.zip|\.war|\.jar)$}
             opt = parse_flags('-o', options, 'zip')
             "unzip #{opt} #{@file_path}"
+          when %r{(\.bz2)$}
+            opt = parse_flags('-d', options, 'bunzip2')
+            "bunzip2 #{opt} #{@file_path}"
+          when %r{(\.tar\.Z)$}
+            tar_opt = parse_flags('xf', options, 'tar')
+            "uncompress -c #{@file_path} | tar #{tar_opt} -"
           else
             raise NotImplementedError, "Unknown filetype: #{@file}"
           end
diff --git a/lib/puppet_x/bodeco/cacert.pem b/lib/puppet_x/bodeco/cacert.pem
index 8e92f77..264923b 100644
--- a/lib/puppet_x/bodeco/cacert.pem
+++ b/lib/puppet_x/bodeco/cacert.pem
@@ -1,7 +1,7 @@
 ##
 ## Bundle of CA Root Certificates
 ##
-## Certificate data from Mozilla as of: Wed May 15 03:12:09 2019 GMT
+## Certificate data from Mozilla as of: Tue May 25 03:12:05 2021 GMT
 ##
 ## This is a bundle of X.509 certificates of public Certificate Authorities
 ## (CA). These were automatically extracted from Mozilla's root certificates
@@ -13,8 +13,8 @@
 ## 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: 61eaa79ac46d923f2f74dfe401189424e96fa8736102b47ba2cdb4ea19af2cc8
+## Conversion done with mk-ca-bundle.pl version 1.28.
+## SHA256: e292bd4e2d500c86df45b830d89417be5c42ee670408f1d2c454c63d8a782865
 ##
 
 
@@ -61,30 +61,6 @@ BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
 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-----
@@ -130,30 +106,6 @@ 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-----
@@ -180,87 +132,6 @@ 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-----
-
 Comodo AAA Services root
 ========================
 -----BEGIN CERTIFICATE-----
@@ -496,36 +367,6 @@ 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-----
@@ -592,28 +433,6 @@ 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-----
@@ -696,78 +515,6 @@ 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-----
@@ -876,29 +623,6 @@ 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-----
@@ -921,28 +645,6 @@ PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
 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-----
@@ -1016,136 +718,6 @@ 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-----
@@ -1170,38 +742,6 @@ 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-----
@@ -1353,82 +893,6 @@ 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-----
@@ -1833,30 +1297,6 @@ 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-----
@@ -2419,36 +1859,6 @@ 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-----
@@ -2613,37 +2023,6 @@ 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-----
@@ -2906,37 +2285,6 @@ 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-----
@@ -3505,3 +2853,286 @@ hcErulWuBurQB7Lcq9CClnXO0lD+mefPL5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB
 60PZ2Pierc+xYw5F9KBaLJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fq
 dBb9HxEGmpv0
 -----END CERTIFICATE-----
+
+Entrust Root Certification Authority - G4
+=========================================
+-----BEGIN CERTIFICATE-----
+MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAwgb4xCzAJBgNV
+BAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3Qu
+bmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1
+dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1
+dGhvcml0eSAtIEc0MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYT
+AlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0
+L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhv
+cml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhv
+cml0eSAtIEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3D
+umSXbcr3DbVZwbPLqGgZ2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV
+3imz/f3ET+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j5pds
+8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAMC1rlLAHGVK/XqsEQ
+e9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73TDtTUXm6Hnmo9RR3RXRv06QqsYJn7
+ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNXwbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5X
+xNMhIWNlUpEbsZmOeX7m640A2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV
+7rtNOzK+mndmnqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8
+dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwlN4y6mACXi0mW
+Hv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNjc0kCAwEAAaNCMEAwDwYDVR0T
+AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9n
+MA0GCSqGSIb3DQEBCwUAA4ICAQAS5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4Q
+jbRaZIxowLByQzTSGwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht
+7LGrhFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/B7NTeLUK
+YvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uIAeV8KEsD+UmDfLJ/fOPt
+jqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbwH5Lk6rWS02FREAutp9lfx1/cH6NcjKF+
+m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKW
+RGhXxNUzzxkvFMSUHHuk2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjA
+JOgc47OlIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk5F6G
++TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuYn/PIjhs4ViFqUZPT
+kcpG2om3PVODLAgfi49T3f+sHw==
+-----END CERTIFICATE-----
+
+Microsoft ECC Root Certificate Authority 2017
+=============================================
+-----BEGIN CERTIFICATE-----
+MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
+UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQgRUND
+IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4
+MjMxNjA0WjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw
+NAYDVQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQ
+BgcqhkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZRogPZnZH6
+thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYbhGBKia/teQ87zvH2RPUB
+eMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIy5lycFIM
++Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlf
+Xu5gKcs68tvWMoQZP3zVL8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaR
+eNtUjGUBiudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M=
+-----END CERTIFICATE-----
+
+Microsoft RSA Root Certificate Authority 2017
+=============================================
+-----BEGIN CERTIFICATE-----
+MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG
+EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQg
+UlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIw
+NzE4MjMwMDIzWjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
+MTYwNAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcw
+ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZNt9GkMml
+7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0ZdDMbRnMlfl7rEqUrQ7e
+S0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw7
+1VdyvD/IybLeS2v4I2wDwAW9lcfNcztmgGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+
+dkC0zVJhUXAoP8XFWvLJjEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49F
+yGcohJUcaDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaGYaRS
+MLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6W6IYZVcSn2i51BVr
+lMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4KUGsTuqwPN1q3ErWQgR5WrlcihtnJ
+0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH+FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJ
+ClTUFLkqqNfs+avNJVgyeY+QW5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYw
+DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC
+NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZCLgLNFgVZJ8og
+6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OCgMNPOsduET/m4xaRhPtthH80
+dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk
++ONVFT24bcMKpBLBaYVu32TxU5nhSnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex
+/2kskZGT4d9Mozd2TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDy
+AmH3pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGRxpl/j8nW
+ZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiAppGWSZI1b7rCoucL5mxAyE
+7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKT
+c0QWbej09+CVgI+WXTik9KveCjCHk9hNAHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D
+5KbvtwEwXlGjefVwaaZBRA+GsCyRxj3qrg+E
+-----END CERTIFICATE-----
+
+e-Szigno Root CA 2017
+=====================
+-----BEGIN CERTIFICATE-----
+MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNVBAYTAkhVMREw
+DwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUt
+MjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJvb3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZa
+Fw00MjA4MjIxMjA3MDZaMHExCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UE
+CgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3pp
+Z25vIFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtvxie+RJCx
+s1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+HWyx7xf58etqjYzBhMA8G
+A1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSHERUI0arBeAyxr87GyZDv
+vzAEwDAfBgNVHSMEGDAWgBSHERUI0arBeAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEA
+tVfd14pVCzbhhkT61NlojbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxO
+svxyqltZ+efcMQ==
+-----END CERTIFICATE-----
+
+certSIGN Root CA G2
+===================
+-----BEGIN CERTIFICATE-----
+MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlJPMRQw
+EgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjAeFw0xNzAy
+MDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJBgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lH
+TiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
+ADCCAgoCggIBAMDFdRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05
+N0IwvlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZuIt4Imfk
+abBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhpn+Sc8CnTXPnGFiWeI8Mg
+wT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKscpc/I1mbySKEwQdPzH/iV8oScLumZfNp
+dWO9lfsbl83kqK/20U6o2YpxJM02PbyWxPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91Qqh
+ngLjYl/rNUssuHLoPj1PrCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732
+jcZZroiFDsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fxDTvf
+95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgyLcsUDFDYg2WD7rlc
+z8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6CeWRgKRM+o/1Pcmqr4tTluCRVLERL
+iohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1Ud
+DgQWBBSCIS1mxteg4BXrzkwJd8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOB
+ywaK8SJJ6ejqkX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC
+b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQlqiCA2ClV9+BB
+/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0OJD7uNGzcgbJceaBxXntC6Z5
+8hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+cNywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5
+BiKDUyUM/FHE5r7iOZULJK2v0ZXkltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklW
+atKcsWMy5WHgUyIOpwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tU
+Sxfj03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZkPuXaTH4M
+NMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE1LlSVHJ7liXMvGnjSG4N
+0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MXQRBdJ3NghVdJIgc=
+-----END CERTIFICATE-----
+
+Trustwave Global Certification Authority
+========================================
+-----BEGIN CERTIFICATE-----
+MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJV
+UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2
+ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9u
+IEF1dGhvcml0eTAeFw0xNzA4MjMxOTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJV
+UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2
+ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9u
+IEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALldUShLPDeS0YLOvR29
+zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0XznswuvCAAJWX/NKSqIk4cXGIDtiLK0thAf
+LdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4Bq
+stTnoApTAbqOl5F2brz81Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9o
+WN0EACyW80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotPJqX+
+OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1lRtzuzWniTY+HKE40
+Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfwhI0Vcnyh78zyiGG69Gm7DIwLdVcE
+uE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm
++9jaJXLE9gCxInm943xZYkqcBW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqj
+ifLJS3tBEW1ntwiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud
+EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1UdDwEB/wQEAwIB
+BjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W0OhUKDtkLSGm+J1WE2pIPU/H
+PinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfeuyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0H
+ZJDmHvUqoai7PF35owgLEQzxPy0QlG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla
+4gt5kNdXElE1GYhBaCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5R
+vbbEsLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPTMaCm/zjd
+zyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qequ5AvzSxnI9O4fKSTx+O
+856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxhVicGaeVyQYHTtgGJoC86cnn+OjC/QezH
+Yj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu
+3R3y4G5OBVixwJAWKqQ9EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP
+29FpHOTKyeC2nOnOcXHebD8WpHk=
+-----END CERTIFICATE-----
+
+Trustwave Global ECC P256 Certification Authority
+=================================================
+-----BEGIN CERTIFICATE-----
+MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYDVQQGEwJVUzER
+MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI
+b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZp
+Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYD
+VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy
+dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1
+NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH77bOYj
+43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoNFWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqm
+P62jQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt
+0UrrdaVKEJmzsaGLSvcwCgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjz
+RM4q3wghDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7
+-----END CERTIFICATE-----
+
+Trustwave Global ECC P384 Certification Authority
+=================================================
+-----BEGIN CERTIFICATE-----
+MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYDVQQGEwJVUzER
+MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI
+b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZp
+Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYD
+VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy
+dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4
+NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuBBAAiA2IABGvaDXU1CDFH
+Ba5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJj9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr
+/TklZvFe/oyujUF5nQlgziip04pt89ZF1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNV
+HQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNn
+ADBkAjA3AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsCMGcl
+CrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVuSw==
+-----END CERTIFICATE-----
+
+NAVER Global Root Certification Authority
+=========================================
+-----BEGIN CERTIFICATE-----
+MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEMBQAwaTELMAkG
+A1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRGT1JNIENvcnAuMTIwMAYDVQQD
+DClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4
+NDJaFw0zNzA4MTgyMzU5NTlaMGkxCzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVT
+UyBQTEFURk9STSBDb3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVAiQqrDZBb
+UGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH38dq6SZeWYp34+hInDEW
++j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lEHoSTGEq0n+USZGnQJoViAbbJAh2+g1G7
+XNr4rRVqmfeSVPc0W+m/6imBEtRTkZazkVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2
+aacp+yPOiNgSnABIqKYPszuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4
+Yb8ObtoqvC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHfnZ3z
+VHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaGYQ5fG8Ir4ozVu53B
+A0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo0es+nPxdGoMuK8u180SdOqcXYZai
+cdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3aCJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejy
+YhbLgGvtPe31HzClrkvJE+2KAQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNV
+HQ4EFgQU0p+I36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB
+Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoNqo0hV4/GPnrK
+21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatjcu3cvuzHV+YwIHHW1xDBE1UB
+jCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bx
+hYTeodoS76TiEJd6eN4MUZeoIUCLhr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTg
+E34h5prCy8VCZLQelHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTH
+D8z7p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8piKCk5XQ
+A76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLRLBT/DShycpWbXgnbiUSY
+qqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oG
+I/hGoiLtk/bdmuYqh7GYVPEi92tF4+KOdh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmg
+kpzNNIaRkPpkUZ3+/uul9XXeifdy
+-----END CERTIFICATE-----
+
+AC RAIZ FNMT-RCM SERVIDORES SEGUROS
+===================================
+-----BEGIN CERTIFICATE-----
+MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQswCQYDVQQGEwJF
+UzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgwFgYDVQRhDA9WQVRFUy1RMjgy
+NjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1SQ00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4
+MTIyMDA5MzczM1oXDTQzMTIyMDA5MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQt
+UkNNMQ4wDAYDVQQLDAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNB
+QyBSQUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuBBAAiA2IA
+BPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LHsbI6GA60XYyzZl2hNPk2
+LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oKUm8BA06Oi6NCMEAwDwYDVR0TAQH/BAUw
+AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqG
+SM49BAMDA2kAMGYCMQCuSuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoD
+zBOQn5ICMQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJyv+c=
+-----END CERTIFICATE-----
+
+GlobalSign Root R46
+===================
+-----BEGIN CERTIFICATE-----
+MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUAMEYxCzAJBgNV
+BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJv
+b3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAX
+BgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIi
+MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08Es
+CVeJOaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQGvGIFAha/
+r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud316HCkD7rRlr+/fKYIje
+2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo0q3v84RLHIf8E6M6cqJaESvWJ3En7YEt
+bWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSEy132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvj
+K8Cd+RTyG/FWaha/LIWFzXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD4
+12lPFzYE+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCNI/on
+ccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzsx2sZy/N78CsHpdls
+eVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqaByFrgY/bxFn63iLABJzjqls2k+g9
+vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYD
+VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEM
+BQADggIBAHx47PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg
+JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti2kM3S+LGteWy
+gxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIkpnnpHs6i58FZFZ8d4kuaPp92
+CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRFFRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZm
+OUdkLG5NrmJ7v2B0GbhWrJKsFjLtrWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qq
+JZ4d16GLuc1CLgSkZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwye
+qiv5u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP4vkYxboz
+nxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6N3ec592kD3ZDZopD8p/7
+DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3vouXsXgxT7PntgMTzlSdriVZzH81Xwj3
+QEUxeCp6
+-----END CERTIFICATE-----
+
+GlobalSign Root E46
+===================
+-----BEGIN CERTIFICATE-----
+MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYxCzAJBgNVBAYT
+AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJvb3Qg
+RTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNV
+BAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcq
+hkjOPQIBBgUrgQQAIgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkB
+jtjqR+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGddyXqBPCCj
+QjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQxCpCPtsad0kRL
+gLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZk
+vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+
+CAezNIm8BZ/3Hobui3A=
+-----END CERTIFICATE-----
diff --git a/lib/puppet_x/bodeco/util.rb b/lib/puppet_x/bodeco/util.rb
index 96ac6df..67743ba 100644
--- a/lib/puppet_x/bodeco/util.rb
+++ b/lib/puppet_x/bodeco/util.rb
@@ -14,7 +14,7 @@ module PuppetX
       end
 
       #
-      # This allows you to use a puppet syntax for a file and return it's content.
+      # This allows you to use a puppet syntax for a file and return its content.
       #
       # @example
       #  puppet_download 'puppet:///modules/my_module_name/my_file.dat
@@ -29,8 +29,8 @@ module PuppetX
         # trial and error method. First we start withe the default. And if it doesn't work, we try the
         # other ones
         status = load_file_with_any_terminus(url)
-        raise ArgumentError, "Could not retrieve information from environment #{Puppet['environment']} source(s) #{url}'" unless status
-        File.open(filepath, 'w') { |file| file.write(status.content) }
+        raise ArgumentError, "Previous error(s) resulted in Puppet being unable to retrieve information from environment #{Puppet['environment']} source(s) #{url}'\nMost probable cause is file not found." unless status
+        File.open(filepath, 'wb') { |file| file.write(status.content) }
       end
 
       # @private
@@ -41,7 +41,7 @@ module PuppetX
           with_terminus(terminus) do
             begin
               content = Puppet::FileServing::Content.indirection.find(url)
-            rescue SocketError, Timeout::Error, Errno::ECONNREFUSED, Errno::EHOSTDOWN, Errno::EHOSTUNREACH, Errno::ETIMEDOUT
+            rescue SocketError, Timeout::Error, Errno::ECONNREFUSED, Errno::EHOSTDOWN, Errno::EHOSTUNREACH, Errno::ETIMEDOUT, Puppet::HTTP::RouteError
               # rescue any network error
             end
             return content if content
diff --git a/manifests/artifactory.pp b/manifests/artifactory.pp
index 6c60172..27cace6 100644
--- a/manifests/artifactory.pp
+++ b/manifests/artifactory.pp
@@ -50,9 +50,10 @@ define archive::artifactory (
   Optional[String]               $extract_path = undef,
   Optional[String]               $creates      = undef,
   Optional[Boolean]              $cleanup      = undef,
+  Optional[String]               $username     = undef,
+  Optional[String]               $password     = undef,
   Optional[Stdlib::Absolutepath] $archive_path = undef,
 ) {
-
   include archive::params
 
   if $archive_path {
@@ -66,7 +67,7 @@ define archive::artifactory (
   }
 
   $maven2_data = archive::parse_artifactory_url($url)
-  if $maven2_data and $maven2_data['folder_iteg_rev'] == 'SNAPSHOT'{
+  if $maven2_data and $maven2_data['folder_iteg_rev'] == 'SNAPSHOT' {
     # URL represents a SNAPSHOT version. eg 'http://artifactory.example.com/artifactory/repo/com/example/artifact/0.0.1-SNAPSHOT/artifact-0.0.1-SNAPSHOT.zip'
     # Only Artifactory Pro lets you download this directly but the corresponding fileinfo endpoint (where the sha1 checksum is published) doesn't exist.
     # This means we can't use the artifactory_sha1 function
@@ -85,6 +86,8 @@ define archive::artifactory (
     path          => $file_path,
     extract       => $extract,
     extract_path  => $extract_path,
+    username      => $username,
+    password      => $password,
     source        => $file_url,
     checksum      => $sha1,
     checksum_type => 'sha1',
diff --git a/manifests/download.pp b/manifests/download.pp
index c7be9a6..c9f4d67 100644
--- a/manifests/download.pp
+++ b/manifests/download.pp
@@ -35,13 +35,13 @@ define archive::download (
   Boolean                       $checksum         = true,
   Optional[String]              $digest_url       = undef,
   Optional[String]              $digest_string    = undef,
-  Optional[Enum['none', 'md5', 'sha1', 'sha2','sha256', 'sha384', 'sha512']] $digest_type      = 'md5',   # bad default!
+  Enum['none', 'md5', 'sha1', 'sha2','sha256', 'sha384', 'sha512'] $digest_type = 'md5',   # bad default!
   Integer                       $timeout          = 120,     # ignored
   Stdlib::Compat::Absolute_path $src_target       = '/usr/src',
   Boolean                       $allow_insecure   = false,
   Boolean                       $follow_redirects = false,   # ignored (default)
   Boolean                       $verbose          = true,    # ignored
-  String                        $path             = $::path, # ignored
+  String                        $path             = $facts['path'], # ignored
   Optional[String]              $proxy_server     = undef,
   Optional[String]              $user             = undef,
 ) {
diff --git a/manifests/go.pp b/manifests/go.pp
index 8fde0a7..d814bfb 100644
--- a/manifests/go.pp
+++ b/manifests/go.pp
@@ -17,7 +17,6 @@ define archive::go (
   Optional[Boolean]         $cleanup      = undef,
   Optional[Stdlib::Compat::Absolute_path] $archive_path = undef,
 ) {
-
   include archive::params
 
   if $archive_path {
@@ -40,7 +39,7 @@ define archive::go (
     extract       => $extract,
     extract_path  => $extract_path,
     source        => $file_url,
-    checksum      => go_md5($username, $password, $name, $md5_url),
+    checksum      => archive::go_md5($username, $password, $name, $md5_url),
     checksum_type => 'md5',
     creates       => $creates,
     cleanup       => $cleanup,
diff --git a/manifests/init.pp b/manifests/init.pp
index ea7001c..af5f17b 100644
--- a/manifests/init.pp
+++ b/manifests/init.pp
@@ -1,32 +1,49 @@
-# Class: archive
-# ==============
+# @summary Manages archive module's dependencies.
 #
-# Manages archive modules dependencies.
+# @example On Windows, ensure 7zip is installed using the default `chocolatey` provider.
+#   include archive
 #
-# Parameters
-# ----------
+# @example On Windows, install a 7zip MSI with the native `windows` package provider.
+#   class { 'archive':
+#     seven_zip_name     => '7-Zip 9.20 (x64 edition)',
+#     seven_zip_source   => 'C:/Windows/Temp/7z920-x64.msi',
+#     seven_zip_provider => 'windows',
+#   }
 #
-# * seven_zip_name: 7zip package name.
-# * seven_zip_provider: 7zip package provider (accepts windows/chocolatey).
-# * seven_zip_source: alternative package source.
-# * aws_cli_install: install aws cli command (default: false).
+# @example Install the AWS CLI tool. (Not supported on Windows).
+#   class { 'archive':
+#     aws_cli_install => true,
+#   }
 #
-# Examples
-# --------
+# @example Deploy a specific archive
+#   class { 'archive':
+#     archives => { '/tmp/jta-1.1.jar' => {
+#                     'ensure' => 'present',
+#                     'source'  => 'http://central.maven.org/maven2/javax/transaction/jta/1.1/jta-1.1.jar',
+#                     }, }
+#   }
 #
-# class { 'archive':
-#   seven_zip_name     => '7-Zip 9.20 (x64 edition)',
-#   seven_zip_source   => 'C:/Windows/Temp/7z920-x64.msi',
-#   seven_zip_provider => 'windows',
-# }
+# @param seven_zip_name
+#   7zip package name.  This parameter only applies to Windows.
+# @param seven_zip_provider
+#   7zip package provider.  This parameter only applies to Windows where it defaults to `chocolatey`. Can be set to an empty string, (or `undef` via hiera), if you don't want this module to manage 7zip.
+# @param seven_zip_source
+#   Alternative package source for 7zip.  This parameter only applies to Windows.
+# @param aws_cli_install
+#   Installs the AWS CLI command needed for downloading from S3 buckets.  This parameter is currently not implemented on Windows.
+# @param gsutil_install
+#   Installs the GSUtil CLI command needed for downloading from GS buckets.  This parameter is currently not implemented on Windows.
 #
+# @param archives
+#   A hash of archive resources this module should create.
 class archive (
-  Optional[String] $seven_zip_name     = $archive::params::seven_zip_name,
-  Optional[String] $seven_zip_provider = $archive::params::seven_zip_provider,
-  Optional[String] $seven_zip_source   = undef,
-  Boolean          $aws_cli_install    = false,
+  Optional[String[1]]                       $seven_zip_name     = $archive::params::seven_zip_name,
+  Optional[Enum['chocolatey','windows','']] $seven_zip_provider = $archive::params::seven_zip_provider,
+  Optional[String[1]]                       $seven_zip_source   = undef,
+  Boolean                                   $aws_cli_install    = false,
+  Boolean                                   $gsutil_install     = false,
+  Hash                                      $archives           = {},
 ) inherits archive::params {
-
   if $facts['os']['family'] == 'Windows' and !($seven_zip_provider in ['', undef]) {
     package { '7zip':
       ensure   => present,
@@ -48,7 +65,7 @@ class archive (
 
       archive { 'awscli-bundle.zip':
         ensure       => present,
-        path         =>  '/opt/awscli-bundle/awscli-bundle.zip',
+        path         => '/opt/awscli-bundle/awscli-bundle.zip',
         source       => 'https://s3.amazonaws.com/aws-cli/awscli-bundle.zip',
         extract      => true,
         extract_path => '/opt',
@@ -63,4 +80,38 @@ class archive (
       }
     }
   }
+
+  if $gsutil_install {
+    # TODO: Windows support.
+    if $facts['os']['family'] != 'Windows' {
+      # Using bundled install option:
+      # https://cloud.google.com/storage/docs/quickstart-gsutil
+
+      file { '/opt/gsutil-bundle':
+        ensure => 'directory',
+      }
+
+      archive { 'gsutil.zip':
+        ensure       => present,
+        path         => '/opt/gsutil-bundle/gsutil.zip',
+        source       => 'https://storage.googleapis.com/pub/gsutil.zip',
+        extract      => true,
+        extract_path => '/opt',
+        creates      => '/opt/gsutil-bundle/gsutil',
+        cleanup      => true,
+      }
+
+      exec { 'install_gsutil':
+        command     => '/opt/gsutil-bundle/gsutil/setup.py install -q',
+        refreshonly => true,
+        subscribe   => Archive['gsutil.zip'],
+      }
+    }
+  }
+
+  $archives.each |$archive_name, $archive_settings| {
+    archive { $archive_name:
+      * => $archive_settings,
+    }
+  }
 }
diff --git a/manifests/nexus.pp b/manifests/nexus.pp
index 16eb854..2a9395b 100644
--- a/manifests/nexus.pp
+++ b/manifests/nexus.pp
@@ -44,8 +44,8 @@ define archive::nexus (
   Optional[String]  $proxy_server    = undef,
   Optional[String]  $proxy_type      = undef,
   Optional[Boolean] $allow_insecure  = undef,
+  Optional[Stdlib::Absolutepath] $temp_dir = undef,
 ) {
-
   include archive::params
 
   $artifact_info = split($gav, ':')
@@ -55,7 +55,6 @@ define archive::nexus (
   $version = $artifact_info[2]
 
   $query_params = {
-
     'g' => $group_id,
     'a' => $artifact_id,
     'v' => $version,
@@ -63,7 +62,6 @@ define archive::nexus (
     'p' => $packaging,
     'c' => $classifier,
     'e' => $extension,
-
   }.filter |$keys, $values| { $values != undef }
 
   if $use_nexus3_urls {
@@ -72,12 +70,23 @@ define archive::nexus (
     } else {
       $c = ''
     }
-    $artifact_url = sprintf('%s/repository/%s/%s/%s/%s/%s-%s%s.%s', $url,
-                            $repository, regsubst($group_id, '\.', '/', 'G'), $artifact_id,
-                            $version, $artifact_id, $version, $c, $packaging)
+
+    $artifact_url = sprintf(
+      '%s/repository/%s/%s/%s/%s/%s-%s%s.%s',
+      $url,
+      $repository,
+      regsubst($group_id, '\.', '/', 'G'),
+      $artifact_id,
+      $version,
+      $artifact_id,
+      $version,
+      $c,
+      $packaging
+    )
+
     $checksum_url = sprintf('%s.%s', $artifact_url, $checksum_type)
   } else {
-    $artifact_url = assemble_nexus_url($url, $query_params)
+    $artifact_url = archive::assemble_nexus_url($url, $query_params)
     $checksum_url = regsubst($artifact_url, "p=${packaging}", "p=${packaging}.${checksum_type}")
   }
   archive { $name:
@@ -99,6 +108,7 @@ define archive::nexus (
     proxy_server    => $proxy_server,
     proxy_type      => $proxy_type,
     allow_insecure  => $allow_insecure,
+    temp_dir        => $temp_dir,
   }
 
   $file_owner = pick($owner, $archive::params::owner)
diff --git a/manifests/params.pp b/manifests/params.pp
index afd4fc8..dfeb4bb 100644
--- a/manifests/params.pp
+++ b/manifests/params.pp
@@ -1,12 +1,9 @@
-# Class: archive::params
-# ======================
-#
-# archive settings such as default user and file mode.
-#
+# @summary OS specific `archive` settings such as default user and file mode.
+# @api private
 class archive::params {
   case $facts['os']['family'] {
     'Windows': {
-      $path               = $::archive_windir
+      $path               = $facts['archive_windir']
       $owner              = 'S-1-5-32-544' # Adminstrators
       $group              = 'S-1-5-18'     # SYSTEM
       $mode               = '0640'
diff --git a/metadata.json b/metadata.json
index 6059f42..c117aba 100644
--- a/metadata.json
+++ b/metadata.json
@@ -1,45 +1,29 @@
 {
-  "name": "puppet-archive",
-  "version": "4.1.0",
-  "author": "Vox Pupuli",
-  "summary": "Compressed archive file download and extraction with native types/providers for Windows and Unix",
-  "license": "Apache-2.0",
-  "source": "https://github.com/voxpupuli/puppet-archive",
-  "project_page": "https://github.com/voxpupuli/puppet-archive",
-  "issues_url": "https://github.com/voxpupuli/puppet-archive/issues",
-  "dependencies": [
-    {
-      "name": "puppetlabs/stdlib",
-      "version_requirement": ">= 4.18.0 < 7.0.0"
-    }
-  ],
-  "data_provider": null,
   "operatingsystem_support": [
     {
       "operatingsystem": "RedHat",
       "operatingsystemrelease": [
-        "6",
-        "7"
+        "7",
+        "8"
       ]
     },
     {
       "operatingsystem": "CentOS",
       "operatingsystemrelease": [
-        "6",
-        "7"
+        "7",
+        "8"
       ]
     },
     {
       "operatingsystem": "OracleLinux",
       "operatingsystemrelease": [
-        "6",
-        "7"
+        "7",
+        "8"
       ]
     },
     {
       "operatingsystem": "Scientific",
       "operatingsystemrelease": [
-        "6",
         "7"
       ]
     },
@@ -52,8 +36,15 @@
     {
       "operatingsystem": "Ubuntu",
       "operatingsystemrelease": [
-        "16.04",
-        "18.04"
+        "18.04",
+        "20.04"
+      ]
+    },
+    {
+      "operatingsystem": "Debian",
+      "operatingsystemrelease": [
+        "10",
+        "11"
       ]
     },
     {
@@ -66,31 +57,50 @@
     {
       "operatingsystem": "Windows",
       "operatingsystemrelease": [
-        "Server 2003",
-        "Server 2003 R2",
-        "Server 2008",
-        "Server 2008 R2",
-        "Server 2012",
-        "Server 2012 R2",
-        "2016",
-        "7",
-        "8"
+        "2016"
       ]
     },
     {
       "operatingsystem": "AIX",
       "operatingsystemrelease": [
-        "5.3",
-        "6.1",
         "7.1"
       ]
+    },
+    {
+      "operatingsystem": "Archlinux"
+    },
+    {
+      "operatingsystem": "Darwin",
+      "operatingsystemrelease": [
+        "19"
+      ]
+    },
+    {
+      "operatingsystem": "VirtuozzoLinux",
+      "operatingsystemrelease": [
+        "7"
+      ]
     }
   ],
   "requirements": [
     {
       "name": "puppet",
-      "version_requirement": ">= 5.5.8 < 7.0.0"
+      "version_requirement": ">= 6.1.0 < 8.0.0"
     }
   ],
-  "description": "The archive module provides native puppet resources for managing compressed file download and extraction with optional checksum verification and cleanup."
+  "name": "puppet-archive",
+  "version": "6.0.2",
+  "source": "https://github.com/voxpupuli/puppet-archive",
+  "author": "Vox Pupuli",
+  "license": "Apache-2.0",
+  "summary": "Compressed archive file download and extraction with native types/providers for Windows and Unix",
+  "description": "The archive module provides native puppet resources for managing compressed file download and extraction with optional checksum verification and cleanup.",
+  "project_page": "https://github.com/voxpupuli/puppet-archive",
+  "issues_url": "https://github.com/voxpupuli/puppet-archive/issues",
+  "dependencies": [
+    {
+      "name": "puppetlabs/stdlib",
+      "version_requirement": ">= 4.18.0 < 9.0.0"
+    }
+  ]
 }
diff --git a/spec/acceptance/nodesets/archlinux-2-x64.yml b/spec/acceptance/nodesets/archlinux-2-x64.yml
deleted file mode 100644
index 89b6300..0000000
--- a/spec/acceptance/nodesets/archlinux-2-x64.yml
+++ /dev/null
@@ -1,13 +0,0 @@
----
-# This file is managed via modulesync
-# https://github.com/voxpupuli/modulesync
-# https://github.com/voxpupuli/modulesync_config
-HOSTS:
-  archlinux-2-x64:
-    roles:
-      - master
-    platform: archlinux-2-x64
-    box: archlinux/archlinux
-    hypervisor: vagrant
-CONFIG:
-  type: foss
diff --git a/spec/acceptance/nodesets/ec2/amazonlinux-2016091.yml b/spec/acceptance/nodesets/ec2/amazonlinux-2016091.yml
deleted file mode 100644
index 19dd43e..0000000
--- a/spec/acceptance/nodesets/ec2/amazonlinux-2016091.yml
+++ /dev/null
@@ -1,31 +0,0 @@
----
-# This file is managed via modulesync
-# https://github.com/voxpupuli/modulesync
-# https://github.com/voxpupuli/modulesync_config
-#
-# Additional ~/.fog config file with AWS EC2 credentials
-# required.
-#
-# see: https://github.com/puppetlabs/beaker/blob/master/docs/how_to/hypervisors/ec2.md
-#
-# Amazon Linux is not a RHEL clone.
-#
-HOSTS:
-  amazonlinux-2016091-x64:
-    roles:
-      - master
-    platform: centos-6-x86_64
-    hypervisor: ec2
-    # refers to image_tempaltes.yaml AMI[vmname] entry:
-    vmname: amazonlinux-2016091-eu-central-1
-    # refers to image_tempaltes.yaml entry inside AMI[vmname][:image]:
-    snapshot: aio
-    # t2.micro is free tier eligible (https://aws.amazon.com/en/free/):
-    amisize: t2.micro
-    # required so that beaker sanitizes sshd_config and root authorized_keys:
-    user: ec2-user
-CONFIG:
-  type: aio
-  :ec2_yaml: spec/acceptance/nodesets/ec2/image_templates.yaml
-...
-# vim: syntax=yaml
diff --git a/spec/acceptance/nodesets/ec2/image_templates.yaml b/spec/acceptance/nodesets/ec2/image_templates.yaml
deleted file mode 100644
index e50593e..0000000
--- a/spec/acceptance/nodesets/ec2/image_templates.yaml
+++ /dev/null
@@ -1,34 +0,0 @@
-# This file is managed via modulesync
-# https://github.com/voxpupuli/modulesync
-# https://github.com/voxpupuli/modulesync_config
-#
-# see also: https://github.com/puppetlabs/beaker/blob/master/docs/how_to/hypervisors/ec2.md
-#
-# Hint: image IDs (ami-*) for the same image are different per location.
-#
-AMI:
-  # Amazon Linux AMI 2016.09.1 (HVM), SSD Volume Type
-  amazonlinux-2016091-eu-central-1:
-    :image:
-      :aio: ami-af0fc0c0
-    :region: eu-central-1
-  # Red Hat Enterprise Linux 7.3 (HVM), SSD Volume Type
-  rhel-73-eu-central-1:
-    :image:
-      :aio: ami-e4c63e8b
-    :region: eu-central-1
-  # SUSE Linux Enterprise Server 12 SP2 (HVM), SSD Volume Type
-  sles-12sp2-eu-central-1:
-    :image:
-      :aio: ami-c425e4ab
-    :region: eu-central-1
-  # Ubuntu Server 16.04 LTS (HVM), SSD Volume Type
-  ubuntu-1604-eu-central-1:
-    :image:
-      :aio: ami-fe408091
-    :region: eu-central-1
-  # Microsoft Windows Server 2016 Base
-  windows-2016-base-eu-central-1:
-    :image:
-      :aio: ami-88ec20e7
-    :region: eu-central-1
diff --git a/spec/acceptance/nodesets/ec2/rhel-73-x64.yml b/spec/acceptance/nodesets/ec2/rhel-73-x64.yml
deleted file mode 100644
index 7fac823..0000000
--- a/spec/acceptance/nodesets/ec2/rhel-73-x64.yml
+++ /dev/null
@@ -1,29 +0,0 @@
----
-# This file is managed via modulesync
-# https://github.com/voxpupuli/modulesync
-# https://github.com/voxpupuli/modulesync_config
-#
-# Additional ~/.fog config file with AWS EC2 credentials
-# required.
-#
-# see: https://github.com/puppetlabs/beaker/blob/master/docs/how_to/hypervisors/ec2.md
-#
-HOSTS:
-  rhel-73-x64:
-    roles:
-      - master
-    platform: el-7-x86_64
-    hypervisor: ec2
-    # refers to image_tempaltes.yaml AMI[vmname] entry:
-    vmname: rhel-73-eu-central-1
-    # refers to image_tempaltes.yaml entry inside AMI[vmname][:image]:
-    snapshot: aio
-    # t2.micro is free tier eligible (https://aws.amazon.com/en/free/):
-    amisize: t2.micro
-    # required so that beaker sanitizes sshd_config and root authorized_keys:
-    user: ec2-user
-CONFIG:
-  type: aio
-  :ec2_yaml: spec/acceptance/nodesets/ec2/image_templates.yaml
-...
-# vim: syntax=yaml
diff --git a/spec/acceptance/nodesets/ec2/sles-12sp2-x64.yml b/spec/acceptance/nodesets/ec2/sles-12sp2-x64.yml
deleted file mode 100644
index 8542154..0000000
--- a/spec/acceptance/nodesets/ec2/sles-12sp2-x64.yml
+++ /dev/null
@@ -1,29 +0,0 @@
----
-# This file is managed via modulesync
-# https://github.com/voxpupuli/modulesync
-# https://github.com/voxpupuli/modulesync_config
-#
-# Additional ~/.fog config file with AWS EC2 credentials
-# required.
-#
-# see: https://github.com/puppetlabs/beaker/blob/master/docs/how_to/hypervisors/ec2.md
-#
-HOSTS:
-  sles-12sp2-x64:
-    roles:
-      - master
-    platform: sles-12-x86_64
-    hypervisor: ec2
-    # refers to image_tempaltes.yaml AMI[vmname] entry:
-    vmname: sles-12sp2-eu-central-1
-    # refers to image_tempaltes.yaml entry inside AMI[vmname][:image]:
-    snapshot: aio
-    # t2.micro is free tier eligible (https://aws.amazon.com/en/free/):
-    amisize: t2.micro
-    # required so that beaker sanitizes sshd_config and root authorized_keys:
-    user: ec2-user
-CONFIG:
-  type: aio
-  :ec2_yaml: spec/acceptance/nodesets/ec2/image_templates.yaml
-...
-# vim: syntax=yaml
diff --git a/spec/acceptance/nodesets/ec2/ubuntu-1604-x64.yml b/spec/acceptance/nodesets/ec2/ubuntu-1604-x64.yml
deleted file mode 100644
index 9cf59d5..0000000
--- a/spec/acceptance/nodesets/ec2/ubuntu-1604-x64.yml
+++ /dev/null
@@ -1,29 +0,0 @@
----
-# This file is managed via modulesync
-# https://github.com/voxpupuli/modulesync
-# https://github.com/voxpupuli/modulesync_config
-#
-# Additional ~/.fog config file with AWS EC2 credentials
-# required.
-#
-# see: https://github.com/puppetlabs/beaker/blob/master/docs/how_to/hypervisors/ec2.md
-#
-HOSTS:
-  ubuntu-1604-x64:
-    roles:
-      - master
-    platform: ubuntu-16.04-amd64
-    hypervisor: ec2
-    # refers to image_tempaltes.yaml AMI[vmname] entry:
-    vmname: ubuntu-1604-eu-central-1
-    # refers to image_tempaltes.yaml entry inside AMI[vmname][:image]:
-    snapshot: aio
-    # t2.micro is free tier eligible (https://aws.amazon.com/en/free/):
-    amisize: t2.micro
-    # required so that beaker sanitizes sshd_config and root authorized_keys:
-    user: ubuntu
-CONFIG:
-  type: aio
-  :ec2_yaml: spec/acceptance/nodesets/ec2/image_templates.yaml
-...
-# vim: syntax=yaml
diff --git a/spec/acceptance/nodesets/ec2/windows-2016-base-x64.yml b/spec/acceptance/nodesets/ec2/windows-2016-base-x64.yml
deleted file mode 100644
index 0932e29..0000000
--- a/spec/acceptance/nodesets/ec2/windows-2016-base-x64.yml
+++ /dev/null
@@ -1,29 +0,0 @@
----
-# This file is managed via modulesync
-# https://github.com/voxpupuli/modulesync
-# https://github.com/voxpupuli/modulesync_config
-#
-# Additional ~/.fog config file with AWS EC2 credentials
-# required.
-#
-# see: https://github.com/puppetlabs/beaker/blob/master/docs/how_to/hypervisors/ec2.md
-#
-HOSTS:
-  windows-2016-base-x64:
-    roles:
-      - master
-    platform: windows-2016-64
-    hypervisor: ec2
-    # refers to image_tempaltes.yaml AMI[vmname] entry:
-    vmname: windows-2016-base-eu-central-1
-    # refers to image_tempaltes.yaml entry inside AMI[vmname][:image]:
-    snapshot: aio
-    # t2.micro is free tier eligible (https://aws.amazon.com/en/free/):
-    amisize: t2.micro
-    # required so that beaker sanitizes sshd_config and root authorized_keys:
-    user: ec2-user
-CONFIG:
-  type: aio
-  :ec2_yaml: spec/acceptance/nodesets/ec2/image_templates.yaml
-...
-# vim: syntax=yaml
diff --git a/spec/classes/archive_spec.rb b/spec/classes/archive_spec.rb
deleted file mode 100644
index 1495d3d..0000000
--- a/spec/classes/archive_spec.rb
+++ /dev/null
@@ -1,100 +0,0 @@
-require 'spec_helper'
-
-describe 'archive' do
-  context 'RHEL' do
-    let(:facts) do
-      {
-        os: { family: 'RedHat' },
-        operatingsystem: 'RedHat',
-        puppetversion: '4.4.0'
-      }
-    end
-
-    context 'default' do
-      it { is_expected.not_to contain_package('7zip') }
-      it { is_expected.not_to contain_file('/opt/awscli-bundle') }
-      it { is_expected.not_to contain_archive('awscli-bundle.zip') }
-      it { is_expected.not_to contain_exec('install_aws_cli') }
-      it { is_expected.to compile.with_all_deps }
-      it { is_expected.to contain_class('archive::params') }
-    end
-
-    context 'with aws_cli' do
-      let(:params) do
-        {
-          aws_cli_install: true
-        }
-      end
-
-      it { is_expected.to contain_file('/opt/awscli-bundle') }
-      it { is_expected.to contain_archive('awscli-bundle.zip') }
-      it { is_expected.to contain_exec('install_aws_cli') }
-    end
-  end
-
-  describe 'Windows' do
-    let(:default_facts) do
-      {
-        os: { family: 'Windows' },
-        operatingsystem: 'Windows',
-        archive_windir: 'C:/staging'
-      }
-    end
-
-    context 'default 7zip chcolatey package' do
-      let(:facts) do
-        {
-          puppetversion: '4.4.0'
-        }.merge(default_facts)
-      end
-
-      it do
-        is_expected.to contain_package('7zip').with(
-          name: '7zip',
-          provider: 'chocolatey'
-        )
-      end
-      it { is_expected.not_to contain_archive('awscli-bundle.zip') }
-    end
-
-    context 'with 7zip msi package' do
-      let(:facts) do
-        {
-          puppetversion: '3.4.3 (Puppet Enterprise 3.2.3)'
-        }.merge(default_facts)
-      end
-
-      let(:params) do
-        {
-          seven_zip_name: '7-Zip 9.20 (x64 edition)',
-          seven_zip_source: 'C:/Windows/Temp/7z920-x64.msi',
-          seven_zip_provider: 'windows'
-        }
-      end
-
-      it do
-        is_expected.to contain_package('7zip').with(
-          name: '7-Zip 9.20 (x64 edition)',
-          source: 'C:/Windows/Temp/7z920-x64.msi',
-          provider: 'windows'
-        )
-      end
-    end
-
-    context 'without 7zip' do
-      let(:facts) do
-        {
-          puppetversion: '3.4.3 (Puppet Enterprise 3.2.3)'
-        }.merge(default_facts)
-      end
-
-      let(:params) do
-        {
-          seven_zip_provider: ''
-        }
-      end
-
-      it { is_expected.not_to contain_package('7zip') }
-    end
-  end
-end
diff --git a/spec/classes/staging_spec.rb b/spec/classes/staging_spec.rb
deleted file mode 100644
index 5ee92b2..0000000
--- a/spec/classes/staging_spec.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require 'spec_helper'
-
-describe 'archive::staging' do
-  context 'RHEL Puppet opensource' do
-    let(:facts) { { os: { family: 'RedHat' }, puppetversion: '4.4.0' } }
-
-    it { is_expected.to contain_class 'archive' }
-    it do
-      is_expected.to contain_file('/opt/staging').with(
-        owner: '0',
-        group: '0',
-        mode: '0640'
-      )
-    end
-  end
-
-  context 'RHEL Puppet opensource with params' do
-    let(:facts) { { os: { family: 'RedHat' }, puppetversion: '4.4.0' } }
-
-    let(:params) do
-      {
-        path: '/tmp/staging',
-        owner: 'puppet',
-        group: 'puppet',
-        mode: '0755'
-      }
-    end
-
-    it { is_expected.to contain_class 'archive' }
-    it do
-      is_expected.to contain_file('/tmp/staging').with(
-        owner: 'puppet',
-        group: 'puppet',
-        mode: '0755'
-      )
-    end
-  end
-
-  context 'Windows Puppet Enterprise' do
-    let(:facts) do
-      {
-        os: { family: 'Windows' },
-        puppetversion: '3.4.3 (Puppet Enterprise 3.2.3)',
-        archive_windir: 'C:/Windows/Temp/staging'
-      }
-    end
-
-    it { is_expected.to contain_class 'archive' }
-    it do
-      is_expected.to contain_file('C:/Windows/Temp/staging').with(
-        owner: 'S-1-5-32-544',
-        group: 'S-1-5-18',
-        mode: '0640'
-      )
-    end
-  end
-end
diff --git a/spec/defines/artifactory_spec.rb b/spec/defines/artifactory_spec.rb
deleted file mode 100644
index 4fa2b45..0000000
--- a/spec/defines/artifactory_spec.rb
+++ /dev/null
@@ -1,68 +0,0 @@
-require 'spec_helper'
-
-describe 'archive::artifactory' do
-  let(:facts) { { os: { family: 'RedHat' }, puppetversion: '4.4.0' } }
-
-  # Mock Puppet V4 API ruby function with a puppet language function equivalent
-  let(:pre_condition) do
-    'function archive::artifactory_checksum($url,$type) { return \'0d4f4b4b039c10917cfc49f6f6be71e4\' }'
-  end
-
-  context 'artifactory archive with defaults' do
-    let(:title) { '/opt/app/example.zip' }
-    let(:params) do
-      {
-        url: 'http://home.lan:8081/artifactory/path/example.zip'
-      }
-    end
-
-    it do
-      is_expected.to contain_archive('/opt/app/example.zip').with(
-        path: '/opt/app/example.zip',
-        source: 'http://home.lan:8081/artifactory/path/example.zip',
-        checksum: '0d4f4b4b039c10917cfc49f6f6be71e4',
-        checksum_type: 'sha1'
-      )
-    end
-
-    it do
-      is_expected.to contain_file('/opt/app/example.zip').with(
-        owner: '0',
-        group: '0',
-        mode: '0640',
-        require: 'Archive[/opt/app/example.zip]'
-      )
-    end
-  end
-
-  context 'artifactory archive with path' do
-    let(:title) { 'example.zip' }
-    let(:params) do
-      {
-        archive_path: '/opt/app',
-        url: 'http://home.lan:8081/artifactory/path/example.zip',
-        owner: 'app',
-        group: 'app',
-        mode: '0400'
-      }
-    end
-
-    it do
-      is_expected.to contain_archive('/opt/app/example.zip').with(
-        path: '/opt/app/example.zip',
-        source: 'http://home.lan:8081/artifactory/path/example.zip',
-        checksum: '0d4f4b4b039c10917cfc49f6f6be71e4',
-        checksum_type: 'sha1'
-      )
-    end
-
-    it do
-      is_expected.to contain_file('/opt/app/example.zip').with(
-        owner: 'app',
-        group: 'app',
-        mode: '0400',
-        require: 'Archive[/opt/app/example.zip]'
-      )
-    end
-  end
-end
diff --git a/spec/defines/go_spec.rb b/spec/defines/go_spec.rb
deleted file mode 100644
index 2889fe8..0000000
--- a/spec/defines/go_spec.rb
+++ /dev/null
@@ -1,79 +0,0 @@
-require 'spec_helper'
-
-describe 'archive::go' do
-  let(:facts) { { os: { family: 'RedHat' }, puppetversion: '4.4.0' } }
-
-  before do
-    MockFunction.new('go_md5') do |f|
-      f.stub.returns('0d4f4b4b039c10917cfc49f6f6be71e4')
-    end
-  end
-
-  context 'go archive with defaults' do
-    let(:title) { '/opt/app/example.zip' }
-    let(:params) do
-      {
-        server: 'home.lan',
-        port: 8081,
-        url_path: 'go/example.zip',
-        md5_url_path: 'go/example.zip/checksum',
-        username: 'username',
-        password: 'password'
-      }
-    end
-
-    it do
-      is_expected.to contain_archive('/opt/app/example.zip').with(
-        path: '/opt/app/example.zip',
-        source: 'http://home.lan:8081/go/example.zip',
-        checksum: '0d4f4b4b039c10917cfc49f6f6be71e4',
-        checksum_type: 'md5'
-      )
-    end
-
-    it do
-      is_expected.to contain_file('/opt/app/example.zip').with(
-        owner: '0',
-        group: '0',
-        mode: '0640',
-        require: 'Archive[/opt/app/example.zip]'
-      )
-    end
-  end
-
-  context 'go archive with path' do
-    let(:title) { 'example.zip' }
-    let(:params) do
-      {
-        archive_path: '/opt/app',
-        server: 'home.lan',
-        port: 8081,
-        url_path: 'go/example.zip',
-        md5_url_path: 'go/example.zip/checksum',
-        username: 'username',
-        password: 'password',
-        owner: 'app',
-        group: 'app',
-        mode: '0400'
-      }
-    end
-
-    it do
-      is_expected.to contain_archive('/opt/app/example.zip').with(
-        path: '/opt/app/example.zip',
-        source: 'http://home.lan:8081/go/example.zip',
-        checksum: '0d4f4b4b039c10917cfc49f6f6be71e4',
-        checksum_type: 'md5'
-      )
-    end
-
-    it do
-      is_expected.to contain_file('/opt/app/example.zip').with(
-        owner: 'app',
-        group: 'app',
-        mode: '0400',
-        require: 'Archive[/opt/app/example.zip]'
-      )
-    end
-  end
-end
diff --git a/spec/defines/nexus_spec.rb b/spec/defines/nexus_spec.rb
deleted file mode 100644
index 0000cb2..0000000
--- a/spec/defines/nexus_spec.rb
+++ /dev/null
@@ -1,185 +0,0 @@
-require 'spec_helper'
-
-describe 'archive::nexus' do
-  let(:facts) { { os: { family: 'RedHat' }, puppetversion: '4.4.0' } }
-
-  context 'nexus archive with defaults' do
-    let(:title) { '/tmp/hawtio.war' }
-
-    let(:params) do
-      {
-        url: 'https://oss.sonatype.org',
-        gav: 'io.hawt:hawtio-web:1.4.36',
-        repository: 'releases',
-        packaging: 'war'
-      }
-    end
-
-    it do
-      is_expected.to contain_archive('/tmp/hawtio.war').with(
-        source: 'https://oss.sonatype.org/service/local/artifact/maven/content?g=io.hawt&a=hawtio-web&v=1.4.36&r=releases&p=war',
-        checksum_url: 'https://oss.sonatype.org/service/local/artifact/maven/content?g=io.hawt&a=hawtio-web&v=1.4.36&r=releases&p=war.md5'
-      )
-    end
-
-    it do
-      is_expected.to contain_file('/tmp/hawtio.war').that_requires('Archive[/tmp/hawtio.war]').with(
-        owner: '0',
-        group: '0'
-      )
-    end
-  end
-
-  context 'nexus archive with overwritten parameters' do
-    let(:title) { '/tmp/artifact.war' }
-
-    let(:params) do
-      {
-        url: 'https://oss.sonatype.org',
-        gav: 'io.hawt:hawtio-web:1.4.36',
-        repository: 'releases',
-        owner: 'tom',
-        group: 'worker',
-        user: 'tom',
-        extract: true,
-        extract_path: '/opt',
-        creates: '/opt/artifact/WEB-INF',
-        cleanup: true
-      }
-    end
-
-    it do
-      is_expected.to contain_archive('/tmp/artifact.war').with(
-        'user' => 'tom',
-        'group' => 'worker',
-        'extract' => true,
-        'extract_path' => '/opt',
-        'creates' => '/opt/artifact/WEB-INF',
-        'cleanup' => true
-      )
-    end
-
-    it do
-      is_expected.to contain_file('/tmp/artifact.war').that_requires('Archive[/tmp/artifact.war]').with(
-        'owner' => 'tom',
-        'group' => 'worker'
-      )
-    end
-  end
-
-  context 'nexus archive with checksum_verify => false' do
-    let :title do
-      '/tmp/artifact.war'
-    end
-
-    let :params do
-      {
-        url: 'https://oss.sonatype.org',
-        gav: 'io.hawt:hawtio-web:1.4.36',
-        repository: 'releases',
-        owner: 'tom',
-        group: 'worker',
-        user: 'tom',
-        extract: true,
-        extract_path: '/opt',
-        creates: '/opt/artifact/WEB-INF',
-        cleanup: true,
-        checksum_verify: false
-      }
-    end
-
-    it do
-      is_expected.to contain_archive('/tmp/artifact.war').with(
-        'user' => 'tom',
-        'group' => 'worker',
-        'extract' => true,
-        'extract_path' => '/opt',
-        'creates' => '/opt/artifact/WEB-INF',
-        'cleanup' => true,
-        'checksum_verify' => false
-      )
-    end
-
-    it do
-      is_expected.to contain_file('/tmp/artifact.war').that_requires('Archive[/tmp/artifact.war]').with(
-        'owner' => 'tom',
-        'group' => 'worker'
-      )
-    end
-  end
-  context 'nexus archive with allow_insecure => true' do
-    let(:title) { '/tmp/artifact.war' }
-
-    let(:params) do
-      {
-        url: 'https://oss.sonatype.org',
-        gav: 'io.hawt:hawtio-web:1.4.36',
-        repository: 'releases',
-        packaging: 'war',
-        allow_insecure: true
-      }
-    end
-
-    it { is_expected.to contain_archive('/tmp/artifact.war').with_allow_insecure(true) }
-  end
-  context 'nexus archive with allow_insecure => false' do
-    let(:title) { '/tmp/artifact.war' }
-
-    let(:params) do
-      {
-        url: 'https://oss.sonatype.org',
-        gav: 'io.hawt:hawtio-web:1.4.36',
-        repository: 'releases',
-        packaging: 'war',
-        allow_insecure: false
-      }
-    end
-
-    it { is_expected.to contain_archive('/tmp/artifact.war').with_allow_insecure(false) }
-  end
-  context 'nexus archive with allow_insecure => \'foobar\'' do
-    let(:title) { '/tmp/artifact.war' }
-
-    let(:params) do
-      {
-        url: 'https://oss.sonatype.org',
-        gav: 'io.hawt:hawtio-web:1.4.36',
-        repository: 'releases',
-        packaging: 'war',
-        allow_insecure: 'foobar'
-      }
-    end
-
-    it { is_expected.to compile.and_raise_error(%r{parameter 'allow_insecure' expects a value of type Undef or Boolean, got String}) }
-  end
-  context 'nexus archive with use_nexus3_urls => false' do
-    let(:title) { '/tmp/artifact.war' }
-
-    let(:params) do
-      {
-        url: 'https://oss.sonatype.org',
-        gav: 'io.hawt:hawtio-web:1.4.36',
-        repository: 'releases',
-        packaging: 'war',
-        use_nexus3_urls: false
-      }
-    end
-
-    it { is_expected.to contain_archive('/tmp/artifact.war').with_source('https://oss.sonatype.org/service/local/artifact/maven/content?g=io.hawt&a=hawtio-web&v=1.4.36&r=releases&p=war') }
-  end
-  context 'nexus archive with use_nexus3_urls => true' do
-    let(:title) { '/tmp/artifact.war' }
-
-    let(:params) do
-      {
-        url: 'https://oss.sonatype.org',
-        gav: 'io.hawt:hawtio-web:1.4.36',
-        repository: 'releases',
-        packaging: 'war',
-        use_nexus3_urls: true
-      }
-    end
-
-    it { is_expected.to contain_archive('/tmp/artifact.war').with_source('https://oss.sonatype.org/repository/releases/io/hawt/hawtio-web/1.4.36/hawtio-web-1.4.36.war') }
-  end
-end
diff --git a/spec/fixtures/checksum/artifactory.json b/spec/fixtures/checksum/artifactory.json
deleted file mode 100644
index f35441a..0000000
--- a/spec/fixtures/checksum/artifactory.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-  "repo" : "distributions",
-  "path" : "/images/Artifactory_120x75.png",
-  "created" : "2015-10-29T23:13:08.174Z",
-  "createdBy" : "freds",
-  "lastModified" : "2015-10-29T23:13:01.000Z",
-  "modifiedBy" : "freds",
-  "lastUpdated" : "2015-10-29T23:13:01.000Z",
-  "downloadUri" : "https://repo.jfrog.org/artifactory/distributions/images/Artifactory_120x75.png",
-  "mimeType" : "application/octet-stream",
-  "size" : "6227",
-  "checksums" : {
-    "sha1" : "a359e93636e81f9dd844b2dfb4b89fa876e5d4fa",
-    "md5" : "00f32568be85929fe95be38f9f5f3519"
-  },
-  "originalChecksums" : {
-    "sha1" : "a359e93636e81f9dd844b2dfb4b89fa876e5d4fa",
-    "md5" : "00f32568be85929fe95be38f9f5f3519"
-  },
-  "uri" : "https://repo.jfrog.org/artifactory/api/storage/distributions/images/Artifactory_120x75.png"
-}
\ No newline at end of file
diff --git a/spec/fixtures/checksum/gocd.md5 b/spec/fixtures/checksum/gocd.md5
deleted file mode 100644
index ba3a257..0000000
--- a/spec/fixtures/checksum/gocd.md5
+++ /dev/null
@@ -1,3 +0,0 @@
-filea= 283158c7da8c0ada74502794fa8745eb
-fileb= 5717dd795bfd74edc2e9e81d37394349
-filec= 99c3a849f6e9a0d143f057433c7f4d84
diff --git a/spec/functions/artifactory_checksum_spec.rb b/spec/functions/artifactory_checksum_spec.rb
deleted file mode 100644
index e6ad09a..0000000
--- a/spec/functions/artifactory_checksum_spec.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-require 'spec_helper'
-
-describe 'archive::artifactory_checksum' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(ArgumentError) }
-  it { is_expected.to run.with_params('not_a_url').and_raise_error(ArgumentError) }
-
-  example_json = File.read(fixtures('checksum', 'artifactory.json'))
-  url = 'https://repo.jfrog.org/artifactory/distributions/images/Artifactory_120x75.png'
-  uri = URI(url.sub('/artifactory/', '/artifactory/api/storage/'))
-
-  it 'defaults to and parses sha1' do
-    PuppetX::Bodeco::Util.stubs(:content).with(uri).returns(example_json)
-    is_expected.to run.with_params(url).and_return('a359e93636e81f9dd844b2dfb4b89fa876e5d4fa')
-  end
-
-  it 'parses md5' do
-    PuppetX::Bodeco::Util.stubs(:content).with(uri).returns(example_json)
-    is_expected.to run.with_params(url, 'md5').and_return('00f32568be85929fe95be38f9f5f3519')
-  end
-end
diff --git a/spec/functions/parse_artifactory_url_spec.rb b/spec/functions/parse_artifactory_url_spec.rb
deleted file mode 100644
index 614a8ee..0000000
--- a/spec/functions/parse_artifactory_url_spec.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-require 'spec_helper'
-
-describe 'archive::parse_artifactory_url' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(ArgumentError) }
-  it { is_expected.to run.with_params('not_a_url').and_raise_error(ArgumentError) }
-
-  context 'releases' do
-    it do
-      is_expected.to run.with_params('https://repo.jfrog.org/artifactory/repo1-cache/maven-proxy/maven-proxy-webapp/0.2/maven-proxy-webapp-0.2.war').and_return(
-        'base_url'        => 'https://repo.jfrog.org/artifactory',
-        'repository'      => 'repo1-cache',
-        'org_path'        => 'maven-proxy',
-        'module'          => 'maven-proxy-webapp',
-        'base_rev'        => '0.2',
-        'folder_iteg_rev' => nil,
-        'file_iteg_rev'   => nil,
-        'classifier'      => nil,
-        'ext'             => 'war'
-      )
-    end
-    context 'with classifier' do
-      it do
-        is_expected.to run.with_params('https://repo.jfrog.org/artifactory/repo1-cache/maven-proxy/maven-proxy-standalone/0.2/maven-proxy-standalone-0.2-app.jar').and_return(
-          'base_url'        => 'https://repo.jfrog.org/artifactory',
-          'repository'      => 'repo1-cache',
-          'org_path'        => 'maven-proxy',
-          'module'          => 'maven-proxy-standalone',
-          'base_rev'        => '0.2',
-          'folder_iteg_rev' => nil,
-          'file_iteg_rev'   => nil,
-          'classifier'      => 'app',
-          'ext'             => 'jar'
-        )
-      end
-    end
-  end
-  context 'SNAPSHOTs' do
-    it do
-      is_expected.to run.with_params('https://repo.jfrog.org/artifactory/java.net-cache/com/sun/grizzly/grizzly-framework/2.0.0-SNAPSHOT/grizzly-framework-2.0.0-SNAPSHOT.jar').and_return(
-        'base_url'        => 'https://repo.jfrog.org/artifactory',
-        'repository'      => 'java.net-cache',
-        'org_path'        => 'com/sun/grizzly',
-        'module'          => 'grizzly-framework',
-        'base_rev'        => '2.0.0',
-        'folder_iteg_rev' => 'SNAPSHOT',
-        'file_iteg_rev'   => 'SNAPSHOT',
-        'classifier'      => nil,
-        'ext'             => 'jar'
-      )
-    end
-    context 'with classifiers' do
-      it do
-        is_expected.to run.with_params('https://repo.jfrog.org/artifactory/java.net-cache/com/sun/grizzly/grizzly-framework/2.0.0-SNAPSHOT/grizzly-framework-2.0.0-SNAPSHOT-javadoc.jar').and_return(
-          'base_url'        => 'https://repo.jfrog.org/artifactory',
-          'repository'      => 'java.net-cache',
-          'org_path'        => 'com/sun/grizzly',
-          'module'          => 'grizzly-framework',
-          'base_rev'        => '2.0.0',
-          'folder_iteg_rev' => 'SNAPSHOT',
-          'file_iteg_rev'   => 'SNAPSHOT',
-          'classifier'      => 'javadoc',
-          'ext'             => 'jar'
-        )
-      end
-      it do
-        is_expected.to run.with_params('https://repo.jfrog.org/artifactory/java.net-cache/com/sun/grizzly/grizzly-framework/2.0.0-SNAPSHOT/grizzly-framework-2.0.0-SNAPSHOT-tests.jar').and_return(
-          'base_url'        => 'https://repo.jfrog.org/artifactory',
-          'repository'      => 'java.net-cache',
-          'org_path'        => 'com/sun/grizzly',
-          'module'          => 'grizzly-framework',
-          'base_rev'        => '2.0.0',
-          'folder_iteg_rev' => 'SNAPSHOT',
-          'file_iteg_rev'   => 'SNAPSHOT',
-          'classifier'      => 'tests',
-          'ext'             => 'jar'
-        )
-      end
-    end
-  end
-end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
deleted file mode 100644
index e7cb1d5..0000000
--- a/spec/spec_helper.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require 'puppetlabs_spec_helper/module_spec_helper'
-require 'rspec-puppet-utils'
-require 'rspec/mocks'
-require 'rspec-puppet-facts'
-include RspecPuppetFacts
-
-unless RUBY_VERSION =~ %r{^1.9}
-  require 'coveralls'
-  Coveralls.wear!
-end
-
-#
-# Require all support files
-#
-Dir['./spec/support/**/*.rb'].sort.each { |f| require f }
-
-RSpec.configure do |c|
-  c.formatter = 'documentation'
-  c.mock_framework = :rspec
-end
diff --git a/spec/support/shared_behaviour.rb b/spec/support/shared_behaviour.rb
deleted file mode 100644
index 08e08ca..0000000
--- a/spec/support/shared_behaviour.rb
+++ /dev/null
@@ -1,107 +0,0 @@
-# rubocop:disable RSpec/MultipleExpectations
-require 'spec_helper'
-require 'tmpdir'
-
-RSpec.shared_examples 'an archive provider' do |provider_class|
-  describe provider_class do
-    let(:resource) do
-      Puppet::Type::Archive.new(name: '/tmp/example.zip', source: 'http://home.lan/example.zip')
-    end
-
-    let(:provider) do
-      provider_class.new(resource)
-    end
-
-    let(:zipfile) do
-      File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'files', 'test.zip'))
-    end
-
-    it '#checksum?' do
-      Dir.mktmpdir do |dir|
-        resource[:path] = File.join(dir, resource[:filename])
-        FileUtils.cp(zipfile, resource[:path])
-
-        resource[:checksum] = '377ec712d7fdb7266221db3441e3af2055448ead'
-        resource[:checksum_type] = :sha1
-        expect(provider.checksum?).to eq true
-
-        resource[:checksum] = '557e2ebb67b35d1fddff18090b6bc26b'
-        resource[:checksum_type] = :md5
-        expect(provider.checksum?).to eq true
-
-        resource[:checksum] = '557e2ebb67b35d1fddff18090b6bc26b'
-        resource[:checksum_type] = :sha1
-        expect(provider.checksum?).to eq false
-      end
-    end
-
-    it '#extract' do
-      skip 'jruby not supported' if defined? JRUBY_VERSION
-      Dir.mktmpdir do |dir|
-        resource[:path] = File.join(dir, resource[:filename])
-        extracted_file = File.join(dir, 'test')
-        FileUtils.cp(zipfile, resource[:path])
-
-        resource[:extract] = :true
-        resource[:creates] = extracted_file
-        resource[:extract_path] = dir
-
-        provider.extract
-        expect(File.read(extracted_file)).to eq "hello world\n"
-      end
-    end
-
-    it '#extracted?' do
-      skip 'jruby not supported' if defined? JRUBY_VERSION
-      Dir.mktmpdir do |dir|
-        resource[:path] = File.join(dir, resource[:filename])
-        extracted_file = File.join(dir, 'test')
-        FileUtils.cp(zipfile, resource[:path])
-
-        resource[:extract] = :true
-        resource[:creates] = extracted_file
-        resource[:extract_path] = dir
-
-        expect(provider.extracted?).to eq false
-        provider.extract
-        expect(provider.extracted?).to eq true
-      end
-    end
-
-    it '#cleanup' do
-      skip 'jruby not supported' if defined? JRUBY_VERSION
-      Dir.mktmpdir do |dir|
-        resource[:path] = File.join(dir, resource[:filename])
-        extracted_file = File.join(dir, 'test')
-        FileUtils.cp(zipfile, resource[:path])
-
-        resource[:extract] = :true
-        resource[:cleanup] = :true
-        resource[:creates] = extracted_file
-        resource[:extract_path] = dir
-
-        provider.extract
-        provider.cleanup
-        expect(File.exist?(resource[:path])).to eq false
-      end
-    end
-
-    it '#create' do
-      skip 'jruby not supported' if defined? JRUBY_VERSION
-      Dir.mktmpdir do |dir|
-        resource[:path] = File.join(dir, resource[:filename])
-        extracted_file = File.join(dir, 'test')
-        FileUtils.cp(zipfile, resource[:path])
-
-        resource[:extract] = :true
-        resource[:cleanup] = :true
-        resource[:creates] = extracted_file
-        resource[:extract_path] = dir
-
-        provider.create
-        expect(File.read(extracted_file)).to eq "hello world\n"
-        expect(File.exist?(resource[:path])).to eq false
-      end
-    end
-  end
-end
diff --git a/spec/support/shared_contexts.rb b/spec/support/shared_contexts.rb
deleted file mode 100644
index 7147b9f..0000000
--- a/spec/support/shared_contexts.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-shared_context :some_context do
-  # example only,
-  let(:hiera_data) do
-    {}
-  end
-end
diff --git a/spec/unit/facter/archive_windir_spec.rb b/spec/unit/facter/archive_windir_spec.rb
deleted file mode 100644
index 36725d2..0000000
--- a/spec/unit/facter/archive_windir_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-require 'spec_helper'
-require 'facter/archive_windir'
-
-describe 'archive_windir fact specs', type: :fact do
-  before { Facter.clear }
-  after { Facter.clear }
-
-  context 'RedHat' do
-    before do
-      Facter.fact(:osfamily).stubs(:value).returns 'RedHat'
-    end
-    it 'is nil on RedHat' do
-      expect(Facter.fact(:archive_windir).value).to be_nil
-    end
-  end
-
-  context 'Windows' do
-    before do
-      Facter.fact(:osfamily).stubs(:value).returns 'windows'
-    end
-    it 'defaults to C:\\staging on windows' do
-      expect(Facter.fact(:archive_windir).value).to eq('C:\\staging')
-    end
-  end
-end
diff --git a/spec/unit/puppet/parser/functions/assemble_nexus_url_spec.rb b/spec/unit/puppet/parser/functions/assemble_nexus_url_spec.rb
deleted file mode 100644
index 4be1984..0000000
--- a/spec/unit/puppet/parser/functions/assemble_nexus_url_spec.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-require 'spec_helper'
-
-describe :assemble_nexus_url do # rubocop:disable RSpec/DescribeSymbol
-  before :all do # rubocop:disable RSpec/BeforeAfterAll
-    Puppet::Parser::Functions.autoloader.loadall
-  end
-
-  let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
-
-  nexus_url = 'http://nexus.local'
-
-  it 'builds url correctly' do
-    expected_url = 'http://nexus.local/service/local/artifact/maven/content?g=com.test&a=test&v=1.0.0&r=binary-staging&p=ear'
-
-    parameters = {
-      'g' => 'com.test',
-      'a' => 'test',
-      'v' => '1.0.0',
-      'r' => 'binary-staging',
-      'p' => 'ear'
-    }
-
-    expect(scope.function_assemble_nexus_url([nexus_url, parameters])).to eq expected_url
-  end
-
-  it 'builds url with version containing "+" sign correctly' do
-    expected_url = 'http://nexus.local/service/local/artifact/maven/content?g=com.test&a=test&v=1.0.0%2B11&r=binary-staging&p=ear'
-
-    parameters = {
-      'g' => 'com.test',
-      'a' => 'test',
-      'v' => '1.0.0+11',
-      'r' => 'binary-staging',
-      'p' => 'ear'
-    }
-
-    expect(scope.function_assemble_nexus_url([nexus_url, parameters])).to eq expected_url
-  end
-end
diff --git a/spec/unit/puppet/parser/functions/go_md5_spec.rb b/spec/unit/puppet/parser/functions/go_md5_spec.rb
deleted file mode 100644
index 7dad352..0000000
--- a/spec/unit/puppet/parser/functions/go_md5_spec.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-require 'spec_helper'
-
-describe :go_md5 do # rubocop:disable RSpec/DescribeSymbol
-  before :all do # rubocop:disable RSpec/BeforeAfterAll
-    Puppet::Parser::Functions.autoloader.loadall
-  end
-
-  let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
-
-  example_md5 = File.read(fixtures('checksum', 'gocd.md5'))
-
-  it 'retreives file md5' do
-    url = 'https://gocd.lan/path/file.md5'
-    uri = URI(url)
-    PuppetX::Bodeco::Util.stubs(:content).with(uri, username: 'user', password: 'pass').returns(example_md5)
-    expect(scope.function_go_md5(['user', 'pass', 'filea', url])).to eq '283158c7da8c0ada74502794fa8745eb'
-  end
-end
diff --git a/spec/unit/puppet/provider/archive/curl_spec.rb b/spec/unit/puppet/provider/archive/curl_spec.rb
deleted file mode 100644
index c06aa41..0000000
--- a/spec/unit/puppet/provider/archive/curl_spec.rb
+++ /dev/null
@@ -1,172 +0,0 @@
-require 'spec_helper'
-
-curl_provider = Puppet::Type.type(:archive).provider(:curl)
-
-RSpec.describe curl_provider do
-  it_behaves_like 'an archive provider', curl_provider
-
-  describe '#download' do
-    let(:name)      { '/tmp/example.zip' }
-    let(:resource)  { Puppet::Type::Archive.new(resource_properties) }
-    let(:provider)  { curl_provider.new(resource) }
-
-    let(:default_options) do
-      [
-        'http://home.lan/example.zip',
-        '-o',
-        String,
-        '-fsSLg',
-        '--max-redirs',
-        5
-      ]
-    end
-
-    before do
-      allow(FileUtils).to receive(:mv)
-      allow(provider).to receive(:curl)
-    end
-
-    context 'no extra properties specified' do
-      let(:resource_properties) do
-        {
-          name: name,
-          source: 'http://home.lan/example.zip'
-        }
-      end
-
-      it 'calls curl with input, output and --max-redirects=5' do
-        provider.download(name)
-        expect(provider).to have_received(:curl).with(default_options)
-      end
-    end
-
-    context 'username specified' do
-      let(:resource_properties) do
-        {
-          name: name,
-          source: 'http://home.lan/example.zip',
-          username: 'foo'
-        }
-      end
-
-      it 'calls curl with default options and username' do
-        provider.download(name)
-        expect(provider).to have_received(:curl).with(default_options << '--user' << 'foo')
-      end
-    end
-
-    context 'username and password specified' do
-      let(:resource_properties) do
-        {
-          name: name,
-          source: 'http://home.lan/example.zip',
-          username: 'foo',
-          password: 'bar'
-        }
-      end
-
-      it 'calls curl with default options and password' do
-        provider.download(name)
-        expect(provider).to have_received(:curl).with(default_options << '--user' << 'foo:bar')
-      end
-    end
-
-    context 'allow_insecure true' do
-      let(:resource_properties) do
-        {
-          name: name,
-          source: 'http://home.lan/example.zip',
-          allow_insecure: true
-        }
-      end
-
-      it 'calls curl with default options and --insecure' do
-        provider.download(name)
-        expect(provider).to have_received(:curl).with(default_options << '--insecure')
-      end
-    end
-
-    context 'cookie specified' do
-      let(:resource_properties) do
-        {
-          name: name,
-          source: 'http://home.lan/example.zip',
-          cookie: 'foo=bar'
-        }
-      end
-
-      it 'calls curl with default options cookie' do
-        provider.download(name)
-        expect(provider).to have_received(:curl).with(default_options << '--cookie' << 'foo=bar')
-      end
-    end
-
-    context 'using proxy' do
-      let(:resource_properties) do
-        {
-          name: name,
-          source: 'http://home.lan/example.zip',
-          proxy_server: 'https://home.lan:8080'
-        }
-      end
-
-      it 'calls curl with proxy' do
-        provider.download(name)
-        expect(provider).to have_received(:curl).with(default_options << '--proxy' << 'https://home.lan:8080')
-      end
-    end
-
-    describe '#checksum' do
-      subject { provider.checksum }
-
-      let(:url) { nil }
-      let(:resource_properties) do
-        {
-          name: name,
-          source: 'http://home.lan/example.zip'
-        }
-      end
-
-      before do
-        resource[:checksum_url] = url if url
-      end
-
-      context 'with a url' do
-        let(:curl_params) do
-          [
-            'http://example.com/checksum',
-            '-fsSLg',
-            '--max-redirs',
-            5
-          ]
-        end
-
-        let(:url) { 'http://example.com/checksum' }
-
-        context 'responds with hash' do
-          let(:remote_hash) { 'a0c38e1aeb175201b0dacd65e2f37e187657050a' }
-
-          it 'parses checksum value' do
-            allow(provider).to receive(:curl).with(curl_params).and_return("a0c38e1aeb175201b0dacd65e2f37e187657050a README.md\n")
-            expect(provider.checksum).to eq('a0c38e1aeb175201b0dacd65e2f37e187657050a')
-          end
-        end
-      end
-    end
-
-    describe 'custom options' do
-      let(:resource_properties) do
-        {
-          name: name,
-          source: 'http://home.lan/example.zip',
-          download_options: ['--tlsv1']
-        }
-      end
-
-      it 'calls curl with custom tls options' do
-        provider.download(name)
-        expect(provider).to have_received(:curl).with(default_options << '--tlsv1')
-      end
-    end
-  end
-end
diff --git a/spec/unit/puppet/provider/archive/ruby_spec.rb b/spec/unit/puppet/provider/archive/ruby_spec.rb
deleted file mode 100644
index fa4cd9e..0000000
--- a/spec/unit/puppet/provider/archive/ruby_spec.rb
+++ /dev/null
@@ -1,97 +0,0 @@
-require 'spec_helper'
-
-ruby_provider = Puppet::Type.type(:archive).provider(:ruby)
-
-RSpec.describe ruby_provider do
-  it_behaves_like 'an archive provider', ruby_provider
-
-  describe 'ruby provider' do
-    let(:name) { '/tmp/example.zip' }
-    let(:resource_properties) do
-      {
-        name: name,
-        source: 's3://home.lan/example.zip'
-      }
-    end
-    let(:resource) { Puppet::Type::Archive.new(resource_properties) }
-    let(:provider) { ruby_provider.new(resource) }
-
-    let(:s3_download_options) do
-      ['s3', 'cp', 's3://home.lan/example.zip', String]
-    end
-
-    before do
-      allow(provider).to receive(:aws)
-    end
-
-    context 'default resource property' do
-      it '#s3_download' do
-        provider.s3_download(name)
-        expect(provider).to have_received(:aws).with(s3_download_options)
-      end
-
-      it '#extract nothing' do
-        expect(provider.extract).to be_nil
-      end
-    end
-
-    describe '#checksum' do
-      subject { provider.checksum }
-
-      let(:url) { nil }
-      let(:remote_hash) { nil }
-
-      before do
-        resource[:checksum_url] = url if url
-        allow(PuppetX::Bodeco::Util).to receive(:content) .\
-          with(url, any_args).and_return(remote_hash)
-      end
-
-      context 'unset' do
-        it { is_expected.to be_nil }
-      end
-
-      context 'with a url' do
-        let(:url) { 'http://example.com/checksum' }
-
-        context 'responds with hash' do
-          let(:remote_hash) { 'a0c38e1aeb175201b0dacd65e2f37e187657050a' }
-
-          it { is_expected.to eq('a0c38e1aeb175201b0dacd65e2f37e187657050a') }
-        end
-        context 'responds with hash and newline' do
-          let(:remote_hash) { "a0c38e1aeb175201b0dacd65e2f37e187657050a\n" }
-
-          it { is_expected.to eq('a0c38e1aeb175201b0dacd65e2f37e187657050a') }
-        end
-        context 'responds with `sha1sum README.md` output' do
-          let(:remote_hash) { "a0c38e1aeb175201b0dacd65e2f37e187657050a  README.md\n" }
-
-          it { is_expected.to eq('a0c38e1aeb175201b0dacd65e2f37e187657050a') }
-        end
-        context 'responds with `openssl dgst -hex -sha256 README.md` output' do
-          let(:remote_hash) { "SHA256(README.md)= 8fa3f0ff1f2557657e460f0f78232679380a9bcdb8670e3dcb33472123b22428\n" }
-
-          it { is_expected.to eq('8fa3f0ff1f2557657e460f0f78232679380a9bcdb8670e3dcb33472123b22428') }
-        end
-      end
-    end
-
-    describe 'download options' do
-      let(:resource_properties) do
-        {
-          name: name,
-          source: 's3://home.lan/example.zip',
-          download_options: ['--region', 'eu-central-1']
-        }
-      end
-
-      context 'default resource property' do
-        it '#s3_download' do
-          provider.s3_download(name)
-          expect(provider).to have_received(:aws).with(s3_download_options << '--region' << 'eu-central-1')
-        end
-      end
-    end
-  end
-end
diff --git a/spec/unit/puppet/provider/archive/wget_spec.rb b/spec/unit/puppet/provider/archive/wget_spec.rb
deleted file mode 100644
index 5d50d6e..0000000
--- a/spec/unit/puppet/provider/archive/wget_spec.rb
+++ /dev/null
@@ -1,156 +0,0 @@
-require 'spec_helper'
-
-wget_provider = Puppet::Type.type(:archive).provider(:wget)
-
-RSpec.describe wget_provider do
-  it_behaves_like 'an archive provider', wget_provider
-
-  describe '#download' do
-    let(:name)      { '/tmp/example.zip' }
-    let(:resource)  { Puppet::Type::Archive.new(resource_properties) }
-    let(:provider)  { wget_provider.new(resource) }
-    let(:execution) { Puppet::Util::Execution }
-
-    let(:default_options) do
-      [
-        'wget',
-        'http://home.lan/example.zip',
-        '-O',
-        '/tmp/example.zip',
-        '--max-redirect=5'
-      ]
-    end
-
-    before do
-      allow(FileUtils).to receive(:mv)
-      allow(execution).to receive(:execute)
-    end
-
-    context 'no extra properties specified' do
-      let(:resource_properties) do
-        {
-          name: name,
-          source: 'http://home.lan/example.zip'
-        }
-      end
-
-      it 'calls wget with input, output and --max-redirects=5' do
-        provider.download(name)
-        expect(execution).to have_received(:execute).with(default_options.join(' '))
-      end
-    end
-
-    context 'username specified' do
-      let(:resource_properties) do
-        {
-          name: name,
-          source: 'http://home.lan/example.zip',
-          username: 'foo'
-        }
-      end
-
-      it 'calls wget with default options and username' do
-        provider.download(name)
-        expect(execution).to have_received(:execute).with([default_options, '--user=foo'].join(' '))
-      end
-    end
-
-    context 'password specified' do
-      let(:resource_properties) do
-        {
-          name: name,
-          source: 'http://home.lan/example.zip',
-          password: 'foo'
-        }
-      end
-
-      it 'calls wget with default options and password' do
-        provider.download(name)
-        expect(execution).to have_received(:execute).with([default_options, '--password=foo'].join(' '))
-      end
-    end
-
-    context 'cookie specified' do
-      let(:resource_properties) do
-        {
-          name: name,
-          source: 'http://home.lan/example.zip',
-          cookie: 'foo'
-        }
-      end
-
-      it 'calls wget with default options and header containing cookie' do
-        provider.download(name)
-        expect(execution).to have_received(:execute).with([default_options, '--header="Cookie: foo"'].join(' '))
-      end
-    end
-
-    context 'proxy specified' do
-      let(:resource_properties) do
-        {
-          name: name,
-          source: 'http://home.lan/example.zip',
-          proxy_server: 'https://home.lan:8080'
-        }
-      end
-
-      it 'calls wget with default options and header containing cookie' do
-        provider.download(name)
-        expect(execution).to have_received(:execute).with([default_options, '-e use_proxy=yes', '-e https_proxy=https://home.lan:8080'].join(' '))
-      end
-    end
-
-    context 'allow_insecure true' do
-      let(:resource_properties) do
-        {
-          name: name,
-          source: 'http://home.lan/example.zip',
-          allow_insecure: true
-        }
-      end
-
-      it 'calls wget with default options and --no-check-certificate' do
-        provider.download(name)
-        expect(execution).to have_received(:execute).with([default_options, '--no-check-certificate'].join(' '))
-      end
-    end
-
-    describe '#checksum' do
-      subject { provider.checksum }
-
-      let(:url) { nil }
-      let(:resource_properties) do
-        {
-          name: name,
-          source: 'http://home.lan/example.zip'
-        }
-      end
-
-      before do
-        resource[:checksum_url] = url if url
-      end
-
-      context 'with a url' do
-        let(:wget_params) do
-          [
-            'wget',
-            '-qO-',
-            'http://example.com/checksum',
-            '--max-redirect=5'
-          ]
-        end
-
-        let(:url) { 'http://example.com/checksum' }
-
-        context 'responds with hash' do
-          let(:remote_hash) { 'a0c38e1aeb175201b0dacd65e2f37e187657050a' }
-
-          it 'parses checksum value' do
-            allow(Puppet::Util::Execution).to receive(:execute).with(wget_params.join(' ')).and_return("a0c38e1aeb175201b0dacd65e2f37e187657050a README.md\n")
-            expect(provider.checksum).to eq('a0c38e1aeb175201b0dacd65e2f37e187657050a')
-          end
-        end
-      end
-    end
-  end
-end
diff --git a/spec/unit/puppet/type/archive_spec.rb b/spec/unit/puppet/type/archive_spec.rb
deleted file mode 100644
index a6806eb..0000000
--- a/spec/unit/puppet/type/archive_spec.rb
+++ /dev/null
@@ -1,161 +0,0 @@
-require 'spec_helper'
-require 'puppet'
-
-describe Puppet::Type.type(:archive) do
-  let(:resource) do
-    Puppet::Type.type(:archive).new(
-      path: '/tmp/example.zip',
-      source: 'http://home.lan/example.zip'
-    )
-  end
-
-  context 'resource defaults' do
-    it { expect(resource[:path]).to eq '/tmp/example.zip' }
-    it { expect(resource[:name]).to eq '/tmp/example.zip' }
-    it { expect(resource[:filename]).to eq 'example.zip' }
-    it { expect(resource[:extract]).to eq :false }
-    it { expect(resource[:cleanup]).to eq :true }
-    it { expect(resource[:checksum_type]).to eq :none }
-    it { expect(resource[:digest_type]).to eq nil }
-    it { expect(resource[:checksum_verify]).to eq :true }
-    it { expect(resource[:extract_flags]).to eq :undef }
-    it { expect(resource[:allow_insecure]).to eq false }
-    it { expect(resource[:download_options]).to eq nil }
-    it { expect(resource[:temp_dir]).to eq nil }
-  end
-
-  it 'verify resource[:path] is absolute filepath' do
-    expect do
-      resource[:path] = 'relative/file'
-    end.to raise_error(Puppet::Error, %r{archive path must be absolute: })
-  end
-
-  it 'verify resource[:temp_dir] is absolute filetemp_dir' do
-    expect do
-      resource[:temp_dir] = 'relative/file'
-    end.to raise_error(Puppet::Error, %r{Invalid temp_dir})
-  end
-
-  describe 'on posix', if: Puppet.features.posix? do
-    it 'accepts valid resource[:source]' do
-      expect do
-        resource[:source] = 'http://home.lan/example.zip'
-        resource[:source] = 'https://home.lan/example.zip'
-        resource[:source] = 'ftp://home.lan/example.zip'
-        resource[:source] = 's3://home.lan/example.zip'
-        resource[:source] = '/tmp/example.zip'
-      end.not_to raise_error
-    end
-
-    %w[
-      afp://home.lan/example.zip
-      \tmp
-      D:/example.zip
-    ].each do |s|
-      it 'rejects invalid resource[:source]' do
-        expect do
-          resource[:source] = s
-        end.to raise_error(Puppet::Error, %r{invalid source url: })
-      end
-    end
-  end
-
-  describe 'on windows', if: Puppet.features.microsoft_windows? do
-    it 'accepts valid windows resource[:source]' do
-      expect do
-        resource[:source] = 'D:/example.zip'
-      end.not_to raise_error
-    end
-
-    %w[
-      /tmp/example.zip
-      \Z:
-    ].each do |s|
-      it 'rejects invalid windows resource[:source]' do
-        expect do
-          resource[:source] = s
-        end.to raise_error(Puppet::Error, %r{invalid source url: })
-      end
-    end
-  end
-
-  %w[
-    557e2ebb67b35d1fddff18090b6bc26b
-    557e2ebb67b35d1fddff18090b6bc26557e2ebb67b35d1fddff18090b6bc26bb
-  ].each do |cs|
-    it 'accepts valid resource[:checksum]' do
-      expect do
-        resource[:checksum] = cs
-      end.not_to raise_error
-    end
-  end
-
-  %w[
-    z57e2ebb67b35d1fddff18090b6bc26b
-    557e
-  ].each do |cs|
-    it 'rejects bad checksum' do
-      expect do
-        resource[:checksum] = cs
-      end.to raise_error(Puppet::Error, %r{Invalid value})
-    end
-  end
-
-  it 'accepts valid resource[:checksum_type]' do
-    expect do
-      [:none, :md5, :sha1, :sha2, :sha256, :sha384, :sha512].each do |type|
-        resource[:checksum_type] = type
-      end
-    end.not_to raise_error
-  end
-
-  it 'rejects invalid resource[:checksum_type]' do
-    expect do
-      resource[:checksum_type] = :crc32
-    end.to raise_error(Puppet::Error, %r{Invalid value})
-  end
-
-  it 'verify resource[:allow_insecure] is valid' do
-    expect do
-      [:true, :false, :yes, :no].each do |type|
-        resource[:allow_insecure] = type
-      end
-    end.not_to raise_error
-  end
-
-  it 'verify resource[:download_options] is valid' do
-    expect do
-      ['--tlsv1', ['--region', 'eu-central-1']].each do |type|
-        resource[:download_options] = type
-      end
-    end.not_to raise_error
-  end
-
-  describe 'archive autorequire' do
-    let(:file_resource) { Puppet::Type.type(:file).new(name: '/tmp') }
-    let(:archive_resource) do
-      described_class.new(
-        path: '/tmp/example.zip',
-        source: 'http://home.lan/example.zip'
-      )
-    end
-
-    let(:auto_req) do
-      catalog = Puppet::Resource::Catalog.new
-      catalog.add_resource file_resource
-      catalog.add_resource archive_resource
-
-      archive_resource.autorequire
-    end
-
-    it 'creates relationship' do
-      expect(auto_req.size).to be 1
-    end
-    it 'links to archive resource' do
-      expect(auto_req[0].target).to eql archive_resource
-    end
-    it 'autorequires parent directory' do
-      expect(auto_req[0].source).to eql file_resource
-    end
-  end
-end
diff --git a/spec/unit/puppet_x/bodeco/archive_spec.rb b/spec/unit/puppet_x/bodeco/archive_spec.rb
deleted file mode 100644
index 1486253..0000000
--- a/spec/unit/puppet_x/bodeco/archive_spec.rb
+++ /dev/null
@@ -1,96 +0,0 @@
-# rubocop:disable RSpec/MultipleExpectations
-require 'spec_helper'
-require 'puppet_x/bodeco/archive'
-
-describe PuppetX::Bodeco::Archive do
-  let(:zipfile) do
-    File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'files', 'test.zip'))
-  end
-
-  it '#checksum' do
-    Dir.mktmpdir do |dir|
-      tempfile = File.join(dir, 'test.zip')
-      FileUtils.cp(zipfile, tempfile)
-
-      archive = described_class.new(tempfile)
-      expect(archive.checksum(:none)).to be nil
-      expect(archive.checksum(:md5)).to eq '557e2ebb67b35d1fddff18090b6bc26b'
-      expect(archive.checksum(:sha1)).to eq '377ec712d7fdb7266221db3441e3af2055448ead'
-    end
-  end
-
-  it '#parse_flags' do
-    archive = described_class.new('test.tar.gz')
-    expect(archive.send(:parse_flags, 'xf', :undef, 'tar')).to eq 'xf'
-    expect(archive.send(:parse_flags, 'xf', 'xvf', 'tar')).to eq 'xvf'
-    expect(archive.send(:parse_flags, 'xf', { 'tar' => 'xzf', '7z' => '-y x' }, 'tar')).to eq 'xzf'
-  end
-
-  it '#command on RedHat' do
-    Facter.stubs(:value).with(:osfamily).returns 'RedHat'
-
-    tar = described_class.new('test.tar.gz')
-    expect(tar.send(:command, :undef)).to eq 'tar xzf test.tar.gz'
-    expect(tar.send(:command, 'xvf')).to eq 'tar xvf test.tar.gz'
-    tar = described_class.new('test.tar.bz2')
-    expect(tar.send(:command, :undef)).to eq 'tar xjf test.tar.bz2'
-    expect(tar.send(:command, 'xjf')).to eq 'tar xjf test.tar.bz2'
-    tar = described_class.new('test.tar.xz')
-    expect(tar.send(:command, :undef)).to eq 'unxz -dc test.tar.xz | tar xf -'
-    gunzip = described_class.new('test.gz')
-    expect(gunzip.send(:command, :undef)).to eq 'gunzip -d test.gz'
-    zip = described_class.new('test.zip')
-    expect(zip.send(:command, :undef)).to eq 'unzip -o test.zip'
-    expect(zip.send(:command, '-a')).to eq 'unzip -a test.zip'
-
-    zip = described_class.new('/tmp/fun folder/test.zip')
-    expect(zip.send(:command, :undef)).to eq 'unzip -o /tmp/fun\ folder/test.zip'
-    expect(zip.send(:command, '-a')).to eq 'unzip -a /tmp/fun\ folder/test.zip'
-  end
-
-  system_v = %w[Solaris AIX]
-  system_v.each do |os|
-    it "#command on #{os}" do
-      Facter.stubs(:value).with(:osfamily).returns os
-
-      tar = described_class.new('test.tar.gz')
-      expect(tar.send(:command, :undef)).to eq 'gunzip -dc test.tar.gz | tar xf -'
-      expect(tar.send(:command, 'gunzip' => '-dc', 'tar' => 'xvf')).to eq 'gunzip -dc test.tar.gz | tar xvf -'
-      tar = described_class.new('test.tar.bz2')
-      expect(tar.send(:command, :undef)).to eq 'bunzip2 -dc test.tar.bz2 | tar xf -'
-      expect(tar.send(:command, 'bunzip' => '-dc', 'tar' => 'xvf')).to eq 'bunzip2 -dc test.tar.bz2 | tar xvf -'
-      tar = described_class.new('test.tar.xz')
-      expect(tar.send(:command, :undef)).to eq 'unxz -dc test.tar.xz | tar xf -'
-      gunzip = described_class.new('test.gz')
-      expect(gunzip.send(:command, :undef)).to eq 'gunzip -d test.gz'
-      zip = described_class.new('test.zip')
-      expect(zip.send(:command, :undef)).to eq 'unzip -o test.zip'
-      expect(zip.send(:command, '-a')).to eq 'unzip -a test.zip'
-
-      zip = described_class.new('/tmp/fun folder/test.zip')
-      expect(zip.send(:command, :undef)).to eq 'unzip -o /tmp/fun\ folder/test.zip'
-      expect(zip.send(:command, '-a')).to eq 'unzip -a /tmp/fun\ folder/test.zip'
-    end
-  end
-
-  it '#command on Windows' do
-    Facter.stubs(:value).with(:osfamily).returns 'windows'
-
-    tar = described_class.new('test.tar.gz')
-    tar.stubs(:win_7zip).returns('7z.exe')
-    expect(tar.send(:command, :undef)).to eq '7z.exe x -aoa "test.tar.gz"'
-    expect(tar.send(:command, 'x -aot')).to eq '7z.exe x -aot "test.tar.gz"'
-
-    zip = described_class.new('test.zip')
-    zip.stubs(:win_7zip).returns('7z.exe')
-    expect(zip.send(:command, :undef)).to eq '7z.exe x -aoa "test.zip"'
-
-    zip = described_class.new('C:/Program Files/test.zip')
-    zip.stubs(:win_7zip).returns('7z.exe')
-    expect(zip.send(:command, :undef)).to eq '7z.exe x -aoa "C:/Program Files/test.zip"'
-
-    zip = described_class.new('C:/Program Files/test.zip')
-    zip.stubs(:win_7zip).returns('powershell')
-    expect(zip.send(:command, :undef)).to eq 'powershell'
-  end
-end