diff --git a/npm_and_yarn/Dockerfile b/npm_and_yarn/Dockerfile index ecffafa80c..9f2addddfb 100644 --- a/npm_and_yarn/Dockerfile +++ b/npm_and_yarn/Dockerfile @@ -9,6 +9,8 @@ ARG PNPM_VERSION=9.15.0 # Check for updates at https://github.com/yarnpkg/berry/releases ARG YARN_VERSION=4.5.3 +# Check for updates at https://github.com/oven-sh/bun/releases +ARG BUN_VERSION=1.1.39 # See https://github.com/nodesource/distributions#installation-instructions ARG NODEJS_VERSION=20 @@ -26,7 +28,7 @@ RUN mkdir -p /etc/apt/keyrings \ && apt-get install -y --no-install-recommends \ nodejs \ && rm -rf /var/lib/apt/lists/* \ - && npm install -g corepack@$COREPACK_VERSION \ + && npm install -g corepack@$COREPACK_VERSION bun@$BUN_VERSION \ && rm -rf ~/.npm USER dependabot diff --git a/npm_and_yarn/lib/dependabot/npm_and_yarn/dependency_files_filterer.rb b/npm_and_yarn/lib/dependabot/npm_and_yarn/dependency_files_filterer.rb index 930a957b53..63974d777b 100644 --- a/npm_and_yarn/lib/dependabot/npm_and_yarn/dependency_files_filterer.rb +++ b/npm_and_yarn/lib/dependabot/npm_and_yarn/dependency_files_filterer.rb @@ -82,7 +82,7 @@ def package_required_lockfile?(lockfile) sig { params(lockfile: DependencyFile).returns(T::Boolean) } def workspaces_lockfile?(lockfile) - return false unless ["yarn.lock", "package-lock.json", "pnpm-lock.yaml"].include?(lockfile.name) + return false unless ["yarn.lock", "package-lock.json", "pnpm-lock.yaml", "bun.lock"].include?(lockfile.name) return false unless parsed_root_package_json["workspaces"] || dependency_files.any? do |file| file.name.end_with?("pnpm-workspace.yaml") && File.dirname(file.name) == File.dirname(lockfile.name) @@ -148,7 +148,8 @@ def lockfile?(file) "package-lock.json", "yarn.lock", "pnpm-lock.yaml", - "npm-shrinkwrap.json" + "npm-shrinkwrap.json", + "bun.lock" ) end end diff --git a/npm_and_yarn/lib/dependabot/npm_and_yarn/file_fetcher.rb b/npm_and_yarn/lib/dependabot/npm_and_yarn/file_fetcher.rb index aa18e5a886..120af9846e 100644 --- a/npm_and_yarn/lib/dependabot/npm_and_yarn/file_fetcher.rb +++ b/npm_and_yarn/lib/dependabot/npm_and_yarn/file_fetcher.rb @@ -68,6 +68,7 @@ def ecosystem_versions package_managers["npm"] = npm_version if npm_version package_managers["yarn"] = yarn_version if yarn_version package_managers["pnpm"] = pnpm_version if pnpm_version + package_managers["bun"] = bun_version if bun_version package_managers["unknown"] = 1 if package_managers.empty? { @@ -83,6 +84,7 @@ def fetch_files fetched_files += npm_files if npm_version fetched_files += yarn_files if yarn_version fetched_files += pnpm_files if pnpm_version + fetched_files += bun_files if bun_version fetched_files += lerna_files fetched_files += workspace_package_jsons fetched_files += path_dependencies(fetched_files) @@ -120,6 +122,13 @@ def pnpm_files fetched_pnpm_files end + sig { returns(T::Array[DependencyFile]) } + def bun_files + fetched_bun_files = [] + fetched_bun_files << bun_lock if bun_lock + fetched_bun_files + end + sig { returns(T::Array[DependencyFile]) } def lerna_files fetched_lerna_files = [] @@ -202,6 +211,14 @@ def pnpm_version ) end + sig { returns(T.nilable(T.any(Integer, String))) } + def bun_version + @bun_version ||= T.let( + package_manager_helper.setup(Bun::NAME), + T.nilable(T.any(Integer, String)) + ) + end + sig { returns(PackageManagerHelper) } def package_manager_helper @package_manager_helper ||= T.let( @@ -219,7 +236,8 @@ def lockfiles { npm: package_lock || shrinkwrap, yarn: yarn_lock, - pnpm: pnpm_lock + pnpm: pnpm_lock, + bun: bun_lock } end @@ -274,6 +292,27 @@ def pnpm_lock @pnpm_lock end + sig { returns(T.nilable(DependencyFile)) } + def bun_lock + return @bun_lock if defined?(@bun_lock) + + @bun_lock ||= T.let(fetch_file_if_present(Bun::LOCKFILE_NAME), T.nilable(DependencyFile)) + + return @bun_lock if @bun_lock || directory == "/" + + # Loop through parent directories looking for a pnpm-lock + (1..directory.split("/").count).each do |i| + @bun_lock = fetch_file_from_host(("../" * i) + Bun::LOCKFILE_NAME) + .tap { |f| f.support_file = true } + break if @bun_lock + rescue Dependabot::DependencyFileNotFound + # Ignore errors (bun.lock may not be present) + nil + end + + @bun_lock + end + sig { returns(T.nilable(DependencyFile)) } def shrinkwrap return @shrinkwrap if defined?(@shrinkwrap) diff --git a/npm_and_yarn/lib/dependabot/npm_and_yarn/file_parser.rb b/npm_and_yarn/lib/dependabot/npm_and_yarn/file_parser.rb index 11f3bb0a7a..d057993034 100644 --- a/npm_and_yarn/lib/dependabot/npm_and_yarn/file_parser.rb +++ b/npm_and_yarn/lib/dependabot/npm_and_yarn/file_parser.rb @@ -110,7 +110,8 @@ def lockfiles { npm: package_lock || shrinkwrap, yarn: yarn_lock, - pnpm: pnpm_lock + pnpm: pnpm_lock, + bun: bun_lock } end @@ -167,6 +168,13 @@ def pnpm_lock end, T.nilable(Dependabot::DependencyFile)) end + sig { returns(T.nilable(Dependabot::DependencyFile)) } + def bun_lock + @bun_lock ||= T.let(dependency_files.find do |f| + f.name == Bun::LOCKFILE_NAME + end, T.nilable(Dependabot::DependencyFile)) + end + sig { returns(T.nilable(Dependabot::DependencyFile)) } def npmrc @npmrc ||= T.let(dependency_files.find do |f| diff --git a/npm_and_yarn/lib/dependabot/npm_and_yarn/file_parser/bun_lock.rb b/npm_and_yarn/lib/dependabot/npm_and_yarn/file_parser/bun_lock.rb new file mode 100644 index 0000000000..592589d6e4 --- /dev/null +++ b/npm_and_yarn/lib/dependabot/npm_and_yarn/file_parser/bun_lock.rb @@ -0,0 +1,148 @@ +# typed: strict +# frozen_string_literal: true + +require "yaml" +require "dependabot/errors" +require "dependabot/npm_and_yarn/helpers" +require "sorbet-runtime" + +module Dependabot + module NpmAndYarn + class FileParser < Dependabot::FileParsers::Base + class BunLock + extend T::Sig + + sig { params(dependency_file: DependencyFile).void } + def initialize(dependency_file) + @dependency_file = dependency_file + end + + sig { returns(T::Hash[String, T.untyped]) } + def parsed + # Since bun.lock is a JSONC file, which is a subset of YAML, we can use YAML to parse it + content = YAML.load(T.must(@dependency_file.content)) + raise_invalid!("expected to be an object") unless content.is_a?(Hash) + + version = content["lockfileVersion"] + raise_invalid!("expected 'lockfileVersion' to be an integer") unless version.is_a?(Integer) + raise_invalid!("expected 'lockfileVersion' to be >= 0") unless version >= 0 + unless version.zero? + raise_invalid!(<<~ERROR + unsupported 'lockfileVersion' = #{version}, please open an issue with Dependabot to support this: + https://github.com/dependabot/dependabot/issues/new + ERROR + ) + end + + @content ||= T.let(content, T.untyped) + rescue Psych::SyntaxError => e + raise_invalid!("malformed JSONC at line #{e.line}, column #{e.column}") + end + + sig { returns(Integer) } + def version + parsed["lockfileVersion"] + end + + sig { returns(Dependabot::FileParsers::Base::DependencySet) } + def dependencies + dependency_set = Dependabot::FileParsers::Base::DependencySet.new + + # bun.lock v0 format: + # https://github.com/oven-sh/bun/blob/c130df6c589fdf28f9f3c7f23ed9901140bc9349/src/install/bun.lock.zig#L595-L605 + + packages = parsed["packages"] + raise_invalid!("expected 'packages' to be an object") unless packages.is_a?(Hash) + + packages.each do |key, details| + raise_invalid!("expected 'packages.#{key}' to be an array") unless details.is_a?(Array) + + resolution = details.first + raise_invalid!("expected 'packages.#{key}[0]' to be a string") unless resolution.is_a?(String) + + name, version = resolution.split(/(?<=\w)\@/) + next if name.empty? + + semver = Version.semver_for(version) + next unless semver + + dependency_set << Dependency.new( + name: name, + version: semver.to_s, + package_manager: "npm_and_yarn", + requirements: [] + ) + end + + dependency_set + end + + sig do + params(dependency_name: String, requirement: T.untyped, _manifest_name: String) + .returns(T.nilable(T::Hash[String, T.untyped])) + end + def details(dependency_name, requirement, _manifest_name) + packages = parsed["packages"] + return unless packages.is_a?(Hash) + + candidates = + packages + .select { |name, _| name == dependency_name } + .values + + # If there's only one entry for this dependency, use it, even if + # the requirement in the lockfile doesn't match + if candidates.one? + parse_details(candidates.first) + else + candidate = candidates.find do |label, _| + label.scan(/(?<=\w)\@(?:npm:)?([^\s,]+)/).flatten.include?(requirement) + end&.last + parse_details(candidate) + end + end + + private + + sig { params(message: String).void } + def raise_invalid!(message) + raise Dependabot::DependencyFileNotParseable.new(@dependency_file.path, "Invalid bun.lock file: #{message}") + end + + sig do + params(entry: T.nilable(T::Array[T.untyped])).returns(T.nilable(T::Hash[String, T.untyped])) + end + def parse_details(entry) + return unless entry.is_a?(Array) + + # Either: + # - "{name}@{version}", registry, details, integrity + # - "{name}@{resolution}", details + resolution = entry.first + return unless resolution.is_a?(String) + + name, version = resolution.split(/(?<=\w)\@/) + semver = Version.semver_for(version) + + if semver + registry, details, integrity = entry[1..3] + { + "name" => name, + "version" => semver.to_s, + "registry" => registry, + "details" => details, + "integrity" => integrity + } + else + details = entry[1] + { + "name" => name, + "resolution" => version, + "details" => details + } + end + end + end + end + end +end diff --git a/npm_and_yarn/lib/dependabot/npm_and_yarn/file_parser/lockfile_parser.rb b/npm_and_yarn/lib/dependabot/npm_and_yarn/file_parser/lockfile_parser.rb index f1e3b5f789..9ab38cfd81 100644 --- a/npm_and_yarn/lib/dependabot/npm_and_yarn/file_parser/lockfile_parser.rb +++ b/npm_and_yarn/lib/dependabot/npm_and_yarn/file_parser/lockfile_parser.rb @@ -15,6 +15,7 @@ class LockfileParser require "dependabot/npm_and_yarn/file_parser/yarn_lock" require "dependabot/npm_and_yarn/file_parser/pnpm_lock" require "dependabot/npm_and_yarn/file_parser/json_lock" + require "dependabot/npm_and_yarn/file_parser/bun_lock" sig { params(dependency_files: T::Array[DependencyFile]).void } def initialize(dependency_files:) @@ -29,7 +30,7 @@ def parse_set # end up unique by name. That's not a perfect representation of # the nested nature of JS resolution, but it makes everything work # comparably to other flat-resolution strategies - (yarn_locks + pnpm_locks + package_locks + shrinkwraps).each do |file| + (package_locks + yarn_locks + pnpm_locks + bun_locks + shrinkwraps).each do |file| dependency_set += lockfile_for(file).dependencies end @@ -65,24 +66,26 @@ def lockfile_details(dependency_name:, requirement:, manifest_name:) def potential_lockfiles_for_manifest(manifest_filename) dir_name = File.dirname(manifest_filename) possible_lockfile_names = - %w(package-lock.json npm-shrinkwrap.json pnpm-lock.yaml yarn.lock).map do |f| + %w(package-lock.json yarn.lock pnpm-lock.yaml bun.lock npm-shrinkwrap.json).map do |f| Pathname.new(File.join(dir_name, f)).cleanpath.to_path end + - %w(yarn.lock pnpm-lock.yaml package-lock.json npm-shrinkwrap.json) + %w(package-lock.json yarn.lock pnpm-lock.yaml bun.lock npm-shrinkwrap.json) possible_lockfile_names.uniq .filter_map { |nm| dependency_files.find { |f| f.name == nm } } end - sig { params(file: DependencyFile).returns(T.any(JsonLock, YarnLock, PnpmLock)) } + sig { params(file: DependencyFile).returns(T.any(JsonLock, YarnLock, PnpmLock, BunLock)) } def lockfile_for(file) - @lockfiles ||= T.let({}, T.nilable(T::Hash[String, T.any(JsonLock, YarnLock, PnpmLock)])) + @lockfiles ||= T.let({}, T.nilable(T::Hash[String, T.any(JsonLock, YarnLock, PnpmLock, BunLock)])) @lockfiles[file.name] ||= if [*package_locks, *shrinkwraps].include?(file) JsonLock.new(file) elsif yarn_locks.include?(file) YarnLock.new(file) - else + elsif pnpm_locks.include?(file) PnpmLock.new(file) + else + BunLock.new(file) end end @@ -102,6 +105,14 @@ def pnpm_locks ) end + sig { returns(T::Array[DependencyFile]) } + def bun_locks + @bun_locks ||= T.let( + dependency_files + .select { |f| f.name.end_with?("bun.lock") }, T.nilable(T::Array[DependencyFile]) + ) + end + sig { returns(T::Array[DependencyFile]) } def yarn_locks @yarn_locks ||= T.let( diff --git a/npm_and_yarn/lib/dependabot/npm_and_yarn/file_updater.rb b/npm_and_yarn/lib/dependabot/npm_and_yarn/file_updater.rb index bd3fb7cf9d..838c48eb56 100644 --- a/npm_and_yarn/lib/dependabot/npm_and_yarn/file_updater.rb +++ b/npm_and_yarn/lib/dependabot/npm_and_yarn/file_updater.rb @@ -18,6 +18,7 @@ class FileUpdater < Dependabot::FileUpdaters::Base require_relative "file_updater/npm_lockfile_updater" require_relative "file_updater/yarn_lockfile_updater" require_relative "file_updater/pnpm_lockfile_updater" + require_relative "file_updater/bun_lockfile_updater" class NoChangeError < StandardError extend T::Sig @@ -189,6 +190,15 @@ def pnpm_locks ) end + sig { returns(T::Array[Dependabot::DependencyFile]) } + def bun_locks + @bun_locks ||= T.let( + filtered_dependency_files + .select { |f| f.name.end_with?("bun.lock") }, + T.nilable(T::Array[Dependabot::DependencyFile]) + ) + end + sig { returns(T::Array[Dependabot::DependencyFile]) } def shrinkwraps @shrinkwraps ||= T.let( @@ -217,6 +227,11 @@ def pnpm_lock_changed?(pnpm_lock) pnpm_lock.content != updated_pnpm_lock_content(pnpm_lock) end + sig { params(bun_lock: Dependabot::DependencyFile).returns(T::Boolean) } + def bun_lock_changed?(bun_lock) + bun_lock.content != updated_bun_lock_content(bun_lock) + end + sig { params(package_lock: Dependabot::DependencyFile).returns(T::Boolean) } def package_lock_changed?(package_lock) package_lock.content != updated_lockfile_content(package_lock) @@ -237,6 +252,8 @@ def updated_manifest_files end end + # rubocop:disable Metrics/MethodLength + # rubocop:disable Metrics/PerceivedComplexity sig { returns(T::Array[Dependabot::DependencyFile]) } def updated_lockfiles updated_files = [] @@ -259,6 +276,15 @@ def updated_lockfiles ) end + bun_locks.each do |bun_lock| + next unless bun_lock_changed?(bun_lock) + + updated_files << updated_file( + file: bun_lock, + content: updated_bun_lock_content(bun_lock) + ) + end + package_locks.each do |package_lock| next unless package_lock_changed?(package_lock) @@ -279,6 +305,8 @@ def updated_lockfiles updated_files end + # rubocop:enable Metrics/MethodLength + # rubocop:enable Metrics/PerceivedComplexity sig { params(yarn_lock: Dependabot::DependencyFile).returns(String) } def updated_yarn_lock_content(yarn_lock) @@ -294,6 +322,13 @@ def updated_pnpm_lock_content(pnpm_lock) pnpm_lockfile_updater.updated_pnpm_lock_content(pnpm_lock) end + sig { params(bun_lock: Dependabot::DependencyFile).returns(String) } + def updated_bun_lock_content(bun_lock) + @updated_bun_lock_content ||= T.let({}, T.nilable(T::Hash[String, T.nilable(String)])) + @updated_bun_lock_content[bun_lock.name] ||= + bun_lockfile_updater.updated_bun_lock_content(bun_lock) + end + sig { returns(Dependabot::NpmAndYarn::FileUpdater::YarnLockfileUpdater) } def yarn_lockfile_updater @yarn_lockfile_updater ||= T.let( @@ -320,6 +355,19 @@ def pnpm_lockfile_updater ) end + sig { returns(Dependabot::NpmAndYarn::FileUpdater::BunLockfileUpdater) } + def bun_lockfile_updater + @bun_lockfile_updater ||= T.let( + BunLockfileUpdater.new( + dependencies: dependencies, + dependency_files: dependency_files, + repo_contents_path: repo_contents_path, + credentials: credentials + ), + T.nilable(Dependabot::NpmAndYarn::FileUpdater::BunLockfileUpdater) + ) + end + sig { params(file: Dependabot::DependencyFile).returns(T.nilable(String)) } def updated_lockfile_content(file) @updated_lockfile_content ||= T.let({}, T.nilable(T::Hash[String, T.nilable(String)])) diff --git a/npm_and_yarn/lib/dependabot/npm_and_yarn/file_updater/bun_lockfile_updater.rb b/npm_and_yarn/lib/dependabot/npm_and_yarn/file_updater/bun_lockfile_updater.rb new file mode 100644 index 0000000000..b88fc689e9 --- /dev/null +++ b/npm_and_yarn/lib/dependabot/npm_and_yarn/file_updater/bun_lockfile_updater.rb @@ -0,0 +1,144 @@ +# typed: true +# frozen_string_literal: true + +require "dependabot/npm_and_yarn/helpers" +require "dependabot/npm_and_yarn/update_checker/registry_finder" +require "dependabot/npm_and_yarn/registry_parser" +require "dependabot/shared_helpers" + +module Dependabot + module NpmAndYarn + class FileUpdater < Dependabot::FileUpdaters::Base + class BunLockfileUpdater + require_relative "npmrc_builder" + require_relative "package_json_updater" + + def initialize(dependencies:, dependency_files:, repo_contents_path:, credentials:) + @dependencies = dependencies + @dependency_files = dependency_files + @repo_contents_path = repo_contents_path + @credentials = credentials + end + + def updated_bun_lock_content(bun_lock) + @updated_bun_lock_content ||= {} + return @updated_bun_lock_content[bun_lock.name] if @updated_bun_lock_content[bun_lock.name] + + new_content = run_bun_update(bun_lock: bun_lock) + @updated_bun_lock_content[bun_lock.name] = new_content + rescue SharedHelpers::HelperSubprocessFailed => e + handle_bun_lock_updater_error(e, bun_lock) + end + + private + + attr_reader :dependencies + attr_reader :dependency_files + attr_reader :repo_contents_path + attr_reader :credentials + + ERR_PATTERNS = { + /get .* 404/i => Dependabot::DependencyNotFound, + /installfailed cloning repository/i => Dependabot::DependencyNotFound, + /file:.* failed to resolve/i => Dependabot::DependencyNotFound, + /no version matching/i => Dependabot::DependencyFileNotResolvable, + /failed to resolve/i => Dependabot::DependencyFileNotResolvable + }.freeze + + def run_bun_update(bun_lock:) + SharedHelpers.in_a_temporary_repo_directory(base_dir, repo_contents_path) do + File.write(".npmrc", npmrc_content(bun_lock)) + + SharedHelpers.with_git_configured(credentials: credentials) do + run_bun_updater + + write_final_package_json_files + + run_bun_install + + File.read(bun_lock.name) + end + end + end + + def run_bun_updater + dependency_updates = dependencies.map do |d| + "#{d.name}@#{d.version}" + end.join(" ") + + Helpers.run_bun_command( + "install #{dependency_updates} --save-text-lockfile", + fingerprint: "install --save-text-lockfile" + ) + end + + def run_bun_install + Helpers.run_bun_command( + "install --save-text-lockfile" + ) + end + + def lockfile_dependencies(lockfile) + @lockfile_dependencies ||= {} + @lockfile_dependencies[lockfile.name] ||= + NpmAndYarn::FileParser.new( + dependency_files: [lockfile, *package_files], + source: nil, + credentials: credentials + ).parse + end + + def handle_bun_lock_updater_error(error, _bun_lock) + error_message = error.message + + ERR_PATTERNS.each do |pattern, error_class| + raise error_class, error_message if error_message.match?(pattern) + end + + raise error + end + + def write_final_package_json_files + package_files.each do |file| + path = file.name + FileUtils.mkdir_p(Pathname.new(path).dirname) + File.write(path, updated_package_json_content(file)) + end + end + + def npmrc_content(bun_lock) + NpmrcBuilder.new( + credentials: credentials, + dependency_files: dependency_files, + dependencies: lockfile_dependencies(bun_lock) + ).npmrc_content + end + + def updated_package_json_content(file) + @updated_package_json_content ||= {} + @updated_package_json_content[file.name] ||= + PackageJsonUpdater.new( + package_json: file, + dependencies: dependencies + ).updated_package_json.content + end + + def package_files + @package_files ||= dependency_files.select { |f| f.name.end_with?("package.json") } + end + + def base_dir + dependency_files.first.directory + end + + def npmrc_file + dependency_files.find { |f| f.name == ".npmrc" } + end + + def sanitize_message(message) + message.gsub(/"|\[|\]|\}|\{/, "") + end + end + end + end +end diff --git a/npm_and_yarn/lib/dependabot/npm_and_yarn/helpers.rb b/npm_and_yarn/lib/dependabot/npm_and_yarn/helpers.rb index 5129d1d6d3..773a22efde 100644 --- a/npm_and_yarn/lib/dependabot/npm_and_yarn/helpers.rb +++ b/npm_and_yarn/lib/dependabot/npm_and_yarn/helpers.rb @@ -29,6 +29,10 @@ module Helpers # rubocop:disable Metrics/ModuleLength PNPM_DEFAULT_VERSION = PNPM_V9 PNPM_FALLBACK_VERSION = PNPM_V6 + # BUN Version Constants + BUN_V1 = 1 + BUN_DEFAULT_VERSION = BUN_V1 + # YARN Version Constants YARN_V3 = 3 YARN_V2 = 2 @@ -161,6 +165,11 @@ def self.pnpm_version_numeric(pnpm_lock) PNPM_FALLBACK_VERSION end + sig { params(_bun_lock: T.nilable(DependencyFile)).returns(Integer) } + def self.bun_version_numeric(_bun_lock) + BUN_DEFAULT_VERSION + end + sig { params(key: String, default_value: String).returns(T.untyped) } def self.fetch_yarnrc_yml_value(key, default_value) if File.exist?(".yarnrc.yml") && (yarnrc = YAML.load_file(".yarnrc.yml")) @@ -354,6 +363,35 @@ def self.run_node_command(command, fingerprint: nil) raise end + sig { returns(T.nilable(String)) } + def self.bun_version + version = run_bun_command("--version", fingerprint: "--version").strip + if version.include?("+") + version.split("+").first # Remove build info, if present + end + rescue StandardError => e + Dependabot.logger.error("Error retrieving Bun version: #{e.message}") + nil + end + + sig { params(command: String, fingerprint: T.nilable(String)).returns(String) } + def self.run_bun_command(command, fingerprint: nil) + full_command = "bun #{command}" + + Dependabot.logger.info("Running bun command: #{full_command}") + + result = Dependabot::SharedHelpers.run_shell_command( + full_command, + fingerprint: "bun #{fingerprint || command}" + ) + + Dependabot.logger.info("Command executed successfully: #{full_command}") + result + rescue StandardError => e + Dependabot.logger.error("Error running bun command: #{full_command}, Error: #{e.message}") + raise + end + # Setup yarn and run a single yarn command returning stdout/stderr sig { params(command: String, fingerprint: T.nilable(String)).returns(String) } def self.run_yarn_command(command, fingerprint: nil) @@ -498,6 +536,8 @@ def self.package_manager_version(name) ).returns(String) end def self.package_manager_run_command(name, command, fingerprint: nil) + return run_bun_command(command, fingerprint: fingerprint) if name == Bun::NAME + full_command = "corepack #{name} #{command}" result = Dependabot::SharedHelpers.run_shell_command( diff --git a/npm_and_yarn/lib/dependabot/npm_and_yarn/package_manager.rb b/npm_and_yarn/lib/dependabot/npm_and_yarn/package_manager.rb index 98f5555ea1..dc901ec7ed 100644 --- a/npm_and_yarn/lib/dependabot/npm_and_yarn/package_manager.rb +++ b/npm_and_yarn/lib/dependabot/npm_and_yarn/package_manager.rb @@ -193,6 +193,44 @@ def unsupported? end end + class Bun < Ecosystem::VersionManager + extend T::Sig + NAME = "bun" + LOCKFILE_NAME = "bun.lock" + + # In Bun 1.1.39, the lockfile format was changed from a binary bun.lockb to a text-based bun.lock. + # https://bun.sh/blog/bun-lock-text-lockfile + MIN_SUPPORTED_VERSION = Version.new("1.1.39") + SUPPORTED_VERSIONS = T.let([MIN_SUPPORTED_VERSION].freeze, T::Array[Dependabot::Version]) + DEPRECATED_VERSIONS = T.let([].freeze, T::Array[Dependabot::Version]) + + sig do + params( + raw_version: String, + requirement: T.nilable(Requirement) + ).void + end + def initialize(raw_version, requirement: nil) + super( + name: NAME, + version: Version.new(raw_version), + deprecated_versions: DEPRECATED_VERSIONS, + supported_versions: SUPPORTED_VERSIONS, + requirement: requirement + ) + end + + sig { override.returns(T::Boolean) } + def deprecated? + false + end + + sig { override.returns(T::Boolean) } + def unsupported? + supported_versions.all? { |supported| supported > version } + end + end + DEFAULT_PACKAGE_MANAGER = NpmPackageManager::NAME # Define a type alias for the expected class interface @@ -200,14 +238,16 @@ def unsupported? T.any( T.class_of(Dependabot::NpmAndYarn::NpmPackageManager), T.class_of(Dependabot::NpmAndYarn::YarnPackageManager), - T.class_of(Dependabot::NpmAndYarn::PNPMPackageManager) + T.class_of(Dependabot::NpmAndYarn::PNPMPackageManager), + T.class_of(Dependabot::NpmAndYarn::Bun) ) end PACKAGE_MANAGER_CLASSES = T.let({ NpmPackageManager::NAME => NpmPackageManager, YarnPackageManager::NAME => YarnPackageManager, - PNPMPackageManager::NAME => PNPMPackageManager + PNPMPackageManager::NAME => PNPMPackageManager, + Bun::NAME => Bun }.freeze, T::Hash[String, NpmAndYarnPackageManagerClassType]) class PackageManagerDetector @@ -227,7 +267,7 @@ def initialize(lockfiles, package_json) @engines = T.let(package_json&.fetch(MANIFEST_ENGINES_KEY, {}), T::Hash[String, T.untyped]) end - # Returns npm, yarn, or pnpm based on the lockfiles, package.json, and engines + # Returns npm, yarn, pnpm, or bun based on the lockfiles, package.json, and engines # Defaults to npm if no package manager is detected sig { returns(String) } def detect_package_manager @@ -274,7 +314,7 @@ def name_from_engines end end - class Language < Ecosystem::VersionManager + class Node < Ecosystem::VersionManager extend T::Sig NAME = "node" @@ -348,7 +388,7 @@ def package_manager sig { returns(Ecosystem::VersionManager) } def language - @language ||= Language.new( + @language ||= Node.new( Helpers.node_version, requirement: language_requirement ) @@ -356,7 +396,7 @@ def language sig { returns(T.nilable(Requirement)) } def language_requirement - @language_requirement ||= find_engine_constraints_as_requirement(Language::NAME) + @language_requirement ||= find_engine_constraints_as_requirement(Node::NAME) end sig { params(name: String).returns(T.nilable(Requirement)) } diff --git a/npm_and_yarn/lib/dependabot/npm_and_yarn/sub_dependency_files_filterer.rb b/npm_and_yarn/lib/dependabot/npm_and_yarn/sub_dependency_files_filterer.rb index 9a6334a004..0ba864b683 100644 --- a/npm_and_yarn/lib/dependabot/npm_and_yarn/sub_dependency_files_filterer.rb +++ b/npm_and_yarn/lib/dependabot/npm_and_yarn/sub_dependency_files_filterer.rb @@ -68,7 +68,8 @@ def lockfile?(file) "package-lock.json", "yarn.lock", "npm-shrinkwrap.json", - "pnpm-lock.yaml" + "pnpm-lock.yaml", + "bun.lock" ) end diff --git a/npm_and_yarn/lib/dependabot/npm_and_yarn/update_checker/dependency_files_builder.rb b/npm_and_yarn/lib/dependabot/npm_and_yarn/update_checker/dependency_files_builder.rb index 4bc4297966..fccf40ac23 100644 --- a/npm_and_yarn/lib/dependabot/npm_and_yarn/update_checker/dependency_files_builder.rb +++ b/npm_and_yarn/lib/dependabot/npm_and_yarn/update_checker/dependency_files_builder.rb @@ -49,6 +49,12 @@ def pnpm_locks .select { |f| f.name.end_with?("pnpm-lock.yaml") } end + def bun_locks + @bun_locks ||= + dependency_files + .select { |f| f.name.end_with?("bun.lock") } + end + def root_yarn_lock @root_yarn_lock ||= dependency_files @@ -61,6 +67,12 @@ def root_pnpm_lock .find { |f| f.name == "pnpm-lock.yaml" } end + def root_bun_lock + @root_bun_lock ||= + dependency_files + .find { |f| f.name == "bun.lock" } + end + def shrinkwraps @shrinkwraps ||= dependency_files @@ -68,7 +80,7 @@ def shrinkwraps end def lockfiles - [*package_locks, *shrinkwraps, *yarn_locks, *pnpm_locks] + [*package_locks, *shrinkwraps, *yarn_locks, *pnpm_locks, *bun_locks] end def package_files @@ -89,12 +101,7 @@ def write_lockfiles File.write(f.name, prepared_yarn_lockfile_content(f.content)) end - pnpm_locks.each do |f| - FileUtils.mkdir_p(Pathname.new(f.name).dirname) - File.write(f.name, f.content) - end - - [*package_locks, *shrinkwraps].each do |f| + [*package_locks, *shrinkwraps, *pnpm_locks, *bun_locks].each do |f| FileUtils.mkdir_p(Pathname.new(f.name).dirname) File.write(f.name, f.content) end diff --git a/npm_and_yarn/lib/dependabot/npm_and_yarn/update_checker/subdependency_version_resolver.rb b/npm_and_yarn/lib/dependabot/npm_and_yarn/update_checker/subdependency_version_resolver.rb index 00d7e86931..5c50f218bc 100644 --- a/npm_and_yarn/lib/dependabot/npm_and_yarn/update_checker/subdependency_version_resolver.rb +++ b/npm_and_yarn/lib/dependabot/npm_and_yarn/update_checker/subdependency_version_resolver.rb @@ -64,7 +64,9 @@ def update_subdependency_in_lockfile(lockfile) lockfile_name = Pathname.new(lockfile.name).basename.to_s path = Pathname.new(lockfile.name).dirname.to_s - updated_files = if lockfile.name.end_with?("yarn.lock") && Helpers.yarn_berry?(lockfile) + updated_files = if lockfile.name.end_with?("bun.lock") + run_bun_updater(path, lockfile_name) + elsif lockfile.name.end_with?("yarn.lock") && Helpers.yarn_berry?(lockfile) run_yarn_berry_updater(path, lockfile_name) elsif lockfile.name.end_with?("yarn.lock") run_yarn_updater(path, lockfile_name) @@ -143,6 +145,18 @@ def run_pnpm_updater(path, lockfile_name) end end + def run_bun_updater(path, lockfile_name) + SharedHelpers.with_git_configured(credentials: credentials) do + Dir.chdir(path) do + Helpers.run_bun_command( + "update #{dependency.name} --save-text-lockfile", + fingerprint: "update --save-text-lockfile" + ) + { lockfile_name => File.read(lockfile_name) } + end + end + end + def run_npm_updater(path, lockfile_name) SharedHelpers.with_git_configured(credentials: credentials) do Dir.chdir(path) do diff --git a/npm_and_yarn/lib/dependabot/npm_and_yarn/update_checker/version_resolver.rb b/npm_and_yarn/lib/dependabot/npm_and_yarn/update_checker/version_resolver.rb index 0bc03a8d02..7ff19cd45f 100644 --- a/npm_and_yarn/lib/dependabot/npm_and_yarn/update_checker/version_resolver.rb +++ b/npm_and_yarn/lib/dependabot/npm_and_yarn/update_checker/version_resolver.rb @@ -413,6 +413,8 @@ def old_unmet_peer_dependencies end def error_details_from_captures(captures) + return {} unless captures.is_a?(Hash) + required_dep_captures = captures.fetch("required_dep") requiring_dep_captures = captures.fetch("requiring_dep") return {} unless required_dep_captures && requiring_dep_captures @@ -540,6 +542,9 @@ def lockfiles_for_path(lockfiles:, path:) end def run_checker(path:, version:) + bun_lockfiles = lockfiles_for_path(lockfiles: dependency_files_builder.bun_locks, path: path) + return run_bun_checker(path: path, version: version) if bun_lockfiles.any? + yarn_lockfiles = lockfiles_for_path(lockfiles: dependency_files_builder.yarn_locks, path: path) return run_yarn_checker(path: path, version: version, lockfile: yarn_lockfiles.first) if yarn_lockfiles.any? @@ -549,6 +554,9 @@ def run_checker(path:, version:) npm_lockfiles = lockfiles_for_path(lockfiles: dependency_files_builder.package_locks, path: path) return run_npm_checker(path: path, version: version) if npm_lockfiles.any? + root_bun_lock = dependency_files_builder.root_bun_lock + return run_bun_checker(path: path, version: version) if root_bun_lock + root_yarn_lock = dependency_files_builder.root_yarn_lock return run_yarn_checker(path: path, version: version, lockfile: root_yarn_lock) if root_yarn_lock @@ -583,6 +591,17 @@ def run_pnpm_checker(path:, version:) end end + def run_bun_checker(path:, version:) + SharedHelpers.with_git_configured(credentials: credentials) do + Dir.chdir(path) do + Helpers.run_bun_command( + "update #{dependency.name}@#{version} --save-text-lockfile", + fingerprint: "update @ --save-text-lockfile" + ) + end + end + end + def run_yarn_berry_checker(path:, version:) # This method mimics calling a native helper in order to comply with the caller's expectations # Specifically we add the dependency at the specified updated version diff --git a/npm_and_yarn/spec/dependabot/npm_and_yarn/bun_spec.rb b/npm_and_yarn/spec/dependabot/npm_and_yarn/bun_spec.rb new file mode 100644 index 0000000000..da9e5f0342 --- /dev/null +++ b/npm_and_yarn/spec/dependabot/npm_and_yarn/bun_spec.rb @@ -0,0 +1,60 @@ +# typed: false +# frozen_string_literal: true + +require "dependabot/npm_and_yarn/package_manager" +require "dependabot/ecosystem" +require "spec_helper" + +RSpec.describe Dependabot::NpmAndYarn::Bun do + let(:package_manager) { described_class.new(version) } + + describe "#initialize" do + context "when version is a String" do + let(:version) { "1" } + + it "sets the version correctly" do + expect(package_manager.version).to eq(Dependabot::Version.new(version)) + end + + it "sets the name correctly" do + expect(package_manager.name).to eq(Dependabot::NpmAndYarn::Bun::NAME) + end + + it "sets the deprecated_versions correctly" do + expect(package_manager.deprecated_versions).to eq( + Dependabot::NpmAndYarn::Bun::DEPRECATED_VERSIONS + ) + end + + it "sets the supported_versions correctly" do + expect(package_manager.supported_versions).to eq(Dependabot::NpmAndYarn::Bun::SUPPORTED_VERSIONS) + end + end + end + + describe "#deprecated?" do + let(:version) { "1" } + + it "returns false" do + expect(package_manager.deprecated?).to be false + end + end + + describe "#unsupported?" do + context "when version is the minimum supported version" do + let(:version) { Dependabot::NpmAndYarn::Bun::MIN_SUPPORTED_VERSION.to_s } + + it "returns false" do + expect(package_manager.unsupported?).to be false + end + end + + context "when version is unsupported" do + let(:version) { "1.1.38" } + + it "returns true" do + expect(package_manager.unsupported?).to be true + end + end + end +end diff --git a/npm_and_yarn/spec/dependabot/npm_and_yarn/dependency_files_filterer_spec.rb b/npm_and_yarn/spec/dependabot/npm_and_yarn/dependency_files_filterer_spec.rb index 2688987838..03446c15cb 100644 --- a/npm_and_yarn/spec/dependabot/npm_and_yarn/dependency_files_filterer_spec.rb +++ b/npm_and_yarn/spec/dependabot/npm_and_yarn/dependency_files_filterer_spec.rb @@ -150,6 +150,17 @@ def project_dependency_file(file_name) end end + context "when using bun.lock" do + let(:project_name) { "bun/simple_v0" } + + it do + expect(files_requiring_update).to contain_exactly( + project_dependency_file("package.json"), + project_dependency_file("bun.lock") + ) + end + end + context "with multiple dependencies" do let(:project_name) { "npm6_and_yarn/nested_dependency_update" } let(:updated_dependencies) { [dependency, other_dependency] } diff --git a/npm_and_yarn/spec/dependabot/npm_and_yarn/file_fetcher_spec.rb b/npm_and_yarn/spec/dependabot/npm_and_yarn/file_fetcher_spec.rb index 3ef3f99a60..1a18fde224 100644 --- a/npm_and_yarn/spec/dependabot/npm_and_yarn/file_fetcher_spec.rb +++ b/npm_and_yarn/spec/dependabot/npm_and_yarn/file_fetcher_spec.rb @@ -379,6 +379,20 @@ body: nil, headers: json_header ) + stub_request(:get, File.join(url, "bun.lock?ref=sha")) + .with(headers: { "Authorization" => "token token" }) + .to_return( + status: 404, + body: nil, + headers: json_header + ) + stub_request(:get, File.join(url, "packages/bun.lock?ref=sha")) + .with(headers: { "Authorization" => "token token" }) + .to_return( + status: 404, + body: nil, + headers: json_header + ) # FileFetcher will iterate trying to find `pnpm-lock.yaml` upwards in the folder tree stub_request(:get, File.join(url, "packages/pnpm-lock.yaml?ref=sha")) .with(headers: { "Authorization" => "token token" }) @@ -488,6 +502,39 @@ end end + context "with a bun.lock but no package-lock.json file" do + before do + stub_request(:get, url + "?ref=sha") + .with(headers: { "Authorization" => "token token" }) + .to_return( + status: 200, + body: fixture("github", "contents_js_bun.json"), + headers: json_header + ) + stub_request(:get, File.join(url, "package-lock.json?ref=sha")) + .with(headers: { "Authorization" => "token token" }) + .to_return(status: 404) + stub_request(:get, File.join(url, "bun.lock?ref=sha")) + .with(headers: { "Authorization" => "token token" }) + .to_return( + status: 200, + body: fixture("github", "bun_lock_content.json"), + headers: json_header + ) + end + + it "fetches the package.json and bun.lock" do + expect(file_fetcher_instance.files.map(&:name)) + .to match_array(%w(package.json bun.lock)) + end + + it "parses the bun.lock" do + expect(file_fetcher_instance.ecosystem_versions).to match( + { package_managers: { "bun" => an_instance_of(Integer) } } + ) + end + end + context "with an npm-shrinkwrap.json but no package-lock.json file" do before do stub_request(:get, url + "?ref=sha") @@ -1271,6 +1318,12 @@ "pnpm-lock.yaml?ref=sha" ).with(headers: { "Authorization" => "token token" }) .to_return(status: 404) + stub_request( + :get, + "https://api.github.com/repos/gocardless/bump/contents/" \ + "bun.lock?ref=sha" + ).with(headers: { "Authorization" => "token token" }) + .to_return(status: 404) end it "fetches package.json from the workspace dependencies" do @@ -1840,6 +1893,12 @@ "pnpm-lock.yaml?ref=sha" ).with(headers: { "Authorization" => "token token" }) .to_return(status: 404) + stub_request( + :get, + "https://api.github.com/repos/gocardless/bump/contents/" \ + "bun.lock?ref=sha" + ).with(headers: { "Authorization" => "token token" }) + .to_return(status: 404) end it "fetches package.json from the workspace dependencies" do diff --git a/npm_and_yarn/spec/dependabot/npm_and_yarn/file_parser/lockfile_parser_spec.rb b/npm_and_yarn/spec/dependabot/npm_and_yarn/file_parser/lockfile_parser_spec.rb index 7b36891c13..2a11a29b0b 100644 --- a/npm_and_yarn/spec/dependabot/npm_and_yarn/file_parser/lockfile_parser_spec.rb +++ b/npm_and_yarn/spec/dependabot/npm_and_yarn/file_parser/lockfile_parser_spec.rb @@ -319,6 +319,70 @@ end end end + + context "when dealing with bun.lock" do + context "when the lockfile is invalid" do + let(:dependency_files) { project_dependency_files("bun/invalid_lockfile") } + + it "raises a DependencyFileNotParseable error" do + expect { dependencies } + .to raise_error(Dependabot::DependencyFileNotParseable) do |error| + expect(error.file_name).to eq("bun.lock") + expect(error.message).to eq("Invalid bun.lock file: malformed JSONC at line 3, column 1") + end + end + end + + context "when the lockfile version is invalid" do + let(:dependency_files) { project_dependency_files("bun/invalid_lockfile_version") } + + it "raises a DependencyFileNotParseable error" do + expect { dependencies } + .to raise_error(Dependabot::DependencyFileNotParseable) do |error| + expect(error.file_name).to eq("bun.lock") + expect(error.message).to include("lockfileVersion") + end + end + end + + context "when dealing with v0 format" do + context "with a simple project" do + let(:dependency_files) { project_dependency_files("bun/simple_v0") } + + it "parses dependencies properly" do + expect(dependencies.find { |d| d.name == "fetch-factory" }).to have_attributes( + name: "fetch-factory", + version: "0.0.1" + ) + expect(dependencies.find { |d| d.name == "etag" }).to have_attributes( + name: "etag", + version: "1.8.1" + ) + expect(dependencies.length).to eq(11) + end + end + + context "with a simple workspace project" do + let(:dependency_files) { project_dependency_files("bun/simple_workspace_v0") } + + it "parses dependencies properly" do + expect(dependencies.find { |d| d.name == "etag" }).to have_attributes( + name: "etag", + version: "1.8.1" + ) + expect(dependencies.find { |d| d.name == "lodash" }).to have_attributes( + name: "lodash", + version: "1.3.1" + ) + expect(dependencies.find { |d| d.name == "chalk" }).to have_attributes( + name: "chalk", + version: "0.3.0" + ) + expect(dependencies.length).to eq(5) + end + end + end + end end describe "#lockfile_details" do @@ -617,5 +681,24 @@ end end end + + context "when dealing with bun.lock" do + let(:dependency_files) { project_dependency_files("bun/simple_v0") } + let(:dependency_name) { "fetch-factory" } + let(:manifest_name) { "package.json" } + + it "finds the dependency" do + # rubocop:disable Layout/LineLength + expect(lockfile_details).to eq({ + "name" => "fetch-factory", + "version" => "0.0.1", + "registry" => "", + "details" => { "dependencies" => { "es6-promise" => "^3.0.2", "isomorphic-fetch" => "^2.1.1", + "lodash" => "^3.10.1" } }, + "integrity" => "sha512-gexRwqIhwzDJ2pJvL0UYfiZwW06/bdYWxAmswFFts7C87CF8i6liApihTk7TZFYMDcQjvvDIvyHv0q379z0aWA==" + }) + # rubocop:enable Layout/LineLength + end + end end end diff --git a/npm_and_yarn/spec/dependabot/npm_and_yarn/file_updater/bun_lockfile_updater_spec.rb b/npm_and_yarn/spec/dependabot/npm_and_yarn/file_updater/bun_lockfile_updater_spec.rb new file mode 100644 index 0000000000..66604cd493 --- /dev/null +++ b/npm_and_yarn/spec/dependabot/npm_and_yarn/file_updater/bun_lockfile_updater_spec.rb @@ -0,0 +1,167 @@ +# typed: false +# frozen_string_literal: true + +require "spec_helper" +require "dependabot/npm_and_yarn/file_updater/bun_lockfile_updater" + +RSpec.describe Dependabot::NpmAndYarn::FileUpdater::BunLockfileUpdater do + subject(:updated_bun_lock_content) { updater.updated_bun_lock_content(bun_lock) } + + let(:updater) do + described_class.new( + dependency_files: files, + dependencies: dependencies, + credentials: credentials, + repo_contents_path: repo_contents_path + ) + end + let(:dependencies) { [dependency] } + + let(:credentials) do + [Dependabot::Credential.new({ + "type" => "git_source", + "host" => "github.com" + })] + end + let(:dependency) do + Dependabot::Dependency.new( + name: dependency_name, + version: version, + previous_version: previous_version, + requirements: requirements, + previous_requirements: previous_requirements, + package_manager: "npm_and_yarn" + ) + end + let(:dependency_name) { "fetch-factory" } + let(:version) { "0.0.2" } + let(:previous_version) { "0.0.1" } + let(:requirements) do + [{ + file: "package.json", + requirement: "^0.0.2", + groups: ["dependencies"], + source: nil + }] + end + let(:previous_requirements) do + [{ + file: "package.json", + requirement: "^0.0.1", + groups: ["dependencies"], + source: nil + }] + end + + let(:files) { project_dependency_files(project_name) } + + let(:bun_lock) do + files.find { |f| f.name == "bun.lock" } + end + + let(:tmp_path) { Dependabot::Utils::BUMP_TMP_DIR_PATH } + + let(:repo_contents_path) { build_tmp_repo(project_name, path: "projects") } + + before do + FileUtils.mkdir_p(tmp_path) + allow(Dependabot::Experiments).to receive(:enabled?) + .with(:enable_shared_helpers_command_timeout).and_return(true) + end + + after do + Dependabot::Experiments.reset! + end + + describe "errors" do + context "without dependencies" do + let(:project_name) { "bun/empty" } + + it "raises a helpful error" do + expect { updated_bun_lock_content } + .to raise_error("Expected content to change!") + end + end + + context "with an invalid lockfile" do + let(:project_name) { "bun/invalid_lockfile" } + + it "raises a helpful error" do + expect { updated_bun_lock_content } + .to raise_error(Dependabot::DependencyFileNotParseable) + end + end + + context "with an invalid lockfile version" do + let(:project_name) { "bun/invalid_lockfile_version" } + + it "raises a helpful error" do + expect { updated_bun_lock_content } + .to raise_error(Dependabot::DependencyFileNotParseable) + end + end + + context "with a dependency that is missing" do + let(:project_name) { "bun/missing_dependency" } + + it "raises a helpful error" do + expect { updated_bun_lock_content } + .to raise_error(Dependabot::DependencyNotFound) + end + end + + context "with a dependency version that is missing" do + let(:project_name) { "bun/missing_dependency_version" } + + it "raises a helpful error" do + expect { updated_bun_lock_content } + .to raise_error(Dependabot::DependencyFileNotResolvable) + end + end + + context "with a git dependency that is missing" do + let(:project_name) { "bun/missing_git_dependency" } + + it "raises a helpful error" do + expect { updated_bun_lock_content } + .to raise_error(Dependabot::DependencyNotFound) + end + end + + context "with a github dependency that is missing" do + let(:project_name) { "bun/missing_github_dependency" } + + it "raises a helpful error" do + expect { updated_bun_lock_content } + .to raise_error(Dependabot::DependencyNotFound) + end + end + + context "with a tarball dependency that is missing" do + let(:project_name) { "bun/missing_tarball_dependency" } + + it "raises a helpful error" do + expect { updated_bun_lock_content } + .to raise_error(Dependabot::DependencyNotFound) + end + end + + context "with a npm dependency that is missing" do + let(:project_name) { "bun/missing_npm_dependency" } + + it "raises a helpful error" do + expect { updated_bun_lock_content } + .to raise_error(Dependabot::DependencyNotFound) + end + end + + context "with a file dependency that is missing" do + let(:project_name) { "bun/missing_file_dependency" } + + it "raises a helpful error" do + expect { updated_bun_lock_content } + .to raise_error(Dependabot::DependencyNotFound) + end + end + end +end diff --git a/npm_and_yarn/spec/dependabot/npm_and_yarn/language_spec.rb b/npm_and_yarn/spec/dependabot/npm_and_yarn/node_spec.rb similarity index 86% rename from npm_and_yarn/spec/dependabot/npm_and_yarn/language_spec.rb rename to npm_and_yarn/spec/dependabot/npm_and_yarn/node_spec.rb index 380e2ddb84..b161926e22 100644 --- a/npm_and_yarn/spec/dependabot/npm_and_yarn/language_spec.rb +++ b/npm_and_yarn/spec/dependabot/npm_and_yarn/node_spec.rb @@ -5,7 +5,7 @@ require "dependabot/npm_and_yarn/package_manager" require "spec_helper" -RSpec.describe Dependabot::NpmAndYarn::Language do +RSpec.describe Dependabot::NpmAndYarn::Node do let(:language) { described_class.new(raw_version, requirement: requirement) } let(:raw_version) { "16.13.1" } let(:requirement) { nil } @@ -16,15 +16,15 @@ end it "sets the name correctly" do - expect(language.name).to eq(Dependabot::NpmAndYarn::Language::NAME) + expect(language.name).to eq(Dependabot::NpmAndYarn::Node::NAME) end it "sets the deprecated_versions correctly" do - expect(language.deprecated_versions).to eq(Dependabot::NpmAndYarn::Language::DEPRECATED_VERSIONS) + expect(language.deprecated_versions).to eq(Dependabot::NpmAndYarn::Node::DEPRECATED_VERSIONS) end it "sets the supported_versions correctly" do - expect(language.supported_versions).to eq(Dependabot::NpmAndYarn::Language::SUPPORTED_VERSIONS) + expect(language.supported_versions).to eq(Dependabot::NpmAndYarn::Node::SUPPORTED_VERSIONS) end context "when a requirement is provided" do diff --git a/npm_and_yarn/spec/fixtures/github/bun_lock_content.json b/npm_and_yarn/spec/fixtures/github/bun_lock_content.json new file mode 100644 index 0000000000..e0a6c2e520 --- /dev/null +++ b/npm_and_yarn/spec/fixtures/github/bun_lock_content.json @@ -0,0 +1,18 @@ +{ + "name": "bun.lock", + "path": "bun.lock", + "sha": "5b0a45fe1229f38af2dedd390b9c531458b07262", + "size": 102275, + "url": "https://api.github.com/repos/toddledev/toddle/contents/bun.lock?ref=main", + "html_url": "https://github.com/toddledev/toddle/blob/main/bun.lock", + "git_url": "https://api.github.com/repos/toddledev/toddle/git/blobs/5b0a45fe1229f38af2dedd390b9c531458b07262", + "download_url": "https://raw.githubusercontent.com/toddledev/toddle/main/bun.lock", + "type": "file", + "content": "ewogICJsb2NrZmlsZVZlcnNpb24iOiAwLAogICJ3b3Jrc3BhY2VzIjogewog\nICAgIiI6IHsKICAgICAgImRldkRlcGVuZGVuY2llcyI6IHsKICAgICAgICAi\nQGVzbGludC9qcyI6ICI5LjE2LjAiLAogICAgICAgICJAdHlwZXMvamVzdCI6\nICIyOS41LjE0IiwKICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L2VzbGlu\ndC1wbHVnaW4iOiAiOC4xNi4wIiwKICAgICAgICAiQHR5cGVzY3JpcHQtZXNs\naW50L3BhcnNlciI6ICI4LjE2LjAiLAogICAgICAgICJlc2xpbnQiOiAiOS4x\nNC4wIiwKICAgICAgICAiZXNsaW50LXBsdWdpbi1pbmNsdXNpdmUtbGFuZ3Vh\nZ2UiOiAiMi4yLjEiLAogICAgICAgICJqZXN0IjogIjI5LjcuMCIsCiAgICAg\nICAgInByZXR0aWVyIjogIjMuMy4zIiwKICAgICAgICAicHJldHRpZXItcGx1\nZ2luLW9yZ2FuaXplLWltcG9ydHMiOiAiNC4xLjAiLAogICAgICAgICJ0eXBl\nc2NyaXB0IjogIjUuNy4yIiwKICAgICAgfSwKICAgIH0sCiAgICAicGFja2Fn\nZXMvY29yZSI6IHsKICAgICAgIm5hbWUiOiAiQHRvZGRsZWRldi9jb3JlIiwK\nICAgICAgInZlcnNpb24iOiAiMC4wLjItYWxwaGEuMTIiLAogICAgICAiZGVw\nZW5kZW5jaWVzIjogewogICAgICAgICJAdHlwZXMvcmVhY3QiOiAiMTguMy4x\nMCIsCiAgICAgIH0sCiAgICB9LAogICAgInBhY2thZ2VzL2xpYiI6IHsKICAg\nICAgIm5hbWUiOiAiQHRvZGRsZWRldi9zdGQtbGliIiwKICAgICAgInZlcnNp\nb24iOiAiMC4wLjEtYWxwaGEuNCIsCiAgICAgICJkZXBlbmRlbmNpZXMiOiB7\nCiAgICAgICAgIkB0b2RkbGVkZXYvY29yZSI6ICJwYWNrYWdlcy9jb3JlIiwK\nICAgICAgICAiZmFzdC1kZWVwLWVxdWFsIjogIjMuMS4zIiwKICAgICAgfSwK\nICAgICAgImRldkRlcGVuZGVuY2llcyI6IHsKICAgICAgICAiQHR5cGVzL25v\nZGUiOiAiMjIuNy40IiwKICAgICAgICAiamVzdC1lbnZpcm9ubWVudC1qc2Rv\nbSI6ICIyOS43LjAiLAogICAgICAgICJ0cy1qZXN0IjogIjI5LjIuNSIsCiAg\nICAgIH0sCiAgICB9LAogICAgInBhY2thZ2VzL3J1bnRpbWUiOiB7CiAgICAg\nICJuYW1lIjogIkB0b2RkbGVkZXYvcnVudGltZSIsCiAgICAgICJ2ZXJzaW9u\nIjogIjAuMC4xLWFscGhhLjgiLAogICAgICAiZGVwZW5kZW5jaWVzIjogewog\nICAgICAgICJAdG9kZGxlZGV2L2NvcmUiOiAicGFja2FnZXMvY29yZSIsCiAg\nICAgICAgImZhc3QtZGVlcC1lcXVhbCI6ICIzLjEuMyIsCiAgICAgICAgInBh\ndGgtdG8tcmVnZXhwIjogIjYuMy4wIiwKICAgICAgfSwKICAgICAgImRldkRl\ncGVuZGVuY2llcyI6IHsKICAgICAgICAiQGhhcHB5LWRvbS9nbG9iYWwtcmVn\naXN0cmF0b3IiOiAiMTUuNy40IiwKICAgICAgfSwKICAgIH0sCiAgICAicGFj\na2FnZXMvc2VhcmNoIjogewogICAgICAibmFtZSI6ICJAdG9kZGxlZGV2L3Nl\nYXJjaCIsCiAgICAgICJ2ZXJzaW9uIjogIjAuMC4xLWFscGhhLjEwIiwKICAg\nICAgImRlcGVuZGVuY2llcyI6IHsKICAgICAgICAiQHRvZGRsZWRldi9zc3Ii\nOiAicGFja2FnZXMvc3NyIiwKICAgICAgfSwKICAgIH0sCiAgICAicGFja2Fn\nZXMvc3NyIjogewogICAgICAibmFtZSI6ICJAdG9kZGxlZGV2L3NzciIsCiAg\nICAgICJ2ZXJzaW9uIjogIjAuMC4yLWFscGhhLjEzIiwKICAgICAgImRlcGVu\nZGVuY2llcyI6IHsKICAgICAgICAiQHRvZGRsZWRldi9jb3JlIjogInBhY2th\nZ2VzL2NvcmUiLAogICAgICAgICJjb29raWUiOiAiMS4wLjIiLAogICAgICAg\nICJ4c3MiOiAiMS4wLjE1IiwKICAgICAgfSwKICAgIH0sCiAgfSwKICAicGFj\na2FnZXMiOiB7CiAgICAiQGFtcHByb2plY3QvcmVtYXBwaW5nIjogWyJAYW1w\ncHJvamVjdC9yZW1hcHBpbmdAMi4zLjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVz\nIjogeyAiQGpyaWRnZXdlbGwvZ2VuLW1hcHBpbmciOiAiXjAuMy41IiwgIkBq\ncmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmciOiAiXjAuMy4yNCIgfSB9LCAic2hh\nNTEyLTMwaVp0QVBneitMVElZb2VpdnFZbzg1M2YwMmpCWVNkNXVHbkdwa0ZW\nME0zeE90OWFONzNlcmtnWUFtWlU0M3g0VmZxY25MeFc5S3BnM1I1TEM0WVl3\nPT0iXSwKCiAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiBbIkBiYWJlbC9jb2Rl\nLWZyYW1lQDcuMjYuMiIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJAYmFi\nZWwvaGVscGVyLXZhbGlkYXRvci1pZGVudGlmaWVyIjogIl43LjI1LjkiLCAi\nanMtdG9rZW5zIjogIl40LjAuMCIsICJwaWNvY29sb3JzIjogIl4xLjAuMCIg\nfSB9LCAic2hhNTEyLVJKbElIUnVlUWd3V2l0V2dGOE9kRllHWlgzMjhBeDVC\nQ2VtTkdscUhmcGxuUlQ5RVNpOEprRmx2YVZZYlMrVXViVlk2ZHB2ODdGczJ1\nNU0yOWlORlZRPT0iXSwKCiAgICAiQGJhYmVsL2NvbXBhdC1kYXRhIjogWyJA\nYmFiZWwvY29tcGF0LWRhdGFANy4yNi4zIiwgIiIsIHt9LCAic2hhNTEyLW5I\nSXh2S1BuaVFYcG1RTGIwdmhZM1ZhRmIzUzBZclRBd3BPV0paaDF3bjNvSlBq\nSms5QXN2YTIwNFBzQmRtQUU4dnB6Zkh1ZFQ4REIwc2NZdnk5cTBnPT0iXSwK\nCiAgICAiQGJhYmVsL2NvcmUiOiBbIkBiYWJlbC9jb3JlQDcuMjYuMCIsICIi\nLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJAYW1wcHJvamVjdC9yZW1hcHBpbmci\nOiAiXjIuMi4wIiwgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjI2LjAiLCAi\nQGJhYmVsL2dlbmVyYXRvciI6ICJeNy4yNi4wIiwgIkBiYWJlbC9oZWxwZXIt\nY29tcGlsYXRpb24tdGFyZ2V0cyI6ICJeNy4yNS45IiwgIkBiYWJlbC9oZWxw\nZXItbW9kdWxlLXRyYW5zZm9ybXMiOiAiXjcuMjYuMCIsICJAYmFiZWwvaGVs\ncGVycyI6ICJeNy4yNi4wIiwgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMjYuMCIs\nICJAYmFiZWwvdGVtcGxhdGUiOiAiXjcuMjUuOSIsICJAYmFiZWwvdHJhdmVy\nc2UiOiAiXjcuMjUuOSIsICJAYmFiZWwvdHlwZXMiOiAiXjcuMjYuMCIsICJj\nb252ZXJ0LXNvdXJjZS1tYXAiOiAiXjIuMC4wIiwgImRlYnVnIjogIl40LjEu\nMCIsICJnZW5zeW5jIjogIl4xLjAuMC1iZXRhLjIiLCAianNvbjUiOiAiXjIu\nMi4zIiwgInNlbXZlciI6ICJeNi4zLjEiIH0gfSwgInNoYTUxMi1pMVNMZUsr\nRHpOblEzTEwvQ3N3UENhL0U1dTRsaDFrNklBRXBoT044RitjWHQwdDlldVRz\naERydTBxNy9JcU1hMVBNUHo1Um5IdUhzY0Y4L1pKc1N0Zz09Il0sCgogICAg\nIkBiYWJlbC9nZW5lcmF0b3IiOiBbIkBiYWJlbC9nZW5lcmF0b3JANy4yNi4z\nIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIkBiYWJlbC9wYXJzZXIiOiAi\nXjcuMjYuMyIsICJAYmFiZWwvdHlwZXMiOiAiXjcuMjYuMyIsICJAanJpZGdl\nd2VsbC9nZW4tbWFwcGluZyI6ICJeMC4zLjUiLCAiQGpyaWRnZXdlbGwvdHJh\nY2UtbWFwcGluZyI6ICJeMC4zLjI1IiwgImpzZXNjIjogIl4zLjAuMiIgfSB9\nLCAic2hhNTEyLTZGRi91clp2RDBzVGVPN2s2L0IxNXBNTEM0Q0hVdjE0MjZs\nenIzTjAxYUhKVGwwNDZ1Q0FoOUxYVy9memVYWGpQTkNKNmlBQlc1WGFXT3NJ\nWkI5M2FRPT0iXSwKCiAgICAiQGJhYmVsL2hlbHBlci1jb21waWxhdGlvbi10\nYXJnZXRzIjogWyJAYmFiZWwvaGVscGVyLWNvbXBpbGF0aW9uLXRhcmdldHNA\nNy4yNS45IiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIkBiYWJlbC9jb21w\nYXQtZGF0YSI6ICJeNy4yNS45IiwgIkBiYWJlbC9oZWxwZXItdmFsaWRhdG9y\nLW9wdGlvbiI6ICJeNy4yNS45IiwgImJyb3dzZXJzbGlzdCI6ICJeNC4yNC4w\nIiwgImxydS1jYWNoZSI6ICJeNS4xLjEiLCAic2VtdmVyIjogIl42LjMuMSIg\nfSB9LCAic2hhNTEyLWo5RGI4U3V5NnlWL1ZIYTRxenJqOXlaZlp4aExXUWRW\nblJsWHhtS0xZbGhXVVZCMXNCMkc1c3h1V1lYay93aEhEOWlXNzZQbU56eFo0\nVUNuVFFUVkVRPT0iXSwKCiAgICAiQGJhYmVsL2hlbHBlci1tb2R1bGUtaW1w\nb3J0cyI6IFsiQGJhYmVsL2hlbHBlci1tb2R1bGUtaW1wb3J0c0A3LjI1Ljki\nLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiQGJhYmVsL3RyYXZlcnNlIjog\nIl43LjI1LjkiLCAiQGJhYmVsL3R5cGVzIjogIl43LjI1LjkiIH0gfSwgInNo\nYTUxMi10blVBNFJzcm1mbElNNlc2UkZUTEZTWElUdGwwd0tqZ3BuTGdYeW93\nb2NWUHJiWXJMVVhTQlhEZ1RzOEJsYm1JeklkbEJ5U1JRaklOWXMyQkFraUx0\ndz09Il0sCgogICAgIkBiYWJlbC9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXMi\nOiBbIkBiYWJlbC9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXNANy4yNi4wIiwg\nIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIkBiYWJlbC9oZWxwZXItbW9kdWxl\nLWltcG9ydHMiOiAiXjcuMjUuOSIsICJAYmFiZWwvaGVscGVyLXZhbGlkYXRv\nci1pZGVudGlmaWVyIjogIl43LjI1LjkiLCAiQGJhYmVsL3RyYXZlcnNlIjog\nIl43LjI1LjkiIH0sICJwZWVyRGVwZW5kZW5jaWVzIjogeyAiQGJhYmVsL2Nv\ncmUiOiAiXjcuMC4wIiB9IH0sICJzaGE1MTIteE8reHU2QjVLMmN6RW5ReWU2\nQkhBN0RvbEZGbVMzTEI3c3RIWkZhT0xiMXBBd08xSFdMUzhmWEErZWgwQTJ5\nSXZsdFBWbXgzZU5OREJKQTJTTEhYRnc9PSJdLAoKICAgICJAYmFiZWwvaGVs\ncGVyLXBsdWdpbi11dGlscyI6IFsiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRp\nbHNANy4yNS45IiwgIiIsIHt9LCAic2hhNTEyLWtTTWx5VVZkV2UyNXJFc1JH\ndmlJZ09Xbm9UL25mQUJWV2xxdDlOMTkvZElQV1ZpQU9XMnM5d3puUDV0VVJi\ncy9JRHVOazRnUHkzWWRZUmdIM3V4aEJ3PT0iXSwKCiAgICAiQGJhYmVsL2hl\nbHBlci1zdHJpbmctcGFyc2VyIjogWyJAYmFiZWwvaGVscGVyLXN0cmluZy1w\nYXJzZXJANy4yNS45IiwgIiIsIHt9LCAic2hhNTEyLTRBL1NDci8yS0xkNWpy\ndE9NRnphS2pWdEFlaTMrMnIvTkNob0JOb1ozRXlQLytHbGhvYUVHb1dPWlVt\nRm1vSVRQN3pPSnlISU1tK0RZUmQ4bzNQdkhBPT0iXSwKCiAgICAiQGJhYmVs\nL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6IFsiQGJhYmVsL2hlbHBl\nci12YWxpZGF0b3ItaWRlbnRpZmllckA3LjI1LjkiLCAiIiwge30sICJzaGE1\nMTItRWQ2MVU2WEpjM0NWUmZrRVJKV0R6NGRKd0tlN2lMbW1Kc2JPR3U5d1Ns\nb05TRnR0SFYwSThnNlVBZ2I3cW5LNWx5NWJHTFBkNG9YWmx4Q2RBTkJPV1E9\nPSJdLAoKICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1vcHRpb24iOiBb\nIkBiYWJlbC9oZWxwZXItdmFsaWRhdG9yLW9wdGlvbkA3LjI1LjkiLCAiIiwg\ne30sICJzaGE1MTItZS96djFjbzhwcDU1ZE5kRWNDeW5majlYN255VUtVWG9V\nRXdmWHFhWnQwb21WT21EZTlvT1RkS1N0SDRHbUF3Nnp4TUZzNTBaYXl1TWZI\nREtsTzdUZnc9PSJdLAoKICAgICJAYmFiZWwvaGVscGVycyI6IFsiQGJhYmVs\nL2hlbHBlcnNANy4yNi4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIkBi\nYWJlbC90ZW1wbGF0ZSI6ICJeNy4yNS45IiwgIkBiYWJlbC90eXBlcyI6ICJe\nNy4yNi4wIiB9IH0sICJzaGE1MTItdGJoTnVJeE5jVmIyMXBJbmwzWlNqa3NM\nQ3ZnZFp5OUt3SjhicnY5OTNRdElWS0pCQmtZWHo0cTRaYkF2MzFHZG5DK1I5\nMG5wMjNMNUZiRUJsdGhBRXc9PSJdLAoKICAgICJAYmFiZWwvcGFyc2VyIjog\nWyJAYmFiZWwvcGFyc2VyQDcuMjYuMyIsICIiLCB7ICJkZXBlbmRlbmNpZXMi\nOiB7ICJAYmFiZWwvdHlwZXMiOiAiXjcuMjYuMyIgfSwgImJpbiI6ICIuL2Jp\nbi9iYWJlbC1wYXJzZXIuanMiIH0sICJzaGE1MTItV0ovQ3ZtWThNZWE4aURY\nbzZhN1JLMndibUpJVFQ1Zk4zQkVrUnVGbHhWeU54OGpPS0lJaG1DNGZTa1Rj\nUGNmOEp5YXZiQndJZTZPcGlDT0JYdC9JY0E9PSJdLAoKICAgICJAYmFiZWwv\ncGx1Z2luLXN5bnRheC1hc3luYy1nZW5lcmF0b3JzIjogWyJAYmFiZWwvcGx1\nZ2luLXN5bnRheC1hc3luYy1nZW5lcmF0b3JzQDcuOC40IiwgIiIsIHsgImRl\ncGVuZGVuY2llcyI6IHsgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjog\nIl43LjguMCIgfSwgInBlZXJEZXBlbmRlbmNpZXMiOiB7ICJAYmFiZWwvY29y\nZSI6ICJeNy4wLjAtMCIgfSB9LCAic2hhNTEyLXR5Y21aeGtHZlpheGhNUmJY\nbFBYdVZGcGRXbFhwaXIyVzRBTWhTSmdSS3prL2VEbElYT2hiMkxIV29McERG\nN1RFSHlsVjV6Tmh5a1g2S0FnSEptVE53PT0iXSwKCiAgICAiQGJhYmVsL3Bs\ndWdpbi1zeW50YXgtYmlnaW50IjogWyJAYmFiZWwvcGx1Z2luLXN5bnRheC1i\naWdpbnRANy44LjMiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiQGJhYmVs\nL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuOC4wIiB9LCAicGVlckRlcGVu\nZGVuY2llcyI6IHsgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIiB9IH0sICJz\naGE1MTItd25UbkZsRytZeFFtM3ZEeHBHRTU3UGowc3JSVTRzSEUvbURrdDFx\ndjJZSkpTZVVBZWMybWE0V0xVblVQZUtqeXJmbnRWd2UvTjZkQ1hwVSt6TDNO\ncGc9PSJdLAoKICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1jbGFzcy1wcm9w\nZXJ0aWVzIjogWyJAYmFiZWwvcGx1Z2luLXN5bnRheC1jbGFzcy1wcm9wZXJ0\naWVzQDcuMTIuMTMiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiQGJhYmVs\nL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTIuMTMiIH0sICJwZWVyRGVw\nZW5kZW5jaWVzIjogeyAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiIH0gfSwg\nInNoYTUxMi1mbTRpZGpLbGEwWWFoVU5nRk5MQ0IwcXlTZHNvUGlaUDNpUUUz\ncmt5MG1CVXRNWjIzeURKOVNKZGc2ZFhUU0RudWxPVnFpRjNIZ3I5bmJYdlhU\nUVpZQT09Il0sCgogICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWNsYXNzLXN0\nYXRpYy1ibG9jayI6IFsiQGJhYmVsL3BsdWdpbi1zeW50YXgtY2xhc3Mtc3Rh\ndGljLWJsb2NrQDcuMTQuNSIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJA\nYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4xNC41IiB9LCAicGVl\nckRlcGVuZGVuY2llcyI6IHsgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIiB9\nIH0sICJzaGE1MTItYitZeVBtcjZsZHlObk02c3FZZU1XRStiZ0pjSnBPNnlT\nNFFEN3lteGdIMzRHQlBORE0vVEhCaDhpdW55dktJWnp0aXdMSDRDSlowUnhU\nazllbWdwanc9PSJdLAoKICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1pbXBv\ncnQtYXR0cmlidXRlcyI6IFsiQGJhYmVsL3BsdWdpbi1zeW50YXgtaW1wb3J0\nLWF0dHJpYnV0ZXNANy4yNi4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsg\nIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjI1LjkiIH0sICJw\nZWVyRGVwZW5kZW5jaWVzIjogeyAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAi\nIH0gfSwgInNoYTUxMi1lMmR0dGRzSjFaVHBpM0I5VVlHTHc0MWhpZkF1Ymcx\nOUF0Q3UvMkkvRjFRTlZjbE9CcjFkWXBUZG1keVo4NFhpejQzQlMvdENVa01B\nWk5MdjEyUGkrQT09Il0sCgogICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWlt\ncG9ydC1tZXRhIjogWyJAYmFiZWwvcGx1Z2luLXN5bnRheC1pbXBvcnQtbWV0\nYUA3LjEwLjQiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiQGJhYmVsL2hl\nbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTAuNCIgfSwgInBlZXJEZXBlbmRl\nbmNpZXMiOiB7ICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIgfSB9LCAic2hh\nNTEyLVlxZm0rWER4MCtQcmgzVlNlRVFDUFU4MXlDK0pXWjJwRFBGU1M0WmRw\nZlpocDRNa0ZNYURDMVVxc2VvdkVLd1NVcG5JTDcrdksrQ2xwN2JmaDBpRDdn\nPT0iXSwKCiAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtanNvbi1zdHJpbmdz\nIjogWyJAYmFiZWwvcGx1Z2luLXN5bnRheC1qc29uLXN0cmluZ3NANy44LjMi\nLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiQGJhYmVsL2hlbHBlci1wbHVn\naW4tdXRpbHMiOiAiXjcuOC4wIiB9LCAicGVlckRlcGVuZGVuY2llcyI6IHsg\nIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIiB9IH0sICJzaGE1MTItbFk2a2RH\ncFdIdmpvZTJ2azRXckFhcEV1QlI2OUVNeFpsK1JvR1JockZHTllWSzhtT1BB\nVzhWZmJUL1pnckZiWGxETmlpYXhRbkF0Z1ZDWjZqdjMwRUE9PSJdLAoKICAg\nICJAYmFiZWwvcGx1Z2luLXN5bnRheC1qc3giOiBbIkBiYWJlbC9wbHVnaW4t\nc3ludGF4LWpzeEA3LjI1LjkiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAi\nQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjUuOSIgfSwgInBl\nZXJEZXBlbmRlbmNpZXMiOiB7ICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIg\nfSB9LCAic2hhNTEyLWxkNm9lekhRTVpzWmZwNnBXdGJqYU5ERjJ0aWlDWVlE\ncVFzekh0NVZWNDM3bGV3UDlhU2kyT2Y5OUNLMEQwWEIyMWs3RkxnbkxjbVFL\neUt6eW5mZUFBPT0iXSwKCiAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtbG9n\naWNhbC1hc3NpZ25tZW50LW9wZXJhdG9ycyI6IFsiQGJhYmVsL3BsdWdpbi1z\neW50YXgtbG9naWNhbC1hc3NpZ25tZW50LW9wZXJhdG9yc0A3LjEwLjQiLCAi\nIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiQGJhYmVsL2hlbHBlci1wbHVnaW4t\ndXRpbHMiOiAiXjcuMTAuNCIgfSwgInBlZXJEZXBlbmRlbmNpZXMiOiB7ICJA\nYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIgfSB9LCAic2hhNTEyLWQ4d2FTaGxw\nRkRpblE1TXR2R1U5eERBT3pLSDQ3K0ZGb25leTJiYUZJb01yOTUyaEtPTHAx\nSFI3VnN6b1p2T3NWLzQrUlJzek5ZN0QxN2JhMHRlMGlnPT0iXSwKCiAgICAi\nQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJh\ndG9yIjogWyJAYmFiZWwvcGx1Z2luLXN5bnRheC1udWxsaXNoLWNvYWxlc2Np\nbmctb3BlcmF0b3JANy44LjMiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAi\nQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuOC4wIiB9LCAicGVl\nckRlcGVuZGVuY2llcyI6IHsgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIiB9\nIH0sICJzaGE1MTItYVNmZjR6UElJMXUyUUQ3eStGOG9Ec3oxOWV3NElHRUpn\nOVNWVyticXdwd3RmRmxlaVFETWR6QS9SK1VsV0R6Zm5IRkN4eGxlRlQwUE1J\nclIzNlhMTlE9PSJdLAoKICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1udW1l\ncmljLXNlcGFyYXRvciI6IFsiQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVtZXJp\nYy1zZXBhcmF0b3JANy4xMC40IiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsg\nIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjEwLjQiIH0sICJw\nZWVyRGVwZW5kZW5jaWVzIjogeyAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAi\nIH0gfSwgInNoYTUxMi05SDZZZGZrY0svdU9uWS9LNy9hQTJ4cHphQWdrUW4z\nN3l6V1VNUks3T2FQT3FPcEdTMStuMEg1aHhUOUFVdzlFc1NqUFc4U1Z5TUp3\nWVJ0V3MzWDN1Zz09Il0sCgogICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW9i\namVjdC1yZXN0LXNwcmVhZCI6IFsiQGJhYmVsL3BsdWdpbi1zeW50YXgtb2Jq\nZWN0LXJlc3Qtc3ByZWFkQDcuOC4zIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6\nIHsgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIgfSwg\nInBlZXJEZXBlbmRlbmNpZXMiOiB7ICJAYmFiZWwvY29yZSI6ICJeNy4wLjAt\nMCIgfSB9LCAic2hhNTEyLVhvcU1pakdaYjl5M3kyWHNrTitQMXdVR2lWd1da\nNUptb0RSd3g1KzNHbUVwbE55Vk0yczJEZzhJTEZRbThyV000OG9yR3k1WXBJ\nNUJsOFUxeTd5ZGxBPT0iXSwKCiAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgt\nb3B0aW9uYWwtY2F0Y2gtYmluZGluZyI6IFsiQGJhYmVsL3BsdWdpbi1zeW50\nYXgtb3B0aW9uYWwtY2F0Y2gtYmluZGluZ0A3LjguMyIsICIiLCB7ICJkZXBl\nbmRlbmNpZXMiOiB7ICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJe\nNy44LjAiIH0sICJwZWVyRGVwZW5kZW5jaWVzIjogeyAiQGJhYmVsL2NvcmUi\nOiAiXjcuMC4wLTAiIH0gfSwgInNoYTUxMi02VlBEMFBjMWxwVHF3MGFLb2VS\nVE1pQitrV2hBb1QyNFBBK2tzV1NCckZ0bDVTSVJWcFpsd04zTk5QUWplaEEy\nRS85MUZWM1JqTFdvVlRnbFdjU1YzUT09Il0sCgogICAgIkBiYWJlbC9wbHVn\naW4tc3ludGF4LW9wdGlvbmFsLWNoYWluaW5nIjogWyJAYmFiZWwvcGx1Z2lu\nLXN5bnRheC1vcHRpb25hbC1jaGFpbmluZ0A3LjguMyIsICIiLCB7ICJkZXBl\nbmRlbmNpZXMiOiB7ICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJe\nNy44LjAiIH0sICJwZWVyRGVwZW5kZW5jaWVzIjogeyAiQGJhYmVsL2NvcmUi\nOiAiXjcuMC4wLTAiIH0gfSwgInNoYTUxMi1Lb0s5RXJIMU1CbENQeFYwVkFO\na1hXMi9kdzR2bGJHRHJGZ3o4Ym1Vc0JHWWtGUmNiUndNaDZjSUp1YmRQcmt4\nUnd1R2R0Q2swdi93UFRLYlFnQmprZz09Il0sCgogICAgIkBiYWJlbC9wbHVn\naW4tc3ludGF4LXByaXZhdGUtcHJvcGVydHktaW4tb2JqZWN0IjogWyJAYmFi\nZWwvcGx1Z2luLXN5bnRheC1wcml2YXRlLXByb3BlcnR5LWluLW9iamVjdEA3\nLjE0LjUiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiQGJhYmVsL2hlbHBl\nci1wbHVnaW4tdXRpbHMiOiAiXjcuMTQuNSIgfSwgInBlZXJEZXBlbmRlbmNp\nZXMiOiB7ICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIgfSB9LCAic2hhNTEy\nLTB3Vm5wOWR4SjcyWlVKRFYyN1pmYlNqNmlITG95dFlabWgzckZjeE5udnNK\nRjNrdGt6TERaUHkvbUExN0hHc2FRVDMvRFFzV1lYMWYxUUdXa0NvVlVnPT0i\nXSwKCiAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtdG9wLWxldmVsLWF3YWl0\nIjogWyJAYmFiZWwvcGx1Z2luLXN5bnRheC10b3AtbGV2ZWwtYXdhaXRANy4x\nNC41IiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIkBiYWJlbC9oZWxwZXIt\ncGx1Z2luLXV0aWxzIjogIl43LjE0LjUiIH0sICJwZWVyRGVwZW5kZW5jaWVz\nIjogeyAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiIH0gfSwgInNoYTUxMi1o\neCsrdXBMdjVVMXJnWWZ3ZTF4QlFVaFJtVTQxTkV2cFV2cnA4amtyU0NkdkdT\nbk01L3FkUk10eWxKNlBHNU9Ga0JhSGtiVEFLVG5kMy9ZeUVTUkhGdz09Il0s\nCgogICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LXR5cGVzY3JpcHQiOiBbIkBi\nYWJlbC9wbHVnaW4tc3ludGF4LXR5cGVzY3JpcHRANy4yNS45IiwgIiIsIHsg\nImRlcGVuZGVuY2llcyI6IHsgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxz\nIjogIl43LjI1LjkiIH0sICJwZWVyRGVwZW5kZW5jaWVzIjogeyAiQGJhYmVs\nL2NvcmUiOiAiXjcuMC4wLTAiIH0gfSwgInNoYTUxMi1oak1nUnk1aGI4dUpK\nalVjZFd1bldWY29pOWJHcEpwOHA1T2wxMjI5UG9ONmF5dHNMd05NZ21kZnRP\nMjN3bkNMTWZWbVR3WkRXTVBOcS9EMVNZNjBKUT09Il0sCgogICAgIkBiYWJl\nbC90ZW1wbGF0ZSI6IFsiQGJhYmVsL3RlbXBsYXRlQDcuMjUuOSIsICIiLCB7\nICJkZXBlbmRlbmNpZXMiOiB7ICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4y\nNS45IiwgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMjUuOSIsICJAYmFiZWwvdHlw\nZXMiOiAiXjcuMjUuOSIgfSB9LCAic2hhNTEyLTlER3R0cG1Qdkl4QmIvMnV3\ncFZvM2RxSitPNlJvb0FGT1MrbEIreERxb0UyUFZDRThuZm9ITWRaTHBmQ1FS\nTHd2b2h6WElTUFpjZ3h0ODB4TGZzdXdnPT0iXSwKCiAgICAiQGJhYmVsL3Ry\nYXZlcnNlIjogWyJAYmFiZWwvdHJhdmVyc2VANy4yNi40IiwgIiIsIHsgImRl\ncGVuZGVuY2llcyI6IHsgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjI2LjIi\nLCAiQGJhYmVsL2dlbmVyYXRvciI6ICJeNy4yNi4zIiwgIkBiYWJlbC9wYXJz\nZXIiOiAiXjcuMjYuMyIsICJAYmFiZWwvdGVtcGxhdGUiOiAiXjcuMjUuOSIs\nICJAYmFiZWwvdHlwZXMiOiAiXjcuMjYuMyIsICJkZWJ1ZyI6ICJeNC4zLjEi\nLCAiZ2xvYmFscyI6ICJeMTEuMS4wIiB9IH0sICJzaGE1MTItZkgrYjdZNHAz\neXF2QXBKQUxDUEpjd2IwL1hhT1NndEs0cHpWNldWalBSNUdMRlFCUkk3cGZv\nWDJWMmlNNDhOWHZYMDdOVXh4bTFWdzk4WWpxVGNVNXc9PSJdLAoKICAgICJA\nYmFiZWwvdHlwZXMiOiBbIkBiYWJlbC90eXBlc0A3LjI2LjMiLCAiIiwgeyAi\nZGVwZW5kZW5jaWVzIjogeyAiQGJhYmVsL2hlbHBlci1zdHJpbmctcGFyc2Vy\nIjogIl43LjI1LjkiLCAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRp\nZmllciI6ICJeNy4yNS45IiB9IH0sICJzaGE1MTItdk41cCsxa2w1OUdWS012\nVEh0NTVOenptWVZ4cHJmSkQrcWw3VTlORklmS0NCa1lFNTVMWXRTK1d0UGxh\nWU95enlkcktJOE5lemQrYVpleHRyZCtGTUE9PSJdLAoKICAgICJAYmNvZS92\nOC1jb3ZlcmFnZSI6IFsiQGJjb2UvdjgtY292ZXJhZ2VAMC4yLjMiLCAiIiwg\ne30sICJzaGE1MTItMGhZUThTQjREYjV6dlpCNGF4ZE1IR3dFYVFqa1p6RmpR\naU45TFZZdklGQjJuU1VIVzl0WXB4V3JpUHJXREFTSXhpYVhheDgzUkVjTHh1\nU2RuR1BadHc9PSJdLAoKICAgICJAZXNsaW50LWNvbW11bml0eS9lc2xpbnQt\ndXRpbHMiOiBbIkBlc2xpbnQtY29tbXVuaXR5L2VzbGludC11dGlsc0A0LjQu\nMSIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJlc2xpbnQtdmlzaXRvci1r\nZXlzIjogIl4zLjQuMyIgfSwgInBlZXJEZXBlbmRlbmNpZXMiOiB7ICJlc2xp\nbnQiOiAiXjYuMC4wIHx8IF43LjAuMCB8fCA+PTguMC4wIiB9IH0sICJzaGE1\nMTItczNPM3dhRlVyTVY4UC9YYUYvK1pUcDFYOVhCWlcxYTRCOTdabmpRRjJL\nWVdhRkQyQThLeUZCc3JzZlNqRW1qbjNSR1dBSXV2bG5ldVptM0NVSzNqYkE9\nPSJdLAoKICAgICJAZXNsaW50LWNvbW11bml0eS9yZWdleHBwIjogWyJAZXNs\naW50LWNvbW11bml0eS9yZWdleHBwQDQuMTIuMSIsICIiLCB7fSwgInNoYTUx\nMi1DQ1pDREp1ZHVCOU9Va0ZrWTJJZ3BwTlpNaTJsQlFnRDJxendYa0VpYTE2\nY2dlMnBpalkvYVhpOTZDSk1xdURNbjNuSmRsUFYxQTVLckpFWHdmTE56UT09\nIl0sCgogICAgIkBlc2xpbnQvY29uZmlnLWFycmF5IjogWyJAZXNsaW50L2Nv\nbmZpZy1hcnJheUAwLjE4LjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAi\nQGVzbGludC9vYmplY3Qtc2NoZW1hIjogIl4yLjEuNCIsICJkZWJ1ZyI6ICJe\nNC4zLjEiLCAibWluaW1hdGNoIjogIl4zLjEuMiIgfSB9LCAic2hhNTEyLWZU\neHZuUzFzUk11MytKalh3Skcwai9pNFJUOXU0cUorbHFTL3lDR2FwNGxINHpa\nR3pRN3R1K3hacVFtY01acTVPQlpETDRRUnhRelJqa1djR3Q4SVZ3PT0iXSwK\nCiAgICAiQGVzbGludC9jb3JlIjogWyJAZXNsaW50L2NvcmVAMC43LjAiLCAi\nIiwge30sICJzaGE1MTIteHA1SmlyejVEeVBZbFBpS2F0OGphcTBFbVl2RFhL\nS3B6VGJ4WE1wVDllcWxSSmtSS0l6OUFHTWRsdllqaWgraW0rUWxoV3JwdlZq\nbDhJUEMvbEhsVXc9PSJdLAoKICAgICJAZXNsaW50L2VzbGludHJjIjogWyJA\nZXNsaW50L2VzbGludHJjQDMuMi4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6\nIHsgImFqdiI6ICJeNi4xMi40IiwgImRlYnVnIjogIl40LjMuMiIsICJlc3By\nZWUiOiAiXjEwLjAuMSIsICJnbG9iYWxzIjogIl4xNC4wLjAiLCAiaWdub3Jl\nIjogIl41LjIuMCIsICJpbXBvcnQtZnJlc2giOiAiXjMuMi4xIiwgImpzLXlh\nbWwiOiAiXjQuMS4wIiwgIm1pbmltYXRjaCI6ICJeMy4xLjIiLCAic3RyaXAt\nanNvbi1jb21tZW50cyI6ICJeMy4xLjEiIH0gfSwgInNoYTUxMi1nck9qVk5O\nOFAzaGpKbi9lSUVURjF3d2QxMkRkbndGRG95Y2VVSkxZWWRrcGJ3cTNuTGkr\nNGZxclRBT054N1hEQUxxbEwyMjB3Qy9SSFNDL1FUSS8wdz09Il0sCgogICAg\nIkBlc2xpbnQvanMiOiBbIkBlc2xpbnQvanNAOS4xNi4wIiwgIiIsIHt9LCAi\nc2hhNTEyLXR3Mkh4elFrcmJldXZ5ajF0RzJZcXErMEg5d0dvSTJJTWs0RU9z\nUWVYK3ZtZDc1RnRKQXpmK2dUQTY5V0YrYmFVS1JZUTN4MmtiTEUwOGpzNU9z\nVFZnPT0iXSwKCiAgICAiQGVzbGludC9vYmplY3Qtc2NoZW1hIjogWyJAZXNs\naW50L29iamVjdC1zY2hlbWFAMi4xLjUiLCAiIiwge30sICJzaGE1MTItbzBi\naHhuTDg5aDVCYWU1VDMxOG5Gb0Z6R3krWUU1aS9nR2tvUEFna21UVmRSS1Rp\ndjNwOEpIZXZQaVBhTXdvbG9LZkVpaWFIbGF3Q3FhWk1xUm0rWFE9PSJdLAoK\nICAgICJAZXNsaW50L3BsdWdpbi1raXQiOiBbIkBlc2xpbnQvcGx1Z2luLWtp\ndEAwLjIuNCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJsZXZuIjogIl4w\nLjQuMSIgfSB9LCAic2hhNTEyLXpTa0tvdzZINUtkbTBaVVFVQjJrVjVKSVhx\nb0cwK3VINVlBRGhhRUhzd202NjROOURiOGRYU2kwbk1KcGFjcE1mK015eWds\nRjF2blpvaHBFZzV5VXRnPT0iXSwKCiAgICAiQGhhcHB5LWRvbS9nbG9iYWwt\ncmVnaXN0cmF0b3IiOiBbIkBoYXBweS1kb20vZ2xvYmFsLXJlZ2lzdHJhdG9y\nQDE1LjcuNCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJoYXBweS1kb20i\nOiAiXjE1LjcuNCIgfSB9LCAic2hhNTEyLXk4cXR3QjJlUzRJcXkyZnJKUDFi\nMXprSVlRTmNTTVRVN0ZkSW5zVlNWK21RMkpHZ2loOFBpK2orditpVm5Zc25x\nQytTalpOTy80VVVoZTE2ZWJ2WmVBPT0iXSwKCiAgICAiQGh1bWFuZnMvY29y\nZSI6IFsiQGh1bWFuZnMvY29yZUAwLjE5LjEiLCAiIiwge30sICJzaGE1MTIt\nNUR5UTQrMUpFVXplamVLMUpHSUNjaWRleWZVYkdpeGdTOWpOZ2V4NW5xa1cr\nY1k3V1poeEJpZ21pZU41UW53OVpvc1NOVkM5S1FLeWIrR1VhR3lLVUE9PSJd\nLAoKICAgICJAaHVtYW5mcy9ub2RlIjogWyJAaHVtYW5mcy9ub2RlQDAuMTYu\nNiIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJAaHVtYW5mcy9jb3JlIjog\nIl4wLjE5LjEiLCAiQGh1bWFud2hvY29kZXMvcmV0cnkiOiAiXjAuMy4wIiB9\nIH0sICJzaGE1MTItWXVJMlpIUUw3OFE1SGJoRGlCQTFYNExtWWRYQ0tDTVFJ\nZncwcHc3cGlISnd5UkVGZWJKVXZyUU40Y01zc3lFUzZ4K3ZmVWJ4MUNJcGFR\nVUtZZFFaT3c9PSJdLAoKICAgICJAaHVtYW53aG9jb2Rlcy9tb2R1bGUtaW1w\nb3J0ZXIiOiBbIkBodW1hbndob2NvZGVzL21vZHVsZS1pbXBvcnRlckAxLjAu\nMSIsICIiLCB7fSwgInNoYTUxMi1ieHZlVjRWOHY1WWI0bmNGVFQzclBTZ1pC\nT3BDa2pmSzB5NG9WVlZKd0l1RFZCUk1EWHJQeVhSTDk4OGk1YXA5bTlibnlF\nRWpXZm01V2tCbXRmZkxmQT09Il0sCgogICAgIkBodW1hbndob2NvZGVzL3Jl\ndHJ5IjogWyJAaHVtYW53aG9jb2Rlcy9yZXRyeUAwLjQuMSIsICIiLCB7fSwg\nInNoYTUxMi1jN2hORWxsQmxlbkZUSEJreTY1bWhxOFdEMmtiTjlRNmdrMGJU\nazhsU0J2YzU1NGpwWFNrU1QxaWVQdWRwdDcrQS9BUXZ1SHM5RU1xakhEWE1Z\nMWxyQT09Il0sCgogICAgIkBpc3RhbmJ1bGpzL2xvYWQtbnljLWNvbmZpZyI6\nIFsiQGlzdGFuYnVsanMvbG9hZC1ueWMtY29uZmlnQDEuMS4wIiwgIiIsIHsg\nImRlcGVuZGVuY2llcyI6IHsgImNhbWVsY2FzZSI6ICJeNS4zLjEiLCAiZmlu\nZC11cCI6ICJeNC4xLjAiLCAiZ2V0LXBhY2thZ2UtdHlwZSI6ICJeMC4xLjAi\nLCAianMteWFtbCI6ICJeMy4xMy4xIiwgInJlc29sdmUtZnJvbSI6ICJeNS4w\nLjAiIH0gfSwgInNoYTUxMi1WamVIU2xJenB2L055RDNOMFl1SGZYT1BESWl4\nY0ExcTJaVjk4d3NNcWNZbFBtdjJuM1liMmxZUDlYTUVsbmFGVlhnNUE3WUxU\nZUx1NlY4NHVRRGptUT09Il0sCgogICAgIkBpc3RhbmJ1bGpzL3NjaGVtYSI6\nIFsiQGlzdGFuYnVsanMvc2NoZW1hQDAuMS4zIiwgIiIsIHt9LCAic2hhNTEy\nLVpYUlk0ak52VmdTVlE4REwzTFRjYWthQXRYd1RWVXhFODFoc2xzeUQyQXRv\nWFcvd1ZvYjEwSGtPSjFYL3BBbGNJN0QrMllvWktnNWRvOEcvdzZSWWdBPT0i\nXSwKCiAgICAiQGplc3QvY29uc29sZSI6IFsiQGplc3QvY29uc29sZUAyOS43\nLjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiQGplc3QvdHlwZXMiOiAi\nXjI5LjYuMyIsICJAdHlwZXMvbm9kZSI6ICIqIiwgImNoYWxrIjogIl40LjAu\nMCIsICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICJeMjkuNy4wIiwgImplc3QtdXRp\nbCI6ICJeMjkuNy4wIiwgInNsYXNoIjogIl4zLjAuMCIgfSB9LCAic2hhNTEy\nLTVOaTRDVTdYSFFpMzJJSjM5OEVFUDRSckI4ZVYwOXNYUDJST3FENGJrc0hy\nblRyZWU1MlBzeHZYOHRwTDhMdlRaM3BGelh5UGJOUVJlU040MUNBaE9nPT0i\nXSwKCiAgICAiQGplc3QvY29yZSI6IFsiQGplc3QvY29yZUAyOS43LjAiLCAi\nIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiQGplc3QvY29uc29sZSI6ICJeMjku\nNy4wIiwgIkBqZXN0L3JlcG9ydGVycyI6ICJeMjkuNy4wIiwgIkBqZXN0L3Rl\nc3QtcmVzdWx0IjogIl4yOS43LjAiLCAiQGplc3QvdHJhbnNmb3JtIjogIl4y\nOS43LjAiLCAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMyIsICJAdHlwZXMvbm9k\nZSI6ICIqIiwgImFuc2ktZXNjYXBlcyI6ICJeNC4yLjEiLCAiY2hhbGsiOiAi\nXjQuMC4wIiwgImNpLWluZm8iOiAiXjMuMi4wIiwgImV4aXQiOiAiXjAuMS4y\nIiwgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsICJqZXN0LWNoYW5nZWQtZmls\nZXMiOiAiXjI5LjcuMCIsICJqZXN0LWNvbmZpZyI6ICJeMjkuNy4wIiwgImpl\nc3QtaGFzdGUtbWFwIjogIl4yOS43LjAiLCAiamVzdC1tZXNzYWdlLXV0aWwi\nOiAiXjI5LjcuMCIsICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI5LjYuMyIsICJq\nZXN0LXJlc29sdmUiOiAiXjI5LjcuMCIsICJqZXN0LXJlc29sdmUtZGVwZW5k\nZW5jaWVzIjogIl4yOS43LjAiLCAiamVzdC1ydW5uZXIiOiAiXjI5LjcuMCIs\nICJqZXN0LXJ1bnRpbWUiOiAiXjI5LjcuMCIsICJqZXN0LXNuYXBzaG90Ijog\nIl4yOS43LjAiLCAiamVzdC11dGlsIjogIl4yOS43LjAiLCAiamVzdC12YWxp\nZGF0ZSI6ICJeMjkuNy4wIiwgImplc3Qtd2F0Y2hlciI6ICJeMjkuNy4wIiwg\nIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwgInByZXR0eS1mb3JtYXQiOiAiXjI5\nLjcuMCIsICJzbGFzaCI6ICJeMy4wLjAiLCAic3RyaXAtYW5zaSI6ICJeNi4w\nLjAiIH0sICJwZWVyRGVwZW5kZW5jaWVzIjogeyAibm9kZS1ub3RpZmllciI6\nICJeOC4wLjEgfHwgXjkuMC4wIHx8IF4xMC4wLjAiIH0sICJvcHRpb25hbFBl\nZXJzIjogWyJub2RlLW5vdGlmaWVyIl0gfSwgInNoYTUxMi1uN2FlWFdLTW5H\ndERBNDh5OFRMV0pQSm1MbW1aNjQyQ2VvNzhjWVdFcGlEN0Z6RGdtTkRWL0dD\nVlJvclBBQmRYTEpaLzl3enpnWkFsSGpYanhESEdzZz09Il0sCgogICAgIkBq\nZXN0L2Vudmlyb25tZW50IjogWyJAamVzdC9lbnZpcm9ubWVudEAyOS43LjAi\nLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiQGplc3QvZmFrZS10aW1lcnMi\nOiAiXjI5LjcuMCIsICJAamVzdC90eXBlcyI6ICJeMjkuNi4zIiwgIkB0eXBl\ncy9ub2RlIjogIioiLCAiamVzdC1tb2NrIjogIl4yOS43LjAiIH0gfSwgInNo\nYTUxMi1hUUlmSERxMzNFeHNONGpQMU5XR1hoeGdRL3dpeHM2MGdEaUtPK1hW\nTWQ4TW4wTldQV2djMzRaUURUYjJqS2FVV1E3TXV3b2l0WEFzTjJYVlhOTXBB\ndz09Il0sCgogICAgIkBqZXN0L2V4cGVjdCI6IFsiQGplc3QvZXhwZWN0QDI5\nLjcuMCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJleHBlY3QiOiAiXjI5\nLjcuMCIsICJqZXN0LXNuYXBzaG90IjogIl4yOS43LjAiIH0gfSwgInNoYTUx\nMi04dU1lQU15Y3R0cHZhM1AxbEJIQjhWY2lTOVYwWEFyM0d5bVBwaXBkeVFY\nYkJjdWhrTFFPU2U4RS9wOTJSeUFkVG9TNlpEMXRGa1grQ2tob0VDRTBkUT09\nIl0sCgogICAgIkBqZXN0L2V4cGVjdC11dGlscyI6IFsiQGplc3QvZXhwZWN0\nLXV0aWxzQDI5LjcuMCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJqZXN0\nLWdldC10eXBlIjogIl4yOS42LjMiIH0gfSwgInNoYTUxMi1HbHNOQldpRlFG\nQ1ZpOVFWU3g3ZjVBZ01lTHhlOVlDQ3M1UHVQMk8yTGRqREFBOEpoOWVYN2xB\nMUpxL3hkWHczV2IzaHl2bEZOZlpJZmNSZXRTelljQT09Il0sCgogICAgIkBq\nZXN0L2Zha2UtdGltZXJzIjogWyJAamVzdC9mYWtlLXRpbWVyc0AyOS43LjAi\nLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiQGplc3QvdHlwZXMiOiAiXjI5\nLjYuMyIsICJAc2lub25qcy9mYWtlLXRpbWVycyI6ICJeMTAuMC4yIiwgIkB0\neXBlcy9ub2RlIjogIioiLCAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI5Ljcu\nMCIsICJqZXN0LW1vY2siOiAiXjI5LjcuMCIsICJqZXN0LXV0aWwiOiAiXjI5\nLjcuMCIgfSB9LCAic2hhNTEyLXE0REgxSGE0VFRGUGR4THNxRFhLMWQzK2lv\nU0w3eUw1b0NNSlpnRFltNmkrNkN5Z1c1RTV4VnIvRDFIZHNHeGp0MVpXU2ZV\nQXM5T3hTQi9CTmVsV3JRPT0iXSwKCiAgICAiQGplc3QvZ2xvYmFscyI6IFsi\nQGplc3QvZ2xvYmFsc0AyOS43LjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjog\neyAiQGplc3QvZW52aXJvbm1lbnQiOiAiXjI5LjcuMCIsICJAamVzdC9leHBl\nY3QiOiAiXjI5LjcuMCIsICJAamVzdC90eXBlcyI6ICJeMjkuNi4zIiwgImpl\nc3QtbW9jayI6ICJeMjkuNy4wIiB9IH0sICJzaGE1MTItbXBpejNkdXRMYmtX\nMk1ORnViVUdVRVZMa1RHaXFXNnlMVlRBK0piUDZmSTZKNWlMOVkwTmxnOGs5\nNXBjRjhjdEt3Q1M3V1Z4dGVCczI5aGhmQW90elE9PSJdLAoKICAgICJAamVz\ndC9yZXBvcnRlcnMiOiBbIkBqZXN0L3JlcG9ydGVyc0AyOS43LjAiLCAiIiwg\neyAiZGVwZW5kZW5jaWVzIjogeyAiQGJjb2UvdjgtY292ZXJhZ2UiOiAiXjAu\nMi4zIiwgIkBqZXN0L2NvbnNvbGUiOiAiXjI5LjcuMCIsICJAamVzdC90ZXN0\nLXJlc3VsdCI6ICJeMjkuNy4wIiwgIkBqZXN0L3RyYW5zZm9ybSI6ICJeMjku\nNy4wIiwgIkBqZXN0L3R5cGVzIjogIl4yOS42LjMiLCAiQGpyaWRnZXdlbGwv\ndHJhY2UtbWFwcGluZyI6ICJeMC4zLjE4IiwgIkB0eXBlcy9ub2RlIjogIioi\nLCAiY2hhbGsiOiAiXjQuMC4wIiwgImNvbGxlY3QtdjgtY292ZXJhZ2UiOiAi\nXjEuMC4wIiwgImV4aXQiOiAiXjAuMS4yIiwgImdsb2IiOiAiXjcuMS4zIiwg\nImdyYWNlZnVsLWZzIjogIl40LjIuOSIsICJpc3RhbmJ1bC1saWItY292ZXJh\nZ2UiOiAiXjMuMC4wIiwgImlzdGFuYnVsLWxpYi1pbnN0cnVtZW50IjogIl42\nLjAuMCIsICJpc3RhbmJ1bC1saWItcmVwb3J0IjogIl4zLjAuMCIsICJpc3Rh\nbmJ1bC1saWItc291cmNlLW1hcHMiOiAiXjQuMC4wIiwgImlzdGFuYnVsLXJl\ncG9ydHMiOiAiXjMuMS4zIiwgImplc3QtbWVzc2FnZS11dGlsIjogIl4yOS43\nLjAiLCAiamVzdC11dGlsIjogIl4yOS43LjAiLCAiamVzdC13b3JrZXIiOiAi\nXjI5LjcuMCIsICJzbGFzaCI6ICJeMy4wLjAiLCAic3RyaW5nLWxlbmd0aCI6\nICJeNC4wLjEiLCAic3RyaXAtYW5zaSI6ICJeNi4wLjAiLCAidjgtdG8taXN0\nYW5idWwiOiAiXjkuMC4xIiB9LCAicGVlckRlcGVuZGVuY2llcyI6IHsgIm5v\nZGUtbm90aWZpZXIiOiAiXjguMC4xIHx8IF45LjAuMCB8fCBeMTAuMC4wIiB9\nLCAib3B0aW9uYWxQZWVycyI6IFsibm9kZS1ub3RpZmllciJdIH0sICJzaGE1\nMTItREFwcTBLSmJKT0V6QUZZakhBRE5OeEFFM0tiaHhRQjF5NUtwbGI1V2Fx\ndzZ6VmJ1V2F0U25NakU1Z3M4RlVnRVBtTnNuWkEzTkNXbDlORzBpYTA0UGc9\nPSJdLAoKICAgICJAamVzdC9zY2hlbWFzIjogWyJAamVzdC9zY2hlbWFzQDI5\nLjYuMyIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJAc2luY2xhaXIvdHlw\nZWJveCI6ICJeMC4yNy44IiB9IH0sICJzaGE1MTItbW81ajVYK2pJWm1KUXZl\nQktlUy9jbEF1ZWlwVjdLZ2lYMXZNZ0N4YW0xUk5ZaXFFMXc2Mm4wL3RKSm5I\ndGpXOFpIY1FjbzVnWTg1akEzbWkwTCtuU0E9PSJdLAoKICAgICJAamVzdC9z\nb3VyY2UtbWFwIjogWyJAamVzdC9zb3VyY2UtbWFwQDI5LjYuMyIsICIiLCB7\nICJkZXBlbmRlbmNpZXMiOiB7ICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5n\nIjogIl4wLjMuMTgiLCAiY2FsbHNpdGVzIjogIl4zLjAuMCIsICJncmFjZWZ1\nbC1mcyI6ICJeNC4yLjkiIH0gfSwgInNoYTUxMi1NSGpUOTVRdWlwY1BycExN\nKzhKTVN6Rng2ZUhwNUJtKzRYZUZESmx3c3ZWQmptS05pSUF2YXNHSzJmeHoy\nV2JHUmxudnFlaEZiaDA3TU1hN24zWUpudz09Il0sCgogICAgIkBqZXN0L3Rl\nc3QtcmVzdWx0IjogWyJAamVzdC90ZXN0LXJlc3VsdEAyOS43LjAiLCAiIiwg\neyAiZGVwZW5kZW5jaWVzIjogeyAiQGplc3QvY29uc29sZSI6ICJeMjkuNy4w\nIiwgIkBqZXN0L3R5cGVzIjogIl4yOS42LjMiLCAiQHR5cGVzL2lzdGFuYnVs\nLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLCAiY29sbGVjdC12OC1jb3ZlcmFn\nZSI6ICJeMS4wLjAiIH0gfSwgInNoYTUxMi1GZHgrdHY2eDF6bGtKUGNXWG1N\nREFHMkhCbmFSOVhQU2Q1YURXUVZzZnJabUxWVDNsVTFjd3l4TGdSbVhSOXly\ncTROQm9FbTlCTXNmZ0Z6VFFBYkpZQT09Il0sCgogICAgIkBqZXN0L3Rlc3Qt\nc2VxdWVuY2VyIjogWyJAamVzdC90ZXN0LXNlcXVlbmNlckAyOS43LjAiLCAi\nIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiQGplc3QvdGVzdC1yZXN1bHQiOiAi\nXjI5LjcuMCIsICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLCAiamVzdC1oYXN0\nZS1tYXAiOiAiXjI5LjcuMCIsICJzbGFzaCI6ICJeMy4wLjAiIH0gfSwgInNo\nYTUxMi1HUXdKNVdaVnJLbk9KdWlZaUFGNTJVTlVKWGdUWngxTkhqRlNFQjBx\nRU1tU1pLQWtkTW9JencvQ2o2eDZORjRBdlYyM0FVcURwRnpRa04vZVlDWVR4\ndz09Il0sCgogICAgIkBqZXN0L3RyYW5zZm9ybSI6IFsiQGplc3QvdHJhbnNm\nb3JtQDI5LjcuMCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJAYmFiZWwv\nY29yZSI6ICJeNy4xMS42IiwgIkBqZXN0L3R5cGVzIjogIl4yOS42LjMiLCAi\nQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjE4IiwgImJhYmVs\nLXBsdWdpbi1pc3RhbmJ1bCI6ICJeNi4xLjEiLCAiY2hhbGsiOiAiXjQuMC4w\nIiwgImNvbnZlcnQtc291cmNlLW1hcCI6ICJeMi4wLjAiLCAiZmFzdC1qc29u\nLXN0YWJsZS1zdHJpbmdpZnkiOiAiXjIuMS4wIiwgImdyYWNlZnVsLWZzIjog\nIl40LjIuOSIsICJqZXN0LWhhc3RlLW1hcCI6ICJeMjkuNy4wIiwgImplc3Qt\ncmVnZXgtdXRpbCI6ICJeMjkuNi4zIiwgImplc3QtdXRpbCI6ICJeMjkuNy4w\nIiwgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwgInBpcmF0ZXMiOiAiXjQuMC40\nIiwgInNsYXNoIjogIl4zLjAuMCIsICJ3cml0ZS1maWxlLWF0b21pYyI6ICJe\nNC4wLjIiIH0gfSwgInNoYTUxMi1vay9CVFBGekZLVk13TzVlT0hScnZuQlZI\nZFJ5OUlyc3JXMUdwTWFROU1DbmlsTkxYUUttQVg4czFZWERGYWFpOXhKcGFj\nMnlTelYwWWVSUkVDcjJWdz09Il0sCgogICAgIkBqZXN0L3R5cGVzIjogWyJA\namVzdC90eXBlc0AyOS42LjMiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAi\nQGplc3Qvc2NoZW1hcyI6ICJeMjkuNi4zIiwgIkB0eXBlcy9pc3RhbmJ1bC1s\naWItY292ZXJhZ2UiOiAiXjIuMC4wIiwgIkB0eXBlcy9pc3RhbmJ1bC1yZXBv\ncnRzIjogIl4zLjAuMCIsICJAdHlwZXMvbm9kZSI6ICIqIiwgIkB0eXBlcy95\nYXJncyI6ICJeMTcuMC44IiwgImNoYWxrIjogIl40LjAuMCIgfSB9LCAic2hh\nNTEyLXUzVVBzSWlsV0tPTTNGOUNYdHJHOExFSm1OeHdvQ1FDL1hWajRJS1lY\ndnZweDdRSWkvS2cxTEk1dURtRHBLbGFjNjJOVXRYN2VMalJoK2pWWmNMT3p3\nPT0iXSwKCiAgICAiQGpyaWRnZXdlbGwvZ2VuLW1hcHBpbmciOiBbIkBqcmlk\nZ2V3ZWxsL2dlbi1tYXBwaW5nQDAuMy44IiwgIiIsIHsgImRlcGVuZGVuY2ll\ncyI6IHsgIkBqcmlkZ2V3ZWxsL3NldC1hcnJheSI6ICJeMS4yLjEiLCAiQGpy\naWRnZXdlbGwvc291cmNlbWFwLWNvZGVjIjogIl4xLjQuMTAiLCAiQGpyaWRn\nZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjI0IiB9IH0sICJzaGE1MTIt\naW1BYkJHa2IrZWJReXhLZ3p2NUh1Mm5tUk94b0RPWEhoODBldnhkb1hOT3J2\nQW5WeDd6aW16YzFPbzVoOVJsZlY0dlBYYUUyaU01cE9GYnZPQ0NsV0E9PSJd\nLAoKICAgICJAanJpZGdld2VsbC9yZXNvbHZlLXVyaSI6IFsiQGpyaWRnZXdl\nbGwvcmVzb2x2ZS11cmlAMy4xLjIiLCAiIiwge30sICJzaGE1MTItYlJJU2dD\nSWpQMjAvdGJXU1BXTUVpNTRRVlBSWkV4a3VEOWxKTCtVSXhVS3R3VkpBOHdX\nMVRyYjFqTXMxUkZYbzFDQlROWi81aHBDOVF2bUtXZG9wS3c9PSJdLAoKICAg\nICJAanJpZGdld2VsbC9zZXQtYXJyYXkiOiBbIkBqcmlkZ2V3ZWxsL3NldC1h\ncnJheUAxLjIuMSIsICIiLCB7fSwgInNoYTUxMi1SOGdMUlRaZXlwMDN5bXpQ\nLzZMaWwvMjh0R2VHRXpoeDFxMms3MDNLR1dSQUkxVmR2UElYZEc3MFZKYzJw\nQU13M05BNkpLTDVoaEZ1MXNKWDBNbm4vQT09Il0sCgogICAgIkBqcmlkZ2V3\nZWxsL3NvdXJjZW1hcC1jb2RlYyI6IFsiQGpyaWRnZXdlbGwvc291cmNlbWFw\nLWNvZGVjQDEuNS4wIiwgIiIsIHt9LCAic2hhNTEyLWd2M1pSYUlTVTNmalBB\nZ05zcmlCUnFHV1FMNnF1RngwNFlNUFcvekQ4WE1Mc1UzMm1oQ0NiZmJPNkta\nRkxqdllwQ1o4enlERWdxc2dmK1B3UGFNN0dRPT0iXSwKCiAgICAiQGpyaWRn\nZXdlbGwvdHJhY2UtbWFwcGluZyI6IFsiQGpyaWRnZXdlbGwvdHJhY2UtbWFw\ncGluZ0AwLjMuMjUiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiQGpyaWRn\nZXdlbGwvcmVzb2x2ZS11cmkiOiAiXjMuMS4wIiwgIkBqcmlkZ2V3ZWxsL3Nv\ndXJjZW1hcC1jb2RlYyI6ICJeMS40LjE0IiB9IH0sICJzaGE1MTItdk5rNmFF\nd3liR3Rhd1dteS9QenduR0RPakNrTFdTRDJ3cXZqR0dBZ09Bd0NHV3lTWVhm\nWW94dDAwSUprVEYrOExiNTdEd09iM0FhMG85Q0FwZXBpWVE9PSJdLAoKICAg\nICJAbm9kZWxpYi9mcy5zY2FuZGlyIjogWyJAbm9kZWxpYi9mcy5zY2FuZGly\nQDIuMS41IiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIkBub2RlbGliL2Zz\nLnN0YXQiOiAiMi4wLjUiLCAicnVuLXBhcmFsbGVsIjogIl4xLjEuOSIgfSB9\nLCAic2hhNTEyLXZxMjRCcTN5bTVIRVFtMk5LQ3IzeVhEd2pjN3ZUc0VUaFJE\nbmtwMkRLOXAxdXFMUitESHVybS9OT1RvMEtHN0hZSFU3ZXBwS1pqM015cVl1\nTUJmNjJnPT0iXSwKCiAgICAiQG5vZGVsaWIvZnMuc3RhdCI6IFsiQG5vZGVs\naWIvZnMuc3RhdEAyLjAuNSIsICIiLCB7fSwgInNoYTUxMi1Sa2hQUHAyenJx\nREFRQS8yak5obnp0Y1BBbHY2NFhkaElwN2E3NDU0QTVvdkk3QnVreGd0N01Y\nN3Vkd0F1M3pnMURjcFBVMHJ6M1ZWMVNlYXF2WTQrQT09Il0sCgogICAgIkBu\nb2RlbGliL2ZzLndhbGsiOiBbIkBub2RlbGliL2ZzLndhbGtAMS4yLjgiLCAi\nIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiQG5vZGVsaWIvZnMuc2NhbmRpciI6\nICIyLjEuNSIsICJmYXN0cSI6ICJeMS42LjAiIH0gfSwgInNoYTUxMi1vR0Ir\nVXhsZ1djZ1FrZ3dvOEdjRUd3ZW1vVEZ0M0ZJTzlhYmFiQm1hR3dYSW9CS1or\nR1R5MHBQMTg1YmVHZzdMbGloL05TSFNWMlhBczFsbnpub2NTZz09Il0sCgog\nICAgIkBzaW5jbGFpci90eXBlYm94IjogWyJAc2luY2xhaXIvdHlwZWJveEAw\nLjI3LjgiLCAiIiwge30sICJzaGE1MTItK0ZqNDNwU013SnM0S1JySC85MzhV\nZit1QUVMSWdWQm1RemcvcTFZRzEwZGp5ZkEzVG5yVThOOFh6cUNoL29rWmRz\nenFCUVRaZjk2aWRNZkU1bG53VEE9PSJdLAoKICAgICJAc2lub25qcy9jb21t\nb25zIjogWyJAc2lub25qcy9jb21tb25zQDMuMC4xIiwgIiIsIHsgImRlcGVu\nZGVuY2llcyI6IHsgInR5cGUtZGV0ZWN0IjogIjQuMC44IiB9IH0sICJzaGE1\nMTItSzNtQ0hLUTlzVmg4bzFDOWN4a3d4YU9tWG9BTWxEeEMxbVl5SHJqcU9X\nRWNCallyNzZ0OTZ6TDJ6bGo1ZFVHWjNIU3cyNDBYMXFnSDNNamYxeUpXcFE9\nPSJdLAoKICAgICJAc2lub25qcy9mYWtlLXRpbWVycyI6IFsiQHNpbm9uanMv\nZmFrZS10aW1lcnNAMTAuMy4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsg\nIkBzaW5vbmpzL2NvbW1vbnMiOiAiXjMuMC4wIiB9IH0sICJzaGE1MTItVjRC\nRzA3a3VZU1VrVENTQkhHOEc4VE5oTStGMTlqWEZXblF0emord2U4RHJrcFNC\nQ2VlOVozTXM4eWlHZXIvZGxtaGUzNS9YZGd5bzMvMHJRS2c3WUE9PSJdLAoK\nICAgICJAdG9kZGxlZGV2L2NvcmUiOiBbIkB0b2RkbGVkZXYvY29yZUB3b3Jr\nc3BhY2U6cGFja2FnZXMvY29yZSIsIHsgImRlcGVuZGVuY2llcyI6IHsgIkB0\neXBlcy9yZWFjdCI6ICIxOC4zLjEwIiB9IH1dLAoKICAgICJAdG9kZGxlZGV2\nL3J1bnRpbWUiOiBbIkB0b2RkbGVkZXYvcnVudGltZUB3b3Jrc3BhY2U6cGFj\na2FnZXMvcnVudGltZSIsIHsgImRlcGVuZGVuY2llcyI6IHsgIkB0b2RkbGVk\nZXYvY29yZSI6ICJwYWNrYWdlcy9jb3JlIiwgImZhc3QtZGVlcC1lcXVhbCI6\nICIzLjEuMyIsICJwYXRoLXRvLXJlZ2V4cCI6ICI2LjMuMCIgfSwgImRldkRl\ncGVuZGVuY2llcyI6IHsgIkBoYXBweS1kb20vZ2xvYmFsLXJlZ2lzdHJhdG9y\nIjogIjE1LjcuNCIgfSB9XSwKCiAgICAiQHRvZGRsZWRldi9zZWFyY2giOiBb\nIkB0b2RkbGVkZXYvc2VhcmNoQHdvcmtzcGFjZTpwYWNrYWdlcy9zZWFyY2gi\nLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJAdG9kZGxlZGV2L3NzciI6ICJwYWNr\nYWdlcy9zc3IiIH0gfV0sCgogICAgIkB0b2RkbGVkZXYvc3NyIjogWyJAdG9k\nZGxlZGV2L3NzckB3b3Jrc3BhY2U6cGFja2FnZXMvc3NyIiwgeyAiZGVwZW5k\nZW5jaWVzIjogeyAiQHRvZGRsZWRldi9jb3JlIjogInBhY2thZ2VzL2NvcmUi\nLCAiY29va2llIjogIjEuMC4yIiwgInhzcyI6ICIxLjAuMTUiIH0gfV0sCgog\nICAgIkB0b2RkbGVkZXYvc3RkLWxpYiI6IFsiQHRvZGRsZWRldi9zdGQtbGli\nQHdvcmtzcGFjZTpwYWNrYWdlcy9saWIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7\nICJAdG9kZGxlZGV2L2NvcmUiOiAicGFja2FnZXMvY29yZSIsICJmYXN0LWRl\nZXAtZXF1YWwiOiAiMy4xLjMiIH0sICJkZXZEZXBlbmRlbmNpZXMiOiB7ICJA\ndHlwZXMvbm9kZSI6ICIyMi43LjQiLCAiamVzdC1lbnZpcm9ubWVudC1qc2Rv\nbSI6ICIyOS43LjAiLCAidHMtamVzdCI6ICIyOS4yLjUiIH0gfV0sCgogICAg\nIkB0b290YWxsbmF0ZS9vbmNlIjogWyJAdG9vdGFsbG5hdGUvb25jZUAyLjAu\nMCIsICIiLCB7fSwgInNoYTUxMi1YQ3VLRlA1UFM1NWduTVZ1M2R0eThLUGF0\nTHFVb3kvWll6RHpBR0NROEpORkNrTFh6bUk3dk5IQ1IrWHBiWmFNV1FLL3ZR\ndWJyN1BrWXE4ZzQ3MEovQT09Il0sCgogICAgIkB0eXBlcy9iYWJlbF9fY29y\nZSI6IFsiQHR5cGVzL2JhYmVsX19jb3JlQDcuMjAuNSIsICIiLCB7ICJkZXBl\nbmRlbmNpZXMiOiB7ICJAYmFiZWwvcGFyc2VyIjogIl43LjIwLjciLCAiQGJh\nYmVsL3R5cGVzIjogIl43LjIwLjciLCAiQHR5cGVzL2JhYmVsX19nZW5lcmF0\nb3IiOiAiKiIsICJAdHlwZXMvYmFiZWxfX3RlbXBsYXRlIjogIioiLCAiQHR5\ncGVzL2JhYmVsX190cmF2ZXJzZSI6ICIqIiB9IH0sICJzaGE1MTItcW9RcHJa\ndno1d1FGSndNRHFlc2VSWFd2M3JxTXZoZ3BiWEZmVnlXaGJ4OVg0N1BPSUE2\naS8rZFhlZkVtWktvQWdPYVRkYUlnTlNNcU1JVTYxeVJ5ekE9PSJdLAoKICAg\nICJAdHlwZXMvYmFiZWxfX2dlbmVyYXRvciI6IFsiQHR5cGVzL2JhYmVsX19n\nZW5lcmF0b3JANy42LjgiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiQGJh\nYmVsL3R5cGVzIjogIl43LjAuMCIgfSB9LCAic2hhNTEyLUFTc2ordHBFRHNF\naUZyMWFyV3JsTjZWM21kZmpSTVp0Nkx0Sy9WcC9rcmVGTG5yNVFINStEaHZE\nNW5JTllaWHp3SnZYZUdxKzA1aVVYY0F6VnJxV3R3PT0iXSwKCiAgICAiQHR5\ncGVzL2JhYmVsX190ZW1wbGF0ZSI6IFsiQHR5cGVzL2JhYmVsX190ZW1wbGF0\nZUA3LjQuNCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJAYmFiZWwvcGFy\nc2VyIjogIl43LjEuMCIsICJAYmFiZWwvdHlwZXMiOiAiXjcuMC4wIiB9IH0s\nICJzaGE1MTItaC9OVWFTeUc1RXl4QklwOFlSeG80Uk1lMi9xUWd2eW93UndW\nTXpoWWhCQ09OYlc4UFVzZzRsa0ZNcmhnWmhVZTV6M0wzTWlMRHV2eUovQ2FQ\nYTJBOEE9PSJdLAoKICAgICJAdHlwZXMvYmFiZWxfX3RyYXZlcnNlIjogWyJA\ndHlwZXMvYmFiZWxfX3RyYXZlcnNlQDcuMjAuNiIsICIiLCB7ICJkZXBlbmRl\nbmNpZXMiOiB7ICJAYmFiZWwvdHlwZXMiOiAiXjcuMjAuNyIgfSB9LCAic2hh\nNTEyLXIxYnpmcm0wdG9tT0k4ZzFTenZDYVFIbzZMY3Y2enUwRUErVzJrSHJ0\nOGR5ckhReEd6QkJMNGtka3pJUytqQk1WK0VZY01BRUFxWHFZYUxKcTVyT1pn\nPT0iXSwKCiAgICAiQHR5cGVzL2VzdHJlZSI6IFsiQHR5cGVzL2VzdHJlZUAx\nLjAuNiIsICIiLCB7fSwgInNoYTUxMi1BWW5iMW5ReVk0OXRlK1ZSQVZnbXpm\nY2dqWVM5MW1ZNVAwVEtVRENMRU0rZ05uQSszVDZyV0lUWFJMWUNwYWhwcVNR\nYk41Y0UrZ0hwblB5WGpIV3hjdz09Il0sCgogICAgIkB0eXBlcy9ncmFjZWZ1\nbC1mcyI6IFsiQHR5cGVzL2dyYWNlZnVsLWZzQDQuMS45IiwgIiIsIHsgImRl\ncGVuZGVuY2llcyI6IHsgIkB0eXBlcy9ub2RlIjogIioiIH0gfSwgInNoYTUx\nMi1vbFAzc2QxcU9FZTVkWFRTYUZ2UUcrMDJWZFJYY2R5dFdMQVpzQXExUGVj\nVTh1cVFBaGtybmJsaTdEYWdqdFhLVy9CbDdZSmJVc2E4TVBjdWM4TEhFUT09\nIl0sCgogICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiBbIkB0\neXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2VAMi4wLjYiLCAiIiwge30sICJz\naGE1MTItMlFGL3QvYXVXbTBsc3k4WHRLVlBHMTl2M3NTT1FsSmUvWUhaZ2Zq\nYi9LQkJIT0dTVitKMnEvUzY3MXJjcTl1VEJyTEFYbVpwcUppYVFiTVQrek5V\nMXc9PSJdLAoKICAgICJAdHlwZXMvaXN0YW5idWwtbGliLXJlcG9ydCI6IFsi\nQHR5cGVzL2lzdGFuYnVsLWxpYi1yZXBvcnRAMy4wLjMiLCAiIiwgeyAiZGVw\nZW5kZW5jaWVzIjogeyAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6\nICIqIiB9IH0sICJzaGE1MTItTlFuN0FIUW5rL1JTTE94ckJiR3lKTS9hVlEr\ncGpqNUhDZ2FzRnhjMEsvS2hvQVRmUS80N0F5VWwxNUkyeUJVcGloam1hcyth\nK1ZKQk9xZWNyRkgrdUE9PSJdLAoKICAgICJAdHlwZXMvaXN0YW5idWwtcmVw\nb3J0cyI6IFsiQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHNAMy4wLjQiLCAiIiwg\neyAiZGVwZW5kZW5jaWVzIjogeyAiQHR5cGVzL2lzdGFuYnVsLWxpYi1yZXBv\ncnQiOiAiKiIgfSB9LCAic2hhNTEyLXBrMkIxTldhbEY5dG9DUnU2Z2pCelI2\nOXN5RmpQNE9kOFdSQVgrMG1tZjlsQWpDUmljTE9XYytacnhaSHgvMFhSam90\nZ2tGOXQ2aWFNSithWGNPZFpRPT0iXSwKCiAgICAiQHR5cGVzL2plc3QiOiBb\nIkB0eXBlcy9qZXN0QDI5LjUuMTQiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjog\neyAiZXhwZWN0IjogIl4yOS4wLjAiLCAicHJldHR5LWZvcm1hdCI6ICJeMjku\nMC4wIiB9IH0sICJzaGE1MTItWk4rNHNkbkxVYm84RVZ2VmMyYW8wR0ZXNm9W\nclFSUG40SzJsZ2x5U2o3QVB2U3JnenhIaU5OSzk5dXM0V0RNaTU3eHhBMnln\nZ2JsSUFNTmhYT290TFE9PSJdLAoKICAgICJAdHlwZXMvanNkb20iOiBbIkB0\neXBlcy9qc2RvbUAyMC4wLjEiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAi\nQHR5cGVzL25vZGUiOiAiKiIsICJAdHlwZXMvdG91Z2gtY29va2llIjogIioi\nLCAicGFyc2U1IjogIl43LjAuMCIgfSB9LCAic2hhNTEyLWQwcjE4c1pQbU1R\ncjFlRzM1dTEyRlpmaElYTnJuc1BVL2c1d3ZSS0NVZi90T0dpbEtLd1lNWUdx\naDMzQk5SNmJhKzJna0h3MUVVaUhvTjNtbjdFNUlRPT0iXSwKCiAgICAiQHR5\ncGVzL2pzb24tc2NoZW1hIjogWyJAdHlwZXMvanNvbi1zY2hlbWFANy4wLjE1\nIiwgIiIsIHt9LCAic2hhNTEyLTUrZlA4UDhNRk5DK0F5WkNEeHJCMnBrWkZQ\nR3pxUVdVenBTZXV1Vkx2bThWTWNvck5ZYXZCcW9GY3hLOGJRejRRc2JuNG9V\nRUVlbTR3RExmY3lzR0hBPT0iXSwKCiAgICAiQHR5cGVzL25vZGUiOiBbIkB0\neXBlcy9ub2RlQDIyLjcuNCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJ1\nbmRpY2ktdHlwZXMiOiAifjYuMTkuMiIgfSB9LCAic2hhNTEyLXkrTlBpMXJG\nekRzMU5kUUhIVG9xZWlYMlRJUzc5U1dFQXc5R1loa2t4OGJEMENocGZxQytu\nMmo1T1hPQ3B6Zm9qQkVCdDZEbkVubkc5TVkwemsxWExnPT0iXSwKCiAgICAi\nQHR5cGVzL3Byb3AtdHlwZXMiOiBbIkB0eXBlcy9wcm9wLXR5cGVzQDE1Ljcu\nMTQiLCAiIiwge30sICJzaGE1MTItZ05Ndk5INDlESjdPSll2K0tBS24wWHA0\nNXA4UExsNnpvMlludkRJYlRkNEo2TUVSMkJtV040OVRHN245THZreWloSU54\nZUtXOCszYmZTMnlEQzlkelE9PSJdLAoKICAgICJAdHlwZXMvcmVhY3QiOiBb\nIkB0eXBlcy9yZWFjdEAxOC4zLjEwIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6\nIHsgIkB0eXBlcy9wcm9wLXR5cGVzIjogIioiLCAiY3NzdHlwZSI6ICJeMy4w\nLjIiIH0gfSwgInNoYTUxMi0wMnNBQWxCblAzOUpnWHdrQXEzUGVVOURWYWFH\ncFp5RjNNR2NDME1LZ1FWa1pvcjVJaWlEQWlwVmF4UUh0REpBbU80R0l5L3JW\nQnkvTHpWajc2Q3lxZz09Il0sCgogICAgIkB0eXBlcy9zdGFjay11dGlscyI6\nIFsiQHR5cGVzL3N0YWNrLXV0aWxzQDIuMC4zIiwgIiIsIHt9LCAic2hhNTEy\nLTlhRWJZWjNUYllNem5QZGNkcjNTbUlyTFh3Qy9BS1pYUWVDZjlQZ2FvNUNL\nYjhDeUh1RVg1anpXUFRrdnJlZ3ZoUkpIY3BSTzZCRm9HVzl5Y2FPa1l3PT0i\nXSwKCiAgICAiQHR5cGVzL3RvdWdoLWNvb2tpZSI6IFsiQHR5cGVzL3RvdWdo\nLWNvb2tpZUA0LjAuNSIsICIiLCB7fSwgInNoYTUxMi0vQWQ4K25JT1Y3Umwr\nKzZmMUJkS3hGU01nbW9xRW9ZYkhScFBjeDNKRWZ2OFZSc1FlOVo0bUNYZUpC\nenhzN21iSFkvWE9aWnVYbFJOZmhwVlBiczZaQT09Il0sCgogICAgIkB0eXBl\ncy95YXJncyI6IFsiQHR5cGVzL3lhcmdzQDE3LjAuMzMiLCAiIiwgeyAiZGVw\nZW5kZW5jaWVzIjogeyAiQHR5cGVzL3lhcmdzLXBhcnNlciI6ICIqIiB9IH0s\nICJzaGE1MTItV3B4QkNLV1BMcjR4U3NIZ3o1MTFyRkpBTSt3UzI4dzJ6RU8x\nUUROWTV6TS9TOG9rNzBOTmZ6dEgweHdocUt5YUswT0hDYk45OExEQVp1eTFj\ndHhEa0E9PSJdLAoKICAgICJAdHlwZXMveWFyZ3MtcGFyc2VyIjogWyJAdHlw\nZXMveWFyZ3MtcGFyc2VyQDIxLjAuMyIsICIiLCB7fSwgInNoYTUxMi1JNHE5\nUVU5TVF2NG9FT3o0dEFISnROejFjd3VMeG4yRjN4Y2MyaVY1V2RxTFBwVW5q\nMzBhVXV4dDFtQXhZVEcrb2U4Q1pNVi8rNnJVNFM0Z1JEenF0UT09Il0sCgog\nICAgIkB0eXBlc2NyaXB0LWVzbGludC9lc2xpbnQtcGx1Z2luIjogWyJAdHlw\nZXNjcmlwdC1lc2xpbnQvZXNsaW50LXBsdWdpbkA4LjE2LjAiLCAiIiwgeyAi\nZGVwZW5kZW5jaWVzIjogeyAiQGVzbGludC1jb21tdW5pdHkvcmVnZXhwcCI6\nICJeNC4xMC4wIiwgIkB0eXBlc2NyaXB0LWVzbGludC9zY29wZS1tYW5hZ2Vy\nIjogIjguMTYuMCIsICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZS11dGlscyI6\nICI4LjE2LjAiLCAiQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzIjogIjguMTYu\nMCIsICJAdHlwZXNjcmlwdC1lc2xpbnQvdmlzaXRvci1rZXlzIjogIjguMTYu\nMCIsICJncmFwaGVtZXIiOiAiXjEuNC4wIiwgImlnbm9yZSI6ICJeNS4zLjEi\nLCAibmF0dXJhbC1jb21wYXJlIjogIl4xLjQuMCIsICJ0cy1hcGktdXRpbHMi\nOiAiXjEuMy4wIiB9LCAicGVlckRlcGVuZGVuY2llcyI6IHsgIkB0eXBlc2Ny\naXB0LWVzbGludC9wYXJzZXIiOiAiXjguMC4wIHx8IF44LjAuMC1hbHBoYS4w\nIiwgImVzbGludCI6ICJeOC41Ny4wIHx8IF45LjAuMCIgfSB9LCAic2hhNTEy\nLTVZVEhLVjhNWWx5TUk2QmFFRzdjclE5QmhTYzhSeHpzaE9SZUt3WndSV04w\nK1h2dlRPbStML1VZTENZeEZwZndZdUFBcWh4aXE0eWFlMENNRndiTDdRPT0i\nXSwKCiAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3BhcnNlciI6IFsiQHR5cGVz\nY3JpcHQtZXNsaW50L3BhcnNlckA4LjE2LjAiLCAiIiwgeyAiZGVwZW5kZW5j\naWVzIjogeyAiQHR5cGVzY3JpcHQtZXNsaW50L3Njb3BlLW1hbmFnZXIiOiAi\nOC4xNi4wIiwgIkB0eXBlc2NyaXB0LWVzbGludC90eXBlcyI6ICI4LjE2LjAi\nLCAiQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzY3JpcHQtZXN0cmVlIjogIjgu\nMTYuMCIsICJAdHlwZXNjcmlwdC1lc2xpbnQvdmlzaXRvci1rZXlzIjogIjgu\nMTYuMCIsICJkZWJ1ZyI6ICJeNC4zLjQiIH0sICJwZWVyRGVwZW5kZW5jaWVz\nIjogeyAiZXNsaW50IjogIl44LjU3LjAgfHwgXjkuMC4wIiB9IH0sICJzaGE1\nMTItRDdEYmdHRnRzcUlQSUZNUEp3Q2FkOUdmaS9oQzBQV0VyUlJIRm5hQ1dv\nRURZaTV0UVVEaUpDVG1HVWJCaUx6anFBY2s0S2NYdDlBeWowQ05sSXJGK3c9\nPSJdLAoKICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvc2NvcGUtbWFuYWdlciI6\nIFsiQHR5cGVzY3JpcHQtZXNsaW50L3Njb3BlLW1hbmFnZXJAOC4xNi4wIiwg\nIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIkB0eXBlc2NyaXB0LWVzbGludC90\neXBlcyI6ICI4LjE2LjAiLCAiQHR5cGVzY3JpcHQtZXNsaW50L3Zpc2l0b3It\na2V5cyI6ICI4LjE2LjAiIH0gfSwgInNoYTUxMi1td3NaV3ViUXZCa2kydDU1\nNjV1eEYwRVl2RytGd2RGYjhiTXREdUdRTGRDQ25HUHJERUR2bTFndGZ5bnVL\nbG5wemVCUnFkRkNrTWY5amcxZm5BSzhzZz09Il0sCgogICAgIkB0eXBlc2Ny\naXB0LWVzbGludC90eXBlLXV0aWxzIjogWyJAdHlwZXNjcmlwdC1lc2xpbnQv\ndHlwZS11dGlsc0A4LjE2LjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAi\nQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzY3JpcHQtZXN0cmVlIjogIjguMTYu\nMCIsICJAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMiOiAiOC4xNi4wIiwgImRl\nYnVnIjogIl40LjMuNCIsICJ0cy1hcGktdXRpbHMiOiAiXjEuMy4wIiB9LCAi\ncGVlckRlcGVuZGVuY2llcyI6IHsgImVzbGludCI6ICJeOC41Ny4wIHx8IF45\nLjAuMCIgfSB9LCAic2hhNTEyLUlxWkhHRytnMVhDV1g5TnlxbkkvMENYNUxM\nOC8xOGF3UXFta1pTbDJ5bm44Rjc2ajU3OWRCeWMwamhmVlNuU25oZjd6djc2\nbUtCUXY5SFFGS3ZEQ2dnPT0iXSwKCiAgICAiQHR5cGVzY3JpcHQtZXNsaW50\nL3R5cGVzIjogWyJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXNAOC4xNi4wIiwg\nIiIsIHt9LCAic2hhNTEyLU56ckhqNnRoQkFPU0U0ZDlic3VSTk12aytCdmFR\ndm1ZNGREZ2xna2dHQzBFVy90QjNLZWxucDN0QUtIODdHRXd6b3hnZVFuOWZO\nR1J5RkpNL3hkK0dRPT0iXSwKCiAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3R5\ncGVzY3JpcHQtZXN0cmVlIjogWyJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXNj\ncmlwdC1lc3RyZWVAOC4xNi4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsg\nIkB0eXBlc2NyaXB0LWVzbGludC90eXBlcyI6ICI4LjE2LjAiLCAiQHR5cGVz\nY3JpcHQtZXNsaW50L3Zpc2l0b3Ita2V5cyI6ICI4LjE2LjAiLCAiZGVidWci\nOiAiXjQuMy40IiwgImZhc3QtZ2xvYiI6ICJeMy4zLjIiLCAiaXMtZ2xvYiI6\nICJeNC4wLjMiLCAibWluaW1hdGNoIjogIl45LjAuNCIsICJzZW12ZXIiOiAi\nXjcuNi4wIiwgInRzLWFwaS11dGlscyI6ICJeMS4zLjAiIH0gfSwgInNoYTUx\nMi1FMis5SXp6WE1jMWlhQnk5em1vK1VZdmx1RTNUVzdiQ0dXU0Y0MWhWV1VF\nMDFvOG56cjFydk9RWVN4ZWx4cjZTdFV2UmNUTWU2MzNlWThtWEFTTWFOdz09\nIl0sCgogICAgIkB0eXBlc2NyaXB0LWVzbGludC91dGlscyI6IFsiQHR5cGVz\nY3JpcHQtZXNsaW50L3V0aWxzQDguMTYuMCIsICIiLCB7ICJkZXBlbmRlbmNp\nZXMiOiB7ICJAZXNsaW50LWNvbW11bml0eS9lc2xpbnQtdXRpbHMiOiAiXjQu\nNC4wIiwgIkB0eXBlc2NyaXB0LWVzbGludC9zY29wZS1tYW5hZ2VyIjogIjgu\nMTYuMCIsICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXMiOiAiOC4xNi4wIiwg\nIkB0eXBlc2NyaXB0LWVzbGludC90eXBlc2NyaXB0LWVzdHJlZSI6ICI4LjE2\nLjAiIH0sICJwZWVyRGVwZW5kZW5jaWVzIjogeyAiZXNsaW50IjogIl44LjU3\nLjAgfHwgXjkuMC4wIiB9IH0sICJzaGE1MTItQzF6UnkvbU9MOFBqMTU3R2lY\nNGthdzdpeVJMS2ZKWEJSM0w4MmhrNWtTL0d5SGNPRm15NFlVcS96Zlp0aTcy\nSTl3bnVRdEEvK3h6ZnQ0d0NDOFBKZEE9PSJdLAoKICAgICJAdHlwZXNjcmlw\ndC1lc2xpbnQvdmlzaXRvci1rZXlzIjogWyJAdHlwZXNjcmlwdC1lc2xpbnQv\ndmlzaXRvci1rZXlzQDguMTYuMCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7\nICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXMiOiAiOC4xNi4wIiwgImVzbGlu\ndC12aXNpdG9yLWtleXMiOiAiXjQuMi4wIiB9IH0sICJzaGE1MTItcHExOWdi\nYU1PbUZFM0NiTDBaQjhKOEJGQ28yY2tmSEJmYUlzYU9aZ0JJRjRFb0lTSklk\nTFg1eFJoZDBGR0IwTGxIUmVOUnV6b0pvTUdwVGpxOEYyQ1E9PSJdLAoKICAg\nICJhYmFiIjogWyJhYmFiQDIuMC42IiwgIiIsIHt9LCAic2hhNTEyLWoyYWZT\nc2FJRU52SFpOMkI4R09wRjU2NnZaNVdWazVvcEFpTVR2V2dhUVQ4RGtiT3Fz\nVGZ2TkF2SG9SR1UyenpQOGNQb3F5cyt4SFRSRFdXOEwrL0JBPT0iXSwKCiAg\nICAiYWNvcm4iOiBbImFjb3JuQDguMTQuMCIsICIiLCB7ICJiaW4iOiB7ICJh\nY29ybiI6ICJiaW4vYWNvcm4iIH0gfSwgInNoYTUxMi1jbDY2OW5DSlRaQnNM\nOTdPRjRrVVFtNWc1aEMydWloazBOeFkzV0VOQUMwVFlkSUxWa0F5SHltQW50\nZ3hHa2w3Syt0MGNYSXJINXNpeTVTNFhrRnljQT09Il0sCgogICAgImFjb3Ju\nLWdsb2JhbHMiOiBbImFjb3JuLWdsb2JhbHNANy4wLjEiLCAiIiwgeyAiZGVw\nZW5kZW5jaWVzIjogeyAiYWNvcm4iOiAiXjguMS4wIiwgImFjb3JuLXdhbGsi\nOiAiXjguMC4yIiB9IH0sICJzaGE1MTItdW1PU0RTRHJmSGJUTlB1TnBDMk5T\nbm5BM0xVcnFwZXZQYjRUOWpSeDRNYWdYTlMwcnMrZ3dpVGNBdnFDUm1zRDZ1\ndHpzcnpOdCtlYm0wMFNOV2lDM1E9PSJdLAoKICAgICJhY29ybi1qc3giOiBb\nImFjb3JuLWpzeEA1LjMuMiIsICIiLCB7ICJwZWVyRGVwZW5kZW5jaWVzIjog\neyAiYWNvcm4iOiAiXjYuMC4wIHx8IF43LjAuMCB8fCBeOC4wLjAiIH0gfSwg\nInNoYTUxMi1ycTlzK0pOaGYwSUNoanREWHhsbEo3ZzQxb1prNVNsWHRwMExI\nd3lBNWNlanduN3ZLbUtwNHBQcmk2WUVlUHYyUFU2NXNBc2VnYlh0SWlubURG\nRFhnUT09Il0sCgogICAgImFjb3JuLXdhbGsiOiBbImFjb3JuLXdhbGtAOC4z\nLjQiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiYWNvcm4iOiAiXjguMTEu\nMCIgfSB9LCAic2hhNTEyLXVlRWVwbnVqcHFlZTJvNWFJWW52SFU2QzBBNDJN\nTmRzSURlcXk1Qnlkcmt1QzVSMVp1VUZubTI3RWVGSkdvRUhKUWduM3VsZVJ2\nbVRYYUpnZlhidDRnPT0iXSwKCiAgICAiYWdlbnQtYmFzZSI6IFsiYWdlbnQt\nYmFzZUA2LjAuMiIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJkZWJ1ZyI6\nICI0IiB9IH0sICJzaGE1MTItUlpOd05jbEY3K01TLzhiRGc3MGFtZzMyZHll\nWkdaeGlEdVFtWnhLTEFsUWpyM2pHeUx4KzRLa2s1OFVPN0QyUWRnRklRQ292\ndVN1WkVTbmU2Ukc2WFE9PSJdLAoKICAgICJhanYiOiBbImFqdkA2LjEyLjYi\nLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiZmFzdC1kZWVwLWVxdWFsIjog\nIl4zLjEuMSIsICJmYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICJeMi4w\nLjAiLCAianNvbi1zY2hlbWEtdHJhdmVyc2UiOiAiXjAuNC4xIiwgInVyaS1q\ncyI6ICJeNC4yLjIiIH0gfSwgInNoYTUxMi1qM2ZWTGd2VG81MjdhbnlZeUpP\nR1RZSmJHK3ZublFZdkUwbTVtbWtjMVRLK254QXBwa0NMTUlMMGFaNGRibFZD\nTm9HU2hobStrekU0WlV5a0JvTWc0Zz09Il0sCgogICAgImFuc2ktZXNjYXBl\ncyI6IFsiYW5zaS1lc2NhcGVzQDQuMy4yIiwgIiIsIHsgImRlcGVuZGVuY2ll\ncyI6IHsgInR5cGUtZmVzdCI6ICJeMC4yMS4zIiB9IH0sICJzaGE1MTItZ0tY\najVBTHJLV1FMc1lHOWpsVFJtUi94S2x1eEhWK1o5UUV3TklnQ2ZNMS91d1BN\nQ3V6VlZuaDVtd1RkK091Qlpjd1NJTWJxc3NOV1JtMWxFNTFRYVE9PSJdLAoK\nICAgICJhbnNpLXJlZ2V4IjogWyJhbnNpLXJlZ2V4QDUuMC4xIiwgIiIsIHt9\nLCAic2hhNTEyLXF1SlFYbFRTVUdMMkxIOVNVWG84VndzWTRzb2FuaGdvNkxO\nU204NEUxTEJjRThzM08wd3BkaVJ6eVI5ei9aWkpNbE1XdjM3cU9PYjlwZEps\nTVVFS0ZRPT0iXSwKCiAgICAiYW5zaS1zdHlsZXMiOiBbImFuc2ktc3R5bGVz\nQDUuMi4wIiwgIiIsIHt9LCAic2hhNTEyLUN4d3B0MlNmVHpUdFhjZk9sekdF\nZWU4TytjK01tVWdHck5pQmNYbnVXeHVGSkhlNmE1SHo3cXdod2U1T2dhU1lJ\nMElKdmtMcVdYMUFTRytjSk9rRWlBPT0iXSwKCiAgICAiYW55bWF0Y2giOiBb\nImFueW1hdGNoQDMuMS4zIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIm5v\ncm1hbGl6ZS1wYXRoIjogIl4zLjAuMCIsICJwaWNvbWF0Y2giOiAiXjIuMC40\nIiB9IH0sICJzaGE1MTItS01SZUZVcjBCNHQrRCtPQmtqUjNLWXF2b2NwMlhh\nU3pPNTVVY0I2bWdRTWQzS2JjRSttV1R5dlZWN0QvenNkRWJOblY2YWNaVXV0\na2lIUVh2VHIxUnc9PSJdLAoKICAgICJhcmdwYXJzZSI6IFsiYXJncGFyc2VA\nMi4wLjEiLCAiIiwge30sICJzaGE1MTItOCs5V3FlYmJGenBYOU9SK1dhNk8y\nOWFzSW9nZVJNemNHdEFJTmRwTUhIeUFnMTBmMDVhU0ZWQmJjRXFHZi9QWHcx\nRWpBWitxMi9iRUJnM0R2dXJLM1E9PSJdLAoKICAgICJhc3luYyI6IFsiYXN5\nbmNAMy4yLjYiLCAiIiwge30sICJzaGE1MTItaHRDVURseHl5Q0xNZ2FNM3hY\nZzBDMExXMnhxZnVRNnAwNXBDRUlzWHV5USthMWtvWUtUdUJNelJOd215YmZM\nZ3ZKRE1kMHIxTFRuNCtFMFRpNkMyQUE9PSJdLAoKICAgICJhc3luY2tpdCI6\nIFsiYXN5bmNraXRAMC40LjAiLCAiIiwge30sICJzaGE1MTItT2VpOU9INHRS\naDBZcVUzR3hoWDc5ZE0vbXdWZ3ZiWkphU05hUmsrYnNoa2owUzVjZkhjZ1lh\na3JlQmpySHdhdFhLYnorSW9JZFlMeHJLaW0yTWpXMFE9PSJdLAoKICAgICJi\nYWJlbC1qZXN0IjogWyJiYWJlbC1qZXN0QDI5LjcuMCIsICIiLCB7ICJkZXBl\nbmRlbmNpZXMiOiB7ICJAamVzdC90cmFuc2Zvcm0iOiAiXjI5LjcuMCIsICJA\ndHlwZXMvYmFiZWxfX2NvcmUiOiAiXjcuMS4xNCIsICJiYWJlbC1wbHVnaW4t\naXN0YW5idWwiOiAiXjYuMS4xIiwgImJhYmVsLXByZXNldC1qZXN0IjogIl4y\nOS42LjMiLCAiY2hhbGsiOiAiXjQuMC4wIiwgImdyYWNlZnVsLWZzIjogIl40\nLjIuOSIsICJzbGFzaCI6ICJeMy4wLjAiIH0sICJwZWVyRGVwZW5kZW5jaWVz\nIjogeyAiQGJhYmVsL2NvcmUiOiAiXjcuOC4wIiB9IH0sICJzaGE1MTItQnJ2\nR1kzeFpTd0VjQ3pLdktzQ2kyR2dIcURxc1lrT1A0L2J5NXhDZ0l3R1hReElF\naCs4ZXczZ21yRTF5N1hSUjZMSFpJajZ5TFluVWkvbW0yS1hLQmc9PSJdLAoK\nICAgICJiYWJlbC1wbHVnaW4taXN0YW5idWwiOiBbImJhYmVsLXBsdWdpbi1p\nc3RhbmJ1bEA2LjEuMSIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJAYmFi\nZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4wLjAiLCAiQGlzdGFuYnVs\nanMvbG9hZC1ueWMtY29uZmlnIjogIl4xLjAuMCIsICJAaXN0YW5idWxqcy9z\nY2hlbWEiOiAiXjAuMS4yIiwgImlzdGFuYnVsLWxpYi1pbnN0cnVtZW50Ijog\nIl41LjAuNCIsICJ0ZXN0LWV4Y2x1ZGUiOiAiXjYuMC4wIiB9IH0sICJzaGE1\nMTItWTFJUW9rOTgyMWNDOW9uQ3g1b3RnRmZSbTdMbStJK3d3eE94NzM4TS9X\nTFBaOVE0Mm00SUc1VzBGTlg4V0xMMmdZTVpvM0prdVhJSDJET3BXTStxd0E9\nPSJdLAoKICAgICJiYWJlbC1wbHVnaW4tamVzdC1ob2lzdCI6IFsiYmFiZWwt\ncGx1Z2luLWplc3QtaG9pc3RAMjkuNi4zIiwgIiIsIHsgImRlcGVuZGVuY2ll\ncyI6IHsgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4zLjMiLCAiQGJhYmVsL3R5\ncGVzIjogIl43LjMuMyIsICJAdHlwZXMvYmFiZWxfX2NvcmUiOiAiXjcuMS4x\nNCIsICJAdHlwZXMvYmFiZWxfX3RyYXZlcnNlIjogIl43LjAuNiIgfSB9LCAi\nc2hhNTEyLUVTQWMvUkp2R1RGRXpSd09UVDQrbE5Eay9HTkhNa0tiTnpzdlQw\ncUtSZkR5eVlUc2t4QjVyblUybmpJRFlWeFhDQkhIRUkxYzBZd0hvYjNXYVl1\nak9nPT0iXSwKCiAgICAiYmFiZWwtcHJlc2V0LWN1cnJlbnQtbm9kZS1zeW50\nYXgiOiBbImJhYmVsLXByZXNldC1jdXJyZW50LW5vZGUtc3ludGF4QDEuMS4w\nIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIkBiYWJlbC9wbHVnaW4tc3lu\ndGF4LWFzeW5jLWdlbmVyYXRvcnMiOiAiXjcuOC40IiwgIkBiYWJlbC9wbHVn\naW4tc3ludGF4LWJpZ2ludCI6ICJeNy44LjMiLCAiQGJhYmVsL3BsdWdpbi1z\neW50YXgtY2xhc3MtcHJvcGVydGllcyI6ICJeNy4xMi4xMyIsICJAYmFiZWwv\ncGx1Z2luLXN5bnRheC1jbGFzcy1zdGF0aWMtYmxvY2siOiAiXjcuMTQuNSIs\nICJAYmFiZWwvcGx1Z2luLXN5bnRheC1pbXBvcnQtYXR0cmlidXRlcyI6ICJe\nNy4yNC43IiwgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWltcG9ydC1tZXRhIjog\nIl43LjEwLjQiLCAiQGJhYmVsL3BsdWdpbi1zeW50YXgtanNvbi1zdHJpbmdz\nIjogIl43LjguMyIsICJAYmFiZWwvcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFz\nc2lnbm1lbnQtb3BlcmF0b3JzIjogIl43LjEwLjQiLCAiQGJhYmVsL3BsdWdp\nbi1zeW50YXgtbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJhdG9yIjogIl43Ljgu\nMyIsICJAYmFiZWwvcGx1Z2luLXN5bnRheC1udW1lcmljLXNlcGFyYXRvciI6\nICJeNy4xMC40IiwgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW9iamVjdC1yZXN0\nLXNwcmVhZCI6ICJeNy44LjMiLCAiQGJhYmVsL3BsdWdpbi1zeW50YXgtb3B0\naW9uYWwtY2F0Y2gtYmluZGluZyI6ICJeNy44LjMiLCAiQGJhYmVsL3BsdWdp\nbi1zeW50YXgtb3B0aW9uYWwtY2hhaW5pbmciOiAiXjcuOC4zIiwgIkBiYWJl\nbC9wbHVnaW4tc3ludGF4LXByaXZhdGUtcHJvcGVydHktaW4tb2JqZWN0Ijog\nIl43LjE0LjUiLCAiQGJhYmVsL3BsdWdpbi1zeW50YXgtdG9wLWxldmVsLWF3\nYWl0IjogIl43LjE0LjUiIH0sICJwZWVyRGVwZW5kZW5jaWVzIjogeyAiQGJh\nYmVsL2NvcmUiOiAiXjcuMC4wIiB9IH0sICJzaGE1MTItbGRZc3M4U2JCbFd2\nYTFiczI4cTc4SnU1WnExRis4QnJxQlpaMFZGaExCdmhoNmxDcEMybzNnREpp\nLzVEUkxzOUZnWVpDbm1QWUlWRlU0bFJYQ2t5VXc9PSJdLAoKICAgICJiYWJl\nbC1wcmVzZXQtamVzdCI6IFsiYmFiZWwtcHJlc2V0LWplc3RAMjkuNi4zIiwg\nIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgImJhYmVsLXBsdWdpbi1qZXN0LWhv\naXN0IjogIl4yOS42LjMiLCAiYmFiZWwtcHJlc2V0LWN1cnJlbnQtbm9kZS1z\neW50YXgiOiAiXjEuMC4wIiB9LCAicGVlckRlcGVuZGVuY2llcyI6IHsgIkBi\nYWJlbC9jb3JlIjogIl43LjAuMCIgfSB9LCAic2hhNTEyLTBCM2JoeFI2c25X\nWEpadFIvUmxpSFREUFJnbjFzTkhPUjB5VnRxL0lpUUZ5dU9WakZTK3d1aW8v\nUjRnU05reVltS21KQjR3R1p2Mk5aYW5tS21Ubk5BPT0iXSwKCiAgICAiYmFs\nYW5jZWQtbWF0Y2giOiBbImJhbGFuY2VkLW1hdGNoQDEuMC4yIiwgIiIsIHt9\nLCAic2hhNTEyLTNvU2VVTzBUTVY2N2hOMUFtYlhzSzR5YXFVN3RqaUhsYnhS\nRFpPcEgwS1c5K0NlWDRiUkFhWDBBbnh0MHR4Mk1ycFJwV3dRYVB3SWxJU0VK\naFlVNVB3PT0iXSwKCiAgICAiYnJhY2UtZXhwYW5zaW9uIjogWyJicmFjZS1l\neHBhbnNpb25AMS4xLjExIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgImJh\nbGFuY2VkLW1hdGNoIjogIl4xLjAuMCIsICJjb25jYXQtbWFwIjogIjAuMC4x\nIiB9IH0sICJzaGE1MTItaUN1UEhERmdySFg3SDJ2RUkvNXhwejA3elNIQjAw\nVHB1Z3FobVl0Vm1NTzY1MThtQ3VSTW9PWUZsZEVCbDBnMTg3dWZvemRhSGdX\nS2NZRmI2MXFHaUE9PSJdLAoKICAgICJicmFjZXMiOiBbImJyYWNlc0AzLjAu\nMyIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJmaWxsLXJhbmdlIjogIl43\nLjEuMSIgfSB9LCAic2hhNTEyLXlRYlhnTy9PU1pWRDJJc2lMbHJvKzdIZjZR\nMThFSnJLU0VzZG9NektlUEtYY3QzZ3ZEOG9MY09RZEl6R3VwcjVGaitFRGU4\nZ08vbHhjMUJ6Zk1weHZBPT0iXSwKCiAgICAiYnJvd3NlcnNsaXN0IjogWyJi\ncm93c2Vyc2xpc3RANC4yNC4zIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsg\nImNhbml1c2UtbGl0ZSI6ICJeMS4wLjMwMDAxNjg4IiwgImVsZWN0cm9uLXRv\nLWNocm9taXVtIjogIl4xLjUuNzMiLCAibm9kZS1yZWxlYXNlcyI6ICJeMi4w\nLjE5IiwgInVwZGF0ZS1icm93c2Vyc2xpc3QtZGIiOiAiXjEuMS4xIiB9LCAi\nYmluIjogeyAiYnJvd3NlcnNsaXN0IjogImNsaS5qcyIgfSB9LCAic2hhNTEy\nLTFDUG12OGlvYkUyZnlSTVY5N2RBY01WZWd2dldLeG1xOTRoa0xpQWtVR3dL\nVlR5REx3MzNLK1p4aUZyUkVLbW1wczRySXc2Z3JjQ0ZDblRNU1ovWWlBPT0i\nXSwKCiAgICAiYnMtbG9nZ2VyIjogWyJicy1sb2dnZXJAMC4yLjYiLCAiIiwg\neyAiZGVwZW5kZW5jaWVzIjogeyAiZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdp\nZnkiOiAiMi54IiB9IH0sICJzaGE1MTItcGQ4RENveG1iZ2M3aHlQS092eHRx\nTmNqWW9Pc0FCUFFkY0NVakdwM2Q0MlZSMkNYMU9SaGsyQTg3b3FxdTVSMWtr\nKzc2bnN4WnVwa215ZCtNVnRDb2c9PSJdLAoKICAgICJic2VyIjogWyJic2Vy\nQDIuMS4xIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIm5vZGUtaW50NjQi\nOiAiXjAuNC4wIiB9IH0sICJzaGE1MTItZ1F4VE5FL0dBZklJcm1ITFVFM29K\neXA1Rk82SFJCZmhqbnc0L3dNbUE2M1pHREpuV0JtZ1kvbHlRQnBuRFVrR21B\naGJTZTM5dHgyZC9pVE9BZmdsd1E9PSJdLAoKICAgICJidWZmZXItZnJvbSI6\nIFsiYnVmZmVyLWZyb21AMS4xLjIiLCAiIiwge30sICJzaGE1MTItRStYUUNS\nd1NiYWFpQ2h0djZrNkR3Z2MrYngrQnM2dnVLSkhIbDVrb3gvQmFLYmhpWHpx\nUU93SzRjTzIyeUVsR3AyT0NtandWaFQzSG14Z3lQR25KZlE9PSJdLAoKICAg\nICJjYWxsc2l0ZXMiOiBbImNhbGxzaXRlc0AzLjEuMCIsICIiLCB7fSwgInNo\nYTUxMi1QOEJqQXNYdlpTK1ZJRFVJMTFoSENRRXY3NFlUNjdZVWk1SkpGTldJ\ncUwyMzVzQm1qWDQrcXg5TXV2bHM1aXZ5TkVOY3R4NDZ4UUxRM2FUdUU3c3Nh\nUT09Il0sCgogICAgImNhbWVsY2FzZSI6IFsiY2FtZWxjYXNlQDYuMy4wIiwg\nIiIsIHt9LCAic2hhNTEyLUdteTZGaFlsQ1k3dU9FbFpVU2J4bzJVQ0RIOG93\nRWs5OTZna2JycHNnR3RySkxNM0o3akd4bDlJYzdRd3dqNGl2T0U1QVdaV1JN\nZWNEZEY3aHFHakZBPT0iXSwKCiAgICAiY2FuaXVzZS1saXRlIjogWyJjYW5p\ndXNlLWxpdGVAMS4wLjMwMDAxNjkwIiwgIiIsIHt9LCAic2hhNTEyLTVFeGlF\nM3FRTjZvRjhDbGY4aWZJRGNNUkNSRS9kTUdjRVRHL1hHTUQ4L1hpWG02SFhR\nZ1FUaDF5WllMWFhwU09zRVVsSm0xWHI3a0dVTFpUdUd0UC93PT0iXSwKCiAg\nICAiY2hhbGsiOiBbImNoYWxrQDQuMS4yIiwgIiIsIHsgImRlcGVuZGVuY2ll\ncyI6IHsgImFuc2ktc3R5bGVzIjogIl40LjEuMCIsICJzdXBwb3J0cy1jb2xv\nciI6ICJeNy4xLjAiIH0gfSwgInNoYTUxMi1vS25iaEZ5UklYcFV1ZXo4aUJN\nbXlFYTRuYmo0SU9ReXVoYy93eTlrWTcvV1ZQY3dJTzlWQTY2OFB1OFJrTzcr\nMEc3NlNMUk9leXc5Q3BRMDYxaTRtQT09Il0sCgogICAgImNoYXItcmVnZXgi\nOiBbImNoYXItcmVnZXhAMS4wLjIiLCAiIiwge30sICJzaGE1MTIta1dXWHp0\ndlo1U0JRVitlUmdLRmVoOHE1c0x1WlkyKzhXVUl6bHhXVlRnK29Hd1kxNHF5\nbHgxS2JLekhkOFA2WllrQWcweHlJRFU5Sk1IaHlKTVoxanc9PSJdLAoKICAg\nICJjaS1pbmZvIjogWyJjaS1pbmZvQDMuOS4wIiwgIiIsIHt9LCAic2hhNTEy\nLU5JeEY1NWh2NG5TcVFzd2tBZWlPaTFyODN4eThKbGRPRkRUV2l1ZzU1S0J1\nOUpuYmxuY2QyVTZWaUhtWWdIZjAxVFBaUzc3TkpCaEJNS2RXajlIUU1RPT0i\nXSwKCiAgICAiY2pzLW1vZHVsZS1sZXhlciI6IFsiY2pzLW1vZHVsZS1sZXhl\nckAxLjQuMSIsICIiLCB7fSwgInNoYTUxMi1jdVNWSUhpOS85RS8rODIxUWpk\ndm5nb3IreHBubHdudXdJeVpPYUxtSEJWZFhMK2dQK0k2UVFCOVZrTzdSSTc3\nWUljVFYrUzFXOUFyZUo1ZU42M0pCQT09Il0sCgogICAgImNsaXVpIjogWyJj\nbGl1aUA4LjAuMSIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJzdHJpbmct\nd2lkdGgiOiAiXjQuMi4wIiwgInN0cmlwLWFuc2kiOiAiXjYuMC4xIiwgIndy\nYXAtYW5zaSI6ICJeNy4wLjAiIH0gfSwgInNoYTUxMi1CU2VObnl1czc1QzQv\nL05ROWdRdDEvY3NUWHlvLzhTYithZkxBa3pBcHRGdU1zb2Q5SEZva0dOdWRa\ncGkvb1FWNzNoblZLK3NSKzVQVlJNZCtEcjdZUT09Il0sCgogICAgImNvIjog\nWyJjb0A0LjYuMCIsICIiLCB7fSwgInNoYTUxMi1RVmIwZE01SHZHK3VheGl0\nbTh3T05sN2psdHg4ZHFoZlUzM0RjcXRPWmNMU1ZJS1NERExEaTcrMExiQUtp\neUk4aEQ5dTQybTJZeFhTa01HV1RoYWVjUT09Il0sCgogICAgImNvbGxlY3Qt\ndjgtY292ZXJhZ2UiOiBbImNvbGxlY3QtdjgtY292ZXJhZ2VAMS4wLjIiLCAi\nIiwge30sICJzaGE1MTItbEhsNGQ1L09ORWJMbEp2YUpOdHNGL0x6K1d2QjA3\ndTJ5Y3FUWWJkcnE3VXlwRFhhaWxFUzR2YWxZYjJlV2lKRnhabFZtcEdla2Zx\nb3hRaHp5RmRUNFE9PSJdLAoKICAgICJjb2xvci1jb252ZXJ0IjogWyJjb2xv\nci1jb252ZXJ0QDIuMC4xIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgImNv\nbG9yLW5hbWUiOiAifjEuMS40IiB9IH0sICJzaGE1MTItUlJFQ1BzajdpdS94\nYjVvS1ljc0ZIU3BwRk5uc2ovNTJPVlRSS2I0elA1b25Yd1ZGM3pWbW1Ub05j\nT2ZHQytDUkRwZksvVTU4NGZNZzM4WkhDYUVsS1E9PSJdLAoKICAgICJjb2xv\nci1uYW1lIjogWyJjb2xvci1uYW1lQDEuMS40IiwgIiIsIHt9LCAic2hhNTEy\nLWRPeSszQXVXM2Eyd05iWkhJdU1acFRjZ2pHdUxVL3VCTC91YmNaRjlPWGJE\nbzhmZjRPOHlWcDVCZjBlZlM4dUVvWW81cTRGeDdkWTlPZ1FHWGdBc1FBPT0i\nXSwKCiAgICAiY29tYmluZWQtc3RyZWFtIjogWyJjb21iaW5lZC1zdHJlYW1A\nMS4wLjgiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiZGVsYXllZC1zdHJl\nYW0iOiAifjEuMC4wIiB9IH0sICJzaGE1MTItRlFONE1SZnVKZUhmN2NCYkJN\nSkZYaEtTRHErMmtBQXJCbG1SQnZjdkZFNUJCMUhaS1h0U0ZBU0RoZGx6OXpP\nWXd4aDhsRGRudm1NT2UvKzVjZG9FZGc9PSJdLAoKICAgICJjb21tYW5kZXIi\nOiBbImNvbW1hbmRlckAyLjIwLjMiLCAiIiwge30sICJzaGE1MTItR3BWa21N\nOHZGMnZRVWtqMkx2Wm1EMzVKeGVKT0xDd0o5Y1VrdWd5azJudWhidjMrbUp2\ncExZWXQrMCtVU014RStvaitleS9sSkVuaFp3NzV4L09NY1E9PSJdLAoKICAg\nICJjb25jYXQtbWFwIjogWyJjb25jYXQtbWFwQDAuMC4xIiwgIiIsIHt9LCAi\nc2hhNTEyLS9TcnY0ZHN3eVFOQmZvaEdwejlvNlliM0d6M1NyVURxQkg1clR1\naEdSN2FodGxiWUtuVnh3MmJDRk1SbGphQTdFWEhhWFo4d3NIZG9kRnZia2hL\nbXFnPT0iXSwKCiAgICAiY29udmVydC1zb3VyY2UtbWFwIjogWyJjb252ZXJ0\nLXNvdXJjZS1tYXBAMi4wLjAiLCAiIiwge30sICJzaGE1MTItS3ZwNDU5SHJW\nMkZFSjFDQXNpMUt1K01ZM2thc0gxOVRGeWtUejJ4V21NZXE2YmsyTlUzWFh2\nZkorUTYxbTB4a3RXd3QrMUhTWWYzSlpzVG1zM2FSSmc9PSJdLAoKICAgICJj\nb29raWUiOiBbImNvb2tpZUAxLjAuMiIsICIiLCB7fSwgInNoYTUxMi05S3Iv\najRPMTZJU3Y4ekJCaEpvaTRiWE9ZTlRrRkxPcVNMM1VEQjBualh4Q1hOZXpq\nZXlWckp5R09XdGdmcy9xMmttMWd3QmNmSDhxMXlFR29NWXVuQT09Il0sCgog\nICAgImNyZWF0ZS1qZXN0IjogWyJjcmVhdGUtamVzdEAyOS43LjAiLCAiIiwg\neyAiZGVwZW5kZW5jaWVzIjogeyAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMyIs\nICJjaGFsayI6ICJeNC4wLjAiLCAiZXhpdCI6ICJeMC4xLjIiLCAiZ3JhY2Vm\ndWwtZnMiOiAiXjQuMi45IiwgImplc3QtY29uZmlnIjogIl4yOS43LjAiLCAi\namVzdC11dGlsIjogIl4yOS43LjAiLCAicHJvbXB0cyI6ICJeMi4wLjEiIH0s\nICJiaW4iOiB7ICJjcmVhdGUtamVzdCI6ICJiaW4vY3JlYXRlLWplc3QuanMi\nIH0gfSwgInNoYTUxMi1BZHoyYmRIMFZxM0Y1M0tFTUpPb2Z0UUZ1dFdDdWtt\nNkoyNHdiUFdSTzRrMWtNWTdnUzdkcy91b0prTnVWOHdEQ3RXV251d0djSndw\nV2NpaCt6RVcxUT09Il0sCgogICAgImNyb3NzLXNwYXduIjogWyJjcm9zcy1z\ncGF3bkA3LjAuNiIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJwYXRoLWtl\neSI6ICJeMy4xLjAiLCAic2hlYmFuZy1jb21tYW5kIjogIl4yLjAuMCIsICJ3\naGljaCI6ICJeMi4wLjEiIH0gfSwgInNoYTUxMi11VjJRT1dQMm5XenN5MmFN\ncDhhUmliaGk5ZGx6RjVIZ2g1U0hhQjlPaVRHRXlEVGlKSnl4MHV5NTFRWGR5\nV2J0QUhOdWE0WEp6VUtjYTNPektVZDN2QT09Il0sCgogICAgImNzc2ZpbHRl\nciI6IFsiY3NzZmlsdGVyQDAuMC4xMCIsICIiLCB7fSwgInNoYTUxMi1GQWFM\nRGFwbHN0b1JzRFI4WEdZSDUxem5VTjBVWTduTWM2WjkvZnZFOEVYR3d2SkU5\naHU3VzJ2SHd4MStiZDZnQ1lubG45bkxienhGVHJjTzlZUURadz09Il0sCgog\nICAgImNzc29tIjogWyJjc3NvbUAwLjUuMCIsICIiLCB7fSwgInNoYTUxMi1p\nS3VRY3ErTmRIcWxBY3dVWTBvL0hMNjlYUXJVYVFkTWptU3RKOEpGbVVhaWlR\nRXJsaHJtdWlna2cvQ1U0RTJKMEl5VUtVck1BZ2wzNlR2TjY3TXFUdz09Il0s\nCgogICAgImNzc3N0eWxlIjogWyJjc3NzdHlsZUAyLjMuMCIsICIiLCB7ICJk\nZXBlbmRlbmNpZXMiOiB7ICJjc3NvbSI6ICJ+MC4zLjYiIH0gfSwgInNoYTUx\nMi1BWkw2N2Fia1V6SXV2Y0hxazdjMDljZXpwR05jeFV4VTRJb2kvMDV4SGs0\nRFFlVGtXbUdZZnRJRTZjdFU2QUV0K0duNG4xbERTdE90ajdGS3ljUDcxQT09\nIl0sCgogICAgImNzc3R5cGUiOiBbImNzc3R5cGVAMy4xLjMiLCAiIiwge30s\nICJzaGE1MTItTTF1UWtNbDhyUUsvc3pEMExOaHRxeElQTHBpbUdtOHNPQndV\nN2xMbkNwU2JUeVkzeWVVMVZjN2w0S1Q1elQ0cy95T3hISDVPN3RJdXVMT0Nu\nTEFEUnc9PSJdLAoKICAgICJkYXRhLXVybHMiOiBbImRhdGEtdXJsc0AzLjAu\nMiIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJhYmFiIjogIl4yLjAuNiIs\nICJ3aGF0d2ctbWltZXR5cGUiOiAiXjMuMC4wIiwgIndoYXR3Zy11cmwiOiAi\nXjExLjAuMCIgfSB9LCAic2hhNTEyLUp5L3RqM2xkalpKbzYzc1ZBdmc2TEh0\nMm1Idmw0VjZBZ1JBbU5EdExkbTdmYXF0c3grYUpHNDJyc3lDbzlKQ29SVkt3\nUEZ6S2xJUHgzRElpYndTSWFRPT0iXSwKCiAgICAiZGVidWciOiBbImRlYnVn\nQDQuNC4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIm1zIjogIl4yLjEu\nMyIgfSB9LCAic2hhNTEyLTZXVFovSXhDWS9UNkJBTG9aSGFFNGN0cDl4bSta\nNWtZL3B6WWFDSFJGZXlWaG9qeGxybSs0Nnk2OEhBNmhyMFRjd0Vzc294TmlE\nRVVKUWpmUFovUllBPT0iXSwKCiAgICAiZGVjaW1hbC5qcyI6IFsiZGVjaW1h\nbC5qc0AxMC40LjMiLCAiIiwge30sICJzaGE1MTItVkJCYUxjMU1nTDVYcHpn\nSVA3bnk1WjZOeDNVclJrSVZpVWtQVWR0bDlheWE1YW15M0RlMWdzVVVTQjFn\nMyszc0V4WU5qQ0FzQXpubXVreXhDYjFHUkE9PSJdLAoKICAgICJkZWRlbnQi\nOiBbImRlZGVudEAxLjUuMyIsICIiLCB7ICJwZWVyRGVwZW5kZW5jaWVzIjog\neyAiYmFiZWwtcGx1Z2luLW1hY3JvcyI6ICJeMy4xLjAiIH0sICJvcHRpb25h\nbFBlZXJzIjogWyJiYWJlbC1wbHVnaW4tbWFjcm9zIl0gfSwgInNoYTUxMi1O\nSFF0Zk9PVzY4V0Q4bGd5cGJMQTVvVCtCdDB4WEpoaVl2b1I2U21tTlhaZnB6\nT0dYd2RLV21jd0c4TjdQd1ZWV1YzZUYvNjhubUQ5QmFKU3NUQmh5UT09Il0s\nCgogICAgImRlZXAtaXMiOiBbImRlZXAtaXNAMC4xLjQiLCAiIiwge30sICJz\naGE1MTItb0lQemtzbVRnNC9NcmlpYVlHTytva1hEVDd6dG4vdzNFcHR2Lytn\nU0lkTWRLc0pvMHU0Q2ZZTkZKUHkrNFNLTXVDcUd3Mnd4bkErVVJNZzN0OGEv\nYlE9PSJdLAoKICAgICJkZWVwbWVyZ2UiOiBbImRlZXBtZXJnZUA0LjMuMSIs\nICIiLCB7fSwgInNoYTUxMi0zc1VxYk1FYzc3WHFwZE5PN0ZSeVJvZytlVzNw\naCtHWUNiaitySyt1WXlSTXV3c1Z5MHJNaVZ0UG4rUUpsS0Z2V1AvMVBZcGFw\ncVluME1lMmtuRm4rQT09Il0sCgogICAgImRlbGF5ZWQtc3RyZWFtIjogWyJk\nZWxheWVkLXN0cmVhbUAxLjAuMCIsICIiLCB7fSwgInNoYTUxMi1aeVNEN05m\nOTFhTEIwUnhMNEtHcktIQlhsN0VkczFEQW1FZGNvVmF3WG5MRDdTRGhwTmd0\ndUlJMmFBa2c3YTdRUzQxanhQU1oxN3A0VmRHbk1IazNNUT09Il0sCgogICAg\nImRldGVjdC1uZXdsaW5lIjogWyJkZXRlY3QtbmV3bGluZUAzLjEuMCIsICIi\nLCB7fSwgInNoYTUxMi1UTHoreC92RVhtL1k3UDd3bjFFSkZOTHhZcFVENFRn\nTW9zeFk2ZkFWSlVuSk1idXBIQk9uY3h5V1VHOU9wVGFIOUVCRDd1Rkk1TGZF\nZ21NT2M1NERzQT09Il0sCgogICAgImRpZmYtc2VxdWVuY2VzIjogWyJkaWZm\nLXNlcXVlbmNlc0AyOS42LjMiLCAiIiwge30sICJzaGE1MTItRWplUEsxc3JE\nM1AwOG8yajRmMEV4bnlscVJzNUI5dEpqY3A5dDFrckgycVJpOENDZHNZZndl\nOUpnU0x1ckZCV3dxNHVPbGlwemZrNWZITnZ3RktyOFE9PSJdLAoKICAgICJk\nb21leGNlcHRpb24iOiBbImRvbWV4Y2VwdGlvbkA0LjAuMCIsICIiLCB7ICJk\nZXBlbmRlbmNpZXMiOiB7ICJ3ZWJpZGwtY29udmVyc2lvbnMiOiAiXjcuMC4w\nIiB9IH0sICJzaGE1MTItQTJpczRQTEcrZWVTZm9UTUE5NS9zNHB2QW9TbzJt\nS3RpTTVqbEhrQVZld21pTzhJU0ZURktaakg3VUFNMUF0bGkvT1QvN0pIT3JK\nUkppTUtVWktZQnc9PSJdLAoKICAgICJlanMiOiBbImVqc0AzLjEuMTAiLCAi\nIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiamFrZSI6ICJeMTAuOC41IiB9LCAi\nYmluIjogeyAiZWpzIjogImJpbi9jbGkuanMiIH0gfSwgInNoYTUxMi1VZUpt\nRmZPckFRUzhPSldQWjRxdGdIeVdFeGEwODgvTXRLNVVFeW9KR0ZINjdjREVY\na1pTdmlPaUtSQ1o0WGlqMHp4STNKRUNnWXMzb0t4K0FpelFCQT09Il0sCgog\nICAgImVsZWN0cm9uLXRvLWNocm9taXVtIjogWyJlbGVjdHJvbi10by1jaHJv\nbWl1bUAxLjUuNzUiLCAiIiwge30sICJzaGE1MTItTGYzKytEdW1SRS9RbXdl\nR2pVK1pjS3FRKzNiS2tVL3FqYUtZaElKS0VPaGdJTzlYczZJaUFRRmtmRm9q\nK1JoZ0RrNExVZU5zTG82cGxFeEhxU3l1NlE9PSJdLAoKICAgICJlbWl0dGVy\neSI6IFsiZW1pdHRlcnlAMC4xMy4xIiwgIiIsIHt9LCAic2hhNTEyLURlV3dh\nd2s2cjV5UjlqRmduREtZdDRzTFMwTG1ISkppM1pPbmI1L0pkYll3ajNuVytG\neFFuSElqaEJLejhZTEM3b1JOUFZNOU5RNDdJM0NWeDM0ZXFRPT0iXSwKCiAg\nICAiZW1vamktcmVnZXgiOiBbImVtb2ppLXJlZ2V4QDguMC4wIiwgIiIsIHt9\nLCAic2hhNTEyLU1Tall6Y1dOT0EwZXdBSHB6ME14cFlGdndnNnlqeTFORzN4\ndGVvcXo2NDRWQ28vUlBnbnIxL0dHdCtpYzNpSlR6UThFdTNUZE0xNFNhd25W\nVW1HRTZBPT0iXSwKCiAgICAiZW50aXRpZXMiOiBbImVudGl0aWVzQDQuNS4w\nIiwgIiIsIHt9LCAic2hhNTEyLVYwaGpINGRHUGg5QW81cDBNb1JZNkJWcXR3\nQ2poejZ2STVMVDhBSjU1SCs0ZzkvNHZiSHgxSTU0ZlMwWHVjbExoREhBclBR\nQ2lNakR4amFMOGZQeGh3PT0iXSwKCiAgICAiZXJyb3ItZXgiOiBbImVycm9y\nLWV4QDEuMy4yIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgImlzLWFycmF5\naXNoIjogIl4wLjIuMSIgfSB9LCAic2hhNTEyLTdkRkhObXFlRlNFdDJaQnND\ncmlvcktubjNaMnBqK2ZkOWttSTZRb1d3NC8vREwraWNFQmZjMFU3cUpDaXNx\nclRzS1RqdzRmTkZ5MnBXOU9xU3REODRnPT0iXSwKCiAgICAiZXNjYWxhZGUi\nOiBbImVzY2FsYWRlQDMuMi4wIiwgIiIsIHt9LCAic2hhNTEyLVdVajJxbHhh\nUXRPNGc2UHE1YzI5R1RjV0dEeWQ4aXRMOHpUbGlwZ0VDejNKZXNBaWlPS290\nZDhKVTZvdEIzUEFDZ0c2eGtKVXlWaGJvTVMrYmplL2pBPT0iXSwKCiAgICAi\nZXNjYXBlLXN0cmluZy1yZWdleHAiOiBbImVzY2FwZS1zdHJpbmctcmVnZXhw\nQDQuMC4wIiwgIiIsIHt9LCAic2hhNTEyLVR0cGNOSjNYQXp4M0dxOHNXUnpK\nYVZhalJzMHVWeEEyWUFrZGIxam0yWWtQejRHNmVnVUZBeUEzbjV2dEVJWmVm\nUGs1V2E0VVhiS3VTNWZLa0pXZGdBPT0iXSwKCiAgICAiZXNjb2RlZ2VuIjog\nWyJlc2NvZGVnZW5AMi4xLjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAi\nZXNwcmltYSI6ICJeNC4wLjEiLCAiZXN0cmF2ZXJzZSI6ICJeNS4yLjAiLCAi\nZXN1dGlscyI6ICJeMi4wLjIiIH0sICJvcHRpb25hbERlcGVuZGVuY2llcyI6\nIHsgInNvdXJjZS1tYXAiOiAifjAuNi4xIiB9LCAiYmluIjogeyAiZXNnZW5l\ncmF0ZSI6ICJiaW4vZXNnZW5lcmF0ZS5qcyIsICJlc2NvZGVnZW4iOiAiYmlu\nL2VzY29kZWdlbi5qcyIgfSB9LCAic2hhNTEyLTJObElEVHdVV0pOMG1SUFFP\nZHRRQnpiVUh2ZEdZMlAxVlhTeVU4M1EzeEt4TTdXSFgyUWw4ZEtxNzgyUTlU\nZ1FVTk9MRXpFWXU5YnpMTmoxcTg4STV3PT0iXSwKCiAgICAiZXNsaW50Ijog\nWyJlc2xpbnRAOS4xNC4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIkBl\nc2xpbnQtY29tbXVuaXR5L2VzbGludC11dGlscyI6ICJeNC4yLjAiLCAiQGVz\nbGludC1jb21tdW5pdHkvcmVnZXhwcCI6ICJeNC4xMi4xIiwgIkBlc2xpbnQv\nY29uZmlnLWFycmF5IjogIl4wLjE4LjAiLCAiQGVzbGludC9jb3JlIjogIl4w\nLjcuMCIsICJAZXNsaW50L2VzbGludHJjIjogIl4zLjEuMCIsICJAZXNsaW50\nL2pzIjogIjkuMTQuMCIsICJAZXNsaW50L3BsdWdpbi1raXQiOiAiXjAuMi4w\nIiwgIkBodW1hbmZzL25vZGUiOiAiXjAuMTYuNiIsICJAaHVtYW53aG9jb2Rl\ncy9tb2R1bGUtaW1wb3J0ZXIiOiAiXjEuMC4xIiwgIkBodW1hbndob2NvZGVz\nL3JldHJ5IjogIl4wLjQuMCIsICJAdHlwZXMvZXN0cmVlIjogIl4xLjAuNiIs\nICJAdHlwZXMvanNvbi1zY2hlbWEiOiAiXjcuMC4xNSIsICJhanYiOiAiXjYu\nMTIuNCIsICJjaGFsayI6ICJeNC4wLjAiLCAiY3Jvc3Mtc3Bhd24iOiAiXjcu\nMC4yIiwgImRlYnVnIjogIl40LjMuMiIsICJlc2NhcGUtc3RyaW5nLXJlZ2V4\ncCI6ICJeNC4wLjAiLCAiZXNsaW50LXNjb3BlIjogIl44LjIuMCIsICJlc2xp\nbnQtdmlzaXRvci1rZXlzIjogIl40LjIuMCIsICJlc3ByZWUiOiAiXjEwLjMu\nMCIsICJlc3F1ZXJ5IjogIl4xLjUuMCIsICJlc3V0aWxzIjogIl4yLjAuMiIs\nICJmYXN0LWRlZXAtZXF1YWwiOiAiXjMuMS4zIiwgImZpbGUtZW50cnktY2Fj\naGUiOiAiXjguMC4wIiwgImZpbmQtdXAiOiAiXjUuMC4wIiwgImdsb2ItcGFy\nZW50IjogIl42LjAuMiIsICJpZ25vcmUiOiAiXjUuMi4wIiwgImltdXJtdXJo\nYXNoIjogIl4wLjEuNCIsICJpcy1nbG9iIjogIl40LjAuMCIsICJqc29uLXN0\nYWJsZS1zdHJpbmdpZnktd2l0aG91dC1qc29uaWZ5IjogIl4xLjAuMSIsICJs\nb2Rhc2gubWVyZ2UiOiAiXjQuNi4yIiwgIm1pbmltYXRjaCI6ICJeMy4xLjIi\nLCAibmF0dXJhbC1jb21wYXJlIjogIl4xLjQuMCIsICJvcHRpb25hdG9yIjog\nIl4wLjkuMyIsICJ0ZXh0LXRhYmxlIjogIl4wLjIuMCIgfSwgInBlZXJEZXBl\nbmRlbmNpZXMiOiB7ICJqaXRpIjogIioiIH0sICJvcHRpb25hbFBlZXJzIjog\nWyJqaXRpIl0sICJiaW4iOiB7ICJlc2xpbnQiOiAiYmluL2VzbGludC5qcyIg\nfSB9LCAic2hhNTEyLWMyRkhzVkJyODdsblV0alA0WWh2azR5RWhLclFhdkdh\nZlJBL1NlMW91c2U4UGZiZkMvUWg5TXhhMDB5V3NaUmxxZVVCOXJhWGlwMGFp\naVVaa2ducjlnPT0iXSwKCiAgICAiZXNsaW50LXBsdWdpbi1pbmNsdXNpdmUt\nbGFuZ3VhZ2UiOiBbImVzbGludC1wbHVnaW4taW5jbHVzaXZlLWxhbmd1YWdl\nQDIuMi4xIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgImh1bXBzIjogIl4y\nLjAuMSIgfSB9LCAic2hhNTEyLVJMNmF2RFdYQ1MwRGNwOWF4aHZIUlVwNjVx\nRzA3cWpPcmg2SjRCTk5haFB2UlkzUHVZR25BZDBIMXN0clo5Y29iNzlKaUVX\nNEJxMGozZ0V1emJ2MC9BPT0iXSwKCiAgICAiZXNsaW50LXNjb3BlIjogWyJl\nc2xpbnQtc2NvcGVAOC4yLjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAi\nZXNyZWN1cnNlIjogIl40LjMuMCIsICJlc3RyYXZlcnNlIjogIl41LjIuMCIg\nfSB9LCAic2hhNTEyLVBIbFdVZkc2bHZQYzN5dlA1QTRQTnlCTDFXOGZrRFVj\nY21JMjFKVXUvK0dLWkJvSC9XNXU2dXNFTlhVcldGUnN5b1c1QUNVakZHZ0FG\nUXA1Z1VsYi9BPT0iXSwKCiAgICAiZXNsaW50LXZpc2l0b3Ita2V5cyI6IFsi\nZXNsaW50LXZpc2l0b3Ita2V5c0A0LjIuMCIsICIiLCB7fSwgInNoYTUxMi1V\neUxuU2VoTnQ2MkZGaFN3alpsSG1lb2twUks1OXJjejI5aitGMS9hRGdia2JS\nVGs3d0ljOVh6ZG9hc01VYlJOS0RNMHFRdC8rQko0QnJwRmVBQmVtdz09Il0s\nCgogICAgImVzcHJlZSI6IFsiZXNwcmVlQDEwLjMuMCIsICIiLCB7ICJkZXBl\nbmRlbmNpZXMiOiB7ICJhY29ybiI6ICJeOC4xNC4wIiwgImFjb3JuLWpzeCI6\nICJeNS4zLjIiLCAiZXNsaW50LXZpc2l0b3Ita2V5cyI6ICJeNC4yLjAiIH0g\nfSwgInNoYTUxMi0wUVlDOGIyNEhXWTh6alJuRFRMNlJpSGZEYkFXbjYzcWI0\nTE1qMVo0YjA3NkE0dW5lODErejAzS2c3bDdtbi80OFBVVHFvTHB0U1hlejhv\na25VOENsZz09Il0sCgogICAgImVzcHJpbWEiOiBbImVzcHJpbWFANC4wLjEi\nLCAiIiwgeyAiYmluIjogeyAiZXNwYXJzZSI6ICIuL2Jpbi9lc3BhcnNlLmpz\nIiwgImVzdmFsaWRhdGUiOiAiLi9iaW4vZXN2YWxpZGF0ZS5qcyIgfSB9LCAi\nc2hhNTEyLWVHdUZGdzdVcGRhK2c0cCtRSHZuVzBSeVRYL1NWZUpCRE0vZ0N0\nTUFSTzBjTHVUMkhjRUtuVFB2aGpWNmFHZXFyQ0Ivc2JOb3AwS3N6bTBqc2FX\nVTRBPT0iXSwKCiAgICAiZXNxdWVyeSI6IFsiZXNxdWVyeUAxLjYuMCIsICIi\nLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJlc3RyYXZlcnNlIjogIl41LjEuMCIg\nfSB9LCAic2hhNTEyLWNhOXB3OWZvbUZjS1B2RkxYaEJLVUs5MFp2R2liaUdP\ndlJKTmJqbGpZN3M3dXEvNVlPNEJPemNZdEpxRXhkeDk5ckY2YUFjblJ4SG1j\nVUhjejZzUXNnPT0iXSwKCiAgICAiZXNyZWN1cnNlIjogWyJlc3JlY3Vyc2VA\nNC4zLjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiZXN0cmF2ZXJzZSI6\nICJeNS4yLjAiIH0gfSwgInNoYTUxMi1LbWZLTDNiNkcrUlh2UDhOMXZyM1Rx\nMWtML29DRmduMk5ZWEV0cVA4L0wzcEthcFVBNEc4Y0ZWYW9GM1NVMzIzQ0Q0\nWHlwUi9mZmlvSG1rdGk2L1RhZz09Il0sCgogICAgImVzdHJhdmVyc2UiOiBb\nImVzdHJhdmVyc2VANS4zLjAiLCAiIiwge30sICJzaGE1MTItTU1kQVJ1VkVR\nemlOVGVKRDhEZ01xbWh3UjExQlJRL2NCUCtwTHRZZFNUbmYzTUlPOGZGZWlJ\nTkViWDM2WmRObGZVLzdBOWYzZ1V3NDlCM29Rc3Z3QkE9PSJdLAoKICAgICJl\nc3V0aWxzIjogWyJlc3V0aWxzQDIuMC4zIiwgIiIsIHt9LCAic2hhNTEyLWtW\nc2NxWGs0T0NwNjhTWjBka2dFS1ZpNi84aWozMDBLQldUSnEzMlAvZFllV1RT\nd0s0MVd5VHhhbE4xZVJtQTVaOVVVL0xYOUQ3RldTbVY5U0FZeDZnPT0iXSwK\nCiAgICAiZXhlY2EiOiBbImV4ZWNhQDUuMS4xIiwgIiIsIHsgImRlcGVuZGVu\nY2llcyI6IHsgImNyb3NzLXNwYXduIjogIl43LjAuMyIsICJnZXQtc3RyZWFt\nIjogIl42LjAuMCIsICJodW1hbi1zaWduYWxzIjogIl4yLjEuMCIsICJpcy1z\ndHJlYW0iOiAiXjIuMC4wIiwgIm1lcmdlLXN0cmVhbSI6ICJeMi4wLjAiLCAi\nbnBtLXJ1bi1wYXRoIjogIl40LjAuMSIsICJvbmV0aW1lIjogIl41LjEuMiIs\nICJzaWduYWwtZXhpdCI6ICJeMy4wLjMiLCAic3RyaXAtZmluYWwtbmV3bGlu\nZSI6ICJeMi4wLjAiIH0gfSwgInNoYTUxMi04dVNwWlpvY0FaUkJBUElFSU5K\najNMbzlIeUdpdGxsY3pjMjdFaDVZWW9qak1GTW44eUhNRE1hVUhFMkpxZnEw\nNUQvd3Vjd0k0SkdVUnlYdDF2Y2h5Zz09Il0sCgogICAgImV4aXQiOiBbImV4\naXRAMC4xLjIiLCAiIiwge30sICJzaGE1MTItWmsvZU5LVjJ6YmpwS3pyc1Er\nbjFHNnBvVmJFclF4SjBMQk9KWGFLWjFFVmlMekgraHJMdTljZFhJNHp3OWRC\nUUpzbHdCRXBiUTJQMW9TN25EeHM2alE9PSJdLAoKICAgICJleHBlY3QiOiBb\nImV4cGVjdEAyOS43LjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiQGpl\nc3QvZXhwZWN0LXV0aWxzIjogIl4yOS43LjAiLCAiamVzdC1nZXQtdHlwZSI6\nICJeMjkuNi4zIiwgImplc3QtbWF0Y2hlci11dGlscyI6ICJeMjkuNy4wIiwg\nImplc3QtbWVzc2FnZS11dGlsIjogIl4yOS43LjAiLCAiamVzdC11dGlsIjog\nIl4yOS43LjAiIH0gfSwgInNoYTUxMi0yWmtzMGhmMVZMRllJMWtiaDBJNWpQ\nM0tISHlDSHBrZnlIQnpzU1hSRmdsL0JnOW1XWWZNVzhvRCtQZE1QbEV3eTVI\nTnNSOUp1dFl5NnBNZU9oNjFudz09Il0sCgogICAgImZhc3QtZGVlcC1lcXVh\nbCI6IFsiZmFzdC1kZWVwLWVxdWFsQDMuMS4zIiwgIiIsIHt9LCAic2hhNTEy\nLWYzcVE5b1F5OWoyQWhCZS9IOVZDOTF3TG1LQkNDVS9nRE9uS05BWUc1aHN3\nTzdCTEtqMDlIYzVIWU56OWNHSSsreGxwRENJZ0RhaXRWczAzQVRSODRRPT0i\nXSwKCiAgICAiZmFzdC1nbG9iIjogWyJmYXN0LWdsb2JAMy4zLjIiLCAiIiwg\neyAiZGVwZW5kZW5jaWVzIjogeyAiQG5vZGVsaWIvZnMuc3RhdCI6ICJeMi4w\nLjIiLCAiQG5vZGVsaWIvZnMud2FsayI6ICJeMS4yLjMiLCAiZ2xvYi1wYXJl\nbnQiOiAiXjUuMS4yIiwgIm1lcmdlMiI6ICJeMS4zLjAiLCAibWljcm9tYXRj\naCI6ICJeNC4wLjQiIH0gfSwgInNoYTUxMi1vWDJydUFGUXdmL09yajhtNzM3\nWTVhZHhEUU8wTEFCNy9TNU1ueENkVE5EZDRwNkJzeUlWc3Y5SlFzQVRiVFNx\nOEtIUnBMd0lIYlZsVU5hdHhkKzFPdz09Il0sCgogICAgImZhc3QtanNvbi1z\ndGFibGUtc3RyaW5naWZ5IjogWyJmYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lm\neUAyLjEuMCIsICIiLCB7fSwgInNoYTUxMi1saGQvd0YrTGs5OEhab1RDdGxW\ncmFIdGZoNVhZaWpJamFsWGNrN3NhVXR1YW5TRHlMTXhuSGhTWEVESnFIeEQ3\nbXNSOEQwdUNtcWxrd2pDVjh4dndIdz09Il0sCgogICAgImZhc3QtbGV2ZW5z\naHRlaW4iOiBbImZhc3QtbGV2ZW5zaHRlaW5AMi4wLjYiLCAiIiwge30sICJz\naGE1MTItRENYdTZJZmhxY2tzN1RaS1kzSHhwM3k2cXBoWTVTSlptcldNRHJL\nY0VSU09YV1FkTWhVOUlnL1BZcnp5dy91bDlqT0l5aDBONE0wdGJDNWhvZGc4\nZHc9PSJdLAoKICAgICJmYXN0cSI6IFsiZmFzdHFAMS4xNy4xIiwgIiIsIHsg\nImRlcGVuZGVuY2llcyI6IHsgInJldXNpZnkiOiAiXjEuMC40IiB9IH0sICJz\naGE1MTItc1JWRDNsV1ZJWFdnNkJ5NjhaTjd2aG85YTFwUWNOL1dCRmFBQXNE\nREZ6bEpqdm9HeDBQOHo3VjF0NzJnckZKZkpodTNZUFpCdXUyNWY3S2F3MmpO\nMXc9PSJdLAoKICAgICJmYi13YXRjaG1hbiI6IFsiZmItd2F0Y2htYW5AMi4w\nLjIiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiYnNlciI6ICIyLjEuMSIg\nfSB9LCAic2hhNTEyLXA1MTYxQnFidUNhU25COGpJYnpRSE9scGdzUG1LNXJK\nVkRmREtPOTFBeHM1TkMxdXUzSFJRbTZ3dDljZDkvK0d0UVFJTzUzSmRHWFhv\neURwVEFzZ1lBPT0iXSwKCiAgICAiZmlsZS1lbnRyeS1jYWNoZSI6IFsiZmls\nZS1lbnRyeS1jYWNoZUA4LjAuMCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7\nICJmbGF0LWNhY2hlIjogIl40LjAuMCIgfSB9LCAic2hhNTEyLVhYVFV3Q3Zp\nc2E1b2FjTkdSUDlTZk50WUJOQU1pK1JQd0JGbWJsWkVGN043c3dIWVFTNi9a\nZms3U1J3eDRENWozQ0gyMTFZTlJjbzFERU1OVmZaQ25RPT0iXSwKCiAgICAi\nZmlsZWxpc3QiOiBbImZpbGVsaXN0QDEuMC40IiwgIiIsIHsgImRlcGVuZGVu\nY2llcyI6IHsgIm1pbmltYXRjaCI6ICJeNS4wLjEiIH0gfSwgInNoYTUxMi13\nMWNFdWYzUytEckxDUUw3RVQ2a3orZ21sSmRicTlKN3lYQ1NqSy9PWkNQQStx\nRU4xV3lGNFpBZjBZWUphNC9zaEhKcmEydC9kL3I4U1Y0SmkreCs4UT09Il0s\nCgogICAgImZpbGwtcmFuZ2UiOiBbImZpbGwtcmFuZ2VANy4xLjEiLCAiIiwg\neyAiZGVwZW5kZW5jaWVzIjogeyAidG8tcmVnZXgtcmFuZ2UiOiAiXjUuMC4x\nIiB9IH0sICJzaGE1MTItWXNHcGUzV0hMSzhaWWk0dFdEZzJKeTNlYlJ6MnJY\nb3dEeG5sZDRia1FCMDBjYy8xWnc5QVduQzBpOXp0REppdGl2dFF2YUk5S2FM\neUtyYytoQlcweWc9PSJdLAoKICAgICJmaW5kLXVwIjogWyJmaW5kLXVwQDUu\nMC4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgImxvY2F0ZS1wYXRoIjog\nIl42LjAuMCIsICJwYXRoLWV4aXN0cyI6ICJeNC4wLjAiIH0gfSwgInNoYTUx\nMi03OC9QWFQxd2xMTERnVHpEczdzanE5aHp6MHZYRCt6bis3d3lwRWU0ZlhR\neENtZG1xZkdzRVBReG1pQ1NRSTNhakZWOTFiVlNzdk50ckpSaVc2bkduZz09\nIl0sCgogICAgImZsYXQtY2FjaGUiOiBbImZsYXQtY2FjaGVANC4wLjEiLCAi\nIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiZmxhdHRlZCI6ICJeMy4yLjkiLCAi\na2V5diI6ICJeNC41LjQiIH0gfSwgInNoYTUxMi1mN2NjRlBLM1NYRkhweDE1\nVUlHeVJKL0ZKUWN0dUtaMHpWdU4zZnJCbzRIbkszY2F5OVZFVzBSNnlQWUZI\nQzBBZ3FodWtQektqcTIydDVEbUF5cUd5dz09Il0sCgogICAgImZsYXR0ZWQi\nOiBbImZsYXR0ZWRAMy4zLjIiLCAiIiwge30sICJzaGE1MTItQWl3R0pNOFlj\nTk9hb2J1bWd0bmcrNk5IdU9xQzNBN01peEZlRGFmTTNYOWNJVU0reFVYb1M1\nVmZnZitPaWhBWWUyMGZ4cU5NOXlQQlhKelJ0Wi80ZUE9PSJdLAoKICAgICJm\nb3JtLWRhdGEiOiBbImZvcm0tZGF0YUA0LjAuMSIsICIiLCB7ICJkZXBlbmRl\nbmNpZXMiOiB7ICJhc3luY2tpdCI6ICJeMC40LjAiLCAiY29tYmluZWQtc3Ry\nZWFtIjogIl4xLjAuOCIsICJtaW1lLXR5cGVzIjogIl4yLjEuMTIiIH0gfSwg\nInNoYTUxMi10ek44ZTRUWDgra2t4R1BLOEQ1dTBGTm1qUFVqdzNsd0M5bFNM\neHhvQi8rR3RzSkc5MUNPOGJTV3k3M0FQbGdBWnpaYlhFWVpKdXhqa0hIMncr\nRXpodz09Il0sCgogICAgImZzLnJlYWxwYXRoIjogWyJmcy5yZWFscGF0aEAx\nLjAuMCIsICIiLCB7fSwgInNoYTUxMi1PTzBwSDJsSzZhMGhabkFkYXU1SXR6\nSFBJNnBVbHZJN2pNVm54VVFSdHc0b3dGMndrOGxPU2FidEdEQ1RQNEdncmcy\nTWJHbldPOVg4SzF0NCtmR01Edz09Il0sCgogICAgImZzZXZlbnRzIjogWyJm\nc2V2ZW50c0AyLjMuMyIsICIiLCB7ICJvcyI6ICJkYXJ3aW4iIH0sICJzaGE1\nMTItNXhvRGZYK2ZMN2ZhQVRuYWdtV1BwYkZ0d2gvUjc3V21NTXFxSEdTNjVD\nM3Z2QjBZSHJnRitCMVltWjM0NDF0TWo1bjYzazAyMTJYTm9Kd3psaGZmUXc9\nPSJdLAoKICAgICJmdW5jdGlvbi1iaW5kIjogWyJmdW5jdGlvbi1iaW5kQDEu\nMS4yIiwgIiIsIHt9LCAic2hhNTEyLTdYSE54SDdxWDl4RzVtSXd4a2h1bVRv\neC9NSVJOY09nRHJ4V3NNdDJwQXIyM1dIcDZNclJsTjdGQlNGcENwcitvVk8w\nRjc0NGlVZ1I4Mm5KTWZHMlNBPT0iXSwKCiAgICAiZ2Vuc3luYyI6IFsiZ2Vu\nc3luY0AxLjAuMC1iZXRhLjIiLCAiIiwge30sICJzaGE1MTItM2hON05hc2tZ\ndk1ETFFZNTVnblczTlErbWVzRUFlcFRxbGcrVkViajd6enFFTUJWTmh6Y0dZ\nWWVxRm8vVGxZejZlUWlGY3AxSGNzQ1pPK25HZ1M4emc9PSJdLAoKICAgICJn\nZXQtY2FsbGVyLWZpbGUiOiBbImdldC1jYWxsZXItZmlsZUAyLjAuNSIsICIi\nLCB7fSwgInNoYTUxMi1EeUZQM0JNLzNZSFRRT0NVTC93ME9aSFIwbHBLZUdy\neG90Y0hXY3FORWRubHRxRndYVmZoRUJROTRlSW8zNEFmUXBvMHJHa2k0Y3lJ\naWZ0WTA2aDJGZz09Il0sCgogICAgImdldC1wYWNrYWdlLXR5cGUiOiBbImdl\ndC1wYWNrYWdlLXR5cGVAMC4xLjAiLCAiIiwge30sICJzaGE1MTItcGp6dUt0\nWTY0R1lmV2l6TkFKMGZyOVZxdHRaa05pSzJpUzQzMEx0SUh6akJFcjZiWDhB\nbTJ6bTRzVzRSbzV3aldXNWNBbFJMMXFBTVRjWGJqTkFPMlE9PSJdLAoKICAg\nICJnZXQtc3RyZWFtIjogWyJnZXQtc3RyZWFtQDYuMC4xIiwgIiIsIHt9LCAi\nc2hhNTEyLXRzNldpKzJqM2pRanFpNzB3NUFsTjhERm5rU3dDK01xbXhFemRF\nQUxCMnFYWllWM1gvYjFDVGZnUExHSk5NZUFXeGRQZlU4Rk8xbXMzTlVmYUhD\nUFlnPT0iXSwKCiAgICAiZ2xvYiI6IFsiZ2xvYkA3LjIuMyIsICIiLCB7ICJk\nZXBlbmRlbmNpZXMiOiB7ICJmcy5yZWFscGF0aCI6ICJeMS4wLjAiLCAiaW5m\nbGlnaHQiOiAiXjEuMC40IiwgImluaGVyaXRzIjogIjIiLCAibWluaW1hdGNo\nIjogIl4zLjEuMSIsICJvbmNlIjogIl4xLjMuMCIsICJwYXRoLWlzLWFic29s\ndXRlIjogIl4xLjAuMCIgfSB9LCAic2hhNTEyLW5GUjB6THBVMllDYVJ4d29D\nSnZMNlV2Q0gySkZ5RlZJdndUTHNJZjIxQXVIbE1za0ExaGhUZGsrTGxZSnRP\nbFl0OXY2ZHZzekQyQkdScUJMK2lRSzlRPT0iXSwKCiAgICAiZ2xvYi1wYXJl\nbnQiOiBbImdsb2ItcGFyZW50QDYuMC4yIiwgIiIsIHsgImRlcGVuZGVuY2ll\ncyI6IHsgImlzLWdsb2IiOiAiXjQuMC4zIiB9IH0sICJzaGE1MTItWHh3SThF\nT2hWUWdXcDZpREwrM2Iwcjg2ZjRkNkFYNnpTVTU1SGZCNHlkQ0V1WExYYzVG\nY1llT3Urbm5HZnRTNFRFanUvMTFydDRLSlBUTWdiZm12NEE9PSJdLAoKICAg\nICJnbG9iYWxzIjogWyJnbG9iYWxzQDE0LjAuMCIsICIiLCB7fSwgInNoYTUx\nMi1vYWhHdnVNR1FsUHcvaXZJWUJqVlNyV0FmV0xCZWt1NXRwUEUyZk9QTGkr\nV0hmZklXYnVoMnRDamh5UWhUQlBNZjVFOWpERUg0Rk9tVFlnWXdiS3d0UT09\nIl0sCgogICAgImdyYWNlZnVsLWZzIjogWyJncmFjZWZ1bC1mc0A0LjIuMTEi\nLCAiIiwge30sICJzaGE1MTItUmJKNS9qbUZjTk5DY0RWNW85ZVRuQkxKL0hz\neldWMFA3M2JjK0ZmNG5TL3JKaitZYVM2SUd5aU9MMFZvQllYK2wxV3JsM2s2\nM2gvS3JIK25oSjBYdlE9PSJdLAoKICAgICJncmFwaGVtZXIiOiBbImdyYXBo\nZW1lckAxLjQuMCIsICIiLCB7fSwgInNoYTUxMi1FdEt3b082a3hDTDlXTzV4\naXBpSFRabFN6Qm03V0xUNjI3VHFDL3VWUmQwSEttcThOWHllYm5OWXhEb0Jp\nN3d0OGVUV3JVcktYQ09WYUZxOXgxa2dhZz09Il0sCgogICAgImhhcHB5LWRv\nbSI6IFsiaGFwcHktZG9tQDE1LjExLjciLCAiIiwgeyAiZGVwZW5kZW5jaWVz\nIjogeyAiZW50aXRpZXMiOiAiXjQuNS4wIiwgIndlYmlkbC1jb252ZXJzaW9u\ncyI6ICJeNy4wLjAiLCAid2hhdHdnLW1pbWV0eXBlIjogIl4zLjAuMCIgfSB9\nLCAic2hhNTEyLUt5ckZ2bmwrSjlVUzYzVEV6d29pSk9RelpCSlk3S2dCdXNo\nSkE4WDYxRE1iTnNIKzJPTmtEdUxEbkNud1VpUFRGNDJ0TG9FbXJQeW9xYmVu\nVkE1enJnPT0iXSwKCiAgICAiaGFzLWZsYWciOiBbImhhcy1mbGFnQDQuMC4w\nIiwgIiIsIHt9LCAic2hhNTEyLUV5a0pUL1ExS2pUV2N0cHBnSUFnZlNPMHRL\nVnVaVWpoZ01yMTdrcVR1bU1sNkFmdjNFSVNsZVU3cVpVem9YREZUQUhUREM0\nTk9vRy9aeFUzRXZsTVBRPT0iXSwKCiAgICAiaGFzb3duIjogWyJoYXNvd25A\nMi4wLjIiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiZnVuY3Rpb24tYmlu\nZCI6ICJeMS4xLjIiIH0gfSwgInNoYTUxMi0waEpVOVNDUHZtTXpJQmRaRnFO\nUFhXYTZkcWg3V2RIMGNJSTl5K0N5UzhyRzNuTDQ4QmNscmE5SG1LaFZWVUh5\nUFdOSDVZN3hEd0FCN2JmZ1Nqa1VNUT09Il0sCgogICAgImh0bWwtZW5jb2Rp\nbmctc25pZmZlciI6IFsiaHRtbC1lbmNvZGluZy1zbmlmZmVyQDMuMC4wIiwg\nIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIndoYXR3Zy1lbmNvZGluZyI6ICJe\nMi4wLjAiIH0gfSwgInNoYTUxMi1vV3Y0VDR5SjUyaUtydWZqbnlaUGtyTjBD\nSDNRbnJVcWRCNkluMWc1RmUxbWlhOEdtRjM2Z25mTnlTeG9adHhENStObVl3\nMUVFbFZYaUJrOTNVZXNrQT09Il0sCgogICAgImh0bWwtZXNjYXBlciI6IFsi\naHRtbC1lc2NhcGVyQDIuMC4yIiwgIiIsIHt9LCAic2hhNTEyLUgyaU10ZDBJ\nNE10NWVZaWFwUmRJRGpwK1h6ZWxYUTB0RkU0SlM3WUZ3RmV2WFhNbU9wOW15\nTnJVdkNnMEQ2d3M4aXFrUlBCZktIZ2J3aWcxU21sTGZnPT0iXSwKCiAgICAi\naHR0cC1wcm94eS1hZ2VudCI6IFsiaHR0cC1wcm94eS1hZ2VudEA1LjAuMCIs\nICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJAdG9vdGFsbG5hdGUvb25jZSI6\nICIyIiwgImFnZW50LWJhc2UiOiAiNiIsICJkZWJ1ZyI6ICI0IiB9IH0sICJz\naGE1MTItbjJoWThZZG9SRTFpN3I2TTB3OURJdzVHZ1pOMEcyNVA4ekxDUlE4\ncmpYdFRVM3ZzTkZCSS92V0svVUllRTZnNU1VVXo2YXZ3QVBYbUw2Rnk5RC85\nMHc9PSJdLAoKICAgICJodHRwcy1wcm94eS1hZ2VudCI6IFsiaHR0cHMtcHJv\neHktYWdlbnRANS4wLjEiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiYWdl\nbnQtYmFzZSI6ICI2IiwgImRlYnVnIjogIjQiIH0gfSwgInNoYTUxMi1kRmNB\nanBUUUZnb0xNekMyVndVK0MvQ2JTN3VSTDBsV214RElUbXFtN0MrN0YwT2Rt\najZzOWw2YWxaYzZBRUxYaHJuZ2dNMkNlV1NYSEdPZFgyWXR3QT09Il0sCgog\nICAgImh1bWFuLXNpZ25hbHMiOiBbImh1bWFuLXNpZ25hbHNAMi4xLjAiLCAi\nIiwge30sICJzaGE1MTItQjRGRlo2cS9UMmpoaGtzZ2tiRVczSEJ2V0lmRFc4\nNXNua1FnYXd0MDdTN0o1UVhUazZCa05WKzB5QWVack01UXBNQWRZbG9jR29s\nam4wc0ovV1FrRnc9PSJdLAoKICAgICJodW1wcyI6IFsiaHVtcHNAMi4wLjEi\nLCAiIiwge30sICJzaGE1MTItRTBlSWJyRldVaHdmWEptc2JkalJRRlFQcmw1\ncFRFb0tsejE2M2oxbVRxcVVuVTlQZ1I0QWdCOEFJSVR6dUIzdkxCZHhaWHla\nOVRESXJ3QjJPQVN6NGc9PSJdLAoKICAgICJpY29udi1saXRlIjogWyJpY29u\ndi1saXRlQDAuNi4zIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgInNhZmVy\nLWJ1ZmZlciI6ICI+PSAyLjEuMiA8IDMuMC4wIiB9IH0sICJzaGE1MTItNGZD\nazc5d3NoTWR6TXAyckgwNnFXckpFNGlvbHFMaENVSCtPaXVJZ1UrK1JCMCs5\nNE5sREw4MWF0TzdHWDU1dVVLdWVvMHR4SE50dkV5STZEN1dkTXc9PSJdLAoK\nICAgICJpZ25vcmUiOiBbImlnbm9yZUA1LjMuMiIsICIiLCB7fSwgInNoYTUx\nMi1oc0JUTlVxUVREd2tXdGNkWUkyaTA2WS9uVUJFc05FREpLaldkaWdMdmVn\neThrRHVKQVM4dVJscGtrY1FweUVYTDBaL3BqRHk1SEJtTWpSQ0oyZ3ErZz09\nIl0sCgogICAgImltcG9ydC1mcmVzaCI6IFsiaW1wb3J0LWZyZXNoQDMuMy4w\nIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgInBhcmVudC1tb2R1bGUiOiAi\nXjEuMC4wIiwgInJlc29sdmUtZnJvbSI6ICJeNC4wLjAiIH0gfSwgInNoYTUx\nMi12ZVlZaFFhK0QxUUJLem52aFVIeGI4ZmF4bHJ3VW54c2VEQWJBcDQ1N0Uw\nd0xOaW8yYk9TS25qWURoTWorWWlBcTYxeHJNR2hRazlpWFZrNUZ6Z1FNdz09\nIl0sCgogICAgImltcG9ydC1sb2NhbCI6IFsiaW1wb3J0LWxvY2FsQDMuMi4w\nIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgInBrZy1kaXIiOiAiXjQuMi4w\nIiwgInJlc29sdmUtY3dkIjogIl4zLjAuMCIgfSwgImJpbiI6IHsgImltcG9y\ndC1sb2NhbC1maXh0dXJlIjogImZpeHR1cmVzL2NsaS5qcyIgfSB9LCAic2hh\nNTEyLTJTUGx1bjFKVVBXb002dDNGMGR3MEZrQ0YvaldZOGt0dGNZNGY1OTlH\nTFRTamgyT0N1dWhkVGtKUXNFY1p6QnFiWFpHS01LMk9xVzFvWnNqdGYvZ1FB\nPT0iXSwKCiAgICAiaW11cm11cmhhc2giOiBbImltdXJtdXJoYXNoQDAuMS40\nIiwgIiIsIHt9LCAic2hhNTEyLUptWE1aNnd1dkRtTGlIRW1sOXlrenFPNmx3\nRmJvZjBHRzRJa2NHYUVOZENSRERtTVZubnk3czVIc0lnSENiYXEwdzJNeVBo\nRHFraFRVZ1MyTFUyUEhBPT0iXSwKCiAgICAiaW5mbGlnaHQiOiBbImluZmxp\nZ2h0QDEuMC42IiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIm9uY2UiOiAi\nXjEuMy4wIiwgIndyYXBweSI6ICIxIiB9IH0sICJzaGE1MTItazkySS9iMDhx\nNHd2RnNjWENMdnFmc0hDcmpyRjd5aVhzUXVJVnZWRTdOODJXMythcXB6dVVk\nQmJmaFdjeS9GWlIzLzRJZ2ZsTWdLTE9zdlBEckdDSkE9PSJdLAoKICAgICJp\nbmhlcml0cyI6IFsiaW5oZXJpdHNAMi4wLjQiLCAiIiwge30sICJzaGE1MTIt\nay92R2FYNC9ZbGEzV3p5TUN2VFFPWFllSUh2cU9LdG5xQmR1elRIcHpwUVp6\nQXNrS01oWjJLK0VuQmlTTTl6R1NvSUZlTXBYS3hhNGRZZVpJUXFld1E9PSJd\nLAoKICAgICJpcy1hcnJheWlzaCI6IFsiaXMtYXJyYXlpc2hAMC4yLjEiLCAi\nIiwge30sICJzaGE1MTItenowNlM4dDBvem9EWE1HK3ViZTI2emVDVE5YY0tJ\nUEpaSmk4aEJyRjRpZENMbXM0Q0c5UXRLN3FCbDFib2k1T0R6RnBqc3diNUpQ\nbUhDYk1wamFZemc9PSJdLAoKICAgICJpcy1jb3JlLW1vZHVsZSI6IFsiaXMt\nY29yZS1tb2R1bGVAMi4xNi4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsg\nImhhc293biI6ICJeMi4wLjIiIH0gfSwgInNoYTUxMi11clRTSU5ZZkFZZ2Ni\nTGIweURRNmVnRm02aDNNbzFEY0Y5RWt5WFNSamp6ZEhic3VsZzAxcWh3V3VY\nZE9vVUJ1VGtiUTgwS0Rib1hhMHZGSitCREgrZz09Il0sCgogICAgImlzLWV4\ndGdsb2IiOiBbImlzLWV4dGdsb2JAMi4xLjEiLCAiIiwge30sICJzaGE1MTIt\nU2JLYkFOa042MDNWaTRqRVp2NDlMZVZKTW40eUd3c2J6WndvckVveUVpdXRz\nTjNuSllkYk8zNnpmaEdKNlFFRHBPWklGa0R0bnE1SlJ4bXZsM2pzb1E9PSJd\nLAoKICAgICJpcy1mdWxsd2lkdGgtY29kZS1wb2ludCI6IFsiaXMtZnVsbHdp\nZHRoLWNvZGUtcG9pbnRAMy4wLjAiLCAiIiwge30sICJzaGE1MTItenltbTUr\ndStzQ3NTV3lEOXFOYWVqVjNERnZoQ0tjbEtkaXpZYUpVdUhBODNSTGpiN25T\ndUduZGRDSEd2MGhrK0tZN0JNQWxzV2VLNFVlZzZFVjZYUWc9PSJdLAoKICAg\nICJpcy1nZW5lcmF0b3ItZm4iOiBbImlzLWdlbmVyYXRvci1mbkAyLjEuMCIs\nICIiLCB7fSwgInNoYTUxMi1jVElCNHlQWUwvR3J3MEVhU3pBU3pnNmJCeTln\ncUNvZnZXTjhva1RoQVlJeEtKWkMrdWRsUkFtR2JNMFhMZW5pRUpTczh1RWdI\nUEd1SFNlMVhzT0xTUT09Il0sCgogICAgImlzLWdsb2IiOiBbImlzLWdsb2JA\nNC4wLjMiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiaXMtZXh0Z2xvYiI6\nICJeMi4xLjEiIH0gfSwgInNoYTUxMi14ZWxTYXlISDM2WmdFN1pXaGxpN3BX\nMzRoTmJObDhPanY1S1Zta0pENGhCZEQzdGg4VGZrOXZZYXNMTSttWFdPWmhG\na2daZnhoTFNucndScjRlbFNTZz09Il0sCgogICAgImlzLW51bWJlciI6IFsi\naXMtbnVtYmVyQDcuMC4wIiwgIiIsIHt9LCAic2hhNTEyLTQxQ2lma2c2ZThU\neWxTcGR0VHBlTFZNcXZTQkVWelR0dEh2RVJENzQxK3BuWjhBTnYwMDA0TVJM\nNDNRS1BEbEs5Y0d2TnA2TlpXWlVCbGJHWFl4eG5nPT0iXSwKCiAgICAiaXMt\ncG90ZW50aWFsLWN1c3RvbS1lbGVtZW50LW5hbWUiOiBbImlzLXBvdGVudGlh\nbC1jdXN0b20tZWxlbWVudC1uYW1lQDEuMC4xIiwgIiIsIHt9LCAic2hhNTEy\nLWJDWWVSQTJyVmliS1pkK3MyNjI1Z0duR0YvdDdEU3FEczRkUDdDckxBMW03\naktXejZwcHMwTHBZTEpOOFE2NEh0bVBLSjFock4zbnpQTktGRUtPVWlRPT0i\nXSwKCiAgICAiaXMtc3RyZWFtIjogWyJpcy1zdHJlYW1AMi4wLjEiLCAiIiwg\ne30sICJzaGE1MTItaEZvaUppVGw2M25uK2tzdEhHQnRld1dTS25RTHB5YjE1\nNUtIaGVBMWwzOXV2dE85bldJb3AxcDN1ZHFQY1VkL3hiRjFWTE1PNG43T0k2\ncDdSYm5nRGc9PSJdLAoKICAgICJpc2V4ZSI6IFsiaXNleGVAMi4wLjAiLCAi\nIiwge30sICJzaGE1MTItUkh4TUxwOWxuS0hHSFJuZzlRRmhSQ01iWUFjVnBu\nNjlzbVNHY3EzZjM2eGpnVlZXVGhqNHFxTGJUTGxxN1NzajhCK2ZJUTFFdUNF\nR0kybEtzeVFlSXc9PSJdLAoKICAgICJpc3RhbmJ1bC1saWItY292ZXJhZ2Ui\nOiBbImlzdGFuYnVsLWxpYi1jb3ZlcmFnZUAzLjIuMiIsICIiLCB7fSwgInNo\nYTUxMi1POGRwc0YrcjBXVi84TU5SS2ZubXJ0Q1dodUtqeHJxMncranB6Qkw1\nVVpLVGkyTGVWV25XT21XUnhGbGVzSk9ObWMrd0xBR3ZLUVpFT2Fua28wTEZU\nZz09Il0sCgogICAgImlzdGFuYnVsLWxpYi1pbnN0cnVtZW50IjogWyJpc3Rh\nbmJ1bC1saWItaW5zdHJ1bWVudEA2LjAuMyIsICIiLCB7ICJkZXBlbmRlbmNp\nZXMiOiB7ICJAYmFiZWwvY29yZSI6ICJeNy4yMy45IiwgIkBiYWJlbC9wYXJz\nZXIiOiAiXjcuMjMuOSIsICJAaXN0YW5idWxqcy9zY2hlbWEiOiAiXjAuMS4z\nIiwgImlzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMy4yLjAiLCAic2VtdmVy\nIjogIl43LjUuNCIgfSB9LCAic2hhNTEyLVZ0Z2s3TC9SMkpIeXlHVzA3c3Bv\nRmxCOC9scGppT0xUak1kbXM2QUZNcmFZdDNCYUphdW9kL05HcmZuVkcveTRJ\neDFKRXVNUlBEUEVqMnVhK3p6MS9RPT0iXSwKCiAgICAiaXN0YW5idWwtbGli\nLXJlcG9ydCI6IFsiaXN0YW5idWwtbGliLXJlcG9ydEAzLjAuMSIsICIiLCB7\nICJkZXBlbmRlbmNpZXMiOiB7ICJpc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAi\nXjMuMC4wIiwgIm1ha2UtZGlyIjogIl40LjAuMCIsICJzdXBwb3J0cy1jb2xv\nciI6ICJeNy4xLjAiIH0gfSwgInNoYTUxMi1HQ2ZFMW10c0hHT0VMQ1U4ZS9a\nN1lXenBteWJyeC8rZFNUZkxydlk4cVJtYVk2elhUS1duNldRSWphQUZ3MDY5\naWNtNkdWTU5rZ3UwTnpJNGlQWlVOdz09Il0sCgogICAgImlzdGFuYnVsLWxp\nYi1zb3VyY2UtbWFwcyI6IFsiaXN0YW5idWwtbGliLXNvdXJjZS1tYXBzQDQu\nMC4xIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgImRlYnVnIjogIl40LjEu\nMSIsICJpc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjMuMC4wIiwgInNvdXJj\nZS1tYXAiOiAiXjAuNi4xIiB9IH0sICJzaGE1MTItbjNzOEV3a2RGSUpDRzNC\nUEtCWXZza2dYR295ODhBUnp2ZWdraXRrNjBOeFJkd2x0TE9UYUg3Q1VpTVJY\ndndZb3JsMFE3MTJpRWpjV0IrZksvTXJXVnc9PSJdLAoKICAgICJpc3RhbmJ1\nbC1yZXBvcnRzIjogWyJpc3RhbmJ1bC1yZXBvcnRzQDMuMS43IiwgIiIsIHsg\nImRlcGVuZGVuY2llcyI6IHsgImh0bWwtZXNjYXBlciI6ICJeMi4wLjAiLCAi\naXN0YW5idWwtbGliLXJlcG9ydCI6ICJeMy4wLjAiIH0gfSwgInNoYTUxMi1C\nZXdtVVhJbWV1UmsyWVkwUFZieGdLQXlzdmhSUFVRRTBoNVFSTSsrblZXeXVi\nS0dWMGw4cVE1b3A4K0IyRE9td1NlNjNKaXZqMEJqa1BRVmY4ZlA1Zz09Il0s\nCgogICAgImpha2UiOiBbImpha2VAMTAuOS4yIiwgIiIsIHsgImRlcGVuZGVu\nY2llcyI6IHsgImFzeW5jIjogIl4zLjIuMyIsICJjaGFsayI6ICJeNC4wLjIi\nLCAiZmlsZWxpc3QiOiAiXjEuMC40IiwgIm1pbmltYXRjaCI6ICJeMy4xLjIi\nIH0sICJiaW4iOiB7ICJqYWtlIjogImJpbi9jbGkuanMiIH0gfSwgInNoYTUx\nMi0yUDRTUTBIckxRK2Z3NmxscExuT2FHQXZOMlp1Njc3OFNKTXJDVXduczRm\nT29HOWF5clRpWmszVlY4c0NQa1ZaRjhhYjB6a3NWcFM4RkRZNXBSQ05CQT09\nIl0sCgogICAgImplc3QiOiBbImplc3RAMjkuNy4wIiwgIiIsIHsgImRlcGVu\nZGVuY2llcyI6IHsgIkBqZXN0L2NvcmUiOiAiXjI5LjcuMCIsICJAamVzdC90\neXBlcyI6ICJeMjkuNi4zIiwgImltcG9ydC1sb2NhbCI6ICJeMy4wLjIiLCAi\namVzdC1jbGkiOiAiXjI5LjcuMCIgfSwgInBlZXJEZXBlbmRlbmNpZXMiOiB7\nICJub2RlLW5vdGlmaWVyIjogIl44LjAuMSB8fCBeOS4wLjAgfHwgXjEwLjAu\nMCIgfSwgIm9wdGlvbmFsUGVlcnMiOiBbIm5vZGUtbm90aWZpZXIiXSwgImJp\nbiI6IHsgImplc3QiOiAiYmluL2plc3QuanMiIH0gfSwgInNoYTUxMi1OSXkz\nb0FGcDlzaGRhMTloeTRISzBIUlRXS3RQSm1HZG52eXd1MDFuT3FOQzJ2Wmcr\nWitmdkpEeHBNUUE4OGViMkk5RWNhZmNkallnc0R0aG5ZVHZHdz09Il0sCgog\nICAgImplc3QtY2hhbmdlZC1maWxlcyI6IFsiamVzdC1jaGFuZ2VkLWZpbGVz\nQDI5LjcuMCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJleGVjYSI6ICJe\nNS4wLjAiLCAiamVzdC11dGlsIjogIl4yOS43LjAiLCAicC1saW1pdCI6ICJe\nMy4xLjAiIH0gfSwgInNoYTUxMi1mRUFyRml3ZjFCcFErNGJYU3ByY0RjMy94\nNEhTekw0YWwydG96d1ZwREZwc3hBTGpMWWR5aUlLNGU1Vno2NkdRSkliWEo4\nMiszNVB0eXNvZnB0Tlgydz09Il0sCgogICAgImplc3QtY2lyY3VzIjogWyJq\nZXN0LWNpcmN1c0AyOS43LjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAi\nQGplc3QvZW52aXJvbm1lbnQiOiAiXjI5LjcuMCIsICJAamVzdC9leHBlY3Qi\nOiAiXjI5LjcuMCIsICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjkuNy4wIiwg\nIkBqZXN0L3R5cGVzIjogIl4yOS42LjMiLCAiQHR5cGVzL25vZGUiOiAiKiIs\nICJjaGFsayI6ICJeNC4wLjAiLCAiY28iOiAiXjQuNi4wIiwgImRlZGVudCI6\nICJeMS4wLjAiLCAiaXMtZ2VuZXJhdG9yLWZuIjogIl4yLjAuMCIsICJqZXN0\nLWVhY2giOiAiXjI5LjcuMCIsICJqZXN0LW1hdGNoZXItdXRpbHMiOiAiXjI5\nLjcuMCIsICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICJeMjkuNy4wIiwgImplc3Qt\ncnVudGltZSI6ICJeMjkuNy4wIiwgImplc3Qtc25hcHNob3QiOiAiXjI5Ljcu\nMCIsICJqZXN0LXV0aWwiOiAiXjI5LjcuMCIsICJwLWxpbWl0IjogIl4zLjEu\nMCIsICJwcmV0dHktZm9ybWF0IjogIl4yOS43LjAiLCAicHVyZS1yYW5kIjog\nIl42LjAuMCIsICJzbGFzaCI6ICJeMy4wLjAiLCAic3RhY2stdXRpbHMiOiAi\nXjIuMC4zIiB9IH0sICJzaGE1MTItM0UxbkNNZ2lwY1RrQ29jRndNOTBYWFFh\nYjliUytHTXNqZHBtUHJsZWxheHdEOTNBZDhpVkVqWC92dkhQZExQbkZmK0w0\nMHUrNStpdXRSZEExTjlteXc9PSJdLAoKICAgICJqZXN0LWNsaSI6IFsiamVz\ndC1jbGlAMjkuNy4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIkBqZXN0\nL2NvcmUiOiAiXjI5LjcuMCIsICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjku\nNy4wIiwgIkBqZXN0L3R5cGVzIjogIl4yOS42LjMiLCAiY2hhbGsiOiAiXjQu\nMC4wIiwgImNyZWF0ZS1qZXN0IjogIl4yOS43LjAiLCAiZXhpdCI6ICJeMC4x\nLjIiLCAiaW1wb3J0LWxvY2FsIjogIl4zLjAuMiIsICJqZXN0LWNvbmZpZyI6\nICJeMjkuNy4wIiwgImplc3QtdXRpbCI6ICJeMjkuNy4wIiwgImplc3QtdmFs\naWRhdGUiOiAiXjI5LjcuMCIsICJ5YXJncyI6ICJeMTcuMy4xIiB9LCAicGVl\nckRlcGVuZGVuY2llcyI6IHsgIm5vZGUtbm90aWZpZXIiOiAiXjguMC4xIHx8\nIF45LjAuMCB8fCBeMTAuMC4wIiB9LCAib3B0aW9uYWxQZWVycyI6IFsibm9k\nZS1ub3RpZmllciJdLCAiYmluIjogeyAiamVzdCI6ICJiaW4vamVzdC5qcyIg\nfSB9LCAic2hhNTEyLU9WVm9idzJJdWJOL0dTWXN4RVRpK2dPZTdLYTU5RUZN\nUi90d09VM0piMkduS0tlTUdKQjVTR1VVckV6M1NGVm1KQVNVZFpVenk4M3NM\nTk5RMmdac2xnPT0iXSwKCiAgICAiamVzdC1jb25maWciOiBbImplc3QtY29u\nZmlnQDI5LjcuMCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJAYmFiZWwv\nY29yZSI6ICJeNy4xMS42IiwgIkBqZXN0L3Rlc3Qtc2VxdWVuY2VyIjogIl4y\nOS43LjAiLCAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMyIsICJiYWJlbC1qZXN0\nIjogIl4yOS43LjAiLCAiY2hhbGsiOiAiXjQuMC4wIiwgImNpLWluZm8iOiAi\nXjMuMi4wIiwgImRlZXBtZXJnZSI6ICJeNC4yLjIiLCAiZ2xvYiI6ICJeNy4x\nLjMiLCAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwgImplc3QtY2lyY3VzIjog\nIl4yOS43LjAiLCAiamVzdC1lbnZpcm9ubWVudC1ub2RlIjogIl4yOS43LjAi\nLCAiamVzdC1nZXQtdHlwZSI6ICJeMjkuNi4zIiwgImplc3QtcmVnZXgtdXRp\nbCI6ICJeMjkuNi4zIiwgImplc3QtcmVzb2x2ZSI6ICJeMjkuNy4wIiwgImpl\nc3QtcnVubmVyIjogIl4yOS43LjAiLCAiamVzdC11dGlsIjogIl4yOS43LjAi\nLCAiamVzdC12YWxpZGF0ZSI6ICJeMjkuNy4wIiwgIm1pY3JvbWF0Y2giOiAi\nXjQuMC40IiwgInBhcnNlLWpzb24iOiAiXjUuMi4wIiwgInByZXR0eS1mb3Jt\nYXQiOiAiXjI5LjcuMCIsICJzbGFzaCI6ICJeMy4wLjAiLCAic3RyaXAtanNv\nbi1jb21tZW50cyI6ICJeMy4xLjEiIH0sICJwZWVyRGVwZW5kZW5jaWVzIjog\neyAiQHR5cGVzL25vZGUiOiAiKiIsICJ0cy1ub2RlIjogIj49OS4wLjAiIH0s\nICJvcHRpb25hbFBlZXJzIjogWyJAdHlwZXMvbm9kZSIsICJ0cy1ub2RlIl0g\nfSwgInNoYTUxMi11WGJwZmVRN1I2VFpCcUkzL1R4Q1U0cTR0dGszdTBQSmVD\nK0UwemJmU29TanE2Yko3YnVCUHh6UVBMMGlmcmtZNEROdTRKVWRrMEltbEJV\nWWk4NDBlUT09Il0sCgogICAgImplc3QtZGlmZiI6IFsiamVzdC1kaWZmQDI5\nLjcuMCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJjaGFsayI6ICJeNC4w\nLjAiLCAiZGlmZi1zZXF1ZW5jZXMiOiAiXjI5LjYuMyIsICJqZXN0LWdldC10\neXBlIjogIl4yOS42LjMiLCAicHJldHR5LWZvcm1hdCI6ICJeMjkuNy4wIiB9\nIH0sICJzaGE1MTItTE1JZ2lJcmhpZ21QcnMwM0pIcHhVaDJ5SVNLM3ZMRlBr\nQW9kUGVvMCtCdUY3d0EyRm9RYmtFZzF1OGdCWUJUaG5jdTdlMW9FRFVmSVhW\ndVRxTFJVanc9PSJdLAoKICAgICJqZXN0LWRvY2Jsb2NrIjogWyJqZXN0LWRv\nY2Jsb2NrQDI5LjcuMCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJkZXRl\nY3QtbmV3bGluZSI6ICJeMy4wLjAiIH0gfSwgInNoYTUxMi1xNjE3QXV3M0E2\nMTJndXlhRmdzYkZlWXBOUDV0MmFvVU5Md0JVYmMvMGtEMVI0dDlpeERieUZU\nSGQxbm9rNGVwb1ZGcHI3UG1lV0hyaHZ1VjNYYUo0Zz09Il0sCgogICAgImpl\nc3QtZWFjaCI6IFsiamVzdC1lYWNoQDI5LjcuMCIsICIiLCB7ICJkZXBlbmRl\nbmNpZXMiOiB7ICJAamVzdC90eXBlcyI6ICJeMjkuNi4zIiwgImNoYWxrIjog\nIl40LjAuMCIsICJqZXN0LWdldC10eXBlIjogIl4yOS42LjMiLCAiamVzdC11\ndGlsIjogIl4yOS43LjAiLCAicHJldHR5LWZvcm1hdCI6ICJeMjkuNy4wIiB9\nIH0sICJzaGE1MTItZ25zK0VyMTQrWnJFb0M1ZmhPZllDWTFMT0hIcjBUSSty\nUVVIWlM4VHR3Mmw3Z2wrODBlSGMvZ0ZmMkt0a3cwK1NJQUNEVGVXdnBGY3Yz\nQjA0VmVtYlE9PSJdLAoKICAgICJqZXN0LWVudmlyb25tZW50LWpzZG9tIjog\nWyJqZXN0LWVudmlyb25tZW50LWpzZG9tQDI5LjcuMCIsICIiLCB7ICJkZXBl\nbmRlbmNpZXMiOiB7ICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjkuNy4wIiwg\nIkBqZXN0L2Zha2UtdGltZXJzIjogIl4yOS43LjAiLCAiQGplc3QvdHlwZXMi\nOiAiXjI5LjYuMyIsICJAdHlwZXMvanNkb20iOiAiXjIwLjAuMCIsICJAdHlw\nZXMvbm9kZSI6ICIqIiwgImplc3QtbW9jayI6ICJeMjkuNy4wIiwgImplc3Qt\ndXRpbCI6ICJeMjkuNy4wIiwgImpzZG9tIjogIl4yMC4wLjAiIH0sICJwZWVy\nRGVwZW5kZW5jaWVzIjogeyAiY2FudmFzIjogIl4yLjUuMCIgfSwgIm9wdGlv\nbmFsUGVlcnMiOiBbImNhbnZhcyJdIH0sICJzaGE1MTItazlpUWJzZjlPeU9m\nZHpXSDhIRG1yUlQwZ1NJY1grRkxOVzdJUXE5NHRGWDBneW5Qd3FEVFcwSG82\naU1WTmpHei9uYitsL3ZXM2RXTTJiYkxMcGtiWEE9PSJdLAoKICAgICJqZXN0\nLWVudmlyb25tZW50LW5vZGUiOiBbImplc3QtZW52aXJvbm1lbnQtbm9kZUAy\nOS43LjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiQGplc3QvZW52aXJv\nbm1lbnQiOiAiXjI5LjcuMCIsICJAamVzdC9mYWtlLXRpbWVycyI6ICJeMjku\nNy4wIiwgIkBqZXN0L3R5cGVzIjogIl4yOS42LjMiLCAiQHR5cGVzL25vZGUi\nOiAiKiIsICJqZXN0LW1vY2siOiAiXjI5LjcuMCIsICJqZXN0LXV0aWwiOiAi\nXjI5LjcuMCIgfSB9LCAic2hhNTEyLURPU3dDUnFYaXJUT3loZU0rNGQ1WVpP\ncldjZHUwTE5aODdld1VveXdiY2IyWFI0d0tncWlHOHZOZVl3aGpGTWJFa2Zq\ndTd3eDJHWUgwUDJnZXZHdkZ3PT0iXSwKCiAgICAiamVzdC1nZXQtdHlwZSI6\nIFsiamVzdC1nZXQtdHlwZUAyOS42LjMiLCAiIiwge30sICJzaGE1MTItenJ0\nZVhucVl4ZlFoN2w1Rkh5TDM4akwzOWRpOEg4ckhvZWNMSDNKTnhIM0J3T3JC\nc05lYWJkYXA1ZTBJMjNsRDRISEk4VzVWRkJacUc0RWFxNUxOY3c9PSJdLAoK\nICAgICJqZXN0LWhhc3RlLW1hcCI6IFsiamVzdC1oYXN0ZS1tYXBAMjkuNy4w\nIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIkBqZXN0L3R5cGVzIjogIl4y\nOS42LjMiLCAiQHR5cGVzL2dyYWNlZnVsLWZzIjogIl40LjEuMyIsICJAdHlw\nZXMvbm9kZSI6ICIqIiwgImFueW1hdGNoIjogIl4zLjAuMyIsICJmYi13YXRj\naG1hbiI6ICJeMi4wLjAiLCAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwgImpl\nc3QtcmVnZXgtdXRpbCI6ICJeMjkuNi4zIiwgImplc3QtdXRpbCI6ICJeMjku\nNy4wIiwgImplc3Qtd29ya2VyIjogIl4yOS43LjAiLCAibWljcm9tYXRjaCI6\nICJeNC4wLjQiLCAid2Fsa2VyIjogIl4xLjAuOCIgfSwgIm9wdGlvbmFsRGVw\nZW5kZW5jaWVzIjogeyAiZnNldmVudHMiOiAiXjIuMy4yIiB9IH0sICJzaGE1\nMTItZlA4dTJweWZxeDBLMXJHbjFSOXB5RTAvS1RuK0c3UHhrdFdpZE9CVHFG\nUExZWDBiOWtzYU1Ga2hLNXZyUzNEVnVuMDlwY2tMZGx4OTBRdGhsVzdBbUE9\nPSJdLAoKICAgICJqZXN0LWxlYWstZGV0ZWN0b3IiOiBbImplc3QtbGVhay1k\nZXRlY3RvckAyOS43LjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiamVz\ndC1nZXQtdHlwZSI6ICJeMjkuNi4zIiwgInByZXR0eS1mb3JtYXQiOiAiXjI5\nLjcuMCIgfSB9LCAic2hhNTEyLWtZQThJSmNTWXRTVDJCWTlJK1NNQzMybkRw\nQlQzSjJOdldKeDgrSkN1Q2RsL0NSMUk0RUtVSlJPaVA4WHRDY3hxZ1RUQkdK\nTmRiQjFBOFhSS2JUZXR3PT0iXSwKCiAgICAiamVzdC1tYXRjaGVyLXV0aWxz\nIjogWyJqZXN0LW1hdGNoZXItdXRpbHNAMjkuNy4wIiwgIiIsIHsgImRlcGVu\nZGVuY2llcyI6IHsgImNoYWxrIjogIl40LjAuMCIsICJqZXN0LWRpZmYiOiAi\nXjI5LjcuMCIsICJqZXN0LWdldC10eXBlIjogIl4yOS42LjMiLCAicHJldHR5\nLWZvcm1hdCI6ICJeMjkuNy4wIiB9IH0sICJzaGE1MTItc0JrRCtYaTlEdGND\naHNJM0wzdTArTjBvcGdQWW5DUlB0R2NRWXJnWG1SK2htdC9mWWZXQUwweFJY\nWVU4ZVdPZGZ1TGdCZTBZQ1czQUZ0blJMYWdxL2c9PSJdLAoKICAgICJqZXN0\nLW1lc3NhZ2UtdXRpbCI6IFsiamVzdC1tZXNzYWdlLXV0aWxAMjkuNy4wIiwg\nIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIkBiYWJlbC9jb2RlLWZyYW1lIjog\nIl43LjEyLjEzIiwgIkBqZXN0L3R5cGVzIjogIl4yOS42LjMiLCAiQHR5cGVz\nL3N0YWNrLXV0aWxzIjogIl4yLjAuMCIsICJjaGFsayI6ICJeNC4wLjAiLCAi\nZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwgIm1pY3JvbWF0Y2giOiAiXjQuMC40\nIiwgInByZXR0eS1mb3JtYXQiOiAiXjI5LjcuMCIsICJzbGFzaCI6ICJeMy4w\nLjAiLCAic3RhY2stdXRpbHMiOiAiXjIuMC4zIiB9IH0sICJzaGE1MTItR0JF\nVjRHUkFEZVArcXRCMis2dTYxc3RlYThtR2NPVDRtQ3RyWUlTWndmdTkvSVNI\nRkovNXpPTVhZYnBCRTlSc1M1K0diNjNEVzRGZ21uS0o3OUtmNnc9PSJdLAoK\nICAgICJqZXN0LW1vY2siOiBbImplc3QtbW9ja0AyOS43LjAiLCAiIiwgeyAi\nZGVwZW5kZW5jaWVzIjogeyAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMyIsICJA\ndHlwZXMvbm9kZSI6ICIqIiwgImplc3QtdXRpbCI6ICJeMjkuNy4wIiB9IH0s\nICJzaGE1MTItSVRPTVpuK1VrWVM0WkZoODN4WUFPeldTdGxvTnpKRk8yczhE\nV3JFNGxodEdEK0FvcmduYmtpS0VSZTR3UVZCeWRJR1B4MDU5ZzZyaVc1QnRw\nNkxsbnc9PSJdLAoKICAgICJqZXN0LXBucC1yZXNvbHZlciI6IFsiamVzdC1w\nbnAtcmVzb2x2ZXJAMS4yLjMiLCAiIiwgeyAicGVlckRlcGVuZGVuY2llcyI6\nIHsgImplc3QtcmVzb2x2ZSI6ICIqIiB9LCAib3B0aW9uYWxQZWVycyI6IFsi\namVzdC1yZXNvbHZlIl0gfSwgInNoYTUxMi0rM05wd1FFblJvSUJ0eDRmeWhi\nbFFEUGdKSTBIMUlFSWtYN1NoTFVqUEdBN1R0VVR2STFvaUtpM1NSNG9CUjBo\nUWhRUjgwbDRXQWU1UnJYQndXTUE4dz09Il0sCgogICAgImplc3QtcmVnZXgt\ndXRpbCI6IFsiamVzdC1yZWdleC11dGlsQDI5LjYuMyIsICIiLCB7fSwgInNo\nYTUxMi1LSkpCc1JDeXlMTldDTkJPdlp5UkRuQUlmVWlSSjh2K2hPQlFZR244\nZ0R5RjNVZWd3aVA0Z3dSUjMvU0RhNDJnMVliVnljVGlkVUYzcktqeUxGRFdi\nZz09Il0sCgogICAgImplc3QtcmVzb2x2ZSI6IFsiamVzdC1yZXNvbHZlQDI5\nLjcuMCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJjaGFsayI6ICJeNC4w\nLjAiLCAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwgImplc3QtaGFzdGUtbWFw\nIjogIl4yOS43LjAiLCAiamVzdC1wbnAtcmVzb2x2ZXIiOiAiXjEuMi4yIiwg\nImplc3QtdXRpbCI6ICJeMjkuNy4wIiwgImplc3QtdmFsaWRhdGUiOiAiXjI5\nLjcuMCIsICJyZXNvbHZlIjogIl4xLjIwLjAiLCAicmVzb2x2ZS5leHBvcnRz\nIjogIl4yLjAuMCIsICJzbGFzaCI6ICJeMy4wLjAiIH0gfSwgInNoYTUxMi1J\nT1ZoWlNyZytVdlZBc2hEU0R0SHlGQ0NCVWwvUTNBQUp2OGlaNlpqblo3NHh6\ndnd1ekxYaWQ5SUlJUGdUblk2MlNKamZ1dXBNS1pzWlFSc0N2eEVnQT09Il0s\nCgogICAgImplc3QtcmVzb2x2ZS1kZXBlbmRlbmNpZXMiOiBbImplc3QtcmVz\nb2x2ZS1kZXBlbmRlbmNpZXNAMjkuNy4wIiwgIiIsIHsgImRlcGVuZGVuY2ll\ncyI6IHsgImplc3QtcmVnZXgtdXRpbCI6ICJeMjkuNi4zIiwgImplc3Qtc25h\ncHNob3QiOiAiXjI5LjcuMCIgfSB9LCAic2hhNTEyLXVuMHpELzZxeEorUzBl\ndDdXeGVJM0g1WFNlOWxUQkJSN2JPSENIWGtLUjZsdUc1bXdERGxJelZRMFY1\nY1pDdW9UZ0VkY2R3elRnaFlrVFdmdWJpK25BPT0iXSwKCiAgICAiamVzdC1y\ndW5uZXIiOiBbImplc3QtcnVubmVyQDI5LjcuMCIsICIiLCB7ICJkZXBlbmRl\nbmNpZXMiOiB7ICJAamVzdC9jb25zb2xlIjogIl4yOS43LjAiLCAiQGplc3Qv\nZW52aXJvbm1lbnQiOiAiXjI5LjcuMCIsICJAamVzdC90ZXN0LXJlc3VsdCI6\nICJeMjkuNy4wIiwgIkBqZXN0L3RyYW5zZm9ybSI6ICJeMjkuNy4wIiwgIkBq\nZXN0L3R5cGVzIjogIl4yOS42LjMiLCAiQHR5cGVzL25vZGUiOiAiKiIsICJj\naGFsayI6ICJeNC4wLjAiLCAiZW1pdHRlcnkiOiAiXjAuMTMuMSIsICJncmFj\nZWZ1bC1mcyI6ICJeNC4yLjkiLCAiamVzdC1kb2NibG9jayI6ICJeMjkuNy4w\nIiwgImplc3QtZW52aXJvbm1lbnQtbm9kZSI6ICJeMjkuNy4wIiwgImplc3Qt\naGFzdGUtbWFwIjogIl4yOS43LjAiLCAiamVzdC1sZWFrLWRldGVjdG9yIjog\nIl4yOS43LjAiLCAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI5LjcuMCIsICJq\nZXN0LXJlc29sdmUiOiAiXjI5LjcuMCIsICJqZXN0LXJ1bnRpbWUiOiAiXjI5\nLjcuMCIsICJqZXN0LXV0aWwiOiAiXjI5LjcuMCIsICJqZXN0LXdhdGNoZXIi\nOiAiXjI5LjcuMCIsICJqZXN0LXdvcmtlciI6ICJeMjkuNy4wIiwgInAtbGlt\naXQiOiAiXjMuMS4wIiwgInNvdXJjZS1tYXAtc3VwcG9ydCI6ICIwLjUuMTMi\nIH0gfSwgInNoYTUxMi1mc2M0TjZjUENBYWh5YkdCZlRSY3E1d0ZSNmZwTHpu\nTWc0N3NZNWFEcHNvZWpPY1ZZRmIwN0FIdVNuUjBsaU1jUFRnQnNBM1pKTDZr\nRk9qUGRvTmlwUT09Il0sCgogICAgImplc3QtcnVudGltZSI6IFsiamVzdC1y\ndW50aW1lQDI5LjcuMCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJAamVz\ndC9lbnZpcm9ubWVudCI6ICJeMjkuNy4wIiwgIkBqZXN0L2Zha2UtdGltZXJz\nIjogIl4yOS43LjAiLCAiQGplc3QvZ2xvYmFscyI6ICJeMjkuNy4wIiwgIkBq\nZXN0L3NvdXJjZS1tYXAiOiAiXjI5LjYuMyIsICJAamVzdC90ZXN0LXJlc3Vs\ndCI6ICJeMjkuNy4wIiwgIkBqZXN0L3RyYW5zZm9ybSI6ICJeMjkuNy4wIiwg\nIkBqZXN0L3R5cGVzIjogIl4yOS42LjMiLCAiQHR5cGVzL25vZGUiOiAiKiIs\nICJjaGFsayI6ICJeNC4wLjAiLCAiY2pzLW1vZHVsZS1sZXhlciI6ICJeMS4w\nLjAiLCAiY29sbGVjdC12OC1jb3ZlcmFnZSI6ICJeMS4wLjAiLCAiZ2xvYiI6\nICJeNy4xLjMiLCAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwgImplc3QtaGFz\ndGUtbWFwIjogIl4yOS43LjAiLCAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI5\nLjcuMCIsICJqZXN0LW1vY2siOiAiXjI5LjcuMCIsICJqZXN0LXJlZ2V4LXV0\naWwiOiAiXjI5LjYuMyIsICJqZXN0LXJlc29sdmUiOiAiXjI5LjcuMCIsICJq\nZXN0LXNuYXBzaG90IjogIl4yOS43LjAiLCAiamVzdC11dGlsIjogIl4yOS43\nLjAiLCAic2xhc2giOiAiXjMuMC4wIiwgInN0cmlwLWJvbSI6ICJeNC4wLjAi\nIH0gfSwgInNoYTUxMi1nVW5Mamd3ZEdxVzdCNEx2T0lrYktzOVdHYm4rUUxx\nUlFROWp1QzZIbmRlRGllekl3aERQK21oTXdIV0NFY2ZRNVJVWGE2T1BuRkY4\nQkpoNXhlZ3d3UT09Il0sCgogICAgImplc3Qtc25hcHNob3QiOiBbImplc3Qt\nc25hcHNob3RAMjkuNy4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIkBi\nYWJlbC9jb3JlIjogIl43LjExLjYiLCAiQGJhYmVsL2dlbmVyYXRvciI6ICJe\nNy43LjIiLCAiQGJhYmVsL3BsdWdpbi1zeW50YXgtanN4IjogIl43LjcuMiIs\nICJAYmFiZWwvcGx1Z2luLXN5bnRheC10eXBlc2NyaXB0IjogIl43LjcuMiIs\nICJAYmFiZWwvdHlwZXMiOiAiXjcuMy4zIiwgIkBqZXN0L2V4cGVjdC11dGls\ncyI6ICJeMjkuNy4wIiwgIkBqZXN0L3RyYW5zZm9ybSI6ICJeMjkuNy4wIiwg\nIkBqZXN0L3R5cGVzIjogIl4yOS42LjMiLCAiYmFiZWwtcHJlc2V0LWN1cnJl\nbnQtbm9kZS1zeW50YXgiOiAiXjEuMC4wIiwgImNoYWxrIjogIl40LjAuMCIs\nICJleHBlY3QiOiAiXjI5LjcuMCIsICJncmFjZWZ1bC1mcyI6ICJeNC4yLjki\nLCAiamVzdC1kaWZmIjogIl4yOS43LjAiLCAiamVzdC1nZXQtdHlwZSI6ICJe\nMjkuNi4zIiwgImplc3QtbWF0Y2hlci11dGlscyI6ICJeMjkuNy4wIiwgImpl\nc3QtbWVzc2FnZS11dGlsIjogIl4yOS43LjAiLCAiamVzdC11dGlsIjogIl4y\nOS43LjAiLCAibmF0dXJhbC1jb21wYXJlIjogIl4xLjQuMCIsICJwcmV0dHkt\nZm9ybWF0IjogIl4yOS43LjAiLCAic2VtdmVyIjogIl43LjUuMyIgfSB9LCAi\nc2hhNTEyLVJtMEJNV3R4QmNpb0hyMS9PWDVZQ1A4VW92NHJpSHZLUGtuT0dz\nODA0Wmc5SkdaZ21JQmtidGx4SkMvN1o0bXNLWVZiSUp0ZlUrdEtiOHhsWU5m\nZGt3PT0iXSwKCiAgICAiamVzdC11dGlsIjogWyJqZXN0LXV0aWxAMjkuNy4w\nIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIkBqZXN0L3R5cGVzIjogIl4y\nOS42LjMiLCAiQHR5cGVzL25vZGUiOiAiKiIsICJjaGFsayI6ICJeNC4wLjAi\nLCAiY2ktaW5mbyI6ICJeMy4yLjAiLCAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45\nIiwgInBpY29tYXRjaCI6ICJeMi4yLjMiIH0gfSwgInNoYTUxMi16NkViS2Fq\nSXBxR0tVNTZ5NUtCVWd5MWR0MWloaFFKZ1d6VWxaSEFyQS8rWDJhZDdDYjVp\nRitBSzFFV1ZML0JvN1J6OXV1cnBxdzZTaUJDZWZVYkNHQT09Il0sCgogICAg\nImplc3QtdmFsaWRhdGUiOiBbImplc3QtdmFsaWRhdGVAMjkuNy4wIiwgIiIs\nIHsgImRlcGVuZGVuY2llcyI6IHsgIkBqZXN0L3R5cGVzIjogIl4yOS42LjMi\nLCAiY2FtZWxjYXNlIjogIl42LjIuMCIsICJjaGFsayI6ICJeNC4wLjAiLCAi\namVzdC1nZXQtdHlwZSI6ICJeMjkuNi4zIiwgImxldmVuIjogIl4zLjEuMCIs\nICJwcmV0dHktZm9ybWF0IjogIl4yOS43LjAiIH0gfSwgInNoYTUxMi1aQjd3\nSHFhUkdWdy85aFNUL091RlVSZUc3TTh2S2VxMC9KMmVnSUdMZHZqSENtWXFH\nQVJoelhtdGdpK2dWZVo1dVhGRjIxOWFPYzNMczJ5TGcyN3Rrdz09Il0sCgog\nICAgImplc3Qtd2F0Y2hlciI6IFsiamVzdC13YXRjaGVyQDI5LjcuMCIsICIi\nLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJAamVzdC90ZXN0LXJlc3VsdCI6ICJe\nMjkuNy4wIiwgIkBqZXN0L3R5cGVzIjogIl4yOS42LjMiLCAiQHR5cGVzL25v\nZGUiOiAiKiIsICJhbnNpLWVzY2FwZXMiOiAiXjQuMi4xIiwgImNoYWxrIjog\nIl40LjAuMCIsICJlbWl0dGVyeSI6ICJeMC4xMy4xIiwgImplc3QtdXRpbCI6\nICJeMjkuNy4wIiwgInN0cmluZy1sZW5ndGgiOiAiXjQuMC4xIiB9IH0sICJz\naGE1MTItNDlGZzdXWGtVM1ZsMmg2TGJMdE1RL0h5QjZyWFNJWDdTcXZCTFFt\nc3NSQkdOOUkwUE52UG1BbUNXU09ZNlNPdnJqaEkvRjcvYkdBdjlSdG5zUEEw\nM2c9PSJdLAoKICAgICJqZXN0LXdvcmtlciI6IFsiamVzdC13b3JrZXJAMjku\nNy4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgIkB0eXBlcy9ub2RlIjog\nIioiLCAiamVzdC11dGlsIjogIl4yOS43LjAiLCAibWVyZ2Utc3RyZWFtIjog\nIl4yLjAuMCIsICJzdXBwb3J0cy1jb2xvciI6ICJeOC4wLjAiIH0gfSwgInNo\nYTUxMi1lSXoybXNML0V6TDlVRlRGRng3akJUa2VaZmt1MHlVQXlaWlptSjkz\nSDJUWUVpcm9JeDJQUWpFWGN3WXRZbDh6WEN4YitQQW1BMmhMSXQvNlpFa1BI\ndz09Il0sCgogICAgImpzLXRva2VucyI6IFsianMtdG9rZW5zQDQuMC4wIiwg\nIiIsIHt9LCAic2hhNTEyLVJkSlVmbGNFM2NVektpTXFRZ3NDdTA2RlB1OVVk\nSUpPMGJlWWJQaEhONGs2YXBnSnRpZmNvQ3RUOWJjeE9wWUJ0cEQya0NNNlNi\nemc0Q2F1c1cvUEtRPT0iXSwKCiAgICAianMteWFtbCI6IFsianMteWFtbEA0\nLjEuMCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJhcmdwYXJzZSI6ICJe\nMi4wLjEiIH0sICJiaW4iOiB7ICJqcy15YW1sIjogImJpbi9qcy15YW1sLmpz\nIiB9IH0sICJzaGE1MTItd3B4WnM5Tm94WmFKRVNKR0laVHlERWFZcGwwRktT\nQStGQjlhSml5ZW1LaE13a3hRZzYzaDRUMUtKZ1VHSHBUcVBETlJjbW1ZTHVn\nclJqSmxCdFd2UkE9PSJdLAoKICAgICJqc2RvbSI6IFsianNkb21AMjAuMC4z\nIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgImFiYWIiOiAiXjIuMC42Iiwg\nImFjb3JuIjogIl44LjguMSIsICJhY29ybi1nbG9iYWxzIjogIl43LjAuMCIs\nICJjc3NvbSI6ICJeMC41LjAiLCAiY3Nzc3R5bGUiOiAiXjIuMy4wIiwgImRh\ndGEtdXJscyI6ICJeMy4wLjIiLCAiZGVjaW1hbC5qcyI6ICJeMTAuNC4yIiwg\nImRvbWV4Y2VwdGlvbiI6ICJeNC4wLjAiLCAiZXNjb2RlZ2VuIjogIl4yLjAu\nMCIsICJmb3JtLWRhdGEiOiAiXjQuMC4wIiwgImh0bWwtZW5jb2Rpbmctc25p\nZmZlciI6ICJeMy4wLjAiLCAiaHR0cC1wcm94eS1hZ2VudCI6ICJeNS4wLjAi\nLCAiaHR0cHMtcHJveHktYWdlbnQiOiAiXjUuMC4xIiwgImlzLXBvdGVudGlh\nbC1jdXN0b20tZWxlbWVudC1uYW1lIjogIl4xLjAuMSIsICJud3NhcGkiOiAi\nXjIuMi4yIiwgInBhcnNlNSI6ICJeNy4xLjEiLCAic2F4ZXMiOiAiXjYuMC4w\nIiwgInN5bWJvbC10cmVlIjogIl4zLjIuNCIsICJ0b3VnaC1jb29raWUiOiAi\nXjQuMS4yIiwgInczYy14bWxzZXJpYWxpemVyIjogIl40LjAuMCIsICJ3ZWJp\nZGwtY29udmVyc2lvbnMiOiAiXjcuMC4wIiwgIndoYXR3Zy1lbmNvZGluZyI6\nICJeMi4wLjAiLCAid2hhdHdnLW1pbWV0eXBlIjogIl4zLjAuMCIsICJ3aGF0\nd2ctdXJsIjogIl4xMS4wLjAiLCAid3MiOiAiXjguMTEuMCIsICJ4bWwtbmFt\nZS12YWxpZGF0b3IiOiAiXjQuMC4wIiB9LCAicGVlckRlcGVuZGVuY2llcyI6\nIHsgImNhbnZhcyI6ICJeMi41LjAiIH0sICJvcHRpb25hbFBlZXJzIjogWyJj\nYW52YXMiXSB9LCAic2hhNTEyLVNZaEJ2VGg4OXRUZkNEL0NSZFNPbTEzbU9C\nYTQyaVRhVHlmeUVXQmRLY0dkUHhQdExGQlh1SFI4WEhiMzNZTllhUCtsTGJt\nU3ZCVHNub2VzQ05KRXNRPT0iXSwKCiAgICAianNlc2MiOiBbImpzZXNjQDMu\nMS4wIiwgIiIsIHsgImJpbiI6IHsgImpzZXNjIjogImJpbi9qc2VzYyIgfSB9\nLCAic2hhNTEyLS9zTTNkTzJGT3pYaktRaEp1bzBRMTczd2YyS09vOHQ0STh2\nSHk2bEY5cG9VcDdiS1QwL05IRThmUFgyM1B3ZmhueWtmcW5DMnhSeE9uVnc1\nWHVHSWFBPT0iXSwKCiAgICAianNvbi1idWZmZXIiOiBbImpzb24tYnVmZmVy\nQDMuMC4xIiwgIiIsIHt9LCAic2hhNTEyLTRiVjVCZlIybXFmUVRKbStWNXRQ\nUGRmK1pwdWhpSXZUdUFCNWc4a2NyWE9acFRUL1F3d1ZSV0J5d1gxb3pyNmxF\ndVBkYkh4d2FKbG05RzZtSTJzZlNRPT0iXSwKCiAgICAianNvbi1wYXJzZS1l\ndmVuLWJldHRlci1lcnJvcnMiOiBbImpzb24tcGFyc2UtZXZlbi1iZXR0ZXIt\nZXJyb3JzQDIuMy4xIiwgIiIsIHt9LCAic2hhNTEyLXh5Rnd5aHJvL0pFb2Y2\nR2hlMml6Mk5jWG9qMnNsb05zV3IvWHNFUkRLL29pUENmYU5obDVPTmZwK2pR\nZEFaUlFRMElKV056SDl6SVpGN2xpOTFraDJ3PT0iXSwKCiAgICAianNvbi1z\nY2hlbWEtdHJhdmVyc2UiOiBbImpzb24tc2NoZW1hLXRyYXZlcnNlQDAuNC4x\nIiwgIiIsIHt9LCAic2hhNTEyLXhiYkNINWRDWVU1VDhMY0VoaHVoN0hKODhI\nWHVXM3FzSTNZMHpPWkZLZlpFSGNwV2lIVS9KeHprNjI5QnJzYWIvbU1pSFF0\naTl3TVArODQ1UlBlM1ZnPT0iXSwKCiAgICAianNvbi1zdGFibGUtc3RyaW5n\naWZ5LXdpdGhvdXQtanNvbmlmeSI6IFsianNvbi1zdGFibGUtc3RyaW5naWZ5\nLXdpdGhvdXQtanNvbmlmeUAxLjAuMSIsICIiLCB7fSwgInNoYTUxMi1CZGJv\neStsN3RBM09HVzZGanlGSFdrUDVMdUJ5ajFUazMzTGp5cTBheHl6ZGs5Ly9K\nU2kydTNmUDFRU21kMUtOd3E2Vk9LWUdsQXU4N0Npc1ZpcjZQdz09Il0sCgog\nICAgImpzb241IjogWyJqc29uNUAyLjIuMyIsICIiLCB7ICJiaW4iOiB7ICJq\nc29uNSI6ICJsaWIvY2xpLmpzIiB9IH0sICJzaGE1MTItWG1PV2U3ZXlIWUgx\nNGNMZFZQb3lnK0dPSDNyWVgrK0twenJ5bEp3U1c5OHQzTmsrVThYT2w4RldL\nT2d3dHpkYjhsWEdmNnpZd0RVemVITVdmeGFzeWc9PSJdLAoKICAgICJrZXl2\nIjogWyJrZXl2QDQuNS40IiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgImpz\nb24tYnVmZmVyIjogIjMuMC4xIiB9IH0sICJzaGE1MTItb3hWSGtIUi9FSmYy\nQ05Ybld4UkxXNm1nN0p5Q0NVY0cwRHRFR21MMmN0VW8xUE5UaW4xUFVpbCty\nLys0cjVNcFZnQy9mbjFranN4N21qU3VqS3FJcHc9PSJdLAoKICAgICJrbGV1\nciI6IFsia2xldXJAMy4wLjMiLCAiIiwge30sICJzaGE1MTItZVRJemxWT1NV\nUitKeGRERmVwRVljQk10WjlRcWRlZitybnpXZFJadU1iT3l3dTV0TzJ3Mk43\ncnFqb0FOWjVrOXZ5d2hMNkJyMVZSalVJZ1RReDRFOHc9PSJdLAoKICAgICJs\nZXZlbiI6IFsibGV2ZW5AMy4xLjAiLCAiIiwge30sICJzaGE1MTItcXNkYStI\nOGpUYVVhTi94NXZ6VzJyemMrOFJ3NFRBUS80S2pCNDZJd0s1VkgrSWxWZWVl\namUvRW9aUnBpWHZJcWpGZ0s4NFFmZnFQenRHSTNWQkxHMUE9PSJdLAoKICAg\nICJsZXZuIjogWyJsZXZuQDAuNC4xIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6\nIHsgInByZWx1ZGUtbHMiOiAiXjEuMi4xIiwgInR5cGUtY2hlY2siOiAifjAu\nNC4wIiB9IH0sICJzaGE1MTItK2JUMnVINEU1TEdFN2gvbjNldmNTL3NRbEpY\nQ3BJcDZ5bThPV0o1ZVY2KzY3RHNxbC9MYWFUN3FKQkF0MnJ6Zm9hLzVRQkdC\naHhEaXgxZE10MmtRS1E9PSJdLAoKICAgICJsaW5lcy1hbmQtY29sdW1ucyI6\nIFsibGluZXMtYW5kLWNvbHVtbnNAMS4yLjQiLCAiIiwge30sICJzaGE1MTIt\nN3lseWxlc1pRL1BWMjlqaEVEbDNVZmpvNlpYN2dDcUpyNUY3UEtycWM5M3Y3\nZnpTeW10MUJwd0VVOG5BVVhzOHF6enZxaGJqaEs1UVpnNk10L0hrQmc9PSJd\nLAoKICAgICJsb2NhdGUtcGF0aCI6IFsibG9jYXRlLXBhdGhANi4wLjAiLCAi\nIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAicC1sb2NhdGUiOiAiXjUuMC4wIiB9\nIH0sICJzaGE1MTItaVBaSzZlWWpieFJ1M3VCNC9XWjNFc0VJTUpGTXFBb29w\nbDNSK3p1cTBVamNBbS9NTzZLQ3dlRGdQZlAzZWxUenRvS1AzS3RuVkh4VG4y\nTkhCU0RWVXc9PSJdLAoKICAgICJsb2Rhc2gubWVtb2l6ZSI6IFsibG9kYXNo\nLm1lbW9pemVANC4xLjIiLCAiIiwge30sICJzaGE1MTItdDdqK056bWduUXpU\nQVlYY3NIWUxnaW1sdE9WMU1YSHRsT1dmNkdqTDlLajhHSzVGSW53NUpvdHh2\nYk9zK0l2VjEvRHpvMDQvZkNHZkxWczdhWGI0QWc9PSJdLAoKICAgICJsb2Rh\nc2gubWVyZ2UiOiBbImxvZGFzaC5tZXJnZUA0LjYuMiIsICIiLCB7fSwgInNo\nYTUxMi0wS3BqcVhSVnZyWXlDc1gxc3dSL1hUSzB2YTZWUWtRTTZNTm83UHFX\nNzdCeWpBaG9BUkE4RWZyUDFONCtLbEtqOFlTMFpVQ3RSVC9ZVXVoeVlEdWpJ\nUT09Il0sCgogICAgImxydS1jYWNoZSI6IFsibHJ1LWNhY2hlQDUuMS4xIiwg\nIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgInlhbGxpc3QiOiAiXjMuMC4yIiB9\nIH0sICJzaGE1MTItS3BOQVJRQTNJd3YralRBMHV0VVZWYnJoK0pscnIxRnYw\nZTU2R0d6QUZPWE43ZGsvRnZpYURXOExIbUs1MkRsY0g0V1AybjZnSTh2TjFh\nZXNCRmdvOXc9PSJdLAoKICAgICJtYWtlLWRpciI6IFsibWFrZS1kaXJANC4w\nLjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAic2VtdmVyIjogIl43LjUu\nMyIgfSB9LCAic2hhNTEyLWhYZFVUWllJVk90MUV4Ly9qQVFpK3dUWlpwVXB3\nQmovMFFzT3pxZWdiM3JHTU1lSmlTRXU1eExIbllmQnJSVjRSSDIrT0NTT085\nNUlzLzd4MVdKNGJ3PT0iXSwKCiAgICAibWFrZS1lcnJvciI6IFsibWFrZS1l\ncnJvckAxLjMuNiIsICIiLCB7fSwgInNoYTUxMi1zOFVobE5lN3ZQS29tUWhD\nMXFGZWxNb2tyL1NjM0FnTmJzbzNuNzRtVlBBNUxUWndrQjlObFhmNFhQYW1M\neEpFOGgwZ2g3M3JNOTR4dndSVDJDVkludz09Il0sCgogICAgIm1ha2VlcnJv\nciI6IFsibWFrZWVycm9yQDEuMC4xMiIsICIiLCB7ICJkZXBlbmRlbmNpZXMi\nOiB7ICJ0bXBsIjogIjEuMC41IiB9IH0sICJzaGE1MTItSm1xQ3ZVaG10NDNt\nYWRscEZ6RzRCUXpHMlozbTZ0dlFETktkQ2xabk8zVmJJdWRKWW14c1QwRk5K\nTWVpQjIrSlRTbFRRVFNiVThRZGVzVm13SmNtTGc9PSJdLAoKICAgICJtZXJn\nZS1zdHJlYW0iOiBbIm1lcmdlLXN0cmVhbUAyLjAuMCIsICIiLCB7fSwgInNo\nYTUxMi1hYnYvcU9jdVBmazNVUlBmRHptWlUxTEttdXc4a1QrMG5JSHZLcktn\nRnJ3aWZvbC9kb1djZEE0WnFzV1E4RU5yRktrZDY3TWZwby9Mb3ZiSVVzYnQz\ndz09Il0sCgogICAgIm1lcmdlMiI6IFsibWVyZ2UyQDEuNC4xIiwgIiIsIHt9\nLCAic2hhNTEyLThxN1ZFZ01KVzRKOHRjZlZQeThnMDlOY1F3WmRid0ZFcWhl\nL1daa29JempuLzNUR0R3dE9DWXRYR3hBM084dFB6cGN6Q0NEZ3YrUDJQNXkw\nMFpKT09nPT0iXSwKCiAgICAibWljcm9tYXRjaCI6IFsibWljcm9tYXRjaEA0\nLjAuOCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJicmFjZXMiOiAiXjMu\nMC4zIiwgInBpY29tYXRjaCI6ICJeMi4zLjEiIH0gfSwgInNoYTUxMi1QWHdm\nQmhZdTBoQkNQdzhEbjBFK1dEWWI3YWYzZFNMVldLaTNIR3Y4NElkRjRUeUZv\nQzB5c3hGZDBHb3h3N25TdjRUL1B6RUpReHNZc0VpRkNLbzJCQT09Il0sCgog\nICAgIm1pbWUtZGIiOiBbIm1pbWUtZGJAMS41Mi4wIiwgIiIsIHt9LCAic2hh\nNTEyLXNQVTR1VjdkWWx2dFdKeHd3eEhEMFB1aWhWTmlFN1R5QWJRNVNXeERD\nQjltVVl2T2dyb1FPd1lRUU9LUEo4Q0liRSsxRVRWbE9vSzFVQzJuVTNnWXZn\nPT0iXSwKCiAgICAibWltZS10eXBlcyI6IFsibWltZS10eXBlc0AyLjEuMzUi\nLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAibWltZS1kYiI6ICIxLjUyLjAi\nIH0gfSwgInNoYTUxMi1aRFkrYlBtNXpUVEYrWXBDckFVOW5LMFVnSUNZUFQw\nUXRUMU5aV0Z2NHMrK1ROa2NnVmFUMGc2KzRSMnVJNE1qUWp6eXNIQjF6eHVX\nTDUwaHphZVhpdz09Il0sCgogICAgIm1pbWljLWZuIjogWyJtaW1pYy1mbkAy\nLjEuMCIsICIiLCB7fSwgInNoYTUxMi1PcWJPazVvRVFlQVo4V1hXeWRsdTlI\nSmp6OVdWZEVJdmFtTUNjWG11cVVZalRrbkgvc3FzV3ZoUTN2Z3dLRlJSMUhw\nanZOQktRMzduYkpnWXpHcUdjZz09Il0sCgogICAgIm1pbmltYXRjaCI6IFsi\nbWluaW1hdGNoQDMuMS4yIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgImJy\nYWNlLWV4cGFuc2lvbiI6ICJeMS4xLjciIH0gfSwgInNoYTUxMi1KN3A2M2hS\naUFqdzFOREV3dzFXN2kzNytCeUlyT1dPNVhRUUF6WjNWT2NMMFBOeWJ3cGZt\nVi9OMDV6RkF6d1E5VVN5RWNYNnQzVU8rSzVhcUJRT0lIdz09Il0sCgogICAg\nIm1zIjogWyJtc0AyLjEuMyIsICIiLCB7fSwgInNoYTUxMi02Rmx6dWJUTFpH\nM0oyYS9OVkNBbGVFaGp6cTVveGdIeWFDVTl5WVh2Y0xzdm9WYUhKcS9zNXhY\nSTYvWFhQNnR6N1I5eEFPdEhuU08vdFh0RjNXUlRsQT09Il0sCgogICAgIm5h\ndHVyYWwtY29tcGFyZSI6IFsibmF0dXJhbC1jb21wYXJlQDEuNC4wIiwgIiIs\nIHt9LCAic2hhNTEyLU9XTkQ4ZWkzVnROQzloN1Y2MHFmZjNTVm9iSHI5OTZD\nVHdneHViZ3lRWUVwZzI5MGg5SjBidXlFQ05OSmV4a0ZtNXNPYWpoNUcxMTZS\nWUExYzhaTVN3PT0iXSwKCiAgICAibm9kZS1pbnQ2NCI6IFsibm9kZS1pbnQ2\nNEAwLjQuMCIsICIiLCB7fSwgInNoYTUxMi1PNWx6OTF4U09lb1hQNkR1bHlI\nZmxscHErRWcwME1XaXRaSWJ0UGZvU0V2cUlIZGw1Z2ZjWTZoWXpEV25qMHFE\nNXR6NTJQSTA4dTlxVXZTVmVVQmVIdz09Il0sCgogICAgIm5vZGUtcmVsZWFz\nZXMiOiBbIm5vZGUtcmVsZWFzZXNAMi4wLjE5IiwgIiIsIHt9LCAic2hhNTEy\nLXh4T1dKc0JLdHpBcTdEWTBKK0RUenV6NThLOGU3c0piZGd3a2JNV1FlOFVZ\nQjZla21zUTQ1cTBNL3RKRHNHYVptYkMrbDduNTdVVjhIbDV0SHhPOXV3PT0i\nXSwKCiAgICAibm9ybWFsaXplLXBhdGgiOiBbIm5vcm1hbGl6ZS1wYXRoQDMu\nMC4wIiwgIiIsIHt9LCAic2hhNTEyLTZlWnM1THMzV3RDaXNIV3A5UzJHVXk4\nZHFrcEdpNEJWU3ozR2FxaUU2ZXp1YjA1MTJFU3p0WFV3VUI2QzZJS2JRa1ky\nUG5iL21ENFdZb2pDUndjd0xBPT0iXSwKCiAgICAibnBtLXJ1bi1wYXRoIjog\nWyJucG0tcnVuLXBhdGhANC4wLjEiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjog\neyAicGF0aC1rZXkiOiAiXjMuMC4wIiB9IH0sICJzaGE1MTItUzQ4V3paVzc3\nN3poTklybjdneE9sSVNOQXFpOVpDL3VRRm5SZGJlSUhoWmhDQTZVcXBrT1Q4\nVDFHN0J2ZmRnUDRFcjhnRjRzVWJhUzBpN1F2SWZDV3c9PSJdLAoKICAgICJu\nd3NhcGkiOiBbIm53c2FwaUAyLjIuMTYiLCAiIiwge30sICJzaGE1MTItRjFJ\nL2JpbURwajNuY2FORGhmeU1XdUZxbVFEQndEQjBGb2djMnFwTDNCV3ZrUXRl\nRkQvOEJ6V3VJUmw4M3JxMERYZm04U0d0L0hGaExYWnlsalRYY1E9PSJdLAoK\nICAgICJvbmNlIjogWyJvbmNlQDEuNC4wIiwgIiIsIHsgImRlcGVuZGVuY2ll\ncyI6IHsgIndyYXBweSI6ICIxIiB9IH0sICJzaGE1MTItbE5hSmdJKzJRNVVS\nUUJrY2NFS0hUUU9QYVhkVXhuWlpFbFFUWlkwTUZVQXVhRXFlMUUrTnl2Z2R6\nL2FJeU5pNlo5TXpPNWR2MUg4bjU4L0dFTHAzK3c9PSJdLAoKICAgICJvbmV0\naW1lIjogWyJvbmV0aW1lQDUuMS4yIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6\nIHsgIm1pbWljLWZuIjogIl4yLjEuMCIgfSB9LCAic2hhNTEyLWticGFTU0dK\nVFdkQVk1S1BWZU1PS1hTclB0cjhDOEM3d29kSmJjc2Q1MWpSbm1EK0dadThZ\nMFZvVTZEbTVaNHZXcjBJZy8xTkt1V1JLZjdqNWFhWVNnPT0iXSwKCiAgICAi\nb3B0aW9uYXRvciI6IFsib3B0aW9uYXRvckAwLjkuNCIsICIiLCB7ICJkZXBl\nbmRlbmNpZXMiOiB7ICJkZWVwLWlzIjogIl4wLjEuMyIsICJmYXN0LWxldmVu\nc2h0ZWluIjogIl4yLjAuNiIsICJsZXZuIjogIl4wLjQuMSIsICJwcmVsdWRl\nLWxzIjogIl4xLjIuMSIsICJ0eXBlLWNoZWNrIjogIl4wLjQuMCIsICJ3b3Jk\nLXdyYXAiOiAiXjEuMi41IiB9IH0sICJzaGE1MTItNklwUTdtS1V4UmNaTkxJ\nT2JSMGh6N2x4c2FwU1NJWU5aSndYUEdlRjBtVFZxR0tGSVhqMURRY01vVDIy\nUzNST2NMeVkvcnowUFdhV1o5YXlXbWFkOWc9PSJdLAoKICAgICJwLWxpbWl0\nIjogWyJwLWxpbWl0QDMuMS4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsg\nInlvY3RvLXF1ZXVlIjogIl4wLjEuMCIgfSB9LCAic2hhNTEyLVRZT2FuTTN3\nR3dOR3NaTjJjVlRZUEFydzQ1NHhuWGo1cW1XRjFiRW9BYzQrY1Uvb2w3R1Zo\nN29kZXZqcDFGTkhkdUhjM0taTWNGZHV4VTVYYzZ1SlJRPT0iXSwKCiAgICAi\ncC1sb2NhdGUiOiBbInAtbG9jYXRlQDUuMC4wIiwgIiIsIHsgImRlcGVuZGVu\nY2llcyI6IHsgInAtbGltaXQiOiAiXjMuMC4yIiB9IH0sICJzaGE1MTItTGFO\nanRSV1VCWSsrekI1bkUvTndjYW9NeWxTUGsrUytaSE5CMVR6ZGJNSk1ueTZk\neW5wQUd0N1gvdGwvUVlxM1RJZUU2bnhIcHBibzJMR3ltckc1UHc9PSJdLAoK\nICAgICJwLXRyeSI6IFsicC10cnlAMi4yLjAiLCAiIiwge30sICJzaGE1MTIt\nUjRuUEFWVEFVMEI5RDM1L0drM3VKZi83WFliUWN5b2hTS2R2QXhJUlNOZ2hG\nbDRlNzFoVm9HbkJOUXo5Y1dhWHhPMkkxMEtUQyszak1kdnZvS3c2ZFE9PSJd\nLAoKICAgICJwYXJlbnQtbW9kdWxlIjogWyJwYXJlbnQtbW9kdWxlQDEuMC4x\nIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgImNhbGxzaXRlcyI6ICJeMy4w\nLjAiIH0gfSwgInNoYTUxMi1HUTJFV1JwUVY4L28rQXc4WXF0ZlpaUGZOUlda\nWWtiaWRFOWs1cnBsL2hDM3Z0SEhCZkdtMklmaTZxV1YrY29ER2tyVUtaQXhF\nM0xvdDVrY3NSbGgrZz09Il0sCgogICAgInBhcnNlLWpzb24iOiBbInBhcnNl\nLWpzb25ANS4yLjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiQGJhYmVs\nL2NvZGUtZnJhbWUiOiAiXjcuMC4wIiwgImVycm9yLWV4IjogIl4xLjMuMSIs\nICJqc29uLXBhcnNlLWV2ZW4tYmV0dGVyLWVycm9ycyI6ICJeMi4zLjAiLCAi\nbGluZXMtYW5kLWNvbHVtbnMiOiAiXjEuMS42IiB9IH0sICJzaGE1MTItYXlD\nS3ZtL3BoQ0d4T2tZUlNDTTgyaUR3Y3Q4L0VvblNFZ0NTeFd4RDd2ZTZqSGdn\nc0ZsNGZaVlFCUFJOZ1FvS2l1Vi9vZGhGckd6UVhad2JpZkM4Umc9PSJdLAoK\nICAgICJwYXJzZTUiOiBbInBhcnNlNUA3LjIuMSIsICIiLCB7ICJkZXBlbmRl\nbmNpZXMiOiB7ICJlbnRpdGllcyI6ICJeNC41LjAiIH0gfSwgInNoYTUxMi1C\ndUJZUVlsdjFja2lQZFFpL29oaWl2aTlTYWdjOUpHK096czByN2IvMGlLM3NL\nbXJiMGI5RmRXZEJiT2R4NmhCQ00vRjlJcjgyb2ZuQmh0Wk9qQ1JQUT09Il0s\nCgogICAgInBhdGgtZXhpc3RzIjogWyJwYXRoLWV4aXN0c0A0LjAuMCIsICIi\nLCB7fSwgInNoYTUxMi1hazlReTVRN2pZYjJXd2NleTVGcHZnMktvQWMvWklo\nTFNMT1NCbVJteWdQc0d3a1ZWdDBmWmEwcXJ0TXorbTZ0SlRBSGZaUThGbm1C\nNE1HNExXeTcvdz09Il0sCgogICAgInBhdGgtaXMtYWJzb2x1dGUiOiBbInBh\ndGgtaXMtYWJzb2x1dGVAMS4wLjEiLCAiIiwge30sICJzaGE1MTItQVZidzNV\nSjJlOWJxNjR2U2FTOUFtMGZqZTFQYThwYkdxVFRzbVhmYUlpTXBucjVEbERo\nZkpPdUxqOVNmOTVaUFZEQVVlckRmRWs4OE1QbVBlN1VDUWc9PSJdLAoKICAg\nICJwYXRoLWtleSI6IFsicGF0aC1rZXlAMy4xLjEiLCAiIiwge30sICJzaGE1\nMTItb2ptZU4wcWQreTBqc3pFdG9ZNDhyMFBlcTVkd01Fa0lsQ091NlE1ZjQx\nbGZrc3dYdUt0WXJoZ29UcExueUljSG0yNFVocXgrNVRxbTJJblN3TGhFNlE9\nPSJdLAoKICAgICJwYXRoLXBhcnNlIjogWyJwYXRoLXBhcnNlQDEuMC43Iiwg\nIiIsIHt9LCAic2hhNTEyLUxESnpQVkVFRVBSK3k0OHo5M0EwRWQweVhiOHBB\nQnlHV28vazVZWWRZZ3BZMi8yRXNPc2tzSnJxN2xPSHhyeXJWT24xZWpHNm9B\ncDhhaHZPSVFEOHN3PT0iXSwKCiAgICAicGF0aC10by1yZWdleHAiOiBbInBh\ndGgtdG8tcmVnZXhwQDYuMy4wIiwgIiIsIHt9LCAic2hhNTEyLVlocHc0VDlD\nNmhQcGdQZUEyOHVzMDdPSmVxWjVFelFUa2Jmd3Voc1VnMGMyMzdSb21Gb0VU\nSmdtcDJzYTNGLzQxZ2ZMRTZHNWNxY1l3em5tZUVlT2xRPT0iXSwKCiAgICAi\ncGljb2NvbG9ycyI6IFsicGljb2NvbG9yc0AxLjEuMSIsICIiLCB7fSwgInNo\nYTUxMi14Y2VIMnNuaHRiNU05bGlxRHNtRXc1NmxlMzc2bVRaa0VYL2pFYi9S\neE5GeWVnTnVsN2VOc2xDWFA5RkRqL0xjdTBYOEtFeU1jZVAybnRwYUhyREVW\nQT09Il0sCgogICAgInBpY29tYXRjaCI6IFsicGljb21hdGNoQDIuMy4xIiwg\nIiIsIHt9LCAic2hhNTEyLUpVM3RlSFROam1FMlZDR0Z6dVk4RVh6Q0RWd0Vx\nQjJhOGZzSXZ3YVN0SGhBV0pFZVZkMW8xUUQ4MENVNitaZEVYWFNMYlNzdUx3\nSmprQ0JXcVJRVVZBPT0iXSwKCiAgICAicGlyYXRlcyI6IFsicGlyYXRlc0A0\nLjAuNiIsICIiLCB7fSwgInNoYTUxMi1zYUxzSDdXZVlZUGlEMjVMRHVMUlJZ\nL2krNkhhUFlyNkcxT1VsTjM5b3R6a1NUeEtudWJSOVJUeFMzL0trNTBzMWcy\nSlRnRndXUURReXBsQzUvU0haZz09Il0sCgogICAgInBrZy1kaXIiOiBbInBr\nZy1kaXJANC4yLjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiZmluZC11\ncCI6ICJeNC4wLjAiIH0gfSwgInNoYTUxMi1IUkR6YmFLakMrQU9XVlh4QVUv\neDU0Q09HZUl2OWViKzZDa0RTUW9OVHQ0WHlXb0lKdnVQc1hpenh1L0ZyMjNF\naWVrYnRad21oMUljSUcvbC9hMTBHUT09Il0sCgogICAgInByZWx1ZGUtbHMi\nOiBbInByZWx1ZGUtbHNAMS4yLjEiLCAiIiwge30sICJzaGE1MTItdmtjRFBy\nUlpvMVFaTGJuNVJMR1BwZy9XbUlRNjVxb1dXaGNHS2YvYjVlcGxra2FyWDBt\nOXo4cHBDYXQ0bWxPcVVzV3B5TnVZZ08zVlJ5cllIU3pYNWc9PSJdLAoKICAg\nICJwcmV0dGllciI6IFsicHJldHRpZXJAMy4zLjMiLCAiIiwgeyAiYmluIjog\neyAicHJldHRpZXIiOiAiYmluL3ByZXR0aWVyLmNqcyIgfSB9LCAic2hhNTEy\nLWkydEROQTBPNUlyTU83NTdsZnJkUVpDYzJqUE5EVm50VjBtLys0d2hpRGZX\nYVRLZk1OZ1I3UXowTkFlR3ovblJxRjRtNS82Q0x6YlA0L2xpSHQxMkV3PT0i\nXSwKCiAgICAicHJldHRpZXItcGx1Z2luLW9yZ2FuaXplLWltcG9ydHMiOiBb\nInByZXR0aWVyLXBsdWdpbi1vcmdhbml6ZS1pbXBvcnRzQDQuMS4wIiwgIiIs\nIHsgInBlZXJEZXBlbmRlbmNpZXMiOiB7ICJwcmV0dGllciI6ICI+PTIuMCIs\nICJ0eXBlc2NyaXB0IjogIj49Mi45IiwgInZ1ZS10c2MiOiAiXjIuMS4wIiB9\nLCAib3B0aW9uYWxQZWVycyI6IFsidnVlLXRzYyJdIH0sICJzaGE1MTItNWFX\nUmRDZ3Y2NDV4YWE1OFg4bE94elpvaUhBbGRBUENobGpyL01UMGNyWFZPV1Ra\nK1N2bDRoSVdseituaVlTbE82aWtFNVVYa04xSnJSdklQMnV0MEE9PSJdLAoK\nICAgICJwcmV0dHktZm9ybWF0IjogWyJwcmV0dHktZm9ybWF0QDI5LjcuMCIs\nICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJAamVzdC9zY2hlbWFzIjogIl4y\nOS42LjMiLCAiYW5zaS1zdHlsZXMiOiAiXjUuMC4wIiwgInJlYWN0LWlzIjog\nIl4xOC4wLjAiIH0gfSwgInNoYTUxMi1QZGx3L29QeE4rYVhkbU05UjAwSlZD\nOVdWRm9DTFRLSnZEVkxnbUorcUFmZkJNeHNWODVsL0x1N3NOeDR6U3pQeW9M\nMmV1SW11RXdIaE9YZEVnTkZaUT09Il0sCgogICAgInByb21wdHMiOiBbInBy\nb21wdHNAMi40LjIiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAia2xldXIi\nOiAiXjMuMC4zIiwgInNpc3RlcmFuc2kiOiAiXjEuMC41IiB9IH0sICJzaGE1\nMTItTnhOdi9rTGd1Q0E3cDNqRThvTDJhRUJzckpXZ0Fha0JwZ21nSzZscFBX\nVitXdU9tWTZyMi96YkFWblArVDhiUWxBMG56SFhTSlNKVzBIcTd5bGFEMlE9\nPSJdLAoKICAgICJwc2wiOiBbInBzbEAxLjE1LjAiLCAiIiwgeyAiZGVwZW5k\nZW5jaWVzIjogeyAicHVueWNvZGUiOiAiXjIuMy4xIiB9IH0sICJzaGE1MTIt\nSlpkM2dNVkJBVlFrU3M2SGROWm85U2RvMExOY1FlTU5QM0NvekJKYjNKWUMv\nUVVZWlRuS3hQK2Y4b1dSWDRySFA1RXVyV3hxQUhUU3dVQ2psTkthMXc9PSJd\nLAoKICAgICJwdW55Y29kZSI6IFsicHVueWNvZGVAMi4zLjEiLCAiIiwge30s\nICJzaGE1MTItdll0N1VEMVU5V2c2MTM4c2hMdExPdmRBdSs4RHNDL2lsRnRF\nVkhjSCt3eWRjU3BORTIwQWZTT2R1ZjZNa1JGYWhMNUZZN1gxb1U3bktWWkZ0\nZnE4Rmc9PSJdLAoKICAgICJwdXJlLXJhbmQiOiBbInB1cmUtcmFuZEA2LjEu\nMCIsICIiLCB7fSwgInNoYTUxMi1iVldhd3ZvWm9CWXBwNnlJb1F0UVhIWmpt\nejM1UlNWSG5VT1RlZmw4VmNqcjhzblRQWTF3bnBTUE1XZWtjRndieEk2Z3Rt\nVDdyU1lQRnZ6NzFsZGlPQT09Il0sCgogICAgInF1ZXJ5c3RyaW5naWZ5Ijog\nWyJxdWVyeXN0cmluZ2lmeUAyLjIuMCIsICIiLCB7fSwgInNoYTUxMi1GSXFn\najJFVXZUYTdSNTB1MHJHc3lUZnR6alltdi9hM2hPMzQ1YlpOcnFhYk5xanRn\naURNZ21vNG1rVWpkK256VTVvRjNkQ2xLcUZJUFVLeWJVeXFvUT09Il0sCgog\nICAgInF1ZXVlLW1pY3JvdGFzayI6IFsicXVldWUtbWljcm90YXNrQDEuMi4z\nIiwgIiIsIHt9LCAic2hhNTEyLU51YU5TYTZmbEtUNUphU1lRekpvazA0SnpU\nTDFDQTZhR2h2NXJmTFczUGdxQStNMkNocFpRbkFDOGg4aTRaRmtCUzhYNVJx\na0RCSEE3cjRoZWozSzlBPT0iXSwKCiAgICAicmVhY3QtaXMiOiBbInJlYWN0\nLWlzQDE4LjMuMSIsICIiLCB7fSwgInNoYTUxMi0vTExNVnlhczBsampBdG9Z\naVBxWWlMOFZXWHpVVWRUaHJtVTUrbjIwRFp2K2ErQ2xSb2V2VXp3NUp4VStJ\nZWg1L2M4N3l0b1RCVjlHMUZpS2ZOSmRtZz09Il0sCgogICAgInJlcXVpcmUt\nZGlyZWN0b3J5IjogWyJyZXF1aXJlLWRpcmVjdG9yeUAyLjEuMSIsICIiLCB7\nfSwgInNoYTUxMi1mR3hFSTcrd3NHOXhydmRqc3JsbUwyMk9NVFRpSFJ3QU1y\nb2lFZU1ncThnem9MQy9QUXI3UnNSRFNUTFVnL2JaQVp0RitUVklrSGM2LzRS\nSUtydWkrUT09Il0sCgogICAgInJlcXVpcmVzLXBvcnQiOiBbInJlcXVpcmVz\nLXBvcnRAMS4wLjAiLCAiIiwge30sICJzaGE1MTItS2lnT0NIY29jVTNYT0RK\neHN1OGkvajhUOXR6VDRhZEhpZWN3T1JSUTBaWkZjcDdhaHdYdVJVMW0reXVP\nOTBDNVpVeUdlR2ZvY0hESTE0TTNMM3lEQVE9PSJdLAoKICAgICJyZXNvbHZl\nIjogWyJyZXNvbHZlQDEuMjIuMTAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjog\neyAiaXMtY29yZS1tb2R1bGUiOiAiXjIuMTYuMCIsICJwYXRoLXBhcnNlIjog\nIl4xLjAuNyIsICJzdXBwb3J0cy1wcmVzZXJ2ZS1zeW1saW5rcy1mbGFnIjog\nIl4xLjAuMCIgfSwgImJpbiI6IHsgInJlc29sdmUiOiAiYmluL3Jlc29sdmUi\nIH0gfSwgInNoYTUxMi1OUFJ5Ky9uY0lNZURsVEFzdXF3S0lpZmVyaWF3aGVm\nRkp0a05TVzBxWkpFcU1FYitxQnQvNzdCL2pHZWVlaytGMHVPZU4wNUNEYTZI\nWGJiSWd0Vlg0dz09Il0sCgogICAgInJlc29sdmUtY3dkIjogWyJyZXNvbHZl\nLWN3ZEAzLjAuMCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJyZXNvbHZl\nLWZyb20iOiAiXjUuMC4wIiB9IH0sICJzaGE1MTItT3JaYVgyTWIrckpDcEgv\nNkNwU3F0OXhGVnBOKyt4MDFYbk4yaWU5ZzZQNS8zeGVsTEFrWFdWQURwZHox\nSUhEL0tGZkVYeUU2VjBVMDFPUTNVTzJyRWc9PSJdLAoKICAgICJyZXNvbHZl\nLWZyb20iOiBbInJlc29sdmUtZnJvbUA0LjAuMCIsICIiLCB7fSwgInNoYTUx\nMi1wYi9NWW1Yc3RBa3lzUkZ4OHBpTkkxdEdGTlFJRkEzdmtFM0dxNEV1QTFk\nRjZnSHAvK3ZnWnFzQ0dKYXB2eThOM1ErNG83Rnd2cXVQSmNuWjdSWXk0Zz09\nIl0sCgogICAgInJlc29sdmUuZXhwb3J0cyI6IFsicmVzb2x2ZS5leHBvcnRz\nQDIuMC4zIiwgIiIsIHt9LCAic2hhNTEyLU9jWGpNc0dkaEw0WG5iU2hLcEFj\nU3FQTXpRb1lrWXloYkVhZVNrbzQ3TWpSUDlOZkVRTWhaa1hMMURvRmx0OUxX\nUW40WXR0cmRuVjZYMk9peXpCaStBPT0iXSwKCiAgICAicmV1c2lmeSI6IFsi\ncmV1c2lmeUAxLjAuNCIsICIiLCB7fSwgInNoYTUxMi1VOW5IODhhM2ZjL2Vr\nQ0YxbDAvVVAxSW9zaXVJanlUaDdoQnZYVk1IWWdWY2ZHdnQ4OTdYZ3VqMlVP\nTERlSTVCRzJtNy91d3lhTFZUNmZidEN3VHl6dz09Il0sCgogICAgInJ1bi1w\nYXJhbGxlbCI6IFsicnVuLXBhcmFsbGVsQDEuMi4wIiwgIiIsIHsgImRlcGVu\nZGVuY2llcyI6IHsgInF1ZXVlLW1pY3JvdGFzayI6ICJeMS4yLjIiIH0gfSwg\nInNoYTUxMi01bDRWeVpSODZMWi9sRHhaVFI2anFMOEFGRTJTMElGTE1QMjZB\nYmpzTFZBRHhIZGhCL2MwR1VzSCt5MzlVZkNpM2R6ejhPbFF1UG1uYUpPTW9E\nSFFCQT09Il0sCgogICAgInNhZmVyLWJ1ZmZlciI6IFsic2FmZXItYnVmZmVy\nQDIuMS4yIiwgIiIsIHt9LCAic2hhNTEyLVlabzNLODJTRDdSaXlpMEUxRVFQ\nb2pMejdrcGVwblNRSTlJeVBiSEhnMVhYWGV2YjVkSkk3dHB5TjJBRHhHY1Fi\nSEc3dmN5UkhrMGNid3FjUXJpVXRnPT0iXSwKCiAgICAic2F4ZXMiOiBbInNh\neGVzQDYuMC4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgInhtbGNoYXJz\nIjogIl4yLjIuMCIgfSB9LCAic2hhNTEyLXhBZzdTT25FaHJtNXpJM3B1T09L\neXkxT01jTWxJSlpZTkpZN3hMQndTemUwVWpoUExuV2ZqMkdGMkVwVDBqbXph\nSktJV0tITHNhU1NhamYzNWJjWW5BPT0iXSwKCiAgICAic2VtdmVyIjogWyJz\nZW12ZXJANy42LjMiLCAiIiwgeyAiYmluIjogeyAic2VtdmVyIjogImJpbi9z\nZW12ZXIuanMiIH0gfSwgInNoYTUxMi1vVmVrUDFjS3RJK0NURHZIV1lGVWNN\ndHNLLzAwd21BRWZ5cUtmTmRBUm04dTF3TlZoU2dhWDdBOGQ0VXVJbFVJNWU4\nNGlFd09oczdaUFlSbXpVOVU2QT09Il0sCgogICAgInNoZWJhbmctY29tbWFu\nZCI6IFsic2hlYmFuZy1jb21tYW5kQDIuMC4wIiwgIiIsIHsgImRlcGVuZGVu\nY2llcyI6IHsgInNoZWJhbmctcmVnZXgiOiAiXjMuMC4wIiB9IH0sICJzaGE1\nMTIta0h4cjJ6WnBZdGRtck4xcURqcnJYL1oxclIxa0c4RHgrZ2twSzFHNGVY\nbXZYc3dtY0UxaFRXQldZVXpscmFZdzEveVpwNll1RFk3N1l0dmJOMGRtREE9\nPSJdLAoKICAgICJzaGViYW5nLXJlZ2V4IjogWyJzaGViYW5nLXJlZ2V4QDMu\nMC4wIiwgIiIsIHt9LCAic2hhNTEyLTcrK2RGaHRjeDMzNTN1QmFxOEREUjRO\ndXhCZXRCekM3WlFPaG1UUUluSEVkNmJTclhkaUV5ekN2RzA3WjQ0VVlkTFNo\nV1V5WHQ1TS95aHo4ZWtjYjFBPT0iXSwKCiAgICAic2lnbmFsLWV4aXQiOiBb\nInNpZ25hbC1leGl0QDMuMC43IiwgIiIsIHt9LCAic2hhNTEyLXduRDJaRSts\nK1NQQy91b1MwdlhlRTlMMSswd3VhTXFLbGZ6OUFNVW8zOEpzeUxTQldTRmNI\nUjFScmk2MkxaYzEydkxyMWdiM2psN2l3UWhnd3BBYkdRPT0iXSwKCiAgICAi\nc2lzdGVyYW5zaSI6IFsic2lzdGVyYW5zaUAxLjAuNSIsICIiLCB7fSwgInNo\nYTUxMi1iTEdHbFIxUXhCY3lubjJkNVltRFg0TUdqbFp2eTJNUkJEUk5ITEo4\nVkk2bDYrOUZVaXlURk5KMEl2ZU9TUDBiY1hnVkRQUmNmR3FBMHBqYXFVcGZW\nZz09Il0sCgogICAgInNsYXNoIjogWyJzbGFzaEAzLjAuMCIsICIiLCB7fSwg\nInNoYTUxMi1nOVExaGFlYnkzNk9TU3R3YjRudENHR0dhS3NhVlNqUTY4ZkJ4\nb1FjdXRsNWZTMXZ1WTE4SDN3U3QzakZ5RnRya3grS3owVjFHODVBNE15QWRE\nTWkyUT09Il0sCgogICAgInNvdXJjZS1tYXAiOiBbInNvdXJjZS1tYXBAMC42\nLjEiLCAiIiwge30sICJzaGE1MTItVWpnYXB1bVdsYk1oa0JnelQ3WWtjNVlY\nVVQ0NkYwaUt1OFNHWHEwYmN3UDVkei9oMFBsajZlbkpxanoxWmJxMmw1V2Fx\nWW5yVmJ3V09XTXlGM0Y0N2c9PSJdLAoKICAgICJzb3VyY2UtbWFwLXN1cHBv\ncnQiOiBbInNvdXJjZS1tYXAtc3VwcG9ydEAwLjUuMTMiLCAiIiwgeyAiZGVw\nZW5kZW5jaWVzIjogeyAiYnVmZmVyLWZyb20iOiAiXjEuMC4wIiwgInNvdXJj\nZS1tYXAiOiAiXjAuNi4wIiB9IH0sICJzaGE1MTItU0hTS0ZIYWRqVkE1b1I0\nUFBxaHRBVmRjQld3UllWZDZnNmNBWG5JYlJpSXdjMkVoUHJUdUtVQmRTTHZs\nRUt5SVAzR0NmODlmbHR2Y1ppUDlNTUZBMXc9PSJdLAoKICAgICJzcHJpbnRm\nLWpzIjogWyJzcHJpbnRmLWpzQDEuMC4zIiwgIiIsIHt9LCAic2hhNTEyLUQ5\nY1Bna3ZMbFYzdDNJekwwRDBZTHZHQTlBaGs0UGN2VndVYk4wZFNHcjFhUDBO\ncnQ0QUVuVFVidUd2cXVFQzBtQTY0R3F0MWZ6aXJsUnM1aWJYeDhnPT0iXSwK\nCiAgICAic3RhY2stdXRpbHMiOiBbInN0YWNrLXV0aWxzQDIuMC42IiwgIiIs\nIHsgImRlcGVuZGVuY2llcyI6IHsgImVzY2FwZS1zdHJpbmctcmVnZXhwIjog\nIl4yLjAuMCIgfSB9LCAic2hhNTEyLVhsa1d2ZkltNlJtc1d0Tkp4K3VxdEtM\nUzhlcUZieFVnMFp6TFhxWTBjYUV5OWw3aHJ1WDhJcGlEbmpzTGF2b0JncUND\nUjcxVHFXTzhNYVhZaGVKM1JRPT0iXSwKCiAgICAic3RyaW5nLWxlbmd0aCI6\nIFsic3RyaW5nLWxlbmd0aEA0LjAuMiIsICIiLCB7ICJkZXBlbmRlbmNpZXMi\nOiB7ICJjaGFyLXJlZ2V4IjogIl4xLjAuMiIsICJzdHJpcC1hbnNpIjogIl42\nLjAuMCIgfSB9LCAic2hhNTEyLStsNnJOTjVmWUhOaFpaeTQxUlhzWXB0Q2pB\nMklnbXE0RUc3a1pBWUZRSTFFMVZUWGFycjZaUFhCZzZlcTdZNmVLNEZFaFk2\nQUpseXVGSWIvdi9TMFZRPT0iXSwKCiAgICAic3RyaW5nLXdpZHRoIjogWyJz\ndHJpbmctd2lkdGhANC4yLjMiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAi\nZW1vamktcmVnZXgiOiAiXjguMC4wIiwgImlzLWZ1bGx3aWR0aC1jb2RlLXBv\naW50IjogIl4zLjAuMCIsICJzdHJpcC1hbnNpIjogIl42LjAuMSIgfSB9LCAi\nc2hhNTEyLXdLeVFSUXBqSjBzSXA2MkVyU1pkR3NqTUpXc2FwNW9STmloSGh1\nNkc3SlZPLzlqSUI2VXlldkwrdFh1T3Fybmc4ai9jeEtUV3lXVXd2U1RyaWla\nei9nPT0iXSwKCiAgICAic3RyaXAtYW5zaSI6IFsic3RyaXAtYW5zaUA2LjAu\nMSIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJhbnNpLXJlZ2V4IjogIl41\nLjAuMSIgfSB9LCAic2hhNTEyLVkzOFZQU0hjcWtGckNwRm5ROXZ1U1htcXV1\ndjVvWE9LcEdlVDZhR3JyM28zR2M5QWxWYTZKQmZVU09DbmJ4R0daRisvMG9v\nSTdLclB1VVN6dFVkVTVBPT0iXSwKCiAgICAic3RyaXAtYm9tIjogWyJzdHJp\ncC1ib21ANC4wLjAiLCAiIiwge30sICJzaGE1MTItM3h1ckZ2NXRFZ2lpMzNa\naThKdHA1NXdFSUlMUjllaDM0RkFXMDBQWmYrSm5Tc1RtVi9pb2V3U2dRbDk3\nSkh2Z2pvUkd3UFNoc1dtK0lkcnhCMzVkMHc9PSJdLAoKICAgICJzdHJpcC1m\naW5hbC1uZXdsaW5lIjogWyJzdHJpcC1maW5hbC1uZXdsaW5lQDIuMC4wIiwg\nIiIsIHt9LCAic2hhNTEyLUJycHZmTkFFM2RjdnE3bGwzeFZ1bXpqS2paUTV0\nSTFzRVVJS3IzVW9rczBYVWw0NVN0M0ZsYXRWcWVmOXByazRqUkR6aFc2V1pn\nKzNiazkzeTZwTGpBPT0iXSwKCiAgICAic3RyaXAtanNvbi1jb21tZW50cyI6\nIFsic3RyaXAtanNvbi1jb21tZW50c0AzLjEuMSIsICIiLCB7fSwgInNoYTUx\nMi02ZlBjK1I0aWh3cVA2Ti9hSXYyZjFnTUg4bE9WdFdRSG9xQzR5SzZvU0RW\nVm9jdW1Bc2ZDcWprWG5xaVlNaG1Nd1MvbUVITHA3VmVobHQzcWw2bEVpZz09\nIl0sCgogICAgInN1cHBvcnRzLWNvbG9yIjogWyJzdXBwb3J0cy1jb2xvckA3\nLjIuMCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJoYXMtZmxhZyI6ICJe\nNC4wLjAiIH0gfSwgInNoYTUxMi1xcENBdlJsOXN0dU9IdmVLc243SG5jSlJ2\ndjUwMXFJYWNLelFsTy8rTHd4YzkrMHEyd0x5djREZnZ0ODAvRFBuMnBxT0Jz\nSmREaW9nWEdSOStPdndSdz09Il0sCgogICAgInN1cHBvcnRzLXByZXNlcnZl\nLXN5bWxpbmtzLWZsYWciOiBbInN1cHBvcnRzLXByZXNlcnZlLXN5bWxpbmtz\nLWZsYWdAMS4wLjAiLCAiIiwge30sICJzaGE1MTItb3QwV25YUzlmZ2RrZ0lj\nZVBlNlJITmsxV0E4K211UGE2Y1NqZVIzVjhLMjdxOUJCMXJURTNSMXA3SHYw\nejFaeUFjOHM2VnZ2OERJeVdmNjgxTUF0MHc9PSJdLAoKICAgICJzeW1ib2wt\ndHJlZSI6IFsic3ltYm9sLXRyZWVAMy4yLjQiLCAiIiwge30sICJzaGE1MTIt\nOVFOazVLd0RGK0J2eitQeU9ia21TWWpJNWtzVlVZdGpXN0FVMjJyMk5LY2ZM\nSmNYcDk2aGtEV1UzK1huZE9zVWIrQVE5UWhmemZDVDJPK0NOV1Q1VHc9PSJd\nLAoKICAgICJ0ZXN0LWV4Y2x1ZGUiOiBbInRlc3QtZXhjbHVkZUA2LjAuMCIs\nICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJAaXN0YW5idWxqcy9zY2hlbWEi\nOiAiXjAuMS4yIiwgImdsb2IiOiAiXjcuMS40IiwgIm1pbmltYXRjaCI6ICJe\nMy4wLjQiIH0gfSwgInNoYTUxMi1jQUdXUEl5T0hVNnpsbWc4OGp3bTdWUnlY\nbk1ON2lWNjhPR0FiWURrL01oL3hDL3B6VlBsUXRZNm5nb0lILzUvdGNpdWhH\nZnZFU1U4R3JIcmN4RDU2dz09Il0sCgogICAgInRleHQtdGFibGUiOiBbInRl\neHQtdGFibGVAMC4yLjAiLCAiIiwge30sICJzaGE1MTItTis4VWlzQVhER2s4\nUEZYUDRIQXpWUjluYmZtVkozellMQVdpVElvcUM1djVpc2luaHIrcjV1YU84\nKzdyM0JNZnVOSXVmSXNBN1JkcFZnYWNDMmNTcHc9PSJdLAoKICAgICJ0bXBs\nIjogWyJ0bXBsQDEuMC41IiwgIiIsIHt9LCAic2hhNTEyLTNmMHVPRUFRd0lx\nR3VXVzJNVnpZZzhmVi9RTm5jL0lwdUpORzgzN3JMdWN6QWFMVkhzbFdIWlFq\nNElHaUVsNUhzM2trYmh3TDlBYjdIcnNtdWorU213PT0iXSwKCiAgICAidG8t\ncmVnZXgtcmFuZ2UiOiBbInRvLXJlZ2V4LXJhbmdlQDUuMC4xIiwgIiIsIHsg\nImRlcGVuZGVuY2llcyI6IHsgImlzLW51bWJlciI6ICJeNy4wLjAiIH0gfSwg\nInNoYTUxMi02NVA3aXo2WDV5RXIxY3djZ3ZReGJiSXc3VWszZ095NWRJZHRa\nNHJEdmVMcWhyZEpQK0xpL0h4NnR5SzBORWIrMkdDeW5lQ01KaUdxckFEQ1NO\nazhzUT09Il0sCgogICAgInRvdWdoLWNvb2tpZSI6IFsidG91Z2gtY29va2ll\nQDQuMS40IiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgInBzbCI6ICJeMS4x\nLjMzIiwgInB1bnljb2RlIjogIl4yLjEuMSIsICJ1bml2ZXJzYWxpZnkiOiAi\nXjAuMi4wIiwgInVybC1wYXJzZSI6ICJeMS41LjMiIH0gfSwgInNoYTUxMi1M\nb281VVV2TEQ5U2NaNmpoOGJlWDFUNnNPMXcyL01wQ1JwRVA3VjI4MEdLTVZV\nUTBKemFyMlUzVUpQc3JkYnppTEVNTWh1M1VqbnEvL3JoaUZ1SWVhZz09Il0s\nCgogICAgInRyNDYiOiBbInRyNDZAMy4wLjAiLCAiIiwgeyAiZGVwZW5kZW5j\naWVzIjogeyAicHVueWNvZGUiOiAiXjIuMS4xIiB9IH0sICJzaGE1MTItbDdG\ndmZBSGxjbXVscDhrcitmbHBRWm1Wd3R1N25mUlY3Tlp1anROME9xRVM4RUw0\nTzRlMHFxekwwREM1Z0F2eC9aQy85bGs2cmhjVXdZdmtCbkJuWUE9PSJdLAoK\nICAgICJ0cy1hcGktdXRpbHMiOiBbInRzLWFwaS11dGlsc0AxLjQuMyIsICIi\nLCB7ICJwZWVyRGVwZW5kZW5jaWVzIjogeyAidHlwZXNjcmlwdCI6ICI+PTQu\nMi4wIiB9IH0sICJzaGE1MTItaTNlTUc3N1VUTUQwaFpoZ1JTNTYycHY4M1JD\nNnVrU0FDMkdNTldjKzlkaWVoLytqRE01dTVZRytOSFg2Vk5EUkhRY0h3bXNU\nSGN0UDlMaGJDM1d4Vnc9PSJdLAoKICAgICJ0cy1qZXN0IjogWyJ0cy1qZXN0\nQDI5LjIuNSIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJicy1sb2dnZXIi\nOiAiXjAuMi42IiwgImVqcyI6ICJeMy4xLjEwIiwgImZhc3QtanNvbi1zdGFi\nbGUtc3RyaW5naWZ5IjogIl4yLjEuMCIsICJqZXN0LXV0aWwiOiAiXjI5LjAu\nMCIsICJqc29uNSI6ICJeMi4yLjMiLCAibG9kYXNoLm1lbW9pemUiOiAiXjQu\nMS4yIiwgIm1ha2UtZXJyb3IiOiAiXjEuMy42IiwgInNlbXZlciI6ICJeNy42\nLjMiLCAieWFyZ3MtcGFyc2VyIjogIl4yMS4xLjEiIH0sICJwZWVyRGVwZW5k\nZW5jaWVzIjogeyAiQGJhYmVsL2NvcmUiOiAiPj03LjAuMC1iZXRhLjAgPDgi\nLCAiQGplc3QvdHJhbnNmb3JtIjogIl4yOS4wLjAiLCAiQGplc3QvdHlwZXMi\nOiAiXjI5LjAuMCIsICJiYWJlbC1qZXN0IjogIl4yOS4wLjAiLCAiamVzdCI6\nICJeMjkuMC4wIiwgInR5cGVzY3JpcHQiOiAiPj00LjMgPDYiIH0sICJvcHRp\nb25hbFBlZXJzIjogWyJAYmFiZWwvY29yZSIsICJAamVzdC90cmFuc2Zvcm0i\nLCAiQGplc3QvdHlwZXMiLCAiYmFiZWwtamVzdCJdLCAiYmluIjogeyAidHMt\namVzdCI6ICJjbGkuanMiIH0gfSwgInNoYTUxMi1LRDh6QjJhQVpyY0tJZEdr\nNE93cEpnZ2VMY0gxRmdySUNxRFNST1dxbG5KWEdDWEs0TW42RmNkSzJCNjY3\nMFhyNzNsSE1HMWtIdzhSODdBMGVjWit2QT09Il0sCgogICAgInR5cGUtY2hl\nY2siOiBbInR5cGUtY2hlY2tAMC40LjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVz\nIjogeyAicHJlbHVkZS1scyI6ICJeMS4yLjEiIH0gfSwgInNoYTUxMi1YbGVV\nb2M5dXdHWHFqV3dYYVVUWkFtek1jRlo1ODU4UUEydnZ4MVVyNXhJY2l4WElQ\nKzhMbkZEZ1JwbFUzMHVzNnRlcWRsc2tGZnUrYWU0Szc5T29ldz09Il0sCgog\nICAgInR5cGUtZGV0ZWN0IjogWyJ0eXBlLWRldGVjdEA0LjAuOCIsICIiLCB7\nfSwgInNoYTUxMi0wZnIvbUlIMWRsTyt4N1RsY015K2JJRHFLUHN3LzcwdFZ5\nZUhXNzg3Z29RamhtcWFaZTEwdXdMdWp1Yks5cTlMZzZGaWhvMUtVS0RZejBa\nN2s3ZzUvZz09Il0sCgogICAgInR5cGUtZmVzdCI6IFsidHlwZS1mZXN0QDAu\nMjEuMyIsICIiLCB7fSwgInNoYTUxMi10MHJ6QnE4N20zZlZjZHVIRFVGaEtt\neXlYKzllbzZXUWpadmY1MUVhL00wUTcrVDM3NEpwMWFVaXlVbDBHS3hwOE0v\nT0VUVkhTRHZta3lQZ3ZYK1gydz09Il0sCgogICAgInR5cGVzY3JpcHQiOiBb\nInR5cGVzY3JpcHRANS43LjIiLCAiIiwgeyAiYmluIjogeyAidHNjIjogImJp\nbi90c2MiLCAidHNzZXJ2ZXIiOiAiYmluL3Rzc2VydmVyIiB9IH0sICJzaGE1\nMTItaTV0NjZSSHhEdlZONDBIZkRkMVBzRVRoR05ubE1DTVQzak1VdW9oOS8w\nVGFxV2V2Tm9udGFjdW5XeU4wMkxBOS9mSWJFV2xjSFpjZ1RLYjlRb2FMZmc9\nPSJdLAoKICAgICJ1bmRpY2ktdHlwZXMiOiBbInVuZGljaS10eXBlc0A2LjE5\nLjgiLCAiIiwge30sICJzaGE1MTItdmUyS1A2Zi9KbmJQQkZ5b2JHSHVlckM5\nZzFGWUduL0Y4bjFMV1R3TnhDRXpkNklmcVR3VVFjTlhnRXRtbVE2RGxSckMx\naHJTckJuQ1pQb2tSckRIanc9PSJdLAoKICAgICJ1bml2ZXJzYWxpZnkiOiBb\nInVuaXZlcnNhbGlmeUAwLjIuMCIsICIiLCB7fSwgInNoYTUxMi1DSjFRZ0tt\nTmczQ3d2QXYva09GbXRuRU4wNWYwRC9jbjlRbnRnTk9RbFFGOWRndlZUSGoz\ndCs4SlBkanFhd0NIazdWL0tBK2ZiVXF6WjlYV2hjcVBVZz09Il0sCgogICAg\nInVwZGF0ZS1icm93c2Vyc2xpc3QtZGIiOiBbInVwZGF0ZS1icm93c2Vyc2xp\nc3QtZGJAMS4xLjEiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiZXNjYWxh\nZGUiOiAiXjMuMi4wIiwgInBpY29jb2xvcnMiOiAiXjEuMS4wIiB9LCAicGVl\nckRlcGVuZGVuY2llcyI6IHsgImJyb3dzZXJzbGlzdCI6ICI+PSA0LjIxLjAi\nIH0sICJiaW4iOiB7ICJ1cGRhdGUtYnJvd3NlcnNsaXN0LWRiIjogImNsaS5q\ncyIgfSB9LCAic2hhNTEyLVI4VXpDYWE5QXorMzhSRVBpSjF0WGxJbVRKWGxW\nZmdIWnNnbHdCRC9rNm5qNzZjdHNIMUUzcTRkb0dydWtpTFFkM3NHUVl1NTZy\nNStsbzVyOTRsMjlBPT0iXSwKCiAgICAidXJpLWpzIjogWyJ1cmktanNANC40\nLjEiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAicHVueWNvZGUiOiAiXjIu\nMS4wIiB9IH0sICJzaGE1MTItN3JLVXl5MzNRMXljOThwUTFEQW1MdHdYMTA5\nRjdUSWZXbFcxWWRvOFdsMWlpMVNlSGllZWgwSEhmUGVMMmZNWEs2ejBzOGVj\nS3M5ZnJDdUxKdm5kQmc9PSJdLAoKICAgICJ1cmwtcGFyc2UiOiBbInVybC1w\nYXJzZUAxLjUuMTAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAicXVlcnlz\ndHJpbmdpZnkiOiAiXjIuMS4xIiwgInJlcXVpcmVzLXBvcnQiOiAiXjEuMC4w\nIiB9IH0sICJzaGE1MTItV3lwY2ZpUmhmZVVQOXZ2RjBqNnJ3MEozaHJXcnc2\naVp2MysyMmg2aVJNSi84ejFUajZYZkxQNERzVWl4NU1oTVBuWHBpSERvS3lv\nWi9iZENrd0JDaVE9PSJdLAoKICAgICJ2OC10by1pc3RhbmJ1bCI6IFsidjgt\ndG8taXN0YW5idWxAOS4zLjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAi\nQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjEyIiwgIkB0eXBl\ncy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4xIiwgImNvbnZlcnQt\nc291cmNlLW1hcCI6ICJeMi4wLjAiIH0gfSwgInNoYTUxMi1raUdVYWxXTity\nZ0JKLzFPSFpzQnRVNHJYWk9mai83cktReFVMS2xJend6UVN2TUpVVU5nUHdK\nRUVoN2dVNnhFVnhDMGFob09Cdk4yWUk4R0g2Rk5nQT09Il0sCgogICAgIncz\nYy14bWxzZXJpYWxpemVyIjogWyJ3M2MteG1sc2VyaWFsaXplckA0LjAuMCIs\nICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJ4bWwtbmFtZS12YWxpZGF0b3Ii\nOiAiXjQuMC4wIiB9IH0sICJzaGE1MTItZCtCRkh6YmlDeDZ6R2Z6MEh5UTZS\nZzY5dzlrMTludmlKc3BhajR5TnNjR2pySHU5NHNWUCthUm03NXlFYkNoK3Iy\nL3lSKzdxNmh1eDlMVnRidVRHQnc9PSJdLAoKICAgICJ3YWxrZXIiOiBbIndh\nbGtlckAxLjAuOCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJtYWtlZXJy\nb3IiOiAiMS4wLjEyIiB9IH0sICJzaGE1MTItdHMvOEU4bDViN2tZMHZsV0xl\nd09rRFhNbVBkTGNWVjRHbU9RTHl4dVNzd0lKc3dlZUZadEFzTUY3azFOc3p6\nK1RZQlFybFlSbXpPbnIzOTh5MUplbVE9PSJdLAoKICAgICJ3ZWJpZGwtY29u\ndmVyc2lvbnMiOiBbIndlYmlkbC1jb252ZXJzaW9uc0A3LjAuMCIsICIiLCB7\nfSwgInNoYTUxMi1Wd2RkQnVrRHp1NzFvZmZBUVI5NzV1bkJJR3FmS1pwTSs4\nWlg2eVNrOG5ZaFZvbzVDWWFaeXp0M1lCdll0UnRPK2FvR2xxeFBnL0I4N05H\nVlovZnU2Zz09Il0sCgogICAgIndoYXR3Zy1lbmNvZGluZyI6IFsid2hhdHdn\nLWVuY29kaW5nQDIuMC4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgImlj\nb252LWxpdGUiOiAiMC42LjMiIH0gfSwgInNoYTUxMi1wNDFvZ3llTVVydzNq\nV2NsSFdUUWcxazA1RFNWWFBMY1Z4UlRZc1hVaytab29PQ1pMY29ZZ1BaL0hM\nL0QvTit1UVBPdGNwMW1lMVdoQkVhWDAybWhXZz09Il0sCgogICAgIndoYXR3\nZy1taW1ldHlwZSI6IFsid2hhdHdnLW1pbWV0eXBlQDMuMC4wIiwgIiIsIHt9\nLCAic2hhNTEyLW50K04yZHpJdXRWUnhBUngxbmdoUEtHdjF4SGlrVTdIS2Rm\nYWZLa0xOTGluZG1QVS9jaDNVMzFOT0NHR0EvZG1QY21iMVZsb2ZPMHZuS0Fj\nc20wby9RPT0iXSwKCiAgICAid2hhdHdnLXVybCI6IFsid2hhdHdnLXVybEAx\nMS4wLjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAidHI0NiI6ICJeMy4w\nLjAiLCAid2ViaWRsLWNvbnZlcnNpb25zIjogIl43LjAuMCIgfSB9LCAic2hh\nNTEyLVJLVDhIRXhNcG9ZeDRpZ01pVk1ZODNsTjZVZUlUS0psQlErdlIvOFpK\nOE9DZFNpTjNSd0NxKzlnSDArWHpqMCs1SXJNNmk0ai82THV2emJaSVFnRWNR\nPT0iXSwKCiAgICAid2hpY2giOiBbIndoaWNoQDIuMC4yIiwgIiIsIHsgImRl\ncGVuZGVuY2llcyI6IHsgImlzZXhlIjogIl4yLjAuMCIgfSwgImJpbiI6IHsg\nIm5vZGUtd2hpY2giOiAiLi9iaW4vbm9kZS13aGljaCIgfSB9LCAic2hhNTEy\nLUJMSTNUbDFUVzNQdmw3MGwzeXEzWTY0aSthd3B3WHFzR0JZV2trcU10bmJY\nZ3JNRCt5ajdyaFcwa3VFRHh6SmFZWEdqRVc1b2dhcEtOTUVLTk1qaWJBPT0i\nXSwKCiAgICAid29yZC13cmFwIjogWyJ3b3JkLXdyYXBAMS4yLjUiLCAiIiwg\ne30sICJzaGE1MTItQk4yMkI1ZWFNTUk5VU10anJHZDVnNWVDWVBwQ1BEVXkw\nRkpYYllzYVQ1ell4akZPY2tTNTNTUURFM3BXa1ZvV3BIWFZiM0JyWWNFTjRU\nd2E1NUI1Y0E9PSJdLAoKICAgICJ3cmFwLWFuc2kiOiBbIndyYXAtYW5zaUA3\nLjAuMCIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJhbnNpLXN0eWxlcyI6\nICJeNC4wLjAiLCAic3RyaW5nLXdpZHRoIjogIl40LjEuMCIsICJzdHJpcC1h\nbnNpIjogIl42LjAuMCIgfSB9LCAic2hhNTEyLVlWR0lqMmthbUxTVHh3Nk5z\nWmpvQnhmU3dzbjB5Y2Rlc21jNHArUTIxYzV6UHVaMXBsK05meFZkeFB0ZEh2\nbU5WT1E2WFNZRzRBVXR5dC9GaTdEMTZRPT0iXSwKCiAgICAid3JhcHB5Ijog\nWyJ3cmFwcHlAMS4wLjIiLCAiIiwge30sICJzaGE1MTItbDRTcC9EUnNlb3I5\nd0w2RXZWMitUdVFuNjNkTWtQalovc3A5WGtnaFRFYlY5S2xQUzF4VXNaM3U3\nL0lRTzR3eHRjRkI0YmdwUVBSY1IzUUN2ZXpQY1E9PSJdLAoKICAgICJ3cml0\nZS1maWxlLWF0b21pYyI6IFsid3JpdGUtZmlsZS1hdG9taWNANC4wLjIiLCAi\nIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiaW11cm11cmhhc2giOiAiXjAuMS40\nIiwgInNpZ25hbC1leGl0IjogIl4zLjAuNyIgfSB9LCAic2hhNTEyLTdLeGF1\nVWRCbVNkV25tcGFHRmcrcHBOaktGOHVOTHJ5OEx5emphdVFET1ZPTmZGTE5L\nckt2UU94Wi9WdVRJY1MvZ2dlL1lOYWhmNVJJSVFXVFNhcmxnPT0iXSwKCiAg\nICAid3MiOiBbIndzQDguMTguMCIsICIiLCB7ICJwZWVyRGVwZW5kZW5jaWVz\nIjogeyAiYnVmZmVydXRpbCI6ICJeNC4wLjEiLCAidXRmLTgtdmFsaWRhdGUi\nOiAiPj01LjAuMiIgfSwgIm9wdGlvbmFsUGVlcnMiOiBbImJ1ZmZlcnV0aWwi\nLCAidXRmLTgtdmFsaWRhdGUiXSB9LCAic2hhNTEyLThWYmZXZkhMYmJ3dTMr\nTjZPS3NPTXBCZFQ0a1hQRERCOWNKazJiSjZtaDl1Y3hkbG5OdkgxZStyb1lr\nS21OOU54dzJ5ano3VnplTzlvT3oyekowNFB3PT0iXSwKCiAgICAieG1sLW5h\nbWUtdmFsaWRhdG9yIjogWyJ4bWwtbmFtZS12YWxpZGF0b3JANC4wLjAiLCAi\nIiwge30sICJzaGE1MTItSUNQMmUranNIdkFqMkUybElIeGE1dGpYUmxLREpv\nNElkdlB2Q1hiWFFHZHpTZm1TcE5WeUlLTXZvWkhqRFk5RFAwelYxN2lJODVv\nOTB2UkZYTmNjUnc9PSJdLAoKICAgICJ4bWxjaGFycyI6IFsieG1sY2hhcnNA\nMi4yLjAiLCAiIiwge30sICJzaGE1MTItSlpuREtLOEIwUkNEdzg0Rk5kREFJ\ncFpLK0p1SncrczdMejhua3NJN1NJdVUzVVhKSnNsVXRoc2krdVdCVVlPd1BG\nd1c3VzdQUkxSZlVLcHhqdGpGQ3c9PSJdLAoKICAgICJ4c3MiOiBbInhzc0Ax\nLjAuMTUiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAiY29tbWFuZGVyIjog\nIl4yLjIwLjMiLCAiY3NzZmlsdGVyIjogIjAuMC4xMCIgfSwgImJpbiI6IHsg\nInhzcyI6ICJiaW4veHNzIiB9IH0sICJzaGE1MTItRlZkbFZWQzY3V09JUHZm\nT3dob01FVFY3MmY2R2JXN2FPYWJCQzNXeE4vb1Vkb0VNRHlMejRPZ1J2NS9n\nY2syWmVOcUVRdStUYjBrbG9vdlhPZnBZVmc9PSJdLAoKICAgICJ5MThuIjog\nWyJ5MThuQDUuMC44IiwgIiIsIHt9LCAic2hhNTEyLTBwZkZ6ZWdlRFdKSEpJ\nQW1UTFJQMkR3SGpkRjVzN2pvOXR1enRkUXhBaElOQ2R2UyszbkdJTnFQZDAw\nQXBocUpSLzBMaEFOVVM2Lys3U0NiOThZT2ZBPT0iXSwKCiAgICAieWFsbGlz\ndCI6IFsieWFsbGlzdEAzLjEuMSIsICIiLCB7fSwgInNoYTUxMi1hNFVHUWFX\nUEg1OW1PWFVZbkFHMmV3bmNRUzRpNEY0M1R2M0pvQU0rczJWREFtUzlOc0s4\nR3BETUxyQ0hQa3NGVDdoM0s2VE9vVU5uMnBiN1JvWHg0Zz09Il0sCgogICAg\nInlhcmdzIjogWyJ5YXJnc0AxNy43LjIiLCAiIiwgeyAiZGVwZW5kZW5jaWVz\nIjogeyAiY2xpdWkiOiAiXjguMC4xIiwgImVzY2FsYWRlIjogIl4zLjEuMSIs\nICJnZXQtY2FsbGVyLWZpbGUiOiAiXjIuMC41IiwgInJlcXVpcmUtZGlyZWN0\nb3J5IjogIl4yLjEuMSIsICJzdHJpbmctd2lkdGgiOiAiXjQuMi4zIiwgInkx\nOG4iOiAiXjUuMC41IiwgInlhcmdzLXBhcnNlciI6ICJeMjEuMS4xIiB9IH0s\nICJzaGE1MTItN2RTenpSUSsrQ0tuTkkva3JLbllSVjdKS0tQVVhNRWg2MXNv\nYUhLZzltcldFaHpGV2hGbnhQeEdsKzY5Y0QxT3U2M0MxM05VUENubUljcnZx\nQ3VNNnc9PSJdLAoKICAgICJ5YXJncy1wYXJzZXIiOiBbInlhcmdzLXBhcnNl\nckAyMS4xLjEiLCAiIiwge30sICJzaGE1MTItdFZwc0pXN0RkamVjQWlGcGJJ\nQjFlM3F4SVFzRTZOb1BjNS9lVGRyYmJJQzRoMExWc1dobm9hM2crbTJIY2xC\nSXVqSHpzeFo0VkpWQStHVXVjMi9MQnc9PSJdLAoKICAgICJ5b2N0by1xdWV1\nZSI6IFsieW9jdG8tcXVldWVAMC4xLjAiLCAiIiwge30sICJzaGE1MTItclZr\nc3Zzbk5DZEovb2hHYzZ4Z1B3eU44ZWhlQ3hzaUxNOG14dUUvdC9tT1ZxSmV3\nUHVPMW1pTHBUSFFpUmdUS0NMZXhMNE1lQUZWYWd0czdIbU5aMlE9PSJdLAoK\nICAgICJAYmFiZWwvY29yZS9zZW12ZXIiOiBbInNlbXZlckA2LjMuMSIsICIi\nLCB7ICJiaW4iOiB7ICJzZW12ZXIiOiAiYmluL3NlbXZlci5qcyIgfSB9LCAi\nc2hhNTEyLUJSN1Z2RENWSE8rcTJ4QkVXc2t4UzZESkUxcVJuYjdEeHpVcm9n\nYjcxQ1dvU2ZpY0J4WXNpQUdkK0tsMG1tcS9NcHJHOXlBclJreXJReFRPNlhq\nTXpBPT0iXSwKCiAgICAiQGJhYmVsL2hlbHBlci1jb21waWxhdGlvbi10YXJn\nZXRzL3NlbXZlciI6IFsic2VtdmVyQDYuMy4xIiwgIiIsIHsgImJpbiI6IHsg\nInNlbXZlciI6ICJiaW4vc2VtdmVyLmpzIiB9IH0sICJzaGE1MTItQlI3VnZE\nQ1ZITytxMnhCRVdza3hTNkRKRTFxUm5iN0R4elVyb2diNzFDV29TZmljQnhZ\nc2lBR2QrS2wwbW1xL01wckc5eUFyUmt5clF4VE82WGpNekE9PSJdLAoKICAg\nICJAYmFiZWwvdHJhdmVyc2UvZ2xvYmFscyI6IFsiZ2xvYmFsc0AxMS4xMi4w\nIiwgIiIsIHt9LCAic2hhNTEyLVdPQnAvRUVHVWlJc0pTcDd3Y3YveTZNTyts\nVjlVb25jV3F4dUZmbThlQnd6V05neWZCZDZHeitJZUtROWpDbXlob0g5OWcx\nNU0zVCtRYVZIRmppelZBPT0iXSwKCiAgICAiQGVzbGludC1jb21tdW5pdHkv\nZXNsaW50LXV0aWxzL2VzbGludC12aXNpdG9yLWtleXMiOiBbImVzbGludC12\naXNpdG9yLWtleXNAMy40LjMiLCAiIiwge30sICJzaGE1MTItd3BjK0xYZWl5\naWlzeFBsRWtVelU2c3Z5UzFmcklPM01neGoxZmR5N1BtOFlnemd1YXgyTjNG\nYS9EL2FnMVdxYk9wcmRJK3VZNndNVWw4L2EyRytpYWc9PSJdLAoKICAgICJA\naHVtYW5mcy9ub2RlL0BodW1hbndob2NvZGVzL3JldHJ5IjogWyJAaHVtYW53\naG9jb2Rlcy9yZXRyeUAwLjMuMSIsICIiLCB7fSwgInNoYTUxMi1KQnhrRVJ5\nZ243QnYvR2JONVJ2OFVsNkxWa25TKzVCcDZSZ0RDL084Z0VCVS95ZUg1VWk1\nQy9PbFdyVGI2cWN0N0xqamZUNlJlMk54QjBsbjB5WXliQT09Il0sCgogICAg\nIkBpc3RhbmJ1bGpzL2xvYWQtbnljLWNvbmZpZy9jYW1lbGNhc2UiOiBbImNh\nbWVsY2FzZUA1LjMuMSIsICIiLCB7fSwgInNoYTUxMi1MMjhTVEIxNzBud1dT\nNjNVanRsRU9FM2RsZFFBcGFKWFprT0kxdU1GZnpmM3JSdVBlZ0hhSGVzeWVl\nK1l4UStXNlN2UkRRVjZVcmRPZFJpUjE1M3dKZz09Il0sCgogICAgIkBpc3Rh\nbmJ1bGpzL2xvYWQtbnljLWNvbmZpZy9maW5kLXVwIjogWyJmaW5kLXVwQDQu\nMS4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgImxvY2F0ZS1wYXRoIjog\nIl41LjAuMCIsICJwYXRoLWV4aXN0cyI6ICJeNC4wLjAiIH0gfSwgInNoYTUx\nMi1QcE93QWRRL1lsWFEydmo4YTNoOElpcER1WVJpM3djZVZRUUdZV3hOSU5j\nY3E0MEFudzdCbHNFWENNYnQxWnQrT0xBNkZxOXN1SXBJV0QwT3NuSVNsdz09\nIl0sCgogICAgIkBpc3RhbmJ1bGpzL2xvYWQtbnljLWNvbmZpZy9qcy15YW1s\nIjogWyJqcy15YW1sQDMuMTQuMSIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7\nICJhcmdwYXJzZSI6ICJeMS4wLjciLCAiZXNwcmltYSI6ICJeNC4wLjAiIH0s\nICJiaW4iOiB7ICJqcy15YW1sIjogImJpbi9qcy15YW1sLmpzIiB9IH0sICJz\naGE1MTItb2tNSDdPWFhKN1lyTjlPazMvU1hybnU0aVg5eU9rKzI1bnFYNGlt\nUzJucHV2VFlEbW8vUUVab3F3WmtZYUlEazNqVnZCT1RPSUVnRWhhTE95bkJT\nOWc9PSJdLAoKICAgICJAaXN0YW5idWxqcy9sb2FkLW55Yy1jb25maWcvcmVz\nb2x2ZS1mcm9tIjogWyJyZXNvbHZlLWZyb21ANS4wLjAiLCAiIiwge30sICJz\naGE1MTItcVlnOUtQMjRkRDVxa2E5SjQ3ZDBhVmt5ME4rYjRmVFU4OUxOOWlE\nbmpCNXdha3NpQzQ5cnZNQjBQclVKUUdvVG1INTBYUGlxT3ZBakRmYWlqR3hZ\nWnc9PSJdLAoKICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXNjcmlwdC1l\nc3RyZWUvbWluaW1hdGNoIjogWyJtaW5pbWF0Y2hAOS4wLjUiLCAiIiwgeyAi\nZGVwZW5kZW5jaWVzIjogeyAiYnJhY2UtZXhwYW5zaW9uIjogIl4yLjAuMSIg\nfSB9LCAic2hhNTEyLUc2VDBaWDQ4eGdveng3NTg3a29lWDlZczJOWXk2R212\nLy9QODlzRXRlOVY5d2hJYXBNTkY0aWRLeG5XMlF0Q2NMaVRXbGIvd2ZDYWJB\ndEFGV2hoQm93PT0iXSwKCiAgICAiYmFiZWwtcGx1Z2luLWlzdGFuYnVsL2lz\ndGFuYnVsLWxpYi1pbnN0cnVtZW50IjogWyJpc3RhbmJ1bC1saWItaW5zdHJ1\nbWVudEA1LjIuMSIsICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJAYmFiZWwv\nY29yZSI6ICJeNy4xMi4zIiwgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMTQuNyIs\nICJAaXN0YW5idWxqcy9zY2hlbWEiOiAiXjAuMS4yIiwgImlzdGFuYnVsLWxp\nYi1jb3ZlcmFnZSI6ICJeMy4yLjAiLCAic2VtdmVyIjogIl42LjMuMCIgfSB9\nLCAic2hhNTEyLXB6cXRwMzFuTHYvWEZPelhHdXZoQ2I4cWhqbVRWbzV2alZr\nMTlYRTRDUmxTV3owS29lSjNidzlYc0E3bk9wOVlCZjRxSGp3QnhrRHpLY01F\nL0oyOVlnPT0iXSwKCiAgICAiY2hhbGsvYW5zaS1zdHlsZXMiOiBbImFuc2kt\nc3R5bGVzQDQuMy4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgImNvbG9y\nLWNvbnZlcnQiOiAiXjIuMC4xIiB9IH0sICJzaGE1MTItemJCOXJDSkFUMXJi\namlWRGIyaHFLRkhOWUx4Z3RrOE5VUnhaM0lad0QzRjZOdHhiWFpRQ25uU2kx\nTGt4K0lEb2hkUGxGcDIyMndWQUxJaGVaSlFTRWc9PSJdLAoKICAgICJjc3Nz\ndHlsZS9jc3NvbSI6IFsiY3Nzb21AMC4zLjgiLCAiIiwge30sICJzaGE1MTIt\nYjB0R0hiZmVnYmhQSnB4cGlCUFUyc0NraWdBcXRNOU8xMjFsZTZiYk9sZ3lW\nK055R3lDbVZmSjZRVzllUmp6OENwTmZXRU9ZQklNSUdSWWtMd3NJWWc9PSJd\nLAoKICAgICJlc2xpbnQvQGVzbGludC9qcyI6IFsiQGVzbGludC9qc0A5LjE0\nLjAiLCAiIiwge30sICJzaGE1MTItcEZvRXRGV0NQeURPbCtDNklmdCt3QzdS\nbzg5b3RqaWdDZjV2Y3VXcVdncU5TUWJScnBqU3ZkZUU2b2ZMejRkSG15eEQ1\nZjdnSWRHVDQrcDM2TDZUd2c9PSJdLAoKICAgICJmYXN0LWdsb2IvZ2xvYi1w\nYXJlbnQiOiBbImdsb2ItcGFyZW50QDUuMS4yIiwgIiIsIHsgImRlcGVuZGVu\nY2llcyI6IHsgImlzLWdsb2IiOiAiXjQuMC4xIiB9IH0sICJzaGE1MTItQU9J\nZ1NRQ2VwaUpZd1AzQVJuR3grNVZuVHUySEJZZHpiR1A0NWVMdzF2cjN6QjN2\nWkxleWVkMXNDOWhuYmNPYzkvU3JNeU01UlBRcmtHejRhUzlab3c9PSJdLAoK\nICAgICJmaWxlbGlzdC9taW5pbWF0Y2giOiBbIm1pbmltYXRjaEA1LjEuNiIs\nICIiLCB7ICJkZXBlbmRlbmNpZXMiOiB7ICJicmFjZS1leHBhbnNpb24iOiAi\nXjIuMC4xIiB9IH0sICJzaGE1MTItbEt3Vi8xYnJwRzZtQlVGSHRiN05VbXRB\nQkNiMldaWm1tMndOaU9BNWhBYjhWZENTNEIzZHRNV3l2Y29WaWNjd0FXL0NP\nRVJqWEx0MHpQMXpYVU4yNmc9PSJdLAoKICAgICJqZXN0LXdvcmtlci9zdXBw\nb3J0cy1jb2xvciI6IFsic3VwcG9ydHMtY29sb3JAOC4xLjEiLCAiIiwgeyAi\nZGVwZW5kZW5jaWVzIjogeyAiaGFzLWZsYWciOiAiXjQuMC4wIiB9IH0sICJz\naGE1MTItTXBVRU4yT29kdFV6eHZLUWw3MmNVRjdSUTVFaUhzR3ZTc1ZHMGlh\nOWM1UmJXR0wyQ0k0QzdFcFBTOFVUQklwbG5selppTnVWNTZ3K0Z1Tnh5M3R5\nMlE9PSJdLAoKICAgICJwa2ctZGlyL2ZpbmQtdXAiOiBbImZpbmQtdXBANC4x\nLjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAibG9jYXRlLXBhdGgiOiAi\nXjUuMC4wIiwgInBhdGgtZXhpc3RzIjogIl40LjAuMCIgfSB9LCAic2hhNTEy\nLVBwT3dBZFEvWWxYUTJ2ajhhM2g4SWlwRHVZUmkzd2NlVlFRR1lXeE5JTmNj\ncTQwQW53N0Jsc0VYQ01idDFadCtPTEE2RnE5c3VJcElXRDBPc25JU2x3PT0i\nXSwKCiAgICAicmVzb2x2ZS1jd2QvcmVzb2x2ZS1mcm9tIjogWyJyZXNvbHZl\nLWZyb21ANS4wLjAiLCAiIiwge30sICJzaGE1MTItcVlnOUtQMjRkRDVxa2E5\nSjQ3ZDBhVmt5ME4rYjRmVFU4OUxOOWlEbmpCNXdha3NpQzQ5cnZNQjBQclVK\nUUdvVG1INTBYUGlxT3ZBakRmYWlqR3hZWnc9PSJdLAoKICAgICJzdGFjay11\ndGlscy9lc2NhcGUtc3RyaW5nLXJlZ2V4cCI6IFsiZXNjYXBlLXN0cmluZy1y\nZWdleHBAMi4wLjAiLCAiIiwge30sICJzaGE1MTItVXB6Y0xDWG9sVVdjTnU1\nSHRWTUhZZFhKakFyanNGOUMwYU5ucXVaWVk0dVcvVnUwbWl5NVlvV3ZiVjM0\nNUhhdVZ2Y0FVbnBSdWhNTWNxVGNHT1kyK3c9PSJdLAoKICAgICJ3cmFwLWFu\nc2kvYW5zaS1zdHlsZXMiOiBbImFuc2ktc3R5bGVzQDQuMy4wIiwgIiIsIHsg\nImRlcGVuZGVuY2llcyI6IHsgImNvbG9yLWNvbnZlcnQiOiAiXjIuMC4xIiB9\nIH0sICJzaGE1MTItemJCOXJDSkFUMXJiamlWRGIyaHFLRkhOWUx4Z3RrOE5V\nUnhaM0lad0QzRjZOdHhiWFpRQ25uU2kxTGt4K0lEb2hkUGxGcDIyMndWQUxJ\naGVaSlFTRWc9PSJdLAoKICAgICJAaXN0YW5idWxqcy9sb2FkLW55Yy1jb25m\naWcvZmluZC11cC9sb2NhdGUtcGF0aCI6IFsibG9jYXRlLXBhdGhANS4wLjAi\nLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAicC1sb2NhdGUiOiAiXjQuMS4w\nIiB9IH0sICJzaGE1MTItdDdodzlwSStXdnV3TkpYd2s1elZIcHloSXF6ZzJx\nVGxrbEpPZjBtVnhHU2JlM0ZwMlZpZVpjZHVOWWphTERveTZwOXVHcFFFR1dH\nODdXcE1LbE5xOGc9PSJdLAoKICAgICJAaXN0YW5idWxqcy9sb2FkLW55Yy1j\nb25maWcvanMteWFtbC9hcmdwYXJzZSI6IFsiYXJncGFyc2VAMS4wLjEwIiwg\nIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgInNwcmludGYtanMiOiAifjEuMC4y\nIiB9IH0sICJzaGE1MTItbzVSb3k2dE5HNFNML0ZPa0NBTjZSemppYWtaUzI1\nUkxZRnJjTXR0SnFiZGQ4QldybkErZkd6NTdpTjVQYjA2cHZCR3ZsNWdRMEI0\nOGRKbHNsWHZvVGc9PSJdLAoKICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlw\nZXNjcmlwdC1lc3RyZWUvbWluaW1hdGNoL2JyYWNlLWV4cGFuc2lvbiI6IFsi\nYnJhY2UtZXhwYW5zaW9uQDIuMC4xIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6\nIHsgImJhbGFuY2VkLW1hdGNoIjogIl4xLjAuMCIgfSB9LCAic2hhNTEyLVhu\nQUl2UThlTStrQzZhVUx4Nnd1UWl3VnNuenNpOWQzV3h6VjNGcFdUR0ExOUY2\nMjFrd2Ric0FjRktYZ0tVSFpXc3krbVk2aUwxc0hUeFdFRkN5dERBPT0iXSwK\nCiAgICAiYmFiZWwtcGx1Z2luLWlzdGFuYnVsL2lzdGFuYnVsLWxpYi1pbnN0\ncnVtZW50L3NlbXZlciI6IFsic2VtdmVyQDYuMy4xIiwgIiIsIHsgImJpbiI6\nIHsgInNlbXZlciI6ICJiaW4vc2VtdmVyLmpzIiB9IH0sICJzaGE1MTItQlI3\nVnZEQ1ZITytxMnhCRVdza3hTNkRKRTFxUm5iN0R4elVyb2diNzFDV29TZmlj\nQnhZc2lBR2QrS2wwbW1xL01wckc5eUFyUmt5clF4VE82WGpNekE9PSJdLAoK\nICAgICJmaWxlbGlzdC9taW5pbWF0Y2gvYnJhY2UtZXhwYW5zaW9uIjogWyJi\ncmFjZS1leHBhbnNpb25AMi4wLjEiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjog\neyAiYmFsYW5jZWQtbWF0Y2giOiAiXjEuMC4wIiB9IH0sICJzaGE1MTItWG5B\nSXZROGVNK2tDNmFVTHg2d3VRaXdWc256c2k5ZDNXeHpWM0ZwV1RHQTE5RjYy\nMWt3ZGJzQWNGS1hnS1VIWldzeSttWTZpTDFzSFR4V0VGQ3l0REE9PSJdLAoK\nICAgICJwa2ctZGlyL2ZpbmQtdXAvbG9jYXRlLXBhdGgiOiBbImxvY2F0ZS1w\nYXRoQDUuMC4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgInAtbG9jYXRl\nIjogIl40LjEuMCIgfSB9LCAic2hhNTEyLXQ3aHc5cEkrV3Z1d05KWHdrNXpW\nSHB5aElxemcycVRsa2xKT2YwbVZ4R1NiZTNGcDJWaWVaY2R1TllqYUxEb3k2\ncDl1R3BRRUdXRzg3V3BNS2xOcThnPT0iXSwKCiAgICAiQGlzdGFuYnVsanMv\nbG9hZC1ueWMtY29uZmlnL2ZpbmQtdXAvbG9jYXRlLXBhdGgvcC1sb2NhdGUi\nOiBbInAtbG9jYXRlQDQuMS4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsg\nInAtbGltaXQiOiAiXjIuMi4wIiB9IH0sICJzaGE1MTItUjc5WlovMHdBeEtH\ndTNvWU1sejhqeS9rYmhzTnJTN1NLWjdQeEVIQmdKNStGMm10RlcyZksyY090\nQmgxY0hZa1FzYnpGVjdJK0VvUktlNll0MG9LN0E9PSJdLAoKICAgICJwa2ct\nZGlyL2ZpbmQtdXAvbG9jYXRlLXBhdGgvcC1sb2NhdGUiOiBbInAtbG9jYXRl\nQDQuMS4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6IHsgInAtbGltaXQiOiAi\nXjIuMi4wIiB9IH0sICJzaGE1MTItUjc5WlovMHdBeEtHdTNvWU1sejhqeS9r\nYmhzTnJTN1NLWjdQeEVIQmdKNStGMm10RlcyZksyY090QmgxY0hZa1FzYnpG\nVjdJK0VvUktlNll0MG9LN0E9PSJdLAoKICAgICJAaXN0YW5idWxqcy9sb2Fk\nLW55Yy1jb25maWcvZmluZC11cC9sb2NhdGUtcGF0aC9wLWxvY2F0ZS9wLWxp\nbWl0IjogWyJwLWxpbWl0QDIuMy4wIiwgIiIsIHsgImRlcGVuZGVuY2llcyI6\nIHsgInAtdHJ5IjogIl4yLjAuMCIgfSB9LCAic2hhNTEyLS8vODhtRldTSng4\nbHhDendkQUFCVEpMMk15V0IxMitlSVk3TURMMlNxTG1Ba2VLVTlxeFJ2V3VT\neVRqbTNGVW1wQkVNdUZmY2tBSXFFYVZHVUR4YjZ3PT0iXSwKCiAgICAicGtn\nLWRpci9maW5kLXVwL2xvY2F0ZS1wYXRoL3AtbG9jYXRlL3AtbGltaXQiOiBb\nInAtbGltaXRAMi4zLjAiLCAiIiwgeyAiZGVwZW5kZW5jaWVzIjogeyAicC10\ncnkiOiAiXjIuMC4wIiB9IH0sICJzaGE1MTItLy84OG1GV1NKeDhseEN6d2RB\nQUJUSkwyTXlXQjEyK2VJWTdNREwyU3FMbUFrZUtVOXF4UnZXdVN5VGptM0ZV\nbXBCRU11RmZja0FJcUVhVkdVRHhiNnc9PSJdLAogIH0KfQo=\n", + "encoding": "base64", + "_links": { + "self": "https://api.github.com/repos/toddledev/toddle/contents/bun.lock?ref=main", + "git": "https://api.github.com/repos/toddledev/toddle/git/blobs/5b0a45fe1229f38af2dedd390b9c531458b07262", + "html": "https://github.com/toddledev/toddle/blob/main/bun.lock" + } +} diff --git a/npm_and_yarn/spec/fixtures/github/contents_js_bun.json b/npm_and_yarn/spec/fixtures/github/contents_js_bun.json new file mode 100644 index 0000000000..e9e383709a --- /dev/null +++ b/npm_and_yarn/spec/fixtures/github/contents_js_bun.json @@ -0,0 +1,50 @@ +[ + { + "name": "bun.lock", + "path": "bun.lock", + "sha": "5b0a45fe1229f38af2dedd390b9c531458b07262", + "size": 102275, + "url": "https://api.github.com/repos/toddledev/toddle/contents/bun.lock?ref=main", + "html_url": "https://github.com/toddledev/toddle/blob/main/bun.lock", + "git_url": "https://api.github.com/repos/toddledev/toddle/git/blobs/5b0a45fe1229f38af2dedd390b9c531458b07262", + "download_url": "https://raw.githubusercontent.com/toddledev/toddle/main/bun.lock", + "type": "file", + "_links": { + "self": "https://api.github.com/repos/toddledev/toddle/contents/bun.lock?ref=main", + "git": "https://api.github.com/repos/toddledev/toddle/git/blobs/5b0a45fe1229f38af2dedd390b9c531458b07262", + "html": "https://github.com/toddledev/toddle/blob/main/bun.lock" + } + }, + { + "name": "bunfig.toml", + "path": "bunfig.toml", + "sha": "d8bd900b81f2e7462aaa38a3bd592040f5e9ba78", + "size": 33, + "url": "https://api.github.com/repos/toddledev/toddle/contents/bunfig.toml?ref=main", + "html_url": "https://github.com/toddledev/toddle/blob/main/bunfig.toml", + "git_url": "https://api.github.com/repos/toddledev/toddle/git/blobs/d8bd900b81f2e7462aaa38a3bd592040f5e9ba78", + "download_url": "https://raw.githubusercontent.com/toddledev/toddle/main/bunfig.toml", + "type": "file", + "_links": { + "self": "https://api.github.com/repos/toddledev/toddle/contents/bunfig.toml?ref=main", + "git": "https://api.github.com/repos/toddledev/toddle/git/blobs/d8bd900b81f2e7462aaa38a3bd592040f5e9ba78", + "html": "https://github.com/toddledev/toddle/blob/main/bunfig.toml" + } + }, + { + "name": "package.json", + "path": "package.json", + "sha": "1393fcaa2e31945e9599741fbf04ed271cb7de22", + "size": 1371, + "url": "https://api.github.com/repos/toddledev/toddle/contents/package.json?ref=main", + "html_url": "https://github.com/toddledev/toddle/blob/main/package.json", + "git_url": "https://api.github.com/repos/toddledev/toddle/git/blobs/1393fcaa2e31945e9599741fbf04ed271cb7de22", + "download_url": "https://raw.githubusercontent.com/toddledev/toddle/main/package.json", + "type": "file", + "_links": { + "self": "https://api.github.com/repos/toddledev/toddle/contents/package.json?ref=main", + "git": "https://api.github.com/repos/toddledev/toddle/git/blobs/1393fcaa2e31945e9599741fbf04ed271cb7de22", + "html": "https://github.com/toddledev/toddle/blob/main/package.json" + } + } +] \ No newline at end of file diff --git a/npm_and_yarn/spec/fixtures/projects/bun/empty/bun.lock b/npm_and_yarn/spec/fixtures/projects/bun/empty/bun.lock new file mode 100644 index 0000000000..fcc66e12ce --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/empty/bun.lock @@ -0,0 +1,7 @@ +{ + "lockfileVersion": 0, + "workspaces": { + "": {}, + }, + "packages": {}, +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/empty/package.json b/npm_and_yarn/spec/fixtures/projects/bun/empty/package.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/empty/package.json @@ -0,0 +1 @@ +{} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/invalid_lockfile/bun.lock b/npm_and_yarn/spec/fixtures/projects/bun/invalid_lockfile/bun.lock new file mode 100644 index 0000000000..e9c60b0b72 --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/invalid_lockfile/bun.lock @@ -0,0 +1,2 @@ +# This is an invalid bun.lock file! +[ diff --git a/npm_and_yarn/spec/fixtures/projects/bun/invalid_lockfile/package.json b/npm_and_yarn/spec/fixtures/projects/bun/invalid_lockfile/package.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/invalid_lockfile/package.json @@ -0,0 +1 @@ +{} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/invalid_lockfile_version/bun.lock b/npm_and_yarn/spec/fixtures/projects/bun/invalid_lockfile_version/bun.lock new file mode 100644 index 0000000000..e2751f3a81 --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/invalid_lockfile_version/bun.lock @@ -0,0 +1,7 @@ +{ + "lockfileVersion": -1, + "workspaces": { + "": {}, + }, + "dependencies": {}, +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/invalid_lockfile_version/package.json b/npm_and_yarn/spec/fixtures/projects/bun/invalid_lockfile_version/package.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/invalid_lockfile_version/package.json @@ -0,0 +1 @@ +{} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/invalid_version/bun.lock b/npm_and_yarn/spec/fixtures/projects/bun/invalid_version/bun.lock new file mode 100644 index 0000000000..690cf8ed31 --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/invalid_version/bun.lock @@ -0,0 +1,36 @@ +{ + "lockfileVersion": 0, + "workspaces": { + "": { + "dependencies": { + "fetch-factory": "^0.0.1", + }, + "devDependencies": { + "etag": "^1.0.0", + }, + }, + }, + "packages": { + "encoding": ["encoding@0.1.13", "", { "dependencies": { "iconv-lite": "^0.6.2" } }, "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A=="], + + "es6-promise": ["es6-promise@3.3.1", "", {}, "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg=="], + + "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], + + "fetch-factory": ["fetch-factory@0.0.1", "", { "dependencies": { "es6-promise": "^3.0.2", "isomorphic-fetch": "^2.1.1", "lodash": "^3.10.1" } }, "sha512-gexRwqIhwzDJ2pJvL0UYfiZwW06/bdYWxAmswFFts7C87CF8i6liApihTk7TZFYMDcQjvvDIvyHv0q379z0aWA=="], + + "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + + "is-stream": ["is-stream@1.1.0", "", {}, "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ=="], + + "isomorphic-fetch": ["isomorphic-fetch@2.2.1", "", { "dependencies": { "node-fetch": "^1.0.1", "whatwg-fetch": ">=0.10.0" } }, "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA=="], + + "lodash": ["lodash@3.10.1", "", {}, "sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ=="], + + "node-fetch": ["node-fetch@1.7.3", "", { "dependencies": { "encoding": "^0.1.11", "is-stream": "^1.0.1" } }, "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ=="], + + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "whatwg-fetch": ["whatwg-fetch@3.6.20", "", {}, "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg=="], + } +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/invalid_version/package.json b/npm_and_yarn/spec/fixtures/projects/bun/invalid_version/package.json new file mode 100644 index 0000000000..13d8b3d2c7 --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/invalid_version/package.json @@ -0,0 +1,8 @@ +{ + "dependencies": { + "fetch-factory": "^0.0.1" + }, + "devDependencies": { + "etag" : "^.0.0" // previous: "^1.0.0" + } +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/missing_dependency/bun.lock b/npm_and_yarn/spec/fixtures/projects/bun/missing_dependency/bun.lock new file mode 100644 index 0000000000..fcc66e12ce --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/missing_dependency/bun.lock @@ -0,0 +1,7 @@ +{ + "lockfileVersion": 0, + "workspaces": { + "": {}, + }, + "packages": {}, +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/missing_dependency/package.json b/npm_and_yarn/spec/fixtures/projects/bun/missing_dependency/package.json new file mode 100644 index 0000000000..874c8de9ca --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/missing_dependency/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "this-does-not-exist-12jn1o2n98sqas": "^99999.0.0" + } +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/missing_dependency_version/bun.lock b/npm_and_yarn/spec/fixtures/projects/bun/missing_dependency_version/bun.lock new file mode 100644 index 0000000000..be8fb2962f --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/missing_dependency_version/bun.lock @@ -0,0 +1,39 @@ +{ + "lockfileVersion": 0, + "workspaces": { + "": { + "dependencies": { + "fetch-factory": "^0.0.1", + "lodash": "^4.17.21", + }, + "devDependencies": { + "etag": "^1.0.0", + }, + }, + }, + "packages": { + "encoding": ["encoding@0.1.13", "", { "dependencies": { "iconv-lite": "^0.6.2" } }, "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A=="], + + "es6-promise": ["es6-promise@3.3.1", "", {}, "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg=="], + + "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], + + "fetch-factory": ["fetch-factory@0.0.1", "", { "dependencies": { "es6-promise": "^3.0.2", "isomorphic-fetch": "^2.1.1", "lodash": "^3.10.1" } }, "sha512-gexRwqIhwzDJ2pJvL0UYfiZwW06/bdYWxAmswFFts7C87CF8i6liApihTk7TZFYMDcQjvvDIvyHv0q379z0aWA=="], + + "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + + "is-stream": ["is-stream@1.1.0", "", {}, "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ=="], + + "isomorphic-fetch": ["isomorphic-fetch@2.2.1", "", { "dependencies": { "node-fetch": "^1.0.1", "whatwg-fetch": ">=0.10.0" } }, "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA=="], + + "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + + "node-fetch": ["node-fetch@1.7.3", "", { "dependencies": { "encoding": "^0.1.11", "is-stream": "^1.0.1" } }, "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ=="], + + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "whatwg-fetch": ["whatwg-fetch@3.6.20", "", {}, "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg=="], + + "fetch-factory/lodash": ["lodash@3.10.1", "", {}, "sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ=="], + } +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/missing_dependency_version/package.json b/npm_and_yarn/spec/fixtures/projects/bun/missing_dependency_version/package.json new file mode 100644 index 0000000000..15f2aa2038 --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/missing_dependency_version/package.json @@ -0,0 +1,9 @@ +{ + "dependencies": { + "fetch-factory": "^0.0.1", + "lodash": "^99999.0.0" // previous: "^4.17.21" + }, + "devDependencies": { + "etag": "^1.0.0" + } +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/missing_file_dependency/bun.lock b/npm_and_yarn/spec/fixtures/projects/bun/missing_file_dependency/bun.lock new file mode 100644 index 0000000000..fcc66e12ce --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/missing_file_dependency/bun.lock @@ -0,0 +1,7 @@ +{ + "lockfileVersion": 0, + "workspaces": { + "": {}, + }, + "packages": {}, +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/missing_file_dependency/package.json b/npm_and_yarn/spec/fixtures/projects/bun/missing_file_dependency/package.json new file mode 100644 index 0000000000..91c7a99c4e --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/missing_file_dependency/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "this-does-not-exist": "file:./this-does-not-exist" + } +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/missing_git_dependency/bun.lock b/npm_and_yarn/spec/fixtures/projects/bun/missing_git_dependency/bun.lock new file mode 100644 index 0000000000..fcc66e12ce --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/missing_git_dependency/bun.lock @@ -0,0 +1,7 @@ +{ + "lockfileVersion": 0, + "workspaces": { + "": {}, + }, + "packages": {}, +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/missing_git_dependency/package.json b/npm_and_yarn/spec/fixtures/projects/bun/missing_git_dependency/package.json new file mode 100644 index 0000000000..42bfadfd7f --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/missing_git_dependency/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "this-does-not-exist": "git@github.com:dependabot/this-does-not-exist.git" + } +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/missing_github_dependency/bun.lock b/npm_and_yarn/spec/fixtures/projects/bun/missing_github_dependency/bun.lock new file mode 100644 index 0000000000..fcc66e12ce --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/missing_github_dependency/bun.lock @@ -0,0 +1,7 @@ +{ + "lockfileVersion": 0, + "workspaces": { + "": {}, + }, + "packages": {}, +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/missing_github_dependency/package.json b/npm_and_yarn/spec/fixtures/projects/bun/missing_github_dependency/package.json new file mode 100644 index 0000000000..022dab1555 --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/missing_github_dependency/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "this-does-not-exist": "github:dependabot/this-does-not-exist" + } +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/missing_npm_dependency/bun.lock b/npm_and_yarn/spec/fixtures/projects/bun/missing_npm_dependency/bun.lock new file mode 100644 index 0000000000..fcc66e12ce --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/missing_npm_dependency/bun.lock @@ -0,0 +1,7 @@ +{ + "lockfileVersion": 0, + "workspaces": { + "": {}, + }, + "packages": {}, +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/missing_npm_dependency/package.json b/npm_and_yarn/spec/fixtures/projects/bun/missing_npm_dependency/package.json new file mode 100644 index 0000000000..b161bc4dfc --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/missing_npm_dependency/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "this-does-not-exist": "npm:this-does-not-exist-qubqwub1ubw@^99999.0.0" + } +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/missing_tarball_dependency/bun.lock b/npm_and_yarn/spec/fixtures/projects/bun/missing_tarball_dependency/bun.lock new file mode 100644 index 0000000000..fcc66e12ce --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/missing_tarball_dependency/bun.lock @@ -0,0 +1,7 @@ +{ + "lockfileVersion": 0, + "workspaces": { + "": {}, + }, + "packages": {}, +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/missing_tarball_dependency/package.json b/npm_and_yarn/spec/fixtures/projects/bun/missing_tarball_dependency/package.json new file mode 100644 index 0000000000..58cb4c9187 --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/missing_tarball_dependency/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "this-does-not-exist": "https://example.com/this-does-not-exist.tar.gz" + } +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/simple_v0/bun.lock b/npm_and_yarn/spec/fixtures/projects/bun/simple_v0/bun.lock new file mode 100644 index 0000000000..690cf8ed31 --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/simple_v0/bun.lock @@ -0,0 +1,36 @@ +{ + "lockfileVersion": 0, + "workspaces": { + "": { + "dependencies": { + "fetch-factory": "^0.0.1", + }, + "devDependencies": { + "etag": "^1.0.0", + }, + }, + }, + "packages": { + "encoding": ["encoding@0.1.13", "", { "dependencies": { "iconv-lite": "^0.6.2" } }, "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A=="], + + "es6-promise": ["es6-promise@3.3.1", "", {}, "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg=="], + + "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], + + "fetch-factory": ["fetch-factory@0.0.1", "", { "dependencies": { "es6-promise": "^3.0.2", "isomorphic-fetch": "^2.1.1", "lodash": "^3.10.1" } }, "sha512-gexRwqIhwzDJ2pJvL0UYfiZwW06/bdYWxAmswFFts7C87CF8i6liApihTk7TZFYMDcQjvvDIvyHv0q379z0aWA=="], + + "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + + "is-stream": ["is-stream@1.1.0", "", {}, "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ=="], + + "isomorphic-fetch": ["isomorphic-fetch@2.2.1", "", { "dependencies": { "node-fetch": "^1.0.1", "whatwg-fetch": ">=0.10.0" } }, "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA=="], + + "lodash": ["lodash@3.10.1", "", {}, "sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ=="], + + "node-fetch": ["node-fetch@1.7.3", "", { "dependencies": { "encoding": "^0.1.11", "is-stream": "^1.0.1" } }, "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ=="], + + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "whatwg-fetch": ["whatwg-fetch@3.6.20", "", {}, "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg=="], + } +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/simple_v0/package.json b/npm_and_yarn/spec/fixtures/projects/bun/simple_v0/package.json new file mode 100644 index 0000000000..3a1465824d --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/simple_v0/package.json @@ -0,0 +1,8 @@ +{ + "dependencies": { + "fetch-factory": "^0.0.1" + }, + "devDependencies": { + "etag": "^1.0.0" + } +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/simple_workspace_v0/bun.lock b/npm_and_yarn/spec/fixtures/projects/bun/simple_workspace_v0/bun.lock new file mode 100644 index 0000000000..1515d202da --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/simple_workspace_v0/bun.lock @@ -0,0 +1,61 @@ +{ + "lockfileVersion": 0, + "workspaces": { + "": { + "dependencies": { + "bar": "packages/bar", + "baz": "packages/baz", + "foo": "package-foo", + }, + "devDependencies": { + "etag": "^1.1.0", + }, + }, + "package-foo": { + "name": "foo", + "version": "0.0.1", + "dependencies": { + "lodash": "^1.2.1", + }, + "devDependencies": { + "etag": "^1.0.0", + }, + }, + "packages/bar": { + "name": "bar", + "version": "0.0.1", + "dependencies": { + "chalk": "0.3.0", + "foo": "package-foo", + "lodash": "^1.2.1", + }, + "devDependencies": { + "etag": "^1.1.0", + }, + }, + "packages/baz": { + "name": "baz", + "version": "0.0.1", + "dependencies": { + "bar": "packages/bar", + }, + }, + }, + "packages": { + "ansi-styles": ["ansi-styles@0.2.0", "", {}, "sha512-YyQBeLj0juxUC9uUXRpQ1ZAzPT1dnsn5vVeJLHYFq4Ct1p0rymUSyvckKCXCH9I0bh3jWDIETA5nXIaZVKlDyA=="], + + "bar": ["bar@workspace:packages/bar", { "dependencies": { "chalk": "0.3.0", "foo": "package-foo", "lodash": "^1.2.1" }, "devDependencies": { "etag": "^1.1.0" } }], + + "baz": ["baz@workspace:packages/baz", { "dependencies": { "bar": "packages/bar" } }], + + "chalk": ["chalk@0.3.0", "", { "dependencies": { "ansi-styles": "~0.2.0", "has-color": "~0.1.0" } }, "sha512-OcfgS16PHpCu2Q4TNMtk0aZNx8PyeNiiB+6AgGH91fhT9hJ3v6pIIJ3lxlaOEDHlTm8t3wDe6bDGamvtIokQTg=="], + + "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], + + "foo": ["foo@workspace:package-foo", { "dependencies": { "lodash": "^1.2.1" }, "devDependencies": { "etag": "^1.0.0" } }], + + "has-color": ["has-color@0.1.7", "", {}, "sha512-kaNz5OTAYYmt646Hkqw50/qyxP2vFnTVu5AQ1Zmk22Kk5+4Qx6BpO8+u7IKsML5fOsFk0ZT0AcCJNYwcvaLBvw=="], + + "lodash": ["lodash@1.3.1", "", {}, "sha512-F7AB8u+6d00CCgnbjWzq9fFLpzOMCgq6mPjOW4+8+dYbrnc0obRrC+IHctzfZ1KKTQxX0xo/punrlpOWcf4gpw=="], + } +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/simple_workspace_v0/package-foo/package.json b/npm_and_yarn/spec/fixtures/projects/bun/simple_workspace_v0/package-foo/package.json new file mode 100644 index 0000000000..c3b788617b --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/simple_workspace_v0/package-foo/package.json @@ -0,0 +1,10 @@ +{ + "name": "foo", + "version": "0.0.1", + "dependencies": { + "lodash": "^1.2.1" + }, + "devDependencies": { + "etag": "^1.0.0" + } +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/simple_workspace_v0/package.json b/npm_and_yarn/spec/fixtures/projects/bun/simple_workspace_v0/package.json new file mode 100644 index 0000000000..eb64ee52b7 --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/simple_workspace_v0/package.json @@ -0,0 +1,14 @@ +{ + "workspaces": [ + "packages/*", + "package-*" + ], + "dependencies": { + "foo": "workspace:*", + "bar": "workspace:*", + "baz": "workspace:*" + }, + "devDependencies": { + "etag": "^1.1.0" + } +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/simple_workspace_v0/packages/bar/package.json b/npm_and_yarn/spec/fixtures/projects/bun/simple_workspace_v0/packages/bar/package.json new file mode 100644 index 0000000000..89c6efbdf5 --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/simple_workspace_v0/packages/bar/package.json @@ -0,0 +1,12 @@ +{ + "name": "bar", + "version": "0.0.1", + "dependencies": { + "chalk": "0.3.0", + "lodash": "^1.2.1", + "foo": "workspace:*" + }, + "devDependencies": { + "etag": "^1.1.0" + } +} diff --git a/npm_and_yarn/spec/fixtures/projects/bun/simple_workspace_v0/packages/baz/package.json b/npm_and_yarn/spec/fixtures/projects/bun/simple_workspace_v0/packages/baz/package.json new file mode 100644 index 0000000000..cee71f3766 --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/bun/simple_workspace_v0/packages/baz/package.json @@ -0,0 +1,7 @@ +{ + "name": "baz", + "version": "0.0.1", + "dependencies": { + "bar": "workspace:*" + } +} diff --git a/npm_and_yarn/spec/npm_and_yarn_config_spec.rb b/npm_and_yarn/spec/npm_and_yarn_config_spec.rb index e7b21bc99d..f26bb7586e 100644 --- a/npm_and_yarn/spec/npm_and_yarn_config_spec.rb +++ b/npm_and_yarn/spec/npm_and_yarn_config_spec.rb @@ -10,9 +10,6 @@ npm_result = `npm config list` # Output from yarn config set expect(npm_result).to include("audit = false") - expect(npm_result).to include( - "cafile = \"/usr/local/share/ca-certificates/dbot-ca.crt\"" - ) expect(npm_result).to include("dry-run = true") expect(npm_result).to include("ignore-scripts = true") end diff --git a/updater/config/.npmrc b/updater/config/.npmrc index 601d250c1b..b3f105a1e6 100644 --- a/updater/config/.npmrc +++ b/updater/config/.npmrc @@ -1,13 +1,6 @@ # TODO: Remove these hacks once we've deprecated npm 6 support as it no longer # spwans a child process to npm install git dependencies. -# Only set our custom CA cert for npm because the system ca's + our custom ca -# causes npm to blow up when installing git dependencies (E2BIG exception). This -# happens because the ca-file contents are passed as a cli argument to npm -# install from npm/cli/lib/pack.js as --ca="contents of ca file" - "ca" is -# populated automatically by npm when setting "--cafile" and passed through in -# when spawning the cli to install git dependencies. -cafile=/usr/local/share/ca-certificates/dbot-ca.crt # Because npm doesn't pass through all npm config when doing git installs in # npm/cli/lib/pack.js we also need to disable audit here to prevent npm from # auditing git dependencies, we do this to sped up installs