From 544cdb7e870dddedd894514b2ae9f7c7b9cce9c1 Mon Sep 17 00:00:00 2001 From: Steve Brown Date: Mon, 20 Jul 2026 15:13:04 +0100 Subject: [PATCH] SG-43798 Bump vendored tk-core to v0.23.10 Runs tk_core_update.sh v0.23.10 to vendor the tk-core release that removes Python 3.7 support (SG-43667/#1107). This brings the version guard in python/tk-core/python/tank/__init__.py from a 3.7 hard-block to 3.9, and removes the vendored requirements/3.7/ directory. Note: v0.23.10 is currently a GitHub pre-release (QA in progress). tk_core_update.sh clones directly off the git tag and doesn't care about that flag, so this is safe to prep now, but this branch shouldn't be released until tk-core is confirmed/promoted. Scope intentionally excludes adding minimum_python_version to the top-level info.yml - that's tracked separately in SG-42460, which has its own history of breaking auto-update and needs its own careful validation. --- python/tk-core/_core_upgrader.py | 8 +- python/tk-core/codecov.yml | 25 + python/tk-core/commit_id | 2 +- python/tk-core/developer/README.md | 8 + python/tk-core/developer/bake_config.py | 26 +- python/tk-core/developer/build_plugin.py | 30 +- python/tk-core/developer/find_flow_project.py | 166 + .../developer/populate_bundle_cache.py | 12 +- python/tk-core/developer/utils/__init__.py | 8 +- python/tk-core/developer/utils/caching.py | 9 +- python/tk-core/hooks/cache_location.py | 5 +- python/tk-core/hooks/ensure_folder_exists.py | 2 +- python/tk-core/hooks/get_current_login.py | 5 +- .../tk-core/hooks/process_folder_creation.py | 3 +- python/tk-core/hooks/process_folder_name.py | 3 +- python/tk-core/info.yml | 3 +- python/tk-core/python/sgtk/__init__.py | 6 +- python/tk-core/python/tank/__init__.py | 90 +- python/tk-core/python/tank/api.py | 23 +- .../python/tank/authentication/__init__.py | 19 +- .../authentication/app_session_launcher.py | 28 +- .../authentication/console_authentication.py | 22 +- .../python/tank/authentication/constants.py | 4 +- .../authentication/core_defaults_manager.py | 2 +- .../tank/authentication/defaults_manager.py | 4 +- .../python/tank/authentication/errors.py | 8 +- .../tank/authentication/flow_auth/__init__.py | 41 + .../flow_auth/_authentication.py | 193 + .../tank/authentication/flow_auth/_client.py | 49 + .../authentication/flow_auth/_constants.py | 26 + .../authentication/flow_auth/_settings.py | 51 + .../tank/authentication/flow_auth/errors.py | 25 + .../interactive_authentication.py | 15 +- .../tank/authentication/login_dialog.py | 77 +- .../tank/authentication/session_cache.py | 16 +- .../authentication/shotgun_authenticator.py | 11 +- .../tank/authentication/shotgun_wrapper.py | 8 +- .../python/tank/authentication/site_info.py | 7 +- .../tank/authentication/sso_saml2/__init__.py | 9 +- .../authentication/sso_saml2/core/__init__.py | 9 +- .../sso_saml2/core/sso_saml2_core.py | 7 +- .../core/username_password_dialog.py | 6 +- .../authentication/sso_saml2/core/utils.py | 5 +- .../authentication/sso_saml2/sso_saml2.py | 1 - .../tank/authentication/sso_saml2/utils.py | 4 +- .../ui/aspect_preserving_label.py | 7 +- .../ui/completion_filter_proxy.py | 4 +- .../tank/authentication/ui/login_dialog.py | 571 +- .../tank/authentication/ui/resources_rc.py | 11 +- .../tank/authentication/ui_authentication.py | 4 +- .../python/tank/authentication/user.py | 5 +- .../python/tank/authentication/user_impl.py | 12 +- .../tank/authentication/web_login_support.py | 1 - .../tk-core/python/tank/bootstrap/__init__.py | 2 +- .../tank/bootstrap/baked_configuration.py | 12 +- .../tank/bootstrap/bundle_downloader.py | 4 +- .../tank/bootstrap/cached_configuration.py | 23 +- .../python/tank/bootstrap/configuration.py | 14 +- .../tank/bootstrap/configuration_writer.py | 24 +- .../python/tank/bootstrap/import_handler.py | 18 +- .../tank/bootstrap/installed_configuration.py | 4 +- .../tk-core/python/tank/bootstrap/manager.py | 168 +- .../tk-core/python/tank/bootstrap/resolver.py | 30 +- .../tk-core/python/tank/commands/__init__.py | 2 +- .../tk-core/python/tank/commands/app_info.py | 4 +- .../python/tank/commands/cache_apps.py | 2 +- .../python/tank/commands/cache_yaml.py | 7 +- .../tank/commands/clone_configuration.py | 13 +- .../python/tank/commands/console_utils.py | 7 +- .../python/tank/commands/core_localize.py | 7 +- .../python/tank/commands/core_upgrade.py | 19 +- .../python/tank/commands/desktop_migration.py | 3 +- .../python/tank/commands/dump_config.py | 2 +- .../tank/commands/get_entity_commands.py | 15 +- .../tk-core/python/tank/commands/install.py | 16 +- .../python/tank/commands/interaction.py | 1 - python/tk-core/python/tank/commands/misc.py | 14 +- .../tk-core/python/tank/commands/move_pc.py | 9 +- .../python/tank/commands/path_cache.py | 12 +- .../python/tank/commands/pc_overview.py | 6 +- .../tk-core/python/tank/commands/push_pc.py | 19 +- .../python/tank/commands/setup_project.py | 27 +- .../tank/commands/setup_project_core.py | 13 +- .../tank/commands/setup_project_params.py | 32 +- .../tank/commands/setup_project_wizard.py | 6 +- python/tk-core/python/tank/commands/switch.py | 18 +- .../python/tank/commands/tank_command.py | 62 +- .../tank/commands/unregister_folders.py | 3 +- python/tk-core/python/tank/commands/update.py | 24 +- .../python/tank/commands/validate_config.py | 9 +- python/tk-core/python/tank/context.py | 125 +- python/tk-core/python/tank/deploy/__init__.py | 4 +- .../tk-core/python/tank/deploy/descriptor.py | 2 +- python/tk-core/python/tank/deploy/util.py | 2 +- .../python/tank/descriptor/__init__.py | 12 +- .../python/tank/descriptor/descriptor.py | 12 +- .../tank/descriptor/descriptor_bundle.py | 10 +- .../descriptor/descriptor_cached_config.py | 6 +- .../tank/descriptor/descriptor_config.py | 12 +- .../python/tank/descriptor/descriptor_core.py | 2 +- .../descriptor/descriptor_installed_config.py | 14 +- .../tk-core/python/tank/descriptor/errors.py | 2 +- .../tank/descriptor/io_descriptor/__init__.py | 10 +- .../tank/descriptor/io_descriptor/appstore.py | 16 +- .../tank/descriptor/io_descriptor/dev.py | 3 +- .../descriptor/io_descriptor/downloadable.py | 7 +- .../tank/descriptor/io_descriptor/factory.py | 3 +- .../tank/descriptor/io_descriptor/git.py | 16 +- .../descriptor/io_descriptor/git_branch.py | 2 +- .../tank/descriptor/io_descriptor/git_tag.py | 10 +- .../tank/descriptor/io_descriptor/manual.py | 3 +- .../tank/descriptor/io_descriptor/path.py | 6 +- .../io_descriptor/shotgun_entity.py | 2 +- python/tk-core/python/tank/flowam/__init__.py | 0 python/tk-core/python/tank/flowam/config.json | 188 + .../tk-core/python/tank/flowam/constants.py | 34 + python/tk-core/python/tank/flowam/create.py | 250 + python/tk-core/python/tank/flowam/host.py | 199 + python/tk-core/python/tank/flowam/open.py | 218 + python/tk-core/python/tank/flowam/utils.py | 304 ++ python/tk-core/python/tank/folder/__init__.py | 2 +- .../python/tank/folder/configuration.py | 15 +- .../tk-core/python/tank/folder/folder_io.py | 3 +- .../tank/folder/folder_types/__init__.py | 6 +- .../python/tank/folder/folder_types/base.py | 12 +- .../python/tank/folder/folder_types/entity.py | 9 +- .../folder/folder_types/expression_tokens.py | 2 +- .../tank/folder/folder_types/listfield.py | 11 +- .../tank/folder/folder_types/project.py | 4 +- .../python/tank/folder/folder_types/static.py | 5 +- .../python/tank/folder/folder_types/step.py | 5 +- .../python/tank/folder/folder_types/task.py | 7 +- .../python/tank/folder/folder_types/user.py | 3 +- .../python/tank/folder/folder_types/util.py | 3 +- .../tk-core/python/tank/folder/operations.py | 2 +- python/tk-core/python/tank/hook.py | 10 +- python/tk-core/python/tank/log.py | 17 +- python/tk-core/python/tank/path_cache.py | 72 +- python/tk-core/python/tank/pipelineconfig.py | 29 +- .../python/tank/pipelineconfig_factory.py | 18 +- .../python/tank/pipelineconfig_utils.py | 46 +- .../tk-core/python/tank/platform/__init__.py | 34 +- .../python/tank/platform/application.py | 3 +- python/tk-core/python/tank/platform/bundle.py | 6 +- python/tk-core/python/tank/platform/engine.py | 112 +- .../python/tank/platform/environment.py | 44 +- .../tank/platform/environment_includes.py | 20 +- .../python/tank/platform/events/__init__.py | 2 +- .../tk-core/python/tank/platform/framework.py | 6 +- .../python/tank/platform/qt/busy_dialog.py | 2 +- .../python/tank/platform/qt/config_item.py | 10 +- .../python/tank/platform/qt/resources_rc.py | 11 +- .../python/tank/platform/qt/tankqdialog.py | 26 +- .../python/tank/platform/qt/ui_busy_dialog.py | 99 +- .../python/tank/platform/qt/ui_item.py | 97 +- .../python/tank/platform/qt/ui_tank_dialog.py | 421 +- .../python/tank/platform/software_launcher.py | 16 +- python/tk-core/python/tank/platform/util.py | 6 +- .../python/tank/platform/validation.py | 37 +- python/tk-core/python/tank/template.py | 11 +- .../tk-core/python/tank/template_includes.py | 4 +- .../python/tank/template_path_parser.py | 1 + python/tk-core/python/tank/templatekey.py | 24 +- python/tk-core/python/tank/util/__init__.py | 73 +- .../tk-core/python/tank/util/environment.py | 1 + python/tk-core/python/tank/util/filesystem.py | 10 +- python/tk-core/python/tank/util/includes.py | 7 +- python/tk-core/python/tank/util/json.py | 3 +- python/tk-core/python/tank/util/loader.py | 10 +- .../python/tank/util/local_file_storage.py | 4 +- python/tk-core/python/tank/util/login.py | 3 +- python/tk-core/python/tank/util/metrics.py | 18 +- .../tk-core/python/tank/util/metrics_cache.py | 5 +- python/tk-core/python/tank/util/process.py | 4 +- .../python/tank/util/pyside2_patcher.py | 6 +- .../python/tank/util/pyside6_patcher.py | 81 +- .../tk-core/python/tank/util/qt_importer.py | 7 +- .../python/tank/util/resources/no_preview.jpg | Bin 7628 -> 0 bytes python/tk-core/python/tank/util/sgre.py | 26 +- .../python/tank/util/shotgun/__init__.py | 24 +- .../python/tank/util/shotgun/connection.py | 1 - .../python/tank/util/shotgun/download.py | 9 +- .../tank/util/shotgun/publish_creation.py | 13 +- .../python/tank/util/shotgun/publish_util.py | 5 +- .../python/tank/util/shotgun_entity.py | 7 +- .../tk-core/python/tank/util/shotgun_path.py | 1 + .../tk-core/python/tank/util/storage_roots.py | 7 +- .../tk-core/python/tank/util/user_settings.py | 5 +- python/tk-core/python/tank/util/yaml_cache.py | 5 +- python/tk-core/python/tank/util/zip.py | 3 +- python/tk-core/python/tank_vendor/__init__.py | 348 +- .../python/tank_vendor/adsk_auth/__init__.py | 17 + .../python/tank_vendor/adsk_auth/config.py | 52 + .../tank_vendor/adsk_auth/file_store.py | 114 + .../python/tank_vendor/adsk_auth/pkce.py | 292 + .../python/tank_vendor/adsk_auth/token.py | 112 + .../flow_integration_sdk/__init__.py | 0 .../flow_integration_sdk/dependency.py | 467 ++ .../flow_integration_sdk/exceptions.py | 163 + .../tank_vendor/flow_integration_sdk/fetch.py | 405 ++ .../flow_integration_sdk/globals.py | 215 + .../flow_integration_sdk/objects.py | 1470 +++++ .../flow_integration_sdk/publish.py | 684 +++ .../flow_integration_sdk/sandbox.py | 794 +++ .../flow_integration_sdk/schema.py | 258 + .../flow_integration_sdk/schema_builder.py | 614 +++ .../flow_integration_sdk/storage.py | 314 ++ .../flow_integration_sdk/transferapi.py | 251 + .../tank_vendor/flow_integration_sdk/utils.py | 386 ++ .../requirements/3.10/frozen_requirements.txt | 2 + python/tk-core/requirements/3.10/pkgs.zip | Bin 815474 -> 872223 bytes .../requirements/3.10/requirements.txt | 2 + .../requirements/3.11/frozen_requirements.txt | 2 + python/tk-core/requirements/3.11/pkgs.zip | Bin 834434 -> 891183 bytes .../requirements/3.11/requirements.txt | 2 + .../requirements/3.13/frozen_requirements.txt | 2 + python/tk-core/requirements/3.13/pkgs.zip | Bin 825746 -> 882495 bytes .../requirements/3.13/requirements.txt | 2 + .../certs/shotgun_api3/lib/certifi/cacert.pem | 4778 ----------------- .../requirements/3.7/frozen_requirements.txt | 6 - python/tk-core/requirements/3.7/pkgs.zip | Bin 861226 -> 0 bytes .../tk-core/requirements/3.7/requirements.txt | 5 - .../requirements/3.9/frozen_requirements.txt | 2 + python/tk-core/requirements/3.9/pkgs.zip | Bin 883549 -> 940298 bytes .../tk-core/requirements/3.9/requirements.txt | 2 + .../requirements/any/flow_data_sdk-beta.zip | Bin 0 -> 68735 bytes .../requirements/update_python_packages.py | 11 +- python/tk-core/scripts/tank_cmd.py | 42 +- python/tk-core/setup.py | 25 +- .../setup/tank_api_proxy/sgtk/__init__.py | 3 +- .../setup/tank_api_proxy/tank/__init__.py | 3 +- 231 files changed, 10732 insertions(+), 6545 deletions(-) create mode 100644 python/tk-core/developer/find_flow_project.py create mode 100644 python/tk-core/python/tank/authentication/flow_auth/__init__.py create mode 100644 python/tk-core/python/tank/authentication/flow_auth/_authentication.py create mode 100644 python/tk-core/python/tank/authentication/flow_auth/_client.py create mode 100644 python/tk-core/python/tank/authentication/flow_auth/_constants.py create mode 100644 python/tk-core/python/tank/authentication/flow_auth/_settings.py create mode 100644 python/tk-core/python/tank/authentication/flow_auth/errors.py create mode 100644 python/tk-core/python/tank/flowam/__init__.py create mode 100644 python/tk-core/python/tank/flowam/config.json create mode 100644 python/tk-core/python/tank/flowam/constants.py create mode 100644 python/tk-core/python/tank/flowam/create.py create mode 100644 python/tk-core/python/tank/flowam/host.py create mode 100644 python/tk-core/python/tank/flowam/open.py create mode 100644 python/tk-core/python/tank/flowam/utils.py delete mode 100644 python/tk-core/python/tank/util/resources/no_preview.jpg create mode 100644 python/tk-core/python/tank_vendor/adsk_auth/__init__.py create mode 100644 python/tk-core/python/tank_vendor/adsk_auth/config.py create mode 100644 python/tk-core/python/tank_vendor/adsk_auth/file_store.py create mode 100644 python/tk-core/python/tank_vendor/adsk_auth/pkce.py create mode 100644 python/tk-core/python/tank_vendor/adsk_auth/token.py create mode 100644 python/tk-core/python/tank_vendor/flow_integration_sdk/__init__.py create mode 100644 python/tk-core/python/tank_vendor/flow_integration_sdk/dependency.py create mode 100644 python/tk-core/python/tank_vendor/flow_integration_sdk/exceptions.py create mode 100644 python/tk-core/python/tank_vendor/flow_integration_sdk/fetch.py create mode 100644 python/tk-core/python/tank_vendor/flow_integration_sdk/globals.py create mode 100644 python/tk-core/python/tank_vendor/flow_integration_sdk/objects.py create mode 100644 python/tk-core/python/tank_vendor/flow_integration_sdk/publish.py create mode 100644 python/tk-core/python/tank_vendor/flow_integration_sdk/sandbox.py create mode 100644 python/tk-core/python/tank_vendor/flow_integration_sdk/schema.py create mode 100644 python/tk-core/python/tank_vendor/flow_integration_sdk/schema_builder.py create mode 100644 python/tk-core/python/tank_vendor/flow_integration_sdk/storage.py create mode 100644 python/tk-core/python/tank_vendor/flow_integration_sdk/transferapi.py create mode 100644 python/tk-core/python/tank_vendor/flow_integration_sdk/utils.py delete mode 100644 python/tk-core/requirements/3.7/certs/shotgun_api3/lib/certifi/cacert.pem delete mode 100644 python/tk-core/requirements/3.7/frozen_requirements.txt delete mode 100644 python/tk-core/requirements/3.7/pkgs.zip delete mode 100644 python/tk-core/requirements/3.7/requirements.txt create mode 100644 python/tk-core/requirements/any/flow_data_sdk-beta.zip diff --git a/python/tk-core/_core_upgrader.py b/python/tk-core/_core_upgrader.py index f3959670..3fdcb201 100644 --- a/python/tk-core/_core_upgrader.py +++ b/python/tk-core/_core_upgrader.py @@ -19,11 +19,11 @@ """ -import os -import sys -import stat import datetime +import os import shutil +import stat +import sys LooseVersion = None try: @@ -99,7 +99,7 @@ def __current_version_less_than(log, sgtk_install_root, ver): """ log.debug("Checking if the currently installed version is less than %s..." % ver) - if __is_upgrade(sgtk_install_root) == False: + if not __is_upgrade(sgtk_install_root): # there is no current version. So it is definitely # not at least version X log.debug( diff --git a/python/tk-core/codecov.yml b/python/tk-core/codecov.yml index 5fe4673e..cf2cef2f 100644 --- a/python/tk-core/codecov.yml +++ b/python/tk-core/codecov.yml @@ -1,4 +1,21 @@ +coverage: + status: + project: + default: + # Coverage checks are advisory only - never block CI + informational: true + # Only flag if overall project coverage drops below 80% + target: 80% + # Ignore drops of 1% or less (noise from small changes) + threshold: 1% + patch: + default: + # Coverage checks are advisory only - never block CI + informational: true + # Only flag if less than 80% of new/changed lines are covered + target: 80% + ignore: # ignore generated QT files - "**tank/authentication/ui/login_dialog.py" @@ -6,3 +23,11 @@ ignore: # disable PySide6 code coverage for now - "**tank/util/pyside6_patcher.py" + + # flowam and other files not covered by unit tests + - "**tank/bootstrap/manager.py" + - "**tank/flowam/create.py" + - "**tank/flowam/host.py" + - "**tank/flowam/open.py" + - "**tank/flowam/utils.py" + - "**tank/platform/engine.py" diff --git a/python/tk-core/commit_id b/python/tk-core/commit_id index 321245c5..3f254928 100644 --- a/python/tk-core/commit_id +++ b/python/tk-core/commit_id @@ -1 +1 @@ -bc5f5e526d45baae95e2233f625550a31ccec92d +2fd64cd3f4f3f7f363c51ddf40f031605087107d diff --git a/python/tk-core/developer/README.md b/python/tk-core/developer/README.md index 27bd1f16..d1992e52 100644 --- a/python/tk-core/developer/README.md +++ b/python/tk-core/developer/README.md @@ -27,6 +27,14 @@ The `requirements/update_python_packages.py` script automates the creation and m - Generate the `frozen_requirements.txt` file for consistency. 3. Validate that the `pkgs.zip` file contains all necessary packages and matches the updated requirements. +### Shared (Python-version-independent) vendor zips + +In addition to the per-version `pkgs.zip`, `requirements/any/` holds pure-Python +packages that are safe to load across every supported Python version (e.g. the +Autodesk Flow Data Beta SDK). Each zip is auto-discovered by +`tank_vendor/__init__.py` and contains the importable package plus its +`.dist-info/` directory at the zip's root. + ## How to upgrade ruamel.yaml Until version `0.10.10`, the contents of the library was located at `tank_vendor/ruamel_yaml`. diff --git a/python/tk-core/developer/bake_config.py b/python/tk-core/developer/bake_config.py index 6c16ecfd..9375ce77 100644 --- a/python/tk-core/developer/bake_config.py +++ b/python/tk-core/developer/bake_config.py @@ -15,8 +15,8 @@ # system imports import os -import sys import shutil +import sys # add sgtk API this_folder = os.path.abspath(os.path.dirname(__file__)) @@ -25,23 +25,27 @@ # any installed version in site-packages sys.path.insert(0, python_folder) +import functools + # sgtk imports from tank import LogManager -from tank.util import filesystem -from tank.descriptor import Descriptor, descriptor_uri_to_dict -from tank.descriptor import create_descriptor, is_descriptor_version_missing -from tank.descriptor.errors import TankDescriptorError from tank.bootstrap import constants as bootstrap_constants -import functools - +from tank.descriptor import ( + Descriptor, + create_descriptor, + descriptor_uri_to_dict, + is_descriptor_version_missing, +) +from tank.descriptor.errors import TankDescriptorError +from tank.util import filesystem from utils import ( - cache_apps, - authenticate, - add_authentication_options, OptionParserLineBreakingEpilog, + add_authentication_options, + authenticate, + automated_setup_documentation, + cache_apps, cleanup_bundle_cache, wipe_folder, - automated_setup_documentation, ) # Set up logging diff --git a/python/tk-core/developer/build_plugin.py b/python/tk-core/developer/build_plugin.py index fcf7abd1..c42be482 100644 --- a/python/tk-core/developer/build_plugin.py +++ b/python/tk-core/developer/build_plugin.py @@ -16,11 +16,12 @@ a primed bundle cache. """ +import datetime + # system imports import os -import sys import shutil -import datetime +import sys # add sgtk API this_folder = os.path.abspath(os.path.dirname(__file__)) @@ -31,22 +32,27 @@ # sgtk imports from tank import LogManager -from tank.util import filesystem, sgre as re -from tank.errors import TankError -from tank.descriptor import Descriptor, descriptor_uri_to_dict, descriptor_dict_to_uri -from tank.descriptor import create_descriptor, is_descriptor_version_missing -from tank.bootstrap.baked_configuration import BakedConfiguration from tank.bootstrap import constants as bootstrap_constants +from tank.bootstrap.baked_configuration import BakedConfiguration +from tank.descriptor import ( + Descriptor, + create_descriptor, + descriptor_dict_to_uri, + descriptor_uri_to_dict, + is_descriptor_version_missing, +) +from tank.errors import TankError +from tank.util import filesystem +from tank.util import sgre as re from tank_vendor import yaml - from utils import ( - cache_apps, - authenticate, - add_authentication_options, OptionParserLineBreakingEpilog, + add_authentication_options, + authenticate, + automated_setup_documentation, + cache_apps, cleanup_bundle_cache, wipe_folder, - automated_setup_documentation, ) # set up logging diff --git a/python/tk-core/developer/find_flow_project.py b/python/tk-core/developer/find_flow_project.py new file mode 100644 index 00000000..804ed05f --- /dev/null +++ b/python/tk-core/developer/find_flow_project.py @@ -0,0 +1,166 @@ +#!/usr/bin/env python3 +# Copyright (c) 2026 Shotgun Software Inc. +# CONFIDENTIAL AND PROPRIETARY +""" +Standalone CLI to find your Flow project ID using the Flow Data SDK. + +Use this script to retrieve the Flow project ID for a given FPT project, +so it can be linked in the FPT site settings. + +Defaults to production values. Override any individual setting via flags. + +Usage: + # Production (default): + python scripts/find_flow_project.py + + # Override just the endpoint (e.g. for staging): + python scripts/find_flow_project.py --endpoint + + # Override multiple values: + python scripts/find_flow_project.py --endpoint --application-id --auth-base-url + + # Filter by project name (case-insensitive): + python scripts/find_flow_project.py --name "My Project" +""" + +from __future__ import annotations + +import argparse +import os +import sys + +# Set up sys.path so tk-core python packages are importable +_SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +_REPO_ROOT = os.path.dirname(_SCRIPT_DIR) +sys.path.insert(0, os.path.join(_REPO_ROOT, "python")) + +from tank.authentication.flow_auth._constants import ( + DEFAULT_AUTH_APPLICATION_ID, + DEFAULT_AUTH_BASE_URL, + DEFAULT_AUTH_CALLBACK_URL, + REQUIRED_SCOPES, +) +from tank.util import LocalFileStorageManager +from tank_vendor.adsk_auth import AuthConfig, get_access_token +from tank_vendor.flow_data_sdk import GQLClient +from tank_vendor.flow_data_sdk.base import model as flow_model +from tank_vendor.flow_data_sdk.base.client import AuthenticationHandlerBase + +DEFAULT_ENDPOINT = "https://medm-v2.medata-p-ue1.cloudos.autodesk.com/api/v2/graphql" + + +class TokenAuthHandler(AuthenticationHandlerBase): + """Auth handler that returns a pre-fetched token.""" + + def __init__(self, token: str) -> None: + self._token = token + + def get_authentication_token(self) -> str: + return self._token + + +def main() -> None: + parser = argparse.ArgumentParser( + description="List Flow collections/projects to find project IDs for FPT linking.", + ) + parser.add_argument( + "--endpoint", + default=DEFAULT_ENDPOINT, + help=f"Flow GraphQL endpoint URL (default: {DEFAULT_ENDPOINT})", + ) + parser.add_argument( + "--application-id", + default=DEFAULT_AUTH_APPLICATION_ID, + help="APS application ID (default: prod value)", + ) + parser.add_argument( + "--auth-base-url", + default=DEFAULT_AUTH_BASE_URL, + help=f"APS auth base URL (default: {DEFAULT_AUTH_BASE_URL})", + ) + parser.add_argument( + "--auth-callback-url", + default=DEFAULT_AUTH_CALLBACK_URL, + help=f"OAuth callback URL (default: {DEFAULT_AUTH_CALLBACK_URL})", + ) + parser.add_argument( + "--name", + help="Only show projects whose name contains this string (case-insensitive)", + ) + parser.add_argument( + "--force-reauth", + action="store_true", + help="Ignore cached tokens and force browser login", + ) + parser.add_argument( + "--time-out", + type=float, + default=120.0, + help="Browser auth timeout in seconds (default: 120)", + ) + args = parser.parse_args() + + print(f"Endpoint : {args.endpoint}") + print("Authenticating... (browser may open if no valid cached token)") + + auth_config = AuthConfig( + application_id=args.application_id, + base_url=args.auth_base_url, + callback_url=args.auth_callback_url, + description="Flow find project CLI", + required_application_scopes=REQUIRED_SCOPES, + storage_dir=LocalFileStorageManager.get_global_root( + LocalFileStorageManager.CACHE + ), + ) + token = get_access_token( + auth_config, + force_reauthentication=args.force_reauth, + time_out=args.time_out, + ) + + client = GQLClient( + endpoint=args.endpoint, + auth_handler=TokenAuthHandler(token), + ) + + name_filter = (args.name or "").strip().lower() + collections_resp = client.service_collection.collections( + flow_model.CollectionsInput() + ).call() + + collections = getattr(collections_resp, "collections", None) or [] + if not collections: + print("No collections found for your account.") + sys.exit(0) + + found_any = False + for col in collections: + col_id = getattr(col, "id", None) or "" + col_name = getattr(col, "name", None) or "(no name)" + projects_resp = client.service_project.projects_by_collection_id( + flow_model.ProjectsByCollectionIdInput(collection_id=col_id) + ).call() + projects = getattr(projects_resp, "projects", None) or [] + for proj in projects: + proj_name = getattr(proj, "name", None) or "(no name)" + proj_id = getattr(proj, "id", None) or "" + if name_filter and name_filter not in proj_name.lower(): + continue + if not found_any: + print("\nCollection -> Project") + print("-" * 60) + found_any = True + print(f" {col_name} -> {proj_name}") + print(f" Project ID: {proj_id}") + print() + if not projects and not name_filter: + print(f" {col_name} -> (no projects)") + + if not found_any and name_filter: + print(f"No project matching '{args.name}' found.") + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/python/tk-core/developer/populate_bundle_cache.py b/python/tk-core/developer/populate_bundle_cache.py index 6ac83b6d..30062379 100644 --- a/python/tk-core/developer/populate_bundle_cache.py +++ b/python/tk-core/developer/populate_bundle_cache.py @@ -18,7 +18,6 @@ # system imports import os - import sys # add sgtk API @@ -30,16 +29,15 @@ # sgtk imports from sgtk import LogManager -from sgtk.util import filesystem from sgtk.descriptor import Descriptor, create_descriptor, is_descriptor_version_missing - +from sgtk.util import filesystem from utils import ( - cache_apps, - authenticate, - add_authentication_options, OptionParserLineBreakingEpilog, - cleanup_bundle_cache, + add_authentication_options, + authenticate, automated_setup_documentation, + cache_apps, + cleanup_bundle_cache, ) # set up logging diff --git a/python/tk-core/developer/utils/__init__.py b/python/tk-core/developer/utils/__init__.py index 15eeef6d..9d6c3285 100644 --- a/python/tk-core/developer/utils/__init__.py +++ b/python/tk-core/developer/utils/__init__.py @@ -1,7 +1,7 @@ -from .caching import cache_apps, cleanup_bundle_cache, wipe_folder # noqa -from .option_parser import OptionParserLineBreakingEpilog # noqa -from .authentication import ( +from .authentication import ( # noqa add_authentication_options, authenticate, automated_setup_documentation, -) # noqa +) +from .caching import cache_apps, cleanup_bundle_cache, wipe_folder # noqa +from .option_parser import OptionParserLineBreakingEpilog # noqa diff --git a/python/tk-core/developer/utils/caching.py b/python/tk-core/developer/utils/caching.py index da8ae723..17ca8a92 100644 --- a/python/tk-core/developer/utils/caching.py +++ b/python/tk-core/developer/utils/caching.py @@ -8,16 +8,15 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -import os import glob +import os import shutil import stat -from tank.util import filesystem -from tank.platform import environment -from tank.descriptor import Descriptor, create_descriptor - from tank import LogManager +from tank.descriptor import Descriptor, create_descriptor +from tank.platform import environment +from tank.util import filesystem logger = LogManager.get_logger("utils.caching") diff --git a/python/tk-core/hooks/cache_location.py b/python/tk-core/hooks/cache_location.py index 1578a9d7..988dfebb 100644 --- a/python/tk-core/hooks/cache_location.py +++ b/python/tk-core/hooks/cache_location.py @@ -12,9 +12,10 @@ Hook to control path cache and bundle cache folder creation. """ -import sgtk import os -from sgtk.util import filesystem, LocalFileStorageManager + +import sgtk +from sgtk.util import LocalFileStorageManager, filesystem HookBaseClass = sgtk.get_hook_baseclass() log = sgtk.LogManager.get_logger(__name__) diff --git a/python/tk-core/hooks/ensure_folder_exists.py b/python/tk-core/hooks/ensure_folder_exists.py index 1b8573e3..ce56404a 100644 --- a/python/tk-core/hooks/ensure_folder_exists.py +++ b/python/tk-core/hooks/ensure_folder_exists.py @@ -13,8 +13,8 @@ :class:`~sgtk.platform.Application.ensure_folder_exists` method is called. """ -from sgtk.util import filesystem from sgtk import Hook +from sgtk.util import filesystem class EnsureFolderExists(Hook): diff --git a/python/tk-core/hooks/get_current_login.py b/python/tk-core/hooks/get_current_login.py index 78870b5a..1197e9f7 100644 --- a/python/tk-core/hooks/get_current_login.py +++ b/python/tk-core/hooks/get_current_login.py @@ -27,8 +27,9 @@ current user. """ -from tank import Hook import os + +from tank import Hook from tank.util import is_windows @@ -54,5 +55,5 @@ def execute(self, **kwargs): pwd_entry = pwd.getpwuid(os.geteuid()) return pwd_entry[0] - except: + except Exception: return None diff --git a/python/tk-core/hooks/process_folder_creation.py b/python/tk-core/hooks/process_folder_creation.py index f6c0a83b..d0f18ddc 100644 --- a/python/tk-core/hooks/process_folder_creation.py +++ b/python/tk-core/hooks/process_folder_creation.py @@ -13,9 +13,10 @@ called. """ -from tank import Hook import os import shutil + +from tank import Hook from tank.util import is_windows diff --git a/python/tk-core/hooks/process_folder_name.py b/python/tk-core/hooks/process_folder_name.py index b9d4e654..cc38edc6 100644 --- a/python/tk-core/hooks/process_folder_name.py +++ b/python/tk-core/hooks/process_folder_name.py @@ -24,9 +24,10 @@ raise TankError("Shot names cannot start with AA!") """ -from tank import Hook import re +from tank import Hook + class ProcessFolderName(Hook): def execute(self, entity_type, entity_id, field_name, value, **kwargs): diff --git a/python/tk-core/info.yml b/python/tk-core/info.yml index 42d7d155..e62d7ec9 100644 --- a/python/tk-core/info.yml +++ b/python/tk-core/info.yml @@ -12,9 +12,10 @@ # This is automatically replaced with appropriate values # as the core bundle is uploaded to the app store. -version: "v0.23.8" +version: "v0.23.10" documentation_url: "https://help.autodesk.com/view/SGDEV/ENU/?contextId=SA_INTEGRATIONS_USER_GUIDE" requires_shotgun_version: "v5.0.0" +minimum_python_version: "3.9" features: # lean_config history diff --git a/python/tk-core/python/sgtk/__init__.py b/python/tk-core/python/sgtk/__init__.py index 0df56282..0b1f2684 100644 --- a/python/tk-core/python/sgtk/__init__.py +++ b/python/tk-core/python/sgtk/__init__.py @@ -12,12 +12,12 @@ ALT_API_NAME = "tank" THIS_MODULE_NAME = "sgtk" -# first import our alternative API -import tank - # now go through and duplicate all entries in sys.modules import sys +# first import our alternative API +import tank # noqa: F401 + # Generate a list of keys to iterate over, # since we'll be mutating the dict as we iterate. for x in list(sys.modules.keys()): diff --git a/python/tk-core/python/tank/__init__.py b/python/tk-core/python/tank/__init__.py index 2e553bd8..f720d254 100644 --- a/python/tk-core/python/tank/__init__.py +++ b/python/tk-core/python/tank/__init__.py @@ -35,34 +35,19 @@ import uuid import warnings -if sys.version_info < (3, 7): +if sys.version_info < (3, 9): if os.environ.get("SHOTGUN_ALLOW_OLD_PYTHON", "0") != "1": - # This is our preferred default behavior when using an old - # unsupported Python version. - # This way, we can control where the exception is raised, and it provides a - # comprehensive error message rather than having users facing a random - # Python traceback and trying to understand this is due to using an - # unsupported Python version. - - raise RuntimeError("This module requires Python version 3.7 or higher.") + raise RuntimeError("This module requires Python version 3.9 or higher.") warnings.warn( - "Python versions older than 3.7 are no longer supported as of January " - "2023. Since the SHOTGUN_ALLOW_OLD_PYTHON variable is enabled, this " + "Python versions older than 3.9 are no longer supported as of March " + "2025. Since the SHOTGUN_ALLOW_OLD_PYTHON variable is enabled, this " "module is raising a warning instead of an exception. " "However, it is very likely that this module will not be able to work " "on this Python version.", RuntimeWarning, stacklevel=2, ) -elif sys.version_info < (3, 9): - warnings.warn( - "Python versions older than 3.9 are no longer supported as of March " - "2025 and compatibility will be discontinued after March 2026. " - "Please update to Python 3.11 or any other supported version.", - DeprecationWarning, - stacklevel=2 - ) def __fix_tank_vendor(): @@ -134,57 +119,58 @@ def __fix_tank_vendor(): ######################################################################## # first import the log manager since a lot of modules require this. -from .log import LogManager +from .log import LogManager # isort: skip # make sure that all sub-modules are imported at the same as the main module -from . import authentication -from . import descriptor -from . import bootstrap -from . import commands -from . import deploy -from . import folder -from . import platform -from . import util +from . import ( + authentication, + bootstrap, + commands, + deploy, + descriptor, + folder, + platform, + util, +) # core functionality from .api import ( + Sgtk, Tank, - tank_from_path, - tank_from_entity, - set_authenticated_user, get_authenticated_user, + set_authenticated_user, + sgtk_from_entity, + sgtk_from_path, + tank_from_entity, + tank_from_path, ) -from .api import Sgtk, sgtk_from_path, sgtk_from_entity -from .pipelineconfig_utils import ( - get_python_interpreter_for_config, - get_core_python_path_for_config, - get_sgtk_module_path, -) +from .authentication.flow_auth import get_flow_access_token, get_flow_client +from .commands import CommandInteraction, SgtkSystemCommand, get_command, list_commands +# expose the support url +from .constants import ( + DEFAULT_STORAGE_ROOT_HOOK_NAME, +) +from .constants import SUPPORT_URL as support_url from .context import Context - from .errors import ( TankError, TankErrorProjectIsSetup, - TankHookMethodDoesNotExistError, TankFileDoesNotExistError, - TankUnreadableFileError, - TankInvalidInterpreterLocationError, + TankHookMethodDoesNotExistError, TankInvalidCoreLocationError, + TankInvalidInterpreterLocationError, TankNotPipelineConfigurationError, + TankUnreadableFileError, +) +from .hook import Hook, get_hook_baseclass +from .pipelineconfig_utils import ( + get_core_python_path_for_config, + get_python_interpreter_for_config, + get_sgtk_module_path, ) # note: TankEngineInitError used to reside in .errors but was moved into platform.errors from .platform.errors import TankEngineInitError from .template import Template, TemplatePath, TemplateString -from .hook import Hook, get_hook_baseclass - -from .commands import list_commands, get_command, SgtkSystemCommand, CommandInteraction - -from .templatekey import TemplateKey, SequenceKey, IntegerKey, StringKey, TimestampKey - -# expose the support url -from .constants import ( - DEFAULT_STORAGE_ROOT_HOOK_NAME, - SUPPORT_URL as support_url, -) +from .templatekey import IntegerKey, SequenceKey, StringKey, TemplateKey, TimestampKey diff --git a/python/tk-core/python/tank/api.py b/python/tk-core/python/tank/api.py index cca816e1..03478832 100644 --- a/python/tk-core/python/tank/api.py +++ b/python/tk-core/python/tank/api.py @@ -12,20 +12,22 @@ Classes for the main Sgtk API. """ -import os import glob +import os -from . import folder -from . import context -from .util import shotgun, yaml_cache +from . import ( + LogManager, + constants, + context, + folder, + pipelineconfig, + pipelineconfig_factory, + pipelineconfig_utils, +) from .errors import TankError, TankMultipleMatchingTemplatesError from .path_cache import PathCache from .template import read_templates -from . import constants -from . import pipelineconfig -from . import pipelineconfig_utils -from . import pipelineconfig_factory -from . import LogManager +from .util import shotgun, yaml_cache log = LogManager.get_logger(__name__) @@ -38,7 +40,7 @@ class Sgtk(object): manipulation and the Toolkit template system. """ - (DEFAULT, CENTRALIZED, DISTRIBUTED) = range(3) + DEFAULT, CENTRALIZED, DISTRIBUTED = range(3) def __init__(self, project_path): """ @@ -1032,7 +1034,6 @@ def get_authenticated_user(): :returns: A :class:`~sgtk.authentication.ShotgunUser` derived object if set, None otherwise. """ - global _authenticated_user return _authenticated_user diff --git a/python/tk-core/python/tank/authentication/__init__.py b/python/tk-core/python/tank/authentication/__init__.py index f9125528..f669b96d 100644 --- a/python/tk-core/python/tank/authentication/__init__.py +++ b/python/tk-core/python/tank/authentication/__init__.py @@ -18,27 +18,28 @@ credentials are reused if available. """ +from .core_defaults_manager import CoreDefaultsManager +from .defaults_manager import DefaultsManager +from .errors import ConsoleLoginWithSSONotSupportedError # For backward compatibility. from .errors import ( # noqa AuthenticationCancelled, AuthenticationError, - ConsoleLoginWithSSONotSupportedError, # For backward compatibility. ConsoleLoginNotSupportedError, IncompleteCredentials, ShotgunAuthenticationError, UnresolvableHumanUser, UnresolvableScriptUser, ) -from .web_login_support import ( - get_shotgun_authenticator_support_web_login, - set_shotgun_authenticator_support_web_login, -) +from .flow_auth import FlowAuthenticationHandler, get_flow_access_token, get_flow_client from .shotgun_authenticator import ShotgunAuthenticator -from .defaults_manager import DefaultsManager -from .core_defaults_manager import CoreDefaultsManager from .user import ( # noqa - deserialize_user, - serialize_user, ShotgunSamlUser, ShotgunUser, ShotgunWebUser, + deserialize_user, + serialize_user, +) +from .web_login_support import ( + get_shotgun_authenticator_support_web_login, + set_shotgun_authenticator_support_web_login, ) diff --git a/python/tk-core/python/tank/authentication/app_session_launcher.py b/python/tk-core/python/tank/authentication/app_session_launcher.py index 0e7762db..c48d260e 100644 --- a/python/tk-core/python/tank/authentication/app_session_launcher.py +++ b/python/tk-core/python/tank/authentication/app_session_launcher.py @@ -89,7 +89,7 @@ def process( url_handlers.append( urllib.request.HTTPSHandler( - context = ssl.create_default_context( + context=ssl.create_default_context( cafile=ca_certs, ), ), @@ -255,10 +255,12 @@ def process( elif response_code_major == 3: location = response.headers.get("location", None) - logger.debug("Request redirected: http code: {code}; redirect to: {location}".format( - code=response.code, - location=location, - )) + logger.debug( + "Request redirected: http code: {code}; redirect to: {location}".format( + code=response.code, + location=location, + ) + ) raise AuthenticationError( "Request redirected", @@ -286,9 +288,11 @@ def process( ) elif response.code != http.client.OK: - logger.debug("Request denied: http code is: {code}".format( - code=response.code, - )) + logger.debug( + "Request denied: http code is: {code}".format( + code=response.code, + ) + ) raise AuthenticationError( "Request denied", payload=getattr(response, "json", response), @@ -503,9 +507,11 @@ def build_user_agent(): lh = logging.StreamHandler() lh.setLevel(logging.DEBUG) - lh.setFormatter(logging.Formatter( - "%(asctime)s - %(levelname)s - %(message)s", - )) + lh.setFormatter( + logging.Formatter( + "%(asctime)s - %(levelname)s - %(message)s", + ) + ) logger.addHandler(lh) print() diff --git a/python/tk-core/python/tank/authentication/console_authentication.py b/python/tk-core/python/tank/authentication/console_authentication.py index cde2ddc7..cebcb995 100644 --- a/python/tk-core/python/tank/authentication/console_authentication.py +++ b/python/tk-core/python/tank/authentication/console_authentication.py @@ -19,23 +19,21 @@ -------------------------------------------------------------------------------- """ -from . import constants -from . import session_cache +import webbrowser +from getpass import getpass + +from tank_vendor.shotgun_api3 import MissingTwoFactorAuthenticationFault + from .. import LogManager +from ..util import metrics_cache +from ..util.metrics import EventMetric +from ..util.shotgun.connection import sanitize_url +from . import app_session_launcher, constants, session_cache, site_info from .errors import ( - AuthenticationError, AuthenticationCancelled, + AuthenticationError, ConsoleLoginNotSupportedError, ) -from tank_vendor.shotgun_api3 import MissingTwoFactorAuthenticationFault -from . import site_info -from . import app_session_launcher -from ..util import metrics_cache -from ..util.metrics import EventMetric -from ..util.shotgun.connection import sanitize_url - -from getpass import getpass -import webbrowser logger = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/authentication/constants.py b/python/tk-core/python/tank/authentication/constants.py index b3bf7194..28972b34 100644 --- a/python/tk-core/python/tank/authentication/constants.py +++ b/python/tk-core/python/tank/authentication/constants.py @@ -20,8 +20,6 @@ def method_resolve_reverse(m): - global method_resolve - - for (k, v) in method_resolve.items(): + for k, v in method_resolve.items(): if v == m: return k diff --git a/python/tk-core/python/tank/authentication/core_defaults_manager.py b/python/tk-core/python/tank/authentication/core_defaults_manager.py index 0f3c2f0e..aa7c0db9 100644 --- a/python/tk-core/python/tank/authentication/core_defaults_manager.py +++ b/python/tk-core/python/tank/authentication/core_defaults_manager.py @@ -14,8 +14,8 @@ been configured with the core, its credentials will also be provided. """ -from .defaults_manager import DefaultsManager from ..util import shotgun +from .defaults_manager import DefaultsManager class CoreDefaultsManager(DefaultsManager): diff --git a/python/tk-core/python/tank/authentication/defaults_manager.py b/python/tk-core/python/tank/authentication/defaults_manager.py index 886b5c11..d23026f6 100644 --- a/python/tk-core/python/tank/authentication/defaults_manager.py +++ b/python/tk-core/python/tank/authentication/defaults_manager.py @@ -8,9 +8,9 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -from . import session_cache -from ..util.user_settings import UserSettings from ..util.system_settings import SystemSettings +from ..util.user_settings import UserSettings +from . import session_cache class DefaultsManager(object): diff --git a/python/tk-core/python/tank/authentication/errors.py b/python/tk-core/python/tank/authentication/errors.py index b7fe9330..8bee559c 100644 --- a/python/tk-core/python/tank/authentication/errors.py +++ b/python/tk-core/python/tank/authentication/errors.py @@ -73,9 +73,7 @@ def __init__(self, login): """ :param str login: ``login`` field value of the ``HumanUser`` that could not be resolved. """ - super().__init__( - "person", "HumanUser", "login", login - ) + super().__init__("person", "HumanUser", "login", login) class UnresolvableScriptUser(UnresolvableUser): @@ -87,9 +85,7 @@ def __init__(self, script_name): """ :param str script_name: ``firstname`` field value of the ``ApiUser`` that could not be resolved. """ - super().__init__( - "script", "ApiUser", "firstname", script_name - ) + super().__init__("script", "ApiUser", "firstname", script_name) class ConsoleLoginNotSupportedError(ShotgunAuthenticationError): diff --git a/python/tk-core/python/tank/authentication/flow_auth/__init__.py b/python/tk-core/python/tank/authentication/flow_auth/__init__.py new file mode 100644 index 00000000..a244922e --- /dev/null +++ b/python/tk-core/python/tank/authentication/flow_auth/__init__.py @@ -0,0 +1,41 @@ +# Copyright (c) 2026 Shotgun Software Inc. +# +# CONFIDENTIAL AND PROPRIETARY +# +# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit +# Source Code License included in this distribution package. See LICENSE. +# By accessing, using, copying or modifying this work you indicate your +# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights +# not expressly granted therein are reserved by Shotgun Software Inc. + +""" +Flow / MEDM authentication for Toolkit bootstrap. + +Triggered during bootstrap when a project is "AM-ready". Obtains an APS +access token via PKCE; the token is cached in a local file store for reuse. +""" + +from ._authentication import ( + check_token_expiry, + get_access_token, + get_flow_access_token, + init_authentication, +) +from ._client import FlowAuthenticationHandler, get_flow_client +from ._constants import AM_READY_PROJECT_FIELD +from ._settings import FlowAuthSettings, resolve_flow_auth_settings +from .errors import FlowAuthConfigurationError, FlowAuthError + +__all__ = [ + "init_authentication", + "get_access_token", + "get_flow_access_token", + "check_token_expiry", + "FlowAuthenticationHandler", + "get_flow_client", + "FlowAuthSettings", + "resolve_flow_auth_settings", + "FlowAuthError", + "FlowAuthConfigurationError", + "AM_READY_PROJECT_FIELD", +] diff --git a/python/tk-core/python/tank/authentication/flow_auth/_authentication.py b/python/tk-core/python/tank/authentication/flow_auth/_authentication.py new file mode 100644 index 00000000..1ee18349 --- /dev/null +++ b/python/tk-core/python/tank/authentication/flow_auth/_authentication.py @@ -0,0 +1,193 @@ +# Copyright (c) 2026 Shotgun Software Inc. +# +# CONFIDENTIAL AND PROPRIETARY +# +# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit +# Source Code License included in this distribution package. See LICENSE. +# By accessing, using, copying or modifying this work you indicate your +# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights +# not expressly granted therein are reserved by Shotgun Software Inc. +""" +This module contains utilities for authenticating into Flow. +""" + +from __future__ import annotations + +import base64 +import json +import time + +from tank_vendor.adsk_auth import ( + AuthConfig, +) +from tank_vendor.adsk_auth import get_access_token as get_access_token_from_adsk_auth + +from ... import LogManager +from ...util import LocalFileStorageManager +from ._constants import REQUIRED_SCOPES +from .errors import FlowAuthConfigurationError + +logger = LogManager.get_logger(__name__) + +_aps_configuration = None + + +def init_authentication(settings): + """Initialize authentication configuration with configured settings. + + Args: + settings: FlowAuthSettings (or duck-typed equivalent) containing + auth_application_id, auth_base_url, auth_callback_url. + + Raises: + FlowAuthConfigurationError: If required authentication settings are missing or invalid. + """ + global _aps_configuration + + auth_application_id = settings.auth_application_id + auth_base_url = settings.auth_base_url + auth_callback_url = settings.auth_callback_url + + if not auth_application_id: + raise FlowAuthConfigurationError( + details="Required setting 'auth_application_id' is not configured." + ) + if not auth_base_url: + raise FlowAuthConfigurationError( + details="Required setting 'auth_base_url' is not configured." + ) + if not auth_callback_url: + raise FlowAuthConfigurationError( + details="Required setting 'auth_callback_url' is not configured." + ) + + _aps_configuration = AuthConfig( + application_id=auth_application_id, + base_url=auth_base_url, + callback_url=auth_callback_url, + description="Autodesk Toolkit", + required_application_scopes=REQUIRED_SCOPES, + storage_dir=LocalFileStorageManager.get_global_root( + LocalFileStorageManager.CACHE + ), + ) + + +def _get_aps_configuration(): + """Get the APS configuration. + + Returns: + tank_vendor.adsk_auth.AuthConfig: The initialized auth configuration. + + Raises: + RuntimeError: If authentication has not been initialized. + """ + if _aps_configuration is None: + raise RuntimeError( + "Authentication not initialized. Call init_authentication() first." + ) + return _aps_configuration + + +def check_token_expiry(token: str, buffer_seconds: int = 300) -> bool: + """ + Check if the given token is expiring soon (within the buffer period). + + The Flow API can fail if the token is not yet expired but will expire soon, + so we proactively refresh when within the buffer. + + Args: + token: The access token to check. + buffer_seconds: Seconds before expiry to consider the token "expiring soon". + Defaults to 300 (5 minutes). + + Returns: + True if the token is expiring soon or invalid, False if it has + sufficient validity remaining. + """ + try: + payload = _decode_token_payload(token) + except Exception as e: + logger.error("Error decoding token: %s", e) + return True + + exp_timestamp = payload.get("exp") if payload else None + + if not exp_timestamp: + logger.warning( + "Token does not contain 'exp' claim. Treating token as expiring soon." + ) + return True + + current_timestamp = time.time() + time_remaining = exp_timestamp - current_timestamp + if time_remaining < buffer_seconds: + logger.debug( + "Token will expire in %.0f seconds, less than buffer of %s seconds.", + time_remaining, + buffer_seconds, + ) + return True + + return False + + +def _decode_token_payload(token: str): + """Decode JWT payload without verification (only used to read exp).""" + try: + parts = token.split(".") + if len(parts) != 3: + return None + payload_b64 = parts[1] + padding = (4 - len(payload_b64) % 4) % 4 + payload_b64 += "=" * padding + payload_bytes = base64.urlsafe_b64decode(payload_b64) + return json.loads(payload_bytes) + except Exception: + return None + + +def _auth_options_from_kwargs(kwargs): + """Extract adsk_auth get_access_token options from kwargs (e.g. authentication_options).""" + opts = kwargs.get("authentication_options") + if opts is None: + return {} + return { + "profile": getattr(opts, "user_profile", None), + "force_refresh": getattr(opts, "force_refresh", False), + "force_reauthentication": getattr(opts, "force_reauthentication", False), + "time_out": getattr(opts, "time_out", 30.0), + "browser": getattr(opts, "browser", None), + } + + +def get_access_token(*args, **kwargs) -> str: + """Get access token from file store or web (PKCE). + + Ensures the returned token has at least 5 minutes of validity remaining, + since the Flow API can fail when the token is about to expire. + """ + config = _get_aps_configuration() + options = _auth_options_from_kwargs(kwargs) + token = get_access_token_from_adsk_auth(config, **options) + + if check_token_expiry(token): + logger.info("Access token is expiring within 5 minutes. Forcing a refresh.") + options["force_refresh"] = True + token = get_access_token_from_adsk_auth(config, **options) + + return token + + +def get_flow_access_token(**kwargs) -> str: + """Get a Flow access token, lazy-initialising auth if needed. + + Safe to call without a prior ``init_authentication()`` — if bootstrap has + not already initialised the APS configuration, settings are resolved from + environment variables and initialisation is performed automatically. + """ + if _aps_configuration is None: + from ._settings import resolve_flow_auth_settings + + init_authentication(resolve_flow_auth_settings()) + return get_access_token(**kwargs) diff --git a/python/tk-core/python/tank/authentication/flow_auth/_client.py b/python/tk-core/python/tank/authentication/flow_auth/_client.py new file mode 100644 index 00000000..db00aff2 --- /dev/null +++ b/python/tk-core/python/tank/authentication/flow_auth/_client.py @@ -0,0 +1,49 @@ +# Copyright (c) 2026 Shotgun Software Inc. +# +# CONFIDENTIAL AND PROPRIETARY +# +# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit +# Source Code License included in this distribution package. See LICENSE. +# By accessing, using, copying or modifying this work you indicate your +# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights +# not expressly granted therein are reserved by Shotgun Software Inc. + +""" +Flow GQL SDK client factory with authentication wired in. +""" + +from ._authentication import get_flow_access_token + + +class FlowAuthenticationHandler: + """Auth adapter for the Flow GQL SDK client. + + Satisfies the SDK's ``auth_handler`` interface: the client calls + ``get_authentication_token()`` on every request so that short-lived tokens + are transparently refreshed without recreating the client. + """ + + def get_authentication_token(self) -> str: + return get_flow_access_token() + + +# TODO: replace with proper client entry point +def get_flow_client(endpoint_url=None): + """Return a ready-to-use Flow GQL SDK client with authentication wired in. + + Lazy-initialises APS auth if bootstrap has not already done so. Uses the + SDK default endpoint (``tank_vendor.flow_data_sdk.config.DEFAULT_ENDPOINT``) + when ``endpoint_url`` is not supplied. + + :param endpoint_url: Override the GraphQL endpoint. Defaults to the SDK's + production endpoint. + :type endpoint_url: str or None + :returns: Initialised ``GQLClient`` instance. + """ + from tank_vendor.flow_data_sdk import GQLClient + from tank_vendor.flow_data_sdk.config import DEFAULT_ENDPOINT + + return GQLClient( + endpoint=endpoint_url or DEFAULT_ENDPOINT, + auth_handler=FlowAuthenticationHandler(), + ) diff --git a/python/tk-core/python/tank/authentication/flow_auth/_constants.py b/python/tk-core/python/tank/authentication/flow_auth/_constants.py new file mode 100644 index 00000000..b4c0b540 --- /dev/null +++ b/python/tk-core/python/tank/authentication/flow_auth/_constants.py @@ -0,0 +1,26 @@ +# Copyright (c) 2026 Shotgun Software Inc. +# +# CONFIDENTIAL AND PROPRIETARY +# +# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit +# Source Code License included in this distribution package. See LICENSE. +# By accessing, using, copying or modifying this work you indicate your +# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights +# not expressly granted therein are reserved by Shotgun Software Inc. + +"""Constants for Flow / MEDM authentication.""" + +AM_READY_PROJECT_FIELD = "sg_flow_am_id" + +DEFAULT_AUTH_APPLICATION_ID = "8QyoQKXZ7HDuQFmptJGrzsp2GwpATmyV" +DEFAULT_AUTH_BASE_URL = "https://api.aps.usa.autodesk.com" +DEFAULT_AUTH_CALLBACK_URL = "http://localhost:4201/auth/callback" + +# Previously "openid" was also requested but is not used or required for +# authentication to Flow, and exceeded Windows Credential Manager's 1280-char +# limit. Safe to exclude. +REQUIRED_SCOPES = [ + "data:read", + "data:write", + "data:create", +] diff --git a/python/tk-core/python/tank/authentication/flow_auth/_settings.py b/python/tk-core/python/tank/authentication/flow_auth/_settings.py new file mode 100644 index 00000000..1a276ce9 --- /dev/null +++ b/python/tk-core/python/tank/authentication/flow_auth/_settings.py @@ -0,0 +1,51 @@ +# Copyright (c) 2026 Shotgun Software Inc. +# +# CONFIDENTIAL AND PROPRIETARY +# +# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit +# Source Code License included in this distribution package. See LICENSE. +# By accessing, using, copying or modifying this work you indicate your +# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights +# not expressly granted therein are reserved by Shotgun Software Inc. + +"""Settings resolver for Flow / MEDM authentication.""" + +from __future__ import annotations + +import os +from dataclasses import dataclass + +from ._constants import ( + DEFAULT_AUTH_APPLICATION_ID, + DEFAULT_AUTH_BASE_URL, + DEFAULT_AUTH_CALLBACK_URL, +) + + +@dataclass +class FlowAuthSettings: + """APS credentials required to perform PKCE authentication.""" + + auth_application_id: str + auth_base_url: str + auth_callback_url: str + + +def resolve_flow_auth_settings() -> FlowAuthSettings: + """ + Resolve APS auth settings: env-var overrides, falling back to hardcoded defaults. + + Override env vars: + TK_FLOW_AUTH_APPLICATION_ID + TK_FLOW_AUTH_BASE_URL + TK_FLOW_AUTH_CALLBACK_URL + """ + return FlowAuthSettings( + auth_application_id=os.environ.get( + "TK_FLOW_AUTH_APPLICATION_ID", DEFAULT_AUTH_APPLICATION_ID + ), + auth_base_url=os.environ.get("TK_FLOW_AUTH_BASE_URL", DEFAULT_AUTH_BASE_URL), + auth_callback_url=os.environ.get( + "TK_FLOW_AUTH_CALLBACK_URL", DEFAULT_AUTH_CALLBACK_URL + ), + ) diff --git a/python/tk-core/python/tank/authentication/flow_auth/errors.py b/python/tk-core/python/tank/authentication/flow_auth/errors.py new file mode 100644 index 00000000..bc9c3f6c --- /dev/null +++ b/python/tk-core/python/tank/authentication/flow_auth/errors.py @@ -0,0 +1,25 @@ +# Copyright (c) 2026 Shotgun Software Inc. +# +# CONFIDENTIAL AND PROPRIETARY +# +# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit +# Source Code License included in this distribution package. See LICENSE. +# By accessing, using, copying or modifying this work you indicate your +# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights +# not expressly granted therein are reserved by Shotgun Software Inc. + +"""Errors for Flow / MEDM authentication.""" + +from ...errors import TankError + + +class FlowAuthError(TankError): + """Base exception for Flow / MEDM authentication errors.""" + + +class FlowAuthConfigurationError(FlowAuthError): + """Raised when Flow auth settings are missing or invalid.""" + + def __init__(self, details: str = ""): + super().__init__(details) + self.details = details diff --git a/python/tk-core/python/tank/authentication/interactive_authentication.py b/python/tk-core/python/tank/authentication/interactive_authentication.py index d5ca7a94..d68a267c 100644 --- a/python/tk-core/python/tank/authentication/interactive_authentication.py +++ b/python/tk-core/python/tank/authentication/interactive_authentication.py @@ -24,15 +24,14 @@ # Using "with" with the lock to make sure it is always released. -from .errors import AuthenticationCancelled -from .console_authentication import ConsoleLoginHandler, ConsoleRenewSessionHandler - -from .. import LogManager - -import threading import os +import threading + from tank.util import is_windows +from .. import LogManager +from .console_authentication import ConsoleLoginHandler, ConsoleRenewSessionHandler +from .errors import AuthenticationCancelled logger = LogManager.get_logger(__name__) @@ -56,7 +55,7 @@ def _get_current_os_user(): pwd_entry = pwd.getpwuid(os.geteuid()) return pwd_entry[0] - except: + except Exception: return None @@ -78,6 +77,7 @@ def _get_ui_state() -> bool: return bool(QtGui and QtGui.QApplication.instance()) + class SessionRenewal(object): """ Handles multi-threaded session renewal. This class handles the use case when @@ -220,6 +220,7 @@ def renew_session(user): # If we have a gui, we need gui based authentication if has_ui: from .ui_authentication import UiAuthenticationHandler + authenticator = UiAuthenticationHandler( is_session_renewal=True, session_metadata=user.get_session_metadata() ) diff --git a/python/tk-core/python/tank/authentication/login_dialog.py b/python/tk-core/python/tank/authentication/login_dialog.py index 46311c8d..1b7542f3 100644 --- a/python/tk-core/python/tank/authentication/login_dialog.py +++ b/python/tk-core/python/tank/authentication/login_dialog.py @@ -17,37 +17,34 @@ at any point. -------------------------------------------------------------------------------- """ + import os import sys + from tank_vendor import shotgun_api3 -from .. import constants -from .web_login_support import get_shotgun_authenticator_support_web_login -from .ui import resources_rc # noqa -from .ui import login_dialog -from . import constants as auth_constants -from . import session_cache + +from .. import LogManager, constants +from ..util import LocalFileStorageManager, login, metrics_cache from ..util.metrics import EventMetric from ..util.shotgun import connection -from ..util import login -from ..util import LocalFileStorageManager -from ..util import metrics_cache -from .errors import AuthenticationError -from .ui.qt_abstraction import ( - QtGui, - QtCore, - QtNetwork, - QtWebEngineWidgets, - qt_version_tuple, -) from . import app_session_launcher -from . import site_info +from . import constants as auth_constants +from . import session_cache, site_info +from .errors import AuthenticationError from .sso_saml2 import ( SsoSaml2IncompletePySide2, SsoSaml2MissingQtModuleError, ) from .sso_saml2.sso_saml2_toolkit import SsoSaml2Toolkit - -from .. import LogManager +from .ui import resources_rc # noqa +from .ui import login_dialog +from .ui.qt_abstraction import ( + QtCore, + QtGui, + QtNetwork, + QtWebEngineWidgets, +) +from .web_login_support import get_shotgun_authenticator_support_web_login logger = LogManager.get_logger(__name__) @@ -109,6 +106,7 @@ def run(self): """ self._site_info.reload(self._url_to_test, self._http_proxy) + class LoginDialog(QtGui.QDialog): """ Dialog for getting user credentials. @@ -315,6 +313,16 @@ def __init__( % self._get_current_site() ) + # QThread.finished is delivered through the Qt event queue and requires + # the event loop to be running. Since we are still in the constructor, + # the _toggle_web slot has not been called yet even though wait() + # returned and the thread is done. Call it directly here so the dialog + # opens with the correct UI (e.g. Identity/SSO sites must not flash the + # 3-fields credentials form before switching to the web-login view). + # The guard inside _toggle_web makes the subsequent signal delivery a + # no-op, so this is safe. + self._toggle_web() + # Initialize exit confirm message box self.confirm_box = QtGui.QMessageBox( QtGui.QMessageBox.Question, @@ -484,15 +492,21 @@ def _toggle_web(self, method_selected=None): # - they need to use the legacy login / passphrase to use a PAT with # Autodesk Identity authentication if os.environ.get("SGTK_FORCE_STANDARD_LOGIN_DIALOG"): - logger.info("Using the standard login dialog with the Flow Production Tracking") + logger.info( + "Using the standard login dialog with the Flow Production Tracking" + ) else: if _is_running_in_desktop(): - can_use_web = can_use_web or self.site_info.autodesk_identity_enabled + can_use_web = ( + can_use_web or self.site_info.autodesk_identity_enabled + ) # If we have full support for Web-based login, or if we enable it in our # environment, use the Unified Login Flow for all authentication modes. if get_shotgun_authenticator_support_web_login(): - can_use_web = can_use_web or self.site_info.unified_login_flow_enabled + can_use_web = ( + can_use_web or self.site_info.unified_login_flow_enabled + ) if method_selected: # Selecting requested mode (credentials, qt_web_login or app_session_launcher) @@ -504,9 +518,7 @@ def _toggle_web(self, method_selected=None): method_selected = session_cache.get_preferred_method(site) # Make sure that the method_selected is currently supported - if ( - method_selected == auth_constants.METHOD_WEB_LOGIN and not can_use_web - ) or ( + if (method_selected == auth_constants.METHOD_WEB_LOGIN and not can_use_web) or ( method_selected == auth_constants.METHOD_ASL and not can_use_asl ): method_selected = None @@ -518,9 +530,7 @@ def _toggle_web(self, method_selected=None): ) # Make sure that the method_selected is currently supported - if ( - method_selected == auth_constants.METHOD_WEB_LOGIN and not can_use_web - ) or ( + if (method_selected == auth_constants.METHOD_WEB_LOGIN and not can_use_web) or ( method_selected == auth_constants.METHOD_ASL and not can_use_asl ): method_selected = None @@ -691,7 +701,9 @@ def result(self): "Logged In", properties={ "authentication_method": self.site_info.user_authentication_method, - "authentication_experience": auth_constants.method_resolve.get(self.method_selected), + "authentication_experience": auth_constants.method_resolve.get( + self.method_selected + ), "authentication_interface": "qt_dialog", "authentication_renewal": self._is_session_renewal, }, @@ -760,7 +772,10 @@ def _ok_pressed(self): # Cleanup the URL and update the GUI. if self.method_selected != auth_constants.METHOD_BASIC: - if site.startswith("http://") and "SGTK_AUTH_ALLOW_NO_HTTPS" not in os.environ: + if ( + site.startswith("http://") + and "SGTK_AUTH_ALLOW_NO_HTTPS" not in os.environ + ): site = "https" + site[4:] self.ui.site.setEditText(site) diff --git a/python/tk-core/python/tank/authentication/session_cache.py b/python/tk-core/python/tank/authentication/session_cache.py index 7f10e1e9..7b66ec6a 100644 --- a/python/tk-core/python/tank/authentication/session_cache.py +++ b/python/tk-core/python/tank/authentication/session_cache.py @@ -21,19 +21,21 @@ import os import socket + +from tank_vendor import yaml from tank_vendor.shotgun_api3 import ( - Shotgun, AuthenticationFault, - ProtocolError, MissingTwoFactorAuthenticationFault, + ProtocolError, + Shotgun, ) from tank_vendor.shotgun_api3.lib import httplib2 -from tank_vendor import yaml -from . import constants -from .errors import AuthenticationError + from .. import LogManager -from ..util.shotgun import connection from ..util import LocalFileStorageManager +from ..util.shotgun import connection +from . import constants +from .errors import AuthenticationError logger = LogManager.get_logger(__name__) @@ -222,7 +224,7 @@ def _try_load_site_authentication_file(file_path): content.setdefault(_RECENT_USERS, []) if content.get(_PREFERRED_METHOD, "not null") is None: - del(content[_PREFERRED_METHOD]) + del content[_PREFERRED_METHOD] for user in content[_USERS]: user[_LOGIN] = user[_LOGIN].strip() diff --git a/python/tk-core/python/tank/authentication/shotgun_authenticator.py b/python/tk-core/python/tank/authentication/shotgun_authenticator.py index 7987650d..5f15685c 100644 --- a/python/tk-core/python/tank/authentication/shotgun_authenticator.py +++ b/python/tk-core/python/tank/authentication/shotgun_authenticator.py @@ -10,14 +10,11 @@ """PTR Authenticator.""" -from .sso_saml2 import has_sso_info_in_cookies, has_unified_login_flow_info_in_cookies -from . import interactive_authentication -from . import user -from . import user_impl -from . import session_cache -from .errors import IncompleteCredentials -from .defaults_manager import DefaultsManager from .. import LogManager +from . import interactive_authentication, session_cache, user, user_impl +from .defaults_manager import DefaultsManager +from .errors import IncompleteCredentials +from .sso_saml2 import has_sso_info_in_cookies, has_unified_login_flow_info_in_cookies logger = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/authentication/shotgun_wrapper.py b/python/tk-core/python/tank/authentication/shotgun_wrapper.py index 965b2bc6..a6a17d62 100644 --- a/python/tk-core/python/tank/authentication/shotgun_wrapper.py +++ b/python/tk-core/python/tank/authentication/shotgun_wrapper.py @@ -15,12 +15,14 @@ at any point. -------------------------------------------------------------------------------- """ -import http.client -from tank_vendor.shotgun_api3 import Shotgun, AuthenticationFault +import http.client from xmlrpc.client import ProtocolError -from . import interactive_authentication, session_cache + +from tank_vendor.shotgun_api3 import AuthenticationFault, Shotgun + from .. import LogManager +from . import interactive_authentication, session_cache logger = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/authentication/site_info.py b/python/tk-core/python/tank/authentication/site_info.py index 1689c1b2..7b45d2e0 100644 --- a/python/tk-core/python/tank/authentication/site_info.py +++ b/python/tk-core/python/tank/authentication/site_info.py @@ -11,11 +11,10 @@ import time -from . import utils - from tank_vendor import shotgun_api3 from .. import LogManager +from . import utils logger = LogManager.get_logger(__name__) @@ -53,7 +52,9 @@ def _get_site_infos(url, http_proxy=None): # require authentication. http_proxy = utils.sanitize_http_proxy(http_proxy).netloc if http_proxy: - logger.debug("Using HTTP proxy to connect to the PTR server: %s", http_proxy) + logger.debug( + "Using HTTP proxy to connect to the PTR server: %s", http_proxy + ) logger.info("Infos for site '%s' not in cache or expired", url) sg = shotgun_api3.Shotgun( diff --git a/python/tk-core/python/tank/authentication/sso_saml2/__init__.py b/python/tk-core/python/tank/authentication/sso_saml2/__init__.py index f329b56d..bf460261 100644 --- a/python/tk-core/python/tank/authentication/sso_saml2/__init__.py +++ b/python/tk-core/python/tank/authentication/sso_saml2/__init__.py @@ -21,6 +21,10 @@ SsoSaml2MissingQtNetwork, SsoSaml2MultiSessionNotSupportedError, ) +from .core.utils import ( # noqa + get_logger, + set_logger_parent, +) # Functions from .utils import ( # noqa @@ -28,8 +32,3 @@ has_sso_info_in_cookies, has_unified_login_flow_info_in_cookies, ) - -from .core.utils import ( # noqa - get_logger, - set_logger_parent, -) diff --git a/python/tk-core/python/tank/authentication/sso_saml2/core/__init__.py b/python/tk-core/python/tank/authentication/sso_saml2/core/__init__.py index 3b92ed9b..a31a8fb4 100644 --- a/python/tk-core/python/tank/authentication/sso_saml2/core/__init__.py +++ b/python/tk-core/python/tank/authentication/sso_saml2/core/__init__.py @@ -11,6 +11,7 @@ This module contains files which are shared between RV and Toolkit. """ + def __getattr__(name): """ Retro compatibility - SG-40049 - Temporary workaround for compatibility for @@ -22,7 +23,7 @@ def __getattr__(name): https://github.com/shotgunsoftware/tk-nuke/blob/v0.16.0/engine.py#L396 This was removed in https://github.com/shotgunsoftware/tk-nuke/pull/125. - TODO: Remove this after 2026-07. + TODO: Remove this after 2026-07. """ try: @@ -33,6 +34,7 @@ def __getattr__(name): try: import inspect + frame = inspect.currentframe().f_back caller_mod = frame.f_globals.get("__name__", "") is_import = caller_mod.startswith("importlib.") or caller_mod == "builtins" @@ -50,6 +52,7 @@ def __getattr__(name): ) import warnings + warnings.warn( deprecation_message, DeprecationWarning, @@ -58,10 +61,12 @@ def __getattr__(name): try: import tank + logger = tank.LogManager.get_logger(__name__) logger.warning(deprecation_message) except: - pass # nosec + pass # nosec import importlib + return importlib.import_module(f"{__name__}.{name}") diff --git a/python/tk-core/python/tank/authentication/sso_saml2/core/sso_saml2_core.py b/python/tk-core/python/tank/authentication/sso_saml2/core/sso_saml2_core.py index 4c5d9d72..c42e72e8 100644 --- a/python/tk-core/python/tank/authentication/sso_saml2/core/sso_saml2_core.py +++ b/python/tk-core/python/tank/authentication/sso_saml2/core/sso_saml2_core.py @@ -21,6 +21,7 @@ import sys import time +from ...utils import sanitize_http_proxy from .authentication_session_data import AuthenticationSessionData from .errors import ( SsoSaml2IncompletePySide2, @@ -39,7 +40,6 @@ get_session_id, get_user_name, ) -from ...utils import sanitize_http_proxy try: from .username_password_dialog import UsernamePasswordDialog @@ -129,7 +129,9 @@ def get_renew_path(session, logger): # When this variable is set, it is passed to Autodesk Identity's login. tk_shotgun_default_login = os.getenv("TK_SHOTGRID_DEFAULT_LOGIN") # When this variable is set for a SSO domain, skip the initial login page. - tk_shotgun_sso_domain = sanitize_http_proxy(os.getenv("TK_SHOTGRID_SSO_DOMAIN")).netloc + tk_shotgun_sso_domain = sanitize_http_proxy( + os.getenv("TK_SHOTGRID_SSO_DOMAIN") + ).netloc # Flow Production Tracking's renew endpoint supports some useful # Autodesk Identity params. @@ -210,6 +212,7 @@ def __init__(self, window_title="Web Login", qt_modules=None): ) if QtNetwork and not hasattr(QtNetwork, "QSslConfiguration"): raise SsoSaml2IncompletePySide2("Missing class QtNetwork.QSslConfiguration") + class TKWebPageQtWebEngine(QtWebEngineWidgets.QWebEnginePage): """ Wrapper class to better control the behaviour when clicking on links diff --git a/python/tk-core/python/tank/authentication/sso_saml2/core/username_password_dialog.py b/python/tk-core/python/tank/authentication/sso_saml2/core/username_password_dialog.py index 963957ba..80d27e3f 100644 --- a/python/tk-core/python/tank/authentication/sso_saml2/core/username_password_dialog.py +++ b/python/tk-core/python/tank/authentication/sso_saml2/core/username_password_dialog.py @@ -75,8 +75,7 @@ def __init__(self, window_title=None, message=None): buttons.button(QtGui.QDialogButtonBox.Cancel).clicked.connect(self.close) # On Qt4, this sets the look-and-feel to that of the toolkit. - self.setStyleSheet( - """QWidget + self.setStyleSheet("""QWidget { background-color: rgb(36, 39, 42); color: rgb(192, 193, 195); @@ -98,8 +97,7 @@ def __init__(self, window_title=None, message=None): color: rgb(248, 248, 248); background-color: rgb(35, 165, 225); } - """ - ) + """) @property def username(self): diff --git a/python/tk-core/python/tank/authentication/sso_saml2/core/utils.py b/python/tk-core/python/tank/authentication/sso_saml2/core/utils.py index b5509e4e..492864b6 100644 --- a/python/tk-core/python/tank/authentication/sso_saml2/core/utils.py +++ b/python/tk-core/python/tank/authentication/sso_saml2/core/utils.py @@ -13,13 +13,12 @@ # pylint: disable=line-too-long -import sys import base64 import binascii import logging -from urllib.parse import unquote_plus +import sys from http.cookies import SimpleCookie - +from urllib.parse import unquote_plus from .errors import SsoSaml2MultiSessionNotSupportedError diff --git a/python/tk-core/python/tank/authentication/sso_saml2/sso_saml2.py b/python/tk-core/python/tank/authentication/sso_saml2/sso_saml2.py index af198d48..d1c7b0f6 100644 --- a/python/tk-core/python/tank/authentication/sso_saml2/sso_saml2.py +++ b/python/tk-core/python/tank/authentication/sso_saml2/sso_saml2.py @@ -17,7 +17,6 @@ # pylint: disable=unused-import from .core.sso_saml2_core import SsoSaml2Core # noqa - from .core.utils import ( # noqa set_logger_parent, ) diff --git a/python/tk-core/python/tank/authentication/sso_saml2/utils.py b/python/tk-core/python/tank/authentication/sso_saml2/utils.py index ef485fc6..bea8ef01 100644 --- a/python/tk-core/python/tank/authentication/sso_saml2/utils.py +++ b/python/tk-core/python/tank/authentication/sso_saml2/utils.py @@ -14,10 +14,10 @@ # pylint: disable=unused-import from .core.utils import ( # noqa + _decode_cookies, + _get_shotgun_user_id, get_saml_claims_expiration, get_session_expiration, - _decode_cookies, - _get_shotgun_user_id ) diff --git a/python/tk-core/python/tank/authentication/ui/aspect_preserving_label.py b/python/tk-core/python/tank/authentication/ui/aspect_preserving_label.py index 5e6db348..de53e3d4 100644 --- a/python/tk-core/python/tank/authentication/ui/aspect_preserving_label.py +++ b/python/tk-core/python/tank/authentication/ui/aspect_preserving_label.py @@ -17,6 +17,7 @@ class AspectPreservingLabel(QtGui.QLabel): Label that displays a scaled down version of an image if it is bigger than the label. """ + def __init__(self, parent=None): """ Constructor @@ -35,7 +36,8 @@ def setPixmap(self, pixmap): """ self._pix = pixmap scaled_pixmap = self._pix.scaled( - self.size(), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) + self.size(), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation + ) QtGui.QLabel.setPixmap(self, scaled_pixmap) def heightForWidth(self, width): @@ -67,6 +69,7 @@ def resizeEvent(self, e): return scaled_pixmap = self._pix.scaled( - self.size(), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) + self.size(), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation + ) QtGui.QLabel.setPixmap(self, scaled_pixmap) QtGui.QApplication.instance().processEvents() diff --git a/python/tk-core/python/tank/authentication/ui/completion_filter_proxy.py b/python/tk-core/python/tank/authentication/ui/completion_filter_proxy.py index de6462e9..e1e6b876 100644 --- a/python/tk-core/python/tank/authentication/ui/completion_filter_proxy.py +++ b/python/tk-core/python/tank/authentication/ui/completion_filter_proxy.py @@ -23,13 +23,14 @@ from .qt_abstraction import QtGui -class FuzzyMatcher(): +class FuzzyMatcher: """ Implement an algorithm to rank strings via fuzzy matching. Based on the analysis at http://crossplatform.net/sublime-text-ctrl-p-fuzzy-matching-in-python """ + def __init__(self, pattern): # construct a pattern that matches the letters in order # for example "aad" turns into "(a).*?(a).*?(d)". @@ -51,6 +52,7 @@ class CompletionFilterProxy(QtGui.QSortFilterProxyModel): """ Filters rows based on fuzzy matching and sorts them based on their score. """ + def __init__(self, parent): super().__init__(parent) self.set_filter("") diff --git a/python/tk-core/python/tank/authentication/ui/login_dialog.py b/python/tk-core/python/tank/authentication/ui/login_dialog.py index 8cf2f9fc..2b80db05 100644 --- a/python/tk-core/python/tank/authentication/ui/login_dialog.py +++ b/python/tk-core/python/tank/authentication/ui/login_dialog.py @@ -9,166 +9,175 @@ ################################################################################ from .qt_abstraction import QtCore + for name, cls in QtCore.__dict__.items(): - if isinstance(cls, type): globals()[name] = cls + if isinstance(cls, type): + globals()[name] = cls from .qt_abstraction import QtGui + for name, cls in QtGui.__dict__.items(): - if isinstance(cls, type): globals()[name] = cls + if isinstance(cls, type): + globals()[name] = cls from .recent_box import RecentBox from .aspect_preserving_label import AspectPreservingLabel -from . import resources_rc +from . import resources_rc + class Ui_LoginDialog(object): def setupUi(self, LoginDialog): if not LoginDialog.objectName(): - LoginDialog.setObjectName(u"LoginDialog") + LoginDialog.setObjectName("LoginDialog") LoginDialog.setWindowModality(Qt.NonModal) LoginDialog.resize(424, 304) LoginDialog.setMinimumSize(QSize(424, 304)) - LoginDialog.setStyleSheet(u"\n" -"QWidget\n" -"{\n" -" background-color: rgb(36, 39, 42);\n" -" color: rgb(192, 192, 192);\n" -" selection-background-color: rgb(168, 123, 43);\n" -" selection-color: rgb(230, 230, 230);\n" -" font-size: 11px;\n" -"}\n" -"\n" -"QPushButton\n" -"{\n" -" background-color: transparent;\n" -" border: 1px solid transparent;\n" -" border-radius: 2px;\n" -" padding: 8px;\n" -" padding-left: 15px;\n" -" padding-right: 15px;\n" -"}\n" -"\n" -"QPushButton::menu-indicator {\n" -" subcontrol-position: right center;\n" -"}\n" -"\n" -"QPushButton QMenu::item {\n" -" padding: 15px;\n" -" border: 1px solid transparent;\n" -"}\n" -"\n" -"QPushButton QMenu::item:disabled {\n" -" color: rgb(160, 160, 160);\n" -" font-style: italic;\n" -"}\n" -"\n" -"QPushButton QMenu::item:selected {\n" -" border-color: rgb(54, 60, 66);\n" -"}\n" -"\n" -"QPushButton QMenu::item:pressed\n" -"{\n" -" border-color: rgb(192, 192, 192);\n" -"}\n" -"\n" -"QLineEdit, QComboBox\n" -"{\n" -" background-color: rgb(29, 31, 34);\n" -" bord" - "er: 1px solid rgb(54, 60, 66);\n" -" border-radius: 2px;\n" -" padding: 5px;\n" -" font-size: 12px;\n" -"}\n" -"\n" -"QComboBox\n" -"{\n" -" margin-left: 3px;\n" -" margin-right: 3px;\n" -"}\n" -"\n" -"QPushButton:focus\n" -"{\n" -" border-color: rgb(48, 167, 227);\n" -" outline: none;\n" -"}\n" -"\n" -"QPushButton:hover {\n" -" border-color: rgb(54, 60, 66);\n" -"}\n" -"\n" -"QPushButton:pressed\n" -"{\n" -" border-color: rgb(192, 192, 192);\n" -"}\n" -"\n" -"QComboBox:focus, QLineEdit:focus\n" -"{\n" -" border: 1px solid rgb(48, 167, 227);\n" -"}\n" -"\n" -"QComboBox:drop-down:button {\n" -" border: 1px solid rgb(54, 60, 66);\n" -"}\n" -"\n" -"QComboBox:down-arrow {\n" -" image: url(:/shotgun_authentication/down-arrow.png);\n" -"}\n" -"\n" -"QLineEdit:disabled {\n" -" background-color: rgb(60, 60, 60);\n" -" color: rgb(160, 160, 160);\n" -"}\n" -"\n" -"QComboBox::drop-down:disabled {\n" -" border-width: 0px;\n" -"}\n" -"\n" -"QComboBox::down-arrow:disabled {\n" -" image: url(noimg); border-width: 0px;\n" -"}\n" -"" - "\n" -"QComboBox::disabled {\n" -" background-color: rgb(60, 60, 60);\n" -" color: rgb(160, 160, 160);\n" -"}\n" -"\n" -"QPushButton.main\n" -"{\n" -" background-color: rgb(35, 165, 225);\n" -" border-color: rgb(36, 39, 42);\n" -" color: rgb(248, 248, 248);\n" -"}\n" -"\n" -"QPushButton.main:focus, QPushButton.main:hover\n" -"{\n" -" border-color: rgb(54, 60, 66);\n" -"}\n" -"\n" -"QPushButton.main:pressed\n" -"{\n" -" border-color: rgb(248, 248, 248);\n" -"}\n" -"") + LoginDialog.setStyleSheet( + "\n" + "QWidget\n" + "{\n" + " background-color: rgb(36, 39, 42);\n" + " color: rgb(192, 192, 192);\n" + " selection-background-color: rgb(168, 123, 43);\n" + " selection-color: rgb(230, 230, 230);\n" + " font-size: 11px;\n" + "}\n" + "\n" + "QPushButton\n" + "{\n" + " background-color: transparent;\n" + " border: 1px solid transparent;\n" + " border-radius: 2px;\n" + " padding: 8px;\n" + " padding-left: 15px;\n" + " padding-right: 15px;\n" + "}\n" + "\n" + "QPushButton::menu-indicator {\n" + " subcontrol-position: right center;\n" + "}\n" + "\n" + "QPushButton QMenu::item {\n" + " padding: 15px;\n" + " border: 1px solid transparent;\n" + "}\n" + "\n" + "QPushButton QMenu::item:disabled {\n" + " color: rgb(160, 160, 160);\n" + " font-style: italic;\n" + "}\n" + "\n" + "QPushButton QMenu::item:selected {\n" + " border-color: rgb(54, 60, 66);\n" + "}\n" + "\n" + "QPushButton QMenu::item:pressed\n" + "{\n" + " border-color: rgb(192, 192, 192);\n" + "}\n" + "\n" + "QLineEdit, QComboBox\n" + "{\n" + " background-color: rgb(29, 31, 34);\n" + " bord" + "er: 1px solid rgb(54, 60, 66);\n" + " border-radius: 2px;\n" + " padding: 5px;\n" + " font-size: 12px;\n" + "}\n" + "\n" + "QComboBox\n" + "{\n" + " margin-left: 3px;\n" + " margin-right: 3px;\n" + "}\n" + "\n" + "QPushButton:focus\n" + "{\n" + " border-color: rgb(48, 167, 227);\n" + " outline: none;\n" + "}\n" + "\n" + "QPushButton:hover {\n" + " border-color: rgb(54, 60, 66);\n" + "}\n" + "\n" + "QPushButton:pressed\n" + "{\n" + " border-color: rgb(192, 192, 192);\n" + "}\n" + "\n" + "QComboBox:focus, QLineEdit:focus\n" + "{\n" + " border: 1px solid rgb(48, 167, 227);\n" + "}\n" + "\n" + "QComboBox:drop-down:button {\n" + " border: 1px solid rgb(54, 60, 66);\n" + "}\n" + "\n" + "QComboBox:down-arrow {\n" + " image: url(:/shotgun_authentication/down-arrow.png);\n" + "}\n" + "\n" + "QLineEdit:disabled {\n" + " background-color: rgb(60, 60, 60);\n" + " color: rgb(160, 160, 160);\n" + "}\n" + "\n" + "QComboBox::drop-down:disabled {\n" + " border-width: 0px;\n" + "}\n" + "\n" + "QComboBox::down-arrow:disabled {\n" + " image: url(noimg); border-width: 0px;\n" + "}\n" + "" + "\n" + "QComboBox::disabled {\n" + " background-color: rgb(60, 60, 60);\n" + " color: rgb(160, 160, 160);\n" + "}\n" + "\n" + "QPushButton.main\n" + "{\n" + " background-color: rgb(35, 165, 225);\n" + " border-color: rgb(36, 39, 42);\n" + " color: rgb(248, 248, 248);\n" + "}\n" + "\n" + "QPushButton.main:focus, QPushButton.main:hover\n" + "{\n" + " border-color: rgb(54, 60, 66);\n" + "}\n" + "\n" + "QPushButton.main:pressed\n" + "{\n" + " border-color: rgb(248, 248, 248);\n" + "}\n" + "" + ) LoginDialog.setModal(True) self.verticalLayout_2 = QVBoxLayout(LoginDialog) self.verticalLayout_2.setContentsMargins(20, 20, 20, 20) - self.verticalLayout_2.setObjectName(u"verticalLayout_2") + self.verticalLayout_2.setObjectName("verticalLayout_2") self.horizontalLayout = QHBoxLayout() self.horizontalLayout.setSpacing(0) - self.horizontalLayout.setObjectName(u"horizontalLayout") + self.horizontalLayout.setObjectName("horizontalLayout") self.horizontalLayout.setSizeConstraint(QLayout.SetMinAndMaxSize) self.logo = AspectPreservingLabel(LoginDialog) - self.logo.setObjectName(u"logo") + self.logo.setObjectName("logo") sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.logo.sizePolicy().hasHeightForWidth()) self.logo.setSizePolicy(sizePolicy) self.logo.setMaximumSize(QSize(320, 72)) - self.logo.setPixmap(QPixmap(u":/shotgun_authentication/shotgun_logo_light_medium.png")) + self.logo.setPixmap( + QPixmap(":/shotgun_authentication/shotgun_logo_light_medium.png") + ) self.logo.setAlignment(Qt.AlignCenter) self.logo.setTextInteractionFlags(Qt.NoTextInteraction) @@ -177,52 +186,54 @@ def setupUi(self, LoginDialog): self.verticalLayout_2.addLayout(self.horizontalLayout) self.stackedWidget = QStackedWidget(LoginDialog) - self.stackedWidget.setObjectName(u"stackedWidget") + self.stackedWidget.setObjectName("stackedWidget") self.stackedWidget.setMinimumSize(QSize(324, 172)) self.login_page = QWidget() - self.login_page.setObjectName(u"login_page") + self.login_page.setObjectName("login_page") self.verticalLayout_3 = QVBoxLayout(self.login_page) self.verticalLayout_3.setContentsMargins(0, 0, 0, 0) - self.verticalLayout_3.setObjectName(u"verticalLayout_3") + self.verticalLayout_3.setObjectName("verticalLayout_3") self.credentials = QWidget(self.login_page) - self.credentials.setObjectName(u"credentials") + self.credentials.setObjectName("credentials") self.credentials.setMinimumSize(QSize(0, 126)) self.verticalLayout_7 = QVBoxLayout(self.credentials) self.verticalLayout_7.setContentsMargins(0, 0, 0, 0) - self.verticalLayout_7.setObjectName(u"verticalLayout_7") + self.verticalLayout_7.setObjectName("verticalLayout_7") self.site = RecentBox(self.credentials) - self.site.setObjectName(u"site") + self.site.setObjectName("site") self.verticalLayout_7.addWidget(self.site) self.login = RecentBox(self.credentials) - self.login.setObjectName(u"login") + self.login.setObjectName("login") self.verticalLayout_7.addWidget(self.login) self.password = QLineEdit(self.credentials) - self.password.setObjectName(u"password") + self.password.setObjectName("password") self.password.setMinimumSize(QSize(308, 0)) self.password.setEchoMode(QLineEdit.Password) self.verticalLayout_7.addWidget(self.password) self.message = QLabel(self.credentials) - self.message.setObjectName(u"message") + self.message.setObjectName("message") sizePolicy1 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding) sizePolicy1.setHorizontalStretch(0) sizePolicy1.setVerticalStretch(0) sizePolicy1.setHeightForWidth(self.message.sizePolicy().hasHeightForWidth()) self.message.setSizePolicy(sizePolicy1) self.message.setTextFormat(Qt.RichText) - self.message.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter) + self.message.setAlignment(Qt.AlignLeading | Qt.AlignLeft | Qt.AlignVCenter) self.message.setWordWrap(True) self.message.setMargin(4) self.message.setOpenExternalLinks(True) self.verticalLayout_7.addWidget(self.message) - self.verticalSpacer_3 = QSpacerItem(20, 0, QSizePolicy.Minimum, QSizePolicy.Expanding) + self.verticalSpacer_3 = QSpacerItem( + 20, 0, QSizePolicy.Minimum, QSizePolicy.Expanding + ) self.verticalLayout_7.addItem(self.verticalSpacer_3) @@ -230,19 +241,19 @@ def setupUi(self, LoginDialog): self.button_layout = QHBoxLayout() self.button_layout.setSpacing(10) - self.button_layout.setObjectName(u"button_layout") + self.button_layout.setObjectName("button_layout") self.button_layout.setContentsMargins(0, -1, -1, -1) self.button_options = QPushButton(self.login_page) - self.button_options.setObjectName(u"button_options") + self.button_options.setObjectName("button_options") self.button_options.setAutoDefault(False) self.button_options.setFlat(True) self.button_layout.addWidget(self.button_options) self.links = QVBoxLayout() - self.links.setObjectName(u"links") + self.links.setObjectName("links") self.forgot_password_link = QLabel(self.login_page) - self.forgot_password_link.setObjectName(u"forgot_password_link") + self.forgot_password_link.setObjectName("forgot_password_link") self.forgot_password_link.setCursor(QCursor(Qt.PointingHandCursor)) self.forgot_password_link.setTextFormat(Qt.RichText) self.forgot_password_link.setMargin(4) @@ -252,12 +263,14 @@ def setupUi(self, LoginDialog): self.button_layout.addLayout(self.links) - self.sign_in_hspacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.sign_in_hspacer = QSpacerItem( + 40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum + ) self.button_layout.addItem(self.sign_in_hspacer) self.sign_in = QPushButton(self.login_page) - self.sign_in.setObjectName(u"sign_in") + self.sign_in.setObjectName("sign_in") self.sign_in.setAutoDefault(True) self.sign_in.setFlat(True) @@ -269,54 +282,60 @@ def setupUi(self, LoginDialog): self.stackedWidget.addWidget(self.login_page) self._2fa_page = QWidget() - self._2fa_page.setObjectName(u"_2fa_page") + self._2fa_page.setObjectName("_2fa_page") self.verticalLayout_4 = QVBoxLayout(self._2fa_page) self.verticalLayout_4.setContentsMargins(0, 0, 0, 0) - self.verticalLayout_4.setObjectName(u"verticalLayout_4") + self.verticalLayout_4.setObjectName("verticalLayout_4") self.credentials_2 = QWidget(self._2fa_page) - self.credentials_2.setObjectName(u"credentials_2") + self.credentials_2.setObjectName("credentials_2") self.credentials_2.setMinimumSize(QSize(0, 133)) self.horizontalLayout_2 = QHBoxLayout(self.credentials_2) self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) - self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") + self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.label = QLabel(self.credentials_2) - self.label.setObjectName(u"label") + self.label.setObjectName("label") self.label.setMinimumSize(QSize(86, 0)) - self.label.setPixmap(QPixmap(u":/google_authenticator/google_authenticator.png")) - self.label.setAlignment(Qt.AlignHCenter|Qt.AlignTop) + self.label.setPixmap(QPixmap(":/google_authenticator/google_authenticator.png")) + self.label.setAlignment(Qt.AlignHCenter | Qt.AlignTop) self.horizontalLayout_2.addWidget(self.label) self.widget_2 = QWidget(self.credentials_2) - self.widget_2.setObjectName(u"widget_2") + self.widget_2.setObjectName("widget_2") self.verticalLayout = QVBoxLayout(self.widget_2) - self.verticalLayout.setObjectName(u"verticalLayout") + self.verticalLayout.setObjectName("verticalLayout") self._2fa_message = QLabel(self.widget_2) - self._2fa_message.setObjectName(u"_2fa_message") + self._2fa_message.setObjectName("_2fa_message") sizePolicy2 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) sizePolicy2.setHorizontalStretch(0) sizePolicy2.setVerticalStretch(0) - sizePolicy2.setHeightForWidth(self._2fa_message.sizePolicy().hasHeightForWidth()) + sizePolicy2.setHeightForWidth( + self._2fa_message.sizePolicy().hasHeightForWidth() + ) self._2fa_message.setSizePolicy(sizePolicy2) - self._2fa_message.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter) + self._2fa_message.setAlignment(Qt.AlignLeading | Qt.AlignLeft | Qt.AlignVCenter) self._2fa_message.setWordWrap(True) self._2fa_message.setMargin(0) self.verticalLayout.addWidget(self._2fa_message) self._2fa_code = QLineEdit(self.widget_2) - self._2fa_code.setObjectName(u"_2fa_code") + self._2fa_code.setObjectName("_2fa_code") self.verticalLayout.addWidget(self._2fa_code) self.invalid_code = QLabel(self.widget_2) - self.invalid_code.setObjectName(u"invalid_code") - sizePolicy2.setHeightForWidth(self.invalid_code.sizePolicy().hasHeightForWidth()) + self.invalid_code.setObjectName("invalid_code") + sizePolicy2.setHeightForWidth( + self.invalid_code.sizePolicy().hasHeightForWidth() + ) self.invalid_code.setSizePolicy(sizePolicy2) self.verticalLayout.addWidget(self.invalid_code) - self.verticalSpacer_2 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) + self.verticalSpacer_2 = QSpacerItem( + 20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding + ) self.verticalLayout.addItem(self.verticalSpacer_2) @@ -326,20 +345,22 @@ def setupUi(self, LoginDialog): self.button_layout_2 = QHBoxLayout() self.button_layout_2.setSpacing(10) - self.button_layout_2.setObjectName(u"button_layout_2") + self.button_layout_2.setObjectName("button_layout_2") self.button_layout_2.setContentsMargins(0, -1, -1, -1) self.use_backup = QPushButton(self._2fa_page) - self.use_backup.setObjectName(u"use_backup") + self.use_backup.setObjectName("use_backup") self.use_backup.setFlat(True) self.button_layout_2.addWidget(self.use_backup) - self._2fa_hspacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self._2fa_hspacer = QSpacerItem( + 40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum + ) self.button_layout_2.addItem(self._2fa_hspacer) self.verify_2fa = QPushButton(self._2fa_page) - self.verify_2fa.setObjectName(u"verify_2fa") + self.verify_2fa.setObjectName("verify_2fa") self.verify_2fa.setMinimumSize(QSize(65, 0)) self.verify_2fa.setAutoDefault(False) self.verify_2fa.setFlat(True) @@ -350,50 +371,58 @@ def setupUi(self, LoginDialog): self.stackedWidget.addWidget(self._2fa_page) self.backup_page = QWidget() - self.backup_page.setObjectName(u"backup_page") + self.backup_page.setObjectName("backup_page") self.verticalLayout_6 = QVBoxLayout(self.backup_page) self.verticalLayout_6.setContentsMargins(0, 0, 0, 0) - self.verticalLayout_6.setObjectName(u"verticalLayout_6") + self.verticalLayout_6.setObjectName("verticalLayout_6") self.credentials_3 = QWidget(self.backup_page) - self.credentials_3.setObjectName(u"credentials_3") + self.credentials_3.setObjectName("credentials_3") self.credentials_3.setMinimumSize(QSize(0, 133)) self.horizontalLayout_3 = QHBoxLayout(self.credentials_3) self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0) - self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") + self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.label_2 = QLabel(self.credentials_3) - self.label_2.setObjectName(u"label_2") - self.label_2.setPixmap(QPixmap(u":/backup_codes/backup_codes_light_bg.png")) - self.label_2.setAlignment(Qt.AlignHCenter|Qt.AlignTop) + self.label_2.setObjectName("label_2") + self.label_2.setPixmap(QPixmap(":/backup_codes/backup_codes_light_bg.png")) + self.label_2.setAlignment(Qt.AlignHCenter | Qt.AlignTop) self.horizontalLayout_3.addWidget(self.label_2) self.widget_4 = QWidget(self.credentials_3) - self.widget_4.setObjectName(u"widget_4") + self.widget_4.setObjectName("widget_4") self.verticalLayout_5 = QVBoxLayout(self.widget_4) - self.verticalLayout_5.setObjectName(u"verticalLayout_5") + self.verticalLayout_5.setObjectName("verticalLayout_5") self._2fa_message_2 = QLabel(self.widget_4) - self._2fa_message_2.setObjectName(u"_2fa_message_2") - sizePolicy2.setHeightForWidth(self._2fa_message_2.sizePolicy().hasHeightForWidth()) + self._2fa_message_2.setObjectName("_2fa_message_2") + sizePolicy2.setHeightForWidth( + self._2fa_message_2.sizePolicy().hasHeightForWidth() + ) self._2fa_message_2.setSizePolicy(sizePolicy2) - self._2fa_message_2.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter) + self._2fa_message_2.setAlignment( + Qt.AlignLeading | Qt.AlignLeft | Qt.AlignVCenter + ) self._2fa_message_2.setWordWrap(True) self._2fa_message_2.setMargin(0) self.verticalLayout_5.addWidget(self._2fa_message_2) self.backup_code = QLineEdit(self.widget_4) - self.backup_code.setObjectName(u"backup_code") + self.backup_code.setObjectName("backup_code") self.verticalLayout_5.addWidget(self.backup_code) self.invalid_backup_code = QLabel(self.widget_4) - self.invalid_backup_code.setObjectName(u"invalid_backup_code") - sizePolicy2.setHeightForWidth(self.invalid_backup_code.sizePolicy().hasHeightForWidth()) + self.invalid_backup_code.setObjectName("invalid_backup_code") + sizePolicy2.setHeightForWidth( + self.invalid_backup_code.sizePolicy().hasHeightForWidth() + ) self.invalid_backup_code.setSizePolicy(sizePolicy2) self.verticalLayout_5.addWidget(self.invalid_backup_code) - self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) + self.verticalSpacer = QSpacerItem( + 20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding + ) self.verticalLayout_5.addItem(self.verticalSpacer) @@ -403,21 +432,23 @@ def setupUi(self, LoginDialog): self.button_layout_3 = QHBoxLayout() self.button_layout_3.setSpacing(10) - self.button_layout_3.setObjectName(u"button_layout_3") + self.button_layout_3.setObjectName("button_layout_3") self.button_layout_3.setContentsMargins(0, -1, -1, -1) self.use_app = QPushButton(self.backup_page) - self.use_app.setObjectName(u"use_app") + self.use_app.setObjectName("use_app") self.use_app.setAutoDefault(False) self.use_app.setFlat(True) self.button_layout_3.addWidget(self.use_app) - self.backup_hspacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.backup_hspacer = QSpacerItem( + 40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum + ) self.button_layout_3.addItem(self.backup_hspacer) self.verify_backup = QPushButton(self.backup_page) - self.verify_backup.setObjectName(u"verify_backup") + self.verify_backup.setObjectName("verify_backup") self.verify_backup.setMinimumSize(QSize(65, 0)) self.verify_backup.setAutoDefault(True) self.verify_backup.setFlat(True) @@ -428,33 +459,37 @@ def setupUi(self, LoginDialog): self.stackedWidget.addWidget(self.backup_page) self.asl_page = QWidget() - self.asl_page.setObjectName(u"asl_page") + self.asl_page.setObjectName("asl_page") self.verticalLayout_21 = QVBoxLayout(self.asl_page) self.verticalLayout_21.setContentsMargins(20, 20, 20, 20) - self.verticalLayout_21.setObjectName(u"verticalLayout_21") + self.verticalLayout_21.setObjectName("verticalLayout_21") self.asl_msg = QLabel(self.asl_page) - self.asl_msg.setObjectName(u"asl_msg") + self.asl_msg.setObjectName("asl_msg") sizePolicy1.setHeightForWidth(self.asl_msg.sizePolicy().hasHeightForWidth()) self.asl_msg.setSizePolicy(sizePolicy1) - self.asl_msg.setStyleSheet(u"padding-left: 40px; padding-left: 40px;padding-right: 40px;") + self.asl_msg.setStyleSheet( + "padding-left: 40px; padding-left: 40px;padding-right: 40px;" + ) self.asl_msg.setAlignment(Qt.AlignCenter) self.asl_msg.setWordWrap(True) self.verticalLayout_21.addWidget(self.asl_msg) self.asl_msg_back = QLabel(self.asl_page) - self.asl_msg_back.setObjectName(u"asl_msg_back") + self.asl_msg_back.setObjectName("asl_msg_back") self.asl_msg_back.setAlignment(Qt.AlignCenter) self.asl_msg_back.setWordWrap(True) self.verticalLayout_21.addWidget(self.asl_msg_back) - self.asl_spacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) + self.asl_spacer = QSpacerItem( + 20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding + ) self.verticalLayout_21.addItem(self.asl_spacer) self.asl_msg_help = QLabel(self.asl_page) - self.asl_msg_help.setObjectName(u"asl_msg_help") + self.asl_msg_help.setObjectName("asl_msg_help") self.asl_msg_help.setAlignment(Qt.AlignCenter) self.asl_msg_help.setWordWrap(True) @@ -474,48 +509,124 @@ def setupUi(self, LoginDialog): self.verify_backup.setDefault(True) QMetaObject.connectSlotsByName(LoginDialog) + # setupUi def retranslateUi(self, LoginDialog): - LoginDialog.setWindowTitle(QCoreApplication.translate("LoginDialog", u"Flow Production Tracking Login", None)) + LoginDialog.setWindowTitle( + QCoreApplication.translate( + "LoginDialog", "Flow Production Tracking Login", None + ) + ) self.logo.setText("") -#if QT_CONFIG(accessibility) - self.site.setAccessibleName(QCoreApplication.translate("LoginDialog", u"site", None)) -#endif // QT_CONFIG(accessibility) -#if QT_CONFIG(accessibility) - self.login.setAccessibleName(QCoreApplication.translate("LoginDialog", u"login", None)) -#endif // QT_CONFIG(accessibility) -#if QT_CONFIG(accessibility) - self.password.setAccessibleName(QCoreApplication.translate("LoginDialog", u"password", None)) -#endif // QT_CONFIG(accessibility) - self.password.setPlaceholderText(QCoreApplication.translate("LoginDialog", u"password", None)) - self.message.setText(QCoreApplication.translate("LoginDialog", u"Please enter your credentials.", None)) - self.button_options.setText(QCoreApplication.translate("LoginDialog", u"See other options", None)) - self.forgot_password_link.setText(QCoreApplication.translate("LoginDialog", u"

Forgot your password?

", None)) - self.sign_in.setText(QCoreApplication.translate("LoginDialog", u"Sign In", None)) - self.sign_in.setProperty("class", QCoreApplication.translate("LoginDialog", u"main", None)) + # if QT_CONFIG(accessibility) + self.site.setAccessibleName( + QCoreApplication.translate("LoginDialog", "site", None) + ) + # endif // QT_CONFIG(accessibility) + # if QT_CONFIG(accessibility) + self.login.setAccessibleName( + QCoreApplication.translate("LoginDialog", "login", None) + ) + # endif // QT_CONFIG(accessibility) + # if QT_CONFIG(accessibility) + self.password.setAccessibleName( + QCoreApplication.translate("LoginDialog", "password", None) + ) + # endif // QT_CONFIG(accessibility) + self.password.setPlaceholderText( + QCoreApplication.translate("LoginDialog", "password", None) + ) + self.message.setText( + QCoreApplication.translate( + "LoginDialog", "Please enter your credentials.", None + ) + ) + self.button_options.setText( + QCoreApplication.translate("LoginDialog", "See other options", None) + ) + self.forgot_password_link.setText( + QCoreApplication.translate( + "LoginDialog", + '

Forgot your password?

', + None, + ) + ) + self.sign_in.setText(QCoreApplication.translate("LoginDialog", "Sign In", None)) + self.sign_in.setProperty( + "class", QCoreApplication.translate("LoginDialog", "main", None) + ) self.label.setText("") - self._2fa_message.setText(QCoreApplication.translate("LoginDialog", u"Enter the code generated by the Google Authenticator or Duo Mobile app.", None)) -#if QT_CONFIG(accessibility) - self._2fa_code.setAccessibleName(QCoreApplication.translate("LoginDialog", u"2fa code", None)) -#endif // QT_CONFIG(accessibility) - self._2fa_code.setPlaceholderText(QCoreApplication.translate("LoginDialog", u"Enter code", None)) + self._2fa_message.setText( + QCoreApplication.translate( + "LoginDialog", + "Enter the code generated by the Google Authenticator or Duo Mobile app.", + None, + ) + ) + # if QT_CONFIG(accessibility) + self._2fa_code.setAccessibleName( + QCoreApplication.translate("LoginDialog", "2fa code", None) + ) + # endif // QT_CONFIG(accessibility) + self._2fa_code.setPlaceholderText( + QCoreApplication.translate("LoginDialog", "Enter code", None) + ) self.invalid_code.setText("") - self.use_backup.setText(QCoreApplication.translate("LoginDialog", u"Use backup code", None)) - self.verify_2fa.setText(QCoreApplication.translate("LoginDialog", u"Verify", None)) - self.verify_2fa.setProperty("class", QCoreApplication.translate("LoginDialog", u"main", None)) + self.use_backup.setText( + QCoreApplication.translate("LoginDialog", "Use backup code", None) + ) + self.verify_2fa.setText( + QCoreApplication.translate("LoginDialog", "Verify", None) + ) + self.verify_2fa.setProperty( + "class", QCoreApplication.translate("LoginDialog", "main", None) + ) self.label_2.setText("") - self._2fa_message_2.setText(QCoreApplication.translate("LoginDialog", u"Please enter one of your backup codes.", None)) -#if QT_CONFIG(accessibility) - self.backup_code.setAccessibleName(QCoreApplication.translate("LoginDialog", u"backup code", None)) -#endif // QT_CONFIG(accessibility) + self._2fa_message_2.setText( + QCoreApplication.translate( + "LoginDialog", "Please enter one of your backup codes.", None + ) + ) + # if QT_CONFIG(accessibility) + self.backup_code.setAccessibleName( + QCoreApplication.translate("LoginDialog", "backup code", None) + ) + # endif // QT_CONFIG(accessibility) self.backup_code.setText("") - self.backup_code.setPlaceholderText(QCoreApplication.translate("LoginDialog", u"Enter backup code", None)) + self.backup_code.setPlaceholderText( + QCoreApplication.translate("LoginDialog", "Enter backup code", None) + ) self.invalid_backup_code.setText("") - self.use_app.setText(QCoreApplication.translate("LoginDialog", u"Use Google App", None)) - self.verify_backup.setText(QCoreApplication.translate("LoginDialog", u"Verify", None)) - self.verify_backup.setProperty("class", QCoreApplication.translate("LoginDialog", u"main", None)) - self.asl_msg.setText(QCoreApplication.translate("LoginDialog", u"Check your default web browser to continue logging in.", None)) - self.asl_msg_back.setText(QCoreApplication.translate("LoginDialog", u"

Cancel & return to the login page

", None)) - self.asl_msg_help.setText(QCoreApplication.translate("LoginDialog", u"

If you are having trouble logging in with the browser, select this support link

", None)) + self.use_app.setText( + QCoreApplication.translate("LoginDialog", "Use Google App", None) + ) + self.verify_backup.setText( + QCoreApplication.translate("LoginDialog", "Verify", None) + ) + self.verify_backup.setProperty( + "class", QCoreApplication.translate("LoginDialog", "main", None) + ) + self.asl_msg.setText( + QCoreApplication.translate( + "LoginDialog", + "Check your default web browser to continue logging in.", + None, + ) + ) + self.asl_msg_back.setText( + QCoreApplication.translate( + "LoginDialog", + '

Cancel & return to the login page

', + None, + ) + ) + self.asl_msg_help.setText( + QCoreApplication.translate( + "LoginDialog", + '

If you are having trouble logging in with the browser, select this support link

', + None, + ) + ) + # retranslateUi diff --git a/python/tk-core/python/tank/authentication/ui/resources_rc.py b/python/tk-core/python/tank/authentication/ui/resources_rc.py index 95c08531..8163a110 100644 --- a/python/tk-core/python/tank/authentication/ui/resources_rc.py +++ b/python/tk-core/python/tank/authentication/ui/resources_rc.py @@ -3715,10 +3715,17 @@ \x00\x00\x01\x8f05\xd1\xf5\ " + def qInitResources(): - QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + QtCore.qRegisterResourceData( + 0x03, qt_resource_struct, qt_resource_name, qt_resource_data + ) + def qCleanupResources(): - QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + QtCore.qUnregisterResourceData( + 0x03, qt_resource_struct, qt_resource_name, qt_resource_data + ) + qInitResources() diff --git a/python/tk-core/python/tank/authentication/ui_authentication.py b/python/tk-core/python/tank/authentication/ui_authentication.py index 486262e6..8158e2c1 100644 --- a/python/tk-core/python/tank/authentication/ui_authentication.py +++ b/python/tk-core/python/tank/authentication/ui_authentication.py @@ -18,9 +18,9 @@ -------------------------------------------------------------------------------- """ -from .errors import AuthenticationCancelled, ShotgunAuthenticationError -from . import invoker from .. import LogManager +from . import invoker +from .errors import AuthenticationCancelled, ShotgunAuthenticationError logger = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/authentication/user.py b/python/tk-core/python/tank/authentication/user.py index 37c00350..56d20846 100644 --- a/python/tk-core/python/tank/authentication/user.py +++ b/python/tk-core/python/tank/authentication/user.py @@ -12,13 +12,10 @@ import threading import time -from . import sso_saml2 -from . import interactive_authentication -from . import user_impl from .. import LogManager +from . import interactive_authentication, sso_saml2, user_impl from .errors import AuthenticationCancelled - logger = LogManager.get_logger(__name__) # Ensure that the SSO-related logging will be merged in our loggin. diff --git a/python/tk-core/python/tank/authentication/user_impl.py b/python/tk-core/python/tank/authentication/user_impl.py index 3cd32e60..7d434043 100644 --- a/python/tk-core/python/tank/authentication/user_impl.py +++ b/python/tk-core/python/tank/authentication/user_impl.py @@ -18,16 +18,17 @@ at any point. -------------------------------------------------------------------------------- """ -import json + import http.client +import json -from .shotgun_wrapper import ShotgunWrapper -from tank_vendor.shotgun_api3 import Shotgun, AuthenticationFault, ProtocolError +from tank_vendor.shotgun_api3 import AuthenticationFault, ProtocolError, Shotgun -from . import session_cache -from .errors import IncompleteCredentials, UnresolvableHumanUser, UnresolvableScriptUser from .. import LogManager from ..util import pickle +from . import session_cache +from .errors import IncompleteCredentials, UnresolvableHumanUser, UnresolvableScriptUser +from .shotgun_wrapper import ShotgunWrapper # Indirection to create ShotgunWrapper instances. Great for unit testing. _shotgun_instance_factory = ShotgunWrapper @@ -606,7 +607,6 @@ def deserialize_user(payload): user_dict = pickle.loads(payload) # Find which user type we have - global __factories factory = __factories.get(user_dict.get("type")) # Unknown type, something is wrong. Maybe backward compatible code broke? if not factory: diff --git a/python/tk-core/python/tank/authentication/web_login_support.py b/python/tk-core/python/tank/authentication/web_login_support.py index a3a93e4a..21abf161 100644 --- a/python/tk-core/python/tank/authentication/web_login_support.py +++ b/python/tk-core/python/tank/authentication/web_login_support.py @@ -59,5 +59,4 @@ def get_shotgun_authenticator_support_web_login(): :returns: Bool indicating support for the Unified Login Flow. """ - global shotgun_authenticator_support_web_login return shotgun_authenticator_support_web_login diff --git a/python/tk-core/python/tank/bootstrap/__init__.py b/python/tk-core/python/tank/bootstrap/__init__.py index ada6fd37..e3edeaa0 100644 --- a/python/tk-core/python/tank/bootstrap/__init__.py +++ b/python/tk-core/python/tank/bootstrap/__init__.py @@ -8,5 +8,5 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -from .manager import ToolkitManager from .errors import TankBootstrapError, TankMissingTankNameError +from .manager import ToolkitManager diff --git a/python/tk-core/python/tank/bootstrap/baked_configuration.py b/python/tk-core/python/tank/bootstrap/baked_configuration.py index 21b2d81b..7ec5c64c 100644 --- a/python/tk-core/python/tank/bootstrap/baked_configuration.py +++ b/python/tk-core/python/tank/bootstrap/baked_configuration.py @@ -10,16 +10,12 @@ import os -from .configuration import Configuration -from .configuration_writer import ConfigurationWriter - -from .. import LogManager -from .. import constants - +from .. import LogManager, constants, pipelineconfig_utils +from ..errors import TankFileDoesNotExistError from ..util import ShotgunPath from ..util.pickle import store_env_var_pickled -from ..errors import TankFileDoesNotExistError -from .. import pipelineconfig_utils +from .configuration import Configuration +from .configuration_writer import ConfigurationWriter log = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/bootstrap/bundle_downloader.py b/python/tk-core/python/tank/bootstrap/bundle_downloader.py index 42a391fc..8a5c955a 100644 --- a/python/tk-core/python/tank/bootstrap/bundle_downloader.py +++ b/python/tk-core/python/tank/bootstrap/bundle_downloader.py @@ -9,8 +9,8 @@ # not expressly granted therein are reserved by Shotgun Software Inc. import os -from sgtk import hook -from sgtk import LogManager + +from sgtk import LogManager, hook log = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/bootstrap/cached_configuration.py b/python/tk-core/python/tank/bootstrap/cached_configuration.py index a8425398..2dc41623 100644 --- a/python/tk-core/python/tank/bootstrap/cached_configuration.py +++ b/python/tk-core/python/tank/bootstrap/cached_configuration.py @@ -9,21 +9,18 @@ # not expressly granted therein are reserved by Shotgun Software Inc. import os -import sys -import traceback import pprint - -from . import constants - -from ..descriptor import create_descriptor, Descriptor -from .errors import TankBootstrapError, TankMissingTankNameError - -from ..util import filesystem, version +import traceback from tank_vendor import yaml + +from .. import LogManager +from ..descriptor import Descriptor, create_descriptor +from ..util import filesystem +from . import constants from .configuration import Configuration from .configuration_writer import ConfigurationWriter -from .. import LogManager +from .errors import TankBootstrapError, TankMissingTankNameError log = LogManager.get_logger(__name__) @@ -140,7 +137,7 @@ def verify_required_shotgun_fields(self): % (storage_roots.roots_file, storage_roots.required_roots) ) - (_, unmapped_roots) = storage_roots.get_local_storages(self._sg_connection) + _, unmapped_roots = storage_roots.get_local_storages(self._sg_connection) # get a list of all defined storage roots without a corresponding PTR # local storage defined @@ -258,10 +255,10 @@ def update_configuration(self): try: # Move to backup needs to undo changes when failing because we need to put the configuration # in a usable state. - (config_backup_path, core_backup_path) = self._config_writer.move_to_backup( + config_backup_path, core_backup_path = self._config_writer.move_to_backup( undo_on_error=True ) - except Exception as e: + except Exception: log.exception( "Unexpected error while making a backup of the configuration. Toolkit will use the " "original configuration." diff --git a/python/tk-core/python/tank/bootstrap/configuration.py b/python/tk-core/python/tank/bootstrap/configuration.py index cb58e162..8c0debdb 100644 --- a/python/tk-core/python/tank/bootstrap/configuration.py +++ b/python/tk-core/python/tank/bootstrap/configuration.py @@ -11,16 +11,14 @@ import inspect import os -from .import_handler import CoreImportHandler - -from ..log import LogManager -from .. import pipelineconfig_utils -from .. import constants +from .. import constants, pipelineconfig_utils from ..authentication import ( + ShotgunSamlUser, get_shotgun_authenticator_support_web_login, serialize_user, - ShotgunSamlUser, ) +from ..log import LogManager +from .import_handler import CoreImportHandler log = LogManager.get_logger(__name__) @@ -178,8 +176,7 @@ def _tank_from_path(self, path): """ # Perform a local import here to make sure we are getting # the newly swapped in core code, if it was swapped - from .. import api - from .. import pipelineconfig + from .. import api, pipelineconfig log.debug("Executing tank_from_path('%s')" % path) @@ -267,6 +264,7 @@ def _set_authenticated_user( ShotgunAuthenticator, deserialize_user, ) + from ..util import CoreDefaultsManager except ImportError: log.debug("Using pre-0.16 core, no authenticated user will be set.") diff --git a/python/tk-core/python/tank/bootstrap/configuration_writer.py b/python/tk-core/python/tank/bootstrap/configuration_writer.py index 3e95a306..17f33aa4 100644 --- a/python/tk-core/python/tank/bootstrap/configuration_writer.py +++ b/python/tk-core/python/tank/bootstrap/configuration_writer.py @@ -8,23 +8,17 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. +import datetime import os import sys -import datetime - -from . import constants - -from ..descriptor import Descriptor, create_descriptor, is_descriptor_version_missing - -from ..util import filesystem -from ..util import StorageRoots -from ..util.shotgun import connection -from ..util.move_guard import MoveGuard -from ..util import is_macos, is_windows from tank_vendor import yaml from .. import LogManager +from ..util import StorageRoots, filesystem, is_macos, is_windows +from ..util.move_guard import MoveGuard +from ..util.shotgun import connection +from . import constants log = LogManager.get_logger(__name__) @@ -265,7 +259,9 @@ def create_tank_command(self, executable=sys.executable, prefix=sys.prefix): if current_interpreter: log.debug("Current OS interpreter will be %s.", current_interpreter) else: - log.debug("Current OS interpreter will be the default PTR desktop app location.") + log.debug( + "Current OS interpreter will be the default PTR desktop app location." + ) config_root_path = self._path.current_os @@ -339,7 +335,9 @@ def write_config_info_file(self, config_descriptor): with filesystem.auto_created_yml(config_info_file) as fh: fh.write("# This file contains metadata describing what exact version\n") - fh.write("# Of the config that was downloaded from Flow Production Tracking\n") + fh.write( + "# Of the config that was downloaded from Flow Production Tracking\n" + ) fh.write("\n") fh.write("# Below follows details for the sg attachment that is\n") fh.write("# reflected within this local configuration.\n") diff --git a/python/tk-core/python/tank/bootstrap/import_handler.py b/python/tk-core/python/tank/bootstrap/import_handler.py index 715d61e1..2e16ad25 100644 --- a/python/tk-core/python/tank/bootstrap/import_handler.py +++ b/python/tk-core/python/tank/bootstrap/import_handler.py @@ -102,7 +102,7 @@ def swap_core(cls, core_path): try: if prev_log_file: tank.LogManager().initialize_base_file_handler_from_path(prev_log_file) - except AttributeError as e: + except AttributeError: # older versions of the API may not have this defined. log.debug( "Switching to a version of the core API that doesn't " @@ -289,20 +289,14 @@ def find_spec(self, module_fullname, package_path=None, target=None): # later raise FileNotFoundError instead of the expected ImportError # when the module doesn't exist on disk. if os.path.isdir(os.path.join(package_path[0], module_name)): - module_file = os.path.join( - package_path[0], module_name, "__init__.py" - ) + module_file = os.path.join(package_path[0], module_name, "__init__.py") else: - module_file = os.path.join( - package_path[0], module_name + ".py" - ) + module_file = os.path.join(package_path[0], module_name + ".py") if not os.path.isfile(module_file): return None - loader = importlib.machinery.SourceFileLoader( - module_fullname, module_file - ) + loader = importlib.machinery.SourceFileLoader(module_fullname, module_file) spec = importlib.util.spec_from_loader(loader.name, loader) self._module_info[module_fullname] = spec except ImportError: @@ -328,9 +322,7 @@ def load_module(self, module_fullname): try: spec.loader.exec_module(module) except FileNotFoundError as e: - raise ImportError( - f"No module named '{module_fullname}'" - ) from e + raise ImportError(f"No module named '{module_fullname}'") from e # the module needs to know the loader so that reload() works module.__loader__ = self diff --git a/python/tk-core/python/tank/bootstrap/installed_configuration.py b/python/tk-core/python/tank/bootstrap/installed_configuration.py index fa5f5334..4de4ffd7 100644 --- a/python/tk-core/python/tank/bootstrap/installed_configuration.py +++ b/python/tk-core/python/tank/bootstrap/installed_configuration.py @@ -10,9 +10,9 @@ import os -from .errors import TankBootstrapError -from .configuration import Configuration from .. import LogManager +from .configuration import Configuration +from .errors import TankBootstrapError log = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/bootstrap/manager.py b/python/tk-core/python/tank/bootstrap/manager.py index b058b6e8..7efc505d 100644 --- a/python/tk-core/python/tank/bootstrap/manager.py +++ b/python/tk-core/python/tank/bootstrap/manager.py @@ -8,18 +8,20 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -import os import inspect +import os -from . import constants -from .errors import TankBootstrapError -from .configuration import Configuration -from .resolver import ConfigurationResolver -from ..authentication import ShotgunAuthenticator -from ..pipelineconfig import PipelineConfiguration from .. import LogManager +from ..authentication import ShotgunAuthenticator, flow_auth from ..errors import TankError +from ..flowam import constants as flow_const +from ..flowam import utils as flow_utils +from ..pipelineconfig import PipelineConfiguration from ..util import ShotgunPath +from . import constants +from .configuration import Configuration +from .errors import TankBootstrapError +from .resolver import ConfigurationResolver log = LogManager.get_logger(__name__) @@ -33,12 +35,12 @@ class ToolkitManager(object): # Constants used to make the manager bootstrapping: # - download and cache the config dependencies needed to run the engine being started in a specific environment. # - download and cache all the config dependencies needed to run the engine in any environment. - (CACHE_SPARSE, CACHE_FULL) = range(2) + CACHE_SPARSE, CACHE_FULL = range(2) # Constants used to indicate that the manager is: # - bootstrapping the toolkit (with method bootstrap_toolkit), # - starting up the engine (with method _start_engine). - (TOOLKIT_BOOTSTRAP_PHASE, ENGINE_STARTUP_PHASE) = range(2) + TOOLKIT_BOOTSTRAP_PHASE, ENGINE_STARTUP_PHASE = range(2) # List of constants representing the status of the progress bar when these event occurs during bootstrap. _RESOLVING_PROJECT_RATE = 0.0 @@ -84,6 +86,10 @@ def __init__(self, sg_user=None): self._plugin_id = None self._allow_config_overrides = True + # flow fields + self._flow_project_id = None + self._flow_schema_version = None + # look for the standard env var SHOTGUN_PIPELINE_CONFIGURATION_ID # and in case this is set, use it as a default if constants.PIPELINE_CONFIG_ID_ENV_VAR in os.environ: @@ -914,6 +920,84 @@ def _log_startup_message(self, engine_name, entity): log.debug("Bootstrapping engine %s." % engine_name) log.debug("-----------------------------------------------------------------") + def _resolve_project_id(self, entity): + """ + Resolve a Shotgun project id from a target entity. + + :param entity: ``None``, a Project dict, an entity with a ``project`` + link, or any entity that can be looked up in Shotgun + to find its parent project. + :type entity: dict or None + :returns: Integer project id, or ``None`` for the site context. + :rtype: int or None + """ + if entity is None: + return None + + if entity.get("type") == "Project": + return entity["id"] + + if "project" in entity and entity["project"].get("type") == "Project": + return entity["project"]["id"] + + data = self._sg_connection.find_one( + entity["type"], [["id", "is", entity["id"]]], ["project"] + ) + if not data or not data.get("project"): + raise TankBootstrapError("Cannot resolve project for %s" % entity) + return data["project"]["id"] + + def _trigger_am_auth(self, pipeline_config, entity, progress_callback): + """ + Proactively obtain a Flow/MEDM access token. + Silent path (file store -> refresh) is tried first; falls + back to opening a browser for PKCE if no usable cached/refresh token + exists. + + Configuration errors raise ``TankBootstrapError`` (deployment bug). + Runtime auth failures are logged and swallowed unless the + ``TK_FLOW_AUTH_REQUIRED`` env var is set to ``"1"``, in which case + they raise ``TankBootstrapError``. + + :param pipeline_config: PipelineConfiguration object. + :param entity: Shotgun entity used to resolve a project context. + :type entity: dict or None + :param progress_callback: Callback function that reports back on the toolkit bootstrap progress. + Set to ``None`` to use the default callback function. + :rtype: None + """ + if entity is None: + return + + try: + log.info("Triggering Flow authentication...") + overrides = flow_utils.get_config_flow_settings(pipeline_config) + # Set authentication overrides in reserved env vars so they will persist + # across toolkit engine sessions + if flow_const.FLOW_AUTH_APP_ID in overrides: + os.environ["TK_FLOW_AUTH_APPLICATION_ID"] = overrides[ + flow_const.FLOW_AUTH_APP_ID + ] + if flow_const.FLOW_AUTH_BASE_URL in overrides: + os.environ["TK_FLOW_AUTH_BASE_URL"] = overrides[ + flow_const.FLOW_AUTH_BASE_URL + ] + if flow_const.FLOW_AUTH_CALLBACK_URL in overrides: + os.environ["TK_FLOW_AUTH_CALLBACK_URL"] = overrides[ + flow_const.FLOW_AUTH_CALLBACK_URL + ] + settings = flow_auth.resolve_flow_auth_settings() + flow_auth.init_authentication(settings) + # Token is intentionally discarded here; it now sits in the file + # store and adsk_auth's in-memory cache for the next consumer. + flow_auth.get_access_token() + except flow_auth.FlowAuthConfigurationError as e: + raise TankBootstrapError( + "MEDM auth misconfigured for AM-ready project: %s" % e + ) + except Exception as e: + raise TankBootstrapError("MEDM auth failed for AM-ready project: %s" % e) + def _get_configuration(self, entity, progress_callback): """ Resolves the configuration to use without creating it on disk. @@ -928,25 +1012,7 @@ def _get_configuration(self, entity, progress_callback): self._report_progress( progress_callback, self._RESOLVING_PROJECT_RATE, "Resolving project..." ) - if entity is None: - project_id = None - - elif entity.get("type") == "Project": - project_id = entity["id"] - - elif "project" in entity and entity["project"].get("type") == "Project": - # user passed a project link - project_id = entity["project"]["id"] - - else: - # resolve from shotgun - data = self._sg_connection.find_one( - entity["type"], [["id", "is", entity["id"]]], ["project"] - ) - - if not data or not data.get("project"): - raise TankBootstrapError("Cannot resolve project for %s" % entity) - project_id = data["project"]["id"] + project_id = self._resolve_project_id(entity) # get an object to represent the business logic for # how a configuration location is being determined @@ -997,7 +1063,9 @@ def _get_configuration(self, entity, progress_callback): elif self._do_shotgun_config_lookup: # do the full resolve where we connect to shotgun etc. - log.debug("Checking for pipeline configuration overrides in Flow Production Tracking.") + log.debug( + "Checking for pipeline configuration overrides in Flow Production Tracking." + ) log.debug( "In order to turn this off, set do_shotgun_config_lookup to False" ) @@ -1063,6 +1131,36 @@ def _get_updated_configuration(self, entity, progress_callback): else: raise TankBootstrapError("Unknown configuration update status!") + if entity is not None: + project_id = self._resolve_project_id(entity) + if project_id: + sg_project = self._sg_connection.find_one( + "Project", + [["id", "is", project_id]], + [ + flow_auth.AM_READY_PROJECT_FIELD, + flow_const.FLOW_SCHEMA_VERSION_FIELD, + ], + ) + if sg_project and sg_project.get(flow_auth.AM_READY_PROJECT_FIELD): + # Store flow fields temporarily to avoid re-querying. + # They will be cached on the context object after the context object has been rebuilt. + self._flow_project_id = sg_project.get( + flow_auth.AM_READY_PROJECT_FIELD + ) + self._flow_schema_version = sg_project.get( + flow_const.FLOW_SCHEMA_VERSION_FIELD + ) + log.info( + f"Current SG project is associated with a Flow project: {self._flow_project_id} with schema version {self._flow_schema_version}." + ) + + tk, _ = config.get_tk_instance(self._sg_user) + # Authenticate into Flow AM + self._trigger_am_auth( + tk.pipeline_configuration, entity, progress_callback + ) + return config def _bootstrap_sgtk(self, engine_name, entity, progress_callback=None): @@ -1114,6 +1212,11 @@ def _start_engine(self, tk, engine_name, entity, progress_callback=None): If entity is None, the method will bootstrap into the site config. + For Flow-enabled projects, the Flow project id and schema version + cached during ``_get_updated_configuration()`` are injected onto + ``ctx.project`` so the engine can read them via + ``context.flow_project_id`` and ``context.flow_schema_version``. + Please note that the API version of the tk instance that hosts the engine may not be the same as the API version that was executed during the bootstrap. @@ -1140,6 +1243,13 @@ def _start_engine(self, tk, engine_name, entity, progress_callback=None): else: ctx = tk.context_from_entity_dictionary(entity) + # Inject flow fields to context if current project is related to a Flow project. + if ctx.project and self._flow_project_id is not None: + ctx.project[flow_auth.AM_READY_PROJECT_FIELD] = self._flow_project_id + ctx.project[flow_const.FLOW_SCHEMA_VERSION_FIELD] = ( + self._flow_schema_version + ) + self._report_progress( progress_callback, self._LAUNCHING_ENGINE_RATE, "Launching Engine..." ) diff --git a/python/tk-core/python/tank/bootstrap/resolver.py b/python/tk-core/python/tank/bootstrap/resolver.py index d7f19204..e4990373 100644 --- a/python/tk-core/python/tank/bootstrap/resolver.py +++ b/python/tk-core/python/tank/bootstrap/resolver.py @@ -13,27 +13,25 @@ on disk. """ -import sys -import os import fnmatch +import os import pprint +import sys +from .. import LogManager from ..descriptor import ( Descriptor, create_descriptor, descriptor_uri_to_dict, is_descriptor_version_missing, ) -from .errors import TankBootstrapError, TankBootstrapInvalidPipelineConfigurationError +from ..descriptor.descriptor_installed_config import InstalledConfigDescriptor +from ..util import LocalFileStorageManager, ShotgunPath, filesystem +from . import constants from .baked_configuration import BakedConfiguration from .cached_configuration import CachedConfiguration +from .errors import TankBootstrapError, TankBootstrapInvalidPipelineConfigurationError from .installed_configuration import InstalledConfiguration -from ..descriptor.descriptor_installed_config import InstalledConfigDescriptor -from ..util import filesystem -from ..util import ShotgunPath -from ..util import LocalFileStorageManager -from .. import LogManager -from . import constants log = LogManager.get_logger(__name__) @@ -376,9 +374,9 @@ def _get_pipeline_configurations_for_project( # field. Note that this may be None if for example the pipeline configuration # is defined for another operating system. try: - pipeline_config[ - "config_descriptor" - ] = self._create_config_descriptor(sg_connection, pipeline_config) + pipeline_config["config_descriptor"] = ( + self._create_config_descriptor(sg_connection, pipeline_config) + ) yield pipeline_config except TankBootstrapInvalidPipelineConfigurationError as e: @@ -841,7 +839,9 @@ def resolve_shotgun_configuration( "Will use pipeline configuration id '%s'" % pipeline_config_identifier ) - log.debug("Requesting pipeline configuration data from Flow Production Tracking...") + log.debug( + "Requesting pipeline configuration data from Flow Production Tracking..." + ) # Fetch the one and only config that matches this id. pipeline_config = sg_connection.find_one( @@ -869,7 +869,9 @@ def resolve_shotgun_configuration( # We couldn't resolve anything from Shotgun, so we'll resolve the configuration using # an offline resolve. - return self.resolve_not_found_sg_configuration(fallback_config_descriptor, sg_connection) + return self.resolve_not_found_sg_configuration( + fallback_config_descriptor, sg_connection + ) else: # Something was found in Shotgun, which means we've also potentially resolved its diff --git a/python/tk-core/python/tank/commands/__init__.py b/python/tk-core/python/tank/commands/__init__.py index 3df351e8..e63da80e 100644 --- a/python/tk-core/python/tank/commands/__init__.py +++ b/python/tk-core/python/tank/commands/__init__.py @@ -8,5 +8,5 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -from .tank_command import list_commands, get_command, SgtkSystemCommand from .interaction import CommandInteraction +from .tank_command import SgtkSystemCommand, get_command, list_commands diff --git a/python/tk-core/python/tank/commands/app_info.py b/python/tk-core/python/tank/commands/app_info.py index 03de1802..2f1c214d 100644 --- a/python/tk-core/python/tank/commands/app_info.py +++ b/python/tk-core/python/tank/commands/app_info.py @@ -8,8 +8,8 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -from .action_base import Action from ..errors import TankError +from .action_base import Action class AppInfoAction(Action): @@ -108,7 +108,7 @@ def _env_breakdown(self, log, env_name): descriptor = env.get_app_descriptor(eng, app) log.info("App %s" % app) log.info("-" * (4 + len(app))) - for (k, v) in descriptor.get_dict().items(): + for k, v in descriptor.get_dict().items(): log.info(" %s: %s" % (k.capitalize(), v)) log.info(" Docs: %s" % descriptor.documentation_url) log.info("") diff --git a/python/tk-core/python/tank/commands/cache_apps.py b/python/tk-core/python/tank/commands/cache_apps.py index d6dc0d04..30ecaf35 100644 --- a/python/tk-core/python/tank/commands/cache_apps.py +++ b/python/tk-core/python/tank/commands/cache_apps.py @@ -8,8 +8,8 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -from .action_base import Action from ..errors import TankError +from .action_base import Action class CacheAppsAction(Action): diff --git a/python/tk-core/python/tank/commands/cache_yaml.py b/python/tk-core/python/tank/commands/cache_yaml.py index b299f4c0..3628aab4 100644 --- a/python/tk-core/python/tank/commands/cache_yaml.py +++ b/python/tk-core/python/tank/commands/cache_yaml.py @@ -8,13 +8,12 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -import os import fnmatch +import os - -from .action_base import Action from ..errors import TankError -from ..util import yaml_cache, pickle +from ..util import pickle, yaml_cache +from .action_base import Action class CacheYamlAction(Action): diff --git a/python/tk-core/python/tank/commands/clone_configuration.py b/python/tk-core/python/tank/commands/clone_configuration.py index bed03b0d..f1115dc1 100644 --- a/python/tk-core/python/tank/commands/clone_configuration.py +++ b/python/tk-core/python/tank/commands/clone_configuration.py @@ -8,19 +8,16 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -from ..util import ShotgunPath -from ..errors import TankError -from . import constants -from ..util import filesystem -from ..util import is_linux, is_macos, is_windows +import os +import shutil from tank_vendor import yaml +from ..errors import TankError +from ..util import ShotgunPath, filesystem, is_linux, is_macos, is_windows +from . import constants from .action_base import Action -import os -import shutil - class CloneConfigAction(Action): """ diff --git a/python/tk-core/python/tank/commands/console_utils.py b/python/tk-core/python/tank/commands/console_utils.py index b8838566..5d4f21ea 100644 --- a/python/tk-core/python/tank/commands/console_utils.py +++ b/python/tk-core/python/tank/commands/console_utils.py @@ -15,12 +15,11 @@ import textwrap from .. import pipelineconfig_utils -from ..platform import validation -from ..errors import TankError, TankNoDefaultValueError from ..descriptor import CheckVersionConstraintsError +from ..errors import TankError, TankNoDefaultValueError +from ..platform import validation from ..platform.bundle import resolve_default_value - ########################################################################################## # displaying of info in the terminal, ascii-graphcics style @@ -34,7 +33,7 @@ def format_bundle_info(log, descriptor, required_updates=None): :param required_updates: A list of bundle names that require updating. """ # yay we can install! - get release notes - (summary, url) = descriptor.changelog + summary, url = descriptor.changelog if required_updates: add_padding = " " diff --git a/python/tk-core/python/tank/commands/core_localize.py b/python/tk-core/python/tank/commands/core_localize.py index f29f1385..0eb6b1bd 100644 --- a/python/tk-core/python/tank/commands/core_localize.py +++ b/python/tk-core/python/tank/commands/core_localize.py @@ -8,17 +8,16 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. +import datetime import os -import sys import shutil -import datetime +import sys +from .. import pipelineconfig_factory, pipelineconfig_utils from ..errors import TankError from ..util import filesystem from ..util.version import is_version_older from .action_base import Action -from .. import pipelineconfig_utils -from .. import pipelineconfig_factory # these are the items that need to be copied across # when a configuration is upgraded to contain a core API diff --git a/python/tk-core/python/tank/commands/core_upgrade.py b/python/tk-core/python/tank/commands/core_upgrade.py index 183044c9..0516f2b7 100644 --- a/python/tk-core/python/tank/commands/core_upgrade.py +++ b/python/tk-core/python/tank/commands/core_upgrade.py @@ -11,22 +11,21 @@ """ Tank command allowing to do core updates. """ -from ..errors import TankError -from .action_base import Action +import copy +import optparse import os import sys import textwrap -import optparse -import copy - -from ..util import shotgun -from .. import pipelineconfig_utils -from . import console_utils -from ..util.version import is_version_newer, is_version_head from tank_vendor import yaml +from .. import pipelineconfig_utils +from ..errors import TankError +from ..util import shotgun +from ..util.version import is_version_head, is_version_newer +from .action_base import Action + # FIXME: This should be refactored into something that can be used by other commands. class TkOptParse(optparse.OptionParser): @@ -197,7 +196,7 @@ def _run(self, log, core_version): elif status == TankCoreUpdater.UPDATE_POSSIBLE: - (summary, url) = installer.get_release_notes() + summary, url = installer.get_release_notes() log.info("") log.info("Newer version %s is available." % new_version) diff --git a/python/tk-core/python/tank/commands/desktop_migration.py b/python/tk-core/python/tank/commands/desktop_migration.py index 90f671ed..92ffc3fb 100644 --- a/python/tk-core/python/tank/commands/desktop_migration.py +++ b/python/tk-core/python/tank/commands/desktop_migration.py @@ -8,9 +8,8 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -from .action_base import Action -from . import console_utils from . import constants +from .action_base import Action _MESSAGE = ( "This command will migrate the PTR site configuration used by the Desktop app so " diff --git a/python/tk-core/python/tank/commands/dump_config.py b/python/tk-core/python/tank/commands/dump_config.py index d0f68b21..12c7f2ab 100644 --- a/python/tk-core/python/tank/commands/dump_config.py +++ b/python/tk-core/python/tank/commands/dump_config.py @@ -12,8 +12,8 @@ from io import StringIO from ..errors import TankError -from .action_base import Action from ..util import filesystem +from .action_base import Action class DumpConfigAction(Action): diff --git a/python/tk-core/python/tank/commands/get_entity_commands.py b/python/tk-core/python/tank/commands/get_entity_commands.py index f22424a4..a18d41dc 100644 --- a/python/tk-core/python/tank/commands/get_entity_commands.py +++ b/python/tk-core/python/tank/commands/get_entity_commands.py @@ -7,16 +7,15 @@ # By accessing, using, copying or modifying this work you indicate your # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. +import itertools +import operator +import os import sys -from .action_base import Action from ..errors import TankError -from ..util.process import SubprocessCalledProcessError, subprocess_check_output from ..util import is_linux, is_macos, is_windows - -import itertools -import operator -import os +from ..util.process import SubprocessCalledProcessError, subprocess_check_output +from .action_base import Action def execute_tank_command(pipeline_config_path, args): @@ -150,7 +149,7 @@ def run_noninteractive(self, log, parameters): per_entity_type = itertools.groupby(entities, operator.itemgetter(0)) commands_per_entity = {} - for (entity_type, entities_of_type) in per_entity_type: + for entity_type, entities_of_type in per_entity_type: # make a list out of the grouped entity tuples entities_of_type = list(entities_of_type) try: @@ -311,7 +310,7 @@ def _parse_cached_commands(self, commands_data): tokens += [""] * (NUM_EXPECTED_TOKENS - len(tokens)) # extract the information from the tokens - (name, title, _, _, icon, description) = tuple(tokens) + name, title, _, _, icon, description = tuple(tokens) commands.append( {"name": name, "title": title, "icon": icon, "description": description} diff --git a/python/tk-core/python/tank/commands/install.py b/python/tk-core/python/tank/commands/install.py index 0d1fd957..baf7dfda 100644 --- a/python/tk-core/python/tank/commands/install.py +++ b/python/tk-core/python/tank/commands/install.py @@ -9,10 +9,8 @@ # not expressly granted therein are reserved by Shotgun Software Inc. from ..errors import TankError -from . import console_utils +from . import console_utils, constants, util from .action_base import Action -from . import util -from . import constants class InstallAppAction(Action): @@ -94,7 +92,7 @@ def run_interactive(self, log, args): :param log: std python logger :param args: command line args """ - (use_legacy_parser, args) = util.should_use_legacy_yaml_parser(args) + use_legacy_parser, args = util.should_use_legacy_yaml_parser(args) preserve_yaml = not use_legacy_parser if len(args) != 3: @@ -411,7 +409,7 @@ def run_interactive(self, log, args): :param log: std python logger :param args: command line args """ - (use_legacy_parser, args) = util.should_use_legacy_yaml_parser(args) + use_legacy_parser, args = util.should_use_legacy_yaml_parser(args) preserve_yaml = not use_legacy_parser if len(args) != 2: @@ -539,8 +537,8 @@ def _run(self, log, env_name, engine_name, preserve_yaml): # run descriptor factory method log.info("Connecting to git...") location = {"type": "git", "path": engine_name} - engine_descriptor = self.tk.pipeline_configuration.get_latest_engine_descriptor( - location + engine_descriptor = ( + self.tk.pipeline_configuration.get_latest_engine_descriptor(location) ) log.info( "Latest tag in repository '%s' is %s." @@ -559,8 +557,8 @@ def _run(self, log, env_name, engine_name, preserve_yaml): # this is an app store app! log.info("Connecting to the Toolkit App Store...") location = {"type": "app_store", "name": engine_name} - engine_descriptor = self.tk.pipeline_configuration.get_latest_engine_descriptor( - location + engine_descriptor = ( + self.tk.pipeline_configuration.get_latest_engine_descriptor(location) ) log.info( "Latest approved App Store Version is %s." % engine_descriptor.version diff --git a/python/tk-core/python/tank/commands/interaction.py b/python/tk-core/python/tank/commands/interaction.py index 0fed12b3..5229db4d 100644 --- a/python/tk-core/python/tank/commands/interaction.py +++ b/python/tk-core/python/tank/commands/interaction.py @@ -14,7 +14,6 @@ from .. import LogManager - log = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/commands/misc.py b/python/tk-core/python/tank/commands/misc.py index f4d1b911..5694b686 100644 --- a/python/tk-core/python/tank/commands/misc.py +++ b/python/tk-core/python/tank/commands/misc.py @@ -8,12 +8,12 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -from ..errors import TankError -from .action_base import Action - import code -import sys import os +import sys + +from ..errors import TankError +from .action_base import Action class ClearCacheAction(Action): @@ -70,7 +70,7 @@ def _run(self, log): log.debug("Deleting cache file %s..." % full_path) try: os.remove(full_path) - except: + except Exception: log.warning("Could not delete cache file '%s'!" % full_path) log.info("The PTR menu cache has been cleared.") @@ -128,8 +128,8 @@ def run_interactive(self, log, args): # attempt install tab command completion try: - import rlcompleter import readline + import rlcompleter # noqa: F401 if "libedit" in readline.__doc__: # macosx, some versions - see @@ -137,7 +137,7 @@ def run_interactive(self, log, args): readline.parse_and_bind("bind ^I rl_complete") else: readline.parse_and_bind("tab: complete") - except: + except Exception: pass code.interact(banner="\n".join(msg), local=tk_locals) diff --git a/python/tk-core/python/tank/commands/move_pc.py b/python/tk-core/python/tank/commands/move_pc.py index 24017746..5aac6c9a 100644 --- a/python/tk-core/python/tank/commands/move_pc.py +++ b/python/tk-core/python/tank/commands/move_pc.py @@ -8,15 +8,14 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -from . import constants -from ..errors import TankError - -from .action_base import Action - import os import shutil import sys +from ..errors import TankError +from . import constants +from .action_base import Action + class MovePCAction(Action): """ diff --git a/python/tk-core/python/tank/commands/path_cache.py b/python/tk-core/python/tank/commands/path_cache.py index bd7554a7..11218f7a 100644 --- a/python/tk-core/python/tank/commands/path_cache.py +++ b/python/tk-core/python/tank/commands/path_cache.py @@ -12,10 +12,8 @@ Methods relating to the path cache """ +from .. import folder, path_cache from ..errors import TankError -from .. import path_cache -from .. import folder - from .action_base import Action @@ -176,7 +174,9 @@ def run_interactive(self, log, args): # first load up the current path cache file and make sure # shotgun has got all those entries present as FilesystemLocations. log.info("") - log.info("Phase 1/3: Pushing data from the current path cache to Flow Production Tracking...") + log.info( + "Phase 1/3: Pushing data from the current path cache to Flow Production Tracking..." + ) curr_pc = path_cache.PathCache(self.tk) try: curr_pc.ensure_all_entries_are_in_shotgun() @@ -191,7 +191,9 @@ def run_interactive(self, log, args): # and synchronize path cache log.info("") - log.info("Phase 3/3: Synchronizing your local machine with Flow Production Tracking...") + log.info( + "Phase 3/3: Synchronizing your local machine with Flow Production Tracking..." + ) pc = path_cache.PathCache(self.tk) try: pc.synchronize(full_sync=True) diff --git a/python/tk-core/python/tank/commands/pc_overview.py b/python/tk-core/python/tank/commands/pc_overview.py index 76b1b48e..d3568441 100644 --- a/python/tk-core/python/tank/commands/pc_overview.py +++ b/python/tk-core/python/tank/commands/pc_overview.py @@ -9,14 +9,14 @@ # not expressly granted therein are reserved by Shotgun Software Inc. +import os + from .. import pipelineconfig_utils +from ..errors import TankError from ..util import ShotgunPath from . import constants -from ..errors import TankError from .action_base import Action -import os - class PCBreakdownAction(Action): """ diff --git a/python/tk-core/python/tank/commands/push_pc.py b/python/tk-core/python/tank/commands/push_pc.py index aa5f6e47..faa27e7d 100644 --- a/python/tk-core/python/tank/commands/push_pc.py +++ b/python/tk-core/python/tank/commands/push_pc.py @@ -8,21 +8,16 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -from ..util import filesystem -from . import constants +import datetime +import os +import shutil + from ..errors import TankError from ..pipelineconfig import PipelineConfiguration - -from . import console_utils - +from ..util import ShotgunPath, filesystem +from . import constants from .action_base import Action -from ..util import ShotgunPath - -import os -import datetime -import shutil - # Core configuration files which are associated with the core API installation and not # the pipeline configuration. CORE_API_FILES = [ @@ -136,7 +131,7 @@ def run_interactive(self, log, args): raise TankError("Aborted by user.") try: target_pc_id = int(answer) - except: + except Exception: raise TankError("Please enter a number!") self._run( diff --git a/python/tk-core/python/tank/commands/setup_project.py b/python/tk-core/python/tank/commands/setup_project.py index 4ed10d33..44b9184f 100644 --- a/python/tk-core/python/tank/commands/setup_project.py +++ b/python/tk-core/python/tank/commands/setup_project.py @@ -13,19 +13,15 @@ import textwrap import traceback -from .action_base import Action -from . import core_localize -from ..errors import TankError -from ..util import shotgun -from ..util import ShotgunPath -from ..util import is_linux, is_macos, is_windows -from . import constants from .. import pipelineconfig_utils +from ..errors import TankError +from ..util import ShotgunPath, is_linux, is_macos, is_windows, shotgun from ..util.filesystem import ensure_folder_exists - +from . import constants, core_localize +from .action_base import Action +from .interaction import YesToEverythingInteraction from .setup_project_core import run_project_setup from .setup_project_params import ProjectSetupParameters -from .interaction import YesToEverythingInteraction class SetupProjectAction(Action): @@ -483,7 +479,7 @@ def _select_project(self, log, sg, show_initialized_projects): ["archived", "is_not", True], ] - if show_initialized_projects == False: + if show_initialized_projects is False: # not force mode. Only show non-set up projects filters.append(["tank_name", "is", None]) @@ -545,7 +541,7 @@ def _select_project(self, log, sg, show_initialized_projects): raise TankError("Aborted by user.") try: project_id = int(answer) - except: + except Exception: raise TankError("Please enter a number!") if project_id not in [x["id"] for x in projs]: @@ -687,9 +683,7 @@ def _get_disk_location(self, log, params): default_config_locations = self._get_default_configuration_location(log, params) - linux_path = self._ask_location( - log, default_config_locations["linux"], "Linux" - ) + linux_path = self._ask_location(log, default_config_locations["linux"], "Linux") windows_path = self._ask_location( log, default_config_locations["win32"], "Windows" ) @@ -726,7 +720,6 @@ def _get_default_configuration_location(self, log, params): # location for the installed config. # Multi-root configurations require a storage named "primary" so we base # our default on that. If only a single storage is available, we just use it. - storage_names = params.get_required_storages() default_storage_name = params.default_storage_name # There is no default storage name for a config that doesn't use roots, like @@ -950,7 +943,7 @@ def _map_storages(self, params, config_uri, log, sg): mapped_roots = [] # loop over required storage roots - for (root_name, root_info) in required_roots.items(): + for root_name, root_info in required_roots.items(): log.info("%s" % (root_name,)) log.info("-" * len(root_name)) @@ -1057,7 +1050,7 @@ def _map_storages(self, params, config_uri, log, sg): # ---- now we've mapped the roots, and they're all valid, we need to # update the root information on the core wizard - for (root_name, storage_name) in mapped_roots: + for root_name, storage_name in mapped_roots: root_info = required_roots[root_name] storage_data = storage_by_name[storage_name.lower()] diff --git a/python/tk-core/python/tank/commands/setup_project_core.py b/python/tk-core/python/tank/commands/setup_project_core.py index 38b54395..6f315c19 100644 --- a/python/tk-core/python/tank/commands/setup_project_core.py +++ b/python/tk-core/python/tank/commands/setup_project_core.py @@ -8,18 +8,17 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -import sys import os import shutil - -from . import constants -from ..errors import TankError -from ..util import StorageRoots -from ..util import filesystem -from ..api import sgtk_from_path +import sys from tank_vendor import yaml +from ..api import sgtk_from_path +from ..errors import TankError +from ..util import StorageRoots, filesystem +from . import constants + @filesystem.with_cleared_umask def run_project_setup(log, sg, setup_params): diff --git a/python/tk-core/python/tank/commands/setup_project_params.py b/python/tk-core/python/tank/commands/setup_project_params.py index bd9bed67..3f7cc2aa 100644 --- a/python/tk-core/python/tank/commands/setup_project_params.py +++ b/python/tk-core/python/tank/commands/setup_project_params.py @@ -9,29 +9,21 @@ # not expressly granted therein are reserved by Shotgun Software Inc. import os +import sys import tempfile import uuid -import sys -from . import constants -from . import util +from tank_vendor import yaml -from ..util import StorageRoots +from .. import hook, pipelineconfig_utils +from ..descriptor import Descriptor, create_descriptor +from ..errors import TankError, TankErrorProjectIsSetup +from ..util import ShotgunPath, StorageRoots, filesystem from ..util import sgre as re from ..util import shotgun -from ..util import filesystem -from ..util import is_windows from ..util.version import is_version_newer from ..util.zip import unzip_file, zip_file - -from .. import hook -from ..errors import TankError, TankErrorProjectIsSetup -from .. import pipelineconfig_utils -from ..descriptor import create_descriptor, Descriptor - -from tank_vendor import yaml - -from ..util import ShotgunPath +from . import constants, util class ProjectSetupParameters(object): @@ -57,7 +49,7 @@ class ProjectSetupParameters(object): - run project setup! """ - (CENTRALIZED_CONFIG, DISTRIBUTED_CONFIG) = range(2) + CENTRALIZED_CONFIG, DISTRIBUTED_CONFIG = range(2) def __init__(self, log, sg): """ @@ -514,8 +506,8 @@ def set_project_id(self, project_id, force=False): # if force is false then tank_name must be empty if ( - self.get_auto_path_mode() == False - and force == False + self.get_auto_path_mode() is False + and force is False and proj["tank_name"] is not None ): raise TankErrorProjectIsSetup() @@ -1019,7 +1011,7 @@ def __init__(self, config_uri, sg, log): # now extract the cfg and validate old_umask = os.umask(0) try: - (self._cfg_folder, self._version, self._config_mode) = self._process_config( + self._cfg_folder, self._version, self._config_mode = self._process_config( config_uri ) finally: @@ -1272,7 +1264,7 @@ def resolve_storages(self): storage_info = {} # do the storage lookup and mapping in PTR - (local_storage_lookup, unmapped_roots) = self._storage_roots.get_local_storages( + local_storage_lookup, unmapped_roots = self._storage_roots.get_local_storages( self._sg ) diff --git a/python/tk-core/python/tank/commands/setup_project_wizard.py b/python/tk-core/python/tank/commands/setup_project_wizard.py index 45f11947..465275d9 100644 --- a/python/tk-core/python/tank/commands/setup_project_wizard.py +++ b/python/tk-core/python/tank/commands/setup_project_wizard.py @@ -651,9 +651,9 @@ def get_core_settings(self): ) return_data["using_runtime"] = False return_data["pipeline_config"] = data - return_data[ - "core_path" - ] = pipelineconfig_utils.resolve_all_os_paths_to_core(core_api_root) + return_data["core_path"] = ( + pipelineconfig_utils.resolve_all_os_paths_to_core(core_api_root) + ) # finally, check the logic for localization: # if this core that we have found and resolved is localized, diff --git a/python/tk-core/python/tank/commands/switch.py b/python/tk-core/python/tank/commands/switch.py index b1cbfd3f..d2027995 100644 --- a/python/tk-core/python/tank/commands/switch.py +++ b/python/tk-core/python/tank/commands/switch.py @@ -8,14 +8,12 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. +import os + from ..errors import TankError -from . import constants -from . import util -from . import console_utils +from . import console_utils, constants, util from .action_base import Action -import os - class SwitchAppAction(Action): """ @@ -116,7 +114,7 @@ def run_interactive(self, log, args): log.info("") return - (use_legacy_parser, args) = util.should_use_legacy_yaml_parser(args) + use_legacy_parser, args = util.should_use_legacy_yaml_parser(args) preserve_yaml = not use_legacy_parser # get parameters @@ -203,13 +201,13 @@ def run_interactive(self, log, args): log.info("") log.info("Current version") log.info("------------------------------------") - for (k, v) in descriptor.get_dict().items(): + for k, v in descriptor.get_dict().items(): log.info(" - %s: %s" % (k.capitalize(), v)) log.info("") log.info("New version") log.info("------------------------------------") - for (k, v) in new_descriptor.get_dict().items(): + for k, v in new_descriptor.get_dict().items(): log.info(" - %s: %s" % (k.capitalize(), v)) log.info("") @@ -229,9 +227,7 @@ def run_interactive(self, log, args): # ensure that all required frameworks have been installed # find the file where our item is being installed - (_, yml_file) = env.find_location_for_app( - engine_instance_name, app_instance_name - ) + _, yml_file = env.find_location_for_app(engine_instance_name, app_instance_name) console_utils.ensure_frameworks_installed( log, self.tk, yml_file, new_descriptor, env, self._interaction_interface diff --git a/python/tk-core/python/tank/commands/tank_command.py b/python/tk-core/python/tank/commands/tank_command.py index 8c5171e1..d803b20c 100644 --- a/python/tk-core/python/tank/commands/tank_command.py +++ b/python/tk-core/python/tank/commands/tank_command.py @@ -15,38 +15,38 @@ import logging -from .action_base import Action -from .interaction import RawInputCommandInteraction, YesToEverythingInteraction -from . import folders -from . import misc -from . import move_pc -from . import pc_overview -from . import path_cache -from . import update -from . import push_pc -from . import setup_project -from . import setup_project_wizard -from . import dump_config -from . import validate_config -from . import cache_apps -from . import switch -from . import app_info -from . import core_upgrade -from . import core_localize -from . import install -from . import clone_configuration -from . import copy_apps -from . import unregister_folders -from . import desktop_migration -from . import cache_yaml -from . import get_entity_commands -from . import constants - - -from .. import constants as constants_global from .. import LogManager -from ..platform.engine import start_engine, get_environment_from_context +from .. import constants as constants_global from ..errors import TankError +from ..platform.engine import get_environment_from_context, start_engine +from . import ( + app_info, + cache_apps, + cache_yaml, + clone_configuration, + constants, + copy_apps, + core_localize, + core_upgrade, + desktop_migration, + dump_config, + folders, + get_entity_commands, + install, + misc, + move_pc, + path_cache, + pc_overview, + push_pc, + setup_project, + setup_project_wizard, + switch, + unregister_folders, + update, + validate_config, +) +from .action_base import Action +from .interaction import RawInputCommandInteraction, YesToEverythingInteraction log = LogManager.get_logger(__name__) @@ -473,7 +473,7 @@ def run_action(log, tk, ctx, command, args): found_action = x break - if found_action and found_action.wants_running_shell_engine == False: + if found_action and found_action.wants_running_shell_engine is False: log.debug("No need to load up the engine for this command.") else: # try to load the engine. diff --git a/python/tk-core/python/tank/commands/unregister_folders.py b/python/tk-core/python/tank/commands/unregister_folders.py index 7aeb58e8..8b61967f 100644 --- a/python/tk-core/python/tank/commands/unregister_folders.py +++ b/python/tk-core/python/tank/commands/unregister_folders.py @@ -12,10 +12,9 @@ Method to unregister folders from the path cache """ -from ..errors import TankError from .. import path_cache +from ..errors import TankError from .action_base import Action -from ..util.login import get_current_user class UnregisterFoldersAction(Action): diff --git a/python/tk-core/python/tank/commands/update.py b/python/tk-core/python/tank/commands/update.py index 2b8129e5..2f3b1e64 100644 --- a/python/tk-core/python/tank/commands/update.py +++ b/python/tk-core/python/tank/commands/update.py @@ -10,14 +10,12 @@ import os -from .action_base import Action -from . import console_utils -from . import util -from ..platform.environment import WritableEnvironment -from ..descriptor import CheckVersionConstraintsError -from . import constants -from ..util.version import is_version_number, is_version_newer from .. import pipelineconfig_utils +from ..descriptor import CheckVersionConstraintsError +from ..platform.environment import WritableEnvironment +from ..util.version import is_version_newer, is_version_number +from . import console_utils, constants, util +from .action_base import Action class AppUpdatesAction(Action): @@ -110,7 +108,7 @@ def run_interactive(self, log, args): :param log: std python logger :param args: command line args """ - (use_legacy_parser, args) = util.should_use_legacy_yaml_parser(args) + use_legacy_parser, args = util.should_use_legacy_yaml_parser(args) preserve_yaml = not use_legacy_parser if len(args) == 0: @@ -368,7 +366,7 @@ def _check_for_updates( x["new_descriptor"].version, ) ) - (_, url) = x["new_descriptor"].changelog + _, url = x["new_descriptor"].changelog if url: summary.append("Change Log: %s" % url) summary.append("") @@ -512,11 +510,11 @@ def _update_item( # ensure that all required frameworks have been installed # find the file where our item is being installed if framework_name: - (_, yml_file) = env.find_location_for_framework(framework_name) + _, yml_file = env.find_location_for_framework(framework_name) elif app_name: - (_, yml_file) = env.find_location_for_app(engine_name, app_name) + _, yml_file = env.find_location_for_app(engine_name, app_name) else: - (_, yml_file) = env.find_location_for_engine(engine_name) + _, yml_file = env.find_location_for_engine(engine_name) console_utils.ensure_frameworks_installed( log, tk, yml_file, new_descriptor, env, self._interaction_interface @@ -791,7 +789,7 @@ def _check_item_update_status( out_of_date = latest_desc.version != curr_desc.version # check deprecation - (is_dep, dep_msg) = latest_desc.deprecation_status + is_dep, dep_msg = latest_desc.deprecation_status if is_dep: # we treat deprecation as an out of date that cannot be upgraded! diff --git a/python/tk-core/python/tank/commands/validate_config.py b/python/tk-core/python/tank/commands/validate_config.py index ce2d6b80..539ca38c 100644 --- a/python/tk-core/python/tank/commands/validate_config.py +++ b/python/tk-core/python/tank/commands/validate_config.py @@ -9,9 +9,10 @@ # not expressly granted therein are reserved by Shotgun Software Inc. import os -from .action_base import Action + from ..errors import TankError -from ..platform import validation, bundle +from ..platform import bundle, validation +from .action_base import Action class ValidateConfigAction(Action): @@ -83,9 +84,7 @@ def _run(self, log, parameters): log.info("") log.info("") - log.info( - "Welcome to the Flow Production Tracking Configuration validator!" - ) + log.info("Welcome to the Flow Production Tracking Configuration validator!") log.info("") log.info("Found the following environments:") diff --git a/python/tk-core/python/tank/context.py b/python/tk-core/python/tank/context.py index 4fe363ed..8c3757c8 100644 --- a/python/tk-core/python/tank/context.py +++ b/python/tk-core/python/tank/context.py @@ -13,22 +13,22 @@ """ -import os +from __future__ import annotations # needed for python 3.9 support + import copy import json +import os from tank_vendor import yaml -from . import authentication - -from .util import login -from .util import shotgun_entity -from .util import shotgun -from .util import get_sg_entity_name_field -from .util import pickle -from . import constants -from .errors import TankError, TankContextDeserializationError +from tank_vendor.flow_integration_sdk import sandbox + +from . import authentication, constants +from .authentication import flow_auth +from .errors import TankContextDeserializationError, TankError +from .flowam import constants as flow_const from .path_cache import PathCache from .template import TemplatePath +from .util import login, pickle, shotgun, shotgun_entity class Context(object): @@ -72,6 +72,7 @@ def __init__( user=None, additional_entities=None, source_entity=None, + flow_draft_id=None, ): """ Context objects are not constructed by hand but are fabricated by the @@ -86,6 +87,7 @@ def __init__( self.__user = user self.__additional_entities = additional_entities or [] self.__source_entity = source_entity + self.__flow_draft_id = flow_draft_id self._entity_fields_cache = {} def __repr__(self): @@ -176,9 +178,9 @@ def _entity_dicts_eq(d1, d2): :param d2: Second entity dictionary :returns: True if d1 and d2 are considered equal, otherwise False. """ - if d1 == d2 == None: + if d1 is None and d2 is None: return True - if d1 == None or d2 == None: + if d1 is None or d2 is None: return False return d1["type"] == d2["type"] and d1["id"] == d2["id"] @@ -259,6 +261,7 @@ def __deepcopy__(self, memo): ctx_copy.__user = copy.deepcopy(self.__user, memo) ctx_copy.__additional_entities = copy.deepcopy(self.__additional_entities, memo) ctx_copy.__source_entity = copy.deepcopy(self.__source_entity, memo) + ctx_copy.__flow_draft_id = copy.deepcopy(self.__flow_draft_id, memo) # except: # ctx_copy._entity_fields_cache @@ -403,6 +406,45 @@ def additional_entities(self): """ return self.__additional_entities + @property + def flow_project_id(self) -> str | None: + """ + The FlowAM project ID for this context, or ``None`` if the project is + not FlowAM-enabled or there is no project in this context. + + The value is read from the ``sg_flow_am_id`` field on the project dict. + It is populated by the bootstrap manager after it queries ShotGrid. + + :returns: A string containing the FlowAM project ID, or ``None``. + :rtype: str or None + """ + if self.project: + return self.project.get(flow_auth.AM_READY_PROJECT_FIELD) + return None + + @property + def flow_draft_id(self) -> str | None: + """Current Flow draft context. + If not None, this designates the current draft being worked on within the DCC session. + """ + return self.__flow_draft_id + + @property + def flow_schema_version(self) -> str | None: + """ + The FlowAM schema version of the project in context, or ``None`` if the project is + not FlowAM-enabled or there is no schema created. + + The value is read from the ``sg_flow_schema_config_version`` field on the project dict. + It is populated by the bootstrap manager after it queries ShotGrid. + + :returns: A string containing the FlowAM schema version, or ``None``. + :rtype: str or None + """ + if self.project: + return self.project.get(flow_const.FLOW_SCHEMA_VERSION_FIELD) + return None + @property def entity_locations(self): """ @@ -708,6 +750,19 @@ def create_copy_for_user(self, user): ctx_copy.__user = user return ctx_copy + def set_flow_context(self, file_path: str): + """Set the current flow asset context based on opened file path. + + Args: + file_path: File currently opened in DCC. + """ + self.__flow_draft_id = sandbox.get_draft_context(file_path) + + def clear_flow_context(self): + """Clear the current flow asset context.""" + + self.__flow_draft_id = None + ################################################################################################ # serialization @@ -815,8 +870,8 @@ def deserialize(cls, context_str): def to_dict(self): """ Converts the context into a dictionary with keys ``project``, - ``entity``, ``user``, ``step``, ``task``, ``additional_entities`` and - ``source_entity``. + ``entity``, ``user``, ``step``, ``task``, ``additional_entities``, + ``source_entity``, ``flow_project_id``, ``flow_draft_id`` and ``flow_schema_version``. .. note :: Contrary to :meth:`Context.serialize`, this method discards information @@ -835,6 +890,9 @@ def to_dict(self): self._cleanup_entity(entity) for entity in self.additional_entities ], "source_entity": self._cleanup_entity(self.source_entity), + "flow_project_id": self.flow_project_id, + "flow_draft_id": self.flow_draft_id, + "flow_schema_version": self.flow_schema_version, } def _cleanup_entity(self, entity): @@ -894,7 +952,7 @@ def _from_dict(cls, data): :returns: :class:`Context` """ - return Context( + ctx = Context( tk=data.get("tk"), project=data.get("project"), entity=data.get("entity"), @@ -903,7 +961,23 @@ def _from_dict(cls, data): user=data.get("user"), additional_entities=data.get("additional_entities"), source_entity=data.get("source_entity"), + flow_draft_id=data.get("flow_draft_id"), ) + if ( + ctx.project is not None + and "flow_project_id" in data + and flow_auth.AM_READY_PROJECT_FIELD not in ctx.project + ): + ctx.project[flow_auth.AM_READY_PROJECT_FIELD] = data["flow_project_id"] + if ( + ctx.project is not None + and "flow_schema_version" in data + and flow_const.FLOW_SCHEMA_VERSION_FIELD not in ctx.project + ): + ctx.project[flow_const.FLOW_SCHEMA_VERSION_FIELD] = data[ + "flow_schema_version" + ] + return ctx ################################################################################################ # private methods @@ -931,7 +1005,7 @@ def _fields_from_shotgun(self, template, entities, validate): # this key is a shotgun value that needs fetching! # ensure that the context actually provides the desired entities - if not key.shotgun_entity_type in entities: + if key.shotgun_entity_type not in entities: if validate: raise TankError( "Key '%s' in template '%s' could not be populated by " @@ -1305,7 +1379,8 @@ def _from_entity_type_and_id(tk, entity, source_entity=None): if sg_entity is None: raise TankError( - "Entity %s with id %s not found in Flow Production Tracking!" % (entity_type, entity_id) + "Entity %s with id %s not found in Flow Production Tracking!" + % (entity_type, entity_id) ) if sg_entity.get("task"): @@ -1412,7 +1487,6 @@ def _from_entity_dictionary(tk, entity_dictionary, source_entity=None): } entity_type = entity_dictionary["type"] - entity_id = entity_dictionary["id"] # try to determine the various entities from the entity dictionary: project = None @@ -1477,7 +1551,7 @@ def _build_clean_entity(ent): if "id" not in ent or "type" not in ent: return None ent_name = _get_entity_name(ent) - if ent_name == None: + if ent_name is None: return None # return a clean dictionary: return {"type": ent["type"], "id": ent["id"], "name": ent_name} @@ -1719,7 +1793,7 @@ def context_yaml_representer(dumper, context): # pipeline config path as part of the dict context_dict["_pc_path"] = context.tank.pipeline_configuration.get_path() - return dumper.represent_mapping(u"!TankContext", context_dict) + return dumper.represent_mapping("!TankContext", context_dict) def context_yaml_constructor(loader, node): @@ -1750,7 +1824,7 @@ def context_yaml_constructor(loader, node): yaml.add_representer(Context, context_yaml_representer) -yaml.add_constructor(u"!TankContext", context_yaml_constructor) +yaml.add_constructor("!TankContext", context_yaml_constructor) ################################################################################################ # utility methods @@ -1767,7 +1841,7 @@ def _get_entity_name(entity_dictionary): """ name_field = shotgun_entity.get_sg_entity_name_field(entity_dictionary["type"]) entity_name = entity_dictionary.get(name_field) - if entity_name == None: + if entity_name is None: # Also check to see if entity contains 'name': if name_field != "name": entity_name = entity_dictionary.get("name") @@ -1807,7 +1881,9 @@ def _task_from_sg(tk, task_id, additional_fields=None): "Task", [["id", "is", task_id]], standard_fields + additional_fields ) if not task: - raise TankError("Unable to locate Task with id %s in Flow Production Tracking" % task_id) + raise TankError( + "Unable to locate Task with id %s in Flow Production Tracking" % task_id + ) # add task so it can be processed with other shotgun entities task["task"] = {"type": "Task", "id": task_id, "name": task["content"]} @@ -1867,7 +1943,8 @@ def _entity_from_sg(tk, entity_type, entity_id): if not data: raise TankError( - "Unable to locate %s with id %s in Flow Production Tracking" % (entity_type, entity_id) + "Unable to locate %s with id %s in Flow Production Tracking" + % (entity_type, entity_id) ) # create context diff --git a/python/tk-core/python/tank/deploy/__init__.py b/python/tk-core/python/tank/deploy/__init__.py index 7f72de65..b129e819 100644 --- a/python/tk-core/python/tank/deploy/__init__.py +++ b/python/tk-core/python/tank/deploy/__init__.py @@ -8,6 +8,4 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -from . import descriptor -from . import dev_descriptor -from . import util +from . import descriptor, dev_descriptor, util diff --git a/python/tk-core/python/tank/deploy/descriptor.py b/python/tk-core/python/tank/deploy/descriptor.py index b8482eba..c6fcd948 100644 --- a/python/tk-core/python/tank/deploy/descriptor.py +++ b/python/tk-core/python/tank/deploy/descriptor.py @@ -14,7 +14,7 @@ This code may be removed at some point in the future. """ -from ..descriptor import create_descriptor, Descriptor +from ..descriptor import Descriptor, create_descriptor from ..util import shotgun diff --git a/python/tk-core/python/tank/deploy/util.py b/python/tk-core/python/tank/deploy/util.py index be85eb0d..9b55d6ba 100644 --- a/python/tk-core/python/tank/deploy/util.py +++ b/python/tk-core/python/tank/deploy/util.py @@ -16,4 +16,4 @@ # import methods to ensure that older version of the desktop engine # will function correctly - the code calls these internal methods -from ..util.version import is_version_newer, is_version_older +from ..util.version import is_version_newer, is_version_older # noqa: F401 diff --git a/python/tk-core/python/tank/descriptor/__init__.py b/python/tk-core/python/tank/descriptor/__init__.py index 2031cc02..b8b82e15 100644 --- a/python/tk-core/python/tank/descriptor/__init__.py +++ b/python/tk-core/python/tank/descriptor/__init__.py @@ -10,22 +10,20 @@ from .descriptor import Descriptor, create_descriptor -from .descriptor_core import CoreDescriptor -from .descriptor_bundle import AppDescriptor, FrameworkDescriptor, EngineDescriptor +from .descriptor_bundle import AppDescriptor, EngineDescriptor, FrameworkDescriptor from .descriptor_config import ConfigDescriptor - +from .descriptor_core import CoreDescriptor from .errors import ( + CheckVersionConstraintsError, + InvalidAppStoreCredentialsError, TankAppStoreConnectionError, TankAppStoreError, + TankCheckVersionConstraintsError, TankDescriptorError, - InvalidAppStoreCredentialsError, TankInvalidAppStoreCredentialsError, - CheckVersionConstraintsError, - TankCheckVersionConstraintsError, TankInvalidInterpreterLocationError, TankMissingManifestError, ) - from .io_descriptor import ( descriptor_dict_to_uri, descriptor_uri_to_dict, diff --git a/python/tk-core/python/tank/descriptor/descriptor.py b/python/tk-core/python/tank/descriptor/descriptor.py index 0ef5f448..b767fa93 100644 --- a/python/tk-core/python/tank/descriptor/descriptor.py +++ b/python/tk-core/python/tank/descriptor/descriptor.py @@ -8,17 +8,15 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -import os import copy +import os +from .. import constants as constants2 from ..log import LogManager -from ..util import filesystem -from .io_descriptor import create_io_descriptor -from .errors import TankDescriptorError -from ..util import LocalFileStorageManager +from ..util import LocalFileStorageManager, filesystem from . import constants -from .. import constants as constants2 - +from .errors import TankDescriptorError +from .io_descriptor import create_io_descriptor logger = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/descriptor/descriptor_bundle.py b/python/tk-core/python/tank/descriptor/descriptor_bundle.py index 92eb2a9c..0a591262 100644 --- a/python/tk-core/python/tank/descriptor/descriptor_bundle.py +++ b/python/tk-core/python/tank/descriptor/descriptor_bundle.py @@ -8,13 +8,11 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -from .descriptor import Descriptor -from .errors import TankDescriptorError, CheckVersionConstraintsError -from . import constants -from .. import LogManager +from .. import LogManager, pipelineconfig_utils from ..util.version import is_version_older -from ..util import shotgun -from .. import pipelineconfig_utils +from . import constants +from .descriptor import Descriptor +from .errors import CheckVersionConstraintsError, TankDescriptorError log = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/descriptor/descriptor_cached_config.py b/python/tk-core/python/tank/descriptor/descriptor_cached_config.py index 15ddb494..5c826420 100644 --- a/python/tk-core/python/tank/descriptor/descriptor_cached_config.py +++ b/python/tk-core/python/tank/descriptor/descriptor_cached_config.py @@ -12,10 +12,10 @@ from tank_vendor import yaml +from .. import LogManager from . import constants -from .errors import TankDescriptorError from .descriptor_config import ConfigDescriptor -from .. import LogManager +from .errors import TankDescriptorError log = LogManager.get_logger(__name__) @@ -69,7 +69,7 @@ def associated_core_descriptor(self): # # location: # name: tk-core - # type: app_store + # type: app_store # version: v0.16.34 log.debug("Detected core descriptor file '%s'" % core_descriptor_path) diff --git a/python/tk-core/python/tank/descriptor/descriptor_config.py b/python/tk-core/python/tank/descriptor/descriptor_config.py index ca8e00da..e86f12ba 100644 --- a/python/tk-core/python/tank/descriptor/descriptor_config.py +++ b/python/tk-core/python/tank/descriptor/descriptor_config.py @@ -10,16 +10,14 @@ import os +from .. import LogManager from ..errors import TankFileDoesNotExistError +from ..util import ShotgunPath, StorageRoots +from ..util.version import is_version_older from . import constants -from .errors import TankInvalidInterpreterLocationError from .descriptor import Descriptor, create_descriptor -from .io_descriptor import is_descriptor_version_missing -from .. import LogManager -from ..util import StorageRoots -from ..util import ShotgunPath -from ..util.version import is_version_older -from .io_descriptor import descriptor_uri_to_dict +from .errors import TankInvalidInterpreterLocationError +from .io_descriptor import descriptor_uri_to_dict, is_descriptor_version_missing log = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/descriptor/descriptor_core.py b/python/tk-core/python/tank/descriptor/descriptor_core.py index 904899d9..3a639f6c 100644 --- a/python/tk-core/python/tank/descriptor/descriptor_core.py +++ b/python/tk-core/python/tank/descriptor/descriptor_core.py @@ -8,9 +8,9 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. +from . import constants from .descriptor import Descriptor from .errors import TankMissingManifestError -from . import constants class CoreDescriptor(Descriptor): diff --git a/python/tk-core/python/tank/descriptor/descriptor_installed_config.py b/python/tk-core/python/tank/descriptor/descriptor_installed_config.py index 1c2e3927..7c33a318 100644 --- a/python/tk-core/python/tank/descriptor/descriptor_installed_config.py +++ b/python/tk-core/python/tank/descriptor/descriptor_installed_config.py @@ -10,18 +10,16 @@ import os -from .descriptor_config import ConfigDescriptor -from .. import pipelineconfig_utils -from .. import LogManager -from ..util import ShotgunPath -from . import constants -from .errors import TankMissingManifestError - +from .. import LogManager, pipelineconfig_utils from ..errors import ( - TankNotPipelineConfigurationError, TankFileDoesNotExistError, TankInvalidCoreLocationError, + TankNotPipelineConfigurationError, ) +from ..util import ShotgunPath +from . import constants +from .descriptor_config import ConfigDescriptor +from .errors import TankMissingManifestError log = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/descriptor/errors.py b/python/tk-core/python/tank/descriptor/errors.py index 3ea15ae0..5774355d 100644 --- a/python/tk-core/python/tank/descriptor/errors.py +++ b/python/tk-core/python/tank/descriptor/errors.py @@ -12,8 +12,8 @@ All custom exceptions that this module emits are defined here. """ -from ..errors import TankError from .. import errors +from ..errors import TankError class TankDescriptorError(TankError): diff --git a/python/tk-core/python/tank/descriptor/io_descriptor/__init__.py b/python/tk-core/python/tank/descriptor/io_descriptor/__init__.py index 50763697..e294b962 100644 --- a/python/tk-core/python/tank/descriptor/io_descriptor/__init__.py +++ b/python/tk-core/python/tank/descriptor/io_descriptor/__init__.py @@ -10,8 +10,8 @@ from .factory import ( create_io_descriptor, - descriptor_uri_to_dict, descriptor_dict_to_uri, + descriptor_uri_to_dict, is_descriptor_version_missing, ) @@ -22,15 +22,15 @@ def _initialize_descriptor_factory(): This complex process for handling the IODescriptor abstract factory management is in order to avoid local imports in classes. """ - from .base import IODescriptorBase from .appstore import IODescriptorAppStore + from .base import IODescriptorBase from .dev import IODescriptorDev - from .path import IODescriptorPath - from .shotgun_entity import IODescriptorShotgunEntity - from .git_tag import IODescriptorGitTag from .git_branch import IODescriptorGitBranch + from .git_tag import IODescriptorGitTag from .github_release import IODescriptorGithubRelease from .manual import IODescriptorManual + from .path import IODescriptorPath + from .shotgun_entity import IODescriptorShotgunEntity IODescriptorBase.register_descriptor_factory("app_store", IODescriptorAppStore) IODescriptorBase.register_descriptor_factory("dev", IODescriptorDev) diff --git a/python/tk-core/python/tank/descriptor/io_descriptor/appstore.py b/python/tk-core/python/tank/descriptor/io_descriptor/appstore.py index 746b6c54..d6bfdf5a 100644 --- a/python/tk-core/python/tank/descriptor/io_descriptor/appstore.py +++ b/python/tk-core/python/tank/descriptor/io_descriptor/appstore.py @@ -65,7 +65,7 @@ class IODescriptorAppStore(IODescriptorDownloadable): _app_store_connections = {} # internal app store mappings - (APP, FRAMEWORK, ENGINE, CONFIG, CORE) = range(5) + APP, FRAMEWORK, ENGINE, CONFIG, CORE = range(5) _APP_STORE_OBJECT = { constants.DESCRIPTOR_APP: constants.TANK_APP_ENTITY_TYPE, @@ -231,7 +231,7 @@ def __refresh_metadata(self, path, sg_bundle_data=None, sg_version_data=None): link_field = self._APP_STORE_LINK[self._bundle_type] # connect to the app store - (sg, _) = self.__create_sg_app_store_connection() + sg, _ = self.__create_sg_app_store_connection() if self._bundle_type == self.CORE: # special handling of core since it doesn't have a high-level 'bundle' entity @@ -413,7 +413,7 @@ def _download_local(self, destination_path): is to be downloaded to. """ # connect to the app store - (sg, script_user) = self.__create_sg_app_store_connection() + sg, script_user = self.__create_sg_app_store_connection() # fetch metadata from sg... metadata = self.__refresh_metadata(destination_path) @@ -445,7 +445,7 @@ def _post_download(self, download_path): # write a stats record to the tank app store try: # connect to the app store - (sg, script_user) = self.__create_sg_app_store_connection() + sg, script_user = self.__create_sg_app_store_connection() # fetch metadata from sg... metadata = self.__refresh_metadata(download_path) @@ -745,7 +745,7 @@ def get_latest_version(self, constraint_pattern=None): ) # connect to the app store - (sg, _) = self.__create_sg_app_store_connection() + sg, _ = self.__create_sg_app_store_connection() # get latest get the filter logic for what to exclude if constants.APP_STORE_QA_MODE_ENV_VAR in os.environ: @@ -981,7 +981,7 @@ def __create_sg_app_store_connection(self): # Connect to associated Shotgun site and retrieve the credentials to use to # connect to the app store site try: - (script_name, script_key) = self.__get_app_store_key_from_shotgun() + script_name, script_key = self.__get_app_store_key_from_shotgun() except urllib.error.HTTPError as e: if e.code == 403: # edge case alert! @@ -994,7 +994,7 @@ def __create_sg_app_store_connection(self): # trigger a refresh of our session token by issuing a shotgun API call self._sg_connection.find_one("HumanUser", []) # and retry - (script_name, script_key) = self.__get_app_store_key_from_shotgun() + script_name, script_key = self.__get_app_store_key_from_shotgun() else: raise @@ -1146,7 +1146,7 @@ def has_remote_access(self): % self ) # connect to the app store - (sg, _) = self.__create_sg_app_store_connection() + sg, _ = self.__create_sg_app_store_connection() log.debug("...connection established: %s" % sg) except Exception as e: log.debug("...could not establish connection: %s" % e) diff --git a/python/tk-core/python/tank/descriptor/io_descriptor/dev.py b/python/tk-core/python/tank/descriptor/io_descriptor/dev.py index 73dfbd76..f5e621c6 100644 --- a/python/tk-core/python/tank/descriptor/io_descriptor/dev.py +++ b/python/tk-core/python/tank/descriptor/io_descriptor/dev.py @@ -8,9 +8,8 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -from .path import IODescriptorPath - from ... import LogManager +from .path import IODescriptorPath log = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/descriptor/io_descriptor/downloadable.py b/python/tk-core/python/tank/descriptor/io_descriptor/downloadable.py index 4d9e4f5f..a875f30d 100644 --- a/python/tk-core/python/tank/descriptor/io_descriptor/downloadable.py +++ b/python/tk-core/python/tank/descriptor/io_descriptor/downloadable.py @@ -12,11 +12,10 @@ import os import uuid -from .base import IODescriptorBase -from ..errors import TankDescriptorIOError -from ...util import filesystem - from ... import LogManager +from ...util import filesystem +from ..errors import TankDescriptorIOError +from .base import IODescriptorBase log = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/descriptor/io_descriptor/factory.py b/python/tk-core/python/tank/descriptor/io_descriptor/factory.py index 4759e031..9cb740e5 100644 --- a/python/tk-core/python/tank/descriptor/io_descriptor/factory.py +++ b/python/tk-core/python/tank/descriptor/io_descriptor/factory.py @@ -10,11 +10,10 @@ import copy +from ... import LogManager from ..errors import TankDescriptorError from .base import IODescriptorBase -from ... import LogManager - log = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/descriptor/io_descriptor/git.py b/python/tk-core/python/tank/descriptor/io_descriptor/git.py index dcaede1e..536aa61d 100644 --- a/python/tk-core/python/tank/descriptor/io_descriptor/git.py +++ b/python/tk-core/python/tank/descriptor/io_descriptor/git.py @@ -8,18 +8,16 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. import os -import uuid import shutil -import tempfile import subprocess +import tempfile +import uuid -from .downloadable import IODescriptorDownloadable from ... import LogManager -from ...util.process import subprocess_check_output, SubprocessCalledProcessError - +from ...util import filesystem, is_windows +from ...util.process import SubprocessCalledProcessError, subprocess_check_output from ..errors import TankError -from ...util import filesystem -from ...util import is_windows +from .downloadable import IODescriptorDownloadable log = LogManager.get_logger(__name__) @@ -115,7 +113,7 @@ def _clone_then_execute_git_commands( log.debug("Checking that git exists and can be executed...") try: output = _check_output(["git", "--version"]) - except: + except Exception: log.exception("Unexpected error:") raise TankGitError( "Cannot execute the 'git' command. Please make sure that git is " @@ -236,7 +234,7 @@ def get_system_name(self): and for folders on disk, e.g. 'tk-maya' """ bn = os.path.basename(self._path) - (name, ext) = os.path.splitext(bn) + name, ext = os.path.splitext(bn) return name def has_remote_access(self): diff --git a/python/tk-core/python/tank/descriptor/io_descriptor/git_branch.py b/python/tk-core/python/tank/descriptor/io_descriptor/git_branch.py index 62951553..bfb779ed 100644 --- a/python/tk-core/python/tank/descriptor/io_descriptor/git_branch.py +++ b/python/tk-core/python/tank/descriptor/io_descriptor/git_branch.py @@ -115,7 +115,7 @@ def _is_latest_commit(self, version, branch): log.debug("Checking if the version is pointing to the latest commit...") try: output = _check_output(["git", "ls-remote", self._path, branch]) - except: + except Exception: log.exception("Unexpected error:") raise TankGitError( "Cannot execute the 'git' command. Please make sure that git is " diff --git a/python/tk-core/python/tank/descriptor/io_descriptor/git_tag.py b/python/tk-core/python/tank/descriptor/io_descriptor/git_tag.py index aa1026ed..33a7d71b 100644 --- a/python/tk-core/python/tank/descriptor/io_descriptor/git_tag.py +++ b/python/tk-core/python/tank/descriptor/io_descriptor/git_tag.py @@ -7,13 +7,13 @@ # By accessing, using, copying or modifying this work you indicate your # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -import os import copy +import os import re -from .git import IODescriptorGit -from ..errors import TankDescriptorError from ... import LogManager +from ..errors import TankDescriptorError +from .git import IODescriptorGit log = LogManager.get_logger(__name__) @@ -51,9 +51,7 @@ def __init__(self, descriptor_dict, sg_connection, bundle_type): ) # call base class - super().__init__( - descriptor_dict, sg_connection, bundle_type - ) + super().__init__(descriptor_dict, sg_connection, bundle_type) # path is handled by base class - all git descriptors # have a path to a repo diff --git a/python/tk-core/python/tank/descriptor/io_descriptor/manual.py b/python/tk-core/python/tank/descriptor/io_descriptor/manual.py index ff11158b..0b86fcff 100644 --- a/python/tk-core/python/tank/descriptor/io_descriptor/manual.py +++ b/python/tk-core/python/tank/descriptor/io_descriptor/manual.py @@ -8,9 +8,10 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. import os -from .base import IODescriptorBase + from ... import LogManager from ..errors import TankDescriptorError +from .base import IODescriptorBase log = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/descriptor/io_descriptor/path.py b/python/tk-core/python/tank/descriptor/io_descriptor/path.py index 2dc603eb..502c44b3 100644 --- a/python/tk-core/python/tank/descriptor/io_descriptor/path.py +++ b/python/tk-core/python/tank/descriptor/io_descriptor/path.py @@ -10,10 +10,10 @@ import os -from .base import IODescriptorBase -from ..errors import TankDescriptorError -from ...util import ShotgunPath from ... import LogManager +from ...util import ShotgunPath +from ..errors import TankDescriptorError +from .base import IODescriptorBase log = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/descriptor/io_descriptor/shotgun_entity.py b/python/tk-core/python/tank/descriptor/io_descriptor/shotgun_entity.py index d04bd57a..62fae486 100644 --- a/python/tk-core/python/tank/descriptor/io_descriptor/shotgun_entity.py +++ b/python/tk-core/python/tank/descriptor/io_descriptor/shotgun_entity.py @@ -64,7 +64,7 @@ class IODescriptorShotgunEntity(IODescriptorDownloadable): The latest version is defined as the current record available in Shotgun. """ - (_MODE_ID_BASED, _MODE_NAME_BASED) = range(2) + _MODE_ID_BASED, _MODE_NAME_BASED = range(2) def __init__(self, descriptor_dict, sg_connection, bundle_type): """ diff --git a/python/tk-core/python/tank/flowam/__init__.py b/python/tk-core/python/tank/flowam/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/python/tk-core/python/tank/flowam/config.json b/python/tk-core/python/tank/flowam/config.json new file mode 100644 index 00000000..16d3ff4b --- /dev/null +++ b/python/tk-core/python/tank/flowam/config.json @@ -0,0 +1,188 @@ +{ + "name": "demo_pipeline", + "version": "1.0.2", + "description": "Flow Toolkit pipeline schema definitions", + "schemas": [ + { + "name": "type.container", + "version": "1.0.0", + "display_name": "Container", + "kind": "type", + "description": "Basic container representing a work unit.", + "inherits": [], + "properties": [] + }, + { + "name": "type.container.asset", + "version": "1.0.0", + "display_name": "Asset Build", + "kind": "type", + "description": "Asset type container.", + "inherits": [ + "$ref:type.container" + ], + "properties": [] + }, + { + "name": "type.container.shot", + "version": "1.0.0", + "display_name": "Shot", + "kind": "type", + "description": "Shot type container.", + "inherits": [ + "$ref:type.container" + ], + "properties": [] + }, + { + "name": "type.pipelineStep", + "version": "1.0.0", + "display_name": "Pipeline Step", + "kind": "type", + "description": "Base type for a step in a production pipeline.", + "inherits": [], + "properties": [] + }, + { + "name": "type.workfile", + "version": "1.0.0", + "display_name": "Workfile", + "kind": "type", + "description": "File-based work unit.", + "inherits": [], + "properties": [] + }, + { + "name": "type.workfile.generic", + "version": "1.0.0", + "display_name": "Generic Workfile", + "kind": "type", + "description": "Generic workfile which can contain arbitrary file types.", + "inherits": [ + "$ref:type.workfile" + ], + "properties": [] + }, + { + "name": "type.workfile.maya", + "version": "1.0.0", + "display_name": "Maya Workfile", + "kind": "type", + "description": "Maya native workfile.", + "inherits": [ + "$ref:type.workfile" + ], + "properties": [] + }, + { + "name": "type.workfile.hou", + "version": "1.0.0", + "display_name": "Houdini Workfile", + "kind": "type", + "description": "Houdini native workfile.", + "inherits": [ + "$ref:type.workfile" + ], + "properties": [] + }, + { + "name": "type.workfile.nuke", + "version": "1.0.0", + "display_name": "Nuke Workfile", + "kind": "type", + "description": "Nuke script workfile.", + "inherits": [ + "$ref:type.workfile" + ], + "properties": [] + }, + { + "name": "type.workfile.usd", + "version": "1.0.0", + "display_name": "USD Workfile", + "kind": "type", + "description": "USD native workfile.", + "inherits": [ + "$ref:type.workfile" + ], + "properties": [] + }, + { + "name": "type.derivative", + "version": "1.0.0", + "display_name": "Derivative", + "kind": "type", + "description": "Derivative output from a workfile, also referred to as a work product.", + "inherits": [], + "properties": [] + }, + { + "name": "type.derivative.maya", + "version": "1.0.0", + "display_name": "Maya Derivative", + "kind": "type", + "description": "Maya native type derivative work product.", + "inherits": [ + "$ref:type.derivative" + ], + "properties": [] + }, + { + "name": "type.derivative.usd", + "version": "1.0.0", + "display_name": "USD Derivative", + "kind": "type", + "description": "Universal Scene Description (USD) derivative work product.", + "inherits": [ + "$ref:type.derivative" + ], + "properties": [] + }, + { + "name": "type.template", + "version": "1.0.0", + "display_name": "Template", + "kind": "type", + "description": "Indicates an asset that is intended to be used as a template for building other assets.", + "inherits": [], + "properties": [] + }, + { + "name": "type.derivative.abc", + "version": "1.0.0", + "display_name": "Alembic Derivative", + "kind": "type", + "description": "Alembic derivative work product.", + "inherits": [ + "$ref:type.derivative" + ], + "properties": [] + }, + { + "name": "type.fileSequence", + "version": "1.0.0", + "display_name": "File Sequence", + "kind": "type", + "description": "Asset contains a file sequence.", + "inherits": [], + "properties": [ + { + "name": "frameStart", + "data_type": "Int32" + }, + { + "name": "frameEnd", + "data_type": "Int32" + }, + { + "name": "frameSet", + "data_type": "String" + }, + { + "name": "fileFormat", + "data_type": "String" + } + ] + } + ] +} diff --git a/python/tk-core/python/tank/flowam/constants.py b/python/tk-core/python/tank/flowam/constants.py new file mode 100644 index 00000000..08352768 --- /dev/null +++ b/python/tk-core/python/tank/flowam/constants.py @@ -0,0 +1,34 @@ +# Copyright (c) 2026 Shotgun Software Inc. +# +# CONFIDENTIAL AND PROPRIETARY +# +# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit +# Source Code License included in this distribution package. See LICENSE. +# By accessing, using, copying or modifying this work you indicate your +# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights +# not expressly granted therein are reserved by Shotgun Software Inc. + +"""Constants for Flow Integration.""" + +import pathlib + +# Flow Settings +# ------------- +# These are settings names that can be configured within a flow.yml file. +# These attributes are used to prepare a Flow Integration SDK session. + +FLOW_AUTH_APP_ID = "auth_application_id" +FLOW_AUTH_BASE_URL = "auth_base_url" +FLOW_AUTH_CALLBACK_URL = "auth_callback_url" +FLOW_ENDPOINT = "endpoint" +FLOW_WEB_URL = "web_url" +FLOW_SANDBOX_ROOT = "sandbox_root" +FLOW_STORAGE_ROOT = "storage_root" + +# Location of config for specifying custom schemas used +# in the toolkit Flow integration +FLOW_SCHEMA_CONFIG_PATH = str(pathlib.Path(__file__).resolve().parent) + "/config.json" + +# SG Project field that stores the current schema config version, +# used to skip schema provisioning when the version already matches. +FLOW_SCHEMA_VERSION_FIELD = "sg_flow_schema_config_version" diff --git a/python/tk-core/python/tank/flowam/create.py b/python/tk-core/python/tank/flowam/create.py new file mode 100644 index 00000000..125989e8 --- /dev/null +++ b/python/tk-core/python/tank/flowam/create.py @@ -0,0 +1,250 @@ +# Copyright (c) 2026 Shotgun Software Inc. +# +# CONFIDENTIAL AND PROPRIETARY +# +# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit +# Source Code License included in this distribution package. See LICENSE. +# By accessing, using, copying or modifying this work you indicate your +# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights +# not expressly granted therein are reserved by Shotgun Software Inc. + +from __future__ import annotations # needed for python 3.9 support + +import re +from enum import Enum + +from tank_vendor.flow_integration_sdk.exceptions import CreateAssetError, FlowError +from tank_vendor.flow_integration_sdk.globals import FOLDER_TYPE_ID +from tank_vendor.flow_integration_sdk.objects import FlowAsset, FlowProject +from tank_vendor.flow_integration_sdk.publish import ( + TypeComponentSpec, + publish_new_asset, +) +from tank_vendor.flow_integration_sdk.schema import get_schema_id +from tank_vendor.flow_integration_sdk.utils import get_logger, trace + +from .utils import BaseInputs + +# Folder names +ASSET_FOLDER = "Assets" +SHOT_FOLDER = "Shots" +GENERIC_FOLDER = "Generic" +TEMPLATE_FOLDER = "Templates" + +# SG entity types +SHOT_TYPE = "Shot" +ASSET_TYPE = "Asset" + +# Custom schema types +ASSET_CONTAINER_TYPE = "type.container.asset" +CONTAINER_TYPE = "type.container" +DERIVATIVE_TYPE = "type.derivative" +GENERIC_WORKFILE_TYPE = "type.workfile.generic" +PIPELINE_STEP_TYPE = "type.pipelineStep" +SHOT_CONTAINER_TYPE = "type.container.shot" +TEMPLATE_TYPE = "type.template" +WORKFILE_TYPE = "type.workfile" + + +class CreateMode(Enum): + """Enum of modes for creating a new asset.""" + + NEW = "new" #: Create a DCC asset from a new scene as the source. + CURRENT = "current" #: Create a DCC asset from the current scene as the source. + TEMPLATE = "template" #: Create a DCC asset from template scene as the source. + GENERIC = "generic" #: Create a generic asset from a specified source file. + + +@trace +def create_asset_hierarchy(inputs: BaseInputs) -> FlowAsset: + """Ensure the folder hierarchy above a new generic workfile exists. + + Returns the immediate parent under which the workfile asset should be + created. + + Args: + inputs: A ``BaseInputs`` instance (or any inputs object with + ``am_project_id``, ``sg_entity_name``, and a ``create_mode`` + compatible with ``CreateMode.GENERIC``). + + Returns: + The parent :class:`FlowAsset` for the new workfile. + """ + root_folder = get_or_create_root_folder(inputs) + + if inputs.sg_entity_name: + parent = get_or_create_workfile_parent(root_folder, inputs) + else: + parent = root_folder + + return parent + + +@trace +def get_or_create_root_folder(inputs: BaseInputs) -> FlowAsset: + """Retrieve (or create) the top-level folder for the new asset. + + Returns: + Folder :class:`FlowAsset`. + + Raises: + CreateAssetError + """ + logger = get_logger(__name__) + + am_project_id = inputs.am_project_id + sg_entity_type = inputs.sg_entity_type + + try: + project = FlowProject(am_project_id) + except FlowError as exc: + msg = f"Invalid Flow project id provided: {am_project_id}" + raise CreateAssetError(data=inputs.asdict(), details=msg) from exc + + if sg_entity_type == SHOT_TYPE: + folder = project.find_child(SHOT_TYPE) + if not folder: + logger.info(f'Creating "{SHOT_TYPE}" folder...') + raw_asset = publish_new_asset( + name=ensure_unique_name(SHOT_TYPE, project), + parent_id=project.id, + description="Folder for Shot assets.", + components=[ + TypeComponentSpec(type_id=FOLDER_TYPE_ID, name=f"Type {SHOT_TYPE}") + ], + ) + folder = FlowAsset(raw_asset) + elif sg_entity_type == ASSET_TYPE: + folder = project.find_child(ASSET_FOLDER) + if not folder: + logger.info(f'Creating "{ASSET_FOLDER}" folder...') + raw_asset = publish_new_asset( + name=ensure_unique_name(ASSET_FOLDER, project), + parent_id=project.id, + description="Folder for Asset Build assets.", + components=[ + TypeComponentSpec(type_id=FOLDER_TYPE_ID, name=f"Type {ASSET_TYPE}") + ], + ) + folder = FlowAsset(raw_asset) + elif inputs.create_mode == CreateMode.GENERIC: + folder = project.find_child(GENERIC_FOLDER) + if not folder: + logger.info(f'Creating "{GENERIC_FOLDER}" folder...') + raw_asset = publish_new_asset( + name=ensure_unique_name(GENERIC_FOLDER, project), + parent_id=project.id, + description="Folder for Generic assets.", + components=[ + TypeComponentSpec( + type_id=FOLDER_TYPE_ID, name=f"Type {GENERIC_FOLDER}" + ) + ], + ) + folder = FlowAsset(raw_asset) + else: + msg = f"Invalid entity type provided: {sg_entity_type}." + raise CreateAssetError(data=inputs.asdict(), details=msg) + + return folder + + +@trace +def get_or_create_workfile_parent( + root_folder: FlowAsset, inputs: BaseInputs +) -> FlowAsset: + """Determine (and create if necessary) the task-level folder that will be + the direct parent of the workfile asset. + + Returns: + The task-folder :class:`FlowAsset`. + """ + logger = get_logger(__name__) + + sg_entity_type = inputs.sg_entity_type + sg_entity_name = inputs.sg_entity_name + sg_pipeline_step = inputs.sg_pipeline_step + sg_task_name = inputs.sg_task_name + + container = root_folder.find_child(sg_entity_name) + if not container: + logger.info( + f'Creating container asset for "{sg_entity_name}" under ' + f'folder "{root_folder.name}"...' + ) + container_type = ( + ASSET_CONTAINER_TYPE + if sg_entity_type == ASSET_TYPE + else SHOT_CONTAINER_TYPE + ) + raw_asset = publish_new_asset( + name=ensure_unique_name(sg_entity_name, root_folder), + parent_id=root_folder.id, + components=[ + TypeComponentSpec( + type_id=get_schema_id(container_type), name=f"Type {container_type}" + ) + ], + ) + container = FlowAsset(raw_asset) + + pipeline_step = container.find_child(sg_pipeline_step) + if not pipeline_step: + logger.info(f'Creating pipeline step asset for "{sg_pipeline_step}"...') + raw_asset = publish_new_asset( + name=ensure_unique_name(sg_pipeline_step, container), + parent_id=container.id, + components=[ + TypeComponentSpec( + type_id=get_schema_id(PIPELINE_STEP_TYPE), + name=f"Type {PIPELINE_STEP_TYPE}", + ) + ], + ) + pipeline_step = FlowAsset(raw_asset) + + task_folder = pipeline_step.find_child(sg_task_name) + if not task_folder: + logger.info(f'Creating task folder asset for "{sg_task_name}"...') + raw_asset = publish_new_asset( + name=ensure_unique_name(sg_task_name, pipeline_step), + parent_id=pipeline_step.id, + description=f'Folder for task "{sg_task_name}".', + components=[ + TypeComponentSpec(type_id=FOLDER_TYPE_ID, name=f"Type {FOLDER_TYPE_ID}") + ], + ) + task_folder = FlowAsset(raw_asset) + + return task_folder + + +def ensure_unique_name(name: str, parent: FlowAsset | FlowProject) -> str: + """Return a unique sibling name under *parent*, adding a numeric suffix + if a child with the same name already exists. + + Example: siblings ``["asset 1", "asset 2 (1)"]``, input ``"asset 2"`` + → returns ``"asset 2 (2)"``. + """ + logger = get_logger(__name__) + + if parent.find_child(name): + copies = parent.find_children(f"{name} (*)") + highest_index = 0 + for c in copies: + m = re.match(rf"{re.escape(name)} \((?P\d+)\)", c.name) + if m: + try: + index = int(m.group("index")) + except ValueError: + continue + if index > highest_index: + highest_index = index + new_name = f"{name} ({highest_index + 1})" + logger.warning( + f'A child named "{name}" already exists under "{parent.name}". ' + f'Renaming to "{new_name}".' + ) + name = new_name + + return name diff --git a/python/tk-core/python/tank/flowam/host.py b/python/tk-core/python/tank/flowam/host.py new file mode 100644 index 00000000..ac09eced --- /dev/null +++ b/python/tk-core/python/tank/flowam/host.py @@ -0,0 +1,199 @@ +# - +# ***************************************************************************** +# Copyright 2026 Autodesk, Inc. All rights reserved. +# +# These coded instructions, statements, and computer programs contain +# unpublished proprietary information written by Autodesk, Inc. and are +# protected by Federal copyright law. They may not be disclosed to third +# parties or copied or duplicated in any form, in whole or in part, without +# the prior written consent of Autodesk, Inc. +# ***************************************************************************** +# + +from __future__ import annotations # needed for python 3.9 support + +from abc import ABC, abstractmethod + +from tank_vendor.flow_integration_sdk.dependency import DependencyData + + +class FlowHost(ABC): + """Abstract base class defining a required interface for DCC/engine + integration with Flow asset management in toolkit. + """ + + #: The schema name associated with workfiles created for this host + WORKFILE_TYPE = "" + #: File extensions associated with host DCC (e.g. "ma" for Maya) + #: Must have at least one value in a subclass implementation + FILE_TYPES: list[str] = [] + #: Host specific mime type mappings + #: key = file extension from FILE_TYPES, value = mime type + MIME_TYPES: dict[str, str] = {} + + def __init__(self, context): + """Base class initialization. + + Args: + context: Sgtk context object to be passed in from engine. + """ + # Store sgtk context + self.context = context + + @abstractmethod + def current_file(self) -> str: + """Return current open file path in dcc.""" + raise NotImplementedError() + + @abstractmethod + def new_scene(self, force: bool = True) -> bool: + """Open new scene in the host application. + + Args: + force: If true, force action even if there are unsaved changes. + + Returns: + True if new scene is opened, False on error or if operation is cancelled. + """ + raise NotImplementedError() + + @abstractmethod + def open_file(self, file_path: str) -> bool: + """Open the specified file in the host application. + + Args: + file_path: Absolute path to the local file to open. + + Returns: + True if file is opened, False on error or if operation is cancelled. + """ + raise NotImplementedError() + + def save_file(self, file_path: str): + """Save the current scene to the specified file path. + + This operation may not be applicable to all hosts. + + Args: + file_path: Absolute local path to save file. + """ + pass + + def export(self, file_path: str): + """Export current scene to file path specified and file type + designated by file extension. + + This operation may not be applicable to all hosts. + + Args: + file_path: Absolute local path to export file. + """ + pass + + @abstractmethod + def dialog( + self, + title: str, + msg: str, + buttons: list[str] | None = None, + default: int = 0, + cancel: int | None = None, + no_ui_option: int | None = None, + ) -> int: + """Pop up a dialog in the host application. + + Args: + title: Title of dialog window. + msg: Message to be displayed. + buttons: List of strings denoting buttons to be added to dialog. + default: Index of default button. + cancel: Index of cancel button. + no_ui_option: If host is running without a UI, + this option will automatically be returned. + If None, use default value. + + Returns: + The index of the button selected by user. + Value of -1 indicates a dismissed dialog. + """ + raise NotImplementedError() + + @abstractmethod + def file_dialog( + self, + title: str, + starting_dir: str = "", + folder_mode: bool = False, + file_type: str = "", + multi_select: bool = False, + ) -> list[str]: + """Invoke a file dialog for selecting one or more file paths. + + Args: + title: Title of dialog. + starting_dir: Starting location of dialog. + folder_mode: If True, dialog will browse folders instead of files. + file_type: File extension to filter for. + Applicable only when browsing files. + multi_select: If True, allow multiple selection of files. + Applicable only when browsing files. + + Returns: + A list of file/directory paths. + If multi_select = False, the return value will be a list of size 1. + If user cancels, list will be empty. + """ + raise NotImplementedError() + + @abstractmethod + def copy_to_clipboard(self, text: str) -> bool: + """Copy given text to clipboard of relevant application. + Default implementation copies to system clipboard. + + Args: + text: Text to be copied. + + Returns: + True on success. + """ + raise NotImplementedError() + + def get_dependency_tree(self, must_exist: bool = True) -> DependencyData: + """Return a DependencyData object which is the root of the + dependency tree for the scene. + + Args: + must_exist: Only return dependencies that can be found on disk. + """ + # Return empty root node by default + return DependencyData() + + def update_dependency( + self, + dep: DependencyData, + file_path: str, + ) -> DependencyData: + """Update an existing dependency to point to given file in current scene. + + Args: + dep: DependencyData node which identifies the dependency to be updated. + file_path: New path to set dependency to. + + Returns: + DependencyData object describing new state of dependency. + NOTE: This will be an isolated node, not including sub-dependency info. + """ + # Do nothing by default + return dep + + def env_var_marker(self, var_name: str) -> str: + """Return the environment variable marker format for this host. + + Args: + var_name: The environment variable name. + + Returns: + Environment variable marker in host-specific format. + Default implementation returns shell format: ${VAR_NAME} + """ + return "${" + var_name + "}" diff --git a/python/tk-core/python/tank/flowam/open.py b/python/tk-core/python/tank/flowam/open.py new file mode 100644 index 00000000..490332d2 --- /dev/null +++ b/python/tk-core/python/tank/flowam/open.py @@ -0,0 +1,218 @@ +# Copyright (c) 2026 Shotgun Software Inc. +# +# CONFIDENTIAL AND PROPRIETARY +# +# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit +# Source Code License included in this distribution package. See LICENSE. +# By accessing, using, copying or modifying this work you indicate your +# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights +# not expressly granted therein are reserved by Shotgun Software Inc. + +from __future__ import annotations # needed for python 3.9 support + +import os + +import sgtk +from tank import LogManager +from tank_vendor.flow_integration_sdk.exceptions import ( + DraftExistsError, + FlowError, + InvalidDraftError, +) +from tank_vendor.flow_integration_sdk.globals import SOURCE_PURPOSE +from tank_vendor.flow_integration_sdk.objects import FlowRevision, FlowVersion +from tank_vendor.flow_integration_sdk.sandbox import ( + CheckoutDraftInfo, +) +from tank_vendor.flow_integration_sdk.sandbox import ( + checkout_revision as checkout_revision_in_sandbox, +) +from tank_vendor.flow_integration_sdk.sandbox import ( + get_draft_id, + is_local_draft, + read_draft_info, +) +from tank_vendor.flow_integration_sdk.utils import trace + +logger = LogManager.get_logger(__name__) + + +@trace +def checkout_revision( + revision_id: str, force: bool = False +) -> CheckoutDraftInfo | None: + """Check out the given asset revision/version into sandbox. + If the version is already checked out, offer an overwrite. + If a different version of the same asset is already checkout out, offer an overwrite. + + Args: + revision_id: Id of a published AM asset revision. This can also be a version id. + force: If True, force a re-checkout even if an existing draft is found. + + Returns: + CheckoutDraftInfo object or None if operation was cancelled. + + Raises: + FlowError + """ + if FlowVersion.is_version_id(revision_id): + revision = FlowVersion(revision_id).revision + else: + revision = FlowRevision.get_revision(revision_id) + + try: + draft_info = checkout_revision_in_sandbox( + revision._revision, + component_purpose=SOURCE_PURPOSE, + force=force, + ) + except DraftExistsError: + draft_info = _handle_existing_draft(revision) + if draft_info is None: + # Operation was cancelled so exit + return None + + # Open checked out draft file + flow_host = sgtk.platform.current_engine().flow_host + if flow_host: + draft_path = draft_info.source_path + logger.info(f"Opening draft path: {draft_path}") + flow_host.open_file(draft_path) + + return draft_info + + +@trace +def _handle_existing_draft(revision: FlowRevision) -> CheckoutDraftInfo | None: + """Called during a checkout operation when an existing draft is detected + to handle the situation as safely as possible. If host class is available, + pop-up a dialog to ask the user what to do, otherwise output an informative + message and cancel the operation. + + NOTE: We are only concerned with versions here and not the granularity of + revisions. This is because we are assuming that binaries and dependencies + (i.e. components and uses relationships) cannot change between revisions + of the same version. Therefore, checking out any given revision of a version + should be sufficient for ensuring that we fetch and copy the correct binaries. + + Returns CheckoutDraftInfo object if successful, or None if operation is cancelled. + """ + draft_id = get_draft_id(revision.id) + try: + draft_info = read_draft_info(draft_id) + checkout_version = draft_info.version + checkout_revision = draft_info.revision + except InvalidDraftError: + # This indicates that the draft is corrupted + checkout_version = None + checkout_revision = None + + # If not host is available, just cancel the operation + flow_host = sgtk.platform.current_engine().flow_host + if flow_host is None: + msg = "There is an existing draft detected with checkout version: " + msg += f"{checkout_version}." + logger.error(msg) + return None + + title = "Existing draft detected" + if checkout_version is None: + # Warning to user with options to + # 0 - overwrite existing draft + # 1 - cancel + msg = "There is an existing draft which is corrupted. " + msg += "Would you like to overwrite this with a fresh checkout?" + options = ["New checkout", "Cancel"] + + action_idx = flow_host.dialog( + title=title, + msg=msg, + buttons=options, + default=1, # cancel by default + no_ui_option=1, # cancel when no dialog can be launched + ) + action = options[action_idx] + + elif checkout_version == revision.version_number: + # Warning to user with options to + # 0 - overwrite existing draft + # 1 - proceed with existing draft + msg = "This version is already checked out in sandbox. " + msg += "Would you like to overwrite this with a fresh checkout?" + options = ["New checkout", "Use original checkout"] + + action_idx = flow_host.dialog( + title=title, + msg=msg, + buttons=options, + default=1, # use original by default + no_ui_option=1, # use original when no dialog can be launched + ) + action = options[action_idx] + + else: + # Warning to user with options to + # 1 - overwrite existing draft + # 2 - cancel + msg = f"An existing checkout already exists of version {checkout_version} " + msg += f"(r{checkout_revision}) of this asset. Would you like to overwrite " + msg += f"this with a checkout of version {revision.version_number} " + msg += f"(r{revision.revision_number})?" + options = ["New checkout", "Cancel"] + + action_idx = flow_host.dialog( + title=title, + msg=msg, + buttons=options, + default=1, # cancel by default + no_ui_option=1, # cancel when no dialog can be launched + ) + action = options[action_idx] + + if action == "New checkout": + # Force a new checkout + return checkout_revision_in_sandbox( + revision._revision, + component_purpose=SOURCE_PURPOSE, + force=True, + ) + elif action == "Use original checkout": + msg = f"Using original draft of version {checkout_version} " + msg += f"(r{checkout_revision})." + logger.info(msg) + return draft_info + else: + logger.warning("Checkout operation cancelled.") + return None + + +@trace +def open_draft(draft_id: str): + """Open draft source file for editing if draft is local. + + Args: + draft_id: Unique id that identifies a draft location in local sandbox. + + Raises: + FlowError + InvalidDraftError + """ + flow_host = sgtk.platform.current_engine().flow_host + if not flow_host: + raise FlowError( + "Opening a draft must be done in an engine which supports Flow integration." + ) + + if not is_local_draft(draft_id): + msg = f'The draft "{draft_id}" is not in local sandbox.' + raise InvalidDraftError(draft_id=draft_id, details=msg) + + draft_info = read_draft_info(draft_id) + draft_path = draft_info.source_path + if not os.path.exists(draft_path): + msg = f'Corrupted draft folder. The file "{draft_path}" does not exist.' + raise InvalidDraftError(draft_id=draft_id, details=msg) + + # Open file + logger.info(f"Opening file: {draft_path}") + flow_host.open_file(draft_path) diff --git a/python/tk-core/python/tank/flowam/utils.py b/python/tk-core/python/tank/flowam/utils.py new file mode 100644 index 00000000..38092202 --- /dev/null +++ b/python/tk-core/python/tank/flowam/utils.py @@ -0,0 +1,304 @@ +# Copyright (c) 2026 Shotgun Software Inc. +# +# CONFIDENTIAL AND PROPRIETARY +# +# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit +# Source Code License included in this distribution package. See LICENSE. +# By accessing, using, copying or modifying this work you indicate your +# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights +# not expressly granted therein are reserved by Shotgun Software Inc. + +"""Shared utilities for Flow Integration.""" + +from __future__ import annotations # needed for python 3.9 support + +import glob +import os +import re +import webbrowser +from dataclasses import asdict, dataclass +from typing import TYPE_CHECKING + +import fileseq +from tank import LogManager +from tank.authentication import flow_auth +from tank.pipelineconfig import PipelineConfiguration +from tank.util import yaml_cache + +if TYPE_CHECKING: + from tank.context import Context + +from tank_vendor.flow_integration_sdk import globals, schema, storage +from tank_vendor.flow_integration_sdk.exceptions import FlowError +from tank_vendor.flow_integration_sdk.objects import FlowProject +from tank_vendor.flow_integration_sdk.publish import ( + CommentComponentSpec, + ComponentSpec, + FileSeqComponentSpec, + SourceComponentSpec, + ThumbnailComponentSpec, + TypeComponentSpec, +) +from tank_vendor.flow_integration_sdk.schema_builder import create_pipeline_schemas +from tank_vendor.flow_integration_sdk.utils import trace + +from .constants import FLOW_SCHEMA_CONFIG_PATH, FLOW_SCHEMA_VERSION_FIELD + +logger = LogManager.get_logger(__name__) + + +@dataclass +class BaseInputs: + def format_str(self, tab: int = 0): + s = "" + for prop, value in self.__dict__.items(): + s += "\t" * tab + f"{prop} = {value}\n" + return s.rstrip() + + def validate(self): + """Do validation of input values.""" + pass + + def asdict(self): + return asdict(self) + + def log_intro(self, intro_message: str): + """Log an intro message along with the values of + input object. + """ + + msg = f""" + --------------------------------------- + {intro_message} with inputs: +{self.format_str(tab=3)} + --------------------------------------""" + logger.info(msg) + + +def get_config_flow_settings(pipeline_config: PipelineConfiguration) -> dict: + """Retrieve Flow settings from config. + + Args: + pipeline_config: PipelineConfiguration object. + This is used to determine the location from which to + search for the "flow.yml" config file that contains Flow settings. + Config file will be searched in two locations: + * {CONFIG ROOT}/config/core/flow.yml + * {CONFIG ROOT}/core/flow.yml + + Returns: + Dictionary result of reading the "flow.yml" config file if found. + Otherwise, return empty dictionary. + """ + config_root = pipeline_config.get_config_location() + if not config_root: + logger.error("Pipeline config has no config location.") + return {} + + # Config path if reading from cached config + override_path_cache = os.path.join( + config_root, + "config", + "core", + "flow.yml", + ) + # Config path if reading form dev descriptor + override_path_dev = os.path.join( + config_root, + "core", + "flow.yml", + ) + + logger.info(f"Checking for Flow config: {override_path_dev}") + if os.path.exists(override_path_dev): + return yaml_cache.g_yaml_cache.get(override_path_dev) or {} + else: + logger.info(f"Checking for Flow config: {override_path_cache}") + if os.path.exists(override_path_cache): + return yaml_cache.g_yaml_cache.get(override_path_cache) or {} + else: + logger.error("Flow config could not be found!") + return {} + + +def init_flow( + pipeline_config: PipelineConfiguration, + sg_connection, + context: Context, +): + """Do session set up + schema provisioning for the Flow Integration SDK. + + Args: + pipeline_config: PipelineConfiguration object, used to read flow + settings from config. + sg_connection: Shotgun connection, used to write the schema config + version back to SG. + context: The current Toolkit context, used to read the flow project id, + schema version, and SG project id. + + Raises: + RuntimeError + """ + logger.info("Doing Flow Integration SDK initialization...") + flow_project_id = context.flow_project_id + sg_project_id = context.project["id"] + logger.info(f"Flow AM Project ID: {flow_project_id}") + + # Read flow settings from config + settings = get_config_flow_settings(pipeline_config) + flow_endpoint = settings.get("endpoint") + flow_web_url = settings.get("web_url") + flow_sandbox_root = settings.get("sandbox_root") + flow_storage_root = settings.get("storage_root") + + # Configure logger + globals.set_logger_callback(LogManager().get_logger) + # Initialize MEDM GQL client + globals.init_client(flow_endpoint, flow_auth.FlowAuthenticationHandler()) + # Store web url + globals.set_webapp_url(flow_web_url) + # Set session collection + try: + project = FlowProject(flow_project_id) + except FlowError as exc: + msg = f"Could not complete Flow initialization: {exc}" + raise RuntimeError(msg) from exc + globals.init_session_collection( + project.collection_id, project.organization_id, project.group_id + ) + # Cache custom schema config + try: + schema.cache_schema_config(FLOW_SCHEMA_CONFIG_PATH) + except (RuntimeError, ValueError) as exc: + msg = "Could not complete Flow initialization: {exc}" + raise RuntimeError(msg) from exc + # Configure storage roots + storage.set_sandbox_root(flow_sandbox_root, create_dir=True) + storage.set_storage_root(flow_storage_root, create_dir=True) + + # Provision pipeline schemas for CPA collections only + session_collection = globals.get_session_collection() + if not session_collection.is_cpa_collection(): + logger.info("Skipping pipeline schema provisioning - not a CPA collection.") + else: + current_version = schema.get_schema_config_version(FLOW_SCHEMA_CONFIG_PATH) + if context.flow_schema_version == current_version: + logger.info( + f"Schema config version {current_version} matches. " + "Skipping schema provisioning." + ) + else: + try: + create_pipeline_schemas( + project_id=flow_project_id, + config_path=FLOW_SCHEMA_CONFIG_PATH, + ) + sg_connection.update( + "Project", + sg_project_id, + {FLOW_SCHEMA_VERSION_FIELD: current_version}, + ) + except ( + FlowError, + RuntimeError, + ValueError, + KeyError, + FileNotFoundError, + ) as exc: + msg = f"Could not complete Flow schema provisioning: {exc}" + raise RuntimeError(msg) from exc + + logger.info("Initialization complete!") + + +@trace +def create_components_for_publish( + source_paths: list[str] | None = None, + thumbnail_path: str = "", + comment: str = "", + type_ids: list[str] | None = None, +) -> list[ComponentSpec]: + """Generate the components relevant to publish a new revision. + + Args: + source_paths: Optional list of local paths to the source files. + thumbnail_path: Optional path to thumbnail file. + comment: Generate a comment component with given comment string. + Should only be included if the publish method does not + explicitly accept a `comment` parameter. + type_ids: A list of type ids to be converted into type components. + This is only relevant if publishing a new asset direct to remote + (i.e. not going through sandbox). + """ + # Source component contains the source file + components: list[ComponentSpec] = [] + if source_paths: + source_comp = SourceComponentSpec(*source_paths) + components.append(source_comp) + # Thumbnail component contains the thumbnail file + if thumbnail_path: + thumbnail_comp = ThumbnailComponentSpec(thumbnail_path) + components.append(thumbnail_comp) + # Need to add a special file sequence type component if there are + # multiple source files + if source_paths and len(source_paths) > 1: + sequences = fileseq.findSequencesInList(source_paths) + if len(sequences) > 1: + msg = "Ambiguous file sequence provided for publish." + msg += " Multiple file sequences have been detected in the" + msg += " source path list. Please input files with common" + msg += " base name with frame padding (e.g. .####.)." + raise FlowError(msg) + # Determine file format + pad_len = sequences[0].getPaddingNum(sequences[0].padding()) + frame_expr = f"%0{pad_len}d" + file_format = os.path.basename(sequences[0].frame(frame_expr)) + components.append( + FileSeqComponentSpec( + type_id=schema.get_schema_id(globals.FILE_SEQ_TYPE), + frame_start=sequences[0].start(), + frame_end=sequences[0].end(), + frame_set=str(sequences[0].frameSet()), + file_format=file_format, + name=globals.FILE_SEQ_COMP, + ) + ) + # Add comment if provided + if comment: + comment_comp = CommentComponentSpec(comment=comment) + components.append(comment_comp) + # Add type components if specified + type_ids = [] if type_ids is None else type_ids + for i, type_id in enumerate(type_ids): + # NOTE: component names must be unique! + type_comp = TypeComponentSpec(type_id=type_id, name=f"Type {i}") + components.append(type_comp) + return components + + +def open_explorer(dir_path: str): + """Open a file explorer to the directory path provided. + + Args: + dir_path: Full path to local directory. + """ + return webbrowser.open(f"file:///{dir_path}") + + +def search_file_expression(file_path: str): + """Search file system for files matching expression that + uses frame padding of the format "%0Nd" where N is an integer + denoting number of digits in frame padding. + + If path does not contain a frame padding, search for the path as is. + """ + expr = r"(?P.+\.)%0(?P\d)d(?P\..+)" + m = re.match(expr, file_path) + if m: + frame_pad = int(m.group("frame_pad")) + file_expr = m.group("base_path") + frame_pad * "[0-9]" + m.group("ext") + file_list = glob.glob(file_expr) + return file_list + elif os.path.exists(file_path): + return [file_path] + return [] diff --git a/python/tk-core/python/tank/folder/__init__.py b/python/tk-core/python/tank/folder/__init__.py index 26d2fe81..63352810 100644 --- a/python/tk-core/python/tank/folder/__init__.py +++ b/python/tk-core/python/tank/folder/__init__.py @@ -13,5 +13,5 @@ """ -from .operations import process_filesystem_structure, synchronize_folders from .configuration import read_ignore_files +from .operations import process_filesystem_structure, synchronize_folders diff --git a/python/tk-core/python/tank/folder/configuration.py b/python/tk-core/python/tank/folder/configuration.py index dfc9d369..f79811c8 100644 --- a/python/tk-core/python/tank/folder/configuration.py +++ b/python/tk-core/python/tank/folder/configuration.py @@ -13,22 +13,21 @@ """ -import os import fnmatch +import os +from ..errors import TankError, TankUnreadableFileError +from ..util import yaml_cache from .folder_types import ( - Static, - ListField, Entity, + ListField, Project, - UserWorkspace, ShotgunStep, ShotgunTask, + Static, + UserWorkspace, ) -from ..errors import TankError, TankUnreadableFileError -from ..util import yaml_cache - def read_ignore_files(schema_config_path): """ @@ -336,7 +335,7 @@ def _process_config_r(self, parent_node, parent_path): self._process_config_r(cur_node, full_path) # process symlinks - for (path, target, metadata) in self._get_symlinks_in_folder(parent_path): + for path, target, metadata in self._get_symlinks_in_folder(parent_path): parent_node.add_symlink(path, target, metadata) # now process all files and add them to the parent_node token diff --git a/python/tk-core/python/tank/folder/folder_io.py b/python/tk-core/python/tank/folder/folder_io.py index 96381d82..8b7c1bf1 100644 --- a/python/tk-core/python/tank/folder/folder_io.py +++ b/python/tk-core/python/tank/folder/folder_io.py @@ -16,10 +16,9 @@ """ -from . import constants from ..errors import TankError - from ..path_cache import PathCache +from . import constants class FolderIOReceiver(object): diff --git a/python/tk-core/python/tank/folder/folder_types/__init__.py b/python/tk-core/python/tank/folder/folder_types/__init__.py index 7b4124ec..27d05683 100644 --- a/python/tk-core/python/tank/folder/folder_types/__init__.py +++ b/python/tk-core/python/tank/folder/folder_types/__init__.py @@ -13,11 +13,11 @@ folder types that can be created. """ +from .entity import Entity from .errors import EntityLinkTypeMismatch -from .static import Static from .listfield import ListField -from .entity import Entity from .project import Project -from .user import UserWorkspace +from .static import Static from .step import ShotgunStep from .task import ShotgunTask +from .user import UserWorkspace diff --git a/python/tk-core/python/tank/folder/folder_types/base.py b/python/tk-core/python/tank/folder/folder_types/base.py index ac84ca82..ca87ba25 100644 --- a/python/tk-core/python/tank/folder/folder_types/base.py +++ b/python/tk-core/python/tank/folder/folder_types/base.py @@ -8,8 +8,8 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -import os import copy +import os from .expression_tokens import SymlinkToken @@ -174,9 +174,9 @@ def create_folders( # before recursing down our specific recursion path, make sure all static content # has been created at this level in the folder structure - static_children = [ch for ch in self._children if ch.is_dynamic() == False] + static_children = [ch for ch in self._children if ch.is_dynamic() is False] - for (created_folder, sg_data_dict) in created_data: + for created_folder, sg_data_dict in created_data: # first process the static folders for cp in static_children: @@ -208,7 +208,7 @@ def create_folders( # no explicit list! instead process all children. # run the folder creation for all new folders created and for all # configuration children - for (created_folder, sg_data_dict) in created_data: + for created_folder, sg_data_dict in created_data: for cp in self._children: cp.create_folders( io_receiver, @@ -255,7 +255,7 @@ def _should_item_be_processed(self, engine_str, is_primary): dc_value = self._config_metadata.get("defer_creation") # if defer_creation config param not specified or None means we # can always go ahead with folder creation!! - if dc_value is None or dc_value == False: + if dc_value is None or dc_value is False: # deferred value not specified means proceed with creation! return True @@ -266,7 +266,7 @@ def _should_item_be_processed(self, engine_str, is_primary): return False # now handle all cases where we have an engine_str and some sort of deferred behaviour. - if dc_value == True: + if dc_value is True: # defer create for all engine_strs! return True diff --git a/python/tk-core/python/tank/folder/folder_types/entity.py b/python/tk-core/python/tank/folder/folder_types/entity.py index cd0a5b4b..97fb7735 100644 --- a/python/tk-core/python/tank/folder/folder_types/entity.py +++ b/python/tk-core/python/tank/folder/folder_types/entity.py @@ -8,16 +8,15 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -import os import copy +import os from ...errors import TankError from ...util import shotgun_entity - -from .errors import EntityLinkTypeMismatch from .base import Folder +from .errors import EntityLinkTypeMismatch from .expression_tokens import FilterExpressionToken -from .util import translate_filter_tokens, resolve_shotgun_filters +from .util import resolve_shotgun_filters, translate_filter_tokens class Entity(Folder): @@ -117,7 +116,7 @@ def _should_item_be_processed(self, engine_str, is_primary): """ # check our special condition - is this node set to be auto-created with its parent node? # note that primary nodes are always created with their parent nodes! - if is_primary == False and self._create_with_parent == False: + if is_primary is False and self._create_with_parent is False: return False # base class implementation diff --git a/python/tk-core/python/tank/folder/folder_types/expression_tokens.py b/python/tk-core/python/tank/folder/folder_types/expression_tokens.py index 1a3d1a3e..a7d7ef2e 100644 --- a/python/tk-core/python/tank/folder/folder_types/expression_tokens.py +++ b/python/tk-core/python/tank/folder/folder_types/expression_tokens.py @@ -59,7 +59,7 @@ def resolve_token(self, folder_obj, sg_data): # - listfield tokens contain the value # - sg entity values contain the value in a compute_name key name_value = None - for (field_name, field_value) in sg_data.items(): + for field_name, field_value in sg_data.items(): if token == field_name: if isinstance(field_value, dict): diff --git a/python/tk-core/python/tank/folder/folder_types/listfield.py b/python/tk-core/python/tank/folder/folder_types/listfield.py index 57ccf0a0..62647253 100644 --- a/python/tk-core/python/tank/folder/folder_types/listfield.py +++ b/python/tk-core/python/tank/folder/folder_types/listfield.py @@ -8,12 +8,11 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -import os import copy +import os from ...errors import TankError from ...util import shotgun_entity - from .base import Folder from .expression_tokens import FilterExpressionToken @@ -106,7 +105,7 @@ def _should_item_be_processed(self, engine_str, is_primary): # list fields are only created when they are on the primary path, # e.g. we don't recurse down to create asset types when shots are created, # but only when assets are created. - if is_primary == False and self._create_with_parent == False: + if is_primary is False and self._create_with_parent is False: return False # base class implementation @@ -172,7 +171,7 @@ def _create_folders_impl(self, io_receiver, parent_path, sg_data): chunks = self._field_name.split(".") entity_type = chunks[1] field_name = chunks[2] - except: + except Exception: msg = ( "Folder creation error: Cannot resolve the field expression %s." % self._field_name @@ -190,7 +189,9 @@ def _create_folders_impl(self, io_receiver, parent_path, sg_data): # validate that the data type is of type list field_type = resp[field_name]["data_type"]["value"] except Exception as e: - msg = "Folder creation error: Cannot retrieve values for PTR list field " + msg = ( + "Folder creation error: Cannot retrieve values for PTR list field " + ) msg += "%s.%s. Error reported: %s" % (entity_type, field_name, e) raise TankError(msg) diff --git a/python/tk-core/python/tank/folder/folder_types/project.py b/python/tk-core/python/tank/folder/folder_types/project.py index bb472a0a..9bbb6b51 100644 --- a/python/tk-core/python/tank/folder/folder_types/project.py +++ b/python/tk-core/python/tank/folder/folder_types/project.py @@ -8,10 +8,10 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -from ...errors import TankError -from .entity import Entity from ... import constants +from ...errors import TankError from ...log import LogManager +from .entity import Entity log = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/folder/folder_types/static.py b/python/tk-core/python/tank/folder/folder_types/static.py index 41d85157..79c64dd2 100644 --- a/python/tk-core/python/tank/folder/folder_types/static.py +++ b/python/tk-core/python/tank/folder/folder_types/static.py @@ -11,10 +11,9 @@ import os from ...errors import TankError - from .base import Folder from .entity import Entity -from .util import translate_filter_tokens, resolve_shotgun_filters +from .util import resolve_shotgun_filters, translate_filter_tokens class Static(Folder): @@ -136,7 +135,7 @@ def _should_item_be_processed(self, engine_str, is_primary): """ # check our special condition - is this node set to be auto-created with its parent node? # note that primary nodes are always created with their parent nodes! - if is_primary == False and self._create_with_parent == False: + if is_primary is False and self._create_with_parent is False: return False # base class implementation diff --git a/python/tk-core/python/tank/folder/folder_types/step.py b/python/tk-core/python/tank/folder/folder_types/step.py index f22f6dbf..733dc206 100644 --- a/python/tk-core/python/tank/folder/folder_types/step.py +++ b/python/tk-core/python/tank/folder/folder_types/step.py @@ -11,10 +11,9 @@ import os from ...errors import TankError - from .entity import Entity +from .expression_tokens import CurrentStepExpressionToken, FilterExpressionToken from .util import translate_filter_tokens -from .expression_tokens import FilterExpressionToken, CurrentStepExpressionToken class ShotgunStep(Entity): @@ -148,7 +147,7 @@ def __init__( # shot, we want all the steps to be created at the same time. # however, if we have create_with_parent set to False, we only want to create # this node if we are creating folders for a task. - if create_with_parent != True: + if create_with_parent is False: # do not auto-create with parent - only create when a task has been specified. # create an expression object to represent the current step. # we pass in the field which is the connection between the task and the step field diff --git a/python/tk-core/python/tank/folder/folder_types/task.py b/python/tk-core/python/tank/folder/folder_types/task.py index c4f6daaf..1840c8ec 100644 --- a/python/tk-core/python/tank/folder/folder_types/task.py +++ b/python/tk-core/python/tank/folder/folder_types/task.py @@ -11,11 +11,10 @@ import os from ...errors import TankError - from .entity import Entity -from .util import translate_filter_tokens -from .expression_tokens import FilterExpressionToken, CurrentTaskExpressionToken +from .expression_tokens import CurrentTaskExpressionToken, FilterExpressionToken from .step import ShotgunStep +from .util import translate_filter_tokens class ShotgunTask(Entity): @@ -160,7 +159,7 @@ def __init__( # shot, we want all the tasks to be created at the same time. # however, if we have create_with_client set to False, we only want to create # this node if we are creating folders for a task. - if create_with_parent != True: + if create_with_parent is False: # do not auto-create with parent - only create when a task has been specified. # create an expression object to represent the current step current_task_id_token = CurrentTaskExpressionToken() diff --git a/python/tk-core/python/tank/folder/folder_types/user.py b/python/tk-core/python/tank/folder/folder_types/user.py index cdd27589..e4c8f192 100644 --- a/python/tk-core/python/tank/folder/folder_types/user.py +++ b/python/tk-core/python/tank/folder/folder_types/user.py @@ -8,9 +8,8 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -from ...util import login from ...errors import TankError - +from ...util import login from .entity import Entity from .util import translate_filter_tokens diff --git a/python/tk-core/python/tank/folder/folder_types/util.py b/python/tk-core/python/tank/folder/folder_types/util.py index 8e435665..f7873d70 100644 --- a/python/tk-core/python/tank/folder/folder_types/util.py +++ b/python/tk-core/python/tank/folder/folder_types/util.py @@ -15,11 +15,10 @@ import copy from ...errors import TankError - from .expression_tokens import ( - FilterExpressionToken, CurrentStepExpressionToken, CurrentTaskExpressionToken, + FilterExpressionToken, ) diff --git a/python/tk-core/python/tank/folder/operations.py b/python/tk-core/python/tank/folder/operations.py index 506e2a2c..dfa29cae 100644 --- a/python/tk-core/python/tank/folder/operations.py +++ b/python/tk-core/python/tank/folder/operations.py @@ -13,10 +13,10 @@ """ +from ..errors import TankError from .configuration import FolderConfiguration from .folder_io import FolderIOReceiver from .folder_types import EntityLinkTypeMismatch -from ..errors import TankError def create_single_folder_item( diff --git a/python/tk-core/python/tank/hook.py b/python/tk-core/python/tank/hook.py index 12b2502e..76eb3807 100644 --- a/python/tk-core/python/tank/hook.py +++ b/python/tk-core/python/tank/hook.py @@ -11,18 +11,20 @@ """ Defines the base class for all Tank Hooks. """ + +import inspect +import logging import os import sys -import logging -import inspect import threading -from .util.loader import load_plugin + from . import LogManager from .errors import ( TankError, TankFileDoesNotExistError, TankHookMethodDoesNotExistError, ) +from .util.loader import load_plugin log = LogManager.get_logger(__name__) @@ -447,7 +449,7 @@ def some_method(self): try: engine = self.__parent.engine - except: + except Exception: raise TankError( "Cannot load framework %s for %r - it does not have a " "valid engine property!" % (framework_instance_name, self.__parent) diff --git a/python/tk-core/python/tank/log.py b/python/tk-core/python/tank/log.py index 012a5962..87f5363a 100644 --- a/python/tk-core/python/tank/log.py +++ b/python/tk-core/python/tank/log.py @@ -220,15 +220,14 @@ def my_method(): For more information, see https://docs.python.org/2/library/logging.handlers.html#module-logging.handlers """ - import logging -from logging.handlers import RotatingFileHandler import os -import sys import time -import weakref import uuid +import weakref from functools import wraps +from logging.handlers import RotatingFileHandler + from . import constants @@ -303,7 +302,7 @@ def doRollover(self): try: os.rename(self.baseFilename, temp_backup_name) - except: + except Exception: # It failed, so we'll simply append from now on. log.debug( "Cannot rotate log file '%s'. Logging will continue to this file, " @@ -318,7 +317,7 @@ def doRollover(self): # so doRollover can do its work. try: os.rename(temp_backup_name, self.baseFilename) - except: + except Exception: # For some reason we couldn't move the backup in its place. log.debug( "Unexpected issue while rotating log file '%s'. Logging will continue to this file, " @@ -338,7 +337,7 @@ def doRollover(self): # disable rollover and append to the current log. try: RotatingFileHandler.doRollover(self) - except: + except Exception: # Something probably failed trying to rollover the backups, # since the code above proved that in theory the main log file # should be renamable. In any case, we didn't succeed in renaming, @@ -595,7 +594,7 @@ def _get_global_debug(self): @property def log_file(self): - """ Full path to the current log file or None if logging is not active. """ + """Full path to the current log file or None if logging is not active.""" return self._std_file_handler_log_file @property @@ -832,6 +831,8 @@ def initialize_base_file_handler_from_path(self, log_file): # this should not be changed, but any filtering # should happen via log handlers sgtk_root_logger.setLevel(logging.DEBUG) + + # # create a 'nop' log handler to be attached. # this is to avoid warnings being reported that diff --git a/python/tk-core/python/tank/path_cache.py b/python/tk-core/python/tank/path_cache.py index 600893c1..70264edf 100644 --- a/python/tk-core/python/tank/path_cache.py +++ b/python/tk-core/python/tank/path_cache.py @@ -15,16 +15,15 @@ """ import collections -import sqlite3 -import sys -import os import itertools import json +import os +import sqlite3 +import sys -from .platform.engine import show_global_busy, clear_global_busy -from . import constants +from . import LogManager, constants from .errors import TankError -from . import LogManager +from .platform.engine import clear_global_busy, show_global_busy from .util.login import get_current_user # Shotgun field definitions to store the path cache data @@ -115,8 +114,7 @@ def _init_db(self): # up the default page size somewhat (from 4k -> 8k) to improve # performance. See https://sqlite.org/pragma.html#pragma_page_size - c.executescript( - """ + c.executescript(""" PRAGMA page_size=8192; CREATE TABLE path_cache (entity_type text, entity_id integer, entity_name text, root text, path text, primary_entity integer); @@ -134,8 +132,7 @@ def _init_db(self): CREATE UNIQUE INDEX shotgun_status_id ON shotgun_status(path_cache_id); CREATE INDEX shotgun_status_shotgun_id ON shotgun_status(shotgun_id); - """ - ) + """) self._connection.commit() else: @@ -160,8 +157,7 @@ def _init_db(self): # check for primary entity field - this was added back in 0.12.x if "primary_entity" not in field_names: - c.executescript( - """ + c.executescript(""" ALTER TABLE path_cache ADD COLUMN primary_entity integer; UPDATE path_cache SET primary_entity=1; @@ -170,8 +166,7 @@ def _init_db(self): DROP INDEX IF EXISTS path_cache_all; CREATE UNIQUE INDEX IF NOT EXISTS path_cache_all ON path_cache(entity_type, entity_id, root, path, primary_entity); - """ - ) + """) self._connection.commit() @@ -501,7 +496,10 @@ def _upload_cache_data_to_shotgun(self, data, event_log_desc): sg_batch_data.append(req) # push to shotgun in a single xact - log.debug("Uploading %s path entries to Flow Production Tracking..." % len(sg_batch_data)) + log.debug( + "Uploading %s path entries to Flow Production Tracking..." + % len(sg_batch_data) + ) try: response = self._tk.shotgun.batch(sg_batch_data) @@ -513,14 +511,23 @@ def _upload_cache_data_to_shotgun(self, data, event_log_desc): # now create a dictionary where input path cache rowid (path_cache_row_id) # is mapped to the shotgun ids that were just created + def _normalize_path(p): + # Local cache paths use os.sep (backslashes on Windows, per + # _sanitize_path) while paths round-tripped through Shotgun's + # local_path field come back with forward slashes. normpath + # unifies separators and collapses redundant components; + # normcase lowercases on case-insensitive filesystems (Windows). + return os.path.normcase(os.path.normpath(p)) if p else p + def _rowid_from_filesystem_entity(fsl_entity): path = fsl_entity[SG_PATH_FIELD]["local_path"] + normalized_path = _normalize_path(path) for d in data: # We need to match not only the path but also the entity type when associating the FilesystemLocation # entities with the local cache's row ids, because Task folders generate two entries with the same # path, one for the Task and one for the Step. if ( - d["path"] == path + _normalize_path(d["path"]) == normalized_path and d["entity"]["type"] == fsl_entity["linked_entity_type"] ): return d["path_cache_row_id"] @@ -896,7 +903,9 @@ def _replay_folder_entities(self, cursor, max_event_log_id): - path """ - log.debug("Fetching already registered folders from Flow Production Tracking...") + log.debug( + "Fetching already registered folders from Flow Production Tracking..." + ) sg_data = self._get_filesystem_location_entities(folder_ids=None) @@ -1320,19 +1329,19 @@ def add_mappings(self, data, entity_type, entity_ids): ) # now push to shotgun - (event_log_id, sg_id_lookup) = self._upload_cache_data_to_shotgun( + event_log_id, sg_id_lookup = self._upload_cache_data_to_shotgun( data_for_sg, desc ) self._update_last_event_log_synced(c, event_log_id) # and indicate in the path cache that all these records have been pushed - for (pc_row_id, sg_id) in sg_id_lookup.items(): + for pc_row_id, sg_id in sg_id_lookup.items(): c.execute( "INSERT INTO shotgun_status(path_cache_id, shotgun_id) " "VALUES(?, ?)", (pc_row_id, sg_id), ) - except: + except Exception: # error processing shotgun. Make sure we roll back the sqlite path cache # transaction self._connection.rollback() @@ -1736,7 +1745,9 @@ def ensure_all_entries_are_in_shotgun(self): SG_BATCH_SIZE = 50 log.info("") - log.info("Step 1 - Downloading current path data from Flow Production Tracking...") + log.info( + "Step 1 - Downloading current path data from Flow Production Tracking..." + ) sg_data = self._tk.shotgun.find( SHOTGUN_ENTITY, @@ -1764,18 +1775,14 @@ def ensure_all_entries_are_in_shotgun(self): try: # get all records and check each one against shotgun. - pc_data = list( - cursor.execute( - """select pc.rowid, + pc_data = list(cursor.execute("""select pc.rowid, pc.entity_type, pc.entity_id, pc.entity_name, pc.root, pc.path, pc.primary_entity - from path_cache pc""" - ) - ) + from path_cache pc""")) finally: cursor.close() @@ -1849,11 +1856,13 @@ def ensure_all_entries_are_in_shotgun(self): ids_to_look_for[sg_record["entity"]["type"]].append(sg_record) # now query shotgun for each of the types - ids_in_shotgun = {} sg_valid_records = [] - for (et, sg_records_for_et) in ids_to_look_for.items(): + for et, sg_records_for_et in ids_to_look_for.items(): - log.info(" - Checking %s %ss in Flow Production Tracking..." % (len(sg_records_for_et), et)) + log.info( + " - Checking %s %ss in Flow Production Tracking..." + % (len(sg_records_for_et), et) + ) # get the ids from shotgun for the current et. sg_ids = [x["entity"]["id"] for x in sg_records_for_et] @@ -1889,5 +1898,6 @@ def ensure_all_entries_are_in_shotgun(self): log.info("") log.info( - "Migration complete. %s records created in Flow Production Tracking" % len(sg_valid_records) + "Migration complete. %s records created in Flow Production Tracking" + % len(sg_valid_records) ) diff --git a/python/tk-core/python/tank/pipelineconfig.py b/python/tk-core/python/tank/pipelineconfig.py index d90531a1..9656faa3 100644 --- a/python/tk-core/python/tank/pipelineconfig.py +++ b/python/tk-core/python/tank/pipelineconfig.py @@ -12,26 +12,20 @@ Encapsulates the pipeline configuration and helps navigate and resolve paths across storages, configurations etc. """ -import os + import glob +import os import pickle from tank_vendor import yaml +from . import LogManager, constants, hook, pipelineconfig_utils, template_includes +from .descriptor import Descriptor, create_descriptor, descriptor_uri_to_dict from .errors import TankError, TankUnreadableFileError -from .util.version import is_version_older -from . import constants from .platform.environment import InstalledEnvironment, WritableEnvironment -from .util import shotgun, yaml_cache -from .util import ShotgunPath -from .util import StorageRoots +from .util import ShotgunPath, StorageRoots, shotgun, yaml_cache from .util.pickle import retrieve_env_var_pickled -from . import hook -from . import pipelineconfig_utils -from . import template_includes -from . import LogManager - -from .descriptor import Descriptor, create_descriptor, descriptor_uri_to_dict +from .util.version import is_version_older log = LogManager.get_logger(__name__) @@ -664,7 +658,7 @@ def get_local_storage_for_root(self, root_name): return None # get the storage data for required roots - (mapped_roots, unmapped_roots) = self.get_local_storage_mapping() + mapped_roots, unmapped_roots = self.get_local_storage_mapping() if root_name in mapped_roots: return mapped_roots[root_name] @@ -1127,7 +1121,7 @@ def get_environments(self): env_names = [] for f in glob.glob(self.get_environment_path("*")): file_name = os.path.basename(f) - (name, _) = os.path.splitext(file_name) + name, _ = os.path.splitext(file_name) env_names.append(name) return env_names @@ -1215,7 +1209,7 @@ def execute_core_hook_internal(self, hook_name, parent, **kwargs): try: return_value = hook.execute_hook(hook_path, parent, **kwargs) - except: + except Exception: # log the full callstack to make sure that whatever the # calling code is doing, this error is logged to help # with troubleshooting and support @@ -1249,9 +1243,6 @@ def execute_core_hook_method_internal( ) hook_paths = [os.path.join(hooks_path, file_name)] - # the hook.method display name used when logging the metric - hook_method_display = "%s.%s" % (hook_name, method_name) - # now add a custom hook if that exists. hook_folder = self.get_core_hooks_location() hook_path = os.path.join(hook_folder, file_name) @@ -1262,7 +1253,7 @@ def execute_core_hook_method_internal( return_value = hook.execute_hook_method( hook_paths, parent, method_name, **kwargs ) - except: + except Exception: # log the full callstack to make sure that whatever the # calling code is doing, this error is logged to help # with troubleshooting and support diff --git a/python/tk-core/python/tank/pipelineconfig_factory.py b/python/tk-core/python/tank/pipelineconfig_factory.py index 7f61f4e7..02ed1d54 100644 --- a/python/tk-core/python/tank/pipelineconfig_factory.py +++ b/python/tk-core/python/tank/pipelineconfig_factory.py @@ -8,21 +8,14 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -import os import collections +import os import pprint - +from . import LogManager, constants, pipelineconfig_utils from .errors import TankError, TankInitError -from . import LogManager -from .util import shotgun -from .util import pickle -from .util import filesystem -from .util import ShotgunPath -from . import constants -from . import pipelineconfig_utils from .pipelineconfig import PipelineConfiguration -from .util import LocalFileStorageManager +from .util import LocalFileStorageManager, ShotgunPath, filesystem, pickle, shotgun log = LogManager.get_logger(__name__) @@ -184,7 +177,8 @@ def _from_path(path, force_reread_shotgun_cache): pc_registered_path = pipelineconfig_utils.get_config_install_location(path) log.debug( - "Resolved the official path registered in PTR to be %s." % pc_registered_path + "Resolved the official path registered in PTR to be %s." + % pc_registered_path ) if pc_registered_path is None: @@ -259,7 +253,7 @@ def _validate_and_create_pipeline_configuration(associated_pipeline_configs, sou """ # extract path data from the pipeline configuration shotgun data # this will return lists of dicts with keys ``id``, (local os) ``path`` and ``project_id`` - (all_pc_data, primary_pc_data) = _get_pipeline_configuration_data( + all_pc_data, primary_pc_data = _get_pipeline_configuration_data( associated_pipeline_configs ) diff --git a/python/tk-core/python/tank/pipelineconfig_utils.py b/python/tk-core/python/tank/pipelineconfig_utils.py index 7a5543dc..38819681 100644 --- a/python/tk-core/python/tank/pipelineconfig_utils.py +++ b/python/tk-core/python/tank/pipelineconfig_utils.py @@ -13,19 +13,15 @@ across storages, configurations etc. """ +import importlib.metadata import os from tank_vendor import yaml -from . import constants -from . import LogManager - -from .util import yaml_cache -from .util import StorageRoots -from .util import ShotgunPath -from .util.shotgun import get_deferred_sg_connection - +from . import LogManager, constants from .errors import TankError +from .util import ShotgunPath, StorageRoots, yaml_cache +from .util.shotgun import get_deferred_sg_connection logger = LogManager.get_logger(__name__) @@ -439,7 +435,16 @@ def get_currently_running_api_version(): info_yml_path = os.path.abspath( os.path.join(os.path.dirname(__file__), "..", "..", "info.yml") ) - return _get_version_from_manifest(info_yml_path) + version = _get_version_from_manifest(info_yml_path) + if version is not None: + return version + # In a pip install the flat site-packages layout has no info.yml. + # Fall back to the installed distribution metadata; PEP 440 strips the + # leading 'v', so re-add it to match the info.yml convention. + try: + return "v" + importlib.metadata.version("sgtk") + except importlib.metadata.PackageNotFoundError: + return "unknown" def get_core_api_version(core_install_root): @@ -455,7 +460,19 @@ def get_core_api_version(core_install_root): """ # now try to get to the info.yml file to get the version number info_yml_path = os.path.join(core_install_root, "install", "core", "info.yml") - return _get_version_from_manifest(info_yml_path) + version = _get_version_from_manifest(info_yml_path) + if version is not None: + return version + # In a pip install the flat site-packages layout has no install/core/info.yml. + # If the requested core is the currently-running one, defer to + # get_currently_running_api_version which falls back to distribution metadata. + try: + current_core_root = get_path_to_current_core() + except TankError: + return "unknown" + if os.path.realpath(core_install_root) == os.path.realpath(current_core_root): + return get_currently_running_api_version() + return "unknown" def _get_version_from_manifest(info_yml_path): @@ -464,15 +481,14 @@ def _get_version_from_manifest(info_yml_path): Returns the version given a manifest. :param info_yml_path: path to manifest file. - :returns: Always a string, 'unknown' if data cannot be found + :returns: Version string, or None if data cannot be found. """ try: data = yaml_cache.g_yaml_cache.get(info_yml_path, deepcopy_data=False) or {} - data = str(data.get("version", "unknown")) + version = data.get("version") + return str(version) if version is not None else None except Exception: - data = "unknown" - - return data + return None def _get_core_descriptor_file(pipeline_config_path): diff --git a/python/tk-core/python/tank/platform/__init__.py b/python/tk-core/python/tank/platform/__init__.py index 801f4ba7..f772af42 100644 --- a/python/tk-core/python/tank/platform/__init__.py +++ b/python/tk-core/python/tank/platform/__init__.py @@ -9,28 +9,38 @@ # not expressly granted therein are reserved by Shotgun Software Inc. +from . import events + +# base classes to derive from +from .application import Application + # Engine management -from .engine import start_engine, current_engine, get_engine_path, find_app_settings +from .engine import ( + Engine, + current_engine, + find_app_settings, + get_engine_path, + start_engine, +) from .errors import ( - TankEngineInitError, - TankUnresolvedEnvironmentError, TankContextChangeNotSupportedError, + TankEngineInitError, TankMissingEngineError, TankMissingEnvironmentFile, + TankUnresolvedEnvironmentError, ) -from .software_launcher import create_engine_launcher - -# base classes to derive from -from .application import Application -from .engine import Engine -from .software_launcher import SoftwareLauncher, SoftwareVersion, LaunchInformation from .framework import Framework +from .software_launcher import ( + LaunchInformation, + SoftwareLauncher, + SoftwareVersion, + create_engine_launcher, +) from .util import ( change_context, + current_bundle, get_framework, + get_logger, import_framework, - current_bundle, restart, - get_logger, ) -from . import events diff --git a/python/tk-core/python/tank/platform/application.py b/python/tk-core/python/tank/platform/application.py index f97b5293..e37ba7a9 100644 --- a/python/tk-core/python/tank/platform/application.py +++ b/python/tk-core/python/tank/platform/application.py @@ -17,10 +17,9 @@ import sys from ..util.loader import load_plugin +from ..util.metrics import EventMetric from . import constants - from .bundle import TankBundle -from ..util.metrics import EventMetric class Application(TankBundle): diff --git a/python/tk-core/python/tank/platform/bundle.py b/python/tk-core/python/tank/platform/bundle.py index 3347cff5..3f84e690 100644 --- a/python/tk-core/python/tank/platform/bundle.py +++ b/python/tk-core/python/tank/platform/bundle.py @@ -827,7 +827,7 @@ def __resolve_hook_path(self, settings_name, hook_expression): # Entries are on the following form # # hook_publish_file: - # type: hook + # type: hook # description: Called when a file is published, e.g. copied from a work area to a publish area. # default_value: maya_publish_file # @@ -1074,7 +1074,7 @@ def _get_engine_name(self): # therefore get an error. try: engine_name = self.engine.name - except: + except Exception: engine_name = None return engine_name @@ -1133,7 +1133,7 @@ def _post_process_settings_r(tk, key, value, schema, bundle=None): items = schema.get("items", {}) # note - we assign the original values here because we processed_val = value - for (key, value_schema) in items.items(): + for key, value_schema in items.items(): processed_val[key] = _post_process_settings_r( tk=tk, key=key, value=value[key], schema=value_schema, bundle=bundle ) diff --git a/python/tk-core/python/tank/platform/engine.py b/python/tk-core/python/tank/platform/engine.py index 636fc33b..c68d3f54 100644 --- a/python/tk-core/python/tank/platform/engine.py +++ b/python/tk-core/python/tank/platform/engine.py @@ -12,44 +12,39 @@ Defines the base class for all Tank Engines. """ -import os -import sys +from __future__ import annotations # required to support python 3.9 + +import inspect import logging +import os import pprint +import sys +import threading import traceback -import inspect import weakref -import threading -from ..util.qt_importer import QtImporter -from ..util.loader import load_plugin -from .. import hook +from tank.flowam import host as flow_host # noqa: F401 (used in return annotation) +from tank.flowam import utils as flow_utils +from .. import hook from ..errors import TankError +from ..log import LogManager +from ..util import metrics_cache +from ..util import sgre as re +from ..util.loader import load_plugin +from ..util.metrics import EventMetric, MetricsDispatcher +from ..util.qt_importer import QtImporter +from . import application, constants, events, qt, qt5, qt6, validation +from .bundle import TankBundle +from .engine_logging import ToolkitEngineHandler, ToolkitEngineLegacyHandler from .errors import ( - TankEngineInitError, - TankUnresolvedEnvironmentError, TankContextChangeNotSupportedError, TankEngineEventError, + TankEngineInitError, TankMissingEngineError, + TankUnresolvedEnvironmentError, ) - -from ..util import sgre as re -from ..util.metrics import EventMetric -from ..util.metrics import MetricsDispatcher -from ..util import metrics_cache -from ..log import LogManager - -from . import application -from . import constants -from . import validation -from . import events -from . import qt -from . import qt5 -from . import qt6 -from .bundle import TankBundle from .framework import setup_frameworks -from .engine_logging import ToolkitEngineHandler, ToolkitEngineLegacyHandler # std core level logger core_logger = LogManager.get_logger(__name__) @@ -68,6 +63,11 @@ def __init__(self, tk, context, engine_instance_name, env): Engine instances are constructed by the toolkit launch process and various factory methods such as :meth:`start_engine`. + For Flow-enabled contexts (``context.flow_project_id`` set), this + also runs ``flow_utils.init_flow()`` to set up the Flow Integration + SDK session and provision pipeline schemas when the SG schema + config version does not match the bundled config. + :param tk: :class:`~sgtk.Sgtk` instance :param context: A context object to define the context on disk where the engine is operating :type context: :class:`~sgtk.Context` @@ -105,6 +105,10 @@ def __init__(self, tk, context, engine_instance_name, env): self._invoker = None self._async_invoker = None + # Flow host object used in Flow asset management integration + # Engines that support Flow integration will initialize this value to an instance of FlowHost + self._flow_host = None + # get the engine settings settings = self.__env.get_engine_settings(self.__engine_instance_name) @@ -162,6 +166,18 @@ def __init__(self, tk, context, engine_instance_name, env): self.log_debug("Appending to PYTHONPATH: %s" % python_path) sys.path.append(python_path) + # Do Flow sdk initialization if context is configured with Flow + if context.flow_project_id: + try: + flow_utils.init_flow( + tk.pipeline_configuration, + tk.shotgun, + context, + ) + except RuntimeError as exc: + self.log_error("Error occurred during Flow initialization!") + self.log_exception(exc) + # Note, 'init_engine()' is now deprecated and all derived initialisation should be # done in either 'pre_app_init()' or 'post_app_init()'. 'init_engine()' is left # in here to provide backwards compatibility with any legacy code. @@ -322,7 +338,7 @@ def __open_log_folder(self): if self.has_ui: # only import QT if we have a UI - from .qt import QtGui, QtCore + from .qt import QtCore, QtGui url = QtCore.QUrl.fromLocalFile(LogManager().log_folder) status = QtGui.QDesktopServices.openUrl(url) @@ -410,10 +426,10 @@ def __show_busy(self, title, details): if self.has_ui: # we cannot import QT until here as non-ui engines don't have QT defined. try: + from .qt import QtCore from .qt.busy_dialog import BusyDialog - from .qt import QtGui, QtCore - except: + except Exception: # QT import failed. This may be because someone has upgraded the core # to the latest but are still running a earlier version of the # Shotgun or Shell engine where the self.has_ui method is not @@ -684,6 +700,18 @@ def register_toggle_debug_command(self): """ return True + @property + def flow_host(self) -> flow_host.FlowHost | None: # noqa: F811 + """If the current context is Flow enabled, and the current + engine supports Flow integration, this value will be an instance of FlowHost. + The FlowHost class implements the required interface for the Flow asset management + integration to work within a dcc/engine. + + If the current context is not Flow enabled, or the current engine has not had + Flow support added, the value will be None. + """ + return self._flow_host + ########################################################################################## # init and destroy @@ -774,7 +802,7 @@ def change_context(self, new_context): # context change, it's that the target context isn't configured properly. # As such, we'll let any exceptions (mostly TankEngineInitError) bubble # up since it's a critical error case. - (new_env, engine_descriptor) = get_env_and_descriptor_for_engine( + new_env, engine_descriptor = get_env_and_descriptor_for_engine( engine_name=self.instance_name, tk=self.tank, context=new_context ) @@ -808,7 +836,6 @@ def change_context(self, new_context): # a context change. If one of them is not, then we remove it # from the persistent app pool, which will force it to be # rebuilt when apps are loaded later on. - non_compliant_app_paths = [] for install_path, app_instances in self.__application_pool.items(): for instance_name, app in app_instances.items(): self.log_debug( @@ -1198,7 +1225,7 @@ def _execute_in_main_thread(self, invoker_id, func, *args, **kwargs): self._invoker if invoker_id == self._SYNC_INVOKER else self._async_invoker ) if invoker: - from .qt import QtGui, QtCore + from .qt import QtCore, QtGui if ( QtGui.QApplication.instance() @@ -1247,7 +1274,7 @@ def get_matching_commands(self, command_selectors): """ # return a dictionary grouping all the commands by instance name commands_by_instance = {} - for (name, value) in self.commands.items(): + for name, value in self.commands.items(): app_instance = value["properties"].get("app") if app_instance is None: continue @@ -1684,7 +1711,8 @@ def _create_widget(self, widget_class, *args, **kwargs): self.logger.exception(exc) import traceback - from sgtk.platform.qt import QtGui, QtCore + + from sgtk.platform.qt import QtCore, QtGui # A very simple widget that ensures that the exception is visible and # selectable should the user need to copy/paste it into a support @@ -1984,7 +2012,7 @@ def _resolve_sg_stylesheet_tokens(self, style_sheet): :returns: Stylesheet string with replacements applied """ processed_style_sheet = style_sheet - for (token, value) in constants.SG_STYLESHEET_CONSTANTS.items(): + for token, value in constants.SG_STYLESHEET_CONSTANTS.items(): processed_style_sheet = processed_style_sheet.replace( "{{%s}}" % token, value ) @@ -2128,7 +2156,12 @@ def _define_qt_base(self): :returns: dict """ - base = {"qt_core": None, "qt_gui": None, "qt_web_engine_widgets": None, "dialog_base": None} + base = { + "qt_core": None, + "qt_gui": None, + "qt_web_engine_widgets": None, + "dialog_base": None, + } try: importer = QtImporter() base["qt_core"] = importer.QtCore @@ -2140,7 +2173,7 @@ def _define_qt_base(self): base["dialog_base"] = None base["wrapper"] = importer.binding base["shiboken"] = importer.shiboken - except: + except Exception: self.log_exception( "Default engine QT definition failed to find QT. " @@ -2441,7 +2474,7 @@ def __create_invokers(self): invoker = None async_invoker = None if self.has_ui: - from .qt import QtGui, QtCore + from .qt import QtCore, QtGui # Classes are defined locally since Qt might not be available. if QtGui and QtCore: @@ -2863,7 +2896,6 @@ def current_engine(): :returns: :class:`Engine` instance or None if no engine is running. """ - global g_current_engine return g_current_engine @@ -2892,7 +2924,7 @@ def get_engine_path(engine_name, tk, context): """ # get environment and engine location try: - (env, engine_descriptor) = get_env_and_descriptor_for_engine( + env, engine_descriptor = get_env_and_descriptor_for_engine( engine_name, tk, context ) except TankEngineInitError: @@ -3068,7 +3100,7 @@ def _start_engine(engine_name, tk, old_context, new_context): LogManager().initialize_base_file_handler(engine_name) # get environment and engine location - (env, engine_descriptor) = get_env_and_descriptor_for_engine( + env, engine_descriptor = get_env_and_descriptor_for_engine( engine_name, tk, new_context ) diff --git a/python/tk-core/python/tank/platform/environment.py b/python/tk-core/python/tank/platform/environment.py index 1a2f176c..faa46240 100644 --- a/python/tk-core/python/tank/platform/environment.py +++ b/python/tk-core/python/tank/platform/environment.py @@ -13,19 +13,18 @@ """ +import copy import os import sys -import copy from tank_vendor import yaml -from .bundle import resolve_default_value -from . import constants -from . import environment_includes -from ..errors import TankError, TankUnreadableFileError -from .errors import TankMissingEnvironmentFile -from ..util.yaml_cache import g_yaml_cache from .. import LogManager +from ..errors import TankError, TankUnreadableFileError +from ..util.yaml_cache import g_yaml_cache +from . import constants, environment_includes +from .bundle import resolve_default_value +from .errors import TankMissingEnvironmentFile logger = LogManager.get_logger(__name__) @@ -67,8 +66,7 @@ def __str__(self): return "Environment %s" % os.path.basename(self._env_path) def _refresh(self): - """Refreshes the environment data from disk - """ + """Refreshes the environment data from disk""" data = self.__load_environment_data() self._env_data = environment_includes.process_includes( @@ -233,7 +231,7 @@ def __extract_locations(self): constants.ENVIRONMENT_LOCATION_KEY ) - for (eng, app) in self.__app_settings: + for eng, app in self.__app_settings: descriptor_dict = self.__app_settings[(eng, app)].get( constants.ENVIRONMENT_LOCATION_KEY ) @@ -280,7 +278,7 @@ def name(self): without its extension """ file_name_with_ext = os.path.basename(self._env_path) - (file_name, ext) = os.path.splitext(file_name_with_ext) + file_name, ext = os.path.splitext(file_name_with_ext) return file_name @property @@ -323,7 +321,7 @@ def get_apps(self, engine): apps = [] engine_app_tuples = list(self.__app_settings.keys()) - for (engine_name, app_name) in engine_app_tuples: + for engine_name, app_name in engine_app_tuples: if engine_name == engine: apps.append(app_name) return apps @@ -597,7 +595,7 @@ def _find_location_for_app(self, engine_name, app_name, absolute_location=False) absolute_location, ) # first, find the location of the engine: - (engine_tokens, engine_yml_file) = self.find_location_for_engine(engine_name) + engine_tokens, engine_yml_file = self.find_location_for_engine(engine_name) # load the engine data: engine_yml_data = self.__load_data(engine_yml_file) @@ -814,7 +812,7 @@ class WritableEnvironment(InstalledEnvironment): content back to disk. """ - (NONE, INCLUDE_DEFAULTS, STRIP_DEFAULTS) = range(3) + NONE, INCLUDE_DEFAULTS, STRIP_DEFAULTS = range(3) """Format enumeration to use when dumping an environment. NONE: Don't modify the settings. @@ -834,7 +832,7 @@ def __init__(self, env_path, pipeline_config, context=None): super().__init__(env_path, pipeline_config, context) def _get_ruamel_yaml(self): - vendor_path = os.path.join(os.path.dirname(__file__), "../..", "tank_vendor") + vendor_path = os.path.join(os.path.dirname(__file__), "../..", "tank_vendor") if vendor_path not in sys.path: sys.path.append(vendor_path) @@ -1014,7 +1012,7 @@ def _update_location_data(self, data, new_location_data): # It is the difference between the following: # # common.engines.tk-maya.location: - # type: app_store + # type: app_store # name: tk-maya # version: v0.8.1 # @@ -1022,7 +1020,7 @@ def _update_location_data(self, data, new_location_data): # # common.apps.tk-multi-shotgunpanel: # location: - # type: app_store + # type: app_store # name: tk-multi-shotgunpanel # version: v1.4.3 # @@ -1052,7 +1050,7 @@ def update_engine_settings(self, engine_name, new_data, new_location): # in a concrete manner (ie: the actual dict and not an include # to another yml file). The absolute_location argument will allow # us to do that. - (tokens, yml_file) = self._find_location_for_engine( + tokens, yml_file = self._find_location_for_engine( engine_name, absolute_location=True ) @@ -1095,7 +1093,7 @@ def update_app_settings(self, engine_name, app_name, new_data, new_location): # in a concrete manner (ie: the actual dict and not an include # to another yml file). The absolute_location argument will allow # us to do that. - (tokens, yml_file) = self._find_location_for_app( + tokens, yml_file = self._find_location_for_app( engine_name, app_name, absolute_location=True ) @@ -1133,7 +1131,7 @@ def update_framework_settings(self, framework_name, new_data, new_location): # in a concrete manner (ie: the actual dict and not an include # to another yml file). The absolute_location argument will allow # us to do that. - (tokens, yml_file) = self._find_location_for_framework( + tokens, yml_file = self._find_location_for_framework( framework_name, absolute_location=True ) @@ -1405,7 +1403,7 @@ def dump(self, file, transform, include_debug_comments=True): for engine_name in self.get_engines(): # only process settings in this file - (tokens, engine_file) = self.find_location_for_engine(engine_name) + tokens, engine_file = self.find_location_for_engine(engine_name) if not engine_file == self._env_path: continue @@ -1438,7 +1436,7 @@ def dump(self, file, transform, include_debug_comments=True): for app_name in self.get_apps(engine_name): # only process settings in this file - (tokens, app_file) = self.find_location_for_app(engine_name, app_name) + tokens, app_file = self.find_location_for_app(engine_name, app_name) if not app_file == self._env_path: continue @@ -1471,7 +1469,7 @@ def dump(self, file, transform, include_debug_comments=True): for fw_name in self.get_frameworks(): # only process settings in this file - (tokens, fw_file) = self.find_location_for_framework(fw_name) + tokens, fw_file = self.find_location_for_framework(fw_name) if not fw_file == self._env_path: continue diff --git a/python/tk-core/python/tank/platform/environment_includes.py b/python/tk-core/python/tank/platform/environment_includes.py index 3f4ec8ff..bd47068b 100644 --- a/python/tk-core/python/tank/platform/environment_includes.py +++ b/python/tk-core/python/tank/platform/environment_includes.py @@ -27,21 +27,17 @@ """ - -import os -import sys import copy +import os from ..errors import TankError +from ..log import LogManager from ..template import TemplatePath from ..templatekey import StringKey -from ..log import LogManager - -from . import constants - from ..util import sgre as re -from ..util.yaml_cache import g_yaml_cache from ..util.includes import resolve_include +from ..util.yaml_cache import g_yaml_cache +from . import constants log = LogManager.get_logger(__name__) @@ -106,7 +102,7 @@ def _resolve_includes(file_name, data, context): try: f = context.as_template_fields(template) full_path = template.apply_fields(f) - except TankError as e: + except TankError: # if this path could not be resolved, that's ok! These paths are always optional. continue @@ -136,7 +132,7 @@ def _resolve_refs_r(lookup_dict, data): elif isinstance(data, dict): processed_val = {} - for (k, v) in data.items(): + for k, v in data.items(): processed_val[k] = _resolve_refs_r(lookup_dict, v) elif isinstance(data, str) and data.startswith("@"): @@ -350,9 +346,7 @@ def find_reference(file_name, context, token, absolute_location=False): # If the value of the token is an include, then we can # recurse up, directly referencing the include name as # the new token. - if isinstance(token_data, str) and token_data.startswith( - "@" - ): + if isinstance(token_data, str) and token_data.startswith("@"): include_token = token_data else: # In the case where the data isn't itself an include, diff --git a/python/tk-core/python/tank/platform/events/__init__.py b/python/tk-core/python/tank/platform/events/__init__.py index 4d80ad84..67615b8d 100644 --- a/python/tk-core/python/tank/platform/events/__init__.py +++ b/python/tk-core/python/tank/platform/events/__init__.py @@ -9,5 +9,5 @@ # not expressly granted therein are reserved by Shotgun Software Inc. from .event_engine import EngineEvent -from .event_file_open import FileOpenEvent from .event_file_close import FileCloseEvent +from .event_file_open import FileOpenEvent diff --git a/python/tk-core/python/tank/platform/framework.py b/python/tk-core/python/tank/platform/framework.py index bd81825c..cd17f76a 100644 --- a/python/tk-core/python/tank/platform/framework.py +++ b/python/tk-core/python/tank/platform/framework.py @@ -15,12 +15,10 @@ import os -from ..util.loader import load_plugin -from . import constants - from ..errors import TankError +from ..util.loader import load_plugin +from . import constants, validation from .bundle import TankBundle -from . import validation class Framework(TankBundle): diff --git a/python/tk-core/python/tank/platform/qt/busy_dialog.py b/python/tk-core/python/tank/platform/qt/busy_dialog.py index c9b0a612..a51e48a6 100644 --- a/python/tk-core/python/tank/platform/qt/busy_dialog.py +++ b/python/tk-core/python/tank/platform/qt/busy_dialog.py @@ -8,7 +8,7 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -from . import QtCore, QtGui +from . import QtGui from .ui_busy_dialog import Ui_BusyDialog diff --git a/python/tk-core/python/tank/platform/qt/config_item.py b/python/tk-core/python/tank/platform/qt/config_item.py index 44db298c..6068e519 100644 --- a/python/tk-core/python/tank/platform/qt/config_item.py +++ b/python/tk-core/python/tank/platform/qt/config_item.py @@ -8,14 +8,10 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -import os -import shutil -import sys - -from . import QtCore, QtGui -from .ui_item import Ui_Item from ..bundle import resolve_default_value from ..engine import current_engine +from . import QtGui +from .ui_item import Ui_Item class ConfigItem(QtGui.QWidget): @@ -47,7 +43,7 @@ def __init__(self, setting, params, value, bundle, parent=None): # special cases for some things: value_str = "" - if type(value) == str and value.startswith("hook:"): + if isinstance(value, str) and value.startswith("hook:"): # this is the generic hook override that any type can have value_str = "Value: %s" % value value_str += "

" diff --git a/python/tk-core/python/tank/platform/qt/resources_rc.py b/python/tk-core/python/tank/platform/qt/resources_rc.py index 51f7b1fa..85a139af 100644 --- a/python/tk-core/python/tank/platform/qt/resources_rc.py +++ b/python/tk-core/python/tank/platform/qt/resources_rc.py @@ -1959,10 +1959,17 @@ \x00\x00\x01\x8f05\xd2\x9e\ " + def qInitResources(): - QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + QtCore.qRegisterResourceData( + 0x03, qt_resource_struct, qt_resource_name, qt_resource_data + ) + def qCleanupResources(): - QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + QtCore.qUnregisterResourceData( + 0x03, qt_resource_struct, qt_resource_name, qt_resource_data + ) + qInitResources() diff --git a/python/tk-core/python/tank/platform/qt/tankqdialog.py b/python/tk-core/python/tank/platform/qt/tankqdialog.py index da378e35..52d06905 100644 --- a/python/tk-core/python/tank/platform/qt/tankqdialog.py +++ b/python/tk-core/python/tank/platform/qt/tankqdialog.py @@ -13,18 +13,13 @@ """ -from . import QtCore, QtGui -from . import ui_tank_dialog -from . import TankDialogBase -from .config_item import ConfigItem -from .. import engine -from .. import application -from .. import constants -from ...errors import TankError - -import sys -import os import inspect +import os + +from ...errors import TankError +from .. import application, constants, engine +from . import QtCore, QtGui, TankDialogBase, ui_tank_dialog +from .config_item import ConfigItem class TankQDialog(TankDialogBase): @@ -70,7 +65,7 @@ def _stop_buggy_background_worker_qthreads(widget): # stop if we've previously checked this class: cls_type = checked_classes.get(cls, None) - if cls_type != None: + if cls_type is not None: break checked_classes[cls] = "" @@ -104,7 +99,7 @@ def _stop_buggy_background_worker_qthreads(widget): # assume that this is derived from an actual tk-multi-workfiles.SaveAsForm! cls_type = "SaveAsForm" - if cls_type != None: + if cls_type is not None: checked_classes[cls] = cls_type break @@ -331,7 +326,8 @@ def _format_context_property(p, show_type=False): tooltip += "System Information" tooltip += "
" tooltip += ( - "Flow Production Tracking Toolkit Version: %s
" % self._bundle.tank.version + "Flow Production Tracking Toolkit Version: %s
" + % self._bundle.tank.version ) tooltip += "Pipeline Config: %s
" % pc.get_name() tooltip += "Config Path: %s
" % pc.get_path() @@ -360,7 +356,7 @@ def _format_context_property(p, show_type=False): context_info += "You are currently running in the %s environment." % ( self._bundle.engine.environment["name"] ) - except: + except Exception: pass self.ui.app_work_area_info.setText(context_info) diff --git a/python/tk-core/python/tank/platform/qt/ui_busy_dialog.py b/python/tk-core/python/tank/platform/qt/ui_busy_dialog.py index d81bbfb3..a62690fb 100644 --- a/python/tk-core/python/tank/platform/qt/ui_busy_dialog.py +++ b/python/tk-core/python/tank/platform/qt/ui_busy_dialog.py @@ -9,69 +9,76 @@ ################################################################################ from . import QtCore + for name, cls in QtCore.__dict__.items(): - if isinstance(cls, type): globals()[name] = cls + if isinstance(cls, type): + globals()[name] = cls from . import QtGui + for name, cls in QtGui.__dict__.items(): - if isinstance(cls, type): globals()[name] = cls + if isinstance(cls, type): + globals()[name] = cls + +from . import resources_rc -from . import resources_rc class Ui_BusyDialog(object): def setupUi(self, BusyDialog): if not BusyDialog.objectName(): - BusyDialog.setObjectName(u"BusyDialog") + BusyDialog.setObjectName("BusyDialog") BusyDialog.resize(500, 110) - BusyDialog.setStyleSheet(u"/* Style for the window itself */\n" -"#frame {\n" -"border-color: #30A7E3;\n" -"border-style: solid;\n" -"border-width: 2px;\n" -"}\n" -"\n" -"/* Style for the header text */\n" -"#title {\n" -"color: #30A7E3;\n" -"margin-top: 15px;\n" -"margin-bottom: 0px;\n" -"margin-left: 1px;\n" -"font-size: 16px;\n" -"font-weight: bold;\n" -"}\n" -"\n" -"/* Style for the details text */\n" -"#details {\n" -"margin-top: 1px;\n" -"margin-left: 3px;\n" -"margin-bottom: 0px;\n" -"font-size: 11px;\n" -"}\n" -"") + BusyDialog.setStyleSheet( + "/* Style for the window itself */\n" + "#frame {\n" + "border-color: #30A7E3;\n" + "border-style: solid;\n" + "border-width: 2px;\n" + "}\n" + "\n" + "/* Style for the header text */\n" + "#title {\n" + "color: #30A7E3;\n" + "margin-top: 15px;\n" + "margin-bottom: 0px;\n" + "margin-left: 1px;\n" + "font-size: 16px;\n" + "font-weight: bold;\n" + "}\n" + "\n" + "/* Style for the details text */\n" + "#details {\n" + "margin-top: 1px;\n" + "margin-left: 3px;\n" + "margin-bottom: 0px;\n" + "font-size: 11px;\n" + "}\n" + "" + ) self.horizontalLayout_2 = QHBoxLayout(BusyDialog) self.horizontalLayout_2.setSpacing(2) self.horizontalLayout_2.setContentsMargins(2, 2, 2, 2) - self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") + self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.frame = QFrame(BusyDialog) - self.frame.setObjectName(u"frame") + self.frame.setObjectName("frame") self.frame.setFrameShape(QFrame.StyledPanel) self.frame.setFrameShadow(QFrame.Raised) self.horizontalLayout = QHBoxLayout(self.frame) self.horizontalLayout.setSpacing(5) self.horizontalLayout.setContentsMargins(5, 5, 5, 5) - self.horizontalLayout.setObjectName(u"horizontalLayout") + self.horizontalLayout.setObjectName("horizontalLayout") self.label = QLabel(self.frame) - self.label.setObjectName(u"label") - self.label.setPixmap(QPixmap(u":/Tank.Platform.Qt/sg_logo_80px.png")) + self.label.setObjectName("label") + self.label.setPixmap(QPixmap(":/Tank.Platform.Qt/sg_logo_80px.png")) self.horizontalLayout.addWidget(self.label) self.verticalLayout = QVBoxLayout() self.verticalLayout.setSpacing(0) - self.verticalLayout.setObjectName(u"verticalLayout") + self.verticalLayout.setObjectName("verticalLayout") self.title = QLabel(self.frame) - self.title.setObjectName(u"title") + self.title.setObjectName("title") sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) @@ -81,13 +88,13 @@ def setupUi(self, BusyDialog): self.verticalLayout.addWidget(self.title) self.details = QLabel(self.frame) - self.details.setObjectName(u"details") + self.details.setObjectName("details") sizePolicy1 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding) sizePolicy1.setHorizontalStretch(0) sizePolicy1.setVerticalStretch(0) sizePolicy1.setHeightForWidth(self.details.sizePolicy().hasHeightForWidth()) self.details.setSizePolicy(sizePolicy1) - self.details.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignTop) + self.details.setAlignment(Qt.AlignLeading | Qt.AlignLeft | Qt.AlignTop) self.details.setWordWrap(True) self.verticalLayout.addWidget(self.details) @@ -99,11 +106,21 @@ def setupUi(self, BusyDialog): self.retranslateUi(BusyDialog) QMetaObject.connectSlotsByName(BusyDialog) + # setupUi def retranslateUi(self, BusyDialog): - BusyDialog.setWindowTitle(QCoreApplication.translate("BusyDialog", u"Dialog", None)) + BusyDialog.setWindowTitle( + QCoreApplication.translate("BusyDialog", "Dialog", None) + ) self.label.setText("") - self.title.setText(QCoreApplication.translate("BusyDialog", u"Doing something, hang on!", None)) - self.details.setText(QCoreApplication.translate("BusyDialog", u"Lots of interesting details about what is going on", None)) + self.title.setText( + QCoreApplication.translate("BusyDialog", "Doing something, hang on!", None) + ) + self.details.setText( + QCoreApplication.translate( + "BusyDialog", "Lots of interesting details about what is going on", None + ) + ) + # retranslateUi diff --git a/python/tk-core/python/tank/platform/qt/ui_item.py b/python/tk-core/python/tank/platform/qt/ui_item.py index 0f1bc565..1b6f8aa9 100644 --- a/python/tk-core/python/tank/platform/qt/ui_item.py +++ b/python/tk-core/python/tank/platform/qt/ui_item.py @@ -9,56 +9,61 @@ ################################################################################ from . import QtCore + for name, cls in QtCore.__dict__.items(): - if isinstance(cls, type): globals()[name] = cls + if isinstance(cls, type): + globals()[name] = cls from . import QtGui + for name, cls in QtGui.__dict__.items(): - if isinstance(cls, type): globals()[name] = cls + if isinstance(cls, type): + globals()[name] = cls + +from . import resources_rc -from . import resources_rc class Ui_Item(object): def setupUi(self, Item): if not Item.objectName(): - Item.setObjectName(u"Item") + Item.setObjectName("Item") Item.resize(335, 110) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(Item.sizePolicy().hasHeightForWidth()) Item.setSizePolicy(sizePolicy) - Item.setStyleSheet(u"QLabel{\n" -" font-size: 11px;\n" -" margin-bottom: 3px\n" -"}\n" -"") + Item.setStyleSheet( + "QLabel{\n" " font-size: 11px;\n" " margin-bottom: 3px\n" "}\n" "" + ) self.verticalLayout = QVBoxLayout(Item) self.verticalLayout.setContentsMargins(0, 0, 0, 0) - self.verticalLayout.setObjectName(u"verticalLayout") + self.verticalLayout.setObjectName("verticalLayout") self.verticalLayout_2 = QVBoxLayout() self.verticalLayout_2.setSpacing(0) - self.verticalLayout_2.setObjectName(u"verticalLayout_2") + self.verticalLayout_2.setObjectName("verticalLayout_2") self.name = QLabel(Item) - self.name.setObjectName(u"name") + self.name.setObjectName("name") sizePolicy1 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum) sizePolicy1.setHorizontalStretch(0) sizePolicy1.setVerticalStretch(0) sizePolicy1.setHeightForWidth(self.name.sizePolicy().hasHeightForWidth()) self.name.setSizePolicy(sizePolicy1) - self.name.setStyleSheet(u"font-size: 13px;") - self.name.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter) + self.name.setStyleSheet("font-size: 13px;") + self.name.setAlignment(Qt.AlignLeading | Qt.AlignLeft | Qt.AlignVCenter) self.name.setWordWrap(True) self.verticalLayout_2.addWidget(self.name) self.line = QFrame(Item) - self.line.setObjectName(u"line") - self.line.setStyleSheet(u"border: none;\n" -"border-bottom-color: rgba(150,150,150,100);\n" -"border-bottom-width: 1px;\n" -"border-bottom-style: solid;") + self.line.setObjectName("line") + self.line.setStyleSheet( + "border: none;\n" + "border-bottom-color: rgba(150,150,150,100);\n" + "border-bottom-width: 1px;\n" + "border-bottom-style: solid;" + ) self.line.setFrameShape(QFrame.HLine) self.line.setFrameShadow(QFrame.Sunken) @@ -67,36 +72,44 @@ def setupUi(self, Item): self.verticalLayout.addLayout(self.verticalLayout_2) self.value = QLabel(Item) - self.value.setObjectName(u"value") + self.value.setObjectName("value") sizePolicy1.setHeightForWidth(self.value.sizePolicy().hasHeightForWidth()) self.value.setSizePolicy(sizePolicy1) - self.value.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter) + self.value.setAlignment(Qt.AlignLeading | Qt.AlignLeft | Qt.AlignVCenter) self.value.setWordWrap(True) - self.value.setTextInteractionFlags(Qt.LinksAccessibleByMouse|Qt.TextSelectableByMouse) + self.value.setTextInteractionFlags( + Qt.LinksAccessibleByMouse | Qt.TextSelectableByMouse + ) self.verticalLayout.addWidget(self.value) self.type = QLabel(Item) - self.type.setObjectName(u"type") + self.type.setObjectName("type") sizePolicy1.setHeightForWidth(self.type.sizePolicy().hasHeightForWidth()) self.type.setSizePolicy(sizePolicy1) - self.type.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter) + self.type.setAlignment(Qt.AlignLeading | Qt.AlignLeft | Qt.AlignVCenter) self.type.setWordWrap(True) - self.type.setTextInteractionFlags(Qt.LinksAccessibleByMouse|Qt.TextSelectableByMouse) + self.type.setTextInteractionFlags( + Qt.LinksAccessibleByMouse | Qt.TextSelectableByMouse + ) self.verticalLayout.addWidget(self.type) self.description = QLabel(Item) - self.description.setObjectName(u"description") + self.description.setObjectName("description") self.description.setMaximumSize(QSize(350, 16777215)) self.description.setTextFormat(Qt.RichText) - self.description.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter) + self.description.setAlignment(Qt.AlignLeading | Qt.AlignLeft | Qt.AlignVCenter) self.description.setWordWrap(True) - self.description.setTextInteractionFlags(Qt.LinksAccessibleByMouse|Qt.TextSelectableByMouse) + self.description.setTextInteractionFlags( + Qt.LinksAccessibleByMouse | Qt.TextSelectableByMouse + ) self.verticalLayout.addWidget(self.description) - self.verticalSpacer = QSpacerItem(20, 0, QSizePolicy.Minimum, QSizePolicy.Expanding) + self.verticalSpacer = QSpacerItem( + 20, 0, QSizePolicy.Minimum, QSizePolicy.Expanding + ) self.verticalLayout.addItem(self.verticalSpacer) @@ -105,16 +118,24 @@ def setupUi(self, Item): self.retranslateUi(Item) QMetaObject.connectSlotsByName(Item) + # setupUi def retranslateUi(self, Item): - Item.setWindowTitle(QCoreApplication.translate("Item", u"Form", None)) - self.name.setText(QCoreApplication.translate("Item", u"Settings Name", None)) - self.value.setText(QCoreApplication.translate("Item", u"Value: foo bar", None)) - self.type.setText(QCoreApplication.translate("Item", u"Type: bool", None)) - self.description.setText(QCoreApplication.translate("Item", u"\n" -"\n" -"

description

", None)) + Item.setWindowTitle(QCoreApplication.translate("Item", "Form", None)) + self.name.setText(QCoreApplication.translate("Item", "Settings Name", None)) + self.value.setText(QCoreApplication.translate("Item", "Value: foo bar", None)) + self.type.setText(QCoreApplication.translate("Item", "Type: bool", None)) + self.description.setText( + QCoreApplication.translate( + "Item", + '\n' + '\n" + '

description

', + None, + ) + ) + # retranslateUi diff --git a/python/tk-core/python/tank/platform/qt/ui_tank_dialog.py b/python/tk-core/python/tank/platform/qt/ui_tank_dialog.py index 344b2eb7..1f81444b 100644 --- a/python/tk-core/python/tank/platform/qt/ui_tank_dialog.py +++ b/python/tk-core/python/tank/platform/qt/ui_tank_dialog.py @@ -9,138 +9,153 @@ ################################################################################ from . import QtCore + for name, cls in QtCore.__dict__.items(): - if isinstance(cls, type): globals()[name] = cls + if isinstance(cls, type): + globals()[name] = cls from . import QtGui + for name, cls in QtGui.__dict__.items(): - if isinstance(cls, type): globals()[name] = cls + if isinstance(cls, type): + globals()[name] = cls + +from . import resources_rc -from . import resources_rc class Ui_TankDialog(object): def setupUi(self, TankDialog): if not TankDialog.objectName(): - TankDialog.setObjectName(u"TankDialog") + TankDialog.setObjectName("TankDialog") TankDialog.resize(879, 551) - TankDialog.setStyleSheet(u"") + TankDialog.setStyleSheet("") self.verticalLayout_3 = QVBoxLayout(TankDialog) self.verticalLayout_3.setSpacing(0) - self.verticalLayout_3.setObjectName(u"verticalLayout_3") + self.verticalLayout_3.setObjectName("verticalLayout_3") self.verticalLayout_3.setContentsMargins(0, 0, 0, 0) self.stackedWidget = QStackedWidget(TankDialog) - self.stackedWidget.setObjectName(u"stackedWidget") + self.stackedWidget.setObjectName("stackedWidget") self.page_1 = QWidget() - self.page_1.setObjectName(u"page_1") - self.page_1.setStyleSheet(u"QWidget#page_1 {\n" -"margin: 0px;\n" -"}") + self.page_1.setObjectName("page_1") + self.page_1.setStyleSheet("QWidget#page_1 {\n" "margin: 0px;\n" "}") self.verticalLayout = QVBoxLayout(self.page_1) self.verticalLayout.setSpacing(0) - self.verticalLayout.setObjectName(u"verticalLayout") + self.verticalLayout.setObjectName("verticalLayout") self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.top_group = QGroupBox(self.page_1) - self.top_group.setObjectName(u"top_group") + self.top_group.setObjectName("top_group") self.top_group.setMinimumSize(QSize(0, 45)) self.top_group.setMaximumSize(QSize(16777215, 45)) - self.top_group.setStyleSheet(u"#top_group {\n" -"background-color: #2D2D2D;\n" -"border: none;\n" -"border-bottom:1px solid #202020;\n" -"}\n" -"") + self.top_group.setStyleSheet( + "#top_group {\n" + "background-color: #2D2D2D;\n" + "border: none;\n" + "border-bottom:1px solid #202020;\n" + "}\n" + "" + ) self.top_group.setFlat(False) self.horizontalLayout = QHBoxLayout(self.top_group) self.horizontalLayout.setSpacing(0) - self.horizontalLayout.setObjectName(u"horizontalLayout") + self.horizontalLayout.setObjectName("horizontalLayout") self.horizontalLayout.setContentsMargins(4, 0, 1, 1) self.tank_logo = QLabel(self.top_group) - self.tank_logo.setObjectName(u"tank_logo") + self.tank_logo.setObjectName("tank_logo") sizePolicy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.tank_logo.sizePolicy().hasHeightForWidth()) self.tank_logo.setSizePolicy(sizePolicy) - self.tank_logo.setPixmap(QPixmap(u":/Tank.Platform.Qt/tank_logo.png")) + self.tank_logo.setPixmap(QPixmap(":/Tank.Platform.Qt/tank_logo.png")) self.horizontalLayout.addWidget(self.tank_logo) self.label = QLabel(self.top_group) - self.label.setObjectName(u"label") - self.label.setStyleSheet(u"/* want this stylesheet to apply to the label but not the tooltip */\n" -"QLabel{\n" -" color: white;\n" -" font-size: 20px;\n" -" margin-left: 5px;\n" -" font-family: \"Open Sans\";\n" -" font-style: \"Regular\";\n" -"}") + self.label.setObjectName("label") + self.label.setStyleSheet( + "/* want this stylesheet to apply to the label but not the tooltip */\n" + "QLabel{\n" + " color: white;\n" + " font-size: 20px;\n" + " margin-left: 5px;\n" + ' font-family: "Open Sans";\n' + ' font-style: "Regular";\n' + "}" + ) self.horizontalLayout.addWidget(self.label) self.lbl_context = QLabel(self.top_group) - self.lbl_context.setObjectName(u"lbl_context") - self.lbl_context.setStyleSheet(u"/* want this stylesheet to apply to the label but not the tooltip */\n" -"QLabel {\n" -" color: rgba(250,250,250,180);\n" -" font-size: 11px;\n" -" margin-right: 8px;\n" -" font-family: \"Open Sans\";\n" -" font-style: \"Regular\";\n" -"}\n" -"\n" -"\n" -"") - self.lbl_context.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter) + self.lbl_context.setObjectName("lbl_context") + self.lbl_context.setStyleSheet( + "/* want this stylesheet to apply to the label but not the tooltip */\n" + "QLabel {\n" + " color: rgba(250,250,250,180);\n" + " font-size: 11px;\n" + " margin-right: 8px;\n" + ' font-family: "Open Sans";\n' + ' font-style: "Regular";\n' + "}\n" + "\n" + "\n" + "" + ) + self.lbl_context.setAlignment( + Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter + ) self.horizontalLayout.addWidget(self.lbl_context) self.details_show = QToolButton(self.top_group) - self.details_show.setObjectName(u"details_show") + self.details_show.setObjectName("details_show") self.details_show.setMinimumSize(QSize(34, 34)) self.details_show.setFocusPolicy(Qt.ClickFocus) - self.details_show.setStyleSheet(u"QToolButton{\n" -"width: 12px;\n" -"height: 20px;\n" -"background-image: url(:/Tank.Platform.Qt/arrow.png);\n" -"border: none;\n" -"background-color: none;\n" -"}\n" -"\n" -"QToolButton:hover{\n" -"background-image: url(:/Tank.Platform.Qt/arrow_hover.png);\n" -"}\n" -"\n" -"QToolButton:pressed{\n" -"background-image: url(:/Tank.Platform.Qt/arrow_pressed.png);\n" -"}\n" -"") + self.details_show.setStyleSheet( + "QToolButton{\n" + "width: 12px;\n" + "height: 20px;\n" + "background-image: url(:/Tank.Platform.Qt/arrow.png);\n" + "border: none;\n" + "background-color: none;\n" + "}\n" + "\n" + "QToolButton:hover{\n" + "background-image: url(:/Tank.Platform.Qt/arrow_hover.png);\n" + "}\n" + "\n" + "QToolButton:pressed{\n" + "background-image: url(:/Tank.Platform.Qt/arrow_pressed.png);\n" + "}\n" + "" + ) self.details_show.setAutoRaise(True) self.horizontalLayout.addWidget(self.details_show) self.details_hide = QToolButton(self.top_group) - self.details_hide.setObjectName(u"details_hide") + self.details_hide.setObjectName("details_hide") self.details_hide.setMinimumSize(QSize(34, 34)) self.details_hide.setFocusPolicy(Qt.ClickFocus) self.details_hide.setVisible(False) - self.details_hide.setStyleSheet(u"QToolButton{\n" -" width: 12px;\n" -" height: 20px;\n" -" background-image: url(:/Tank.Platform.Qt/arrow_flipped.png);\n" -" border: none;\n" -" background-color: none;\n" -" }\n" -"\n" -" QToolButton:hover{\n" -" background-image: url(:/Tank.Platform.Qt/arrow_flipped_hover.png);\n" -" }\n" -"\n" -" QToolButton:pressed{\n" -" background-image: url(:/Tank.Platform.Qt/arrow_flipped_pressed.png);\n" -" }\n" -" ") + self.details_hide.setStyleSheet( + "QToolButton{\n" + " width: 12px;\n" + " height: 20px;\n" + " background-image: url(:/Tank.Platform.Qt/arrow_flipped.png);\n" + " border: none;\n" + " background-color: none;\n" + " }\n" + "\n" + " QToolButton:hover{\n" + " background-image: url(:/Tank.Platform.Qt/arrow_flipped_hover.png);\n" + " }\n" + "\n" + " QToolButton:pressed{\n" + " background-image: url(:/Tank.Platform.Qt/arrow_flipped_pressed.png);\n" + " }\n" + " " + ) self.details_hide.setAutoRaise(True) self.horizontalLayout.addWidget(self.details_hide) @@ -149,79 +164,85 @@ def setupUi(self, TankDialog): self.target = QVBoxLayout() self.target.setSpacing(4) - self.target.setObjectName(u"target") + self.target.setObjectName("target") self.verticalLayout.addLayout(self.target) self.stackedWidget.addWidget(self.page_1) self.page_2 = QWidget() - self.page_2.setObjectName(u"page_2") - self.page_2.setStyleSheet(u"QWidget {\n" -" font-family: \"Open Sans\";\n" -" font-style: \"Regular\";\n" -"}") + self.page_2.setObjectName("page_2") + self.page_2.setStyleSheet( + "QWidget {\n" + ' font-family: "Open Sans";\n' + ' font-style: "Regular";\n' + "}" + ) self.verticalLayout_2 = QVBoxLayout(self.page_2) - self.verticalLayout_2.setObjectName(u"verticalLayout_2") + self.verticalLayout_2.setObjectName("verticalLayout_2") self.verticalLayout_2.setContentsMargins(1, 1, 1, 1) self.page_2_group = QGroupBox(self.page_2) - self.page_2_group.setObjectName(u"page_2_group") + self.page_2_group.setObjectName("page_2_group") self.page_2_group.setMinimumSize(QSize(0, 100)) - self.page_2_group.setStyleSheet(u"QGroupBox {\n" -"margin: 0px;\n" -"}") + self.page_2_group.setStyleSheet("QGroupBox {\n" "margin: 0px;\n" "}") self.horizontalLayout_2 = QHBoxLayout(self.page_2_group) self.horizontalLayout_2.setSpacing(0) - self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") + self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) - self.horizontalSpacer = QSpacerItem(145, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.horizontalSpacer = QSpacerItem( + 145, 20, QSizePolicy.Expanding, QSizePolicy.Minimum + ) self.horizontalLayout_2.addItem(self.horizontalSpacer) self.label_3 = QLabel(self.page_2_group) - self.label_3.setObjectName(u"label_3") + self.label_3.setObjectName("label_3") self.label_3.setMinimumSize(QSize(40, 0)) self.label_3.setMaximumSize(QSize(40, 16777215)) self.horizontalLayout_2.addWidget(self.label_3) self.gradient = QGroupBox(self.page_2_group) - self.gradient.setObjectName(u"gradient") + self.gradient.setObjectName("gradient") self.gradient.setMinimumSize(QSize(11, 0)) self.gradient.setMaximumSize(QSize(11, 16777215)) - self.gradient.setStyleSheet(u"#gradient {\n" -"background-image: url(:/Tank.Platform.Qt/gradient.png);\n" -"border: none;\n" -"}") + self.gradient.setStyleSheet( + "#gradient {\n" + "background-image: url(:/Tank.Platform.Qt/gradient.png);\n" + "border: none;\n" + "}" + ) self.horizontalLayout_2.addWidget(self.gradient) self.scrollArea = QScrollArea(self.page_2_group) - self.scrollArea.setObjectName(u"scrollArea") + self.scrollArea.setObjectName("scrollArea") self.scrollArea.setMinimumSize(QSize(400, 0)) self.scrollArea.setMaximumSize(QSize(400, 16777215)) - self.scrollArea.setStyleSheet(u"/*\n" -"All labels inside this scroll area should be 12px font.\n" -"This is to avoid the UI looking different in different app like\n" -"maya and nuke which all use slightly different style sheets.\n" -" */\n" -"QLabel{\n" -" font-size: 11px;\n" -" margin-bottom: 8px\n" -"}\n" -"") + self.scrollArea.setStyleSheet( + "/*\n" + "All labels inside this scroll area should be 12px font.\n" + "This is to avoid the UI looking different in different app like\n" + "maya and nuke which all use slightly different style sheets.\n" + " */\n" + "QLabel{\n" + " font-size: 11px;\n" + " margin-bottom: 8px\n" + "}\n" + "" + ) self.scrollArea.setWidgetResizable(True) self.scrollAreaWidgetContents = QWidget() - self.scrollAreaWidgetContents.setObjectName(u"scrollAreaWidgetContents") + self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") self.scrollAreaWidgetContents.setGeometry(QRect(0, 0, 398, 550)) self.verticalLayout_4 = QVBoxLayout(self.scrollAreaWidgetContents) - self.verticalLayout_4.setObjectName(u"verticalLayout_4") + self.verticalLayout_4.setObjectName("verticalLayout_4") self.horizontalLayout_4 = QHBoxLayout() - self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") + self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.app_icon = QLabel(self.scrollAreaWidgetContents) - self.app_icon.setObjectName(u"app_icon") + self.app_icon.setObjectName("app_icon") self.app_icon.setMinimumSize(QSize(64, 64)) self.app_icon.setMaximumSize(QSize(64, 64)) - self.app_icon.setPixmap(QPixmap(u":/Tank.Platform.Qt/default_app_icon_256.png")) + self.app_icon.setPixmap(QPixmap(":/Tank.Platform.Qt/default_app_icon_256.png")) self.app_icon.setScaledContents(True) self.app_icon.setAlignment(Qt.AlignCenter) @@ -229,12 +250,11 @@ def setupUi(self, TankDialog): self.verticalLayout_8 = QVBoxLayout() self.verticalLayout_8.setSpacing(1) - self.verticalLayout_8.setObjectName(u"verticalLayout_8") + self.verticalLayout_8.setObjectName("verticalLayout_8") self.app_name = QLabel(self.scrollAreaWidgetContents) - self.app_name.setObjectName(u"app_name") - self.app_name.setStyleSheet(u"font-size: 16px;\n" -"") - self.app_name.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter) + self.app_name.setObjectName("app_name") + self.app_name.setStyleSheet("font-size: 16px;\n" "") + self.app_name.setAlignment(Qt.AlignLeading | Qt.AlignLeft | Qt.AlignVCenter) self.verticalLayout_8.addWidget(self.app_name) @@ -243,61 +263,66 @@ def setupUi(self, TankDialog): self.verticalLayout_4.addLayout(self.horizontalLayout_4) self.app_description = QLabel(self.scrollAreaWidgetContents) - self.app_description.setObjectName(u"app_description") + self.app_description.setObjectName("app_description") self.app_description.setMaximumSize(QSize(350, 16777215)) self.app_description.setWordWrap(True) self.verticalLayout_4.addWidget(self.app_description) self.app_tech_details = QLabel(self.scrollAreaWidgetContents) - self.app_tech_details.setObjectName(u"app_tech_details") + self.app_tech_details.setObjectName("app_tech_details") sizePolicy1 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) sizePolicy1.setHorizontalStretch(0) sizePolicy1.setVerticalStretch(0) - sizePolicy1.setHeightForWidth(self.app_tech_details.sizePolicy().hasHeightForWidth()) + sizePolicy1.setHeightForWidth( + self.app_tech_details.sizePolicy().hasHeightForWidth() + ) self.app_tech_details.setSizePolicy(sizePolicy1) self.app_tech_details.setMinimumSize(QSize(0, 22)) self.app_tech_details.setMaximumSize(QSize(16777215, 22)) - self.app_tech_details.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter) + self.app_tech_details.setAlignment( + Qt.AlignLeading | Qt.AlignLeft | Qt.AlignVCenter + ) self.app_tech_details.setWordWrap(True) self.verticalLayout_4.addWidget(self.app_tech_details) self.horizontalLayout_9 = QHBoxLayout() self.horizontalLayout_9.setSpacing(2) - self.horizontalLayout_9.setObjectName(u"horizontalLayout_9") + self.horizontalLayout_9.setObjectName("horizontalLayout_9") self.btn_documentation = QToolButton(self.scrollAreaWidgetContents) - self.btn_documentation.setObjectName(u"btn_documentation") + self.btn_documentation.setObjectName("btn_documentation") self.horizontalLayout_9.addWidget(self.btn_documentation) self.btn_support = QToolButton(self.scrollAreaWidgetContents) - self.btn_support.setObjectName(u"btn_support") + self.btn_support.setObjectName("btn_support") self.horizontalLayout_9.addWidget(self.btn_support) - self.horizontalSpacer_5 = QSpacerItem(0, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.horizontalSpacer_5 = QSpacerItem( + 0, 20, QSizePolicy.Expanding, QSizePolicy.Minimum + ) self.horizontalLayout_9.addItem(self.horizontalSpacer_5) self.verticalLayout_4.addLayout(self.horizontalLayout_9) self.label_5 = QLabel(self.scrollAreaWidgetContents) - self.label_5.setObjectName(u"label_5") - self.label_5.setStyleSheet(u"font-size: 16px;\n" -"margin-top: 30px;") + self.label_5.setObjectName("label_5") + self.label_5.setStyleSheet("font-size: 16px;\n" "margin-top: 30px;") self.verticalLayout_4.addWidget(self.label_5) self.line = QFrame(self.scrollAreaWidgetContents) - self.line.setObjectName(u"line") + self.line.setObjectName("line") self.line.setFrameShape(QFrame.HLine) self.line.setFrameShadow(QFrame.Sunken) self.verticalLayout_4.addWidget(self.line) self.app_work_area_info = QLabel(self.scrollAreaWidgetContents) - self.app_work_area_info.setObjectName(u"app_work_area_info") + self.app_work_area_info.setObjectName("app_work_area_info") self.app_work_area_info.setMaximumSize(QSize(350, 16777215)) self.app_work_area_info.setWordWrap(True) @@ -305,51 +330,52 @@ def setupUi(self, TankDialog): self.horizontalLayout_10 = QHBoxLayout() self.horizontalLayout_10.setSpacing(2) - self.horizontalLayout_10.setObjectName(u"horizontalLayout_10") + self.horizontalLayout_10.setObjectName("horizontalLayout_10") self.btn_file_system = QToolButton(self.scrollAreaWidgetContents) - self.btn_file_system.setObjectName(u"btn_file_system") + self.btn_file_system.setObjectName("btn_file_system") self.horizontalLayout_10.addWidget(self.btn_file_system) self.btn_shotgun = QToolButton(self.scrollAreaWidgetContents) - self.btn_shotgun.setObjectName(u"btn_shotgun") + self.btn_shotgun.setObjectName("btn_shotgun") self.horizontalLayout_10.addWidget(self.btn_shotgun) - self.horizontalSpacer_6 = QSpacerItem(0, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + self.horizontalSpacer_6 = QSpacerItem( + 0, 20, QSizePolicy.Expanding, QSizePolicy.Minimum + ) self.horizontalLayout_10.addItem(self.horizontalSpacer_6) self.verticalLayout_4.addLayout(self.horizontalLayout_10) self.app_work_area_info_2 = QLabel(self.scrollAreaWidgetContents) - self.app_work_area_info_2.setObjectName(u"app_work_area_info_2") + self.app_work_area_info_2.setObjectName("app_work_area_info_2") self.app_work_area_info_2.setMaximumSize(QSize(350, 16777215)) self.app_work_area_info_2.setWordWrap(True) self.verticalLayout_4.addWidget(self.app_work_area_info_2) self.btn_reload = QToolButton(self.scrollAreaWidgetContents) - self.btn_reload.setObjectName(u"btn_reload") + self.btn_reload.setObjectName("btn_reload") self.verticalLayout_4.addWidget(self.btn_reload) self.config_header = QLabel(self.scrollAreaWidgetContents) - self.config_header.setObjectName(u"config_header") - self.config_header.setStyleSheet(u"font-size: 16px;\n" -"margin-top: 30px;") + self.config_header.setObjectName("config_header") + self.config_header.setStyleSheet("font-size: 16px;\n" "margin-top: 30px;") self.verticalLayout_4.addWidget(self.config_header) self.config_line = QFrame(self.scrollAreaWidgetContents) - self.config_line.setObjectName(u"config_line") + self.config_line.setObjectName("config_line") self.config_line.setFrameShape(QFrame.HLine) self.config_line.setFrameShadow(QFrame.Sunken) self.verticalLayout_4.addWidget(self.config_line) self.config_label = QLabel(self.scrollAreaWidgetContents) - self.config_label.setObjectName(u"config_label") + self.config_label.setObjectName("config_label") self.config_label.setMaximumSize(QSize(350, 16777215)) self.config_label.setWordWrap(True) @@ -357,11 +383,13 @@ def setupUi(self, TankDialog): self.config_layout = QVBoxLayout() self.config_layout.setSpacing(20) - self.config_layout.setObjectName(u"config_layout") + self.config_layout.setObjectName("config_layout") self.verticalLayout_4.addLayout(self.config_layout) - self.verticalSpacer_2 = QSpacerItem(328, 0, QSizePolicy.Minimum, QSizePolicy.Expanding) + self.verticalSpacer_2 = QSpacerItem( + 328, 0, QSizePolicy.Minimum, QSizePolicy.Expanding + ) self.verticalLayout_4.addItem(self.verticalSpacer_2) @@ -380,41 +408,94 @@ def setupUi(self, TankDialog): self.stackedWidget.setCurrentIndex(0) QMetaObject.connectSlotsByName(TankDialog) + # setupUi def retranslateUi(self, TankDialog): - TankDialog.setWindowTitle(QCoreApplication.translate("TankDialog", u"Dialog", None)) + TankDialog.setWindowTitle( + QCoreApplication.translate("TankDialog", "Dialog", None) + ) self.top_group.setTitle("") self.tank_logo.setText("") - self.label.setText(QCoreApplication.translate("TankDialog", u"TextLabel", None)) -#if QT_CONFIG(tooltip) - self.lbl_context.setToolTip(QCoreApplication.translate("TankDialog", u"foo bar", None)) -#endif // QT_CONFIG(tooltip) - self.lbl_context.setText(QCoreApplication.translate("TankDialog", u"Current Work Area:\n" -"TextLabel", None)) -#if QT_CONFIG(tooltip) - self.details_show.setToolTip(QCoreApplication.translate("TankDialog", u"Click for App Details", None)) -#endif // QT_CONFIG(tooltip) + self.label.setText(QCoreApplication.translate("TankDialog", "TextLabel", None)) + # if QT_CONFIG(tooltip) + self.lbl_context.setToolTip( + QCoreApplication.translate("TankDialog", "foo bar", None) + ) + # endif // QT_CONFIG(tooltip) + self.lbl_context.setText( + QCoreApplication.translate( + "TankDialog", "Current Work Area:\n" "TextLabel", None + ) + ) + # if QT_CONFIG(tooltip) + self.details_show.setToolTip( + QCoreApplication.translate("TankDialog", "Click for App Details", None) + ) + # endif // QT_CONFIG(tooltip) self.details_show.setText("") -#if QT_CONFIG(tooltip) - self.details_hide.setToolTip(QCoreApplication.translate("TankDialog", u"Hide App Details", None)) -#endif // QT_CONFIG(tooltip) + # if QT_CONFIG(tooltip) + self.details_hide.setToolTip( + QCoreApplication.translate("TankDialog", "Hide App Details", None) + ) + # endif // QT_CONFIG(tooltip) self.details_hide.setText("") self.page_2_group.setTitle("") self.label_3.setText("") self.gradient.setTitle("") self.app_icon.setText("") - self.app_name.setText(QCoreApplication.translate("TankDialog", u"Publish And Snapshot", None)) - self.app_description.setText(QCoreApplication.translate("TankDialog", u"Tools to see what is out of date in your scene etc etc.", None)) - self.app_tech_details.setText(QCoreApplication.translate("TankDialog", u"tk-multi-snapshot, v1.2.3", None)) - self.btn_documentation.setText(QCoreApplication.translate("TankDialog", u"Documentation", None)) - self.btn_support.setText(QCoreApplication.translate("TankDialog", u"Help && Support", None)) - self.label_5.setText(QCoreApplication.translate("TankDialog", u"Your Current Work Area", None)) - self.app_work_area_info.setText(QCoreApplication.translate("TankDialog", u"TextLabel", None)) - self.btn_file_system.setText(QCoreApplication.translate("TankDialog", u"Jump to File System", None)) - self.btn_shotgun.setText(QCoreApplication.translate("TankDialog", u"Jump to Flow Production Tracking", None)) - self.app_work_area_info_2.setText(QCoreApplication.translate("TankDialog", u"If you are making changes to configuration or code, use the reload button to quickly load your changes in without having to restart:", None)) - self.btn_reload.setText(QCoreApplication.translate("TankDialog", u"Reload Engine and Apps", None)) - self.config_header.setText(QCoreApplication.translate("TankDialog", u"Configuration", None)) - self.config_label.setText(QCoreApplication.translate("TankDialog", u"Below is a list of all the configuration settings for this app, as defined in your environment file:", None)) + self.app_name.setText( + QCoreApplication.translate("TankDialog", "Publish And Snapshot", None) + ) + self.app_description.setText( + QCoreApplication.translate( + "TankDialog", + "Tools to see what is out of date in your scene etc etc.", + None, + ) + ) + self.app_tech_details.setText( + QCoreApplication.translate("TankDialog", "tk-multi-snapshot, v1.2.3", None) + ) + self.btn_documentation.setText( + QCoreApplication.translate("TankDialog", "Documentation", None) + ) + self.btn_support.setText( + QCoreApplication.translate("TankDialog", "Help && Support", None) + ) + self.label_5.setText( + QCoreApplication.translate("TankDialog", "Your Current Work Area", None) + ) + self.app_work_area_info.setText( + QCoreApplication.translate("TankDialog", "TextLabel", None) + ) + self.btn_file_system.setText( + QCoreApplication.translate("TankDialog", "Jump to File System", None) + ) + self.btn_shotgun.setText( + QCoreApplication.translate( + "TankDialog", "Jump to Flow Production Tracking", None + ) + ) + self.app_work_area_info_2.setText( + QCoreApplication.translate( + "TankDialog", + "If you are making changes to configuration or code, use the reload button to quickly load your changes in without having to restart:", + None, + ) + ) + self.btn_reload.setText( + QCoreApplication.translate("TankDialog", "Reload Engine and Apps", None) + ) + self.config_header.setText( + QCoreApplication.translate("TankDialog", "Configuration", None) + ) + self.config_label.setText( + QCoreApplication.translate( + "TankDialog", + "Below is a list of all the configuration settings for this app, as defined in your environment file:", + None, + ) + ) + # retranslateUi diff --git a/python/tk-core/python/tank/platform/software_launcher.py b/python/tk-core/python/tank/platform/software_launcher.py index 39764c4e..96340d05 100644 --- a/python/tk-core/python/tank/platform/software_launcher.py +++ b/python/tk-core/python/tank/platform/software_launcher.py @@ -13,20 +13,18 @@ should implement. """ -import os -import sys import glob +import os import pprint +import sys from ..errors import TankError from ..log import LogManager +from ..util import ShotgunPath, is_windows +from ..util import sgre as re from ..util.loader import load_plugin from ..util.version import is_version_older -from ..util import ShotgunPath, is_windows, sgre as re - -from . import constants -from . import validation - +from . import constants, validation from .bundle import resolve_setting_value from .engine import get_env_and_descriptor_for_engine @@ -79,9 +77,7 @@ def create_engine_launcher(tk, context, engine_name, versions=None, products=Non on disk. """ # Get the engine environment and descriptor using engine.py code - (env, engine_descriptor) = get_env_and_descriptor_for_engine( - engine_name, tk, context - ) + env, engine_descriptor = get_env_and_descriptor_for_engine(engine_name, tk, context) # Make sure it exists locally if not engine_descriptor.exists_local(): diff --git a/python/tk-core/python/tank/platform/util.py b/python/tk-core/python/tank/platform/util.py index 903d918b..be642720 100644 --- a/python/tk-core/python/tank/platform/util.py +++ b/python/tk-core/python/tank/platform/util.py @@ -10,11 +10,11 @@ import logging -from .import_stack import ImportStack from ..errors import TankError -from .errors import TankContextChangeNotSupportedError, TankCurrentModuleNotFoundError -from .engine import current_engine, _restart_engine from ..log import LogManager +from .engine import _restart_engine, current_engine +from .errors import TankContextChangeNotSupportedError, TankCurrentModuleNotFoundError +from .import_stack import ImportStack def _get_current_bundle(): diff --git a/python/tk-core/python/tank/platform/validation.py b/python/tk-core/python/tank/platform/validation.py index e4a219fb..fb73ceed 100644 --- a/python/tk-core/python/tank/platform/validation.py +++ b/python/tk-core/python/tank/platform/validation.py @@ -12,15 +12,16 @@ App configuration and schema validation. """ + import os import sys -from . import constants from ..errors import TankError, TankNoDefaultValueError +from ..log import LogManager from ..template import TemplateString +from ..util.version import is_version_number, is_version_older +from . import constants from .bundle import resolve_default_value -from ..util.version import is_version_older, is_version_number -from ..log import LogManager # We're potentially running here in an environment with # no engine available via current_engine(), so we'll have @@ -354,7 +355,7 @@ def __validate_schema_type(self, settings_key, data_type): % (settings_key, self._display_name) ) - if not data_type in constants.TANK_SCHEMA_VALID_TYPES: + if data_type not in constants.TANK_SCHEMA_VALID_TYPES: params = (data_type, settings_key, self._display_name) raise TankError("Invalid type '%s' in schema '%s' for '%s'!" % params) @@ -406,14 +407,14 @@ def __validate_schema_value(self, settings_key, schema): def __validate_schema_list(self, settings_key, schema): # Check that the schema contains "values" - if not "values" in schema or type(schema["values"]) != dict: + if "values" not in schema or not isinstance(schema["values"], dict): params = (settings_key, self._display_name) raise TankError( "Missing or invalid 'values' dict in schema '%s' for '%s'!" % params ) # If there's an "allows_empty" key, it should be a bool - if "allows_empty" in schema and type(schema["allows_empty"]) != bool: + if "allows_empty" in schema and not isinstance(schema["allows_empty"], bool): params = (settings_key, self._display_name) raise TankError( "Invalid 'allows_empty' bool in schema '%s' for '%s'!" % params @@ -423,13 +424,13 @@ def __validate_schema_list(self, settings_key, schema): def __validate_schema_dict(self, settings_key, schema): # Check that if the schema contains "items" then it must be a dict - if "items" in schema and type(schema["items"]) != dict: + if "items" in schema and not isinstance(schema["items"], dict): params = (settings_key, self._display_name) raise TankError("Invalid 'items' dict in schema '%s' for '%s'!" % params) for key, value_schema in schema.get("items", {}).items(): # Check that the value is a dict, and validate it... - if type(value_schema) != dict: + if not isinstance(value_schema, dict): params = (key, settings_key, self._display_name) raise TankError("Invalid '%s' dict in schema '%s' for '%s'" % params) @@ -438,19 +439,21 @@ def __validate_schema_dict(self, settings_key, schema): def __validate_schema_template(self, settings_key, schema): # new style template def: if there is a fields key, it should be a str - if "fields" in schema and type(schema["fields"]) != str: + if "fields" in schema and not isinstance(schema["fields"], str): params = (settings_key, self._display_name) raise TankError("Invalid 'fields' string in schema '%s' for '%s'!" % params) # old-style - if there's a required_fields key, it should contain a list of strs. - if "required_fields" in schema and type(schema["required_fields"]) != list: + if "required_fields" in schema and not isinstance( + schema["required_fields"], list + ): params = (settings_key, self._display_name) raise TankError( "Invalid 'required_fields' list in schema '%s' for '%s'!" % params ) for field in schema.get("required_fields", []): - if type(field) != str: + if not isinstance(field, str): params = (field, settings_key, self._display_name) raise TankError( "Invalid 'required_fields' value '%s' in schema '%s' for '%s'!" @@ -458,9 +461,9 @@ def __validate_schema_template(self, settings_key, schema): ) # old-style - if there's an optional_fields key, it should contain a list of strs or be "*" - if "optional_fields" in schema and type(schema["optional_fields"]) == list: + if "optional_fields" in schema and isinstance(schema["optional_fields"], list): for field in schema.get("optional_fields", []): - if type(field) != str: + if not isinstance(field, str): params = (field, settings_key, self._display_name) raise TankError( "Invalid 'optional_fields' value '%s' in schema '%s' for '%s'!" @@ -473,7 +476,7 @@ def __validate_schema_template(self, settings_key, schema): ) # If there's an "allows_empty" key, it should be a bool - if "allows_empty" in schema and type(schema["allows_empty"]) != bool: + if "allows_empty" in schema and not isinstance(schema["allows_empty"], bool): params = (settings_key, self._display_name) raise TankError( "Invalid 'allows_empty' bool in schema '%s' for '%s'!" % params @@ -542,7 +545,7 @@ def __validate_settings_value(self, settings_key, schema, value): data_type = schema.get("type") # functor values which refer to a hook are never validated - if type(value) == str and value.startswith("hook:"): + if isinstance(value, str) and value.startswith("hook:"): return # shotgun filters can be a variety of formats so assume it is @@ -604,7 +607,7 @@ def __validate_settings_dict(self, settings_key, schema, value): items = schema.get("items", {}) for key, value_schema in items.items(): # Check for required keys - if not key in value: + if key not in value: params = (key, settings_key, self._display_name) raise TankError( "Missing required key '%s' in setting '%s' for '%s'" % params @@ -890,7 +893,7 @@ def __validate_new_style_template(self, cur_template, fields_str): # one or more mandatory issues. No point checking further return problems - if star == True: + if star: # means an open ended number of fields can be used. # no need to do more validation return problems diff --git a/python/tk-core/python/tank/template.py b/python/tk-core/python/tank/template.py index d5f41f04..5a76a62e 100644 --- a/python/tk-core/python/tank/template.py +++ b/python/tk-core/python/tank/template.py @@ -16,11 +16,12 @@ import os import sys -from . import templatekey +from tank.util import is_linux, is_macos, is_windows +from tank.util import sgre as re + +from . import constants, templatekey from .errors import TankError -from . import constants from .template_path_parser import TemplatePathParser -from tank.util import is_linux, is_macos, is_windows, sgre as re class Template(object): @@ -474,7 +475,7 @@ def validate(self, path, fields=None, skip_keys=None): :returns: True if the path is valid for this template :rtype: Bool """ - return self.validate_and_get_fields(path, fields, skip_keys) != None + return self.validate_and_get_fields(path, fields, skip_keys) is not None def get_fields(self, input_path, skip_keys=None): """ @@ -503,7 +504,7 @@ def get_fields(self, input_path, skip_keys=None): for ordered_keys, static_tokens in zip(self._ordered_keys, self._static_tokens): path_parser = TemplatePathParser(ordered_keys, static_tokens) fields = path_parser.parse_path(input_path, skip_keys) - if fields != None: + if fields is not None: break if fields is None: diff --git a/python/tk-core/python/tank/template_includes.py b/python/tk-core/python/tank/template_includes.py index 18e3e082..dc4d7a1c 100644 --- a/python/tk-core/python/tank/template_includes.py +++ b/python/tk-core/python/tank/template_includes.py @@ -28,10 +28,8 @@ """ -import os - -from .errors import TankError from . import constants +from .errors import TankError from .util import yaml_cache from .util.includes import resolve_include diff --git a/python/tk-core/python/tank/template_path_parser.py b/python/tk-core/python/tank/template_path_parser.py index f703617a..bab1e1ca 100644 --- a/python/tk-core/python/tank/template_path_parser.py +++ b/python/tk-core/python/tank/template_path_parser.py @@ -13,6 +13,7 @@ """ import os + from .errors import TankError diff --git a/python/tk-core/python/tank/templatekey.py b/python/tk-core/python/tank/templatekey.py index b165eaf3..c3276b9f 100644 --- a/python/tk-core/python/tank/templatekey.py +++ b/python/tk-core/python/tank/templatekey.py @@ -12,9 +12,9 @@ Classes for fields on TemplatePaths and TemplateStrings """ -import sys import collections.abc import datetime + from . import constants from .errors import TankError from .util import sgre as re @@ -514,7 +514,7 @@ def _as_string(self, value): if match is None: # no match. return empty string # validate should prevent this from happening - resolved_value = u"" + resolved_value = "" elif self._subset_format: # we have an explicit format string we want to apply to the match. @@ -1099,9 +1099,7 @@ def validate(self, value): error_msg += "Valid frame specs: %s\n" % str(self._frame_specs) error_msg += "Valid format strings: %s\n" % full_format_strings - if isinstance(value, str) and value.startswith( - self.FRAMESPEC_FORMAT_INDICATOR - ): + if isinstance(value, str) and value.startswith(self.FRAMESPEC_FORMAT_INDICATOR): # FORMAT: YXZ string - check that XYZ is in VALID_FORMAT_STRINGS pattern = self._extract_format_string(value) if pattern in self.VALID_FORMAT_STRINGS: @@ -1110,9 +1108,7 @@ def validate(self, value): self._last_error = error_msg return False - elif isinstance(value, str) and re.match( - self.FLAME_PATTERN_REGEX, value - ): + elif isinstance(value, str) and re.match(self.FLAME_PATTERN_REGEX, value): # value is matching the flame-style sequence pattern # [1234-5678] return True @@ -1131,16 +1127,12 @@ def validate(self, value): def _as_string(self, value): - if isinstance(value, str) and value.startswith( - self.FRAMESPEC_FORMAT_INDICATOR - ): + if isinstance(value, str) and value.startswith(self.FRAMESPEC_FORMAT_INDICATOR): # this is a FORMAT: XYZ - convert it to the proper resolved frame spec pattern = self._extract_format_string(value) return self._resolve_frame_spec(pattern, self.format_spec) - if isinstance(value, str) and re.match( - self.FLAME_PATTERN_REGEX, value - ): + if isinstance(value, str) and re.match(self.FLAME_PATTERN_REGEX, value): # this is a flame style sequence token [1234-56773] return value @@ -1167,9 +1159,7 @@ def _extract_format_string(self, value): """ Returns XYZ given the string "FORMAT: XYZ" """ - if isinstance(value, str) and value.startswith( - self.FRAMESPEC_FORMAT_INDICATOR - ): + if isinstance(value, str) and value.startswith(self.FRAMESPEC_FORMAT_INDICATOR): pattern = value.replace(self.FRAMESPEC_FORMAT_INDICATOR, "").strip() else: # passthrough diff --git a/python/tk-core/python/tank/util/__init__.py b/python/tk-core/python/tank/util/__init__.py index 80a7e284..6b304350 100644 --- a/python/tk-core/python/tank/util/__init__.py +++ b/python/tk-core/python/tank/util/__init__.py @@ -8,51 +8,42 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -from .platforms import is_windows, is_linux, is_macos -from .shotgun import register_publish -from .shotgun import resolve_publish_path -from .shotgun import find_publish -from .shotgun import download_url -from .shotgun import create_event_log_entry -from .shotgun import get_entity_type_display_name -from .shotgun import get_published_file_entity_type +from . import filesystem, json, pickle +from .environment import append_path_to_env_var, prepend_path_to_env_var +from .errors import ( + EnvironmentVariableFileLookupError, + PublishPathNotDefinedError, + PublishPathNotSupported, + PublishResolveError, + ShotgunAttachmentDownloadError, + ShotgunPublishError, + UnresolvableCoreConfigurationError, +) +from .local_file_storage import LocalFileStorageManager +from .login import get_current_user, get_shotgun_user +# DO keep the following two log_user_*_metric to preserve retro +# compatibility and prevent exception in legacy engine code. +from .metrics import EventMetric, log_user_activity_metric, log_user_attribute_metric +from .platforms import is_linux, is_macos, is_windows +from .shotgun import ( + create_event_log_entry, + download_url, + find_publish, + get_entity_type_display_name, + get_published_file_entity_type, + register_publish, + resolve_publish_path, +) +from .shotgun_entity import get_sg_entity_name_field +from .shotgun_path import ShotgunPath +from .storage_roots import StorageRoots +from .user_settings import UserSettings from .version import ( - is_version_older, is_version_newer, - is_version_older_or_equal, is_version_newer_or_equal, + is_version_older, + is_version_older_or_equal, suppress_known_deprecation, version_parse, ) - -from .shotgun_entity import get_sg_entity_name_field - -from .environment import append_path_to_env_var -from .environment import prepend_path_to_env_var - -from .login import get_shotgun_user -from .login import get_current_user - -# DO keep the following two log_user_*_metric to preserve retro -# compatibility and prevent exception in legacy engine code. -from .metrics import log_user_activity_metric -from .metrics import log_user_attribute_metric -from .metrics import EventMetric -from .shotgun_path import ShotgunPath - -from . import filesystem -from . import pickle -from . import json - -from .local_file_storage import LocalFileStorageManager - -from .errors import PublishResolveError -from .errors import UnresolvableCoreConfigurationError, ShotgunAttachmentDownloadError -from .errors import EnvironmentVariableFileLookupError, ShotgunPublishError -from .errors import PublishResolveError -from .errors import PublishPathNotDefinedError, PublishPathNotSupported - -from .user_settings import UserSettings - -from .storage_roots import StorageRoots diff --git a/python/tk-core/python/tank/util/environment.py b/python/tk-core/python/tank/util/environment.py index b572555d..a0cef9b6 100644 --- a/python/tk-core/python/tank/util/environment.py +++ b/python/tk-core/python/tank/util/environment.py @@ -13,6 +13,7 @@ """ import os + from .platforms import is_windows diff --git a/python/tk-core/python/tank/util/filesystem.py b/python/tk-core/python/tank/util/filesystem.py index 6a36d6e0..ab2c1742 100644 --- a/python/tk-core/python/tank/util/filesystem.py +++ b/python/tk-core/python/tank/util/filesystem.py @@ -11,15 +11,15 @@ Utility methods for manipulating files and folders """ +import datetime +import errno +import functools import os import re -import sys -import errno -import stat import shutil -import datetime -import functools +import stat import subprocess +import sys from contextlib import contextmanager from .. import LogManager diff --git a/python/tk-core/python/tank/util/includes.py b/python/tk-core/python/tank/util/includes.py index 1b3708f7..d9c39ede 100644 --- a/python/tk-core/python/tank/util/includes.py +++ b/python/tk-core/python/tank/util/includes.py @@ -8,14 +8,13 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. +import ntpath import os -import sys import posixpath -import ntpath -from .shotgun_path import ShotgunPath -from .platforms import is_windows from ..errors import TankError +from .platforms import is_windows +from .shotgun_path import ShotgunPath def _is_abs(path): diff --git a/python/tk-core/python/tank/util/json.py b/python/tk-core/python/tank/util/json.py index 896cd4e7..2d303766 100644 --- a/python/tk-core/python/tank/util/json.py +++ b/python/tk-core/python/tank/util/json.py @@ -14,8 +14,9 @@ # We need to add this to the file or the import json will reimport this # module instead of importing the global json module. from __future__ import absolute_import -import sys + import json +import sys from .unicode import ensure_contains_str diff --git a/python/tk-core/python/tank/util/loader.py b/python/tk-core/python/tank/util/loader.py index 3f81a0be..4b30b84b 100644 --- a/python/tk-core/python/tank/util/loader.py +++ b/python/tk-core/python/tank/util/loader.py @@ -13,13 +13,13 @@ """ -import sys import importlib.util -import traceback import inspect +import sys +import traceback -from ..errors import TankError from .. import LogManager +from ..errors import TankError log = LogManager.get_logger(__name__) @@ -57,8 +57,8 @@ def load_plugin(plugin_file, valid_base_class, alternate_base_classes=None): try: plugin_spec = importlib.util.spec_from_file_location(module_uid, plugin_file) module = importlib.util.module_from_spec(plugin_spec) - plugin_spec.loader.exec_module(module) sys.modules[module.__name__] = module + plugin_spec.loader.exec_module(module) except Exception: # log the full callstack to make sure that whatever the # calling code is doing, this error is logged to help @@ -66,7 +66,7 @@ def load_plugin(plugin_file, valid_base_class, alternate_base_classes=None): log.exception("Cannot load plugin file '%s'" % plugin_file) # dump out the callstack for this one -- to help people get good messages when there is a plugin error - (exc_type, exc_value, exc_traceback) = sys.exc_info() + exc_type, exc_value, exc_traceback = sys.exc_info() message = "" message += ( "Failed to load plugin %s. The following error was reported:\n" diff --git a/python/tk-core/python/tank/util/local_file_storage.py b/python/tk-core/python/tank/util/local_file_storage.py index 6215586e..ff805a6c 100644 --- a/python/tk-core/python/tank/util/local_file_storage.py +++ b/python/tk-core/python/tank/util/local_file_storage.py @@ -57,10 +57,10 @@ class LocalFileStorageManager(object): """ # generation of path structures - (CORE_V17, CORE_V18) = range(2) + CORE_V17, CORE_V18 = range(2) # supported types of paths - (LOGGING, CACHE, PERSISTENT, PREFERENCES) = range(4) + LOGGING, CACHE, PERSISTENT, PREFERENCES = range(4) @classmethod def get_global_root(cls, path_type, generation=CORE_V18): diff --git a/python/tk-core/python/tank/util/login.py b/python/tk-core/python/tank/util/login.py index 442cb377..31e99232 100644 --- a/python/tk-core/python/tank/util/login.py +++ b/python/tk-core/python/tank/util/login.py @@ -14,7 +14,6 @@ """ import os -import sys from . import constants from .platforms import is_windows @@ -34,7 +33,7 @@ def get_login_name(): pwd_entry = pwd.getpwuid(os.geteuid()) return pwd_entry[0] - except: + except Exception: return None diff --git a/python/tk-core/python/tank/util/metrics.py b/python/tk-core/python/tank/util/metrics.py index 022de787..521f183c 100644 --- a/python/tk-core/python/tank/util/metrics.py +++ b/python/tk-core/python/tank/util/metrics.py @@ -72,7 +72,7 @@ def get_darwin_version(cls): # For macOS / OSX we keep only the Major.minor os_version = re.findall(r"\d*\.\d*", raw_version_str)[0] - except: + except Exception: pass return os_version @@ -96,7 +96,7 @@ def get_linux_version(cls): major_version_str = re.findall(r"\d*", raw_version_str)[0] os_version = "%s %s" % (distribution, major_version_str) - except: + except Exception: pass return os_version @@ -116,7 +116,7 @@ def get_windows_version(cls): # as it returns a friendly name e.g: XP, 7, 10 etc. os_version = platform.release() - except: + except Exception: pass return os_version @@ -161,7 +161,7 @@ def get_platform_info(cls): else: os_info["OS"] = "Unsupported system: (%s)" % (system) - except: + except Exception: # On any exception we fallback to default value pass @@ -243,7 +243,7 @@ def log(self, metric, log_once=False): # remember that we've logged this one already self.__logged_metrics.add(metric_identifier) - except: + except Exception: pass finally: self._lock.release() @@ -275,7 +275,7 @@ def get_metrics(self, count=None): # would be nice to be able to pop N from deque. oh well. metrics = [self._queue.popleft() for i in range(0, count)] - except: + except Exception: pass finally: self._lock.release() @@ -434,7 +434,7 @@ def run(self): else: break - except Exception as e: + except Exception: pass finally: # wait, checking for halt event before more processing @@ -790,7 +790,7 @@ def log(cls, group, name, properties=None, log_once=False, bundle=None): from sgtk.platform.util import current_bundle bundle = current_bundle() - except: + except Exception: pass if not bundle: @@ -800,7 +800,7 @@ def log(cls, group, name, properties=None, log_once=False, bundle=None): from ..platform.engine import current_engine bundle = current_engine() - except: + except Exception: # Bailing out trying to guess bundle pass diff --git a/python/tk-core/python/tank/util/metrics_cache.py b/python/tk-core/python/tank/util/metrics_cache.py index 4e5ec77d..9693addd 100644 --- a/python/tk-core/python/tank/util/metrics_cache.py +++ b/python/tk-core/python/tank/util/metrics_cache.py @@ -29,9 +29,8 @@ import json import os -from . import metrics - from .. import LogManager +from . import metrics logger = LogManager.get_logger(__name__) @@ -97,7 +96,7 @@ def consume(): logger.debug("Invalid cached metric format") continue - (args, kwargs) = data + args, kwargs = data if not isinstance(args, list) or not isinstance(kwargs, dict): logger.debug("Invalid cached metric format") continue diff --git a/python/tk-core/python/tank/util/process.py b/python/tk-core/python/tank/util/process.py index 34fd5e86..6fd585e0 100644 --- a/python/tk-core/python/tank/util/process.py +++ b/python/tk-core/python/tank/util/process.py @@ -8,11 +8,11 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -import subprocess import pprint +import subprocess -from .platforms import is_windows from ..log import LogManager +from .platforms import is_windows logger = LogManager.get_logger(__name__) diff --git a/python/tk-core/python/tank/util/pyside2_patcher.py b/python/tk-core/python/tank/util/pyside2_patcher.py index 7ef8ae83..974269fc 100644 --- a/python/tk-core/python/tank/util/pyside2_patcher.py +++ b/python/tk-core/python/tank/util/pyside2_patcher.py @@ -12,10 +12,10 @@ PySide 2 backwards compatibility layer for use with PySide 1 code. """ -import os -import sys import functools +import os import subprocess +import sys import types import warnings import webbrowser @@ -328,7 +328,7 @@ def openUrl(cls, url): # returns False or raises some error. try: return webbrowser.open_new_tab(url.toString().encode("utf-8")) - except: + except Exception: return False @classmethod diff --git a/python/tk-core/python/tank/util/pyside6_patcher.py b/python/tk-core/python/tank/util/pyside6_patcher.py index 5aed21d8..0cef38f0 100644 --- a/python/tk-core/python/tank/util/pyside6_patcher.py +++ b/python/tk-core/python/tank/util/pyside6_patcher.py @@ -91,7 +91,7 @@ def _patch_QTextCodec(cls, QtCore): QTextCodec has been removed in Qt6. Using this class will do nothing. """ - class QTextCodec(): + class QTextCodec: @staticmethod def codecForName(name): return None @@ -135,7 +135,6 @@ def grabWindow(window=0, x=0, y=0, width=-1, height=-1): screen = QtGui.QApplication.primaryScreen() return screen.grabWindow(window, x, y, width, height) - QtGui.QPixmap = QPixmap @classmethod @@ -153,7 +152,6 @@ def pixmap(self, *args, **kwargs): QtGui.QIcon.pixmap = pixmap - @classmethod def _patch_QLabel(cls, QtGui): """ @@ -229,11 +227,11 @@ def emit(screen_index): screens = QtGui.QGuiApplication.screens() screen = screens[screen_index] screen.geometryChanged.emit() - except: + except Exception: pass - original_QScreen_availableGeometry = QtGui.QScreen.availableGeometry + def availableGeometry(self, arg__1=None): """ Patch QScreen to also act as QDesktopWidget. @@ -298,7 +296,9 @@ def _patch_QOpenGLContext(cls, QtGui): def versionFunctions(self, version_profile=None): if version_profile: - return QtGui.QOpenGLVersionFunctionsFactory.get(versionProfile=version_profile, context=self) + return QtGui.QOpenGLVersionFunctionsFactory.get( + versionProfile=version_profile, context=self + ) return QtGui.QOpenGLVersionFunctionsFactory.get(context=self) QtGui.QOpenGLContext.versionFunctions = versionFunctions @@ -352,18 +352,39 @@ def __init__(self, *args, **kwargs): if case_sensitivity is None: original_QRegularExpression.__init__(self, args[0]) else: - if case_sensitivity == original_QRegularExpression.CaseInsensitiveOption: + if ( + case_sensitivity + == original_QRegularExpression.CaseInsensitiveOption + ): opts = original_QRegularExpression.CaseInsensitiveOption else: opts = original_QRegularExpression.NoPatternOption - original_QRegularExpression.__init__(self, args[0], options=opts) + original_QRegularExpression.__init__( + self, args[0], options=opts + ) - self.isEmpty = lambda *args, **kwargs: QRegularExpression.isEmpty(self, *args, **kwargs) - self.indexIn = lambda *args, **kwargs: QRegularExpression.indexIn(self, *args, **kwargs) - self.matchedLength = lambda *args, **kwargs: QRegularExpression.matchedLength(self, *args, **kwargs) - self.setCaseSensitivity = lambda *args, **kwargs: QRegularExpression.setCaseSensitivity(self, *args, **kwargs) - self.pos = lambda *args, **kwargs: QRegularExpression.pos(self, *args, **kwargs) - self.cap = lambda *args, **kwargs: QRegularExpression.cap(self, *args, **kwargs) + self.isEmpty = lambda *args, **kwargs: QRegularExpression.isEmpty( + self, *args, **kwargs + ) + self.indexIn = lambda *args, **kwargs: QRegularExpression.indexIn( + self, *args, **kwargs + ) + self.matchedLength = ( + lambda *args, **kwargs: QRegularExpression.matchedLength( + self, *args, **kwargs + ) + ) + self.setCaseSensitivity = ( + lambda *args, **kwargs: QRegularExpression.setCaseSensitivity( + self, *args, **kwargs + ) + ) + self.pos = lambda *args, **kwargs: QRegularExpression.pos( + self, *args, **kwargs + ) + self.cap = lambda *args, **kwargs: QRegularExpression.cap( + self, *args, **kwargs + ) @staticmethod def isEmpty(re): @@ -426,7 +447,9 @@ def cap(re, n): QtCore.QRegularExpression.isEmpty = QRegularExpression.isEmpty QtCore.QRegularExpression.indexIn = QRegularExpression.indexIn QtCore.QRegularExpression.matchedLength = QRegularExpression.matchedLength - QtCore.QRegularExpression.setCaseSensitivity = QRegularExpression.setCaseSensitivity + QtCore.QRegularExpression.setCaseSensitivity = ( + QRegularExpression.setCaseSensitivity + ) QtCore.QRegularExpression.pos = QRegularExpression.pos # This pattern matching flag is obsolete now. @@ -452,9 +475,9 @@ def flush(): @classmethod def patch( - cls, - QtWebEngineWidgets, - QtWebEngineCore, + cls, + QtWebEngineWidgets, + QtWebEngineCore, ): """ Patch the PySide6 modules, classes and function to conform to the PySide interface. @@ -475,8 +498,8 @@ def patch( from PySide6 import ( QtCore, QtGui, - QtWidgets, QtOpenGL, + QtWidgets, ) # First create new modules to act as the PySide modules @@ -546,8 +569,12 @@ def patch( cls._patch_QRegularExpression(qt_core_shim) qt_core_shim.QRegExp = qt_core_shim.QRegularExpression # Rename RegExp functions to RegularExpression - qt_gui_shim.QSortFilterProxyModel.filterRegExp = qt_gui_shim.QSortFilterProxyModel.filterRegularExpression - qt_gui_shim.QSortFilterProxyModel.setFilterRegExp = qt_gui_shim.QSortFilterProxyModel.setFilterRegularExpression + qt_gui_shim.QSortFilterProxyModel.filterRegExp = ( + qt_gui_shim.QSortFilterProxyModel.filterRegularExpression + ) + qt_gui_shim.QSortFilterProxyModel.setFilterRegExp = ( + qt_gui_shim.QSortFilterProxyModel.setFilterRegularExpression + ) # Patch the QCoreApplication.flush() method to ensure compatibility with code # that expects this method, which is marked as obsolete. @@ -588,7 +615,9 @@ def patch( # The default timeout parameter removed. This param, if given, will be ignored. It will # always timeout after 100 ms # https://doc.qt.io/qt-6/widgets-changes-qt6.html#the-qabstractbutton-class - qt_gui_shim.QAbstractButton.animateClick = lambda self, msec=0: self.animateClick() + qt_gui_shim.QAbstractButton.animateClick = ( + lambda self, msec=0: self.animateClick() + ) # Changes to QFont # https://doc.qt.io/qt-6/gui-changes-qt6.html#the-qfont-class @@ -596,7 +625,9 @@ def patch( qt_gui_shim.QFont.setWeight = qt_gui_shim.QFont.setLegacyWeight # QHeaderView method rename - qt_gui_shim.QHeaderView.setResizeMode = qt_gui_shim.QHeaderView.setSectionResizeMode + qt_gui_shim.QHeaderView.setResizeMode = ( + qt_gui_shim.QHeaderView.setSectionResizeMode + ) # QPainter HighQualityAntialiasing is obsolete. Use Antiasliasing instead. # https://doc.qt.io/qt-5/qpainter.html#RenderHint-enum @@ -609,6 +640,8 @@ def patch( if qt_web_engine_widgets_shim: # QtWwebEngineWidgets qt_web_engine_widgets_shim.QWebEnginePage = QtWebEngineCore.QWebEnginePage - qt_web_engine_widgets_shim.QWebEngineProfile = QtWebEngineCore.QWebEngineProfile + qt_web_engine_widgets_shim.QWebEngineProfile = ( + QtWebEngineCore.QWebEngineProfile + ) return qt_core_shim, qt_gui_shim, qt_web_engine_widgets_shim diff --git a/python/tk-core/python/tank/util/qt_importer.py b/python/tk-core/python/tank/util/qt_importer.py index b0fc282e..297059a3 100644 --- a/python/tk-core/python/tank/util/qt_importer.py +++ b/python/tk-core/python/tank/util/qt_importer.py @@ -148,7 +148,6 @@ def _import_module_by_name(self, parent_module_name, module_name): except Exception as e: logger.debug("Unable to import module '%s': %s", module_name, e) - def _import_pyside2(self): """ This will be called at initialization to discover every PySide 2 modules. @@ -159,8 +158,8 @@ def _import_pyside2(self): # throw an import error which will be handled by the calling code. Note that PySide2 can be # imported even if the Qt binaries are missing, so it's better to try importing QtCore for # testing. - from PySide2 import QtCore import shiboken2 + from PySide2 import QtCore # List of all Qt 5 modules. sub_modules = [ @@ -234,8 +233,9 @@ def _import_pyside2_as_pyside(self): :returns: The (binding name, binding version, modules) tuple. """ import PySide2 - from PySide2 import QtCore, QtGui, QtWidgets import shiboken2 + from PySide2 import QtCore, QtGui, QtWidgets + from .pyside2_patcher import PySide2Patcher QtCore, QtGui = PySide2Patcher.patch(QtCore, QtGui, QtWidgets, PySide2) @@ -269,6 +269,7 @@ def _import_pyside6_as_pyside(self): # pragma: no cover import PySide6 import shiboken6 + from .pyside6_patcher import PySide6Patcher QtWebEngineWidgets, QtWebEngineCore = None, None diff --git a/python/tk-core/python/tank/util/resources/no_preview.jpg b/python/tk-core/python/tank/util/resources/no_preview.jpg deleted file mode 100644 index c523937604004686e8f789d34c887f6277ad96d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7628 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

V zronx4PLt6q4Y|IVGZajB2-q7JhP}NG_sqin5$>T(*ga?$n2*AvdYcvF!Y(KrZE!=t zZq;Him7a?+rWF3i<@iYC(FR-2lH8On1>ZicJ=R)l*m688BaC~|-a(d^nWys3wk6f% zQX&1a?V#Nn{Xtu)fh)GfKNoEK%nsyw9ZOZ{DYWQ>s_JU=e!4dYUCy!KKB2Coc- zSkUt!a7DOSfGECbtoYQZ-l7C_{4mvk+wOCKL?I3Jf}*uRASYX90%U#tEylF@k{`rv^vTO zKpT!O3SkVpfHXiT(1w3Rd_9TZ3L#Jd51{}KRZ>7BRzP%M!ls21M?L@r1OT0lKLnPD zk4GFL;DV2`3V^-%iiQ0Qf};RFw4u7>A2El_fFqncJ`JHc^zqZ@zUM@38SmkN`#{;BfPD{+Aq%3`dqSNJK*SW+AK^#cDv; ze69oUw}cq_3)%Tm%2!KC;?zv2Y6 zph{eaVnGCwanfmQu@DX500Zq)3YtN-g0=u+tXLpCcvm5zXMid~?Fu0Z5Szf5k`eG8 zf|sp$7&xy7{O}mfdgLWT3?NeQTL~*s1Q-|=z|b+;?aLG0o;HLHOH%&*1WuQRfFmPmlZU*nSOgN6 y@coJ)pJYw7)W9L;J;cwR=mKYtB9{~upbAhqtk&JDEaIF29^-#(0QQ)./pkgs.zip (per-Python-version; present in + source checkouts, absent when + tk-core is pip-installed and + dependencies come from the env) + - requirements/any/*.zip (Python-version-independent, optional) 2. Lazy import hook for transparent tank_vendor.* namespace aliasing 3. Package-specific patches (e.g., SSL certificate handling for shotgun_api3) @@ -22,16 +27,24 @@ # Direct imports work automatically: from tank_vendor import yaml from tank_vendor.shotgun_api3 import Shotgun + from tank_vendor import flow_data_sdk # Submodule imports work via lazy loading: from tank_vendor.shotgun_api3.lib import httplib2 + from tank_vendor.flow_data_sdk.base import client # Mock.patch works seamlessly: mock.patch("tank_vendor.shotgun_api3.Shotgun.find") -Supported Python versions: 3.7+ +Shared zips in requirements/any/ are loaded after pkgs.zip, so per-version +pinned packages take precedence over anything in the shared directory. +Packages whose top-level name is already registered are skipped with a +warning. + +Supported Python versions: 3.9+ """ +import os import pathlib import sys import warnings @@ -187,6 +200,12 @@ def _patched_get_certs_file(ca_certs=None): # If ca_certs explicitly provided, use original behavior if ca_certs is not None: return _original_get_certs_file(ca_certs) + # Preserve shotgun_api3's documented SHOTGUN_API_CACERTS override. + # Without this branch, a network-hosted extracted cert_file can be + # dramatically slower to open than a local override (see SG-44256). + environment_certs = os.environ.get("SHOTGUN_API_CACERTS") + if environment_certs: + return environment_certs # Otherwise return extracted certificate path instead of ZIP path return str(cert_file) @@ -199,7 +218,7 @@ def _install_import_hook(): Install a lazy import hook that redirects tank_vendor.* imports to real packages. This enables transparent namespace aliasing, allowing code to use tank_vendor.package - while the actual package is loaded from pkgs.zip without the tank_vendor prefix. + while the actual package is loaded from a ZIP without the tank_vendor prefix. Examples: from tank_vendor.shotgun_api3.lib import httplib2 @@ -227,121 +246,238 @@ def _install_import_hook(): sys.meta_path.insert(0, sys._tank_vendor_meta_finder) -# ============================================================================ -# MAIN INITIALIZATION: Load third-party packages from pkgs.zip -# ============================================================================ +def _discover_top_level_packages(zip_path): + """ + Return the set of top-level importable package names inside a zip. + + Filters out: + - .dist-info: Package metadata directories (still in zip for importlib.metadata, + but not importable as packages) + - __pycache__: Python bytecode cache + - .pyd/.so/.dylib/.dll: Platform-specific binary extensions + - _*: Private/internal modules (e.g., _ruamel_yaml.cp311-win_amd64.pyd) + """ + with zipfile.ZipFile(zip_path, "r") as zf: + top_level = set() + for name in zf.namelist(): + parts = name.split("/") + if parts[0] and not parts[0].endswith(".py"): + top_level.add(parts[0]) + elif parts[0].endswith(".py") and parts[0] != "__pycache__": + top_level.add(parts[0][:-3]) + + return { + pkg + for pkg in top_level + if not pkg.endswith(".dist-info") + and pkg != "__pycache__" + and not pkg.endswith(".py") + and not pkg.endswith(".pyd") + and not pkg.endswith(".so") + and not pkg.endswith(".dylib") + and not pkg.endswith(".dll") + and not pkg.startswith("_") + } + + +def _load_packages_from_zip(zip_path): + """ + Validate a vendor zip, insert it at the front of sys.path, and register + its top-level packages under the tank_vendor namespace. -# Construct path to Python version-specific pkgs.zip containing third-party dependencies. -# Path structure: /requirements/./pkgs.zip -# Example: requirements/3.11/pkgs.zip for Python 3.11 -pkgs_zip_path = ( - pathlib.Path(__file__).resolve().parent.parent.parent - / "requirements" - / f"{sys.version_info.major}.{sys.version_info.minor}" - / "pkgs.zip" -) + Missing or unreadable zips are tolerated (return False, with a warning + for unreadable). A wholesale failure during package discovery/import + raises RuntimeError after cleaning the zip path off sys.path. Individual + package import failures inside the zip warn and are skipped. + + Each zip is always inserted at sys.path[0], so the LAST zip loaded ends + up at the front of sys.path. Collisions are resolved by sys.modules + (first-registered wins), independent of sys.path order — see callers + for the intentional load order. + + Args: + zip_path: pathlib.Path to the zip file. + + Returns: + True if the zip was successfully loaded, False if it was missing + or unreadable. + """ + # Step 1: Validate the zip exists, is a file (not a directory of extracted + # contents, as some CI environments produce), and can be opened as a ZIP. + # Missing zips are silent (pip-installed setups have no pkgs.zip). Unreadable + # zips warn so the failure mode is visible, but don't fail the import. + if not zip_path.exists() or not zip_path.is_file(): + return False + + try: + with zipfile.ZipFile(zip_path, "r") as zf: + zf.namelist() + except (zipfile.BadZipFile, OSError, IOError) as e: + warnings.warn( + f"Failed to load packages from {zip_path}: {e}. " + "Any dependencies it would have provided will need to be resolved " + "from the Python environment, or will fail at import time.", + RuntimeWarning, + stacklevel=2, + ) + return False + + # Step 2: Put the zip on sys.path so Python can import directly from it. + # Insertion ordering is load-bearing: importlib.metadata.version() resolves + # dist-info inside a zip only after the zip is on sys.path. + sys.path.insert(0, str(zip_path)) -# Validate pkgs.zip before attempting to load from it. -# This provides backward compatibility for: -# - Installations using old vendored copies -# - Temporary locations without the requirements directory -# - CI/CD environments where pkgs.zip might be extracted to a directory -_pkgs_zip_valid = False -if pkgs_zip_path.exists(): - # Check if it's a file (not a directory) - in some CI environments, - # pkgs.zip might be extracted to a directory instead of kept as a ZIP. - if pkgs_zip_path.is_file(): - # Validate that it's actually a valid ZIP file before adding to sys.path - try: - with zipfile.ZipFile(pkgs_zip_path, "r") as zf: - # Quick validation - just check that we can read the ZIP directory - zf.namelist() - _pkgs_zip_valid = True - except (zipfile.BadZipFile, OSError, IOError) as e: - # Not a valid ZIP file or can't be read - skip loading from pkgs.zip - warnings.warn( - f"Failed to load packages from {pkgs_zip_path}: {e}. " - "Third-party dependencies will be loaded from the Python environment instead.", - RuntimeWarning, - stacklevel=2, - ) - -# If pkgs.zip is not found, assume pip-style installation where dependencies -# are installed directly in the Python environment. In this case, we still -# install the import hook to enable tank_vendor.* aliasing for compatibility. -if not _pkgs_zip_valid: - # Install import hook even without pkgs.zip for pip installations - _install_import_hook() -else: - # Add pkgs.zip to sys.path so Python can import packages directly from the ZIP. - # Insert at position 0 to prioritize over other installed packages. - sys.path.insert(0, str(pkgs_zip_path)) try: - # Step 1: Auto-discover all top-level packages in pkgs.zip import importlib - with zipfile.ZipFile(pkgs_zip_path, "r") as zf: - # Get all top-level package names from the ZIP - top_level_packages = set() - for name in zf.namelist(): - # Extract first component of path (top-level package/module) - parts = name.split("/") - if parts[0] and not parts[0].endswith(".py"): - # It's a package directory - top_level_packages.add(parts[0]) - elif parts[0].endswith(".py") and parts[0] != "__pycache__": - # It's a top-level module file - top_level_packages.add(parts[0][:-3]) # Remove .py - - # Filter out non-importable items: - # - .dist-info: Package metadata directories - # - __pycache__: Python bytecode cache - # - .py: Single file modules (already captured as packages) - # - .pyd/.so/.dylib: Platform-specific binary extensions - # - _*: Private/internal modules (e.g., _ruamel_yaml.cp311-win_amd64.pyd) - top_level_packages = { - pkg - for pkg in top_level_packages - if not pkg.endswith(".dist-info") - and pkg != "__pycache__" - and not pkg.endswith(".py") - and not pkg.endswith(".pyd") # Windows binary modules - and not pkg.endswith(".so") # Unix/Linux binary modules - and not pkg.endswith(".dylib") # macOS binary modules - and not pkg.startswith("_") # Private/internal modules - } - - # Step 2: Import and register each top-level package under tank_vendor namespace + # Step 3: Auto-discover all top-level packages in the zip. + top_level_packages = _discover_top_level_packages(zip_path) + + # Step 4: Import and register each top-level package under the + # tank_vendor namespace. for package_name in sorted(top_level_packages): + # Collision check: an earlier zip already claimed this name. + # Earlier zips win (pkgs.zip is loaded before requirements/any/). + if f"tank_vendor.{package_name}" in sys.modules: + warnings.warn( + f"Skipping {package_name} from {zip_path}: " + f"already registered under tank_vendor.{package_name} " + f"from an earlier zip.", + RuntimeWarning, + ) + continue + try: + # Import the real module and alias it under tank_vendor.* in + # sys.modules; also expose it as an attribute on this package + # so `from tank_vendor import ` works without going + # through the meta path finder. + # Import the package mod = importlib.import_module(package_name) # Register in sys.modules under tank_vendor namespace sys.modules[f"tank_vendor.{package_name}"] = mod - - # Also set as attribute on tank_vendor module for direct access globals()[package_name] = mod - - except ImportError as e: - # Some packages might not import cleanly on all platforms - # Log but don't fail - they might not be needed - warnings.warn(f"Could not import {package_name} from pkgs.zip: {e}") - - # Step 3: Install import hook for lazy submodule loading - # This enables imports like: from tank_vendor.shotgun_api3.lib import httplib2 - # without pre-importing all submodules (which can fail on version incompatibilities) - _install_import_hook() - - # Step 4: Apply package-specific patches - # These patches work around limitations or fix issues with specific packages - if "shotgun_api3" in sys.modules: - _patch_shotgun_api3_certs(pkgs_zip_path) + except Exception as e: + # Per-package import failures are tolerated. The catch is + # intentionally broad: a future shared vendor using syntax + # newer than the current Python (e.g. PEP 604 union syntax + # `int | None`) would raise SyntaxError at parse time, not + # ImportError. flow_data_sdk on Python 3.9 raises ImportError + # for its references to types.UnionType / typing.TypeAlias, + # which this catch also handles. Wholesale loader failures + # are still handled by the outer try/except. + warnings.warn( + f"Could not import {package_name} from {zip_path}: {e}", + RuntimeWarning, + stacklevel=2, + ) except Exception as e: - # Clean up sys.path on failure to avoid leaving it in an inconsistent state - # with a non-functional ZIP path that could interfere with subsequent imports - sys.path.remove(str(pkgs_zip_path)) + # Clean up sys.path on a wholesale failure so we don't leave a + # non-functional zip on the path interfering with other imports. + try: + sys.path.remove(str(zip_path)) + except ValueError: + pass raise RuntimeError( - f"Failed to import required modules from {pkgs_zip_path}: {e}" + f"Failed to import required modules from {zip_path}: {e}" ) from e + + return True + + +def _release_importlib_metadata_handles(): + """ + Release file handles that importlib.metadata holds on vendor zips. + + Windows-only workaround. + + importlib.metadata.FastPath.__new__ is @lru_cache'd, so the FastPath + instance for any zip it probes is kept alive forever. Inside + FastPath.zip_children(), the line `self.joinpath = zip_path.joinpath` + binds the zipfile.Path (and its underlying open ZipFile) as an instance + attribute on the cached FastPath — so the file handle stays open for + the lifetime of the cache. + + This bites us on Windows / Python 3.13 when flow_data_sdk's _version.py + runs importlib.metadata.version("flow-data-sdk") during import. The + cached FastPath keeps our shared zip open, which then prevents the + tank share_core command from moving install/core (WinError 32 sharing + violation). + + Linux and macOS don't have Windows' sharing-violation semantics — moving + or deleting files with open handles is allowed — so this cleanup is a + no-op on those platforms (and was observed to break a Linux/3.13 + integration test, so we gate strictly on win32). + + invalidate_caches() calls FastPath.__new__.cache_clear() which drops + the FastPath references. gc.collect() forces __del__ on the underlying + ZipFile objects so the handles close immediately rather than at the + next garbage collection cycle. + """ + if sys.platform != "win32": + return + from importlib.metadata import MetadataPathFinder + # invalidate_caches() is declared as `def invalidate_caches(cls)` without + # @classmethod in some Python versions, so call it on an instance for + # cross-version compatibility. + MetadataPathFinder().invalidate_caches() + import gc + + gc.collect() + + +# ============================================================================ +# MAIN INITIALIZATION +# ============================================================================ + +_requirements_dir = pathlib.Path(__file__).resolve().parent.parent.parent / "requirements" + +# Load order matters for two distinct reasons: +# +# 1. sys.modules registration: the FIRST zip to register a top-level package +# wins (later zips' duplicates are skipped). So pkgs.zip is loaded first +# to keep its version-pinned dependencies authoritative. +# +# 2. sys.path order: we insert each zip at sys.path[0], so the LAST zip +# loaded ends up at the front. We want shared zips ahead of pkgs.zip on +# sys.path so that importlib.metadata.version() lookups (e.g. flow_data_sdk's +# _version.py querying its own dist-info) short-circuit on the shared zip +# and never scan pkgs.zip. Scanning pkgs.zip via importlib.metadata caches +# a FastPath instance that holds an open zipfile, which on Windows +# prevents the tank share_core command from moving install/core. +# +# So: load pkgs.zip first (sys.modules), then shared zips (sys.path front). +_pkgs_zip_path = ( + _requirements_dir + / f"{sys.version_info.major}.{sys.version_info.minor}" + / "pkgs.zip" +) +_pkgs_loaded = _load_packages_from_zip(_pkgs_zip_path) +if _pkgs_loaded and "shotgun_api3" in sys.modules: + _patch_shotgun_api3_certs(_pkgs_zip_path) + +# Shared zips (optional, Python-version-independent). Drop a *.zip into +# requirements/any/ and it will be loaded automatically. Shared vendors are +# expected to use the system trust store and not ship data files that would +# need extraction from inside the zip. +_shared_dir = _requirements_dir / "any" +if not _shared_dir.is_dir(): + # Fallback for pip-installed packages: setup.py's build_py copies + # requirements/any/*.zip into tank_vendor/vendor_any/ in the wheel. + _shared_dir = pathlib.Path(__file__).resolve().parent / "vendor_any" +if _shared_dir.is_dir(): + for _shared_zip in sorted(_shared_dir.glob("*.zip")): + _load_packages_from_zip(_shared_zip) + +# Install the lazy import hook for nested submodule access. +# Idempotent via the _tank_vendor_meta_finder guard, so calling it once +# after both load steps is safe and sufficient. +_install_import_hook() + +# Windows-only cleanup: drop importlib.metadata's cached file handles on our +# vendor zips so the tank share_core command can move install/core without +# hitting WinError 32 sharing violations. No-op on Linux/macOS. +_release_importlib_metadata_handles() diff --git a/python/tk-core/python/tank_vendor/adsk_auth/__init__.py b/python/tk-core/python/tank_vendor/adsk_auth/__init__.py new file mode 100644 index 00000000..5f8dcd21 --- /dev/null +++ b/python/tk-core/python/tank_vendor/adsk_auth/__init__.py @@ -0,0 +1,17 @@ +# Copyright (c) 2025 Shotgun Software Inc. +# CONFIDENTIAL AND PROPRIETARY + +""" +Adsk auth – minimal Autodesk Platform Services (APS) authentication using PKCE. + +Single flow: file store -> refresh token -> browser PKCE. No Identity Client. +""" + +from .config import AuthConfig +from .token import clear_stored_tokens, get_access_token + +__all__ = [ + "AuthConfig", + "get_access_token", + "clear_stored_tokens", +] diff --git a/python/tk-core/python/tank_vendor/adsk_auth/config.py b/python/tk-core/python/tank_vendor/adsk_auth/config.py new file mode 100644 index 00000000..31668bf1 --- /dev/null +++ b/python/tk-core/python/tank_vendor/adsk_auth/config.py @@ -0,0 +1,52 @@ +# Copyright (c) 2025 Shotgun Software Inc. +# CONFIDENTIAL AND PROPRIETARY + +"""APS PKCE configuration.""" + +from __future__ import annotations + +from dataclasses import dataclass +from typing import List + + +@dataclass +class AuthConfig: + """Configuration for APS PKCE authentication.""" + + application_id: str + base_url: str + callback_url: str + required_application_scopes: List[str] + storage_dir: str + description: str = "" + + def __post_init__(self) -> None: + if not self.application_id or not self.application_id.strip(): + raise ValueError("application_id is required") + if not self.base_url or not self.base_url.strip(): + raise ValueError("base_url is required") + if not self.callback_url or not self.callback_url.strip(): + raise ValueError("callback_url is required") + if not self.required_application_scopes: + raise ValueError("required_application_scopes must not be empty") + if not self.storage_dir or not self.storage_dir.strip(): + raise ValueError("storage_dir is required") + self.base_url = _normalize_base_url(self.base_url.strip()) + self.application_id = self.application_id.strip() + self.callback_url = self.callback_url.strip() + + +def _normalize_base_url(base_url: str) -> str: + """Normalize base URL for APS (scheme + netloc).""" + from urllib.parse import urlsplit + + scheme, netloc, path, _, _ = urlsplit(base_url) + if scheme == "" and netloc == "" and path: + if path.startswith("localhost") or path.startswith("localhost/"): + port = path.split("/")[0].split(":")[-1] if ":" in path else "" + return f"http://localhost:{port}" if port else "http://localhost" + first = path.split("/")[0] + return f"https://{first}" + if scheme in ("http", "https"): + return f"{scheme}://{netloc}" + raise ValueError(f"base_url must use http or https, got scheme={scheme!r}") diff --git a/python/tk-core/python/tank_vendor/adsk_auth/file_store.py b/python/tk-core/python/tank_vendor/adsk_auth/file_store.py new file mode 100644 index 00000000..09185df8 --- /dev/null +++ b/python/tk-core/python/tank_vendor/adsk_auth/file_store.py @@ -0,0 +1,114 @@ +# Copyright (c) 2025 Shotgun Software Inc. +# CONFIDENTIAL AND PROPRIETARY + +"""Token storage via a local JSON file (replaces keyring dependency).""" + +from __future__ import annotations + +import getpass +import json +import logging +import os +import sys +from typing import Any, Dict + +_logger = logging.getLogger(__name__) + +SERVICE_PREFIX = "adsk.flow" +TOKEN_TYPES = ("access_token", "refresh_token") + +_TOKEN_FILE_NAME = "adsk_flow_tokens.json" + + +def _service_name(application_id: str, token_type: str) -> str: + return f"{SERVICE_PREFIX}.{application_id}.{token_type}" + + +def _token_file_path(storage_dir: str) -> str: + return os.path.join(storage_dir, _TOKEN_FILE_NAME) + + +def _load(storage_dir: str) -> Dict[str, Any]: + path = _token_file_path(storage_dir) + if not os.path.exists(path): + return {} + try: + with open(path, "r") as fh: + data = json.load(fh) + return data if isinstance(data, dict) else {} + except Exception: + _logger.debug("Could not read token file %s", path, exc_info=True) + return {} + + +def _save(storage_dir: str, data: Dict[str, Any]) -> None: + if not os.path.exists(storage_dir): + old_umask = os.umask(0o077) + try: + os.makedirs(storage_dir, 0o700) + finally: + os.umask(old_umask) + + path = _token_file_path(storage_dir) + old_umask = os.umask(0o177) + try: + with open(path, "w") as fh: + json.dump(data, fh) + finally: + os.umask(old_umask) + + # Belt-and-suspenders: explicitly set permissions on POSIX. + if sys.platform != "win32": + try: + os.chmod(path, 0o600) + except OSError: + pass + + +def get_access_token( + storage_dir: str, application_id: str, profile: str +) -> str | None: + """Read access token from the file store.""" + data = _load(storage_dir) + return data.get(_service_name(application_id, "access_token"), {}).get(profile) + + +def get_refresh_token( + storage_dir: str, application_id: str, profile: str +) -> str | None: + """Read refresh token from the file store.""" + data = _load(storage_dir) + return data.get(_service_name(application_id, "refresh_token"), {}).get(profile) + + +def persist_tokens( + storage_dir: str, + application_id: str, + profile: str, + tokens: Dict[str, Any], +) -> None: + """Store token dict (access_token, refresh_token) in the file store.""" + data = _load(storage_dir) + for token_type in TOKEN_TYPES: + if tokens.get(token_type): + service = _service_name(application_id, token_type) + data.setdefault(service, {})[profile] = tokens[token_type] + _save(storage_dir, data) + + +def delete_tokens(storage_dir: str, application_id: str, profile: str) -> None: + """Remove all stored tokens for this app and profile.""" + data = _load(storage_dir) + changed = False + for token_type in TOKEN_TYPES: + service = _service_name(application_id, token_type) + if service in data and profile in data[service]: + del data[service][profile] + changed = True + if changed: + _save(storage_dir, data) + + +def get_user_profile(profile: str | None) -> str: + """Return profile (username) for the store; default current OS user.""" + return profile or getpass.getuser() diff --git a/python/tk-core/python/tank_vendor/adsk_auth/pkce.py b/python/tk-core/python/tank_vendor/adsk_auth/pkce.py new file mode 100644 index 00000000..a1fa57fa --- /dev/null +++ b/python/tk-core/python/tank_vendor/adsk_auth/pkce.py @@ -0,0 +1,292 @@ +# Copyright (c) 2025 Shotgun Software Inc. +# CONFIDENTIAL AND PROPRIETARY + +"""PKCE flow: code pair, auth URL, callback server, code/refresh exchange.""" + +from __future__ import annotations + +import base64 +import errno +import hashlib +import json +import logging +import secrets +import socket +import threading +import urllib.request +import webbrowser +from http.server import BaseHTTPRequestHandler, HTTPServer +from socketserver import ThreadingMixIn +from typing import Any, Dict +from urllib.parse import parse_qs, urlencode, urlparse + +from .config import AuthConfig + +_logger = logging.getLogger(__name__) + +REST_TIMEOUT = 30 + + +def create_code_pair() -> tuple[str, str]: + """Create PKCE code_verifier and code_challenge (S256).""" + code_verifier = secrets.token_urlsafe(40) + digest = hashlib.sha256(code_verifier.encode("utf-8")).digest() + code_challenge = base64.urlsafe_b64encode(digest).decode("utf-8").rstrip("=") + return (code_challenge, code_verifier) + + +def build_authorize_url(config: AuthConfig, code_challenge: str) -> tuple[str, str]: + """Build authorize URL and state; returns (url, state).""" + state = secrets.token_urlsafe() + params = { + "client_id": config.application_id, + "redirect_uri": config.callback_url, + "response_type": "code", + "scope": " ".join(config.required_application_scopes), + "state": state, + "code_challenge_method": "S256", + "code_challenge": code_challenge, + "nonce": secrets.token_urlsafe(), + } + url = f"{config.base_url}/authentication/v2/authorize?{urlencode(params)}" + return (url, state) + + +def exchange_code( + config: AuthConfig, + code: str, + code_verifier: str, +) -> Dict[str, Any]: + """Exchange authorization code for tokens.""" + data = { + "code": code, + "grant_type": "authorization_code", + "redirect_uri": config.callback_url, + "client_id": config.application_id, + "code_verifier": code_verifier, + } + encoded_data = urlencode(data).encode("utf-8") + req = urllib.request.Request( + f"{config.base_url}/authentication/v2/token", + data=encoded_data, + headers={"Content-Type": "application/x-www-form-urlencoded", "Accept": "application/json"}, + method="POST", + ) + with urllib.request.urlopen(req, timeout=REST_TIMEOUT) as response: + return json.loads(response.read()) + + +def exchange_refresh_token(config: AuthConfig, refresh_token: str) -> Dict[str, Any]: + """Exchange refresh token for new access (and optionally refresh) token.""" + data = { + "grant_type": "refresh_token", + "refresh_token": refresh_token, + "client_id": config.application_id, + } + encoded_data = urlencode(data).encode("utf-8") + req = urllib.request.Request( + f"{config.base_url}/authentication/v2/token", + data=encoded_data, + headers={"Content-Type": "application/x-www-form-urlencoded"}, + method="POST", + ) + with urllib.request.urlopen(req, timeout=20) as response: + return json.loads(response.read()) + + +def _callback_server_port(callback_url: str) -> int: + parsed = urlparse(callback_url) + if parsed.port is not None: + return parsed.port + return 80 if parsed.scheme == "http" else 443 + + +# Errno for "address family not supported" (IPv6 disabled or unavailable). +# Unix: EAFNOSUPPORT (97); Windows: WSAEAFNOSUPPORT (10047). +_ERRNO_AF_NOT_SUPPORTED = (getattr(errno, "EAFNOSUPPORT", 97), 10047) + + +def _is_port_in_use(port: int) -> bool: + """Return True if the loopback port is already bound (IPv4 or IPv6).""" + port = int(port) + try: + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(("127.0.0.1", port)) + except OSError as e: + if getattr(e, "errno", None) in (errno.EADDRINUSE, errno.EACCES): + return True + raise + # If IPv6 is not available (EAFNOSUPPORT etc.), skip probe and assume port is free for our use. + try: + with socket.socket(socket.AF_INET6, socket.SOCK_STREAM) as s: + s.bind(("::1", port)) + except OSError as e: + err = getattr(e, "errno", None) + if err in (errno.EADDRINUSE, errno.EACCES): + return True + if err in _ERRNO_AF_NOT_SUPPORTED: + _logger.debug("IPv6 not available, skipping IPv6 port probe") + return False + raise + return False + + +# Simple page with button (no immediate window.close) so callback is fully +# processed before the window closes. +_CALLBACK_HTML = b""" +

Authentication successful. You can close this window.

+ +""" + + +class _CallbackHandler(BaseHTTPRequestHandler): + """Capture OAuth callback ?code=...&state=... from the local HTTP server.""" + + session_store: Dict[str, Any] = {} + + def do_GET(self) -> None: + q = parse_qs(urlparse(self.path).query) + if "error" in q: + msg = q.get("error_description", q.get("error", [b"Unknown error"])) + _logger.error("OAuth callback error: %s", msg[0] if msg else "unknown") + elif "code" in q and "state" in q: + self.session_store[q["state"][0]] = q["code"][0] + _logger.info("Received OAuth callback with code and state") + self.send_response(200) + self.end_headers() + self.wfile.write(_CALLBACK_HTML) + # Do NOT call server.shutdown() here: with ThreadingMixIn the handler runs + # in a worker thread; the main server thread is blocked in accept(). Rely + # on the main thread polling session_store and timing out instead. + + def log_message(self, format: str, *args: Any) -> None: + _logger.debug("%s", args) + + +class _ThreadingCallbackServerDualStack(ThreadingMixIn, HTTPServer): + """Threaded HTTP server binding to ::1 (IPv6 loopback only).""" + + address_family = socket.AF_INET6 + + def server_bind(self) -> None: + self.socket = socket.socket(self.address_family, socket.SOCK_STREAM) + self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self.socket.bind(("::1", self.server_address[1])) + self.server_address = self.socket.getsockname() + + +class _ThreadingCallbackServerIPv4(ThreadingMixIn, HTTPServer): + """Threaded HTTP server binding to 127.0.0.1 (IPv4 loopback only).""" + + def server_bind(self) -> None: + self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self.socket.bind(("127.0.0.1", self.server_address[1])) + self.server_address = self.socket.getsockname() + + +def run_callback_server( + session_store: Dict[str, Any], + port: int, + ready_event: threading.Event | None = None, + init_error: list[BaseException] | None = None, + server_container: list | None = None, +) -> None: + """Run HTTP server in current thread to capture ?code=...&state=... .""" + _CallbackHandler.session_store = session_store + port = int(port) + try: + server = _ThreadingCallbackServerDualStack(("::1", port), _CallbackHandler) + except OSError as e: + err = getattr(e, "errno", None) + if err in (errno.EADDRINUSE, errno.EACCES): + if init_error is not None: + init_error.append(e) + if ready_event is not None: + ready_event.set() + return + if err in _ERRNO_AF_NOT_SUPPORTED: + _logger.debug("IPv6 not available, using IPv4 loopback callback server") + server = _ThreadingCallbackServerIPv4(("127.0.0.1", port), _CallbackHandler) + else: + raise + # Request handler threads must be daemon so the process exits after we have the code. + server.daemon_threads = True + if server_container is not None: + server_container.append(server) + if ready_event is not None: + ready_event.set() + server.serve_forever() + + +def web_authenticate( + config: AuthConfig, + *, + time_out: float = 30.0, + browser: Any = None, +) -> dict[str, Any]: + """Run PKCE in browser; return token dict (access_token, refresh_token, ...).""" + import time + + code_challenge, code_verifier = create_code_pair() + auth_url, state = build_authorize_url(config, code_challenge) + session_store: Dict[str, Any] = {state: None} + port = _callback_server_port(config.callback_url) + if _is_port_in_use(port): + raise RuntimeError( + f"Port {port} is already in use (callback URL {config.callback_url}). " + "Another auth process may be running. Exit it or use a different callback URL." + ) + ready_event = threading.Event() + init_error: list[BaseException] = [] + server_container: list = [] + + server_thread = threading.Thread( + target=run_callback_server, + args=(session_store, port), + kwargs={ + "ready_event": ready_event, + "init_error": init_error, + "server_container": server_container, + }, + ) + server_thread.daemon = True + server_thread.start() + # Ensure server is bound and listening before opening browser (avoids race on Windows) + if not ready_event.wait(timeout=5): + _logger.warning("Callback server may not be ready yet") + if init_error: + e = init_error[0] + raise RuntimeError( + f"Port {port} is already in use (callback URL {config.callback_url}). " + "Another auth process may be running. Exit it or use a different callback URL." + ) from e + time.sleep(0.5) + try: + try: + b = webbrowser.get(using=browser) + b.open_new(auth_url) + # With ThreadingMixIn the server thread never exits; poll with short joins + # so we return as soon as the callback handler has set session_store[state]. + deadline = time.monotonic() + time_out + while time.monotonic() < deadline: + if session_store.get(state) is not None: + break + server_thread.join(timeout=0.25) + except webbrowser.Error as e: + _logger.error("Browser error: %s", e) + server_thread.join(timeout=0.5) + finally: + if server_container: + server_container[0].shutdown() + server_container[0].server_close() + + if session_store.get(state) is None: + raise RuntimeError("Failed to obtain authorization code from browser") + code = session_store[state] + token = exchange_code(config, code, code_verifier) + if not token or "access_token" not in token: + raise RuntimeError("Token exchange did not return an access_token") + return token diff --git a/python/tk-core/python/tank_vendor/adsk_auth/token.py b/python/tk-core/python/tank_vendor/adsk_auth/token.py new file mode 100644 index 00000000..2442e2a9 --- /dev/null +++ b/python/tk-core/python/tank_vendor/adsk_auth/token.py @@ -0,0 +1,112 @@ +# Copyright (c) 2025 Shotgun Software Inc. +# CONFIDENTIAL AND PROPRIETARY + +"""Get access token: file store -> refresh -> browser PKCE.""" + +from __future__ import annotations + +import logging +from typing import Any, Optional +from urllib.error import HTTPError + +try: + import jwt +except ImportError: + # TODO: Remove when Python 3.7 is discontinued + jwt = None + +from .config import AuthConfig +from .file_store import delete_tokens +from .file_store import get_access_token as get_access_token_from_store +from .file_store import get_refresh_token, get_user_profile, persist_tokens +from .pkce import exchange_refresh_token, web_authenticate + +_logger = logging.getLogger(__name__) + +# In-memory cache: profile -> access_token (avoids file read every call) +_access_token_cache: dict[str, str] = {} + + +def get_access_token( + config: AuthConfig, + *, + profile: Optional[str] = None, + force_refresh: bool = False, + force_reauthentication: bool = False, + time_out: float = 30.0, + browser: Any = None, +) -> str: + """ + Return a valid access token: use cache, then file store, then refresh, then browser PKCE. + + Raises: + RuntimeError: If a token could not be obtained. + """ + global _access_token_cache + user_profile = get_user_profile(profile) + + if force_reauthentication or force_refresh: + _access_token_cache.pop(user_profile, None) + + # 1. Valid token in cache? + cached = _access_token_cache.get(user_profile) + if cached and not (force_refresh or force_reauthentication): + if jwt is None: # TODO: Remove when Python 3.7 is discontinued + return cached + try: + jwt.decode(cached, options={"verify_signature": False, "verify_exp": True}) + return cached + except (jwt.ExpiredSignatureError, jwt.DecodeError): + pass + + if force_reauthentication: + delete_tokens(config.storage_dir, config.application_id, user_profile) + + # 2. Valid token in file store? + if not (force_reauthentication or force_refresh): + try: + access_token = get_access_token_from_store( + config.storage_dir, config.application_id, user_profile + ) + if access_token: + if jwt is None: # TODO: Remove when Python 3.7 is discontinued + _access_token_cache[user_profile] = access_token + return access_token + jwt.decode( + access_token, + options={"verify_signature": False, "verify_exp": True}, + ) + _access_token_cache[user_profile] = access_token + return access_token + except (jwt.ExpiredSignatureError, jwt.DecodeError): + pass + + # 3. Refresh token? + try: + refresh_token = get_refresh_token( + config.storage_dir, config.application_id, user_profile + ) + if refresh_token: + _logger.debug("Using refresh token") + token_dict = exchange_refresh_token(config, refresh_token) + persist_tokens(config.storage_dir, config.application_id, user_profile, token_dict) + access_token = token_dict["access_token"] + _access_token_cache[user_profile] = access_token + return access_token + except (RuntimeError, HTTPError) as e: + _logger.debug("Refresh failed: %s", e) + + # 4. Browser PKCE + _logger.warning("Opening browser to authenticate (timeout %.1fs)", time_out) + token_dict = web_authenticate(config, time_out=time_out, browser=browser) + persist_tokens(config.storage_dir, config.application_id, user_profile, token_dict) + access_token = token_dict["access_token"] + _access_token_cache[user_profile] = access_token + return access_token + + +def clear_stored_tokens(config: AuthConfig, profile: Optional[str] = None) -> None: + """Remove tokens from file store and in-memory cache for this app/profile.""" + user_profile = get_user_profile(profile) + _access_token_cache.pop(user_profile, None) + delete_tokens(config.storage_dir, config.application_id, user_profile) diff --git a/python/tk-core/python/tank_vendor/flow_integration_sdk/__init__.py b/python/tk-core/python/tank_vendor/flow_integration_sdk/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/python/tk-core/python/tank_vendor/flow_integration_sdk/dependency.py b/python/tk-core/python/tank_vendor/flow_integration_sdk/dependency.py new file mode 100644 index 00000000..3ecca656 --- /dev/null +++ b/python/tk-core/python/tank_vendor/flow_integration_sdk/dependency.py @@ -0,0 +1,467 @@ +# - +# ***************************************************************************** +# Copyright 2026 Autodesk, Inc. All rights reserved. +# +# These coded instructions, statements, and computer programs contain +# unpublished proprietary information written by Autodesk, Inc. and are +# protected by Federal copyright law. They may not be disclosed to third +# parties or copied or duplicated in any form, in whole or in part, without +# the prior written consent of Autodesk, Inc. +# ***************************************************************************** +# + + +""" +This module contains convenience classes/utilities for dealing with +file dependencies within an asset. +""" +from __future__ import annotations # needed for python 3.9 support + +import json +import re +from dataclasses import dataclass, field, fields +from enum import Enum + +from tank_vendor.flow_integration_sdk.exceptions import FlowError +from tank_vendor.flow_integration_sdk.storage import storage_key_to_asset_id +from tank_vendor.flow_integration_sdk.objects import ( + FlowRevision, + FlowVersion, +) +from tank_vendor.flow_integration_sdk.utils import ( + cleanpath, + to_regex_safe_wildcard_string, + trace, +) + + +class DepType(Enum): + """Enum of dependency data types.""" + + #: Link to another asset in Flow. + ASSET = "asset" + #: Link to a file external to Flow, or packaged within current asset. + LOCAL = "local" + #: No specific type. + NONE = "" + #: Link to the main scene file of the current asset. + ROOT = "root" + + +@dataclass +class DependencyData: + """Store data relevant to an dependency within a scene. + + General Properties: + + - dep_type: General type of dependency. See :class:`.DepType` enum for valid values. + - node_handle: Unique identifier to the node with the dependency. + - node_type: Type name of node (specific type of dependency). + - attribute: Name of attribute which stores the file path (not always applicable). + - file_path: Absolute file path of dependency. + - raw_path: Raw file path stored in scene. + - dependencies: List of nested dependencies within the file designated by file_path. + + Asset Properties: (pertinent to asset type dependencies only) + + - asset_id: Asset entity id. + - version: Version of revision. + - revision_id: Revision id. + - component_name: Unique component identifier within revision. + - blob_index: Index into blob array of component. + """ + + # General properties + + dep_type: DepType = DepType.NONE + node_handle: str = "" + node_type: str = "" + attribute: str = "" + file_path: str = "" + raw_path: str = "" + parent: DependencyData | None = None + dependencies: list[DependencyData] = field(default_factory=lambda: []) + + # Asset properties + asset_id: str = "" + revision_id: str = "" + version_id: str = "" + component_name: str = "" + blob_index: int = 0 + + def identify_component(self): + """Determine asset component identification based on file path. + If provided, copy info from cached dependency tree to avoid querying it. + """ + # Parse file path for asset info + comp_info = identify_component(self.file_path) + if comp_info: + self.asset_id = comp_info.get("asset_id") + self.revision_id = comp_info.get("revision_id") + self.version_id = comp_info.get("version_id") + self.component_name = comp_info.get("component_name") + self.blob_index = comp_info.get("blob_index") + + @property + def revision_num(self): + """Return number of revision based on revision id.""" + return FlowRevision.get_revision_number(self.revision_id) + + @property + def version_num(self): + """Return number of version based on version id.""" + return FlowVersion.get_version_number(self.version_id) + + def set_type(self): + """Set dependency type based on current properties.""" + # Can assume any dependency with asset information is an asset dependency + self.dep_type = DepType.ASSET if self.asset_id else DepType.LOCAL + + def flatten_dependencies(self): + """Create flat list of all dependencies in tree.""" + deps = [self] + for dep in self.dependencies: + deps.extend(dep.flatten_dependencies()) + return deps + + def get_external_dependencies(self, top_level: bool = True) -> list[DependencyData]: + """Return list of external dependency objects. + + .. note:: external dependencies of internal dependencies will be ignored + because they are not considered external to the current asset context. + + Args: + top_level: If True, only return external dependencies in immediate + dependency list. Otherwise, include sub dependencies too. + + Returns + List of DependencyData objects of type DepType.LOCAL. + """ + ext_deps = [] + for dep in self.dependencies: + if dep.dep_type == DepType.LOCAL: + ext_deps.append(dep) + if not top_level and dep.dep_type != DepType.ASSET: + ext_deps.extend(dep.get_external_dependencies(top_level=False)) + return ext_deps + + def get_internal_dependencies(self, top_level: bool = True) -> list[DependencyData]: + """Return list of internal dependency objects. + + Args: + top_level: If True, only return internal dependencies in immediate + dependency list. Otherwise, include all sub dependencies too. + + Returns: + List of DependencyData objects of type DepType.ASSET. + """ + int_deps = [] + for dep in self.dependencies: + # In searching for internal dependencies, we must also include those + # that are referenced by external dependencies because they also + # need to be "registered" as internal references of current asset. + # + # If only getting top level internal references, do not search sub + # dependencies once an internal dependency is found, but must continue + # to search sub dependencies of external dependencies in case an internal + # reference exists within. + if dep.dep_type == DepType.ASSET: + int_deps.append(dep) + if top_level: + continue + int_deps.extend(dep.get_internal_dependencies(top_level=top_level)) + + return int_deps + + def find( + self, + node_handle: str | None = None, + file_path: str | None = None, + node_type: str | None = None, + ) -> list[DependencyData]: + """Find node within dependency tree. + + Note: multiple criteria acts as a union, not an intersection. + + Args: + node_handle: If provided, match dependency node with this handle. + Wildcard character '*' is supported. + This criteria will be given precedence. + file_path: If provided, match by file path. + Wildcard character '*' is supported. + This criteria has second priority. + node_type: If provided, match by node type. + Wildcard character '*' is supported. + This criteria has third priority. + + Returns: + List of DepedencyData nodes that match to ANY of given criteria. + """ + matches = [] + matched_self = False + if node_handle is not None: + expression = f"^{to_regex_safe_wildcard_string(node_handle)}$" + if re.match(expression, self.node_handle): + matches.append(self) + matched_self = True + if not matched_self and file_path is not None: + expression = f"{to_regex_safe_wildcard_string(file_path.lower())}$" + if re.match(expression, self.file_path.lower()): + matches.append(self) + matched_self = True + if not matched_self and node_type is not None: + expression = f"{to_regex_safe_wildcard_string(node_type)}$" + if re.match(expression, self.node_type): + matches.append(self) + for dep in self.dependencies: + result = dep.find(node_handle, file_path, node_type) + matches.extend(result) + + return matches + + def contains(self, dep: DependencyData) -> DependencyData | None: + """Check tree for equivalent dependency node and return.""" + deps = self.flatten_dependencies() + for d in deps: + if d == dep: + return d + return None + + def match(self, dep: DependencyData) -> DependencyData | None: + """Find matching dependency node in tree. + + A match entails that the following properties are the same: + * node_handle + * node_type + * attribute + * asset_id + * component_name + + Args: + dep: The dependency data to be matched. + + Returns: + First node in the tree that fits matching criteria, or None if not found. + """ + deps = self.flatten_dependencies() + for d in deps: + if d.node_handle != dep.node_handle: + continue + elif d.node_type != dep.node_type: + continue + elif d.attribute != dep.attribute: + continue + elif d.asset_id != dep.asset_id: + continue + elif d.component_name != dep.component_name: + continue + return d + return None + + def __lt__(self, other: DependencyData) -> bool: + """Implement less-than comparison operator to make objects sortable.""" + return self.node_handle < other.node_handle + + def __eq__(self, other: DependencyData) -> bool: + """Implement equals operator.""" + if ( + self.node_handle == other.node_handle + and self.node_type == other.node_type + and self.attribute == other.attribute + and self.file_path == other.file_path + ): + return True + return False + + def asdict(self): + """Convert object to dictionary.""" + # NOTE: using default asdict() function causes infinite recursion + + # Convert basic properties + result = {} + for f in fields(self): + if f.name in ["dependencies", "parent"]: + continue + result[f.name] = getattr(self, f.name) + + # Convert dependency list recursively + result["dependencies"] = [dep.asdict() for dep in self.dependencies] + + # Convert dep_type to string + result["dep_type"] = self.dep_type.value + + return result + + def pprint(self, index: int = 0, tabs: int = 0, recursive=True): + """Print dependency tree in a readable way.""" + print("\t" * tabs + "-----------------------------------------") + print("\t" * tabs + f"{index} - {self.dep_type.name}") + print("\t" * tabs + "-----------------------------------------") + + asset_props = [ + "asset_id", + "version", + "revision_id", + "component_name", + "blob_index", + ] + + for prop, value in self.__dict__.items(): + if prop in ["dependencies", "dep_type"]: + continue + elif prop == "parent": + if value is not None: + print("\t" * tabs + f"{prop}: {value.node_handle}") + continue + elif prop in asset_props and self.dep_type is not DepType.ASSET: + continue + print("\t" * tabs + f"{prop}: {str(value)}") + + if recursive and self.dependencies: + print(" ") + print("\t" * tabs + "Sub-dependencies:") + for i, dep in enumerate(self.dependencies): + dep.pprint(i, tabs + 1) + + @classmethod + def convert(cls, dep_json: dict | str) -> DependencyData: + """Convert a json representation of a dependency tree into object representation. + + Args: + dep_json: Json in dictionary or string format. + + Returns: + Root of dependency tree. + + Raises: + ValueError: If dep_json is a string that cannot be parsed as JSON. + """ + # Convert json string to dictionary + if isinstance(dep_json, str): + try: + dep_json = json.loads(dep_json) + except Exception as exc: # pylint: disable=broad-except + raise ValueError("Invalid json provided.") from exc + + dep = DependencyData(**dep_json) # type: ignore[arg-type] + + try: + # dep type is assumed to be a string, convert back to enum value + dep.dep_type = DepType(dep.dep_type) + except Exception: + dep.dep_type = DepType.NONE + + # Properly convert sub-dependencies to objects + subdeps = [] + for d in dep.dependencies: + subdeps.append(DependencyData.convert(d)) # type: ignore[arg-type] + dep.dependencies = subdeps + for d in subdeps: + d.parent = dep + + return dep + + +@trace +def identify_component(file_path: str) -> dict | None: + """Given a file path, determine if it belongs to an asset, and + return information identifying the exact component blob that the path + is associated with. + + NOTE: Only paths within primary storage (NFS cache) can be identified. + All other paths, including sandbox paths, will return None. + + Args: + file_path: Absolute path to a file. + ignore_root: If True, root directory does not need to map to + current configured roots. It is recommended to keep + this to True if not trying validate full path for optimal + performance. + + Returns: + Dictionary with keys: + * asset_id -> Id of asset + * revision_id -> Id of revision + * version_id -> Id of version + * component_name -> Name of component + * blob_index -> Index into binary array of component + + or None if the file path cannot be identified. + """ + file_path = cleanpath(file_path) + + # Absolute path pattern (expecting a root) + expr = r".*(?P/[^/]+/((r\d+)|(draft))/.+)" + m = re.match(expr, file_path) + if not m: + # Relative path pattern (expecting to begin with storage id) + expr = r"(?P[^/]+/((r\d+)|(draft))/.+)" + m = re.match(expr, file_path) + if not m: + # Not an asset path - failed test for overall asset path pattern + return None + comp_path = m.group("comp_path") + + # add prepended / to match expected asset path pattern if not present + if not comp_path.startswith("/"): + comp_path = "/" + comp_path + + # Parse expected pieces of asset path + try: + _, storage_id, rev_num, comp_path = comp_path.split("/", maxsplit=3) + except ValueError: + # Not an asset path - unable to parse into key path components + return None + + # Look up asset based on storage key + try: + asset_id = storage_key_to_asset_id(storage_id) + except FlowError: + # Not an asset path - storage key component does not map to an asset + return None + + # Convert revision number to integer + if rev_num == "draft": + # Not an asset path - draft paths don't count + return None + else: + try: + rev_num = int(rev_num.strip("r")) + except ValueError: + # Not an asset path - non-int value for revision number component + return None + + revision_id = FlowRevision.get_revision_id(asset_id, rev_num) + try: + # NOTE: Using accessor method rather than constructing new instance + # because this will return a cached object if it exists + # This is ok since revisions are immutable. + revision = FlowRevision.get_revision(revision_id) + except FlowError: + # Not an asset - revision number is out of range + return None + + # Determine component and blob index based on component path + # Try and match against existing binary components on revision + component = blob_index = None + bin_comps = revision.get_binary_components() + if "%" in comp_path: + # File sequence paths will be stored as a zip file + comp_path, _, _ = comp_path.rsplit(".", maxsplit=2) + comp_path += ".zip" + for comp in bin_comps: + for i, blob in enumerate(comp.blobs): + if blob.path == comp_path: + component = comp + blob_index = i + break + if component is None: + # Not an asset path - no component blob matches file + return None + + return { + "asset_id": asset_id, + "revision_id": revision_id, + "version_id": revision.version_id, + "component_name": component.name, + "blob_index": blob_index, + } diff --git a/python/tk-core/python/tank_vendor/flow_integration_sdk/exceptions.py b/python/tk-core/python/tank_vendor/flow_integration_sdk/exceptions.py new file mode 100644 index 00000000..76b017d7 --- /dev/null +++ b/python/tk-core/python/tank_vendor/flow_integration_sdk/exceptions.py @@ -0,0 +1,163 @@ +# ***************************************************************************** +# Copyright 2026 Autodesk, Inc. All rights reserved. +# +# These coded instructions, statements, and computer programs contain +# unpublished proprietary information written by Autodesk, Inc. and are +# protected by Federal copyright law. They may not be disclosed to third +# parties or copied or duplicated in any form, in whole or in part, without +# the prior written consent of Autodesk, Inc. +# ***************************************************************************** +# + + +""" +This module contains custom exception classes. +""" + +from __future__ import annotations # needed for python 3.9 support + + +class FlowError(Exception): + """Base error class for Flow asset management errors.""" + + def __init__( + self, message, *args, details: str = "", data: dict | None = None, **kwargs + ): + """ + Args: + message: Base message for exception. + details: Additional information. + data: Any additional data relevant to the error. + Stored as a dictionary of key-value pairs. + """ + if details: + message = f"{message} {details}" + super().__init__(message, *args, **kwargs) + self.data = data + + +class CreateAssetError(FlowError): + def __init__(self, *args, **kwargs): + message = "Could not create asset." + super().__init__(message, *args, **kwargs) + + +class ComponentSpecError(FlowError): + def __init__(self, *args, **kwargs): + message = "Invalid component spec provided." + super().__init__(message, *args, **kwargs) + + +class ConfigurationError(FlowError): + def __init__(self, *args, **kwargs): + message = "Flow settings have not been configured correctly." + super().__init__(message, *args, **kwargs) + + +class DirectoryNotCreatedError(FlowError): + def __init__(self, *args, dir_path: str, **kwargs): + message = f'Couldn\'t create directory "{dir_path}".' + super().__init__(message, *args, **kwargs) + + +class DraftExistsError(FlowError): + def __init__(self, *args, draft_id: str, draft_folder: str, **kwargs): + """ + Args: + draft_id: Id that uniquely identifies a draft in local sandbox. + draft_folder: Path to draft folder in local sandbox. + """ + message = f'The draft "{draft_id}" already exists at {draft_folder}.' + super().__init__(message, *args, **kwargs) + self.draft_id = draft_id + self.draft_folder = draft_folder + + +class EntityNotFoundError(FlowError): + """Thrown when a given MEDM entity id is invalid, and cannot be used to + successfully query the entity. + """ + + def __init__(self, *args, entity_id: str, **kwargs): + """ + Args: + entity_id: Id for an Asset or Project. + """ + message = f'Entity id "{entity_id}" is invalid.' + super().__init__(message, *args, **kwargs) + self.entity_id = entity_id + + +class FileUploadError(FlowError): + def __init__(self, *args, file_path: str, **kwargs): + message = f"Error uploading file {file_path}." + super().__init__(message, *args, **kwargs) + + +class InvalidDraftError(FlowError): + def __init__(self, *args, draft_id: str, **kwargs): + """ + Args: + draft_id: Id that uniquely identifies a draft in local sandbox. + """ + message = f'Draft id "{draft_id}" is invalid.' + super().__init__(message, *args, **kwargs) + self.draft_id = draft_id + + +class FlowSchemaBuilderError(FlowError): + """General exception for errors related to SchemaBuilder operations.""" + + def __init__(self, *args, **kwargs): + message = "SchemaBuilder operation failed." + super().__init__(message, *args, **kwargs) + + +class FlowSchemaDisplayDataError(FlowError): + def __init__(self, *args, **kwargs): + message = "Schema display data operation failed." + super().__init__(message, *args, **kwargs) + + +class FlowSchemaError(FlowError): + def __init__(self, *args, **kwargs): + message = "Schema operation failed." + super().__init__(message, *args, **kwargs) + + +class FlowSchemaLibraryError(FlowError): + def __init__(self, *args, **kwargs): + message = "Schema library operation failed." + super().__init__(message, *args, **kwargs) + + +class PublishAssetError(FlowError): + def __init__(self, *args, **kwargs): + message = "Could not publish asset." + super().__init__(message, *args, **kwargs) + + +class PublishConflictError(FlowError): + def __init__( + self, *args, asset, checkout_version: int, checkout_revision: int, **kwargs + ): + message = "A publish conflict has been detected. New revisions of the asset " + message += f"have been published since version {checkout_version} " + message += f"(r{checkout_revision}) was checked out. " + message += f"The latest revision is now {asset.version_number} " + message += f"(r{asset.revision_number})." + + super().__init__(message, *args, **kwargs) + self.asset = asset + self.checkout_version = checkout_version + self.checkout_revision = checkout_revision + + +class ThumbnailError(FlowError): + def __init__(self, *args, revision_id: str, **kwargs): + """ + Args: + revision_id: Id of revision. + """ + message = f"Could not retrieve thumbnail for revision: {revision_id}." + super().__init__(message, *args, **kwargs) + self.revision_id = revision_id diff --git a/python/tk-core/python/tank_vendor/flow_integration_sdk/fetch.py b/python/tk-core/python/tank_vendor/flow_integration_sdk/fetch.py new file mode 100644 index 00000000..a48621cc --- /dev/null +++ b/python/tk-core/python/tank_vendor/flow_integration_sdk/fetch.py @@ -0,0 +1,405 @@ +# - +# ***************************************************************************** +# Copyright 2026 Autodesk, Inc. All rights reserved. +# +# These coded instructions, statements, and computer programs contain +# unpublished proprietary information written by Autodesk, Inc. and are +# protected by Federal copyright law. They may not be disclosed to third +# parties or copied or duplicated in any form, in whole or in part, without +# the prior written consent of Autodesk, Inc. +# ***************************************************************************** +# + + +""" +This module provides asset download/fetching utilities. +""" + +from __future__ import annotations # needed for python 3.9 support + +import fileseq +import os +import zipfile +from collections.abc import Iterator +from functools import cache + +from tank_vendor.flow_data_sdk.base import model as medm_model +from tank_vendor.flow_data_sdk.base.exceptions import GQLAPIError + +from .exceptions import FlowError, ThumbnailError +from .globals import ( + get_client, + FILE_SEQ_TYPE, + THUMBNAIL_PURPOSE, +) +from .schema import get_schema_id +from .storage import ( + _cache_asset_info, + _find_component, + get_storage_component_path, + get_storage_revision_dir, +) +from .utils import cleanpath, download_file, get_logger, trace + + +# urn to url cache - optimization to avoid re-querying urls that are fixed +# Format: key = urn, value = url +_urn_to_url = {} + + +@trace +def fetch_blob_urls(project_id: str, urns: list[str]) -> list[str]: + """Query list of urls for given blob urns that can be used for + downloading. Order should be preserved. + + Args: + project_id: Id of project to which binary components belong. + urns: List of blob urns to be converted to urls. + + Returns: + List of urls from which blobs can be downloaded. + + Raises: + FlowError + """ + query_urns = [] # urns to be queried + result_urls = [] # final url list to be returned + + # Add any cached urls to the return result first + # Leave spaces in the list for values that must be queried + for urn in urns: + if urn in _urn_to_url: + result_urls.append(_urn_to_url[urn]) + else: + result_urls.append(None) + query_urns.append(urn) + + # Query the download URLs from the API + if query_urns: + client = get_client() + q_input = medm_model.BinaryComponentUrlsByUrnsInput( + project_id=project_id, + urns=query_urns, + ) + q_urls = client.service_binary.binary_component_urls_by_urns(q_input) + try: + q_urls.call() + except GQLAPIError as exc: + msg = f"Error fetching binary component urls: {exc}" + raise FlowError(msg) from exc + + queried_urls = [bin_comp_url.url for bin_comp_url in q_urls.urls] + + # Cache the urls we just queried + for i, urn in enumerate(query_urns): + _urn_to_url[urn] = queried_urls[i] + + # Merge quered urls with result by filling in the None spaces + # (this should preserve the input order) + for i, url in enumerate(result_urls): + if url is None: + result_urls[i] = queried_urls.pop(0) + + return result_urls + + +@trace +def download( + component: medm_model.Component, + project_id: str, + directory: str, + file_sequence: bool = False, + skip_download: bool = False, +) -> dict[int, str]: + """Download all binary blobs in component to given directory. + Directory must exist, and component must be a binary component. + + Args: + component: Component to be downloaded. + project_id: Project that component belongs to. + directory: Existing folder location to be downloaded to. + file_sequence: If True, expect the component to contain a + zipped file sequence, and automatically expand it. + skip_download: Only relevant for file sequences. Used when + the source zip file has already been downloaded, but + the files haven't been extracted. + + Returns: + Dictionary of blob index to full path of downloaded file. + + Raises: + FlowError + """ + # Get list of urls for each component blob + urns = [blob["uri"] for blob in component.data.get("data", [])] + urls = fetch_blob_urls(project_id, urns) + + result = {} + for i, url in enumerate(urls): + # Determine destination path + # NOTE: this blob index is guaranteed to exist because we retrieved its url + blob_path = component.data["data"][i]["path"] + file_path = cleanpath(directory, blob_path) + + # Finally download the file and save to disk + try: + if not skip_download: + download_file(url, file_path) + except Exception as exc: # pylint: disable=broad-except + raise FlowError( + f'Failed to download blob {i} with url "{url}". {exc}' + ) from exc + result[i] = file_path + + if file_sequence: + # NOTE: This is a temporary solution. When we cease to zip + # up file sequences, this code block and parameter can be removed! + zip_file_path = result[0] + with zipfile.ZipFile(zip_file_path, "r") as zip_file: + # Update result dictionary to reflect frames extracted + # (Do this to mimic the future behaviour where each frame + # will be stored as its own blob) + result = {} + blob_index = 0 + for file_name in zip_file.namelist(): + result[blob_index] = cleanpath(directory, file_name) + blob_index += 1 + # Check for unsafe file paths within zip + # We don't want to allow extracting outside of download directory + if file_name.startswith("/") or ".." in file_name: + msg = f"Unsafe file path detected in zip file: {file_name} - aborting extraction." + raise FlowError(msg) + # Extract the files + zip_file.extractall(directory) + + return result + + +@trace +def fetch( + revision: medm_model.AssetRevision, + component_name: str = "", + component_purpose: str = "", + fetch_dependencies: bool = False, +): + """Fetch the given component of a revision if not already on disk. + If the specified component does not exist, nothing will happen. + + Args: + revision: Revision whose component should be fetched. + component_name: If provided, search for component with this name to be fetched. + This should be unique within the revision. + component_purpose: If provided, search for a component with this purpose to be fetched. + There may be multiple components with the same purpose, + so the first match will be returned. + fetch_dependencies: If True, also fetch the full dependency tree of the revision + using the same component criteria. + + ..note:: If both component name and purpose are provided, the first intersection + of both criteria will be returned. + """ + logger = get_logger(__name__) + + # Get project id + project_id = _get_project_id(revision.id) + + # List of revisions to be fetched + rev_list = [revision] + if fetch_dependencies: + # Add any dependencies (this will include entire dependency tree) + # NOTE: the uses query will return the input revision itself so this + # item will be duplicated in the list, however that should not cause + # a problem. + rev_list.extend(list(_iterate_uses(revision.numbered_version_id))) + + def missing_seq_files(file_seq_comp): + # Return True if any files from the file seq are missing + file_list = _get_file_list(file_seq_comp) + # Convert to absolute paths + storage_dir = get_storage_revision_dir(rev.asset_id, rev.revision_number) + file_list = [cleanpath(storage_dir, f) for f in file_list] + missing_files = False + for f in file_list: + if not os.path.exists(f): + missing_files = True + break + return missing_files + + for rev in rev_list: + # Check that revision has the specified component + # NOTE: making the assumption here that we only have a single blob + comp = _find_component(rev, name=component_name, purpose=component_purpose) + if comp is None: + # If the component doesn't exist, we will log a warning + # but not consider it a failure. The purpose of this function + # is to fetch stored binaries, so if there are no stored + # binaries, the point is moot. + msg = "No component of " + msg += f'name "{component_name}" ' if component_name else "" + msg += f'purpose "{component_purpose}" found in revision "{rev.name}".' + msg += "Skipping fetch for this revision..." + logger.warning(msg) + continue + # NOTE: the component is guaranteed to exist because we already found + # it - can assume this path will not be None + cache_source_path = get_storage_component_path(rev, component_name=comp.name) + file_seq_comp = _find_component(rev, type_id=get_schema_id(FILE_SEQ_TYPE)) + # Check primary storage for source path before fetching + if file_seq_comp and not missing_seq_files(file_seq_comp): + # For file sequences, it's not good enough to check for just + # the source zip file, but we should also make sure its been unzipped + continue + elif not file_seq_comp and os.path.exists(cache_source_path): + continue + + msg = f"Fetching binaries for revision {rev.name} - r{rev.revision_number}" + msg += f', component "{comp.name}".' + logger.info(msg) + + # Fetch the component (indicate if it's a file sequence) + download( + comp, + project_id, + get_storage_revision_dir(rev.asset_id, rev.revision_number), + file_sequence=file_seq_comp is not None, + # NOTE: we may be in a situation where the source file already exists + # but its a file seq that needs to be unzipped. In this case, + # indicate that the download step can be skipped. + skip_download=os.path.exists(cache_source_path), + ) + + # Once fetched, cache asset info in storage dir if necessary + _cache_asset_info(rev.asset_id) + + +@trace +def get_thumbnail_file(revision: medm_model.AssetRevision) -> str: + """Return the path to the thumbnail file on disk. Fetch the file if necessary. + + Args: + revision: Revision whose thumbnail should be fetched. + + Returns: + File path to thumbnail. + + Raises: + ThumbnailError + """ + # Check that thumbnail component exists and + # get path to thumbnail path of revision in local storage + thumbnail_comp = _find_component(revision, purpose=THUMBNAIL_PURPOSE) + if thumbnail_comp is None: + msg = "Revision does not have a thumbnail component." + raise ThumbnailError(revision_id=revision.id, details=msg) + + # Fetch thumbnail component of revision + fetch(revision, component_purpose=THUMBNAIL_PURPOSE) + + # Verify that fetch was successful + file_path = get_storage_component_path(revision, component_name=thumbnail_comp.name) + if not os.path.exists(file_path): + msg = f"Thumbnail file does not exist in storage: {file_path}" + raise ThumbnailError(revision_id=revision.id, details=msg) + + return file_path + + +@trace +def get_thumbnail_url(revision: medm_model.AssetRevision) -> str: + """Return a signed url of the thumbnail for given revision. + + Args: + revision: Revision whose thumbnail should be fetched. + + Returns: + Url of thumbnail. + + Raises: + ThumbnailError + """ + # Get project id + project_id = _get_project_id(revision.id) + + # Check that thumbnail component exists + thumbnail_comp = _find_component(revision, purpose=THUMBNAIL_PURPOSE) + if thumbnail_comp is None: + msg = "Revision has no thumbnail component." + raise ThumbnailError(revision_id=revision.id, details=msg) + + # Fetch the thumbnail's url (assume single blob) + try: + urn = thumbnail_comp.data.get("data", [])[0]["uri"] + return fetch_blob_urls(project_id, [urn])[0] + except (FlowError, IndexError) as exc: + msg = "Could not fetch thumbnail url." + raise ThumbnailError(revision_id=revision.id, details=msg) from exc + + +@cache +@trace +def _iterate_uses(version_id: str) -> Iterator[medm_model.AssetRevision]: + """Query uses relationships in this asset/revision. + Pagination is handled internally within this call via the V2 sdk. + If this query has already been performed, the cached result will be returned. + If refresh=True, do a fresh query. + + NOTE: This implementation grabs the entire uses tree because in practice + this is usually what we need (to fetch dependencies). + + Args: + version_id: Query "uses" dependency tree starting from this version id. + + Returns: + Iterator which handles the paginated response of the query containing + medm_model.AssetRevision objects. + + Raises: + FlowError + """ + client = get_client() + q_input = medm_model.AssetVersionsByTraversalInput( + start_at_id=version_id, # type: ignore[attr-defined] + depth=0, # retrieve entire tree + direction=medm_model.TraverseDirectionEnum.OUTGOING.value, + ) + q_uses = client.service_asset.asset_versions_by_traversal(q_input) + + # Wrap existing iterator in V2 sdk + # NOTE: The iterator function makes the actual query calls so no need to + # explicitly invoke call() here. + try: + # NOTE: We are getting revisions for now because this is most useful to us + # as the primary use case for getting uses information is to fetch + # dependencies. + # + # This is fetched through the versions iterator and not the revisions + # iterator. Since we are querying outgoing edges, the response gives us + # a list of edges like + # Rx -> Vy + # Rx -> Vz + # Rw -> Vu + # ... + # where R = revision, V = version + # The revisions iterator gives us the revision objects associated with + # the source of those edges. The versions iterator gives us the version + # objects associated with the destination of those edges. + for ver in q_uses.versions_iterator: + revision = ver.revision + yield revision + except GQLAPIError as exc: + msg = f"Error querying uses relationships. {exc}" + raise FlowError(msg) from exc + + +def _get_file_list(fileseq_comp: medm_model.Component) -> list[str]: + """Return list of file names described by a file sequence type component.""" + frame_set = fileseq.FrameSet(fileseq_comp.data["frameSet"]) + file_format = fileseq_comp.data["fileFormat"] + file_list = [file_format % i for i in list(frame_set)] + return file_list + + +def _get_project_id(input_id: str) -> str: + """Convert a medm asset/revision/version id into a project id.""" + parts = input_id.split(":") + project_id = f"urn:medm:project:{parts[3]}:{parts[4]}" + return project_id diff --git a/python/tk-core/python/tank_vendor/flow_integration_sdk/globals.py b/python/tk-core/python/tank_vendor/flow_integration_sdk/globals.py new file mode 100644 index 00000000..a86599eb --- /dev/null +++ b/python/tk-core/python/tank_vendor/flow_integration_sdk/globals.py @@ -0,0 +1,215 @@ +# - +# ***************************************************************************** +# Copyright 2026 Autodesk, Inc. All rights reserved. +# +# These coded instructions, statements, and computer programs contain +# unpublished proprietary information written by Autodesk, Inc. and are +# protected by Federal copyright law. They may not be disclosed to third +# parties or copied or duplicated in any form, in whole or in part, without +# the prior written consent of Autodesk, Inc. +# ***************************************************************************** +# + + +""" +This module contains convenience constants and globally accessible +session variables relevant to MEDM access and asset management. +""" + +from __future__ import annotations # needed for python 3.9 support + +from dataclasses import dataclass +from typing import Callable + +from tank_vendor.flow_data_sdk import GQLClient +from tank_vendor.flow_data_sdk.base.client import AuthenticationHandlerBase + +from . import utils +from .exceptions import FlowError +from .utils import get_logger + +# Component type ids +# ------------------ +# Type ids correspond to specific MEDM schemas (and versions). +# Schemas can be created in a hierarchical fashion using inheritance. +# The schemas below are official Autodesk supported types that are +# commonly relevant to asset management. + +BASE_TYPE_ID = "autodesk.me:type-1.1.0" +BINARY_TYPE_ID = "autodesk.me:component.binary-1.0.0" +COMMENT_TYPE_ID = "autodesk.me:component.publishComment-1.0.0" +# NOTE: This is a temporary schema being annexed for representing derivative source +# which should be switched for a dedicated schema later. +DER_SOURCE_TYPE_ID = "autodesk.me:component.dynamicPlaylistSource-1.0.0" +FOLDER_TYPE_ID = "autodesk.me:type.folder-1.0.0" +IMAGE_TYPE_ID = "autodesk.me:component.binary.image-1.0.0" + +# Component types +# --------------- +# Component base type names without full ids. +# This should be a temporary measure, only necessary while some types +# are not yet added to the autodesk domain, and must be created per collection. +FILE_SEQ_TYPE = "type.fileSequence" + + +# Component purposes +# ------------------ +# Purposes are special designations that can be added to a binary component to +# differentiate it based on function/characteristic. Values are completely arbitrary. +# The purposes below are some basic defaults that are generally useful, +# but integrations can choose to use other values. + +SOURCE_PURPOSE = "source" +THUMBNAIL_PURPOSE = "thumbnail" + + +# Component names +# --------------- +# Conventional component names for formally supported components. +# NOTE: Component names must be unique within an asset revision. + +COMMENT_COMP = "Comment" +DER_SOURCE_COMP = "Derivative Source" +FILE_SEQ_COMP = "File Sequence" +SOURCE_COMP = "Source" +THUMBNAIL_COMP = "Thumbnail" +TYPE_COMP = "Type" + + +# MEDM GQL Client Access +# ---------------------- +# Global gql client instance that is initialized per session. +# This variable is for internal use only and should be initialized +# explicitly using the init_client() function, and accessed via get_client(). + +_gql_client: GQLClient | None = None + + +def init_client(endpoint_url: str, auth_handler: AuthenticationHandlerBase): + """Initialize a global client instance that can be reused for the session. + Client object can be accessed using `get_client()` function. + + Args: + endpoint_url: Endpoint to connect to. + auth_handler: An instance of a subclass of AuthenticationHandlerBase + with required authentication interface implemented. + """ + global _gql_client + + logger = get_logger(__name__) + logger.info(f"Creating V2 GQL client with endpoint: {endpoint_url}") + _gql_client = GQLClient(endpoint=endpoint_url, auth_handler=auth_handler) + + +def get_client() -> GQLClient: + """Return global client if initialized, otherwise raises an error. + + Raises: + FlowError + """ + if _gql_client is None: + raise FlowError("GQL client has not been initialized.") + return _gql_client + + +# MEDM Session Collection +# ---------------------- +# The session collection stores the MEDM collection that we are operating +# under for the current session. Tracking this helps us to query schema information +# from the right collection. + +_session_collection: SessionCollection | None = None + + +@dataclass +class SessionCollection: + """Data class containing relevant information for session collection. + It tracks the collection id, and provides easy access to pertinent attributes. + """ + + #: Id of collection + id: str + #: Organization ID of collection + organization_id: str + #: Group Id of collection + group_id: str + + def is_cpa_collection(self) -> bool: + """Return true if session project is from a CPA provisioned collection.""" + if self.organization_id == "fstech": + return False + return True + + def __str__(self): + """Stringify object info in readable way.""" + s = "SESSION COLLECTION:\n" + s += f"\tid: {self.id}\n" + s += f"\torganization_id: {self.organization_id}\n" + s += f"\tgroup_id: {self.group_id}\n" + return s + + +def init_session_collection(collection_id: str, organization_id: str, group_id: str): + """Store collection info for session. + + Global SessionCollection data object can be accessed using `get_session_collection()` + function. + + Args: + collection_id: MEDM collection id. + organization_id: Organization id of collection. + group_id: Group id of collection. + """ + global _session_collection + + logger = get_logger(__name__) + logger.info("Setting session collection info...") + _session_collection = SessionCollection( + id=collection_id, + organization_id=organization_id, + group_id=group_id, + ) + logger.info(_session_collection) + + +def get_session_collection() -> SessionCollection: + """Return session collection if initialized, otherwise raises an error. + + Raises: + FlowError + """ + if _session_collection is None: + raise FlowError("Session collection has not been initialized.") + return _session_collection + + +# Web App url +# ----------- +# Store configured web app url as a global for the session. +# This variable is for internal use only. +# Configure this value via set_webapp_url() and access is via get_webapp_url(). + +_webapp_url = None + + +def set_webapp_url(url: str): + """Set global variable for webapp url.""" + global _webapp_url + logger = get_logger(__name__) + logger.info(f"Setting Flow web app url to: {url}") + _webapp_url = url + + +def get_webapp_url() -> str | None: + """Return configured webapp url or None if it is not set.""" + return _webapp_url + + +# Configure logger +# ---------------- +# Set a logger callback for use in the integration sdk. +# If not configured, a default python logger will be used. + + +def set_logger_callback(callback: Callable): + """Set the function that returns the logger for the session.""" + utils._logger_callback = callback diff --git a/python/tk-core/python/tank_vendor/flow_integration_sdk/objects.py b/python/tk-core/python/tank_vendor/flow_integration_sdk/objects.py new file mode 100644 index 00000000..ad27fcb2 --- /dev/null +++ b/python/tk-core/python/tank_vendor/flow_integration_sdk/objects.py @@ -0,0 +1,1470 @@ +# - +# ***************************************************************************** +# Copyright 2026 Autodesk, Inc. All rights reserved. +# +# These coded instructions, statements, and computer programs contain +# unpublished proprietary information written by Autodesk, Inc. and are +# protected by Federal copyright law. They may not be disclosed to third +# parties or copied or duplicated in any form, in whole or in part, without +# the prior written consent of Autodesk, Inc. +# ***************************************************************************** +# + + +""" +This module contains custom object wrappers representing MEDM data. +The object inferface provides a convenient way to access, query and do paginated +iteration of MEDM data. It also provides an interface to the Flow file storage +solution for seamless access to both the data model and associated binaries. +""" + +from __future__ import annotations # needed for python 3.9 support + +import datetime +import re +import urllib +from collections.abc import Iterator +from functools import cache +from typing import Any + +from tank_vendor.flow_data_sdk.base import model as medm_model +from tank_vendor.flow_data_sdk.base.exceptions import GQLAPIError + +from .exceptions import ( + EntityNotFoundError, + FlowError, +) +from .fetch import ( + download, + fetch, + fetch_blob_urls, + get_thumbnail_file, + get_thumbnail_url, +) +from .globals import ( + BASE_TYPE_ID, + BINARY_TYPE_ID, + COMMENT_TYPE_ID, + DER_SOURCE_TYPE_ID, + get_client, + get_webapp_url, +) +from .sandbox import CheckoutDraftInfo, get_asset_drafts +from .storage import ( + _cache_asset_info, + get_storage_asset_dir, + get_storage_component_path, + get_storage_key, + get_storage_revision_dir, +) +from .utils import ( + get_logger, + to_regex_safe_wildcard_string, + trace, +) + + +class FlowEntity: + """Base class with functionality pertinent to MEDM entities. + This includes Assets and Projects, and basically entails having containership + capabilities (i.e. having children). + """ + + def __init__(self, entity: medm_model.Asset | medm_model.Project, **kwargs): + """ + Args: + entity: The medm entity that this object represents. + """ + # The medm entity that this class represents + # This should be a medm_model.Asset or medm_model.Project + # Storing this object so we can access its properties + self._entity = entity + + # Query objects - initialized on demand + # NOTE: In V2 api, query objects should be instantiated every call + # and persist the results of that query for the object's lifetime. + self._q_children: Any = None + + super().__init__(**kwargs) + + @property + def id(self) -> str: + """Return MEDM id of entity.""" + return self._entity.id + + @property + def name(self) -> str: + """Return MEDM name of entity.""" + return self._entity.name + + @trace + def iterate_children(self, refresh: bool = False) -> Iterator[FlowAsset]: + """Query assets contained in this entity. + Pagination is handled internally within this call via the V2 sdk. + If this query has already been performed, the cached result will be returned. + If refresh=True, do a fresh query. + + Raises: + FlowError + """ + # Construct new "contains" query if necessary + if self._q_children is None or refresh: + client = get_client() + q_input = medm_model.AssetsByTraversalInput( + start_at_id=self.id, + depth=1, + direction=medm_model.TraverseDirectionEnum.OUTGOING.value, + ) + self._q_children = client.service_asset.assets_by_traversal(q_input) + + # Wrap existing iterator in V2 sdk + try: + for child in self._q_children.assets_iterator: + # Skip self in the results (traversal API includes start node) + if child.id == self.id: + continue + yield FlowAsset(child) # convert to custom Asset object + except GQLAPIError as exc: + msg = f'Error querying children of entity "{self.name}". {exc}' + raise FlowError(msg) from exc + + @trace + def find_child(self, name: str, force_query: bool = False) -> FlowAsset | None: + """Find the child that has the given name. + + .. note:: The first match found will be returned. + + Args: + name: Name to be matched. + force_query: Force a new query of the asset's children. + If False, previous query results will be used if available. + + Returns: + The FlowAsset entity if found, or None. + + Raises: + FlowError + """ + for child in self.iterate_children(refresh=force_query): + if child.name == name: + return child + return None + + @trace + def find_children( + self, + name: str = "", + type_id: str = "", + force_query: bool = False, + ) -> list[FlowAsset]: + """Return any children that matches the given criteria. + + Args: + name: Name to be matched. Can support wildcard character '*'. + If blank ignore this filter. + type_id: Match children marked as this type (sub-types will be included). + If blank ignore this filter. + force_query: Force a new query of the asset's children. + If False, previous query results will be used if available. + Returns: + List of FlowAsset objects. + + Raises: + FlowError + """ + matches = [] + regex = "^{}$".format(to_regex_safe_wildcard_string(name)) + for child in self.iterate_children(refresh=force_query): + if name and not re.match(regex, child.name): + continue + if type_id and not child.find_component(type_id=type_id): + continue + matches.append(child) + return matches + + +class UsesMixin: + """Mixin class with convenience functionality pertinent to MEDM objects + that contain "uses" relationships (i.e. dependencies on other MEDM assets). + This includes FlowAssets and FlowRevisions. + """ + + @trace + def init_uses(self, version_id: str): + """Explicit initialization function to store pertinent info. + This should be called in the __init__() function of any inheriting classes. + + Args: + version_id: Version id of asset or revision. + """ + self._uses_version_id = version_id + + # Query objects - initialized on demand + # NOTE: In V2 api, query objects should be instantiated every call + # and persist the results of that query for the object's lifetime. + self._q_uses: Any = None + + @trace + def iterate_uses(self, refresh: bool = False) -> Iterator[FlowRevision]: + """Query uses relationships in this asset/revision. + Pagination is handled internally within this call via the V2 sdk. + If this query has already been performed, the cached result will be returned. + If refresh=True, do a fresh query. + + NOTE: This implementation grabs the entire uses tree because in practice + this is usually what we need (to fetch dependencies). + + Raises: + FlowError + """ + # Construct new "uses" query if necessary + if self._q_uses is None or refresh: + client = get_client() + q_input = medm_model.AssetVersionsByTraversalInput( + start_at_id=self._uses_version_id, # type: ignore[attr-defined] + depth=0, # retrieve entire tree + direction=medm_model.TraverseDirectionEnum.OUTGOING.value, + ) + self._q_uses = client.service_asset.asset_versions_by_traversal(q_input) + + # Wrap existing iterator in V2 sdk + # NOTE: The iterator function makes the actual query calls so no need to + # explicitly invoke call() here. + try: + # NOTE: We are getting revisions for now because this is most useful to us + # as the primary use case for getting uses information is to fetch + # dependencies. + # + # This is fetched through the versions iterator and not the revisions + # iterator. Since we are querying outgoing edges, the response gives us + # a list of edges like + # Rx -> Vy + # Rx -> Vz + # Rw -> Vu + # ... + # where R = revision, V = version + # The revisions iterator gives us the revision objects associated with + # the source of those edges. The versions iterator gives us the version + # objects associated with the destination of those edges. + for ver in self._q_uses.versions_iterator: + revision = FlowVersion(ver).revision + yield revision + except GQLAPIError as exc: + msg = f"Error querying uses relationships. {exc}" + raise FlowError(msg) from exc + + +class ComponentMixin: + """Mixin class with convenience functionality pertinent to MEDM objects + that contain components. This includes FlowAssets and FlowRevisions. + """ + + @trace + def init_components(self, components: list[medm_model.Component]): + """Explicit initialization function to ingest component data. + This should be called in the __init__() function of any inheriting classes. + + Args: + components: List of medm_model.Component objects to be translated and stored + as internal Component objects. Must not be None. + + Raises: + FlowError: If components is None or any component data is invalid. + """ + if components is None: + raise FlowError( + "Components cannot be None. This indicates the query did not " + "include the components field, or the SDK returned NOT_SET." + ) + + self.components = [] # List of components encoded as custom objects + for medm_comp in components: + self.components.append(FlowComponent(self, medm_comp)) + + @trace + def get_binary_components(self) -> list[FlowComponent]: + """Search for all binary components on asset/revision and return. + + Returns: + Return a list of Components whose type id inherits from BINARY_TYPE_ID. + Empty list implies none found. + """ + type_comps = [] + for comp in self.components: + if BINARY_TYPE_ID in comp.parent_type_ids: + type_comps.append(comp) + return type_comps + + @trace + def get_type_components(self) -> list[FlowComponent]: + """Search for all type components on asset/revision and return. + + Returns: + Return a list of Components whose type id inherits from BASE_TYPE_ID. + Empty list implies none found. + """ + type_comps = [] + for comp in self.components: + if BASE_TYPE_ID in comp.parent_type_ids: + type_comps.append(comp) + return type_comps + + @trace + def get_type_ids(self) -> list[str]: + """Return the type ids of the given asset/revision. + + Returns: + Return a list of type ids associated with type components found on asset/revision. + Empty list implies no types are assigned to asset. + """ + type_comps = self.get_type_components() + return [comp.type_id for comp in type_comps] + + @trace + def find_components( + self, + name: str = "", + purpose: str = "", + type_id: str = "", + ) -> list[FlowComponent]: + """Search for component with matching name in given revision. + + ..note:: Filters, if defined, are treated as an intersection, meaning + results will conform to all filters. + + Args: + name: Component name to match. '*' wild card supported. + If blank ignore this filter. + purpose: Match this purpose on component. If blank ignore this filter. + type_id: Match this type id on component. If blank ignore this filter. + + Returns: + Component object or None if not found. + """ + regex = "^{}$".format(to_regex_safe_wildcard_string(name)) + matches = [] + for comp in self.components: + if name and not re.match(regex, comp.name): + continue + if purpose and purpose != comp.purpose: + continue + if type_id and type_id not in comp.parent_type_ids: + continue + matches.append(comp) + return matches + + @trace + def find_component( + self, + name: str = "", + purpose: str = "", + type_id: str = "", + ) -> FlowComponent | None: + """Search for component matching criteria in the same way as described in + `find_components()`, but return only the first match. + + Args: + See `find_components()` documentation. + + Returns: + Component object or None if not found. + """ + matches = self.find_components(name, purpose, type_id) + if matches: + return matches[0] + return None + + +class FlowProject(FlowEntity): + """Container class for data relevant to a particular medm_model.Project. + Stores various immutable properties to avoid needing to re-query them. + Provides functions for obtaining extra data about the medm_model.Project. + """ + + # MEDM entity name + MEDM_ENTITY = "project" + + @classmethod + def is_project_id(cls, project_id: str): + """Return True if given id conforms to expected structure for + MEDM project ids. + """ + if not project_id.startswith(f"urn:medm:{cls.MEDM_ENTITY}:"): + return False # does not have correct header + parts = project_id.split(":") + if len(parts) != 5: + return False # does not have correct segments + return True + + @classmethod + def get_project_id(cls, input_id: str) -> str: + """Convert an asset, revision or version id to a project id. + + Args: + input_id: An MEDM asset, revision or version id. + + Returns: + An MEDM project id. + + Raises: + ValueError + """ + if not FlowAsset.is_asset_id(input_id): + if not FlowRevision.is_revision_id(input_id): + if not FlowVersion.is_version_id(input_id): + msg = f"Invalid input id provided: {input_id}. " + msg += "Input must be an asset, version or revision id." + raise FlowError(msg) + + parts = input_id.split(":") + project_id = f"urn:medm:project:{parts[3]}:{parts[4]}" + return project_id + + @classmethod + def get_collection_id(cls, input_id: str) -> str: + """Return the collection id of the collection session project belongs to. + + Args: + input_id: An MEDM project, asset, revision or version id. + + Raises: + FlowError + """ + try: + prefix, col_id, sub_id = input_id.rsplit(":", maxsplit=2) + except ValueError as exc: + msg = f'Input id "{input_id}" is invalid. {exc}' + raise FlowError(msg) from exc + return col_id + + @trace + def __init__(self, project: str | medm_model.Project): + """ + Args: + project: Either an MEDM project id, or an medm_model.Project object. + + Raises: + EntityNotFoundError + FlowError + """ + logger = get_logger(__name__) + + if isinstance(project, str): + if not self.is_project_id(project): + msg = f"Invalid project id provided: {project}" + raise FlowError(msg) + # Query medm project by id + client = get_client() + q_input = medm_model.ProjectsByIdsInput(ids=[project]) + q_project = client.service_project.projects_by_ids(q_input) + try: + q_project.call() + except GQLAPIError as exc: + msg = f"Error querying project: {project}. {exc}" + raise FlowError(msg) from exc + if len(q_project.projects) == 0: + msg = "Error retrieving MEDM project." + raise EntityNotFoundError(entity_id=project, details=msg) + project = q_project.projects[0] + logger.info(f'Queried project "{project.name}".') + elif not isinstance(project, medm_model.Project): + msg = "Project error: input provided is not an medm_model.Project or project id." + raise FlowError(msg) + + # Trigger Entity class initialization + super().__init__(project) + + @property + def collection_id(self) -> str: + """The id of the collection to which this project belongs.""" + return self.get_collection_id(self.id) + + @property + def organization_id(self) -> str: + """Organization id of collection to which project belongs. + NOTE: This is useful for schema id determination. + """ + return self._entity.schema_registry_info.organization_id + + @property + def group_id(self) -> str: + """Group id of collection to which project belongs. + NOTE: This is useful for schema id determination. + """ + return self._entity.schema_registry_info.group_id + + def __str__(self): + """Readable string representation of project object.""" + s = "------------------------------\n" + s += f"PROJECT: {self.name}\n" + s += "------------------------------\n" + s += f" id: {self.id}\n" + s += f" organization_id: {self.organization_id}\n" + s += f" group_id: {self.group_id}\n" + return s + + +class FlowAsset(ComponentMixin, UsesMixin, FlowEntity): + """Container class for data relevant to a particular medm_model.Asset. + Stores various immutable properties to avoid needing to re-query them. + Provides functions for obtaining extra data about the medm_model.Asset as well + as publishing capabilities. + """ + + # MEDM entity nmae + MEDM_ENTITY = "asset" + + @classmethod + def is_asset_id(cls, asset_id: str) -> bool: + """Return True if given id conforms to expected structure for + MEDM asset ids. + """ + if not asset_id.startswith(f"urn:medm:{cls.MEDM_ENTITY}:"): + return False # does not have correct header + parts = asset_id.split(":") + if len(parts) != 6: # does not have correct segments + return False + return True + + @classmethod + def get_asset_id(cls, input_id: str) -> str: + """Convert a revision or version id to an asset id. + + Args: + input_id: An MEDM revision or version id. + + Returns: + An MEDM asset id. + + Raises: + ValueError + """ + if not FlowRevision.is_revision_id(input_id): + if not FlowVersion.is_version_id(input_id): + msg = f"Invalid input id provided: {input_id}. " + msg += "Input must be a version or revision id." + raise FlowError(msg) + + parts = input_id.split(":") + asset_id = f"urn:medm:asset:{parts[3]}:{parts[4]}:{parts[5]}" + return asset_id + + @classmethod + def get_web_url(cls, asset_id: str): + """Return url which will open Flow Web App to given asset id. + + ..note:: Please ensure web app base url is configured via + `globals.set_webapp_url()`. + """ + webapp_url = get_webapp_url() + if webapp_url is None: + raise FlowError("Web app url has not been configured.") + webapp_url = webapp_url.rstrip("/") + web_id = urllib.parse.quote(asset_id) + return f"{webapp_url}/assets?id={web_id}" + + @classmethod + def get_drafts(cls, asset_id: str) -> list[CheckoutDraftInfo]: + """Return all local drafts that exist for the given asset. + + .. note:: Currently, we only support a single draft per asset, + however this could change in the future with the introduction + of multiple checkouts/sandboxes. Returning a list keeps this + utility flexible. + + The returned values will be CheckoutDraftInfo objects which will contain + detailed information about each draft. + + Args: + asset_id: Id of MEDM asset. This can also be a revision or version id + from the same asset. + + Returns: + List of CheckoutDraftInfo objects. + + Raises: + FlowError + """ + # Convert to asset id if necessary + if FlowRevision.is_revision_id(asset_id) or FlowVersion.is_version_id(asset_id): + asset_id = FlowAsset.get_asset_id(asset_id) + elif not FlowAsset.is_asset_id(asset_id): + msg = f"Invalid input id provided: {asset_id}. " + msg += "Input must be an asset, revision or version id." + raise FlowError(msg) + return get_asset_drafts(asset_id) + + @trace + def __init__(self, asset: str | medm_model.Asset): + """ + Args: + asset: Either an MEDM asset id, or an medm_model.Asset object. + + Raises: + EntityNotFoundError + FlowError + """ + logger = get_logger(__name__) + + if isinstance(asset, str): + if not self.is_asset_id(asset): + msg = f"Invalid asset id provided: {asset}" + raise FlowError(msg) + client = get_client() + q_input = medm_model.AssetsByIdsInput(ids=[asset]) + q_asset = client.service_asset.assets_by_ids(q_input) + try: + q_asset.call() + except GQLAPIError as exc: + msg = f"Error querying asset: {asset}. {exc}" + raise FlowError(msg) from exc + if len(q_asset.assets) == 0: + msg = "Error retrieving MEDM asset." + raise EntityNotFoundError(entity_id=asset, details=msg) + asset = q_asset.assets[0] + logger.info(f'Queried asset "{asset.name}".') + elif not isinstance(asset, medm_model.Asset): + msg = "Asset error: input provided is not an medm_model.Asset or asset id." + raise FlowError(msg) + + # Store general entity information + super().__init__(asset) + # Initialize ComponentMixin class + self.init_components(asset.components) + # Initialize UsesMixin class + self.init_uses(asset.numbered_version_id) + + # Cache relevant data about this asset for future use + _cache_asset_info(self.id) + + # Query objects - initialized on demand + # NOTE: In V2 api, query objects should be instantiated every call + # and persist the results of that query for the object's lifetime. + self._q_revisions: Any = None + self._q_versions: Any = None + + @property + def storage_key(self) -> str: + """Storage key of asset.""" + return get_storage_key(self.id) + + @property + def parent_id(self) -> str: + """MEDM id of parent entity (could be an asset or project).""" + return self._entity.parent_id + + @property + def project_id(self) -> str: + """MEDM id of containing project.""" + return self._entity.project_id + + @property + def revision_id(self) -> str: + """Revision id of latest revision of asset at the time of + object creation or publish. + """ + return self._entity.revision_id + + @property + def revision_number(self) -> int: + """Revision number of latest revision of asset at the time of + object creation or publish. + """ + return self._entity.revision_number + + @property + def version_id(self) -> str: + """Id of latest (numbered) version of asset at time of + object creation or publish. + """ + return self._entity.numbered_version_id + + @property + def version_number(self) -> int: + """Number of latest (numbered) version of asset at time of + object creation or publish. + """ + return self._entity.version_number + + @property + def description(self) -> str | None: + """Description of asset.""" + return self._entity.description + + @property + def created_at(self) -> datetime.datetime: + """Creation timestamp of this asset.""" + return datetime.datetime.fromisoformat( + self._entity.created.date.replace("Z", "+00:00") + ) + + @property + def created_by(self) -> str | None: + """Username of creator of this asset.""" + if self._entity.created.user: + return self._entity.created.user.user_name + return None + + @property + @cache + def type_ids(self) -> list[str]: + """Return type ids explicitly assigned to asset. + (This will not include base types.) + """ + return self.get_type_ids() + + def get_storage_dir(self) -> str: + """Return the full path of asset directory in primary storage + (whether or not the directory exists). + + Returns: + Full path to expected location of primary storage directory on local disk. + """ + return get_storage_asset_dir(self.id) + + def get_storage_revision_dir(self) -> str: + """Return the full path of asset directory in primary storage + for the latest revision of asset (whether or not the directory exists). + + Returns: + Full path to expected location of primary storage directory on local disk. + """ + return get_storage_revision_dir(self.id, self.revision_number) + + @trace + def get_parent(self) -> FlowAsset | FlowProject: + """Return parent of this asset. + + Raises: + FlowError + """ + try: + if self.parent_id == self.project_id: + return FlowProject(self.parent_id) + else: + return FlowAsset(self.parent_id) + except FlowError as exc: + msg = f'Could not retrieve parent for asset "{self.name}".' + raise FlowError(msg, details=str(exc)) from exc + + @trace + def get_latest_revision(self) -> FlowRevision: + """Return an object representing the latest revision of this asset.""" + return FlowRevision.get_revision(self.revision_id) + + @trace + def iterate_revisions(self, refresh: bool = False) -> Iterator[FlowRevision]: + """Query revisions of this asset. + Pagination is handled internally within this call via the V2 sdk. + If this query has already been performed, the cached result will be returned. + If refresh=True, do a fresh query. + + Raises: + FlowError + """ + # Construct new "revisions" query if necessary + if self._q_revisions is None or refresh: + client = get_client() + q_input = medm_model.AssetRevisionsByAssetIdInput(asset_id=self.id) + self._q_revisions = ( + client.service_asset_revision.asset_revisions_by_asset_id(q_input) + ) + + # Wrap existing iterator in V2 sdk + try: + for rev in self._q_revisions.asset_revisions_iterator: + revision = FlowRevision(rev) # convert to custom FlowRevision object + yield revision + except GQLAPIError as exc: + msg = f'Error querying revisions of asset "{self.name}". {exc}' + raise FlowError(msg) from exc + + @trace + def iterate_versions(self, refresh: bool = False) -> Iterator[FlowVersion]: + """Query numbered versions for this asset using V2 GraphQL API. + Pagination is handled internally within this call via the V2 sdk. + If this query has already been performed, the cached result will be returned. + If refresh=True, do a fresh query. + + Only returns NumberedAssetVersion (v1, v2, v3...), not NamedAssetVersion ("latest"), + since NamedAssetVersion doesn't have direct revision access. + + Args: + refresh: If True, force a fresh query. If False, use cached results if available. + + Yields: + AssetVersion objects wrapping NumberedAssetVersion, ordered by version number + in descending order (newest first: v3, v2, v1). + + Raises: + FlowError + """ + # Construct new versions query if necessary + if self._q_versions is None or refresh: + client = get_client() + sort_input = medm_model.SortInput( + field="created.date", order=medm_model.SortOrderEnum.DESC + ) + q_input = medm_model.AssetVersionsByAssetIdInput( + asset_id=self.id, sort=sort_input + ) + self._q_versions = client.service_asset.asset_versions_by_asset_id(q_input) + + # Wrap existing iterator in V2 sdk + try: + for asset_version in self._q_versions.asset_versions_iterator: + # Skip NamedAssetVersion (like "latest" - they're just pointers) + if isinstance(asset_version, medm_model.NumberedAssetVersion): + yield FlowVersion(asset_version) + except GQLAPIError as exc: + msg = f'Error querying versions for asset "{self.name}". {exc}' + raise FlowError(msg) from exc + + @trace + def find_derivative( + self, + target_type_id: str, + target_component_name: str, + ) -> FlowAsset | None: + """Search asset to find an outbound derivative where the target + matches the criteria provided. + + This function searches across ALL revisions of the source asset to find + any existing derivative relationship. + + Args: + target_type_id: Type of target revision. + target_component_name: Name of component on target revision to be matched. + (Derivative relationships are component to component.) + + Returns: + The first derivative asset found, or None. + """ + # This target id should match the beginning of any revision id belonging to this asset + target_id = self.id.replace(self.MEDM_ENTITY, FlowRevision.MEDM_ENTITY) + + # Generate a query to find assets which contain a source-derivative + # component with a matching target id + # Since we know derivative assets will be siblings of the current asset + # we can safely scope this query to the parent asset with depth of 1. + client = get_client() + q_filter = f"has.component.type=={DER_SOURCE_TYPE_ID};" + q_filter += f"components[typeId:{DER_SOURCE_TYPE_ID}].data.folder.objectId=like={target_id}*;" + q_filter += ( + f"components[typeId:{DER_SOURCE_TYPE_ID}].name=='{target_component_name}'" + ) + q_input = medm_model.AssetsByTraversalInput( + start_at_id=self.parent_id, # search under parent + depth=1, # search immediate children only + direction=medm_model.TraverseDirectionEnum.OUTGOING.value, + filters=q_filter, + ) + q_derivatives = client.service_asset.assets_by_traversal(q_input) + + try: + q_derivatives.call() + except GQLAPIError as exc: + msg = f'Derivative query failed for asset "{self.name}". {exc}' + raise FlowError(msg) from exc + + # NOTE: the starting asset (i.e. parent) will always be returned in + # the asset list, so we must skip that one + der_assets = [ + FlowAsset(a) for a in q_derivatives.assets if a.id != self.parent_id + ] + # Now filter out derivatives of the wrong type + der_assets = [a for a in der_assets if target_type_id in a.type_ids] + + if len(der_assets) > 0: + return der_assets[0] + + return None + + def __str__(self): + """Readable string representation of asset object.""" + s = "------------------------------\n" + s += f"ASSET: {self.name}\n" + s += "------------------------------\n" + s += f" id: {self.id}\n" + s += f" storage_key: {self.storage_key}\n" + s += f" version: {self.version_number}\n" + s += f" revision: {self.revision_number}\n" + s += f" type_ids: {self.type_ids}\n" + return s + + +class FlowRevision(ComponentMixin, UsesMixin): + """Container class for data relevant to a particular medm_model.AssetRevision. + Stores various immutable properties to avoid needing to re-query them. + Since revisions are by definition immutable, this class stores a cache + of all previously accessed revisions so that they are never queried more than once. + """ + + # MEDM entity name + MEDM_ENTITY = "assetRevision" + + # Dictionaries that track already accessed revisions for reuse + # key = revision ids, value = FlowRevision object + _revision_cache: dict[str, FlowRevision] = {} + + @classmethod + def is_revision_id(cls, revision_id: str) -> bool: + """Return True if given id conforms to expected structure for + MEDM revision ids. + """ + if not revision_id.startswith(f"urn:medm:{cls.MEDM_ENTITY}:"): + return False # does not have correct header + parts = revision_id.split(":") + if len(parts) != 8: + return False # does not have correct segments + if parts[-2] != "rev": + return False # does not fit revision format + try: + int(parts[-1]) + except ValueError: + return False # does not have a valid revision number + return True + + @classmethod + def get_revision_id(cls, asset_id: str, revision_number: int) -> str: + """Generate a revision id based on inputs. + NOTE: resultant revision id will be structurally valid, but + may not actually exist. + + Args: + asset_id: MEDM asset id. + revision_number: Number of revision within asset. + + Returns: + MEDM revision id. + """ + if not FlowAsset.is_asset_id(asset_id): + raise FlowError(f"Invalid asset id provided: {asset_id}") + + # Remove asset header in id + asset_id = asset_id.split(":", maxsplit=3)[-1] + + return f"urn:medm:{cls.MEDM_ENTITY}:{asset_id}:rev:{revision_number}" + + @classmethod + def get_revision_number(cls, revision_id: str) -> int: + """Return revision number based on id.""" + if not cls.is_revision_id(revision_id): + raise FlowError(f"Invalid revision id provided: {revision_id}") + # NOTE: since id passed validation, there should be no errors here + return int(revision_id.split(":")[-1]) + + @classmethod + def get_revision(cls, revision: str | medm_model.AssetRevision) -> FlowRevision: + """Retrieve a cached FlowRevision object based on provided revision id + or create a new FlowRevision object to represent the revision. + + Args: + revision: Either a string medm revision id, or a medm_model.AssetRevision object. + + Returns: + FlowRevision object. + + Raises: + EntityNotFoundError + FlowError + """ + if isinstance(revision, medm_model.AssetRevision): + revision_id = revision.id + else: + revision_id = revision + + # Return cached value if available + if revision_id in cls._revision_cache: + return cls._revision_cache[revision_id] + + # Convert to custom object + return FlowRevision(revision) + + @trace + def __init__(self, revision: str | medm_model.AssetRevision): + """ + Args: + revision: Either an MEDM revision id, or an medm_model.AssetRevision object. + + Raises: + EntityNotFoundError + FlowError + """ + logger = get_logger(__name__) + + if isinstance(revision, str): + if not self.is_revision_id(revision): + msg = f"Invalid revision id provided: {revision}" + raise FlowError(msg) + client = get_client() + q_input = medm_model.AssetRevisionsByIdsInput(ids=[revision]) + q_revision = client.service_asset_revision.asset_revisions_by_ids(q_input) + try: + q_revision.call() + except GQLAPIError as exc: + msg = f"Error querying revision: {revision}. {exc}" + raise FlowError(msg) from exc + if len(q_revision.revisions) == 0: + msg = "Error retrieving MEDM revision." + raise EntityNotFoundError(entity_id=revision, details=msg) + revision = q_revision.revisions[0] + msg = f'Queried revision "{revision.name}" revision number {revision.revision_number}.' + logger.info(msg) + elif not isinstance(revision, medm_model.AssetRevision): + msg = "Revision error: input provided is not an medm_model.AssetRevision or revision id." + raise FlowError(msg) + + # The medm revision that this class represents + # This should be a medm_model.AssetRevision + # Storing this object so we can access its properties as needed + self._revision = revision + + # Initialize ComponentMixin class + self.init_components(revision.components) + # Initialize UsesMixin class + self.init_uses(revision.numbered_version_id) + + # Cache object + # Revisions are immutable so we should only ever query each revision once! + FlowRevision._revision_cache[revision.id] = self + + # -------------------------------------------------------------------- + # Enforce read-only properties on revision objects since these objects + # are cached and should be considered immutable. + # -------------------------------------------------------------------- + + @property + def id(self) -> str: + return self._revision.id + + @property + def asset_id(self) -> str: + """Return asset id of revision.""" + return self._revision.asset_id + + @property + def name(self) -> str: + return self._revision.name + + @property + def revision_number(self) -> int: + """Number of this revision. + This value is strictly acsending per revision and begins at 1. + """ + return self._revision.revision_number + + @property + def version_id(self) -> str: + """Return id of "numbered version" to which this revision belongs. + NOTE: Multiple revisions may map to the same numbered version. + The current revision may or may not be the latest of that set. + """ + return self._revision.numbered_version_id + + @property + def version_number(self) -> int: + """Return version number to which this revision belongs. + Version numbers with respect to revisions are non-decreasing, however, + multiple successive revisions may have the same version number. + This value increments beginning at 1. + """ + return self._revision.version_number + + @property + def storage_key(self) -> str: + """Storage key is the asset identifier portion of the full asset id.""" + return get_storage_key(self.asset_id) + + @property + def comment(self) -> str | None: + """Return the publish comment stored in a comment component if it exists.""" + comment_comp = self.find_component(type_id=COMMENT_TYPE_ID) + if comment_comp: + # Will ignore malformed comment components for now + return comment_comp.properties.get("subjectLine") + return None + + def get_storage_dir(self) -> str: + """Return the full path of asset revision directory in primary storage + (whether or not the directory exists). + + Returns: + Full path to expected location of cached storage directory on local disk. + """ + return get_storage_revision_dir(self.asset_id, self.revision_number) + + def get_storage_component_path( + self, + component_name: str = "", + component_purpose: str = "", + blob_index: int = 0, + ) -> str | None: + """Return the full path of the component blob file of the given asset revision + in primary storage (whether or not the file exists). + + Args: + component_name: If provided, search for component with this name and return its storage path. + This should be unique within the revision. + component_purpose: If provided, search for a component with this purpose and return + its storage path. There may be multiple components with the same purpose, + so the first match will be returned. + blob_index: Specific blob from source component to get. + + ..note:: If both component name and purpose are provided, the first intersection + of both criteria will be returned. + + Returns: + Full path to expected location of cached source file on local disk, or + None if the component does not exist on the revision. + """ + return get_storage_component_path( + self._revision, + component_name=component_name, + component_purpose=component_purpose, + blob_index=blob_index, + ) + + @trace + def fetch(self, component_purpose: str, fetch_dependencies: bool = False): + """Fetch the given component of this revision if not already on disk. + If the specified component does not exist, nothing will happen. + + Args: + component_purpose: Fetch component of this purpose. + fetch_dependencies: If True, also fetch components of the same purpose + in this revisions "uses" tree. + (This may not be appropriate for all component purposes.) + """ + fetch( + self._revision, + component_purpose=component_purpose, + fetch_dependencies=fetch_dependencies, + ) + + @trace + def get_thumbnail_file(self) -> str: + """Return the file path to the revision's thumbnail if it exists, + fetching it if necessary. + + Returns: + Full path to thumbnail in storage. + + Raises: + ThumbnailError + """ + return get_thumbnail_file(self._revision) + + @trace + def get_thumbnail_url(self) -> str: + """Return the signed url to the revision's thumbnail if it exists. + + Returns: + Url that can be used to download thumbnail. + + Raises: + ThumbnailError + """ + return get_thumbnail_url(self._revision) + + def __str__(self): + """Readable string representation of revision object.""" + s = "------------------------------\n" + s += f"REVISION: {self.name} - r{self.revision_number}\n" + s += "------------------------------\n" + s += f" id: {self.id}\n" + s += f" storage_key: {self.storage_key}\n" + s += f" version: {self.version_number}\n" + return s + + +class FlowVersion: + """Container class for data relevant to a medm_model.NumberedAssetVersion.""" + + # MEDM entity name + MEDM_ENTITY = "assetVersion" + + @classmethod + def is_version_id(cls, version_id: str) -> bool: + """Return True if given id conforms to expected structure for + MEDM version ids. + """ + if not version_id.startswith(f"urn:medm:{cls.MEDM_ENTITY}:"): + return False # does not have correct header + parts = version_id.split(":") + if len(parts) != 8: + return False # does not have correct segments + if parts[-2] != "ver": + return False # does not follow version format + # NOTE: ignoring "named" versions for now + try: + int(parts[-1]) + except ValueError: + return False # does not have a valid version number + return True + + @classmethod + def get_version_number(cls, version_id: str) -> int: + """Return version number based on id.""" + if not cls.is_version_id(version_id): + raise FlowError(f"Invalid version id provided: {version_id}") + # NOTE: since id passed validation, there should be no errors here + return int(version_id.split(":")[-1]) + + @classmethod + def get_version_id(cls, asset_id: str, version_number: int) -> str: + """Generate a version id based on inputs. + NOTE: resultant version id will be structurally valid, but + may not actually exist. + + Args: + asset_id: MEDM asset id. + version_number: Number of version within asset. + + Returns: + MEDM version id. + """ + if not FlowAsset.is_asset_id(asset_id): + raise FlowError(f"Invalid asset id provided: {asset_id}") + + # Remove asset header in id + asset_id = asset_id.split(":", maxsplit=3)[-1] + + return f"urn:medm:{cls.MEDM_ENTITY}:{asset_id}:ver:{version_number}" + + @trace + def __init__(self, version: str | medm_model.NumberedAssetVersion): + """ + Args: + version: Either an MEDM version id, or an medm_model.NumberedAssetVersion object. + + Raises: + EntityNotFoundError + FlowError + """ + logger = get_logger(__name__) + + if isinstance(version, str): + if not self.is_version_id(version): + msg = f"Invalid version id provided: {version}" + raise FlowError(msg) + client = get_client() + q_input = medm_model.AssetVersionsByIdsInput(ids=[version]) + q_version = client.service_asset.asset_versions_by_ids(q_input) + try: + q_version.call() + except GQLAPIError as exc: + msg = f"Error querying version: {version}. {exc}" + raise FlowError(msg) from exc + if len(q_version.versions) == 0: + msg = "Error retrieving MEDM version." + raise EntityNotFoundError(entity_id=version, details=msg) + version = q_version.versions[0] + msg = f"Queried version number {version.version_number}." + logger.info(msg) + elif not isinstance(version, medm_model.NumberedAssetVersion): + msg = "Version error: input provided is not an medm_model.NumberedAssetVersion or version id." + raise FlowError(msg) + + # The medm version that this class represents + # This should be a medm_model.NumberedAssetVersion + # Storing this object so we can access its properties as needed + self._version = version + + # Numbered versions have attached revision objects + # Take the opportunity to cache this since revisions are immutable + # and should only be queried once! + FlowRevision._revision_cache[self.revision.id] = self.revision + + @property + def id(self) -> str: + return self._version.id + + @property + def asset_id(self) -> str: + """Return asset id of version.""" + return self._version.asset_id + + @property + def version_number(self) -> int: + """Return number of version.""" + return self._version.version_number + + @property + def revision(self) -> FlowRevision: + """Return current revision associated with version. + The revision associated with a version can change over time. + The version object would need to be re-queried to see the changes. + """ + return FlowRevision(self._version.revision) + + @property + def created_at(self) -> datetime.datetime: + """Creation timestamp of this version.""" + return datetime.datetime.fromisoformat( + self._version.created.date.replace("Z", "+00:00") + ) + + @property + def created_by(self) -> str | None: + """Username of creator of this version.""" + if self._version.created.user: + return self._version.created.user.user_name + return None + + def __str__(self): + """Readable string representation of version object.""" + s = "------------------------------\n" + s += f"VERSION: v{self.version_number}\n" + s += "------------------------------\n" + s += f" id: {self.id}\n" + s += f" revision: {self.revision.name} (r{self.revision.revision_number})\n" + return s + + +class FlowComponent: + """Container class for data relevant to a particular medm_model.Component. + Presents component data in a more readable and accessible way. + """ + + @trace + def __init__(self, revision: FlowRevision, component: medm_model.Component): + """ + Args: + revision: Parent FlowRevision object. + component: Medm component object to convert to custom object. + + Raises: + FlowError + """ + # FlowRevision object that this component belongs to + self.revision = revision + # Original MEDM component object + self._component = component + # Uniquely identifying component name + self.name = component.name + # Type id specifies the type of the component (e.g. binary, type, etc) + self.type_id = component.type_id + # Ancestors of type id + self.parent_type_ids = component.parent_type_ids + # The purpose further specifies what kind of component this is + # For instance two binary components can have different purposes + self.purpose = component.data.get("purpose", "") + # For binary components, the blob array specifies the files associated + # with the component + self.blobs = [] + # Arbitrary additional properties stored on the component + self.properties = {} # key = property name, value = property value + + blob_data = component.data.get("data", []) + for blob in blob_data: + self.blobs.append(Blob(blob)) + + for prop, val in component.data.items(): + if prop in ["data", "purpose"]: + continue # already processed these + self.properties[prop] = val + + @trace + def get_blob_path(self, blob_index: int = 0) -> str: + """Return the relative path stored on the blob at the given index + of the given component. + + Args: + blob_index: The index into the blob array to be inspected. + + Returns: + The path of the blob relative to the asset revision folder. + + Raises: + FlowError + """ + if len(self.blobs) <= blob_index: + msg = f'Component "{self.name}" does not have a blob at index {blob_index}.' + raise FlowError(msg) + return self.blobs[blob_index].path + + @trace + def fetch_blob_urls(self) -> list[str]: + """Query list of urls for component blobs that can be used for + downloading. Order should be preserved. + + Raises: + FlowError + """ + # Get the URNs that we need to fetch + urns = [blob.uri for blob in self.blobs] + + # Get info about current project + project_id = FlowProject.get_project_id(self.revision.id) + + return fetch_blob_urls(project_id, urns) + + @trace + def download( + self, + directory: str, + file_sequence: bool = False, + skip_download: bool = False, + ) -> dict[int, str]: + """Download all binary blobs in component to given directory. + Directory must exist, and component must be a binary component. + + Args: + directory: Existing folder location to be downloaded to. + file_sequence: If True, expect the component to contain a + zipped file sequence, and automatically expand it. + skip_download: Only relevant for file sequences. Used when + the source zip file has already been downloaded, but + the files haven't been extracted. + + Returns: + Dictionary of blob index to full path of downloaded file. + + Raises: + FlowError + """ + # Get info about current project + project_id = FlowProject.get_project_id(self.revision.id) + + # Do download + return download( + self._component, + project_id, + directory, + file_sequence, + skip_download, + ) + + def __str__(self): + """Readable string representation of component object.""" + s = "------------------------------\n" + s += f"COMPONENT: {self.name}\n" + s += "------------------------------\n" + s += f" type_id: {self.type_id}\n" + if self.purpose: + s += f" purpose: {self.purpose}\n" + return s + + +class Blob: + """Container class for data relevant to a blob within a component.""" + + @trace + def __init__(self, blob_data: dict): + """ + Args: + blob_data: A dictionary of blob information from an medm component. + + Raises: + FlowError + """ + try: + self.path = blob_data["path"] + self.uri = blob_data["uri"] + except KeyError as exc: + msg = "Invalid blob data dictionary provided." + raise FlowError(msg, details=str(exc)) from exc + + def __str__(self): + """Readable string representation of blob object.""" + return f"[BLOB: {self.path}]" diff --git a/python/tk-core/python/tank_vendor/flow_integration_sdk/publish.py b/python/tk-core/python/tank_vendor/flow_integration_sdk/publish.py new file mode 100644 index 00000000..4e822463 --- /dev/null +++ b/python/tk-core/python/tank_vendor/flow_integration_sdk/publish.py @@ -0,0 +1,684 @@ +# - +# ***************************************************************************** +# Copyright 2026 Autodesk, Inc. All rights reserved. +# +# These coded instructions, statements, and computer programs contain +# unpublished proprietary information written by Autodesk, Inc. and are +# protected by Federal copyright law. They may not be disclosed to third +# parties or copied or duplicated in any form, in whole or in part, without +# the prior written consent of Autodesk, Inc. +# ***************************************************************************** +# + + +""" +This module provides asset publishing utilities. +""" + +from __future__ import annotations # needed for python 3.9 support + +import os +import uuid +import shutil +import tempfile +import zipfile +from abc import ABC, abstractmethod +from dataclasses import dataclass + +from tank_vendor.flow_data_sdk.base import model as medm_model +from tank_vendor.flow_data_sdk.base.exceptions import GQLAPIError + +from . import transferapi +from .exceptions import ( + CreateAssetError, + ComponentSpecError, + FlowError, + PublishAssetError, +) +from .globals import ( + BASE_TYPE_ID, + BINARY_TYPE_ID, + COMMENT_COMP, + COMMENT_TYPE_ID, + DER_SOURCE_COMP, + DER_SOURCE_TYPE_ID, + get_client, + IMAGE_TYPE_ID, + SOURCE_COMP, + SOURCE_PURPOSE, + THUMBNAIL_COMP, + THUMBNAIL_PURPOSE, + TYPE_COMP, +) +from .schema import is_sub_type +from .storage import ( + _cache_asset_info, + _find_component, + get_storage_revision_dir, +) +from .utils import cleanpath, get_logger, mimetype, trace + + +@dataclass +class UploadBlob: + """Data class containing relevant information for blob transfer.""" + + #: Local uri assigned to blob. + uri: str + #: Full path to blob file in sandbox. + full_path: str + #: Path of blob file relative to draft directory. + blob_path: str + + +class ComponentSpec(ABC): + """Abstract base class for component specification objects. + This should be subclassed. + """ + + @property + def name(self) -> str: + """Return name of component. + (Should be uniquely identifying within a revision.) + """ + raise NotImplementedError() + + @abstractmethod + def create(self) -> medm_model.Component: + """Create an MEDM component based on specifications.""" + raise NotImplementedError() + + @staticmethod + @trace + def create_component( + name: str, type_id: str, **data + ) -> medm_model.ComponentDataInput: + """Generate a medm_model.Component object. + + Args: + name: Name of component. This must be unique within a revision. + **data: The remaining keyword args will be treated as additional properties + to be set on the component, for example, purpose. + + Returns: + Component object that can be added to an AssetRevision. + """ + return medm_model.ComponentDataInput(name=name, data=data, type_id=type_id) + + +class BinaryComponentSpec(ComponentSpec): + """Base class for all binary component specs.""" + + def __init__(self): + # List of blob upload information stored as UploadBlob objects + # At creation time, the medm component will be given a uuid per blob. + # The ids along with the associated file paths on disk are tracked in + # UploadBlob data structures to be used later on for blob uploading. + self._upload_blobs = [] + + def create( + self, + name: str, + files: list[str], + type_id: str = "", + purpose: str = "", + **properties, + ) -> medm_model.Component: + """Create a medm binary component that is ready for upload. + + Args: + name: Name of component. If the component name already exists, an exception + will be thrown unless "overwrite" is True in which case, the existing + component will be replaced. + files: Full paths to existing files to be added to component. + (Order will be preserved.) + type_id: Type of binary component to be created. If not specified, the base + binary type will be used. + purpose: A string constant, describing the general purpose of the component. + **properties: The remaining keyword args will be treated as additional properties + to be set on the binary component, for example, resolution + information for a thumbnail. + + Returns: + Binary component created. + + Raises: + ComponentSpecError + """ + # Check that the files are valid + for file in files: + if not os.path.exists(file): + msg = f"Invalid source path provided for binary component: {file}" + raise ComponentSpecError(details=msg) + + # Check that the type is valid + if type_id and not is_sub_type(BINARY_TYPE_ID, type_id): + msg = f"Type id {type_id} is not a binary component type." + raise ComponentSpecError(details=msg) + type_id = type_id or BINARY_TYPE_ID + + # NOTE: TEMPORARY SOLUTION! + # Due to a limitation in MEDM where only a max of 10 blobs + # can be stored per binary component, we must zip multiple files + # and upload as a single blob. + if len(files) > 1: + # Generate the zip in the same directory as the first file + base_dir = os.path.dirname(files[0]) + # At this point we can assume the file sequence has been vetted + # for the correct naming convention - parse the base name out of + # the first file to use as the zip file name. + base_name = os.path.basename(files[0]).split(".")[0] + zip_path = cleanpath(base_dir, f"{base_name}.zip") + with zipfile.ZipFile(zip_path, "w") as zip_file: + # Add each file to zip with only its base name + # and with lossless compression + for f in files: + zip_file.write( + f, + arcname=os.path.basename(f), + compress_type=zipfile.ZIP_DEFLATED, + ) + files = [zip_path] + + blobs = [] # blob list + self._upload_blobs = [] + for i, file in enumerate(files): + # Associate each blob with a unique id which will be + # used for uploading later + uri = f"upload://{uuid.uuid4()}" + blob_path = os.path.basename(file) + # Add blob info for medm component + blobs.append( + { + "uri": uri, + "path": blob_path, + "mimeType": mimetype(file), + "size": os.path.getsize(file), + } + ) + # Store upload information for each blob for later use when publishing + self._upload_blobs.append( + UploadBlob( + uri=uri, + full_path=file, + blob_path=blob_path, + ) + ) + + data = {} # data block + for prop, val in properties.items(): + data[prop] = val + data["data"] = blobs + data["purpose"] = purpose + + # Create new component + return self.create_component(name=name, type_id=type_id, **data) + + +class CommentComponentSpec(ComponentSpec): + """Specifications for creating a comment component. + This is a component used to store the publish comment of a revision. + There is only expected to be one of these per revision. + """ + + def __init__(self, comment: str): + """ + Args: + comment: Description of revision provided at publish time. + """ + self.comment = comment + + @property + def name(self) -> str: + return COMMENT_COMP + + def create(self) -> medm_model.Component: + """Create an MEDM component based on specifications.""" + + # NOTE: comment components have an optional "body" property that we are not + # leveraging for now... + return self.create_component( + name=self.name, + type_id=COMMENT_TYPE_ID, + subjectLine=self.comment, + ) + + +class DerivativeSourceComponentSpec(ComponentSpec): + """Specifications for creating a derivative source component. + This is a component used in a derivative asset to point back to its source asset. + There is only expected to be one of these per revision. + """ + + def __init__(self, revision_id: str): + """ + Args: + revision_id: Id of source revision. + """ + self.revision_id = revision_id + + @property + def name(self) -> str: + return DER_SOURCE_COMP + + def create(self) -> medm_model.Component: + """Create an MEDM component based on specifications.""" + return self.create_component( + name=self.name, + type_id=DER_SOURCE_TYPE_ID, + folder={"objectId": self.revision_id}, + ) + + +class SourceComponentSpec(BinaryComponentSpec): + """Specifications for creating a source component. + This is a component used to store the main source file(s) of the revision. + There is only expected to be one of these per revision. + """ + + def __init__(self, *files): + """ + Args: + files: List of files to be stored in the component. + """ + self.files = files + + @property + def name(self) -> str: + return SOURCE_COMP + + @trace + def create(self) -> medm_model.Component: + """Create an MEDM component based on specifications.""" + return super().create(name=self.name, files=self.files, purpose=SOURCE_PURPOSE) + + +class ThumbnailComponentSpec(BinaryComponentSpec): + """Specifications for creating a thumbnail component. + This is a component used to store the thumbnail for the revision. + There is only expected to be one of these per revision. + """ + + def __init__(self, thumbnail_file: str): + """ + Args: + thumbnail_file: Path to thumbnail file. + """ + self.file = thumbnail_file + + @property + def name(self) -> str: + return THUMBNAIL_COMP + + @trace + def create(self) -> medm_model.Component: + """Create an MEDM component based on specifications.""" + return super().create( + name=self.name, + files=[self.file], + purpose=THUMBNAIL_PURPOSE, + type_id=IMAGE_TYPE_ID, + ) + + +class TypeComponentSpec(ComponentSpec): + """Specifications for creating a type component. + This is a component used to provide a type designation for the revision. + More than one type component may be added to a revision. + + .. note:: Designating a "type" for an asset in MEDM involves adding a "type" component + to a revision. There is no restriction on the number of type components + on a revision, and no requirement that types must remain the same from one revision + to the next. Therefore, maintaining a consistent type is largely up to the pipeline. + """ + + def __init__(self, type_id: str = "", name: str = ""): + """ + Args: + type_id: The MEDM type identifier for the type component. + If not provided, the base type id will be used. + name: A unique name for the type component + (since there may be more than one). + If not provided, a default name will be used. + + Raises: + ComponentSpecError + """ + # If provided, type id must be subtype of base type + if type_id and not is_sub_type(BASE_TYPE_ID, type_id): + msg = f"Type id {type_id} is not a subclass of base type." + raise ComponentSpecError(details=msg) + + self.type_id = type_id or BASE_TYPE_ID + self._name = name or TYPE_COMP + + @property + def name(self) -> str: + return self._name + + def create(self) -> medm_model.Component: + """Create an MEDM component based on specifications.""" + return self.create_component( + name=self.name, + type_id=self.type_id, + ) + + +class FileSeqComponentSpec(TypeComponentSpec): + """Specifications for creating a file sequence type component. + This is a component used to designate an asset as containing a file sequence. + This may be combined with other type designations to describe the nature of the asset. + """ + + def __init__( + self, + type_id: str, + frame_start: int, + frame_end: int, + frame_set: str, + file_format: str, + name: str = "", + ): + """ + Args: + type_id: The MEDM type identifier for the type component. + frame_start: First frame of file sequence. + frame_end: End frame of file sequence. + frame_set: A string expression denoting the set of frames + within the sequence. (e.g. "1-5,10,13-20") + file_format: A string expression denoting the file naming and + frame padding convention of the sequence. + (e.g. "render.%04d.exr") + name: A unique name for the type component + (since there may be more than one type component). + If not provided, a default name will be used. + + Raises: + ComponentSpecError + """ + # NOTE: for now, this type id will be passed in because it will + # be a custom schema. Later when the file sequence type id + # is formalized under autodesk namespace, we will create a + # global constant and use that instead. + + # If provided, type id must be subtype of base type + if not is_sub_type(BASE_TYPE_ID, type_id): + msg = f"Type id {type_id} is not a subclass of base type." + raise ComponentSpecError(details=msg) + + self.type_id = type_id + self.frame_start = frame_start + self.frame_end = frame_end + self.frame_set = frame_set + self.file_format = file_format + self._name = name or TYPE_COMP + + @property + def name(self) -> str: + return self._name + + @trace + def create(self) -> medm_model.Component: + """Create an MEDM component based on specifications.""" + return self.create_component( + name=self.name, + type_id=self.type_id, + frameStart=self.frame_start, + frameEnd=self.frame_end, + frameSet=self.frame_set, + fileFormat=self.file_format, + ) + + +@trace +def publish_new_asset( + name: str, + parent_id: str, + description: str = "", + components: list[ComponentSpec] | None = None, + used_versions: list[str] | None = None, +) -> medm_model.Asset: + """Create a new asset in AM. + + Args: + name: Name of asset. + parent: Entity under which to create the asset. + This should be an Asset or a Project object. + This can also be the id of an asset or project. + description: Optional description of asset. + components: List of component specifications that will be converted into components + to be attached to asset revision. + (Components are used to store binaries and metadata on revisions.) + used_versions: List of version ids of other assets used by this asset. + (Stored as "uses" relationships with other asset versions.) + + Raises: + CreateAssetError + """ + # Prepare medm component objects for publish + medm_components = _generate_medm_components(components) + + # Prepare medm uses inputs for publish + medm_uses = _generate_medm_uses(used_versions) + + # Call create asset mutation + client = get_client() + m_input = medm_model.CreateAssetInput( + name=name, + parent_id=parent_id, + components=medm_components, + description=description, + uses=medm_uses, + ) + m_create = client.service_asset.create_asset(m_input) + try: + m_create.call() + except GQLAPIError as exc: + msg = f'Error creating asset "{name}" on remote. {exc}. Request id: {exc.request_id}' + raise CreateAssetError(details=msg) from exc + + # Get new published asset + asset = m_create.asset + + # Upload associated binaries + if components is not None: + bin_specs = [ + spec for spec in components if isinstance(spec, BinaryComponentSpec) + ] + if not bin_specs: + return asset # nothing to transfer + _upload_binaries(asset, bin_specs) + + return asset + + +@trace +def publish_new_revision( + asset_id: str, + components: list[ComponentSpec] | None = None, + used_versions: list[str] | None = None, +) -> medm_model.Asset: + """Publish a new version of an existing asset. + + Args: + asset_id: Medm id of asset to be published. + components: List of component specifications that will be converted into components + to be attached to asset revision. + (Components are used to store binaries and metadata on revisions.) + used_versions: List of version ids of other assets used by this asset. + (Stored as "uses" relationships with other asset versions.) + + Returns: + Updated asset object. + NOTE: input asset object should be deprecated after publish. + + Raises: + PublishAssetError + """ + # Prepare medm component objects for publish + medm_components = _generate_medm_components(components) + + # Prepare medm uses inputs for publish + medm_uses = _generate_medm_uses(used_versions) + + client = get_client() + m_input = medm_model.UpdateAssetInput( + id=asset_id, + components=medm_components, + components_action=medm_model.ListAction.REPLACE.value, + named_version_change=medm_model.NamedVersionChangeEnum.CREATE_NEW.value, + uses=medm_uses, + ) + + m_update = client.service_asset.update_asset(m_input) + try: + m_update.call() + except GQLAPIError as exc: + msg = f"Failed to update asset. {exc}" + raise PublishAssetError(details=msg) from exc + + # Get updated asset + asset = m_update.asset + + # Upload associated binaries + if components is not None: + bin_specs = [ + spec for spec in components if isinstance(spec, BinaryComponentSpec) + ] + if not bin_specs: + return asset # nothing to transfer + _upload_binaries(asset, bin_specs) + + return asset + + +def _generate_medm_components( + comp_specs: list[ComponentSpec], +) -> medm_model.ComponentDataInput: + """Given component specs create medm component objects to be used in a publish.""" + comp_specs = [] if comp_specs is None else comp_specs + medm_components = [comp.create() for comp in comp_specs] + return medm_components + + +def _generate_medm_uses(used_versions: list[str]) -> medm_model.UsesTargetInput: + """Convert a list of version ids into a list of UsesTargetInput objects.""" + used_versions = [] if used_versions is None else used_versions + uses_inputs = [] + for version_id in used_versions: + uses_inputs.append(medm_model.UsesTargetInput(to_version_id=version_id)) + return uses_inputs + + +@trace +def _upload_binaries(asset: medm_model.Asset, bin_specs: list[BinaryComponentSpec]): + """Upload binaries of an asset post publish. + + Args: + bin_specs: List of BinaryComponentSpecs which indicate where + to find files to be uploaded. These should correspond + to existing binary components on asset. + """ + logger = get_logger(__name__) + + # Now upload the blobs to remote storage + # Before doing so, copy all binary data into a temporary location + # to insulate the transfer from external changes. + + logger.info("Copying binary data to temporary location for transfer...") + with tempfile.TemporaryDirectory() as tmpdir: + for bin_spec in bin_specs: + for upload_blob in bin_spec._upload_blobs: + temp_path = cleanpath(tmpdir, upload_blob.blob_path) + try: + shutil.copyfile(upload_blob.full_path, temp_path) + except Exception as exc: # pylint: disable=broad-except + msg = f'Failed to copy "{upload_blob.full_path}" to temp location "{temp_path}". {exc}' + raise PublishAssetError(details=msg) from exc + upload_blob.full_path = temp_path + + # Do file transfer to both remote and primary storage + _transfer_files(asset, bin_specs) + + +@trace +def _transfer_files(asset: medm_model.Asset, bin_specs: list[BinaryComponentSpec]): + """Transfer files associated with binary components to both remote + storage and primary storage. The medm asset provided is expected to + have been published to MEDM already. The binary components provided are expected + to have been relocated to a temporary location for transfer. + + Raises: + PublishAssetError + """ + logger = get_logger(__name__) + logger.info("Transfering binary data to cloud...") + + # The API will have mutated the component objects on the medm asset now, + # and their uri attributes will have been replaced with a URN which can be used + # to upload the blobs to. + + # NOTE: this whole process sucks! It's possible that the asset will be published, + # but the binary data transfer will fail, in which case you have a half published + # asset. This is really a flaw in the way the API works - you should upload the + # data first and then publish if the data transfer succeeds! + + # The transfer API uses the raw graphql connection + gql_client = get_client() + + for bin_spec in bin_specs: + # Find matching component represented by the component spec object + comp = _find_component(asset, name=bin_spec.name) + if not comp: + msg = f'Component "{bin_spec.name}" missing on medm asset object.' + raise PublishAssetError(details=msg) + + for i, upload_blob in enumerate(bin_spec._upload_blobs): + comp_blobs = comp.data.get("data", []) + if i >= len(comp_blobs): + msg = f'Component "{comp.name}" missing blob {i}.' + raise PublishAssetError(details=msg) + blob_urn = comp_blobs[i]["uri"] + + logger.info(f"Uploading {upload_blob.full_path}...") + + transferapi.upload_blob( + client=gql_client, + file_path=upload_blob.full_path, + urn_id=blob_urn, + upload_uri=upload_blob.uri, + ) + + logger.info(f"File {upload_blob.full_path} uploaded successfully!") + + # Copy files to blob storage as well (create folder if necessary) + logger.info("Transfering binary data to local storage...") + # Storage directory for latest version of asset + storage_dir = get_storage_revision_dir(asset.id, asset.revision_number) + if not os.path.exists(storage_dir): + os.makedirs(storage_dir) + has_failures = False + for bin_spec in bin_specs: + for upload_blob in bin_spec._upload_blobs: + source_path = cleanpath(upload_blob.full_path) + storage_path = cleanpath(storage_dir, upload_blob.blob_path) + logger.info(f"Copying {source_path} -> {storage_path}") + try: + shutil.copyfile(source_path, storage_path) + except Exception as exc: # pylint: disable=broad-except + # Since this copy is not publish critical, we will not stop execution + # if it fails + logger.warning(f"Copy to primary storage failed: {exc}") + has_failures = True + + # Add sidecar file to cache important asset data if necessary + try: + _cache_asset_info(asset.id) + except FlowError as exc: + logger.warning(f"Caching asset info in storage dir failed: {exc}") + has_failures = True + + if has_failures: + logger.info("All critical transfers complete!") + logger.warning("Some non-critical transfers/processes failed.") + else: + logger.info("All transfers complete!") diff --git a/python/tk-core/python/tank_vendor/flow_integration_sdk/sandbox.py b/python/tk-core/python/tank_vendor/flow_integration_sdk/sandbox.py new file mode 100644 index 00000000..673fce99 --- /dev/null +++ b/python/tk-core/python/tank_vendor/flow_integration_sdk/sandbox.py @@ -0,0 +1,794 @@ +# - +# ***************************************************************************** +# Copyright 2026 Autodesk, Inc. All rights reserved. +# +# These coded instructions, statements, and computer programs contain +# unpublished proprietary information written by Autodesk, Inc. and are +# protected by Federal copyright law. They may not be disclosed to third +# parties or copied or duplicated in any form, in whole or in part, without +# the prior written consent of Autodesk, Inc. +# ***************************************************************************** +# + + +""" +This module contains classes and utilities that facilitate the "sandbox". +This is a space on disk reserved for work in progress. Assets can be created, +or checked out in the sandbox, modified, and then published back to MEDM. + +The collection of files for an asset that is in sandbox is called a "draft". +These are contained within a "draft folder" whose location is managed by this module +(though the root location is configured in `storage.set_sandbox_root()`). +Within, the draft folder, a draft info sidecar file is stored to record important +information about a new draft or checkout draft. + * new draft = working on brand new asset + * checkout draft = working on published asset + +Draft files are by definition unpublished. Drafts are identified by either +an asset's storage key or temporary uuid for brand new assets. + +Within this module, we have utilities for querying draft information from the file system. +As well, there are key utilities for manipulating drafts including + * creating new assets as drafts + * checking out assets as drafts + * discarding drafts + * publishing new assets or revisions from drafts +""" + +from __future__ import annotations # needed for python 3.9 support + +import json +import os +import shutil +import uuid +from dataclasses import dataclass, asdict + +from tank_vendor.flow_data_sdk.base import model as medm_model +from tank_vendor.flow_data_sdk.base.exceptions import GQLAPIError + +from .fetch import fetch +from .globals import BASE_TYPE_ID, get_client +from .exceptions import ( + EntityNotFoundError, + FlowError, + DraftExistsError, + InvalidDraftError, + PublishAssetError, + PublishConflictError, +) +from .publish import ( + CommentComponentSpec, + ComponentSpec, + publish_new_asset, + publish_new_revision, + TypeComponentSpec, +) +from .storage import ( + get_sandbox_root, + get_storage_component_path, + get_storage_key, +) +from .utils import ( + cleanpath, + get_logger, + is_sub_directory, + relpath, + trace, +) + + +@dataclass +class DraftInfo: + """Base class for draft info dataclasses with providing common functionality.""" + + #: Id that uniquely identifies a draft in local sandbox. + draft_id: str + + @trace + def write_file(self, file_path: str): + """Write contents of dataclass to draft info file. + + Args: + file_path: Full path to destination file. + + Raises: + FlowError + """ + try: + with open(file_path, "w") as f: + f.write(json.dumps(asdict(self), indent=4)) + except Exception as exc: # pylint: disable=broad-except + msg = f"Draft info file could not be written: {file_path}" + raise FlowError(msg) from exc + + @classmethod + @trace + def read_file(cls, file_path: str) -> DraftInfo: + """Read a draft info file and convert into draft dataclass. + + Args: + file_path: Full path to draft info file. + + Returns: + Sub-class of BaseDraft. + + Raises: + FlowError + """ + try: + with open(file_path, "r") as f: + json_str = f.read() + except (IOError, OSError) as exc: + msg = f"Draft info file could not be opened: {file_path}" + raise FlowError(msg) from exc + + try: + json_dict = json.loads(json_str) + except json.JSONDecodeError as exc: + msg = f"Draft info file format is invalid: {file_path}" + raise FlowError(msg) from exc + + draft_type = json_dict.get("draft_type") + if draft_type == "new": + try: + return NewDraftInfo(**json_dict) + except TypeError as exc: + msg = f"Draft info file is missing required attributes for NewDraftInfo: {file_path}" + raise FlowError(msg) from exc + elif draft_type == "checkout": + try: + return CheckoutDraftInfo(**json_dict) + except TypeError as exc: + msg = f"Draft info file is missing required attributes for CheckoutDraftInfo: {file_path}" + raise FlowError(msg) from exc + else: + msg = f"Draft info file has invalid draft type designated: {file_path}" + raise FlowError(msg) + + def pprint(self): + """Print dataclass contents in readable way.""" + + logger = get_logger(__name__) + printstr = "\n-----------------------------------------\n" + printstr += f"{self.__class__.__name__}\n" + printstr += "-----------------------------------------\n" + for prop, value in self.__dict__.items(): + printstr += f" {prop}: {value}\n" + logger.info(printstr) + + +@dataclass +class CheckoutDraftInfo(DraftInfo): + """Container for info associated with a checkout draft. + NOTE: A checkout draft is a draft that results from checking out + a published revision. + """ + + #: Name of asset. + name: str + #: Id of asset. + asset_id: str + #: Version number of asset checked out. + version: int + #: Revision number of asset checked out. + revision: int + #: Latest published version of asset at the time of checkout. + latest_version: int + #: Latest published revision of asset at the time of checkout. + latest_revision: int + #: Source path of draft. + source_path: str + #: Record draft type as a constant property which makes recording to file easier. + draft_type: str = "checkout" + + +@dataclass +class NewDraftInfo(DraftInfo): + """Container for info associated with a new draft. + NOTE: A new draft is a draft for an asset that has been created and not yet published. + """ + + #: Name of asset. + name: str + #: Description of new asset. + description: str + #: Id of parent of new asset. + parent_id: str + #: Type ids to be associated with new asset. + type_ids: list[str] + #: Source path of draft. + source_path: str + #: Record draft type as a constant property which makes recording to file easier. + draft_type: str = "new" + + +# ------------------------------------------ +# DRAFT DATA ACCESSORS +# ------------------------------------------ + + +@trace +def get_draft_id(asset_id: str | None = None) -> str: + """Return a local draft id for given asset. + + Args: + asset_id: Medm asset id. If None, this is treated as a new asset - + return a temporary uuid. + + Returns: + Draft id for asset. + """ + # NOTE: For this sandbox implementation, we will use the storage key as the + # draft id for any published assets, and generate a uuid for new asset. + if asset_id is None: + return str(uuid.uuid4()) + else: + return get_storage_key(asset_id) + + +def get_draft_folder(draft_id: str) -> str: + """Return the location of the draft folder for the given draft id. + + Args: + draft_id: Id that uniquely identifies a draft within local sandbox. + + Returns: + Full path to draft folder on local disk. + """ + sandbox_root = get_sandbox_root() + return f"{sandbox_root}/{draft_id}/draft" + + +def get_draft_info_file(draft_id: str) -> str: + """Return expected path to draft info sidecar file, whether + or not it exists. + + Args: + draft_id: Id that uniquely identifies a draft within local sandbox. + + Returns: + Full path to draft info sidecar file on local disk. + """ + return cleanpath(get_draft_folder(draft_id), ".draft") + + +@trace +def read_draft_info(draft_id: str) -> DraftInfo: + """Read the draft info sidecar file and convert into draft dataclass. + + Args: + draft_id: Id that uniquely identifies a draft within local sandbox. + + Returns: + Subclass of DraftInfo dataclass. + + Raises: + InvalidDraftError + """ + draft_info_file = get_draft_info_file(draft_id) + if not os.path.exists(draft_info_file): + msg = f"Draft info file not found: {draft_info_file}" + raise InvalidDraftError(draft_id=draft_id, details=msg) + try: + return DraftInfo.read_file(draft_info_file) + except FlowError as exc: + raise InvalidDraftError(draft_id=draft_id, details=str(exc)) + + +@trace +def is_new_asset(draft_id: str) -> bool: + """Return True if the draft id provided points to a new asset that has + never been published. + + Args: + draft_id: Id that uniquely identifies a draft within local sandbox. + """ + draft_info = read_draft_info(draft_id) + return isinstance(draft_info, NewDraftInfo) + + +@trace +def is_local_draft(draft_id: str) -> bool: + """Return True if the draft id provided points to draft in local sandbox. + + Args: + draft_id: Id that uniquely identifies a draft within local sandbox. + """ + draft_folder = get_draft_folder(draft_id) + return os.path.exists(draft_folder) + + +@trace +def get_draft_context(draft_path: str) -> str | None: + """Given a file path, if it is a draft path in the local sandbox, + return the associated draft id. Otherwise return None. + + Args: + draft_path: A file path which is potentially belonging to a draft. + + Returns: + Draft id or None if path does not belong to a draft. + + Raises: + ValueError + """ + sandbox_root = get_sandbox_root() + if not is_sub_directory(sandbox_root, draft_path): + return None + + draft_path = relpath(sandbox_root, draft_path) + try: + draft_id, version, filename = draft_path.split("/") + except ValueError: + return None + + if version != "draft": + return None + + return draft_id + + +def get_asset_drafts(asset_id: str) -> list[CheckoutDraftInfo]: + """Return all local drafts that exist for the given asset. + + .. note:: Currently, we only support a single draft per asset, + however this could change in the future with the introduction + of multiple checkouts/sandboxes. Returning a list keeps this + utility flexible. + + The returned values will be CheckoutDraftInfo objects which will contain + detailed information about each draft. + + .. note:: This function can only be used to retrieve information about + checkouts. Please use `get_drafts(draft_type="new")` function + to retrieve list of brand new assets that exist in sandbox. + + Args: + asset_id: Id of MEDM asset. This can also be a revision or version id + from the same asset. + + Returns: + List of CheckoutDraftInfo objects. + """ + # Retrieve asset's draft id + draft_id = get_draft_id(asset_id) + # Read draft info if it exists + try: + draft_info = read_draft_info(draft_id) + except InvalidDraftError: + return [] + return [draft_info] + + +def get_drafts(draft_type: str | None = None) -> list[DraftInfo]: + """Return a list of all drafts found in local sandbox. + + Args: + draft_type: If specified, filter by given draft type. + Accepted values include "new" or "checkout". + + Returns: + List of DraftInfo objects that may be either + CheckoutDraftInfo or NewDraftInfo types. + + Raise: + FlowError + """ + sandbox_root = get_sandbox_root() + if not os.path.exists(sandbox_root): + raise FlowError(f"Configured sandbox root does not exist: {sandbox_root}") + + drafts = [] + for item in os.listdir(sandbox_root): + if not os.path.isdir(os.path.join(sandbox_root, item)): + continue + draft_id = item + try: + draft_info = read_draft_info(draft_id) + except InvalidDraftError: + continue + if draft_type is not None and draft_type != draft_info.draft_type: + continue # skip if filter doesn't match + drafts.append(draft_info) + return drafts + + +# ------------------------------------------ +# SANDBOX UTILITIES +# ------------------------------------------ + + +@trace +def create_asset_in_sandbox( + name: str, + description: str, + parent_id: str, + type_ids: list[str] | None = None, + source_path: str = "", +) -> NewDraftInfo: + """Create a workspace for a new asset in sandbox. + + Args: + name: String name for asset. + description: Description of the asset. + parent_id: Id of parent entity, which may be a project, folder or asset. + type_ids: List of type ids to be attached to asset. + source_path: Optionally provide a source file to be associated with new asset. + + Returns: + NewDraftInfo object. + + Raises: + EntityNotFoundError + """ + + # NOTE: This function will "create" an asset in the sense of creating a + # draft location for the asset and storing a sidecar file with + # relevant metadata, but not create anything on MEDM. + # The actual creation of the MEDM asset will be done at publish time. + + # Create unique draft id that is file safe + draft_id = get_draft_id() + + # Create a draft folder + draft_folder = get_draft_folder(draft_id) + if not os.path.exists(draft_folder): + os.makedirs(draft_folder) + + # Copy source file to draft folder if applicable + # TODO: This is over-simplified, and makes assumptions about a single source file + # as well as simple types. + # In future, we should accept ComponentSpecs instead which must + # be serialized into the draft info file to be re-created at publish time. + # We should also allow specification of multiple "input" files. + if source_path: + draft_path = cleanpath(draft_folder, os.path.basename(source_path)) + shutil.copyfile(source_path, draft_path) + else: + draft_path = "" + + # Add a sidecar file to store metadata of new asset + # This will ensure that when it's publish time, we have all the info we need + # to create the appropriate asset entity. + draft_info_file = get_draft_info_file(draft_id) + draft_info = NewDraftInfo( + draft_id=draft_id, + name=name, + description=description, + parent_id=parent_id, + type_ids=type_ids or [], + source_path=draft_path, + ) + draft_info.write_file(draft_info_file) + + return draft_info + + +@trace +def checkout_revision( + revision: medm_model.AssetRevision, + component_name: str = "", + component_purpose: str = "", + force: bool = False, +) -> CheckoutDraftInfo: + """Check out the given asset revision into sandbox. + If a draft already exists, an exception will be thrown unless force=True. + + Args: + revision: AssetRevision object. + component_name: If provided, search for component with this name to be checked out. + This should be unique within the revision. + component_purpose: If provided, search for a component with this purpose to be + checked out. There may be multiple components with the same purpose, + so the first match will be returned. + force: If True, force a re-checkout even if an existing draft is found. + + Returns: + A CheckoutDraftInfo object containing all pertinent information + of new or existing checkout. + + Raises: + DraftExistsError + FlowError + """ + logger = get_logger(__name__) + + draft_id = get_draft_id(revision.asset_id) + draft_folder = get_draft_folder(draft_id) + + if os.path.exists(draft_folder): + if not force: + raise DraftExistsError(draft_id=draft_id, draft_folder=draft_folder) + else: + logger.info("Removing existing draft folder...") + # Delete existing draft folder + try: + shutil.rmtree(draft_folder) + except Exception as exc: # pylint: disable=broad-except + msg = f"Could not remove existing draft directory: {draft_folder}" + raise FlowError(msg) from exc + + # Fetch necessary binaries for revision into primary storage + # TODO: Assumption that we are retrieving a single blob every time. + # Need to expand this to grab all blobs, or an explicit list. + fetch( + revision, + component_name=component_name, + component_purpose=component_purpose, + ) + + # Create the draft folder so we can copy new files to it + logger.info("Creating draft folder...") + os.makedirs(draft_folder) + + # Copy from storage into sandbox + # NOTE: assuming flat files in asset dir + # NOTE: assuming only a single source file + cached_path = get_storage_component_path( + revision, + component_name=component_name, + component_purpose=component_purpose, + ) + if cached_path is None: + # This indicates that the specified component does not exist + # on the revision, so raise an error + msg = "Revision does not contain a component fitting the filter: " + msg += f"component_name = {component_name}, component_purpose = {component_purpose}. " + msg += "No source file(s) to copy. Checkout cannot be completed." + raise FlowError(msg) + + draft_path = cleanpath(draft_folder, os.path.basename(cached_path)) + msg = "Copying files to draft folder...\n" + msg += f"{cached_path} -> {draft_path}" + logger.info(msg) + try: + shutil.copy(cached_path, draft_path) + except Exception as exc: # pylint: disable=broad-except + raise FlowError("Copy failed!") from exc + + # Query the asset to get it's latest info + asset = _query_asset(revision.asset_id) + + # Write draft info + draft_info_file = get_draft_info_file(draft_id) + draft_info = CheckoutDraftInfo( + draft_id=draft_id, + name=asset.name, + asset_id=asset.id, + revision=revision.revision_number, + latest_revision=asset.revision_number, + version=revision.version_number, + latest_version=asset.version_number, + source_path=draft_path, + ) + draft_info.write_file(draft_info_file) + logger.info("Draft metadata updated.") + + return draft_info + + +@trace +def discard_draft(draft_id: str): + """Discard an existing draft of an asset. + + Args: + draft_id: Unique id that identifies a draft location in local sandbox. + + Raises: + FlowError + InvalidDraftError + """ + logger = get_logger(__name__) + + if not is_local_draft(draft_id): + msg = f'The draft "{draft_id}" is not in local sandbox.' + raise InvalidDraftError(draft_id=draft_id, details=msg) + + draft_folder = get_draft_folder(draft_id) + parent_folder = os.path.dirname(draft_folder) + logger.info(f"Deleting draft folder: {parent_folder}...") + try: + # Remove the parent directory above "draft" folder + shutil.rmtree(parent_folder) + except Exception as exc: # pylint: disable=broad-except + msg = f"Draft folder could not deleted: {parent_folder}" + raise FlowError(msg) from exc + + +@trace +def publish_draft( + draft_id: str, + comment: str = "", + components: list[ComponentSpec] | None = None, + used_versions: list[str] | None = None, + force: bool = False, +) -> medm_model.Asset: + """Publish a new asset or new revision of existing asset from a draft. + + Args: + draft_id: Unique local draft id. + comment: Description of revision. + components: List of component specifications that will be converted into components + to be attached to asset revision. + (These are used to store binaries and metadata on revisions.) + used_versions: List of version ids of other assets used by this asset. + (Stored as "uses" relationships with other asset versions.) + force: If True, publish without checking for publish conflicts. + + Returns: + Updated MEDM asset object. + + Raises: + EntityNotFoundError + PublishAssetError + PublishConflictError + """ + logger = get_logger(__name__) + + # Retrieve draft metadata + draft_info = read_draft_info(draft_id) + + # Add comment component to components if not already present + components = [] if components is None else list(components) + components.append(CommentComponentSpec(comment)) + + if draft_info.draft_type == "new": + # For new assets, we need to convert the type ids into components + # (Names must be kept unique!) + for i, type_id in enumerate(draft_info.type_ids): + components.append(TypeComponentSpec(type_id=type_id, name=f"Type {i}")) + + # Publish new asset with appropriate metadata + asset = publish_new_asset( + name=draft_info.name, + parent_id=draft_info.parent_id, + description=draft_info.description, + components=components, + used_versions=used_versions, + ) + + # Rename the draft folder on first publish to replace the temporary draft + # id with the asset's permanent storage key + new_draft_id = get_storage_key(asset.id) + new_source_path = _rename_draft_folder(draft_id, new_draft_id) + draft_id = new_draft_id + + else: + # Query the asset + asset_id = draft_info.asset_id + try: + asset = _query_asset(asset_id) + except FlowError as exc: + msg = f"Invalid asset id associated with draft: {asset_id}" + raise EntityNotFoundError(entity_id=asset_id, details=msg) from exc + + # For existing assets, we need to preserve the types already assigned + # to the asset - add these to the component list + for i, type_id in enumerate(_get_type_ids(asset)): + components.append(TypeComponentSpec(type_id=type_id, name=f"Type {i}")) + + # Check for conflict before publishing + # A conflict arises if newer revisions of the asset have been published + # since this asset was checked out. + if not force and _check_publish_conflict(draft_info, asset): + checkout_revision = draft_info.revision + checkout_version = draft_info.version + raise PublishConflictError( + asset=asset, + checkout_version=checkout_version, + checkout_revision=checkout_revision, + ) + + # Update an existing asset by publishing a new revision + asset = publish_new_revision( + asset_id=asset_id, + components=components, + used_versions=used_versions, + ) + + # For publishes of existing assets, the source path should not change + new_source_path = draft_info.source_path + + msg = f'Successfully published version {asset.version_number} (r{asset.revision_number}) of asset "{asset.name}" to Flow AM!' + logger.info(msg) + + # Update the draft info file to adjust for latest publish. + # This is a sidecar file that will contain any relevant "checkout" information + # about current draft. After a publish, we will treat the draft has being + # checked out from the most recent published version. + # NOTE: we can continue to use the same draft id. + draft_info_file = get_draft_info_file(draft_id) + draft_info = CheckoutDraftInfo( + draft_id=draft_id, + name=asset.name, + asset_id=asset.id, + revision=asset.revision_number, + version=asset.version_number, + latest_revision=asset.revision_number, + latest_version=asset.version_number, + source_path=new_source_path, + ) + draft_info.write_file(draft_info_file) + logger.info("Draft metadata updated.") + + return asset + + +@trace +def _rename_draft_folder(old_draft_id: str, new_draft_id: str) -> str: + """Attempt to rename the draft folder to the new draft id. + If it's not possible, create the new draft folder and copy contents over. + + Returns: + Path of new path to source file. + + Raises: + PublishAssetError + """ + logger = get_logger(__name__) + logger.info(f'Renaming draft folder from "{old_draft_id}" -> "{new_draft_id}".') + draft_info = read_draft_info(old_draft_id) + old_draft_folder = os.path.dirname(get_draft_folder(old_draft_id)) + new_draft_folder = os.path.dirname(get_draft_folder(new_draft_id)) + try: + os.rename(old_draft_folder, new_draft_folder) + except Exception: # pylint: disable=broad-except + msg = f"Could not rename draft folder: {old_draft_folder}. " + msg += "Creating a copy instead..." + logger.warning(msg) + try: + shutil.copytree(old_draft_folder, new_draft_folder) + except Exception as exc: # pylint: disable=broad-except + msg = f"Could not create draft folder: {new_draft_folder}" + exc_data = {"draft_folder": old_draft_folder} + raise PublishAssetError(data=exc_data, details=msg) from exc + + # Determine new source path + old_source_path = draft_info.source_path + new_source_path = old_source_path.replace(old_draft_folder, new_draft_folder) + return new_source_path + + +def _query_asset(asset_id: str) -> medm_model.Asset: + """Query an asset based on id. + + Raises: + EntityNotFoundError + FlowError + """ + logger = get_logger(__name__) + client = get_client() + q_input = medm_model.AssetsByIdsInput(ids=[asset_id]) + q_asset = client.service_asset.assets_by_ids(q_input) + try: + q_asset.call() + except GQLAPIError as exc: + msg = f"Error querying asset: {asset_id}. {exc}" + raise FlowError(msg) from exc + if len(q_asset.assets) == 0: + msg = "Error retrieving MEDM asset." + raise EntityNotFoundError(entity_id=asset_id, details=msg) + asset = q_asset.assets[0] + logger.info(f'Queried asset "{asset.name}".') + return asset + + +def _get_type_ids(asset: medm_model.Asset): + """Return list of type ids assigned to asset.""" + type_ids = [] + for comp in asset.components: + if BASE_TYPE_ID in comp.parent_type_ids: + type_ids.append(comp.type_id) + return type_ids + + +def _check_publish_conflict(draft_info, asset) -> bool: + """Check if there is a publish conflict based on current state of + asset and checkout state of asset. + """ + # A conflict is defined as trying to publish an asset which has had + # new versions published against it since the asset was checked out + # + # NOTE: We are making the assumption that within a single "numbered" version, + # component and uses relationships stay the same from revision to revision! + # This assumption allows us to only consider conflicts with respect to versions. + return draft_info.latest_version < asset.version_number diff --git a/python/tk-core/python/tank_vendor/flow_integration_sdk/schema.py b/python/tk-core/python/tank_vendor/flow_integration_sdk/schema.py new file mode 100644 index 00000000..7675f120 --- /dev/null +++ b/python/tk-core/python/tank_vendor/flow_integration_sdk/schema.py @@ -0,0 +1,258 @@ +# - +# ***************************************************************************** +# Copyright 2026 Autodesk, Inc. All rights reserved. +# +# These coded instructions, statements, and computer programs contain +# unpublished proprietary information written by Autodesk, Inc. and are +# protected by Federal copyright law. They may not be disclosed to third +# parties or copied or duplicated in any form, in whole or in part, without +# the prior written consent of Autodesk, Inc. +# ***************************************************************************** +# + +"""Utilities for querying and caching schema information.""" + +from __future__ import annotations # needed for python 3.9 support + +import json +import os +from functools import cache + +from tank_vendor.flow_data_sdk.base import model as flow_model +from tank_vendor.flow_data_sdk.base.exceptions import GQLAPIError + +from .exceptions import FlowError +from .globals import ( + BASE_TYPE_ID, + BINARY_TYPE_ID, + COMMENT_TYPE_ID, + DER_SOURCE_TYPE_ID, + FOLDER_TYPE_ID, + get_client, + get_session_collection, + IMAGE_TYPE_ID, +) +from .utils import get_logger, trace + + +# Schema inheritance tree cache +# ----------------------------- +# Stored globally as an optimization to avoid querying/re-querying +# parent types of known schema types. +# Format: key = schema type id, value = list of parent types +_schema_tree: dict[str, list[str]] = {} + +# Hardcode some well known relationships and root types +_schema_tree[IMAGE_TYPE_ID] = [BINARY_TYPE_ID] +_schema_tree[FOLDER_TYPE_ID] = [BASE_TYPE_ID] +_schema_tree[BASE_TYPE_ID] = [] +_schema_tree[BINARY_TYPE_ID] = [] +_schema_tree[COMMENT_TYPE_ID] = [] +_schema_tree[DER_SOURCE_TYPE_ID] = [] + + +# Schema type ids cache +# --------------------- +# This maps custom type names to full type ids +# Format: key = type name (e.g. "type.maya.workfile"), value = full type id +_schema_ids: dict[str, str] = {} + + +# Schema display name cache +# ------------------------- +# Caches display data of schemas to avoid re-querying. +# Format: key = type id, value = display name +_schema_display_names: dict[str, str] = {} + + +def _read_schema_config(config_path: str): + """Read the given json config file, and return raw json dictionary.""" + logger = get_logger(__name__) + + logger.info(f"Reading schema type ids config file: {config_path}") + if not os.path.exists(config_path): + raise RuntimeError(f"Schema config file not found: {config_path}") + + with open(config_path) as f: + try: + raw_config = json.loads(f.read()) + except json.decoder.JSONDecodeError as exc: + raise ValueError("Schema config file is invalid.") from exc + return raw_config + + +def _compose_schema_id(type_name: str, version: str): + """Generate a full type id with info provided.""" + session_collection = get_session_collection() + org_id = session_collection.organization_id + group_id = session_collection.group_id + namespace = f"{org_id}.{group_id}" + return f"{namespace}:{type_name}-{version}" + + +@trace +def cache_schema_config(config_path: str): + """Add types from provided schema config json file into schema cache + to optimize queries against them. + + ..note:: `globals.init_session_collection()` must be called before + attempting to add to schema cache. + + Args: + config_path: Path to json schema config file. + + Raises: + RuntimeError + ValueError + """ + raw_config = _read_schema_config(config_path) + + # Cache type id and display name info for configured types + for schema in raw_config.get("schemas", {}): + type_name = schema.get("name", "") + type_version = schema.get("version", "") + display_name = schema.get("display_name", "") + if type_name and type_version: + type_id = _compose_schema_id(type_name, type_version) + _schema_ids[type_name] = type_id + if display_name: + _schema_display_names[type_id] = display_name + + # Add configured types to schema tree cache + for schema in raw_config.get("schemas", {}): + type_name = schema.get("name", "") + parent_types = schema.get("inherits", []) + # strip "$ref:" suffix + parent_types = [pt[5:] for pt in parent_types] + # convert to full ids + parent_types = [get_schema_id(pt) for pt in parent_types] + # always include base type + parent_types.append(BASE_TYPE_ID) + type_id = get_schema_id(type_name) + # store ancestral relationship + if type_id: + _schema_tree[type_id] = parent_types + + +def get_schema_id(type_name: str) -> str | None: + """Return full type id of type name if cached. + + Args: + type_name: Base name of schema type (e.g. "type.template"). + + Returns: + Full id of type, or None if type is not cached. + """ + return _schema_ids.get(type_name, None) + + +@trace +def get_schema_display_name(type_id: str) -> str | None: + """Return display name of schema of given its type id. + + Args: + type_id: Schema type id to be queried. + + Returns: + Display name of schema if set, or None if not set. + + Raises: + FlowError + """ + logger = get_logger(__name__) + + if type_id in _schema_display_names: + return _schema_display_names[type_id] + + # Type is not in schema config, must query display name + client = get_client() + q_input = flow_model.GetSchemaDisplayDataInput(schema_type_id=type_id) + q_schema_display = client.service_schema.schema_display_data(q_input) + try: + logger.info(f"Querying schema display data for type id: {type_id}.") + r_schema_display = q_schema_display.call() + except GQLAPIError as exc: + msg = f"Error querying schema display data for type id: {type_id}. {exc}" + raise FlowError(msg) from exc + display_data = r_schema_display.schema_display_data + if display_data.display_name == flow_model.NOT_SET: + return None + # Cache display name before returning + _schema_display_names[type_id] = display_data.display_name + return display_data.display_name + + +@cache +@trace +def is_sub_type(base_id: str, type_id: str) -> bool: + """Return True if provided type is a sub class of base type. + + Args: + base_id: String base type id. + type_id: String type id. + + Returns: + True if type_id derives from base_id. + + Raises: + FlowError + """ + logger = get_logger(__name__) + + if base_id == type_id: + return True + + # Check schema tree cache for input type + def match_ancestor(base_id, type_id): + if type_id not in _schema_tree: + raise ValueError("Unregistered type id.") + parent_types = _schema_tree[type_id] + for parent_type in parent_types: + if parent_type == base_id: + return True + if match_ancestor(base_id, parent_type): + return True + return False + + try: + return match_ancestor(base_id, type_id) + except ValueError: + # The type in question is not in our config cache + # We are forced to make a query + msg = f'Querying schema subclasses for base type "{base_id}" to find type "{type_id}".' + logger.info(msg) + client = get_client() + session_collection = get_session_collection() + q_input = flow_model.SchemasBySuperTypeInput( + collection_id=session_collection.id, + type_id=base_id, + include_sub_sub_classes=True, + ) + q_schema = client.service_schema.schemas_by_super_type(q_input) + try: + # NOTE: Iterator wraps q_schema.call() so no need to invoke this + # exlicitly. + for subtype in q_schema.schema_types_iterator: + if type_id == subtype: + return True + return False + except GQLAPIError as exc: + msg = f'Error querying subtypes of base type "{base_id}": {exc}' + raise FlowError(msg) from exc + + +def get_schema_config_version(config_path: str) -> str: + """Retrieve the schema config version from a config.json file. + + Args: + config_path: Path to the schema config json file. + + Returns: + The schema config version, or 'unknown' if the key is not present. + + Raises: + RuntimeError: If the config file is not found. + ValueError: If the config file contains invalid JSON. + """ + config = _read_schema_config(config_path) + return config.get("version", "unknown") diff --git a/python/tk-core/python/tank_vendor/flow_integration_sdk/schema_builder.py b/python/tk-core/python/tank_vendor/flow_integration_sdk/schema_builder.py new file mode 100644 index 00000000..d468af81 --- /dev/null +++ b/python/tk-core/python/tank_vendor/flow_integration_sdk/schema_builder.py @@ -0,0 +1,614 @@ +# Copyright (c) 2026 Shotgun Software Inc. +# +# CONFIDENTIAL AND PROPRIETARY +# +# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit +# Source Code License included in this distribution package. See LICENSE. +# By accessing, using, copying or modifying this work you indicate your +# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights +# not expressly granted therein are reserved by Shotgun Software Inc. + +"""Schema builder utilities for creating and managing Flow pipeline schemas.""" + +from __future__ import annotations # needed for python 3.9 support + +from typing import Any + +from tank_vendor.flow_data_sdk.base import model as flow_model +from tank_vendor.flow_data_sdk.base.exceptions import ( + FlowConnectionError, + GQLAPIError, + ValidationError, +) + +from .exceptions import ( + FlowSchemaBuilderError, + FlowSchemaDisplayDataError, + FlowSchemaError, + FlowSchemaLibraryError, +) +from .globals import BASE_TYPE_ID, get_client +from .objects import FlowProject +from . import schema +from .schema import get_schema_id +from .utils import cleanpath, get_logger + + +# Constant for Flow Toolkit Library schema library ID +FLOW_TOOLKIT_LIBRARY_ID = "FlowToolkitLibrary" + + +class SchemaBuilder: + """Utility class to build and validate schemas from a dictionary. + + This class provides methods to validate schema definitions, build new schemas, + update schema display names, and retrieve existing schemas from a schema library. + """ + + def __init__( + self, + schema_dict: dict, + schema_kind: flow_model.SchemaKind, + project_id: str, + schema_library_id: str, + ): + """Initialize the SchemaBuilder. + + Args: + schema_dict: The dictionary containing the schema definition. + schema_kind: The kind of Schema to create (type, component, or property). + project_id: The Flow AM project ID. + schema_library_id: The ID of the schema library where the schema + will be created. + """ + self.schema_dict = schema_dict + self.schema_kind = schema_kind + self.project_id = project_id + self.schema_library_id = schema_library_id + self.schema: flow_model.Schema | None = None + + # Validate schema dictionary on initialization + self.__validate_schema_dict() + + def __validate_schema_dict(self) -> None: + """Validate the incoming schema dictionary. + + Raises: + KeyError: If required keys are missing or invalid. + ValueError: If key types or values are invalid. + """ + + # Define a dictionary mapping keys to their expected types + key_type_dict = { + "name": str, + "version": str, + "display_name": str, + "kind": str, + "description": str, + "inherits": list, + "properties": list, + } + + # Check for mandatory keys + for key in ["name", "version"]: + if key not in self.schema_dict: + raise KeyError( + f"The custom type schema must contain a '{key}' key of type string." + ) + + # Validate keys and types + for key, value in self.schema_dict.items(): + if key not in key_type_dict: + raise KeyError(f"Invalid key '{key}' in custom type schema.") + if not isinstance(value, key_type_dict[key]): + raise ValueError( + f"The '{key}' key must be of type {key_type_dict[key].__name__}." + ) + if key == "kind": + # Validate against flow_model.SchemaKind enum + valid_kinds = [kind.value for kind in flow_model.SchemaKind] + if value not in valid_kinds: + raise ValueError( + f"Invalid kind '{value}' in custom type schema. " + f"Must be one of {', '.join(valid_kinds)}" + ) + if key == "properties": + for property_dict in value: + self.__validate_property_dict(property_dict) + + def __validate_property_dict(self, property_dict: dict) -> None: + """Validate a schema 'property' dictionary. + + Args: + property_dict (dict): The property dictionary to validate. + + Raises: + KeyError: If required keys are missing or invalid. + ValueError: If key types or values are invalid. + """ + + # Define a dictionary mapping keys to their expected types + key_type_dict = { + "name": str, + "data_type": str, + "properties": list, + "default_value": Any, + "context": str, + "length": int, + } + + # Check for mandatory keys + for key in ["name", "data_type"]: + if key not in property_dict: + raise KeyError(f"The property schema must contain a '{key}' key.") + + # Validate keys and types + for key, value in property_dict.items(): + if key not in key_type_dict: + raise KeyError(f"Invalid key '{key}' in property schema.") + + if key_type_dict[key] is not Any: + if not isinstance(value, key_type_dict[key]): # type: ignore + raise ValueError( + f"The '{key}' key must be of type " + f"{key_type_dict[key].__name__}." # type: ignore + ) + + if key == "data_type": + # Validate that referenced schema exists in config + if "$ref:" in value: + referenced_schema = value.split(":")[1] + referenced_schema_id = get_schema_id(referenced_schema) + if not referenced_schema_id: + raise ValueError( + f"Referenced schema '{referenced_schema}' not found " + "in config.json." + ) + + if key == "properties": + for sub_property_dict in value: + self.__validate_property_dict(sub_property_dict) + + def _create_property_type_input( + self, data_type: str + ) -> flow_model.PropertyTypeInput: + """Create a PropertyTypeInput from a data type string. + + Args: + data_type: Either a primitive type name (e.g., "String") or a + custom schema type ID + + Returns: + PropertyTypeInput with either primitive_type or custom_type set + """ + primitive_types = [member.value for member in flow_model.PrimitiveType] + + if data_type in primitive_types: + primitive_enum = flow_model.PrimitiveType(data_type) + return flow_model.PropertyTypeInput(primitive_type=primitive_enum.value) + + return flow_model.PropertyTypeInput(custom_type=data_type) + + def _create_properties_definition_input( + self, property_dict: dict + ) -> flow_model.PropertiesDefinitionInput: + """Recursively create a PropertiesDefinitionInput from a property dictionary.""" + # Resolve references in data type + data_type = property_dict["data_type"] + + if "$ref:" in data_type: + # Resolve referenced schema id + referenced_schema_name = property_dict["data_type"].split(":")[1] + referenced_schema_id = get_schema_id(referenced_schema_name) + if not referenced_schema_id: + raise ValueError( + f"Referenced schema '{referenced_schema_name}' not found " + "in config.json." + ) + data_type = referenced_schema_id + + if "$id:" in data_type: + data_type = ":".join(data_type.split(":")[1:]) + + # Create PropertyTypeInput + property_type_input = self._create_property_type_input(data_type) + + # Recursively handle nested properties + nested_properties = [] + if property_dict.get("properties"): + for nested_property in property_dict["properties"]: + nested_properties.append( + self._create_properties_definition_input(nested_property) + ) + + # Create PropertiesDefinitionInput + properties_definition_input = flow_model.PropertiesDefinitionInput( + name=property_dict["name"], + type=property_type_input, + properties=nested_properties if nested_properties else None, + ) + + # Add optional fields if present + if "default_value" in property_dict: + properties_definition_input.value = property_dict["default_value"] + if "context" in property_dict: + properties_definition_input.context = property_dict["context"] + if "length" in property_dict: + properties_definition_input.length = property_dict["length"] + + return properties_definition_input + + def build(self) -> flow_model.Schema: + """Build and commit the custom private Schema. + + Returns: + Schema: The created or existing Schema instance. + + Raises: + FlowSchemaError: If schema creation or commit fails due to a client error. + ValueError: If referenced schemas in 'inherits' or 'properties' are + not found. + """ + + logger = get_logger(__name__) + client = get_client() + + # Build inherits list for CreateSchemaInput + inherits = [] + if self.schema_dict.get("inherits"): + for inherited_schema in self.schema_dict["inherits"]: + # If current schema inherits from another schema + if "$ref:" in inherited_schema: + # Resolve referenced schema id + inherited_schema_name = inherited_schema.split(":")[1] + inherited_schema_id = get_schema_id(inherited_schema_name) + if not inherited_schema_id: + raise ValueError( + f"Inherited schema '{inherited_schema_name}' not found " + "in config.json." + ) + inherits.append(inherited_schema_id) + else: + inherits.append(inherited_schema) + + # Build property list for CreateSchemaInput + properties = [] + for property_dict in self.schema_dict.get("properties", []): + properties.append( + self._create_properties_definition_input(property_dict) + ) + + try: + # Create CreateSchemaInput for the mutation + create_schema_input = flow_model.CreateSchemaInput( + kind=self.schema_kind.value, + name=self.schema_dict["name"], + project_id=self.project_id, + schema_library_id=self.schema_library_id, + version=self.schema_dict["version"], + description=self.schema_dict.get("description", ""), + inherits=inherits if inherits else None, + properties=properties if properties else None, + ) + # Create and call the schema mutation + create_schema_query = client.service_schema.create_schema( + variables=create_schema_input + ) + query_response = create_schema_query.call() + self.schema = query_response.schema + logger.info("Created new schema: %s", self.schema.name) + except (GQLAPIError, FlowConnectionError, ValidationError) as e: + raise FlowSchemaError( + details=( + f"Failed to create schema '{self.schema_dict['name']}' " + f"version '{self.schema_dict['version']}': {e}" + ) + ) from e + + return self.schema + + def get_display_data(self) -> flow_model.SchemaDisplayData | None: + """Retrieve the display data object for the current schema. + + This method attempts to fetch the SchemaDisplayData associated with the + schema instance. If the schema has not been built, a FlowSchemaBuilderError + is raised. If no display data exists for the schema, None is returned. + + Returns: + SchemaDisplayData | None: The display data instance if found, + otherwise None. + + Raises: + FlowSchemaBuilderError: If the schema instance has not been built. + """ + + if not self.schema: + raise FlowSchemaBuilderError(details="Schema instance has not been built yet.") + + client = get_client() + schema_display_data = None + try: + # Create GetSchemaDisplayDataInput for the query + input_data = flow_model.GetSchemaDisplayDataInput( + schema_type_id=self.schema.type_id + ) + # Create and call the schema query + schema_query = client.service_schema.schema_display_data( + variables=input_data + ) + query_response = schema_query.call() + schema_display_data = query_response.schema_display_data + except (GQLAPIError, FlowConnectionError, ValidationError): + # TODO: Verify get display data for new created schema's behavior + # Two possible scenarios: + # 1. Schema type doesn't exist (shouldn't happen if schema was just created) + # 2. No display data exists yet (expected for newly created schemas) + pass + + return schema_display_data + + def update_display_name(self) -> str | None: + """Update the display name of the schema to match the value in the schema + definition. + + This method retrieves the current schema's display data and updates its + display name if it differs from the desired value. If the display name is + successfully updated, the new value is returned. If the display name + already matches, it is returned. + + Returns: + str | None: The updated display name if successful, or the current + display name if it already matches the desired value. + + Raises: + FlowSchemaBuilderError: If the schema instance has not been built or the + schema definition does not specify a display name. + FlowSchemaDisplayDataError: If updating the display name fails due to an + error (such as an API failure). + """ + + logger = get_logger(__name__) + client = get_client() + display_name = self.schema_dict.get("display_name") + + if not self.schema: + raise FlowSchemaBuilderError(details="Schema instance has not been built yet.") + + if not display_name: + raise FlowSchemaBuilderError( + details="No display name specified in schema definition." + ) + + if ( + self.schema.display_data + and self.schema.display_data.display_name == display_name + ): + return display_name + + schema_display_data = self.get_display_data() + + try: + if schema_display_data: + # Display data exists + # Create UpdateSchemaDisplayDataInput for update display name + # mutation and call it + input_data = flow_model.UpdateSchemaDisplayDataInput( + schema_type_id=self.schema.type_id, display_name=display_name + ) + client.service_schema.update_schema_display_data( + variables=input_data, + ).call() + else: + # Display data doesn't exist + # Create CreateSchemaDisplayDataInput for create display name + # mutation and call it + input_data = flow_model.CreateSchemaDisplayDataInput( + schema_type_id=self.schema.type_id, display_name=display_name + ) + client.service_schema.create_schema_display_data( + variables=input_data, + ).call() + + logger.debug( + "updated display name of schema %s to '%s'", + self.schema.name, + display_name, + ) + return display_name + except (GQLAPIError, FlowConnectionError, ValidationError) as e: + raise FlowSchemaDisplayDataError( + details=( + f"Could not update display data for schema " + f"'{self.schema.name}': {e}." + ) + ) from e + + +def _get_schema_library( + library_id: str, collection_id: str +) -> flow_model.SchemaLibrary | None: + """Retrieve a schema library by its unique name (ID) if it exists, or None + if not found. + + Raises: + FlowSchemaLibraryError: If retrieving schema libraries fails due to a client + error. + """ + + logger = get_logger(__name__) + client = get_client() + + try: + # Create SchemaLibrariesByCollectionIdInput for the query + input_data = flow_model.SchemaLibrariesByCollectionIdInput( + collection_id=collection_id + ) + # Create and call the schema query + schema_query = client.service_schema.schema_libraries_by_collection_id( + variables=input_data + ) + schema_libraries = list(schema_query.libraries_iterator or []) + except (GQLAPIError, FlowConnectionError, ValidationError) as e: + raise FlowSchemaLibraryError( + details=f"Failed to retrieve all schema libraries: {e}" + ) from e + + for schema_library in schema_libraries: + if schema_library.name == library_id: + logger.info("Found existing schema library %s", library_id) + return schema_library + + logger.info("Schema Library %s not found.", library_id) + return None + + +def _create_schema_library( + library_id: str, + title: str, + description: str, + project_id: str, + collection_id: str, +) -> flow_model.SchemaLibrary: + """Create a schema library if it does not exist, or return the existing one. + + Raises: + FlowSchemaLibraryError: If retrieving or creating the schema library fails + due to a client error. + """ + + logger = get_logger(__name__) + schema_library = _get_schema_library(library_id, collection_id) + + if schema_library is not None: + logger.info("Schema Library %s found. Skipping creation.", library_id) + return schema_library + + client = get_client() + + try: + # Create CreateSchemaLibraryInput for the mutation + input_data = flow_model.CreateSchemaLibraryInput( + name=library_id, + title=title, + description=description, + project_id=project_id, + ) + # Create and call the schema mutation + schema_query = client.service_schema.create_schema_library( + variables=input_data + ) + query_response = schema_query.call() + # Extract the created schema library from the response + schema_library = query_response.schema_library + logger.info("Successfully created a new Schema Library %s", library_id) + return schema_library + + except (GQLAPIError, FlowConnectionError, ValidationError) as e: + raise FlowSchemaLibraryError( + details=f"Failed to create SchemaLibrary '{library_id}': {e}" + ) from e + + +def create_pipeline_schemas(project_id: str, config_path: str): + """Create pipeline schemas under the schema library 'Flow Toolkit Library' + for a CPA collection. + + This utility is only applicable to CPA (provisioned) collections. It is + designed to create or use the 'Flow Toolkit Library' and its associated + schemas. + + The function performs the following steps: + 1. Loads and validates the config.json file. + 2. Queries existing schema type ids for the target collection. + 3. Creates the schema library if any configured schemas are missing. + 4. Creates any missing schemas and sets their display names. + + Args: + project_id: The Flow AM project ID. + config_path: Path to the schema config json file. + Raises: + RuntimeError: If schema library creation fails. + FileNotFoundError: If the config file does not exist. + json.JSONDecodeError: If the config file contains invalid JSON. + KeyError: If the config file does not contain a 'schemas' key, + or if required keys are missing in the schema definition. + ValueError: If schema definition or property values are invalid. + FlowSchemaError: If schema creation or retrieval fails. + FlowSchemaBuilderError: If schema building fails. + FlowSchemaDisplayDataError: If updating display data fails. + FlowSchemaLibraryError: If schema library operations fail. + """ + logger = get_logger(__name__) + + config = schema._read_schema_config(config_path) + if "schemas" not in config: + raise KeyError("The schema config file must contain a 'schemas' key with a list of schemas to create.") + client = get_client() + collection_id = FlowProject.get_collection_id(project_id) + + # Retrieve all existing published schema type ids for the collection + try: + # Create SchemasBySuperTypeInput for the query + schemas_by_supertype_input = flow_model.SchemasBySuperTypeInput( + collection_id=collection_id, + type_id=BASE_TYPE_ID, + include_sub_sub_classes=True, + ) + # Create and call the schema query + schema_query = client.service_schema.schemas_by_super_type( + variables=schemas_by_supertype_input + ) + existing_schema_types = set(schema_query.schema_types_iterator) + logger.info( + f"Retrieved {len(existing_schema_types)} existing schemas for " + f"collection {collection_id}." + ) + except (GQLAPIError, FlowConnectionError, ValidationError) as e: + raise RuntimeError(f"Failed to retrieve existing schemas: {e}") from e + + # Check if schema listed in config.json already exists + # If not, add it to need_to_create list + need_to_create = [] + for schema_dict in config.get("schemas", []): + # Get the schema type id for the schema and check if it already exists + schema_type_id = get_schema_id(schema_dict["name"]) + if schema_type_id not in existing_schema_types: + logger.info( + "Schema '%s' not found. Adding to list to be created.", + schema_type_id, + ) + need_to_create.append(schema_dict) + + # Check if need_to_create is not empty + # and proceed to create schema library and schemas + if len(need_to_create) > 0: + logger.info("Attempting to create missing schemas...") + library_id = FLOW_TOOLKIT_LIBRARY_ID + _create_schema_library( + library_id=library_id, + title="Flow Toolkit Library", + description="Schemas for Flow Toolkit pipelines.", + project_id=project_id, + collection_id=collection_id, + ) + + schemas = [] + # Create schemas if not exist + for schema_dict in need_to_create: + schema_builder = SchemaBuilder( + schema_dict=schema_dict, + schema_kind=flow_model.SchemaKind(schema_dict["kind"]), + project_id=project_id, + schema_library_id=library_id, + ) + schema_builder.build() + + if schema_builder.schema: + # NOTE: We need to explicitly pass the display name back because + # in newly created schemas, the 'display_name' property is not + # updated, therefore can not be reliably used to determine + # display name of the schema. + display_name = schema_builder.update_display_name() + schemas.append((schema_builder.schema, display_name)) + else: + logger.info("All required schemas already exist.") diff --git a/python/tk-core/python/tank_vendor/flow_integration_sdk/storage.py b/python/tk-core/python/tank_vendor/flow_integration_sdk/storage.py new file mode 100644 index 00000000..d2c927a1 --- /dev/null +++ b/python/tk-core/python/tank_vendor/flow_integration_sdk/storage.py @@ -0,0 +1,314 @@ +# - +# ***************************************************************************** +# Copyright 2026 Autodesk, Inc. All rights reserved. +# +# These coded instructions, statements, and computer programs contain +# unpublished proprietary information written by Autodesk, Inc. and are +# protected by Federal copyright law. They may not be disclosed to third +# parties or copied or duplicated in any form, in whole or in part, without +# the prior written consent of Autodesk, Inc. +# ***************************************************************************** +# + + +""" +This module provides utilities related to storage locations. +""" + +from __future__ import annotations # needed for python 3.9 support + +import os +import json +from functools import cache + +from tank_vendor.flow_data_sdk.base import model as medm_model + +from .exceptions import ( + ConfigurationError, + DirectoryNotCreatedError, + FlowError, +) +from .utils import ( + abspath, + cleanpath, + ensure_dir, + get_logger, + trace, +) + + +# Storage roots +# ------------- +# Environment variables that store key storage root paths. +# Paths should be configured via set_sandbox_root() and set_storage_root(). +# They should be accessed via get_sandbox_root() and get_storage_root() + +# Sandbox storage root - for draft assets/revisions (editable) +FLOW_SANDBOX_ROOT = "FLOW_SANDBOX_ROOT" + +# Primary cache root - for binaries cached locally from remote storage (read-only) +FLOW_STORAGE_ROOT = "FLOW_STORAGE_ROOT" + + +def set_sandbox_root(sandbox_root: str, create_dir: bool = False): + """Set sandbox root location. + + Args: + sandbox_root: Path to top-level sandbox directory. + create_dir: If True, create this directory if it doesn't exist. + + Raises: + DirectoryNotCreatedError + """ + logger = get_logger(__name__) + + # Expand user paths (e.g., ~ to /Users/username) + sandbox_root = os.path.expanduser(sandbox_root) + # Ensure path is absolute and real + sandbox_root = abspath("", sandbox_root) + logger.info(f"Setting Flow sandbox directory to: {sandbox_root}") + if create_dir: + try: + # Create directory if necessary + ensure_dir(sandbox_root) + except DirectoryNotCreatedError as exc: + raise ConfigurationError( + details=f"Couldn't create directory {sandbox_root} for sandbox root." + ) from exc + + os.environ[FLOW_SANDBOX_ROOT] = sandbox_root + + +def set_storage_root(storage_root: str, create_dir: bool = False): + """Set primary cache location. + + Args: + storage_root: Path to top-level primary cache directory. + create_dir: If True, create this directory if it doesn't exist. + + Raises: + DirectoryNotCreatedError + """ + logger = get_logger(__name__) + + # Expand user paths (e.g., ~ to /Users/username) + storage_root = os.path.expanduser(storage_root) + # Ensure path is absolute and real + storage_root = abspath("", storage_root) + logger.info(f"Setting Flow storage directory to: {storage_root}") + if create_dir: + try: + # Create directory if necessary + ensure_dir(storage_root) + except DirectoryNotCreatedError as exc: + raise ConfigurationError( + details=f"Couldn't create directory {storage_root} for primary storage root." + ) from exc + os.environ[FLOW_STORAGE_ROOT] = storage_root + + +def get_sandbox_root() -> str: + """Return the root directory of sandbox location. + + Returns: + Full path to configured sandbox root directory. + """ + return os.getenv(FLOW_SANDBOX_ROOT, "") + + +def get_storage_root() -> str: + """Return the root directory of primary cache location. + + Returns: + Full path to configured storage root directory. + """ + return os.getenv(FLOW_STORAGE_ROOT, "") + + +def get_storage_key(asset_id: str) -> str: + """Parse storage key from asset id. + This is a unique file-safe id that can be used in storage file paths. + + Args: + asset_id: Medm asset id. + + Returns: + Storage key associated with that asset. + """ + return asset_id.rsplit(":", maxsplit=1)[-1] + + +def get_storage_asset_dir(asset_id: str) -> str: + """Return the full path of asset directory in primary storage + (whether or not the directory exists). + + Args: + asset_id: Medm asset id. + + Returns: + Full path to expected location of primary storage directory on local disk. + """ + return cleanpath(get_storage_root(), get_storage_key(asset_id)) + + +def get_storage_revision_dir(asset_id: str, revision_number: int) -> str: + """Return the full path of asset directory in primary storage + for the given revision of asset (whether or not the directory exists). + + Args: + asset_id: Medm asset id. + revision_number: Number of revision. + + Returns: + Full path to expected location of primary storage directory on local disk. + """ + return cleanpath(get_storage_asset_dir(asset_id), f"r{revision_number}") + + +@trace +def _cache_asset_info(asset_id: str): + """Store relevant, persistent metadata about this asset to its + storage directory. This will be very useful for certain lookups. + + In particular, we want to cache the relationship between the asset's + storage key and asset id. We do this by saving a sidecar file to the + asset's storage directory. Looking this up via the sidecar file will + save a very expensive query when mapping storage key back to asset id. + + Args: + asset_id: Id of asset whose info should be cached. + + Raises: + FlowError + """ + # Check if the info file already exists + # If so, check that it is complete. File reads are cheap so doing + # this every time an Asset object is constructed should be ok. + storage_dir = get_storage_asset_dir(asset_id) + file_path = cleanpath(storage_dir, ".info") + info = {} + if os.path.exists(file_path): + with open(file_path, "r") as f: + try: + info = json.loads(f.read()) + except json.JSONDecodeError: + # We don't care if the file is corrupted, just write a new one + pass + + # For now we're only storing asset id + expected_keys = ["asset_id"] + write_file = False + for key in expected_keys: + if key not in info: + # If the file is incomplete, re-write the file + write_file = True + break + + if not write_file: + return + + info = {"asset_id": asset_id} + try: + if not os.path.exists(storage_dir): + os.makedirs(storage_dir) + with open(file_path, "w") as f: + f.write(json.dumps(info, indent=4)) + except Exception as exc: # pylint: disable=broad-except + msg = f"Asset info file could not be written: {file_path}" + raise FlowError(msg) from exc + + +@cache +@trace +def storage_key_to_asset_id(storage_key: str) -> str: + """Given an asset storage key, return the corresponding asset id. + + Args: + storage_key: String asset storage key. + + Returns: + Asset id. + + Raises: + FlowError + """ + # Check if storage key to asset id lookup is cached + info_file = cleanpath(get_storage_root(), storage_key, ".info") + if os.path.exists(info_file): + with open(info_file, "r") as f: + info = json.loads(f.read()) + asset_id = info.get("asset_id") + if asset_id is not None: + return asset_id + + # Fallback plan is to do a very expensive project query + # TODO: implement query + + raise FlowError(f"Invalid storage key provided: {storage_key}") + + +def get_storage_component_path( + revision: medm_model.AssetRevision, + component_name: str = "", + component_purpose: str = "", + blob_index: int = 0, +) -> str | None: + """Return the full path of the component blob file of the given asset revision + in primary storage (whether or not the file exists). + + Args: + revision: Revision to which component belongs. + component_name: If provided, search for component with this name and return its storage path. + This should be unique within the revision. + component_purpose: If provided, search for a component with this purpose and return + its storage path. There may be multiple components with the same purpose, + so the first match will be returned. + blob_index: Specific blob from source component to get. + + ..note:: If both component name and purpose are provided, the first intersection + of both criteria will be returned. + + Returns: + Full path to expected location of cached source file on local disk, or + None if the component does not exist on the revision. + + Raise: + FlowError + """ + comp = _find_component(revision, name=component_name, purpose=component_purpose) + if not comp: + return None + try: + blob_path = comp.data["data"][blob_index]["path"] + except KeyError as exc: + msg = f'Blob path could not be retrieved for component "{comp.name}". {exc}' + raise FlowError(msg) + storage_dir = get_storage_revision_dir(revision.asset_id, revision.revision_number) + return cleanpath(storage_dir, blob_path) + + +def _find_component( + revision: medm_model.AssetRevision, + name: str = "", + purpose: str = "", + type_id: str = "", +) -> medm_model.Component | None: + """Match component on given revision based on criteria. + If multiple criteria is provided, the first intersection will be returned. + + Args: + revision: Revision to be searched. + name: Name of component to match. + purpose: Purpose of component to match. + NOTE: this is only applicable to binary components. + type_id: Type id of component to match. + """ + for comp in revision.components: + comp_purpose = comp.data.get("purpose", "") + if name and comp.name != name: + continue + if purpose and comp_purpose != purpose: + continue + if type_id and comp.type_id != type_id: + continue + return comp + return None diff --git a/python/tk-core/python/tank_vendor/flow_integration_sdk/transferapi.py b/python/tk-core/python/tank_vendor/flow_integration_sdk/transferapi.py new file mode 100644 index 00000000..0e1d6caf --- /dev/null +++ b/python/tk-core/python/tank_vendor/flow_integration_sdk/transferapi.py @@ -0,0 +1,251 @@ +# - +# ***************************************************************************** +# Copyright 2026 Autodesk, Inc. All rights reserved. +# +# These coded instructions, statements, and computer programs contain +# unpublished proprietary information written by Autodesk, Inc. and are +# protected by Federal copyright law. They may not be disclosed to third +# parties or copied or duplicated in any form, in whole or in part, without +# the prior written consent of Autodesk, Inc. +# ***************************************************************************** +# + + +""" +API methods for transfering files to the remote server +""" + +from __future__ import annotations # needed for python 3.9 support + +import base64 +import hashlib +import math +import os +import urllib.error +import urllib.request + +from tank_vendor.flow_data_sdk.base import model as medm_model +from tank_vendor.flow_data_sdk.base.exceptions import GQLAPIError + +from .exceptions import FileUploadError +from .utils import get_logger, trace + + +@trace +def open_upload_file(client, urn_id: str, upload_uri: str) -> medm_model.UploadFileJob: + """Open an asynchronous file upload session. + + Creates an upload job on the server for multipart file upload. + The returned job ID is required for subsequent upload operations. + + Args: + urn_id: Target blob URN identifier. + upload_uri: Server-provided upload URI. + + Returns: + An UploadFileJob instance containing the job ID + + Raises: + FileUploadError: If the GraphQL API returns an error. + """ + logger = get_logger(__name__) + + try: + # Create the open upload file input data + input_data = medm_model.OpenUploadFileInput( + upload_uri=upload_uri, urn_id=urn_id + ) + # Create the open upload file operation and call it + operation = client.service_binary.open_upload_file(variables=input_data) + response = operation.call() + return response.job + + except GQLAPIError as e: + error_details = f"GraphQL API error (status {e.status_code}): {e.message}" + logger.error(f"Failed to open upload file session: {error_details}") + raise FileUploadError(file_path=upload_uri, details=error_details) from e + + +@trace +def get_upload_file_part( + client, async_job_id: str, part_num: int, md5_hash: str +) -> medm_model.GetUploadFilePartResponse: + """Get upload URL for a specific file part + + Retrieves upload information for a specific part of the multipart upload for the single file upload. + + Args: + async_job_id: The async job ID returned from open_upload_file. + part_num: The part number to upload (1-based index). + md5_hash: Base64-encoded MD5 hash of the part data. + + Returns: + UploadFilePart with upload URL and metadata. + + Raises: + FileUploadError: If the GraphQL API returns an error. + """ + logger = get_logger(__name__) + + try: + # Create the get upload file part input data + input_data = medm_model.GetUploadFilePartInput( + async_job_id=async_job_id, hash=md5_hash, part_num=part_num + ) + # Create the get upload file part operation and call it + operation = client.service_binary.get_upload_file_part(variables=input_data) + response = operation.call() + return response + + except GQLAPIError as e: + error_details = f"GraphQL API error (status {e.status_code}): {e.message}" + logger.error( + f"Failed to get upload file part {part_num} for job {async_job_id}: {error_details}" + ) + raise FileUploadError( + file_path=f"job_{async_job_id}_part_{part_num}", details=error_details + ) from e + + +@trace +def close_upload_file( + client, async_job_id: str, state: str, etags: list[str] +) -> medm_model.UploadFileJob: + """Close the asynchronous file upload session. + + Notifies the server to merge all uploaded parts into the final file. + Must be called even if the upload failed to clean up server resources. + + Args: + async_job_id: The async job ID returned from open_upload_file. + state: Final state of the upload. Must be "SUCCEEDED" or "FAILED". + etags: List of ETags for each uploaded part. + + Returns: + An UploadFileJob instance containing the job ID + + Raises: + ValueError: If an invalid state is provided. + FileUploadError: If the GraphQL API returns an error. + """ + logger = get_logger(__name__) + + if state not in ["SUCCEEDED", "FAILED"]: + raise ValueError(f"Invalid state: {state}. Must be SUCCEEDED or FAILED") + + try: + # Create the close upload file input data + input_data = medm_model.CloseUploadFileInput( + async_job_id=async_job_id, + state=state, + etags=etags, + ) + # Create the close upload file operation and call it + operation = client.service_binary.close_upload_file(variables=input_data) + response = operation.call() + return response.job + + except GQLAPIError as e: + error_details = f"GraphQL API error (status {e.status_code}): {e.message}" + logger.error( + f"Failed to close upload file session {async_job_id} with state {state}: {error_details}" + ) + raise FileUploadError( + file_path=f"job_{async_job_id}", details=error_details + ) from e + + +@trace +def upload_blob(client, file_path, urn_id, upload_uri): + """Upload a file to remote storage using multipart upload. + + Upload workflow: + 1. Opens an upload session and obtains a job ID + 2. Splits the file into chunks and uploads each part + 3. Closes the upload session to finalize + + Args: + client: The GraphQL client instance + file_path: The local filename of the file to be uploaded + urn_id: URN of the blob component to upload to + upload_uri: URI needed for API transfer + """ + logger = get_logger(__name__) + + # Create the UploadFileJob + upload_job = open_upload_file(client=client, urn_id=urn_id, upload_uri=upload_uri) + async_job_id = upload_job.id + logger.info(f"Opened upload job: {async_job_id} (state: {upload_job.state})") + + # Keep track of etags + etags = [] + + # Split file into chunks for upload + total_size = os.path.getsize(file_path) + part_size = max(5 * 1024 * 1024, math.ceil(total_size / 10000)) + total_parts = math.ceil(total_size / part_size) + + logger.info(f"Uploading {file_path} in {total_parts} chunks of {part_size} bytes") + + upload_state = "SUCCEEDED" + + try: + with open(file_path, "rb") as f: + for part_num in range(1, total_parts + 1): + # Read chunk data + chunk_data = f.read(part_size) + # MD5 Hash is only used as a checksum so there is + # no security risk for using it here + md5_hash = base64.b64encode(hashlib.md5(chunk_data).digest()).decode( + "utf-8" + ) + + logger.info(f" - Uploading chunk {part_num} : {md5_hash}") + + # Get the upload URL for this part + part_info = get_upload_file_part( + client=client, + async_job_id=async_job_id, + part_num=part_num, + md5_hash=md5_hash, + ) + upload_url = part_info.send_url + # Confirm that upload url is a web url and not a file:// url + # which could present a security breach + if not upload_url.startswith("http"): + msg = f"Suspicious url returned: {upload_url}. Aborting upload..." + raise RuntimeError(msg) + + # Create request and upload the part data + headers = { + "Content-MD5": md5_hash, + "Content-Type": "application/octet-stream", + } + req = urllib.request.Request( + upload_url, data=chunk_data, headers=headers, method="PUT" + ) + with urllib.request.urlopen(req, timeout=120) as response: + if response.status not in (200, 201): + raise ValueError( + f"Failed to upload part {part_num}: HTTP {response.status}" + ) + etag = response.headers.get("ETag") + if not etag: + raise ValueError( + f"ETag not found in response for part {part_num}" + ) + etags.append(etag) + logger.info(f" Part {part_num}/{total_parts} uploaded successfully") + + except Exception as e: + upload_state = "FAILED" + + raise FileUploadError(file_path=file_path, details=str(e)) from e + + finally: + # Finally close the file upload job + close_upload_file( + client=client, + async_job_id=async_job_id, + etags=etags, + state=upload_state, + ) diff --git a/python/tk-core/python/tank_vendor/flow_integration_sdk/utils.py b/python/tk-core/python/tank_vendor/flow_integration_sdk/utils.py new file mode 100644 index 00000000..8301f2a9 --- /dev/null +++ b/python/tk-core/python/tank_vendor/flow_integration_sdk/utils.py @@ -0,0 +1,386 @@ +# - +# ***************************************************************************** +# Copyright 2026 Autodesk, Inc. All rights reserved. +# +# These coded instructions, statements, and computer programs contain +# unpublished proprietary information written by Autodesk, Inc. and are +# protected by Federal copyright law. They may not be disclosed to third +# parties or copied or duplicated in any form, in whole or in part, without +# the prior written consent of Autodesk, Inc. +# ***************************************************************************** +# + + +""" +This module contains general utilities that can be leveraged by Flow integrations. +""" + +from __future__ import annotations # needed for python 3.9 support + +import logging +import math +import mimetypes +import os +import re +import sys +import time +import traceback +import urllib +from functools import wraps +from typing import Callable + +from .exceptions import DirectoryNotCreatedError, FlowError + + +# Time in seconds above which profiling info should be printed +# Setting the value to None will turn off profiling globally +# Add/Remove the @trace decorator from a function to turn on/off +# profiling for that function +PROFILING_THRESHOLD = None + +# Logging level - used for default logger only +LOGGING_LEVEL = "INFO" +# Callback function used to generate logger object +# (If unset, default python logger will be used) +_logger_callback: Callable[[str], logging.Logger] | None = None +# Logging formatter for default python logger +_formatter = logging.Formatter( + "%(asctime)s - %(module)s.%(funcName)s [%(lineno)d] %(levelname)s: %(message)s" +) + + +def trace(func): + """Decorator to track and record execution time of a function.""" + + def profile_output(arg0, t0, t1): + """Output profiling info to log.""" + # List of internal object types we would want to trace + supported_objects = [ + "FlowAsset", + "FlowRevision", + "FlowBlob", + "FlowComponent", + "ComponentSpec", + "FlowProject", + ] + msg = "PROFILING: " + if arg0.__class__ == type: + # Class function + msg += f"{arg0.__name__}.{func.__name__}" + elif arg0.__class__.__name__ in supported_objects: + # Member function + msg += f"{arg0.__class__.__name__}.{func.__name__}" + else: + # Global function + msg += func.__name__ + msg += f": {strtime(t0, t1)}" + # Only display execution times above threshold + if t1 - t0 >= PROFILING_THRESHOLD: + print(msg) + + def strtime(t0, t1): + """Convert a time range into MM:SS.remainder string format.""" + td = t1 - t0 + minutes = math.floor(td / 60) + seconds = td - (minutes * 60) + return f"{minutes:02}:{seconds:02}" + + @wraps(func) + def wrapper(*args, **kwargs): + # If profiling is turned off, run function normally + if PROFILING_THRESHOLD is None: + return func(*args, **kwargs) + + t0 = time.time() + try: + result = func(*args, **kwargs) + except Exception as e: + raise e + finally: + t1 = time.time() + arg0 = args[0] if args else None + profile_output(arg0, t0, t1) + return result + + return wrapper + + +def get_logger(name: str): + """Return a logger with the given name. + The callback set in _logger_callback will be used to generate the logger. + """ + if _logger_callback is None: + # Generate default python logger + logger = logging.getLogger(name) + if len(logger.handlers) == 0: + # Initialize stdout handler + handler = logging.StreamHandler(sys.stdout) + handler.setFormatter(_formatter) + logger.addHandler(handler) + logger.setLevel(LOGGING_LEVEL) + return logger + return _logger_callback(name) + + +def to_regex_safe_wildcard_string(pattern: str) -> str: + """Convert a wildcard pattern to a regex-safe pattern string. + + This function escapes all regex special characters in the input pattern + and converts wildcard asterisks (*) to regex wildcards (.*), allowing + for safe pattern matching where only * acts as a wildcard. + + Args: + pattern: Input pattern that may contain wildcards (*) and special + regex characters that should be treated as literals. + + Returns: + A regex pattern string where: + - All regex special characters are escaped (treated as literals) + - Asterisks (*) are converted to .* (regex wildcard) + + Examples: + >>> to_regex_safe_wildcard_string("file.txt") + 'file\\\\.txt' + >>> to_regex_safe_wildcard_string("*.txt") + '.*\\\\.txt' + >>> to_regex_safe_wildcard_string("config[v1.0].data") + 'config\\\\[v1\\\\.0\\\\]\\\\.data' + >>> to_regex_safe_wildcard_string("*_file_*.txt") + '.*_file_.*\\\\.txt' + """ + return re.escape(pattern).replace("\\*", ".*") + + +def ensure_dir(dir_path: str): + """Ensure that a directory exists by creating it and all needed parent directories + + Args: + dir_path: Full path to local directory + """ + logger = get_logger(__name__) + + if not os.path.exists(dir_path): + # Try to create the directory + try: + logger.info(f"Creating directory {dir_path}") + os.makedirs(dir_path) + except OSError as exc: + # Only complain if the directory wasn't created + if not os.path.exists(dir_path): + raise DirectoryNotCreatedError(dir_path=dir_path) + else: + logger.warning(str(exc)) + + if not os.path.isdir(dir_path): + # This is very unlikely to happen + raise DirectoryNotCreatedError(dir_path=dir_path) + + +def cleanpath(path: str, *extra: str) -> str: + """Return the same path, normalized and using only front slashes. + + Args: + path: String absolute or relative path. + *extra: Zero or more string arguments representing extra bits to + add to input path in given order. + + Returns: + str: Path that is the product of all input parameters joined. + + Examples: + >>> cleanpath('c:\\dev\\my_root', 'my_dir', 'my_file.ma') + 'c:/dev/my_root/my_dir/my_file.ma' + >>> cleanpath('/Users//smith/folder1/file1.txt') + '/Users/smith/folder1/file1.txt' + >>> cleanpath('C:/temp/some_dir/', '/some_folder/') + 'C:/temp/some_dir/some_folder' + >>> cleanpath('/Applications', '/\\some_app') + '/Applications/some_app' + >>> cleanpath('D:', 'MIM_Files') + 'D:/MIM_Files' + >>> cleanpath('D:\\\\', 'MIM_Files') + 'D:/MIM_Files' + >>> cleanpath('') + '' + >>> cleanpath('', 'blah', 'blah') + 'blah/blah' + >>> cleanpath('/path/to/dir/') + '/path/to/dir' + >>> cleanpath('/path/./to/../file.txt') + '/path/file.txt' + """ + # Add slash if first argument is a drive + # (os.path.join will not add one in this case) + if path.endswith(":"): + path += "/" + # Must strip any leading slashes from extra bits + extras = [] + for ext in extra: + extras.append(ext.lstrip("/\\")) + result = os.path.join(path, *extras) + if not result: + return "" + return os.path.normpath(result).replace("\\", "/") + + +def abspath(basepath: str, relpath: str) -> str: + """Return absolute path of a base path plus a path relative to it. + + Args: + basepath: Absolute file path. + relpath: Input path that is relative to provided base path. + + Examples: + >>> abspath('c:/temp', 'dir/myfile.txt') + 'C:/temp/dir/myfile.txt' + >>> abspath('', 'c:/temp/dir/myfile.txt') + 'C:/temp/dir/myfile.txt' + >>> abspath('c:/some_folder', '../temp/dir/other_dir') + 'C:/temp/dir/other_dir' + >>> abspath('c:/temp/dir2/folder', '../../dir/myfile.txt') + 'C:/temp/dir/myfile.txt' + """ + return cleanpath(os.path.realpath(os.path.join(basepath, relpath))) + + +def relpath(basepath: str, targetpath: str) -> str: + r"""Return the target path as a relative path to base path. + Paths *must* be on same drive. + + Args: + basepath: Absolute directory path that return path will be relative to. + targetpath: Absolute path whose relative value will be returned. + + Examples: + >>> relpath('c:/temp', 'c:/temp/dir/myfile.txt') + 'dir/myfile.txt' + >>> relpath('c:/some_folder', 'c:/temp/dir/other_dir') + '../temp/dir/other_dir' + >>> relpath('c:/temp/dir2/folder', 'C:/temp/dir/myfile.txt') + '../../dir/myfile.txt' + >>> relpath(r'c:/temp\dir2/folder', r'C:/temp\dir\myfile.txt') # noqa: W605 + '../../dir/myfile.txt' + """ + return cleanpath(os.path.relpath(targetpath, basepath)) + + +def is_sub_directory(root_path: str, full_path: str) -> bool: + """Return True if the full path provided begins with the root path. + + Args: + root_path: A root directory. + full_path: A full path to a directory or file. + + Examples: + >>> is_sub_directory('c:/temp', 'C:/temp/dir/myfile.txt') + True + >>> is_sub_directory('', 'c:/temp/dir/myfile.txt') + False + >>> is_sub_directory('c:/some_folder', 'c:/temp/dir/other_dir') + False + >>> is_sub_directory('c:/temp/dir2/folder', '') + False + """ + if not root_path or not full_path: + return False + abs_root = abspath("", root_path) + abs_full = abspath("", full_path) + try: + # Use commonpath to properly check if full_path is under root_path + # If commonpath of both equals the root, then full is under root + return os.path.commonpath([abs_root]) == os.path.commonpath( + [abs_root, abs_full] + ) + except ValueError: + # Raised when paths are on different drives (Windows) or one is relative + return False + + +def fileext(filepath: str): + """Return extension of given file path without the dot and in lower case. + Examples: + >>> fileext('c:/temp/file.txt') + 'txt' + >>> fileext('dir/another_dir/file.PNG') + 'png' + >>> fileext('dir/another_dir') + '' + >>> fileext('dir/another.dir/folder') + '' + >>> fileext('file.backup.tar.gz') + 'gz' + """ + filename = os.path.basename(filepath) + if "." not in filename: + return "" + return os.path.splitext(filename)[-1].strip(".").lower() + + +def mimetype(ext: str): + """Return the mimetype of the given file extension. + + Args: + ext: A file extension which may or may not be preceded by a '.'. + A file path is also accepted. + + Returns: + String mimetype, or blank string if extension is not recognized. + + Examples: + >>> mimetype('jpg') + 'image/jpeg' + >>> mimetype('.jpeg') + 'image/jpeg' + >>> mimetype('c:/temp/my_image.jpg') + 'image/jpeg' + >>> mimetype('.not_a_recognized_file_type') + '' + """ + if "." in ext and not ext.startswith("."): + ext = os.path.splitext(ext)[1] + else: + ext = "." + ext.strip(".") + try: + return mimetypes.types_map[ext] + except KeyError: + return "" + + +@trace +def download_file(url, local_filename): + """Download a file from the passed in URL and save it in the specified location. + Create any folders as necessary. + + Args: + url: The remote URL to download + local_filename: The full path to the local destination file + + Raises: + DirctoryNotCreatedError: If we couldn't create the folder for the download + """ + # Check if path exists, and create it if it doesn't + local_dir = os.path.dirname(local_filename) + + # This can raise an exception + ensure_dir(local_dir) + + try: + with urllib.request.urlopen(url) as r: # nosec B210 + try: + with open(local_filename, "wb") as f: + while True: + chunk = r.read(8192) + if not chunk: + break + f.write(chunk) + except Exception as exc: # pylint: disable=broad-except + msg = f"Failed to write to local file: {local_filename}" + traceback.print_exc() + raise FlowError(msg) from exc + except urllib.error.HTTPError as exc: + msg = f'HTTP error occurred while accessing url "{url}". {exc}' + traceback.print_exc() + raise FlowError(msg) from exc + except urllib.error.URLError as exc: + msg = f'Request to get url "{url}" failed. {exc}' + traceback.print_exc() + raise FlowError(msg) from exc diff --git a/python/tk-core/requirements/3.10/frozen_requirements.txt b/python/tk-core/requirements/3.10/frozen_requirements.txt index 589c0f0a..0ed675c7 100644 --- a/python/tk-core/requirements/3.10/frozen_requirements.txt +++ b/python/tk-core/requirements/3.10/frozen_requirements.txt @@ -1,5 +1,7 @@ distro==1.4.0 +Fileseq==2.1.2 packaging==25.0 +PyJWT==2.12.0 PyYAML==6.0.1 ruamel.yaml==0.18.14 ruamel.yaml.clib==0.2.15 diff --git a/python/tk-core/requirements/3.10/pkgs.zip b/python/tk-core/requirements/3.10/pkgs.zip index 4811a07cf5ee8092c7c3302dafbb4e29aae7c984..a375cc0de86cd5671b577b1244743486fdd4bb08 100644 GIT binary patch delta 60808 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 diff --git a/python/tk-core/requirements/3.10/requirements.txt b/python/tk-core/requirements/3.10/requirements.txt index eed0486f..fc0667fa 100644 --- a/python/tk-core/requirements/3.10/requirements.txt +++ b/python/tk-core/requirements/3.10/requirements.txt @@ -1,5 +1,7 @@ distro==1.4.0 +fileseq==2.1.2 packaging==25.0 +pyjwt==2.12.0 pyyaml==6.0.1 ruamel.yaml==0.18.14 shotgun_api3==3.10.0 diff --git a/python/tk-core/requirements/3.11/frozen_requirements.txt b/python/tk-core/requirements/3.11/frozen_requirements.txt index 284e721c..c12f38dc 100644 --- a/python/tk-core/requirements/3.11/frozen_requirements.txt +++ b/python/tk-core/requirements/3.11/frozen_requirements.txt @@ -1,5 +1,7 @@ distro==1.9.0 +Fileseq==2.1.2 packaging==25.0 +PyJWT==2.12.0 PyYAML==6.0.2 ruamel.yaml==0.18.14 ruamel.yaml.clib==0.2.15 diff --git a/python/tk-core/requirements/3.11/pkgs.zip b/python/tk-core/requirements/3.11/pkgs.zip index 4d502a0e3d49c32355342e4f54939e42ea015ebe..ad363b2391a50bd035486cc635475734f252582d 100644 GIT binary patch delta 60737 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

}L$pHn@Y>Ma_9>3+9{dbCeqUY{>8$HfwTz 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%0A%W&;KSuM2=!gVwp@wlS!k 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 F{twSvMZf?6 delta 3928 zcmZu!2~-qU7X4M#&{fbMCA2_;f}jvhv=Nu6;DQ=+jLQ+@78OB6qD0)#=mbP)ww6T@ zQJ#BT5-=(%&IFXGKxPsbK=c>}bu=M5MiYbaXwGC9m(2UW3bfmlr>S@Dzi<8Tzxp0M z{#M%W{b~3FNoOR4$Rs)Y!*V*SuY~WSxW0YZ`>$L3h6^0HZ;oT{%G-J&xD%H=JOpb1 zlVI;KA&5g)h6&L+E)55&Ftpx^hn#p{^Q#7S{W4 z>=Ri$tFFemic?i9)t(|%d5tD9*UWiy$B88pmmDXG;c6_i!o{Z|$KIbRdi3K`Lb~`D z)kjZ(cDo{vfDGlJ_*nkglyL46e|ol;jVG148?O56w1 z8r9qFOF zfAHxF(MM$?T+gS@P(8rGz^K-X103+@Sb1@P{$FYb9p0s{RlP0WtLGs@`Cfe?W5d{e z`fs_1uKV@*oMbI4(N~t0$P?5qd2&cTuk}HhoGrMp7(V&${I*gDLWXvR@O^p@Xe`ky zmFtemU#cp@zL1Y};YM38$dBIUD$S`ki>f3-++_G}h~ism=&UrT6}{o6{MM7RuMANN z)H=q7DTV54+Zbh)TUpQs0gZVe6lh`<&~x= zU#h%Vi*i(zJkpg5F5KR~3zfC1-(>)71ebwK_twoa{p$d5J*3blQ{C z>eKGF1S^EJzHaY%P!oZV(zViUOGh7Dzk{$!!3!>-4_?0S5tYm>1fHQeo=D2m^AW)U zArJ7^#U|gacOk4s@PO6~Ex;B_aY2(0Augv0@wTBpy+A2Z` zdO|$A+n4Fm5P>9o6ul%iJ_vj_)2`f?Aqz7O3=^QyQ}l&*v$R}F6Z?eEFcY%SO(5vB zemF4>R$PWdfYZqJBKy*5S8~_~KSoQ9|51bXj*TSt%4-X%EgC zdh5rKdYow9uVhuTMu4}iS~tX5(R_8H09I7wF_$sq+Cc&8tlDn=%8+Tt1)%GxKR2Gc zVr)$}G@fLzFInjc0m9p9qg!LL9|mAk-M|TD6Y1|&0_-UgjeWx>2%?dnLjK*382h!p zn;+{#JfF5_)AI)bYEOz?;HUN4X4H31JrRoMYgWE}6pQb?*o?4Z$|o3vX0ybe3NR~M zODvfo^qBxVvbA#5AR_M3!_92ki+AX?-(r^pVWDS)+Hbfi00MHTdU2SPgNBm(i?BFH z8v!nE_dlJEgL#n)vD@ND14YEx#1x>tZ!sF%xzamJY;W6- zqnE@7t%_b~UjDKDt~8u-?0p>fJC(J*%|_nK5uq?fGQpBO&HLIs^nPiB2;1|tqE<6x z{8kZe=F#q~$BH)~@cDibd^Tuvh1o>={IMMbN~s7j8??TA!#6T8^#~z?lVmqoMKP9(|_9qD0XZ_pea)b7=LL7xKZ&bh;CM$XK_ zei)6t)ZK>b_O+wRO)j8roXeKmi{WR(Z9eA+Ux{-F_c2{KhE_)9{U5zu*)_wW~M>t)g_lD|?TBuMa~TbQz13*qjbM6)slyUz7B2scQ9G`=U;&-XpvoboM3(-b>sY% z@4Pc-BJ$b&#+Gkx>fkF-UPz6c|Kj>&UyrJPzQo51l@mB`(stEr6CU{eH(pwwx``Tj zAAHD`rae-ZI@RHg@JPGXX$V* z$L8#KDlCnAWtg%>^RRRa`n>X~40%jo!5u^)%%xN&d~n1si(U|$@F%n53q#srD{kW+ zyxH2?uRnls+*nUd+?-!A+Ff^0hLKEQ4(2jp!busD+L3K2=q}Wt+LRX24eE-u;$CO? z%6i1jIkYQJ|Ju5jVo(hZZnWn#L+2YuxD_<=QTn0>V-XAjj3iM5$a<{G2 zTb}%l6R#=!kU>2;JO^P(YIK6brOtlfvQoxTSHcqM~?Q4tVJ#Bntl>G7(aXEJFSdikhE+ diff --git a/python/tk-core/requirements/3.11/requirements.txt b/python/tk-core/requirements/3.11/requirements.txt index 4c705e43..d03588ab 100644 --- a/python/tk-core/requirements/3.11/requirements.txt +++ b/python/tk-core/requirements/3.11/requirements.txt @@ -1,5 +1,7 @@ distro==1.9.0 +fileseq==2.1.2 packaging==25.0 +pyjwt==2.12.0 pyyaml==6.0.2 ruamel.yaml==0.18.14 shotgun_api3==3.10.0 diff --git a/python/tk-core/requirements/3.13/frozen_requirements.txt b/python/tk-core/requirements/3.13/frozen_requirements.txt index 284e721c..c12f38dc 100644 --- a/python/tk-core/requirements/3.13/frozen_requirements.txt +++ b/python/tk-core/requirements/3.13/frozen_requirements.txt @@ -1,5 +1,7 @@ distro==1.9.0 +Fileseq==2.1.2 packaging==25.0 +PyJWT==2.12.0 PyYAML==6.0.2 ruamel.yaml==0.18.14 ruamel.yaml.clib==0.2.15 diff --git a/python/tk-core/requirements/3.13/pkgs.zip b/python/tk-core/requirements/3.13/pkgs.zip index 78a1b8f1a657fb302b29660d3c47e2b4a0e2bfa2..57c488afa2fc3b27d419c0dc38ef95f2be783755 100644 GIT binary patch delta 60732 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

}L$pHn@Y>Ma_9>3+9{dbCeqUY{>8$HfwTz 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%0A%W&;KSuM2=!gVwp@wlS!k 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

tS(Gebt^M+H6@S$!$_ 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/Hovk*z12M~@edSYC9o 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 HP;LJQGXgK3 delta 3931 zcmZu!2~ZSQ8h+h9Fx|jI2%}sgf{J1kJmZB1bxpY%Bb%u4K!yQE7#Xesb-jRz2dj9Y zrN0|>y%JCq6|(^)Dv)eSMHDT=qN`+yuF+L-T}@S%^4kBsZqOOi*3f@_@B7d9zrUZ= zkA`mkY7mW?Ea?n{5SbiYJHMRH>M!AYi=}@*_Wo*n{}_P-41b0><$5|>;*6l2s_X2polMUKtSHo(IPGk;?nUK zqDd`A7k9~~nk%HzS~Vy?Z)u1sO*KgMYIxoJrG8_$?vzg@n;O)&andPu)t)HbQLR|! zNsCl(w=<?UHAQ*OcD<0?)0&0DG@LVRTSakvs(>EWeZR4aPZNBN~EXI~wz zY*g!Lj#i4))wc1m4?ej%N^9XVOtzD4j`1 za^dbwI+_c;XVK9itj=rgy2oNCLcAjhVH2bMsjyFqBv2ejLpZ-Kjs{A(V+h=fqoEw3 zMj9x}NpLJmFu)ii<(&aj5S2zI5lA)CFz&#dd7)oyC?Sh>65`u#9p4r9zoZa2ZlpYM zxXu(K3km#cq}{k;RkQ8$&8~!0`4IAsgW|j|3A`6igS)c?UW~jFkl;;7&#}%4^f?Td zR|;LAFkTDp^LX@e>NJ59@mdnih=^Ceg{3?T8V z0_B4rJQ5KY=>_45v5gix!~4PYi}xNm?!?OZvskh#(}{ zMvIX!m z(;l2Q;?~b2>v5z7zLi$ZA_1nEwRTu+M*G!E1OQazL7!&G^-=+Dn6>SE#gJ*o1qhl) zL%H$7tO+$iXnd)MbInRl2oT>+8`qk+=5a6Vs+%~X976rIN`O6EL_`0W$%1I$$B=)x zV<&vC4+>$8hzHd1aQgiuK&S?@b+-yiyT4xE}*g)g}uwiVpbWI0}>!5wcUY#_Jm#7nXm75W!7y8m(iH zR)N;I{bpwW>2wKp;#dFm5INz$&Q$k|kkWT`BuI0{UKRFEvn3d7rG2?}x)rqzGjwn| z!X+3ES+&Hf7~D2n2iL4LTs?|YCU@Rt5s8wfBRw4K4V|Nd+P(S!h)SbfI5(>1{ZCh8 zLyW^_>h8ex`QBCKu1}*roXeKmixJ|$Z90eCG#bHao!{xT@?%_%!(UGan%{YDve)a> zyFY$%Z7Xt~zQsMPa=SuqI_=EuW~~g)_!vW7h*Qzg{fatQI9;p{gobo2)M%HKNA4~H z+3F_}Jn0=zh23z8bHgA!gL?3@^x#6ieI1Va3ursEgUQODa1~5wkzIM*z?MOMI6wP? z59WM`e0IZef#XO&DK)=UFJ*{SyqKSk^~{$G|5g5$K~sj!C>Aa6I0b-v#dXS98H9sBJLe%Y}* zJDv)A!(JIo*_wykZ1j2c3mJAYfdyBELbPXzO!(-qW|)%9w%?c@UweFZxB&NY4_MF zV^U~Wp8oaRv;7|RAY|$}=k&uGk+&D8WF9M%G0NJw1zT(a4qM0JIJQkoE!%9fn5>p1 zznR|HXWRA+!17VNJK=oocq;6=7n*)fMyfeI`|Z-ePYW=?_*XK#T0r0BDfeGU1Lg8# zZoH=O-vsK%;Z%er^GP@G-0U6#-4<$TpF~(mTjoKGYzsJj5?+X78+HVrVV_U-do!ne jVSS!Q`@lCEE$NmVqmjqug7;2BjQH=6KOt9;MacgFzrn9U diff --git a/python/tk-core/requirements/3.13/requirements.txt b/python/tk-core/requirements/3.13/requirements.txt index 4c705e43..d03588ab 100644 --- a/python/tk-core/requirements/3.13/requirements.txt +++ b/python/tk-core/requirements/3.13/requirements.txt @@ -1,5 +1,7 @@ distro==1.9.0 +fileseq==2.1.2 packaging==25.0 +pyjwt==2.12.0 pyyaml==6.0.2 ruamel.yaml==0.18.14 shotgun_api3==3.10.0 diff --git a/python/tk-core/requirements/3.7/certs/shotgun_api3/lib/certifi/cacert.pem b/python/tk-core/requirements/3.7/certs/shotgun_api3/lib/certifi/cacert.pem deleted file mode 100644 index 64c05d7f..00000000 --- a/python/tk-core/requirements/3.7/certs/shotgun_api3/lib/certifi/cacert.pem +++ /dev/null @@ -1,4778 +0,0 @@ - -# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Label: "Entrust Root Certification Authority" -# Serial: 1164660820 -# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 -# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 -# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 -Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW -KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw -NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw -NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy -ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV -BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo -Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 -4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 -KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI -rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi -94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB -sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi -gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo -kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE -vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t -O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua -AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP -9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ -eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m -0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2" -# Serial: 1289 -# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b -# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 -# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa -GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg -Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J -WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB -rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp -+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 -ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i -Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz -PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og -/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH -oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI -yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud -EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 -A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL -MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f -BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn -g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl -fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K -WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha -B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc -hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR -TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD -mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z -ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y -4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza -8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3" -# Serial: 1478 -# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf -# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 -# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM -V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB -4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr -H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd -8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv -vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT -mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe -btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc -T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt -WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ -c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A -4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD -VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG -CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 -aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu -dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw -czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G -A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg -Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 -7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem -d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd -+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B -4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN -t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x -DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 -k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s -zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j -Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT -mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK -4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root CA" -# Serial: 17154717934120587862167794914071425081 -# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 -# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 -# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root CA" -# Serial: 10944719598952040374951832963794454346 -# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e -# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 -# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert High Assurance EV Root CA" -# Serial: 3553400076410547919724730734378100087 -# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a -# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 -# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Label: "SwissSign Gold CA - G2" -# Serial: 13492815561806991280 -# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 -# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 -# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=SecureTrust CA O=SecureTrust Corporation -# Subject: CN=SecureTrust CA O=SecureTrust Corporation -# Label: "SecureTrust CA" -# Serial: 17199774589125277788362757014266862032 -# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 -# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 -# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz -MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv -cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz -Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO -0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao -wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj -7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS -8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT -BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg -JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 -6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ -3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm -D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS -CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -# Issuer: CN=Secure Global CA O=SecureTrust Corporation -# Subject: CN=Secure Global CA O=SecureTrust Corporation -# Label: "Secure Global CA" -# Serial: 9751836167731051554232119481456978597 -# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de -# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b -# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx -MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg -Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ -iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa -/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ -jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI -HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 -sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w -gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw -KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG -AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L -URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO -H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm -I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY -iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO Certification Authority O=COMODO CA Limited -# Label: "COMODO Certification Authority" -# Serial: 104350513648249232941998508985834464573 -# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 -# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b -# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB -gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV -BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw -MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl -YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P -RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 -UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI -2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 -Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp -+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ -DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O -nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW -/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g -PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY -SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv -IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 -zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd -BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB -ZQ== ------END CERTIFICATE----- - -# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Label: "COMODO ECC Certification Authority" -# Serial: 41578283867086692638256921589707938090 -# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 -# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 -# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT -IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw -MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy -ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N -T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR -FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J -cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW -BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm -fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv -GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -# Issuer: CN=Certigna O=Dhimyotis -# Subject: CN=Certigna O=Dhimyotis -# Label: "Certigna" -# Serial: 18364802974209362175 -# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff -# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 -# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X -DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ -BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 -QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny -gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw -zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q -130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 -JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw -ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT -AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj -AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG -9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h -bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc -fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu -HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w -t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Label: "ePKI Root Certification Authority" -# Serial: 28956088682735189655030529057352760477 -# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 -# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 -# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe -MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 -ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw -IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL -SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH -SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh -ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X -DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 -TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ -fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA -sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU -WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS -nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH -dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip -NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC -AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF -MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB -uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl -PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP -JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ -gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 -j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 -5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB -o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS -/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z -Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE -W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D -hNQ+IIX3Sj0rnP0qCglN6oH4EZw= ------END CERTIFICATE----- - -# Issuer: O=certSIGN OU=certSIGN ROOT CA -# Subject: O=certSIGN OU=certSIGN ROOT CA -# Label: "certSIGN ROOT CA" -# Serial: 35210227249154 -# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 -# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b -# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT -AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD -QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP -MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do -0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ -UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d -RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ -OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv -JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C -AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O -BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ -LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY -MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ -44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I -Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw -i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN -9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -# Issuer: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) -# Subject: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) -# Label: "NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny" -# Serial: 80544274841616 -# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 -# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 -# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG -EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 -MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl -cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR -dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB -pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM -b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm -aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz -IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT -lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz -AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 -VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG -ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 -BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG -AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M -U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh -bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C -+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F -uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 -XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Label: "Microsec e-Szigno Root CA 2009" -# Serial: 14014712776195784473 -# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 -# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e -# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD -VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 -ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G -CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y -OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx -FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp -Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP -kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc -cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U -fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 -N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC -xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 -+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM -Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG -SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h -mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk -ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c -2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t -HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Label: "GlobalSign Root CA - R3" -# Serial: 4835703278459759426209954 -# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 -# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad -# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 -MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 -RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT -gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm -KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd -QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ -XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o -LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU -RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp -jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK -6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX -mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs -Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH -WD9f ------END CERTIFICATE----- - -# Issuer: CN=Izenpe.com O=IZENPE S.A. -# Subject: CN=Izenpe.com O=IZENPE S.A. -# Label: "Izenpe.com" -# Serial: 917563065490389241595536686991402621 -# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 -# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 -# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Label: "Go Daddy Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 -# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b -# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT -EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp -ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz -NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH -EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE -AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD -E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH -/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy -DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh -GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR -tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA -AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX -WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu -9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr -gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo -2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI -4uJEvlz36hz1 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 -# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e -# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs -ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw -MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj -aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp -Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg -nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 -HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N -Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN -dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 -HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G -CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU -sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 -4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg -8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 -mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Services Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 -# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f -# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs -ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy -dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p -OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 -8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K -Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe -hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk -6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q -AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI -bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB -ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z -qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn -0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN -sSi6 ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Commercial O=AffirmTrust -# Subject: CN=AffirmTrust Commercial O=AffirmTrust -# Label: "AffirmTrust Commercial" -# Serial: 8608355977964138876 -# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 -# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 -# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP -Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr -ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL -MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 -yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr -VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ -nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG -XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj -vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt -Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g -N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC -nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Networking O=AffirmTrust -# Subject: CN=AffirmTrust Networking O=AffirmTrust -# Label: "AffirmTrust Networking" -# Serial: 8957382827206547757 -# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f -# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f -# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y -YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua -kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL -QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp -6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG -yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i -QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO -tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu -QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ -Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u -olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 -x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium O=AffirmTrust -# Subject: CN=AffirmTrust Premium O=AffirmTrust -# Label: "AffirmTrust Premium" -# Serial: 7893706540734352110 -# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 -# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 -# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz -dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG -A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U -cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf -qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ -JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ -+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS -s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 -HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 -70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG -V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S -qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S -5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia -C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX -OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE -FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 -KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B -8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ -MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc -0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ -u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF -u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH -YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 -GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO -RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e -KeC2uAloGRwYQw== ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust -# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust -# Label: "AffirmTrust Premium ECC" -# Serial: 8401224907861490260 -# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d -# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb -# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC -VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ -cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ -BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt -VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D -0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 -ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G -A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs -aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I -flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA" -# Serial: 279744 -# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 -# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e -# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM -MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D -ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU -cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 -WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg -Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw -IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH -UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM -TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU -BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM -kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x -AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV -HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y -sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL -I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 -J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY -VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Label: "TWCA Root Certification Authority" -# Serial: 1 -# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 -# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 -# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES -MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU -V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz -WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO -LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE -AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH -K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX -RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z -rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx -3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq -hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC -MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls -XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D -lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn -aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ -YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Label: "Security Communication RootCA2" -# Serial: 0 -# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 -# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 -# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl -MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe -U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX -DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy -dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj -YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV -OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr -zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM -VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ -hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO -ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw -awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs -OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 -DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF -coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc -okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 -t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy -1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ -SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Label: "Actalis Authentication Root CA" -# Serial: 6271844772424770508 -# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 -# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac -# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE -BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w -MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC -SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 -ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv -UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX -4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 -KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ -gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb -rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ -51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F -be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe -KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F -v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn -fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 -jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz -ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL -e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 -jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz -WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V -SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j -pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX -X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok -fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R -K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU -ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU -LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT -LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 2 Root CA" -# Serial: 2 -# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 -# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 -# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr -6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV -L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 -1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx -MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ -QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB -arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr -Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi -FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS -P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN -9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz -uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h -9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t -OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo -+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 -KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 -DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us -H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ -I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 -5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h -3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz -Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 3 Root CA" -# Serial: 2 -# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec -# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 -# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y -ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E -N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 -tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX -0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c -/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X -KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY -zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS -O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D -34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP -K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv -Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj -QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS -IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 -HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa -O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv -033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u -dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE -kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 -3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD -u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq -4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 3" -# Serial: 1 -# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef -# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 -# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN -8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ -RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 -hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 -ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM -EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 -A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy -WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ -1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 -6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT -91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p -TpPDpFQUWw== ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 2009" -# Serial: 623603 -# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f -# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 -# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 ------BEGIN CERTIFICATE----- -MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha -ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM -HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 -UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 -tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R -ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM -lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp -/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G -A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G -A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj -dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy -MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl -cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js -L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL -BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni -acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 -o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K -zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 -PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y -Johw1+qRzT65ysCQblrGXnRl11z+o+I= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 EV 2009" -# Serial: 623604 -# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 -# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 -# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw -NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV -BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn -ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 -3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z -qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR -p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 -HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw -ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea -HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw -Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh -c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E -RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt -dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku -Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp -3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 -nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF -CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na -xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX -KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 ------END CERTIFICATE----- - -# Issuer: CN=CA Disig Root R2 O=Disig a.s. -# Subject: CN=CA Disig Root R2 O=Disig a.s. -# Label: "CA Disig Root R2" -# Serial: 10572350602393338211 -# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 -# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 -# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV -BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu -MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy -MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx -EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw -ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe -NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH -PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I -x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe -QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR -yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO -QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 -H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ -QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD -i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs -nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 -rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI -hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM -tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf -GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb -lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka -+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal -TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i -nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 -gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr -G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os -zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x -L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL ------END CERTIFICATE----- - -# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Label: "ACCVRAIZ1" -# Serial: 6828503384748696800 -# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 -# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 -# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 ------BEGIN CERTIFICATE----- -MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE -AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw -CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ -BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND -VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb -qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY -HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo -G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA -lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr -IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ -0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH -k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 -4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO -m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa -cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl -uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI -KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls -ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG -AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 -VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT -VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG -CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA -cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA -QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA -7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA -cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA -QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA -czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu -aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt -aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud -DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF -BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp -D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU -JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m -AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD -vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms -tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH -7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h -I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA -h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF -d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H -pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 ------END CERTIFICATE----- - -# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Label: "TWCA Global Root CA" -# Serial: 3262 -# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 -# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 -# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx -EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT -VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 -NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT -B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF -10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz -0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh -MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH -zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc -46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 -yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi -laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP -oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA -BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE -qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm -4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL -1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn -LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF -H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo -RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ -nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh -15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW -6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW -nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j -wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz -aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy -KwbQBM0= ------END CERTIFICATE----- - -# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Label: "TeliaSonera Root CA v1" -# Serial: 199041966741090107964904287217786801558 -# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c -# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 -# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 ------BEGIN CERTIFICATE----- -MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw -NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv -b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD -VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F -VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 -7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X -Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ -/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs -81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm -dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe -Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu -sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 -pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs -slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ -arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD -VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG -9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl -dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx -0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj -TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed -Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 -Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI -OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 -vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW -t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn -HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx -SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 2" -# Serial: 1 -# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a -# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 -# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd -AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC -FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi -1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq -jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ -wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ -WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy -NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC -uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw -IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 -g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN -9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP -BSeOE6Fuwg== ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot 2011 O=Atos -# Subject: CN=Atos TrustedRoot 2011 O=Atos -# Label: "Atos TrustedRoot 2011" -# Serial: 6643877497813316402 -# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 -# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 -# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE -AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG -EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM -FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC -REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp -Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM -VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ -SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ -4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L -cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi -eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG -A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 -DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j -vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP -DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc -maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D -lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv -KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 1 G3" -# Serial: 687049649626669250736271037606554624078720034195 -# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab -# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 -# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 -MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV -wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe -rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 -68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh -4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp -UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o -abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc -3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G -KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt -hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO -Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt -zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD -ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC -MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 -cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN -qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 -YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv -b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 -8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k -NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj -ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp -q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt -nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2 G3" -# Serial: 390156079458959257446133169266079962026824725800 -# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 -# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 -# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 -MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf -qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW -n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym -c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ -O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 -o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j -IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq -IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz -8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh -vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l -7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG -cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD -ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 -AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC -roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga -W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n -lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE -+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV -csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd -dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg -KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM -HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 -WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3 G3" -# Serial: 268090761170461462463995952157327242137089239581 -# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 -# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d -# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 -MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR -/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu -FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR -U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c -ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR -FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k -A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw -eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl -sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp -VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q -A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ -ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD -ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px -KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI -FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv -oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg -u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP -0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf -3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl -8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ -DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN -PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ -ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G2" -# Serial: 15385348160840213938643033620894905419 -# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d -# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f -# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 ------BEGIN CERTIFICATE----- -MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA -n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc -biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp -EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA -bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu -YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB -AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW -BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI -QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I -0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni -lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 -B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv -ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo -IhNzbM8m9Yop5w== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G3" -# Serial: 15459312981008553731928384953135426796 -# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb -# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 -# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 ------BEGIN CERTIFICATE----- -MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg -RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf -Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q -RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD -AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY -JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv -6pZjamVFkpUBtA== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G2" -# Serial: 4293743540046975378534879503202253541 -# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 -# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 -# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH -MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI -2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx -1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ -q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz -tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ -vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV -5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY -1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 -NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG -Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 -8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe -pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G3" -# Serial: 7089244469030293291760083333884364146 -# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca -# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e -# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 ------BEGIN CERTIFICATE----- -MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe -Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw -EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x -IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF -K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG -fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO -Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd -BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx -AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ -oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 -sycX ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Trusted Root G4" -# Serial: 7451500558977370777930084869016614236 -# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 -# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 -# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 ------BEGIN CERTIFICATE----- -MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg -RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y -ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If -xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV -ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO -DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ -jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ -CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi -EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM -fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY -uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK -chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t -9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD -ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 -SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd -+SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc -fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa -sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N -cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N -0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie -4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI -r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 -/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm -gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ ------END CERTIFICATE----- - -# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Label: "COMODO RSA Certification Authority" -# Serial: 101909084537582093308941363524873193117 -# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 -# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 -# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 ------BEGIN CERTIFICATE----- -MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB -hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV -BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT -EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR -Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR -6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X -pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC -9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV -/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf -Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z -+pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w -qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah -SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC -u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf -Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq -crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E -FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB -/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl -wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM -4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV -2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna -FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ -CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK -boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke -jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL -S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb -QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl -0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB -NVOFBkpdn627G190 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Label: "USERTrust RSA Certification Authority" -# Serial: 2645093764781058787591871645665788717 -# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 -# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e -# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 ------BEGIN CERTIFICATE----- -MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB -iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl -cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV -BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw -MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV -BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B -3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY -tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ -Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 -VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT -79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 -c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT -Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l -c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee -UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE -Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd -BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G -A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF -Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO -VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 -ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs -8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR -iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze -Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ -XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ -qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB -VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB -L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG -jjxDah2nGN59PRbxYvnKkKj9 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Label: "USERTrust ECC Certification Authority" -# Serial: 123013823720199481456569720443997572134 -# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 -# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 -# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a ------BEGIN CERTIFICATE----- -MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl -eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT -JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT -Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg -VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo -I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng -o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G -A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB -zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW -RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Label: "GlobalSign ECC Root CA - R5" -# Serial: 32785792099990507226680698011560947931244 -# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 -# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa -# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 ------BEGIN CERTIFICATE----- -MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk -MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH -bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX -DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD -QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu -MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc -8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke -hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI -KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg -515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO -xwy8p2Fp8fc74SrL+SvzZpA3 ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Label: "IdenTrust Commercial Root CA 1" -# Serial: 13298821034946342390520003877796839426 -# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 -# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 -# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu -VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw -MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw -JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT -3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU -+ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp -S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 -bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi -T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL -vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK -Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK -dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT -c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv -l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N -iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD -ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH -6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt -LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 -nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 -+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK -W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT -AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq -l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG -4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ -mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A -7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Label: "IdenTrust Public Sector Root CA 1" -# Serial: 13298821034946342390521976156843933698 -# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba -# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd -# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu -VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN -MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 -MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 -ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy -RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS -bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF -/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R -3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw -EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy -9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V -GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ -2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV -WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD -W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN -AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj -t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV -DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 -TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G -lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW -mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df -WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 -+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ -tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA -GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv -8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only -# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only -# Label: "Entrust Root Certification Authority - G2" -# Serial: 1246989352 -# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2 -# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4 -# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39 ------BEGIN CERTIFICATE----- -MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 -cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs -IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz -dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy -NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu -dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt -dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 -aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK -AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T -RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN -cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW -wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 -U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 -jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN -BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ -jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ -Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v -1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R -nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH -VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only -# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only -# Label: "Entrust Root Certification Authority - EC1" -# Serial: 51543124481930649114116133369 -# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc -# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47 -# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5 ------BEGIN CERTIFICATE----- -MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG -A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 -d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu -dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq -RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy -MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD -VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 -L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g -Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi -A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt -ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH -Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O -BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC -R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX -hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G ------END CERTIFICATE----- - -# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority -# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority -# Label: "CFCA EV ROOT" -# Serial: 407555286 -# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 -# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 -# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD -TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y -aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx -MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j -aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP -T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 -sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL -TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 -/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp -7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz -EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt -hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP -a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot -aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg -TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV -PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv -cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL -tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd -BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB -ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT -ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL -jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS -ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy -P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 -xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d -Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN -5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe -/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z -AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ -5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GB CA" -# Serial: 157768595616588414422159278966750757568 -# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d -# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed -# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 ------BEGIN CERTIFICATE----- -MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt -MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg -Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i -YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x -CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG -b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh -bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 -HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx -WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX -1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk -u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P -99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r -M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB -BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh -cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 -gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO -ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf -aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic -Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= ------END CERTIFICATE----- - -# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Label: "SZAFIR ROOT CA2" -# Serial: 357043034767186914217277344587386743377558296292 -# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 -# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de -# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL -BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 -ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw -NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L -cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg -Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN -QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT -3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw -3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 -3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 -BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN -XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF -AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw -8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG -nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP -oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy -d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg -LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA 2" -# Serial: 44979900017204383099463764357512596969 -# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 -# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 -# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 ------BEGIN CERTIFICATE----- -MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB -gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu -QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG -A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz -OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ -VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 -b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA -DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn -0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB -OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE -fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E -Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m -o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i -sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW -OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez -Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS -adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n -3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ -F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf -CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 -XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm -djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ -WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb -AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq -P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko -b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj -XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P -5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi -DrW5viSP ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce -# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 -# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 ------BEGIN CERTIFICATE----- -MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix -DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k -IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT -N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v -dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG -A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh -ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx -QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 -dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA -4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 -AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 -4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C -ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV -9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD -gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 -Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq -NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko -LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc -Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd -ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I -XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI -M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot -9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V -Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea -j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh -X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ -l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf -bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 -pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK -e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 -vm9qp/UsQu0yrbYhnr68 ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef -# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 -# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 ------BEGIN CERTIFICATE----- -MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN -BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl -bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv -b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ -BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj -YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 -MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 -dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg -QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa -jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi -C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep -lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof -TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR ------END CERTIFICATE----- - -# Issuer: CN=ISRG Root X1 O=Internet Security Research Group -# Subject: CN=ISRG Root X1 O=Internet Security Research Group -# Label: "ISRG Root X1" -# Serial: 172886928669790476064670243504169061120 -# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e -# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 -# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw -TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh -cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 -WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu -ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc -h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ -0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U -A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW -T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH -B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC -B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv -KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn -OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn -jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw -qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI -rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq -hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ -3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK -NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 -ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur -TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC -jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc -oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq -4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA -mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d -emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE----- - -# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Label: "AC RAIZ FNMT-RCM" -# Serial: 485876308206448804701554682760554759 -# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d -# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 -# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx -CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ -WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ -BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG -Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ -yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf -BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz -WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF -tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z -374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC -IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL -mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 -wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS -MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 -ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet -UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H -YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 -LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD -nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 -RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM -LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf -77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N -JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm -fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp -6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp -1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B -9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok -RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv -uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 1 O=Amazon -# Subject: CN=Amazon Root CA 1 O=Amazon -# Label: "Amazon Root CA 1" -# Serial: 143266978916655856878034712317230054538369994 -# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 -# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 -# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e ------BEGIN CERTIFICATE----- -MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj -ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM -9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw -IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 -VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L -93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm -jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA -A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI -U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs -N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv -o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU -5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy -rqXRfboQnoZsG4q5WTP468SQvvG5 ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 2 O=Amazon -# Subject: CN=Amazon Root CA 2 O=Amazon -# Label: "Amazon Root CA 2" -# Serial: 143266982885963551818349160658925006970653239 -# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 -# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a -# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK -gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ -W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg -1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K -8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r -2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me -z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR -8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj -mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz -7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 -+XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI -0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm -UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 -LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY -+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS -k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl -7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm -btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl -urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ -fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 -n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE -76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H -9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT -4PsJYGw= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 3 O=Amazon -# Subject: CN=Amazon Root CA 3 O=Amazon -# Label: "Amazon Root CA 3" -# Serial: 143266986699090766294700635381230934788665930 -# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 -# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e -# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 ------BEGIN CERTIFICATE----- -MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl -ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr -ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr -BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM -YyRIHN8wfdVoOw== ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 4 O=Amazon -# Subject: CN=Amazon Root CA 4 O=Amazon -# Label: "Amazon Root CA 4" -# Serial: 143266989758080763974105200630763877849284878 -# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd -# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be -# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 ------BEGIN CERTIFICATE----- -MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi -9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk -M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB -MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw -CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW -1KyLa2tJElMzrdfkviT8tQp21KW8EA== ------END CERTIFICATE----- - -# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" -# Serial: 1 -# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 -# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca -# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 ------BEGIN CERTIFICATE----- -MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx -GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp -bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w -KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 -BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy -dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG -EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll -IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU -QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT -TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg -LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 -a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr -LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr -N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X -YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ -iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f -AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH -V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh -AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf -IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 -lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c -8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf -lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= ------END CERTIFICATE----- - -# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. -# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. -# Label: "GDCA TrustAUTH R5 ROOT" -# Serial: 9009899650740120186 -# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 -# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 -# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 ------BEGIN CERTIFICATE----- -MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE -BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ -IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 -MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV -BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w -HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj -Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj -TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u -KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj -qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm -MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 -ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP -zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk -L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC -jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA -HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC -AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg -p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm -DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 -COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry -L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf -JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg -IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io -2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV -09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ -XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq -T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe -MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== ------END CERTIFICATE----- - -# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation -# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation -# Label: "SSL.com Root Certification Authority RSA" -# Serial: 8875640296558310041 -# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 -# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb -# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 ------BEGIN CERTIFICATE----- -MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE -BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK -DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz -OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv -dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv -bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R -xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX -qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC -C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 -6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh -/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF -YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E -JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc -US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 -ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm -+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi -M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G -A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV -cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc -Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs -PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ -q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 -cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr -a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I -H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y -K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu -nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf -oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY -Ic2wBlX7Jz9TkHCpBB5XJ7k= ------END CERTIFICATE----- - -# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation -# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation -# Label: "SSL.com Root Certification Authority ECC" -# Serial: 8495723813297216424 -# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e -# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a -# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 ------BEGIN CERTIFICATE----- -MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC -VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T -U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz -WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 -b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS -b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI -7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg -CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud -EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD -VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T -kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ -gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl ------END CERTIFICATE----- - -# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation -# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation -# Label: "SSL.com EV Root Certification Authority RSA R2" -# Serial: 6248227494352943350 -# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 -# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a -# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c ------BEGIN CERTIFICATE----- -MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV -BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE -CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy -MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G -A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD -DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq -M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf -OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa -4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 -HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR -aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA -b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ -Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV -PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO -pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu -UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY -MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV -HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 -9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW -s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 -Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg -cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM -79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz -/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt -ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm -Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK -QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ -w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi -S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 -mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== ------END CERTIFICATE----- - -# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation -# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation -# Label: "SSL.com EV Root Certification Authority ECC" -# Serial: 3182246526754555285 -# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 -# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d -# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 ------BEGIN CERTIFICATE----- -MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC -VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T -U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx -NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv -dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv -bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 -AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA -VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku -WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX -5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ -ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg -h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 -# Label: "GlobalSign Root CA - R6" -# Serial: 1417766617973444989252670301619537 -# MD5 Fingerprint: 4f:dd:07:e4:d4:22:64:39:1e:0c:37:42:ea:d1:c6:ae -# SHA1 Fingerprint: 80:94:64:0e:b5:a7:a1:ca:11:9c:1f:dd:d5:9f:81:02:63:a7:fb:d1 -# SHA256 Fingerprint: 2c:ab:ea:fe:37:d0:6c:a2:2a:ba:73:91:c0:03:3d:25:98:29:52:c4:53:64:73:49:76:3a:3a:b5:ad:6c:cf:69 ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg -MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh -bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx -MjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET -MBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI -xutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k -ZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD -aNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw -LnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw -1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX -k7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2 -SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h -bguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n -WUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY -rZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce -MgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu -bAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN -nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt -Ixg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61 -55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj -vUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf -cDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz -oHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp -nOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs -pA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v -JJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R -8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4 -5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GC CA" -# Serial: 44084345621038548146064804565436152554 -# MD5 Fingerprint: a9:d6:b9:2d:2f:93:64:f8:a5:69:ca:91:e9:68:07:23 -# SHA1 Fingerprint: e0:11:84:5e:34:de:be:88:81:b9:9c:f6:16:26:d1:96:1f:c3:b9:31 -# SHA256 Fingerprint: 85:60:f9:1c:36:24:da:ba:95:70:b5:fe:a0:db:e3:6f:f1:1a:83:23:be:94:86:85:4f:b3:f3:4a:55:71:19:8d ------BEGIN CERTIFICATE----- -MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw -CQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91 -bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg -Um9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ -BgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu -ZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS -b290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni -eUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W -p2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T -rYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV -57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg -Mgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 ------END CERTIFICATE----- - -# Issuer: CN=UCA Global G2 Root O=UniTrust -# Subject: CN=UCA Global G2 Root O=UniTrust -# Label: "UCA Global G2 Root" -# Serial: 124779693093741543919145257850076631279 -# MD5 Fingerprint: 80:fe:f0:c4:4a:f0:5c:62:32:9f:1c:ba:78:a9:50:f8 -# SHA1 Fingerprint: 28:f9:78:16:19:7a:ff:18:25:18:aa:44:fe:c1:a0:ce:5c:b6:4c:8a -# SHA256 Fingerprint: 9b:ea:11:c9:76:fe:01:47:64:c1:be:56:a6:f9:14:b5:a5:60:31:7a:bd:99:88:39:33:82:e5:16:1a:a0:49:3c ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9 -MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH -bG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x -CzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds -b2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr -b3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9 -kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm -VHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R -VogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc -C/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj -tm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY -D0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv -j5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl -NaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6 -iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP -O6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/ -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV -ZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj -L3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 -1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl -1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU -b3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV -PtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj -y88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb -EGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg -DMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI -+Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy -YiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX -UB+K+wb1whnw0A== ------END CERTIFICATE----- - -# Issuer: CN=UCA Extended Validation Root O=UniTrust -# Subject: CN=UCA Extended Validation Root O=UniTrust -# Label: "UCA Extended Validation Root" -# Serial: 106100277556486529736699587978573607008 -# MD5 Fingerprint: a1:f3:5f:43:c6:34:9b:da:bf:8c:7e:05:53:ad:96:e2 -# SHA1 Fingerprint: a3:a1:b0:6f:24:61:23:4a:e3:36:a5:c2:37:fc:a6:ff:dd:f0:d7:3a -# SHA256 Fingerprint: d4:3a:f9:b3:54:73:75:5c:96:84:fc:06:d7:d8:cb:70:ee:5c:28:e7:73:fb:29:4e:b4:1e:e7:17:22:92:4d:24 ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH -MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF -eHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx -MDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV -BAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog -D4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS -sPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop -O2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk -sHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi -c0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj -VMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz -KuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/ -TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G -sx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs -1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD -fwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN -l8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR -ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ -VBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5 -c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp -4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s -t2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj -2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO -vpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C -xR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx -cmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM -fjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax ------END CERTIFICATE----- - -# Issuer: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 -# Subject: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 -# Label: "Certigna Root CA" -# Serial: 269714418870597844693661054334862075617 -# MD5 Fingerprint: 0e:5c:30:62:27:eb:5b:bc:d7:ae:62:ba:e9:d5:df:77 -# SHA1 Fingerprint: 2d:0d:52:14:ff:9e:ad:99:24:01:74:20:47:6e:6c:85:27:27:f5:43 -# SHA256 Fingerprint: d4:8d:3d:23:ee:db:50:a4:59:e5:51:97:60:1c:27:77:4b:9d:7b:18:c9:4d:5a:05:95:11:a1:02:50:b9:31:68 ------BEGIN CERTIFICATE----- -MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw -WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw -MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x -MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD -VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX -BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO -ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M -CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu -I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm -TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh -C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf -ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz -IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT -Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k -JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5 -hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB -GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of -1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov -L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo -dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr -aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq -hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L -6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG -HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6 -0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB -lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi -o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1 -gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v -faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63 -Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh -jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw -3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= ------END CERTIFICATE----- - -# Issuer: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI -# Subject: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI -# Label: "emSign Root CA - G1" -# Serial: 235931866688319308814040 -# MD5 Fingerprint: 9c:42:84:57:dd:cb:0b:a7:2e:95:ad:b6:f3:da:bc:ac -# SHA1 Fingerprint: 8a:c7:ad:8f:73:ac:4e:c1:b5:75:4d:a5:40:f4:fc:cf:7c:b5:8e:8c -# SHA256 Fingerprint: 40:f6:af:03:46:a9:9a:a1:cd:1d:55:5a:4e:9c:ce:62:c7:f9:63:46:03:ee:40:66:15:83:3d:c8:c8:d0:03:67 ------BEGIN CERTIFICATE----- -MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD -VQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU -ZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH -MTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO -MRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv -Z2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz -f2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO -8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq -d7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM -tTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt -Od9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB -o0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD -AgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x -PaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM -wiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d -GNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH -6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby -RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx -iN66zB+Afko= ------END CERTIFICATE----- - -# Issuer: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI -# Subject: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI -# Label: "emSign ECC Root CA - G3" -# Serial: 287880440101571086945156 -# MD5 Fingerprint: ce:0b:72:d1:9f:88:8e:d0:50:03:e8:e3:b8:8b:67:40 -# SHA1 Fingerprint: 30:43:fa:4f:f2:57:dc:a0:c3:80:ee:2e:58:ea:78:b2:3f:e6:bb:c1 -# SHA256 Fingerprint: 86:a1:ec:ba:08:9c:4a:8d:3b:be:27:34:c6:12:ba:34:1d:81:3e:04:3c:f9:e8:a8:62:cd:5c:57:a3:6b:be:6b ------BEGIN CERTIFICATE----- -MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG -EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo -bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g -RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ -TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s -b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw -djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0 -WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS -fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB -zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq -hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB -CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD -+JbNR6iC8hZVdyR+EhCVBCyj ------END CERTIFICATE----- - -# Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI -# Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI -# Label: "emSign Root CA - C1" -# Serial: 825510296613316004955058 -# MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68 -# SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01 -# SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f ------BEGIN CERTIFICATE----- -MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG -A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg -SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw -MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln -biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v -dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ -BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ -HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH -3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH -GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c -xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1 -aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq -TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87 -/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4 -kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG -YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT -+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo -WXzhriKi4gp6D/piq1JM4fHfyr6DDUI= ------END CERTIFICATE----- - -# Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI -# Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI -# Label: "emSign ECC Root CA - C3" -# Serial: 582948710642506000014504 -# MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5 -# SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66 -# SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3 ------BEGIN CERTIFICATE----- -MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG -EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx -IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw -MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln -biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND -IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci -MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti -sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O -BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB -Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c -3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J -0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== ------END CERTIFICATE----- - -# Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post -# Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post -# Label: "Hongkong Post Root CA 3" -# Serial: 46170865288971385588281144162979347873371282084 -# MD5 Fingerprint: 11:fc:9f:bd:73:30:02:8a:fd:3f:f3:58:b9:cb:20:f0 -# SHA1 Fingerprint: 58:a2:d0:ec:20:52:81:5b:c1:f3:f8:64:02:24:4e:c2:8e:02:4b:02 -# SHA256 Fingerprint: 5a:2f:c0:3f:0c:83:b0:90:bb:fa:40:60:4b:09:88:44:6c:76:36:18:3d:f9:84:6e:17:10:1a:44:7f:b8:ef:d6 ------BEGIN CERTIFICATE----- -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 -mpv0 ------END CERTIFICATE----- - -# Issuer: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation -# Subject: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation -# Label: "Microsoft ECC Root Certificate Authority 2017" -# Serial: 136839042543790627607696632466672567020 -# MD5 Fingerprint: dd:a1:03:e6:4a:93:10:d1:bf:f0:19:42:cb:fe:ed:67 -# SHA1 Fingerprint: 99:9a:64:c3:7f:f4:7d:9f:ab:95:f1:47:69:89:14:60:ee:c4:c3:c5 -# SHA256 Fingerprint: 35:8d:f3:9d:76:4a:f9:e1:b7:66:e9:c9:72:df:35:2e:e1:5c:fa:c2:27:af:6a:d1:d7:0e:8e:4a:6e:dc:ba:02 ------BEGIN CERTIFICATE----- -MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQsw -CQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYD -VQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIw -MTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4MjMxNjA0WjBlMQswCQYDVQQGEwJV -UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNy -b3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZR -ogPZnZH6thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYb -hGBKia/teQ87zvH2RPUBeMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBTIy5lycFIM+Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3 -FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlfXu5gKcs68tvWMoQZP3zV -L8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaReNtUjGUB -iudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= ------END CERTIFICATE----- - -# Issuer: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation -# Subject: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation -# Label: "Microsoft RSA Root Certificate Authority 2017" -# Serial: 40975477897264996090493496164228220339 -# MD5 Fingerprint: 10:ff:00:ff:cf:c9:f8:c7:7a:c0:ee:35:8e:c9:0f:47 -# SHA1 Fingerprint: 73:a5:e6:4a:3b:ff:83:16:ff:0e:dc:cc:61:8a:90:6e:4e:ae:4d:74 -# SHA256 Fingerprint: c7:41:f7:0f:4b:2a:8d:88:bf:2e:71:c1:41:22:ef:53:ef:10:eb:a0:cf:a5:e6:4c:fa:20:f4:18:85:30:73:e0 ------BEGIN CERTIFICATE----- -MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBl -MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw -NAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 -IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIwNzE4MjMwMDIzWjBlMQswCQYDVQQG -EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1N -aWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZ -Nt9GkMml7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0 -ZdDMbRnMlfl7rEqUrQ7eS0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1 -HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw71VdyvD/IybLeS2v4I2wDwAW9lcfNcztm -gGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+dkC0zVJhUXAoP8XFWvLJ -jEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49FyGcohJUc -aDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaG -YaRSMLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6 -W6IYZVcSn2i51BVrlMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4K -UGsTuqwPN1q3ErWQgR5WrlcihtnJ0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH -+FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJClTUFLkqqNfs+avNJVgyeY+Q -W5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZC -LgLNFgVZJ8og6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OC -gMNPOsduET/m4xaRhPtthH80dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6 -tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk+ONVFT24bcMKpBLBaYVu32TxU5nh -SnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex/2kskZGT4d9Mozd2 -TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDyAmH3 -pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGR -xpl/j8nWZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiApp -GWSZI1b7rCoucL5mxAyE7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9 -dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKTc0QWbej09+CVgI+WXTik9KveCjCHk9hN -AHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D5KbvtwEwXlGjefVwaaZB -RA+GsCyRxj3qrg+E ------END CERTIFICATE----- - -# Issuer: CN=e-Szigno Root CA 2017 O=Microsec Ltd. -# Subject: CN=e-Szigno Root CA 2017 O=Microsec Ltd. -# Label: "e-Szigno Root CA 2017" -# Serial: 411379200276854331539784714 -# MD5 Fingerprint: de:1f:f6:9e:84:ae:a7:b4:21:ce:1e:58:7d:d1:84:98 -# SHA1 Fingerprint: 89:d4:83:03:4f:9e:9a:48:80:5f:72:37:d4:a9:a6:ef:cb:7c:1f:d1 -# SHA256 Fingerprint: be:b0:0b:30:83:9b:9b:c3:2c:32:e4:44:79:05:95:06:41:f2:64:21:b1:5e:d0:89:19:8b:51:8a:e2:ea:1b:99 ------BEGIN CERTIFICATE----- -MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNV -BAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRk -LjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJv -b3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZaFw00MjA4MjIxMjA3MDZaMHExCzAJ -BgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMg -THRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25v -IFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtv -xie+RJCxs1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+H -Wyx7xf58etqjYzBhMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBSHERUI0arBeAyxr87GyZDvvzAEwDAfBgNVHSMEGDAWgBSHERUI0arB -eAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEAtVfd14pVCzbhhkT61Nlo -jbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxOsvxyqltZ -+efcMQ== ------END CERTIFICATE----- - -# Issuer: O=CERTSIGN SA OU=certSIGN ROOT CA G2 -# Subject: O=CERTSIGN SA OU=certSIGN ROOT CA G2 -# Label: "certSIGN Root CA G2" -# Serial: 313609486401300475190 -# MD5 Fingerprint: 8c:f1:75:8a:c6:19:cf:94:b7:f7:65:20:87:c3:97:c7 -# SHA1 Fingerprint: 26:f9:93:b4:ed:3d:28:27:b0:b9:4b:a7:e9:15:1d:a3:8d:92:e5:32 -# SHA256 Fingerprint: 65:7c:fe:2f:a7:3f:aa:38:46:25:71:f3:32:a2:36:3a:46:fc:e7:02:09:51:71:07:02:cd:fb:b6:ee:da:33:05 ------BEGIN CERTIFICATE----- -MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNV -BAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04g -Uk9PVCBDQSBHMjAeFw0xNzAyMDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJ -BgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJ -R04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDF -dRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05N0Iw -vlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZ -uIt4ImfkabBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhp -n+Sc8CnTXPnGFiWeI8MgwT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKs -cpc/I1mbySKEwQdPzH/iV8oScLumZfNpdWO9lfsbl83kqK/20U6o2YpxJM02PbyW -xPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91QqhngLjYl/rNUssuHLoPj1P -rCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732jcZZroiF -DsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fx -DTvf95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgy -LcsUDFDYg2WD7rlcz8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6C -eWRgKRM+o/1Pcmqr4tTluCRVLERLiohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSCIS1mxteg4BXrzkwJ -d8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOBywaK8SJJ6ejq -kX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC -b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQl -qiCA2ClV9+BB/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0 -OJD7uNGzcgbJceaBxXntC6Z58hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+c -NywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5BiKDUyUM/FHE5r7iOZULJK2v0ZXk -ltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklWatKcsWMy5WHgUyIO -pwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tUSxfj -03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZk -PuXaTH4MNMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE -1LlSVHJ7liXMvGnjSG4N0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MX -QRBdJ3NghVdJIgc= ------END CERTIFICATE----- - -# Issuer: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. -# Subject: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. -# Label: "Trustwave Global Certification Authority" -# Serial: 1846098327275375458322922162 -# MD5 Fingerprint: f8:1c:18:2d:2f:ba:5f:6d:a1:6c:bc:c7:ab:91:c7:0e -# SHA1 Fingerprint: 2f:8f:36:4f:e1:58:97:44:21:59:87:a5:2a:9a:d0:69:95:26:7f:b5 -# SHA256 Fingerprint: 97:55:20:15:f5:dd:fc:3c:87:88:c0:06:94:45:55:40:88:94:45:00:84:f1:00:86:70:86:bc:1a:2b:b5:8d:c8 ------BEGIN CERTIFICATE----- -MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQsw -CQYDVQQGEwJVUzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28x -ITAfBgNVBAoMGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1 -c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMx -OTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJVUzERMA8GA1UECAwI -SWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2ZSBI -b2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB -ALldUShLPDeS0YLOvR29zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0Xzn -swuvCAAJWX/NKSqIk4cXGIDtiLK0thAfLdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu -7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4BqstTnoApTAbqOl5F2brz8 -1Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9oWN0EACyW -80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotP -JqX+OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1l -RtzuzWniTY+HKE40Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfw -hI0Vcnyh78zyiGG69Gm7DIwLdVcEuE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10 -coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm+9jaJXLE9gCxInm943xZYkqc -BW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqjifLJS3tBEW1n -twiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1Ud -DwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W -0OhUKDtkLSGm+J1WE2pIPU/HPinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfe -uyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0HZJDmHvUqoai7PF35owgLEQzxPy0Q -lG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla4gt5kNdXElE1GYhB -aCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5RvbbE -sLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPT -MaCm/zjdzyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qe -qu5AvzSxnI9O4fKSTx+O856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxh -VicGaeVyQYHTtgGJoC86cnn+OjC/QezHYj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8 -h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu3R3y4G5OBVixwJAWKqQ9 -EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP29FpHOTK -yeC2nOnOcXHebD8WpHk= ------END CERTIFICATE----- - -# Issuer: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. -# Subject: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. -# Label: "Trustwave Global ECC P256 Certification Authority" -# Serial: 4151900041497450638097112925 -# MD5 Fingerprint: 5b:44:e3:8d:5d:36:86:26:e8:0d:05:d2:59:a7:83:54 -# SHA1 Fingerprint: b4:90:82:dd:45:0c:be:8b:5b:b1:66:d3:e2:a4:08:26:cd:ed:42:cf -# SHA256 Fingerprint: 94:5b:bc:82:5e:a5:54:f4:89:d1:fd:51:a7:3d:df:2e:a6:24:ac:70:19:a0:52:05:22:5c:22:a7:8c:cf:a8:b4 ------BEGIN CERTIFICATE----- -MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYD -VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf -BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 -YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x -NzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYDVQQGEwJVUzERMA8G -A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 -d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF -Q0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqG -SM49AwEHA0IABH77bOYj43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoN -FWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqmP62jQzBBMA8GA1UdEwEB/wQFMAMBAf8w -DwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt0UrrdaVKEJmzsaGLSvcw -CgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjzRM4q3wgh -DDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 ------END CERTIFICATE----- - -# Issuer: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. -# Subject: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. -# Label: "Trustwave Global ECC P384 Certification Authority" -# Serial: 2704997926503831671788816187 -# MD5 Fingerprint: ea:cf:60:c4:3b:b9:15:29:40:a1:97:ed:78:27:93:d6 -# SHA1 Fingerprint: e7:f3:a3:c8:cf:6f:c3:04:2e:6d:0e:67:32:c5:9e:68:95:0d:5e:d2 -# SHA256 Fingerprint: 55:90:38:59:c8:c0:c3:eb:b8:75:9e:ce:4e:25:57:22:5f:f5:75:8b:bd:38:eb:d4:82:76:60:1e:1b:d5:80:97 ------BEGIN CERTIFICATE----- -MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYD -VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf -BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 -YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x -NzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYDVQQGEwJVUzERMA8G -A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 -d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF -Q0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuB -BAAiA2IABGvaDXU1CDFHBa5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJ -j9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr/TklZvFe/oyujUF5nQlgziip04pt89ZF -1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0G -A1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNnADBkAjA3 -AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsC -MGclCrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVu -Sw== ------END CERTIFICATE----- - -# Issuer: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. -# Subject: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. -# Label: "NAVER Global Root Certification Authority" -# Serial: 9013692873798656336226253319739695165984492813 -# MD5 Fingerprint: c8:7e:41:f6:25:3b:f5:09:b3:17:e8:46:3d:bf:d0:9b -# SHA1 Fingerprint: 8f:6b:f2:a9:27:4a:da:14:a0:c4:f4:8e:61:27:f9:c0:1e:78:5d:d1 -# SHA256 Fingerprint: 88:f4:38:dc:f8:ff:d1:fa:8f:42:91:15:ff:e5:f8:2a:e1:e0:6e:0c:70:c3:75:fa:ad:71:7b:34:a4:9e:72:65 ------BEGIN CERTIFICATE----- -MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEM -BQAwaTELMAkGA1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRG -T1JNIENvcnAuMTIwMAYDVQQDDClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4NDJaFw0zNzA4MTgyMzU5NTlaMGkx -CzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVTUyBQTEFURk9STSBD -b3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVA -iQqrDZBbUGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH -38dq6SZeWYp34+hInDEW+j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lE -HoSTGEq0n+USZGnQJoViAbbJAh2+g1G7XNr4rRVqmfeSVPc0W+m/6imBEtRTkZaz -kVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2aacp+yPOiNgSnABIqKYP -szuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4Yb8Obtoq -vC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHf -nZ3zVHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaG -YQ5fG8Ir4ozVu53BA0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo -0es+nPxdGoMuK8u180SdOqcXYZaicdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3a -CJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejyYhbLgGvtPe31HzClrkvJE+2K -AQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNVHQ4EFgQU0p+I -36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB -Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoN -qo0hV4/GPnrK21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatj -cu3cvuzHV+YwIHHW1xDBE1UBjCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm -+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bxhYTeodoS76TiEJd6eN4MUZeoIUCL -hr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTgE34h5prCy8VCZLQe -lHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTHD8z7 -p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8 -piKCk5XQA76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLR -LBT/DShycpWbXgnbiUSYqqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX -5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oGI/hGoiLtk/bdmuYqh7GYVPEi92tF4+KO -dh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmgkpzNNIaRkPpkUZ3+/uul -9XXeifdy ------END CERTIFICATE----- - -# Issuer: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres -# Subject: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres -# Label: "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" -# Serial: 131542671362353147877283741781055151509 -# MD5 Fingerprint: 19:36:9c:52:03:2f:d2:d1:bb:23:cc:dd:1e:12:55:bb -# SHA1 Fingerprint: 62:ff:d9:9e:c0:65:0d:03:ce:75:93:d2:ed:3f:2d:32:c9:e3:e5:4a -# SHA256 Fingerprint: 55:41:53:b1:3d:2c:f9:dd:b7:53:bf:be:1a:4e:0a:e0:8d:0a:a4:18:70:58:fe:60:a2:b8:62:b2:e4:b8:7b:cb ------BEGIN CERTIFICATE----- -MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQsw -CQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgw -FgYDVQRhDA9WQVRFUy1RMjgyNjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1S -Q00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4MTIyMDA5MzczM1oXDTQzMTIyMDA5 -MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQtUkNNMQ4wDAYDVQQL -DAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNBQyBS -QUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LH -sbI6GA60XYyzZl2hNPk2LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oK -Um8BA06Oi6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqGSM49BAMDA2kAMGYCMQCu -SuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoDzBOQn5IC -MQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJy -v+c= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign Root R46 O=GlobalSign nv-sa -# Subject: CN=GlobalSign Root R46 O=GlobalSign nv-sa -# Label: "GlobalSign Root R46" -# Serial: 1552617688466950547958867513931858518042577 -# MD5 Fingerprint: c4:14:30:e4:fa:66:43:94:2a:6a:1b:24:5f:19:d0:ef -# SHA1 Fingerprint: 53:a2:b0:4b:ca:6b:d6:45:e6:39:8a:8e:c4:0d:d2:bf:77:c3:a2:90 -# SHA256 Fingerprint: 4f:a3:12:6d:8d:3a:11:d1:c4:85:5a:4f:80:7c:ba:d6:cf:91:9d:3a:5a:88:b0:3b:ea:2c:63:72:d9:3c:40:c9 ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUA -MEYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYD -VQQDExNHbG9iYWxTaWduIFJvb3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMy -MDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYt -c2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08EsCVeJ -OaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQG -vGIFAha/r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud -316HCkD7rRlr+/fKYIje2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo -0q3v84RLHIf8E6M6cqJaESvWJ3En7YEtbWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSE -y132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvjK8Cd+RTyG/FWaha/LIWF -zXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD412lPFzYE -+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCN -I/onccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzs -x2sZy/N78CsHpdlseVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqa -ByFrgY/bxFn63iLABJzjqls2k+g9vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC -4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEMBQADggIBAHx4 -7PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg -JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti -2kM3S+LGteWygxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIk -pnnpHs6i58FZFZ8d4kuaPp92CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRF -FRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZmOUdkLG5NrmJ7v2B0GbhWrJKsFjLt -rWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qqJZ4d16GLuc1CLgSk -ZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwyeqiv5 -u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP -4vkYxboznxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6 -N3ec592kD3ZDZopD8p/7DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3 -vouXsXgxT7PntgMTzlSdriVZzH81Xwj3QEUxeCp6 ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign Root E46 O=GlobalSign nv-sa -# Subject: CN=GlobalSign Root E46 O=GlobalSign nv-sa -# Label: "GlobalSign Root E46" -# Serial: 1552617690338932563915843282459653771421763 -# MD5 Fingerprint: b5:b8:66:ed:de:08:83:e3:c9:e2:01:34:06:ac:51:6f -# SHA1 Fingerprint: 39:b4:6c:d5:fe:80:06:eb:e2:2f:4a:bb:08:33:a0:af:db:b9:dd:84 -# SHA256 Fingerprint: cb:b9:c4:4d:84:b8:04:3e:10:50:ea:31:a6:9f:51:49:55:d7:bf:d2:e2:c6:b4:93:01:01:9a:d6:1d:9f:50:58 ------BEGIN CERTIFICATE----- -MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYx -CzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQD -ExNHbG9iYWxTaWduIFJvb3QgRTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAw -MDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2Ex -HDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkBjtjq -R+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGdd -yXqBPCCjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud -DgQWBBQxCpCPtsad0kRLgLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ -7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZkvLtoURMMA/cVi4RguYv/Uo7njLwcAjA8 -+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+CAezNIm8BZ/3Hobui3A= ------END CERTIFICATE----- - -# Issuer: CN=GLOBALTRUST 2020 O=e-commerce monitoring GmbH -# Subject: CN=GLOBALTRUST 2020 O=e-commerce monitoring GmbH -# Label: "GLOBALTRUST 2020" -# Serial: 109160994242082918454945253 -# MD5 Fingerprint: 8a:c7:6f:cb:6d:e3:cc:a2:f1:7c:83:fa:0e:78:d7:e8 -# SHA1 Fingerprint: d0:67:c1:13:51:01:0c:aa:d0:c7:6a:65:37:31:16:26:4f:53:71:a2 -# SHA256 Fingerprint: 9a:29:6a:51:82:d1:d4:51:a2:e3:7f:43:9b:74:da:af:a2:67:52:33:29:f9:0f:9a:0d:20:07:c3:34:e2:3c:9a ------BEGIN CERTIFICATE----- -MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkG -A1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkw -FwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYx -MDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9u -aXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMIICIjANBgkq -hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWiD59b -RatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9Z -YybNpyrOVPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3 -QWPKzv9pj2gOlTblzLmMCcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPw -yJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCmfecqQjuCgGOlYx8ZzHyyZqjC0203b+J+ -BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKAA1GqtH6qRNdDYfOiaxaJ -SaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9ORJitHHmkH -r96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj0 -4KlGDfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9Me -dKZssCz3AwyIDMvUclOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIw -q7ejMZdnrY8XD2zHc+0klGvIg5rQmjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2 -nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1UdIwQYMBaAFNwu -H9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA -VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJC -XtzoRlgHNQIw4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd -6IwPS3BD0IL/qMy/pJTAvoe9iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf -+I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS8cE54+X1+NZK3TTN+2/BT+MAi1bi -kvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2HcqtbepBEX4tdJP7 -wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxSvTOB -TI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6C -MUO+1918oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn -4rnvyOL2NSl6dPrFf4IFYqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+I -aFvowdlxfv1k7/9nR4hYJS8+hge9+6jlgqispdNpQ80xiEmEU5LAsTkbOYMBMMTy -qfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg== ------END CERTIFICATE----- - -# Issuer: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz -# Subject: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz -# Label: "ANF Secure Server Root CA" -# Serial: 996390341000653745 -# MD5 Fingerprint: 26:a6:44:5a:d9:af:4e:2f:b2:1d:b6:65:b0:4e:e8:96 -# SHA1 Fingerprint: 5b:6e:68:d0:cc:15:b6:a0:5f:1e:c1:5f:ae:02:fc:6b:2f:5d:6f:74 -# SHA256 Fingerprint: fb:8f:ec:75:91:69:b9:10:6b:1e:51:16:44:c6:18:c5:13:04:37:3f:6c:06:43:08:8d:8b:ef:fd:1b:99:75:99 ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Subject: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Label: "Certum EC-384 CA" -# Serial: 160250656287871593594747141429395092468 -# MD5 Fingerprint: b6:65:b3:96:60:97:12:a1:ec:4e:e1:3d:a3:c6:c9:f1 -# SHA1 Fingerprint: f3:3e:78:3c:ac:df:f4:a2:cc:ac:67:55:69:56:d7:e5:16:3c:e1:ed -# SHA256 Fingerprint: 6b:32:80:85:62:53:18:aa:50:d1:73:c9:8d:8b:da:09:d5:7e:27:41:3d:11:4c:f7:87:a0:f5:d0:6c:03:0c:f6 ------BEGIN CERTIFICATE----- -MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQsw -CQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScw -JQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMT -EENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2MDcyNDU0WhcNNDMwMzI2MDcyNDU0 -WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT -LkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAX -BgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATE -KI6rGFtqvm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7Tm -Fy8as10CW4kjPMIRBSqniBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68Kj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI0GZnQkdjrzife81r1HfS+8 -EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjADVS2m5hjEfO/J -UG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0QoSZ/6vn -nvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Root CA" -# Serial: 40870380103424195783807378461123655149 -# MD5 Fingerprint: 51:e1:c2:e7:fe:4c:84:af:59:0e:2f:f4:54:6f:ea:29 -# SHA1 Fingerprint: c8:83:44:c0:18:ae:9f:cc:f1:87:b7:8f:22:d1:c5:d7:45:84:ba:e5 -# SHA256 Fingerprint: fe:76:96:57:38:55:77:3e:37:a9:5e:7a:d4:d9:cc:96:c3:01:57:c1:5d:31:76:5b:a9:b1:57:04:e1:ae:78:fd ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique -# Subject: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique -# Label: "TunTrust Root CA" -# Serial: 108534058042236574382096126452369648152337120275 -# MD5 Fingerprint: 85:13:b9:90:5b:36:5c:b6:5e:b8:5a:f8:e0:31:57:b4 -# SHA1 Fingerprint: cf:e9:70:84:0f:e0:73:0f:9d:f6:0c:7f:2c:4b:ee:20:46:34:9c:bb -# SHA256 Fingerprint: 2e:44:10:2a:b5:8c:b8:54:19:45:1c:8e:19:d9:ac:f3:66:2c:af:bc:61:4b:6a:53:96:0a:30:f7:d0:e2:eb:41 ------BEGIN CERTIFICATE----- -MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQEL -BQAwYTELMAkGA1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUg -Q2VydGlmaWNhdGlvbiBFbGVjdHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJv -b3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQwNDI2MDg1NzU2WjBhMQswCQYDVQQG -EwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBDZXJ0aWZpY2F0aW9u -IEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZ -n56eY+hz2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd -2JQDoOw05TDENX37Jk0bbjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgF -VwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZ -GoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAdgjH8KcwAWJeRTIAAHDOF -li/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViWVSHbhlnU -r8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2 -eY8fTpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIb -MlEsPvLfe/ZdeikZjuXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISg -jwBUFfyRbVinljvrS5YnzWuioYasDXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB -7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwSVXAkPcvCFDVDXSdOvsC9qnyW -5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI04Y+oXNZtPdE -ITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0 -90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+z -xiD2BkewhpMl0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYu -QEkHDVneixCwSQXi/5E/S7fdAo74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4 -FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRYYdZ2vyJ/0Adqp2RT8JeNnYA/u8EH -22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJpadbGNjHh/PqAulxP -xOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65xxBzn -dFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5 -Xc0yGYuPjCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7b -nV2UqL1g52KAdoGDDIzMMEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQ -CvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9zZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZH -u/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3rAZ3r2OvEhJn7wAzMMujj -d9qDRIueVSjAi1jTkD5OGwDxFa2DK5o= ------END CERTIFICATE----- - -# Issuer: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Subject: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Label: "HARICA TLS RSA Root CA 2021" -# Serial: 76817823531813593706434026085292783742 -# MD5 Fingerprint: 65:47:9b:58:86:dd:2c:f0:fc:a2:84:1f:1e:96:c4:91 -# SHA1 Fingerprint: 02:2d:05:82:fa:88:ce:14:0c:06:79:de:7f:14:10:e9:45:d7:a5:6d -# SHA256 Fingerprint: d9:5d:0e:8e:da:79:52:5b:f9:be:b1:1b:14:d2:10:0d:32:94:98:5f:0c:62:d9:fa:bd:9c:d9:99:ec:cb:7b:1d ------BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBs -MQswCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0Eg -Um9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUzOFoXDTQ1MDIxMzEwNTUzN1owbDEL -MAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl -YXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNBIFJv -b3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569l -mwVnlskNJLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE -4VGC/6zStGndLuwRo0Xua2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uv -a9of08WRiFukiZLRgeaMOVig1mlDqa2YUlhu2wr7a89o+uOkXjpFc5gH6l8Cct4M -pbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K5FrZx40d/JiZ+yykgmvw -Kh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEvdmn8kN3b -LW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcY -AuUR0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqB -AGMUuTNe3QvboEUHGjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYq -E613TBoYm5EPWNgGVMWX+Ko/IIqmhaZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHr -W2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQCPxrvrNQKlr9qEgYRtaQQJKQ -CoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAU -X15QvWiWkKQUEapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3 -f5Z2EMVGpdAgS1D0NTsY9FVqQRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxaja -H6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxDQpSbIPDRzbLrLFPCU3hKTwSUQZqP -JzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcRj88YxeMn/ibvBZ3P -zzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5vZSt -jBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0 -/L5H9MG0qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pT -BGIBnfHAT+7hOtSLIBD6Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79 -aPib8qXPMThcFarmlwDB31qlpzmq6YR/PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YW -xw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnnkf3/W9b3raYvAwtt41dU -63ZTGI0RmLo= ------END CERTIFICATE----- - -# Issuer: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Subject: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Label: "HARICA TLS ECC Root CA 2021" -# Serial: 137515985548005187474074462014555733966 -# MD5 Fingerprint: ae:f7:4c:e5:66:35:d1:b7:9b:8c:22:93:74:d3:4b:b0 -# SHA1 Fingerprint: bc:b0:c1:9d:e9:98:92:70:19:38:57:e9:8d:a7:b4:5d:6e:ee:01:48 -# SHA256 Fingerprint: 3f:99:cc:47:4a:cf:ce:4d:fe:d5:87:94:66:5e:47:8d:15:47:73:9f:2e:78:0f:1b:b4:ca:9b:13:30:97:d4:01 ------BEGIN CERTIFICATE----- -MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQsw -CQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2Vh -cmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9v -dCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoXDTQ1MDIxMzExMDEwOVowbDELMAkG -A1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj -aCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJvb3Qg -Q0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7 -KKrxcm1lAEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9Y -STHMmE5gEYd103KUkE+bECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQD -AgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAircJRQO9gcS3ujwLEXQNw -SaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/QwCZ61IygN -nxS2PFOiTAZpffpskcYqSUXm7LcT4Tps ------END CERTIFICATE----- - -# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" -# Serial: 1977337328857672817 -# MD5 Fingerprint: 4e:6e:9b:54:4c:ca:b7:fa:48:e4:90:b1:15:4b:1c:a3 -# SHA1 Fingerprint: 0b:be:c2:27:22:49:cb:39:aa:db:35:5c:53:e3:8c:ae:78:ff:b6:fe -# SHA256 Fingerprint: 57:de:05:83:ef:d2:b2:6e:03:61:da:99:da:9d:f4:64:8d:ef:7e:e8:44:1c:3b:72:8a:fa:9b:cd:e0:f9:b2:6a ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UE -BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h -cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1 -MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg -Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 -thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM -cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG -L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i -NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h -X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b -m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy -Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja -EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T -KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF -6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh -OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMB0GA1UdDgQWBBRlzeurNR4APn7VdMAc -tHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4wgZswgZgGBFUd -IAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j -b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABC -AG8AbgBhAG4AbwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAw -ADEANzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9m -iWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL4QjbEwj4KKE1soCzC1HA01aajTNF -Sa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDbLIpgD7dvlAceHabJ -hfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1ilI45P -Vf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZE -EAEeiGaPcjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV -1aUsIC+nmCjuRfzxuIgALI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2t -CsvMo2ebKHTEm9caPARYpoKdrcd7b/+Alun4jWq9GJAd/0kakFI3ky88Al2CdgtR -5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH9IBk9W6VULgRfhVwOEqw -f9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpfNIbnYrX9 -ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNK -GbqEZycPvEJdvSRUDewdcAZfpLz6IHxV ------END CERTIFICATE----- - -# Issuer: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. -# Subject: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. -# Label: "vTrus ECC Root CA" -# Serial: 630369271402956006249506845124680065938238527194 -# MD5 Fingerprint: de:4b:c1:f5:52:8c:9b:43:e1:3e:8f:55:54:17:8d:85 -# SHA1 Fingerprint: f6:9c:db:b0:fc:f6:02:13:b6:52:32:a6:a3:91:3f:16:70:da:c3:e1 -# SHA256 Fingerprint: 30:fb:ba:2c:32:23:8e:2a:98:54:7a:f9:79:31:e5:50:42:8b:9b:3f:1c:8e:eb:66:33:dc:fa:86:c5:b2:7d:d3 ------BEGIN CERTIFICATE----- -MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMw -RzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAY -BgNVBAMTEXZUcnVzIEVDQyBSb290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDcz -MTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28u -LEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYwEAYHKoZIzj0CAQYF -K4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+cToL0 -v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUd -e4BdS49nTPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIw -V53dVvHH4+m4SVBrm2nDb+zDfSXkV5UTQJtS0zvzQBm8JsctBp61ezaf9SXUY2sA -AjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQLYgmRWAD5Tfs0aNoJrSEG -GJTO ------END CERTIFICATE----- - -# Issuer: CN=vTrus Root CA O=iTrusChina Co.,Ltd. -# Subject: CN=vTrus Root CA O=iTrusChina Co.,Ltd. -# Label: "vTrus Root CA" -# Serial: 387574501246983434957692974888460947164905180485 -# MD5 Fingerprint: b8:c9:37:df:fa:6b:31:84:64:c5:ea:11:6a:1b:75:fc -# SHA1 Fingerprint: 84:1a:69:fb:f5:cd:1a:25:34:13:3d:e3:f8:fc:b8:99:d0:c9:14:b7 -# SHA256 Fingerprint: 8a:71:de:65:59:33:6f:42:6c:26:e5:38:80:d0:0d:88:a1:8d:a4:c6:a9:1f:0d:cb:61:94:e2:06:c5:c9:63:87 ------BEGIN CERTIFICATE----- -MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQEL -BQAwQzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4x -FjAUBgNVBAMTDXZUcnVzIFJvb3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMx -MDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoGA1UEChMTaVRydXNDaGluYSBDby4s -THRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZotsSKYc -IrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykU -AyyNJJrIZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+ -GrPSbcKvdmaVayqwlHeFXgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z9 -8Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KAYPxMvDVTAWqXcoKv8R1w6Jz1717CbMdH -flqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70kLJrxLT5ZOrpGgrIDajt -J8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2AXPKBlim -0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZN -pGvu/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQ -UqqzApVg+QxMaPnu1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHW -OXSuTEGC2/KmSNGzm/MzqvOmwMVO9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMB -AAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYgscasGrz2iTAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAKbqSSaet -8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd -nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1j -bhd47F18iMjrjld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvM -Kar5CKXiNxTKsbhm7xqC5PD48acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIiv -TDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJnxDHO2zTlJQNgJXtxmOTAGytfdELS -S8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554WgicEFOwE30z9J4nfr -I8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4sEb9 -b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNB -UvupLnKWnyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1P -Ti07NEPhmg4NpGaXutIcSkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929ven -sBxXVsFy6K2ir40zSbofitzmdHxghm+Hl3s= ------END CERTIFICATE----- - -# Issuer: CN=ISRG Root X2 O=Internet Security Research Group -# Subject: CN=ISRG Root X2 O=Internet Security Research Group -# Label: "ISRG Root X2" -# Serial: 87493402998870891108772069816698636114 -# MD5 Fingerprint: d3:9e:c4:1e:23:3c:a6:df:cf:a3:7e:6d:e0:14:e6:e5 -# SHA1 Fingerprint: bd:b1:b9:3c:d5:97:8d:45:c6:26:14:55:f8:db:95:c7:5a:d1:53:af -# SHA256 Fingerprint: 69:72:9b:8e:15:a8:6e:fc:17:7a:57:af:b7:17:1d:fc:64:ad:d2:8c:2f:ca:8c:f1:50:7e:34:45:3c:cb:14:70 ------BEGIN CERTIFICATE----- -MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw -CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg -R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00 -MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT -ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw -EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW -+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9 -ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI -zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW -tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1 -/q4AaOeMSQ+2b1tbFfLn ------END CERTIFICATE----- - -# Issuer: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. -# Subject: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. -# Label: "HiPKI Root CA - G1" -# Serial: 60966262342023497858655262305426234976 -# MD5 Fingerprint: 69:45:df:16:65:4b:e8:68:9a:8f:76:5f:ff:80:9e:d3 -# SHA1 Fingerprint: 6a:92:e4:a8:ee:1b:ec:96:45:37:e3:29:57:49:cd:96:e3:e5:d2:60 -# SHA256 Fingerprint: f0:15:ce:3c:c2:39:bf:ef:06:4b:e9:f1:d2:c4:17:e1:a0:26:4a:0a:94:be:1f:0c:8d:12:18:64:eb:69:49:cc ------BEGIN CERTIFICATE----- -MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBP -MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 -ZC4xGzAZBgNVBAMMEkhpUEtJIFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRa -Fw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3 -YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kgUm9vdCBDQSAtIEcx -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0o9Qw -qNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twv -Vcg3Px+kwJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6 -lZgRZq2XNdZ1AYDgr/SEYYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnz -Qs7ZngyzsHeXZJzA9KMuH5UHsBffMNsAGJZMoYFL3QRtU6M9/Aes1MU3guvklQgZ -KILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfdhSi8MEyr48KxRURHH+CK -FgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj1jOXTyFj -HluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDr -y+K49a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ -/W3c1pzAtH2lsN0/Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgM -a/aOEmem8rJY5AIJEzypuxC00jBF8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6 -fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQDAgGGMA0GCSqG -SIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi -7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqc -SE5XCV0vrPSltJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6Fza -ZsT0pPBWGTMpWmWSBUdGSquEwx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9Tc -XzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07QJNBAsNB1CI69aO4I1258EHBGG3zg -iLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv5wiZqAxeJoBF1Pho -L5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+GpzjLrF -Ne85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wr -kkVbbiVghUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+ -vhV4nYWBSipX3tUZQ9rbyltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQU -YDksswBVLuT1sw5XxJFBAJw/6KXf6vb/yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Label: "GlobalSign ECC Root CA - R4" -# Serial: 159662223612894884239637590694 -# MD5 Fingerprint: 26:29:f8:6d:e1:88:bf:a2:65:7f:aa:c4:cd:0f:7f:fc -# SHA1 Fingerprint: 6b:a0:b0:98:e1:71:ef:5a:ad:fe:48:15:80:77:10:f4:bd:6f:0b:28 -# SHA256 Fingerprint: b0:85:d7:0b:96:4f:19:1a:73:e4:af:0d:54:ae:7a:0e:07:aa:fd:af:9b:71:dd:08:62:13:8a:b7:32:5a:24:a2 ------BEGIN CERTIFICATE----- -MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYD -VQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2Jh -bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgw -MTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0g -UjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wWTAT -BgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkWymOx -uYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNV -HQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/ -+wpu+74zyTyjhNUwCgYIKoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147 -bmF0774BxL4YSFlhgjICICadVGNA3jdgUM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R1 O=Google Trust Services LLC -# Subject: CN=GTS Root R1 O=Google Trust Services LLC -# Label: "GTS Root R1" -# Serial: 159662320309726417404178440727 -# MD5 Fingerprint: 05:fe:d0:bf:71:a8:a3:76:63:da:01:e0:d8:52:dc:40 -# SHA1 Fingerprint: e5:8c:1c:c4:91:3b:38:63:4b:e9:10:6e:e3:ad:8e:6b:9d:d9:81:4a -# SHA256 Fingerprint: d9:47:43:2a:bd:e7:b7:fa:90:fc:2e:6b:59:10:1b:12:80:e0:e1:c7:e4:e4:0f:a3:c6:88:7f:ff:57:a7:f4:cf ------BEGIN CERTIFICATE----- -MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQsw -CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU -MBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw -MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp -Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaMf/vo -27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7w -Cl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjw -TcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0Pfybl -qAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaH -szVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4Zor8 -Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUspzBmk -MiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92 -wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70p -aDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrN -VjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQID -AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBAJ+qQibb -C5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe -QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuy -h6f88/qBVRRiClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM4 -7HLwEXWdyzRSjeZ2axfG34arJ45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8J -ZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYciNuaCp+0KueIHoI17eko8cdLiA6Ef -MgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5meLMFrUKTX5hgUvYU/ -Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJFfbdT -6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ -0E6yove+7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm -2tIMPNuzjsmhDYAPexZ3FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bb -bP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3gm3c ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R2 O=Google Trust Services LLC -# Subject: CN=GTS Root R2 O=Google Trust Services LLC -# Label: "GTS Root R2" -# Serial: 159662449406622349769042896298 -# MD5 Fingerprint: 1e:39:c0:53:e6:1e:29:82:0b:ca:52:55:36:5d:57:dc -# SHA1 Fingerprint: 9a:44:49:76:32:db:de:fa:d0:bc:fb:5a:7b:17:bd:9e:56:09:24:94 -# SHA256 Fingerprint: 8d:25:cd:97:22:9d:bf:70:35:6b:da:4e:b3:cc:73:40:31:e2:4c:f0:0f:af:cf:d3:2d:c7:6e:b5:84:1c:7e:a8 ------BEGIN CERTIFICATE----- -MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQsw -CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU -MBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw -MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp -Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3LvCvpt -nfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY -6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAu -MC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7k -RXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWg -f9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1mKPV -+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K8Yzo -dDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW -Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKa -G73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCq -gc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwID -AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBAB/Kzt3H -vqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8 -0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyC -B19m3H0Q/gxhswWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2u -NmSRXbBoGOqKYcl3qJfEycel/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMg -yALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVnjWQye+mew4K6Ki3pHrTgSAai/Gev -HyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y59PYjJbigapordwj6 -xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M7YNR -TOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924Sg -JPFI/2R80L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV -7LXTWtiBmelDGDfrs7vRWGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl -6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjWHYbL ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R3 O=Google Trust Services LLC -# Subject: CN=GTS Root R3 O=Google Trust Services LLC -# Label: "GTS Root R3" -# Serial: 159662495401136852707857743206 -# MD5 Fingerprint: 3e:e7:9d:58:02:94:46:51:94:e5:e0:22:4a:8b:e7:73 -# SHA1 Fingerprint: ed:e5:71:80:2b:c8:92:b9:5b:83:3c:d2:32:68:3f:09:cd:a0:1e:46 -# SHA256 Fingerprint: 34:d8:a7:3e:e2:08:d9:bc:db:0d:95:65:20:93:4b:4e:40:e6:94:82:59:6e:8b:6f:73:c8:42:6b:01:0a:6f:48 ------BEGIN CERTIFICATE----- -MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYD -VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG -A1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw -WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz -IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNi -AAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout736G -jOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL2 -4CejQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7 -VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azTL818+FsuVbu/3ZL3pAzcMeGiAjEA/Jdm -ZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV11RZt+cRLInUue4X ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R4 O=Google Trust Services LLC -# Subject: CN=GTS Root R4 O=Google Trust Services LLC -# Label: "GTS Root R4" -# Serial: 159662532700760215368942768210 -# MD5 Fingerprint: 43:96:83:77:19:4d:76:b3:9d:65:52:e4:1d:22:a5:e8 -# SHA1 Fingerprint: 77:d3:03:67:b5:e0:0c:15:f6:0c:38:61:df:7c:e1:3b:92:46:4d:47 -# SHA256 Fingerprint: 34:9d:fa:40:58:c5:e2:63:12:3b:39:8a:e7:95:57:3c:4e:13:13:c8:3f:e6:8f:93:55:6c:d5:e8:03:1b:3c:7d ------BEGIN CERTIFICATE----- -MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYD -VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG -A1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw -WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz -IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQAIgNi -AATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzuhXyi -QHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvR -HYqjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D -9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/Cr8deVl5c1RxYIigL9zC2L7F8AjEA8GE8 -p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh4rsUecrNIdSUtUlD ------END CERTIFICATE----- - -# Issuer: CN=Telia Root CA v2 O=Telia Finland Oyj -# Subject: CN=Telia Root CA v2 O=Telia Finland Oyj -# Label: "Telia Root CA v2" -# Serial: 7288924052977061235122729490515358 -# MD5 Fingerprint: 0e:8f:ac:aa:82:df:85:b1:f4:dc:10:1c:fc:99:d9:48 -# SHA1 Fingerprint: b9:99:cd:d1:73:50:8a:c4:47:05:08:9c:8c:88:fb:be:a0:2b:40:cd -# SHA256 Fingerprint: 24:2b:69:74:2f:cb:1e:5b:2a:bf:98:89:8b:94:57:21:87:54:4e:5b:4d:99:11:78:65:73:62:1f:6a:74:b8:2c ------BEGIN CERTIFICATE----- -MIIFdDCCA1ygAwIBAgIPAWdfJ9b+euPkrL4JWwWeMA0GCSqGSIb3DQEBCwUAMEQx -CzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UE -AwwQVGVsaWEgUm9vdCBDQSB2MjAeFw0xODExMjkxMTU1NTRaFw00MzExMjkxMTU1 -NTRaMEQxCzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZ -MBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2MjCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBALLQPwe84nvQa5n44ndp586dpAO8gm2h/oFlH0wnrI4AuhZ76zBq -AMCzdGh+sq/H1WKzej9Qyow2RCRj0jbpDIX2Q3bVTKFgcmfiKDOlyzG4OiIjNLh9 -vVYiQJ3q9HsDrWj8soFPmNB06o3lfc1jw6P23pLCWBnglrvFxKk9pXSW/q/5iaq9 -lRdU2HhE8Qx3FZLgmEKnpNaqIJLNwaCzlrI6hEKNfdWV5Nbb6WLEWLN5xYzTNTOD -n3WhUidhOPFZPY5Q4L15POdslv5e2QJltI5c0BE0312/UqeBAMN/mUWZFdUXyApT -7GPzmX3MaRKGwhfwAZ6/hLzRUssbkmbOpFPlob/E2wnW5olWK8jjfN7j/4nlNW4o -6GwLI1GpJQXrSPjdscr6bAhR77cYbETKJuFzxokGgeWKrLDiKca5JLNrRBH0pUPC -TEPlcDaMtjNXepUugqD0XBCzYYP2AgWGLnwtbNwDRm41k9V6lS/eINhbfpSQBGq6 -WT0EBXWdN6IOLj3rwaRSg/7Qa9RmjtzG6RJOHSpXqhC8fF6CfaamyfItufUXJ63R -DolUK5X6wK0dmBR4M0KGCqlztft0DbcbMBnEWg4cJ7faGND/isgFuvGqHKI3t+ZI -pEYslOqodmJHixBTB0hXbOKSTbauBcvcwUpej6w9GU7C7WB1K9vBykLVAgMBAAGj -YzBhMB8GA1UdIwQYMBaAFHKs5DN5qkWH9v2sHZ7Wxy+G2CQ5MB0GA1UdDgQWBBRy -rOQzeapFh/b9rB2e1scvhtgkOTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAoDtZpwmUPjaE0n4vOaWWl/oRrfxn83EJ -8rKJhGdEr7nv7ZbsnGTbMjBvZ5qsfl+yqwE2foH65IRe0qw24GtixX1LDoJt0nZi -0f6X+J8wfBj5tFJ3gh1229MdqfDBmgC9bXXYfef6xzijnHDoRnkDry5023X4blMM -A8iZGok1GTzTyVR8qPAs5m4HeW9q4ebqkYJpCh3DflminmtGFZhb069GHWLIzoBS -SRE/yQQSwxN8PzuKlts8oB4KtItUsiRnDe+Cy748fdHif64W1lZYudogsYMVoe+K -TTJvQS8TUoKU1xrBeKJR3Stwbbca+few4GeXVtt8YVMJAygCQMez2P2ccGrGKMOF -6eLtGpOg3kuYooQ+BXcBlj37tCAPnHICehIv1aO6UXivKitEZU61/Qrowc15h2Er -3oBXRb9n8ZuRXqWk7FlIEA04x7D6w0RtBPV4UBySllva9bguulvP5fBqnUsvWHMt -Ty3EHD70sz+rFQ47GUGKpMFXEmZxTPpT41frYpUJnlTd0cI8Vzy9OK2YZLe4A5pT -VmBds9hCG1xLEooc6+t9xnppxyd/pPiL8uSUZodL6ZQHCRJ5irLrdATczvREWeAW -ysUsWNc8e89ihmpQfTU2Zqf7N+cox9jQraVplI/owd8k+BsHMYeB2F326CjYSlKA -rBPuUBQemMc= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH -# Subject: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH -# Label: "D-TRUST BR Root CA 1 2020" -# Serial: 165870826978392376648679885835942448534 -# MD5 Fingerprint: b5:aa:4b:d5:ed:f7:e3:55:2e:8f:72:0a:f3:75:b8:ed -# SHA1 Fingerprint: 1f:5b:98:f0:e3:b5:f7:74:3c:ed:e6:b0:36:7d:32:cd:f4:09:41:67 -# SHA256 Fingerprint: e5:9a:aa:81:60:09:c2:2b:ff:5b:25:ba:d3:7d:f3:06:f0:49:79:7c:1f:81:d8:5a:b0:89:e6:57:bd:8f:00:44 ------BEGIN CERTIFICATE----- -MIIC2zCCAmCgAwIBAgIQfMmPK4TX3+oPyWWa00tNljAKBggqhkjOPQQDAzBIMQsw -CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS -VVNUIEJSIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTA5NDUwMFoXDTM1MDIxMTA5 -NDQ1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG -A1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB -BAAiA2IABMbLxyjR+4T1mu9CFCDhQ2tuda38KwOE1HaTJddZO0Flax7mNCq7dPYS -zuht56vkPE4/RAiLzRZxy7+SmfSk1zxQVFKQhYN4lGdnoxwJGT11NIXe7WB9xwy0 -QVK5buXuQqOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHOREKv/ -VbNafAkl1bK6CKBrqx9tMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g -PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2JyX3Jvb3Rf -Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l -dC9DTj1ELVRSVVNUJTIwQlIlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 -c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO -PQQDAwNpADBmAjEAlJAtE/rhY/hhY+ithXhUkZy4kzg+GkHaQBZTQgjKL47xPoFW -wKrY7RjEsK70PvomAjEA8yjixtsrmfu3Ubgko6SUeho/5jbiA1czijDLgsfWFBHV -dWNbFJWcHwHP2NVypw87 ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH -# Subject: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH -# Label: "D-TRUST EV Root CA 1 2020" -# Serial: 126288379621884218666039612629459926992 -# MD5 Fingerprint: 8c:2d:9d:70:9f:48:99:11:06:11:fb:e9:cb:30:c0:6e -# SHA1 Fingerprint: 61:db:8c:21:59:69:03:90:d8:7c:9c:12:86:54:cf:9d:3d:f4:dd:07 -# SHA256 Fingerprint: 08:17:0d:1a:a3:64:53:90:1a:2f:95:92:45:e3:47:db:0c:8d:37:ab:aa:bc:56:b8:1a:a1:00:dc:95:89:70:db ------BEGIN CERTIFICATE----- -MIIC2zCCAmCgAwIBAgIQXwJB13qHfEwDo6yWjfv/0DAKBggqhkjOPQQDAzBIMQsw -CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS -VVNUIEVWIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTEwMDAwMFoXDTM1MDIxMTA5 -NTk1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG -A1UEAxMZRC1UUlVTVCBFViBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB -BAAiA2IABPEL3YZDIBnfl4XoIkqbz52Yv7QFJsnL46bSj8WeeHsxiamJrSc8ZRCC -/N/DnU7wMyPE0jL1HLDfMxddxfCxivnvubcUyilKwg+pf3VlSSowZ/Rk99Yad9rD -wpdhQntJraOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFH8QARY3 -OqQo5FD4pPfsazK2/umLMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g -PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2V2X3Jvb3Rf -Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l -dC9DTj1ELVRSVVNUJTIwRVYlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 -c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO -PQQDAwNpADBmAjEAyjzGKnXCXnViOTYAYFqLwZOZzNnbQTs7h5kXO9XMT8oi96CA -y/m0sRtW9XLS/BnRAjEAkfcwkz8QRitxpNA7RJvAKQIFskF3UfN5Wp6OFKBOQtJb -gfM0agPnIjhQW+0ZT0MW ------END CERTIFICATE----- - -# Issuer: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. -# Subject: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. -# Label: "DigiCert TLS ECC P384 Root G5" -# Serial: 13129116028163249804115411775095713523 -# MD5 Fingerprint: d3:71:04:6a:43:1c:db:a6:59:e1:a8:a3:aa:c5:71:ed -# SHA1 Fingerprint: 17:f3:de:5e:9f:0f:19:e9:8e:f6:1f:32:26:6e:20:c4:07:ae:30:ee -# SHA256 Fingerprint: 01:8e:13:f0:77:25:32:cf:80:9b:d1:b1:72:81:86:72:83:fc:48:c6:e1:3b:e9:c6:98:12:85:4a:49:0c:1b:05 ------BEGIN CERTIFICATE----- -MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURp -Z2lDZXJ0IFRMUyBFQ0MgUDM4NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2 -MDExNDIzNTk1OVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJ -bmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBUTFMgRUNDIFAzODQgUm9vdCBHNTB2MBAG -ByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOCNQfN0MsYndLxf3c1TzvdlHJS -7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cKPGEQQil8pQgO4CLp -0zVozptjn4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7nLFr6ICIS -B4CIfBFqMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49 -BAMDA2gAMGUCMQCJao1H5+z8blUD2WdsJk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQ -LgGheQaRnUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIxAJSdYsiJvRmEFOml+wG4 -DXZDjC5Ty3zfDBeWUA== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. -# Subject: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. -# Label: "DigiCert TLS RSA4096 Root G5" -# Serial: 11930366277458970227240571539258396554 -# MD5 Fingerprint: ac:fe:f7:34:96:a9:f2:b3:b4:12:4b:e4:27:41:6f:e1 -# SHA1 Fingerprint: a7:88:49:dc:5d:7c:75:8c:8c:de:39:98:56:b3:aa:d0:b2:a5:71:35 -# SHA256 Fingerprint: 37:1a:00:dc:05:33:b3:72:1a:7e:eb:40:e8:41:9e:70:79:9d:2b:0a:0f:2c:1d:80:69:31:65:f7:ce:c4:ad:75 ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCPm0eKj6ftpqMzeJ3nzPijANBgkqhkiG9w0BAQwFADBN -MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMT -HERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcN -NDYwMTE0MjM1OTU5WjBNMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQs -IEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz0PTJeRGd/fxmgefM1eS87IE+ -ajWOLrfn3q/5B03PMJ3qCQuZvWxX2hhKuHisOjmopkisLnLlvevxGs3npAOpPxG0 -2C+JFvuUAT27L/gTBaF4HI4o4EXgg/RZG5Wzrn4DReW+wkL+7vI8toUTmDKdFqgp -wgscONyfMXdcvyej/Cestyu9dJsXLfKB2l2w4SMXPohKEiPQ6s+d3gMXsUJKoBZM -pG2T6T867jp8nVid9E6P/DsjyG244gXazOvswzH016cpVIDPRFtMbzCe88zdH5RD -nU1/cHAN1DrRN/BsnZvAFJNY781BOHW8EwOVfH/jXOnVDdXifBBiqmvwPXbzP6Po -sMH976pXTayGpxi0KcEsDr9kvimM2AItzVwv8n/vFfQMFawKsPHTDU9qTXeXAaDx -Zre3zu/O7Oyldcqs4+Fj97ihBMi8ez9dLRYiVu1ISf6nL3kwJZu6ay0/nTvEF+cd -Lvvyz6b84xQslpghjLSR6Rlgg/IwKwZzUNWYOwbpx4oMYIwo+FKbbuH2TbsGJJvX -KyY//SovcfXWJL5/MZ4PbeiPT02jP/816t9JXkGPhvnxd3lLG7SjXi/7RgLQZhNe -XoVPzthwiHvOAbWWl9fNff2C+MIkwcoBOU+NosEUQB+cZtUMCUbW8tDRSHZWOkPL -tgoRObqME2wGtZ7P6wIDAQABo0IwQDAdBgNVHQ4EFgQUUTMc7TZArxfTJc1paPKv -TiM+s0EwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN -AQEMBQADggIBAGCmr1tfV9qJ20tQqcQjNSH/0GEwhJG3PxDPJY7Jv0Y02cEhJhxw -GXIeo8mH/qlDZJY6yFMECrZBu8RHANmfGBg7sg7zNOok992vIGCukihfNudd5N7H -PNtQOa27PShNlnx2xlv0wdsUpasZYgcYQF+Xkdycx6u1UQ3maVNVzDl92sURVXLF -O4uJ+DQtpBflF+aZfTCIITfNMBc9uPK8qHWgQ9w+iUuQrm0D4ByjoJYJu32jtyoQ -REtGBzRj7TG5BO6jm5qu5jF49OokYTurWGT/u4cnYiWB39yhL/btp/96j1EuMPik -AdKFOV8BmZZvWltwGUb+hmA+rYAQCd05JS9Yf7vSdPD3Rh9GOUrYU9DzLjtxpdRv -/PNn5AeP3SYZ4Y1b+qOTEZvpyDrDVWiakuFSdjjo4bq9+0/V77PnSIMx8IIh47a+ -p6tv75/fTM8BuGJqIz3nCU2AG3swpMPdB380vqQmsvZB6Akd4yCYqjdP//fx4ilw -MUc/dNAUFvohigLVigmUdy7yWSiLfFCSCmZ4OIN1xLVaqBHG5cGdZlXPU8Sv13WF -qUITVuwhd4GTWgzqltlJyqEI8pc7bZsEGCREjnwB8twl2F6GmrE52/WRMmrRpnCK -ovfepEWFJqgejF0pW8hL2JpqA15w8oVPbEtoL8pU9ozaMv7Da4M/OMZ+ ------END CERTIFICATE----- - -# Issuer: CN=Certainly Root R1 O=Certainly -# Subject: CN=Certainly Root R1 O=Certainly -# Label: "Certainly Root R1" -# Serial: 188833316161142517227353805653483829216 -# MD5 Fingerprint: 07:70:d4:3e:82:87:a0:fa:33:36:13:f4:fa:33:e7:12 -# SHA1 Fingerprint: a0:50:ee:0f:28:71:f4:27:b2:12:6d:6f:50:96:25:ba:cc:86:42:af -# SHA256 Fingerprint: 77:b8:2c:d8:64:4c:43:05:f7:ac:c5:cb:15:6b:45:67:50:04:03:3d:51:c6:0c:62:02:a8:e0:c3:34:67:d3:a0 ------BEGIN CERTIFICATE----- -MIIFRzCCAy+gAwIBAgIRAI4P+UuQcWhlM1T01EQ5t+AwDQYJKoZIhvcNAQELBQAw -PTELMAkGA1UEBhMCVVMxEjAQBgNVBAoTCUNlcnRhaW5seTEaMBgGA1UEAxMRQ2Vy -dGFpbmx5IFJvb3QgUjEwHhcNMjEwNDAxMDAwMDAwWhcNNDYwNDAxMDAwMDAwWjA9 -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0 -YWlubHkgUm9vdCBSMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANA2 -1B/q3avk0bbm+yLA3RMNansiExyXPGhjZjKcA7WNpIGD2ngwEc/csiu+kr+O5MQT -vqRoTNoCaBZ0vrLdBORrKt03H2As2/X3oXyVtwxwhi7xOu9S98zTm/mLvg7fMbed -aFySpvXl8wo0tf97ouSHocavFwDvA5HtqRxOcT3Si2yJ9HiG5mpJoM610rCrm/b0 -1C7jcvk2xusVtyWMOvwlDbMicyF0yEqWYZL1LwsYpfSt4u5BvQF5+paMjRcCMLT5 -r3gajLQ2EBAHBXDQ9DGQilHFhiZ5shGIXsXwClTNSaa/ApzSRKft43jvRl5tcdF5 -cBxGX1HpyTfcX35pe0HfNEXgO4T0oYoKNp43zGJS4YkNKPl6I7ENPT2a/Z2B7yyQ -wHtETrtJ4A5KVpK8y7XdeReJkd5hiXSSqOMyhb5OhaRLWcsrxXiOcVTQAjeZjOVJ -6uBUcqQRBi8LjMFbvrWhsFNunLhgkR9Za/kt9JQKl7XsxXYDVBtlUrpMklZRNaBA -2CnbrlJ2Oy0wQJuK0EJWtLeIAaSHO1OWzaMWj/Nmqhexx2DgwUMFDO6bW2BvBlyH -Wyf5QBGenDPBt+U1VwV/J84XIIwc/PH72jEpSe31C4SnT8H2TsIonPru4K8H+zMR -eiFPCyEQtkA6qyI6BJyLm4SGcprSp6XEtHWRqSsjAgMBAAGjQjBAMA4GA1UdDwEB -/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTgqj8ljZ9EXME66C6u -d0yEPmcM9DANBgkqhkiG9w0BAQsFAAOCAgEAuVevuBLaV4OPaAszHQNTVfSVcOQr -PbA56/qJYv331hgELyE03fFo8NWWWt7CgKPBjcZq91l3rhVkz1t5BXdm6ozTaw3d -8VkswTOlMIAVRQdFGjEitpIAq5lNOo93r6kiyi9jyhXWx8bwPWz8HA2YEGGeEaIi -1wrykXprOQ4vMMM2SZ/g6Q8CRFA3lFV96p/2O7qUpUzpvD5RtOjKkjZUbVwlKNrd -rRT90+7iIgXr0PK3aBLXWopBGsaSpVo7Y0VPv+E6dyIvXL9G+VoDhRNCX8reU9di -taY1BMJH/5n9hN9czulegChB8n3nHpDYT3Y+gjwN/KUD+nsa2UUeYNrEjvn8K8l7 -lcUq/6qJ34IxD3L/DCfXCh5WAFAeDJDBlrXYFIW7pw0WwfgHJBu6haEaBQmAupVj -yTrsJZ9/nbqkRxWbRHDxakvWOF5D8xh+UG7pWijmZeZ3Gzr9Hb4DJqPb1OG7fpYn -Kx3upPvaJVQTA945xsMfTZDsjxtK0hzthZU4UHlG1sGQUDGpXJpuHfUzVounmdLy -yCwzk5Iwx06MZTMQZBf9JBeW0Y3COmor6xOLRPIh80oat3df1+2IpHLlOR+Vnb5n -wXARPbv0+Em34yaXOp/SX3z7wJl8OSngex2/DaeP0ik0biQVy96QXr8axGbqwua6 -OV+KmalBWQewLK8= ------END CERTIFICATE----- - -# Issuer: CN=Certainly Root E1 O=Certainly -# Subject: CN=Certainly Root E1 O=Certainly -# Label: "Certainly Root E1" -# Serial: 8168531406727139161245376702891150584 -# MD5 Fingerprint: 0a:9e:ca:cd:3e:52:50:c6:36:f3:4b:a3:ed:a7:53:e9 -# SHA1 Fingerprint: f9:e1:6d:dc:01:89:cf:d5:82:45:63:3e:c5:37:7d:c2:eb:93:6f:2b -# SHA256 Fingerprint: b4:58:5f:22:e4:ac:75:6a:4e:86:12:a1:36:1c:5d:9d:03:1a:93:fd:84:fe:bb:77:8f:a3:06:8b:0f:c4:2d:c2 ------BEGIN CERTIFICATE----- -MIIB9zCCAX2gAwIBAgIQBiUzsUcDMydc+Y2aub/M+DAKBggqhkjOPQQDAzA9MQsw -CQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0YWlu -bHkgUm9vdCBFMTAeFw0yMTA0MDEwMDAwMDBaFw00NjA0MDEwMDAwMDBaMD0xCzAJ -BgNVBAYTAlVTMRIwEAYDVQQKEwlDZXJ0YWlubHkxGjAYBgNVBAMTEUNlcnRhaW5s -eSBSb290IEUxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE3m/4fxzf7flHh4axpMCK -+IKXgOqPyEpeKn2IaKcBYhSRJHpcnqMXfYqGITQYUBsQ3tA3SybHGWCA6TS9YBk2 -QNYphwk8kXr2vBMj3VlOBF7PyAIcGFPBMdjaIOlEjeR2o0IwQDAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ygYy2R17ikq6+2uI1g4 -hevIIgcwCgYIKoZIzj0EAwMDaAAwZQIxALGOWiDDshliTd6wT99u0nCK8Z9+aozm -ut6Dacpps6kFtZaSF4fC0urQe87YQVt8rgIwRt7qy12a7DLCZRawTDBcMPPaTnOG -BtjOiQRINzf43TNRnXCve1XYAS59BWQOhriR ------END CERTIFICATE----- - -# Issuer: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. -# Subject: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. -# Label: "Security Communication ECC RootCA1" -# Serial: 15446673492073852651 -# MD5 Fingerprint: 7e:43:b0:92:68:ec:05:43:4c:98:ab:5d:35:2e:7e:86 -# SHA1 Fingerprint: b8:0e:26:a9:bf:d2:b2:3b:c0:ef:46:c9:ba:c7:bb:f6:1d:0d:41:41 -# SHA256 Fingerprint: e7:4f:bd:a5:5b:d5:64:c4:73:a3:6b:44:1a:a7:99:c8:a6:8e:07:74:40:e8:28:8b:9f:a1:e5:0e:4b:ba:ca:11 ------BEGIN CERTIFICATE----- -MIICODCCAb6gAwIBAgIJANZdm7N4gS7rMAoGCCqGSM49BAMDMGExCzAJBgNVBAYT -AkpQMSUwIwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMSswKQYD -VQQDEyJTZWN1cml0eSBDb21tdW5pY2F0aW9uIEVDQyBSb290Q0ExMB4XDTE2MDYx -NjA1MTUyOFoXDTM4MDExODA1MTUyOFowYTELMAkGA1UEBhMCSlAxJTAjBgNVBAoT -HFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKzApBgNVBAMTIlNlY3VyaXR5 -IENvbW11bmljYXRpb24gRUNDIFJvb3RDQTEwdjAQBgcqhkjOPQIBBgUrgQQAIgNi -AASkpW9gAwPDvTH00xecK4R1rOX9PVdu12O/5gSJko6BnOPpR27KkBLIE+Cnnfdl -dB9sELLo5OnvbYUymUSxXv3MdhDYW72ixvnWQuRXdtyQwjWpS4g8EkdtXP9JTxpK -ULGjQjBAMB0GA1UdDgQWBBSGHOf+LaVKiwj+KBH6vqNm+GBZLzAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjAVXUI9/Lbu -9zuxNuie9sRGKEkz0FhDKmMpzE2xtHqiuQ04pV1IKv3LsnNdo4gIxwwCMQDAqy0O -be0YottT6SXbVQjgUMzfRGEWgqtJsLKB7HOHeLRMsmIbEvoWTSVLY70eN9k= ------END CERTIFICATE----- - -# Issuer: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY -# Subject: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY -# Label: "BJCA Global Root CA1" -# Serial: 113562791157148395269083148143378328608 -# MD5 Fingerprint: 42:32:99:76:43:33:36:24:35:07:82:9b:28:f9:d0:90 -# SHA1 Fingerprint: d5:ec:8d:7b:4c:ba:79:f4:e7:e8:cb:9d:6b:ae:77:83:10:03:21:6a -# SHA256 Fingerprint: f3:89:6f:88:fe:7c:0a:88:27:66:a7:fa:6a:d2:74:9f:b5:7a:7f:3e:98:fb:76:9c:1f:a7:b0:9c:2c:44:d5:ae ------BEGIN CERTIFICATE----- -MIIFdDCCA1ygAwIBAgIQVW9l47TZkGobCdFsPsBsIDANBgkqhkiG9w0BAQsFADBU -MQswCQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRI -T1JJVFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0ExMB4XDTE5MTIxOTAz -MTYxN1oXDTQ0MTIxMjAzMTYxN1owVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJF -SUpJTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2Jh -bCBSb290IENBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPFmCL3Z -xRVhy4QEQaVpN3cdwbB7+sN3SJATcmTRuHyQNZ0YeYjjlwE8R4HyDqKYDZ4/N+AZ -spDyRhySsTphzvq3Rp4Dhtczbu33RYx2N95ulpH3134rhxfVizXuhJFyV9xgw8O5 -58dnJCNPYwpj9mZ9S1WnP3hkSWkSl+BMDdMJoDIwOvqfwPKcxRIqLhy1BDPapDgR -at7GGPZHOiJBhyL8xIkoVNiMpTAK+BcWyqw3/XmnkRd4OJmtWO2y3syJfQOcs4ll -5+M7sSKGjwZteAf9kRJ/sGsciQ35uMt0WwfCyPQ10WRjeulumijWML3mG90Vr4Tq -nMfK9Q7q8l0ph49pczm+LiRvRSGsxdRpJQaDrXpIhRMsDQa4bHlW/KNnMoH1V6XK -V0Jp6VwkYe/iMBhORJhVb3rCk9gZtt58R4oRTklH2yiUAguUSiz5EtBP6DF+bHq/ -pj+bOT0CFqMYs2esWz8sgytnOYFcuX6U1WTdno9uruh8W7TXakdI136z1C2OVnZO -z2nxbkRs1CTqjSShGL+9V/6pmTW12xB3uD1IutbB5/EjPtffhZ0nPNRAvQoMvfXn -jSXWgXSHRtQpdaJCbPdzied9v3pKH9MiyRVVz99vfFXQpIsHETdfg6YmV6YBW37+ -WGgHqel62bno/1Afq8K0wM7o6v0PvY1NuLxxAgMBAAGjQjBAMB0GA1UdDgQWBBTF -7+3M2I0hxkjk49cULqcWk+WYATAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAUoKsITQfI/Ki2Pm4rzc2IInRNwPWaZ+4 -YRC6ojGYWUfo0Q0lHhVBDOAqVdVXUsv45Mdpox1NcQJeXyFFYEhcCY5JEMEE3Kli -awLwQ8hOnThJdMkycFRtwUf8jrQ2ntScvd0g1lPJGKm1Vrl2i5VnZu69mP6u775u -+2D2/VnGKhs/I0qUJDAnyIm860Qkmss9vk/Ves6OF8tiwdneHg56/0OGNFK8YT88 -X7vZdrRTvJez/opMEi4r89fO4aL/3Xtw+zuhTaRjAv04l5U/BXCga99igUOLtFkN -SoxUnMW7gZ/NfaXvCyUeOiDbHPwfmGcCCtRzRBPbUYQaVQNW4AB+dAb/OMRyHdOo -P2gxXdMJxy6MW2Pg6Nwe0uxhHvLe5e/2mXZgLR6UcnHGCyoyx5JO1UbXHfmpGQrI -+pXObSOYqgs4rZpWDW+N8TEAiMEXnM0ZNjX+VVOg4DwzX5Ze4jLp3zO7Bkqp2IRz -znfSxqxx4VyjHQy7Ct9f4qNx2No3WqB4K/TUfet27fJhcKVlmtOJNBir+3I+17Q9 -eVzYH6Eze9mCUAyTF6ps3MKCuwJXNq+YJyo5UOGwifUll35HaBC07HPKs5fRJNz2 -YqAo07WjuGS3iGJCz51TzZm+ZGiPTx4SSPfSKcOYKMryMguTjClPPGAyzQWWYezy -r/6zcCwupvI= ------END CERTIFICATE----- - -# Issuer: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY -# Subject: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY -# Label: "BJCA Global Root CA2" -# Serial: 58605626836079930195615843123109055211 -# MD5 Fingerprint: 5e:0a:f6:47:5f:a6:14:e8:11:01:95:3f:4d:01:eb:3c -# SHA1 Fingerprint: f4:27:86:eb:6e:b8:6d:88:31:67:02:fb:ba:66:a4:53:00:aa:7a:a6 -# SHA256 Fingerprint: 57:4d:f6:93:1e:27:80:39:66:7b:72:0a:fd:c1:60:0f:c2:7e:b6:6d:d3:09:29:79:fb:73:85:64:87:21:28:82 ------BEGIN CERTIFICATE----- -MIICJTCCAaugAwIBAgIQLBcIfWQqwP6FGFkGz7RK6zAKBggqhkjOPQQDAzBUMQsw -CQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRIT1JJ -VFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0EyMB4XDTE5MTIxOTAzMTgy -MVoXDTQ0MTIxMjAzMTgyMVowVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJFSUpJ -TkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2JhbCBS -b290IENBMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABJ3LgJGNU2e1uVCxA/jlSR9B -IgmwUVJY1is0j8USRhTFiy8shP8sbqjV8QnjAyEUxEM9fMEsxEtqSs3ph+B99iK+ -+kpRuDCK/eHeGBIK9ke35xe/J4rUQUyWPGCWwf0VHKNCMEAwHQYDVR0OBBYEFNJK -sVF/BvDRgh9Obl+rg/xI1LCRMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMAoGCCqGSM49BAMDA2gAMGUCMBq8W9f+qdJUDkpd0m2xQNz0Q9XSSpkZElaA -94M04TVOSG0ED1cxMDAtsaqdAzjbBgIxAMvMh1PLet8gUXOQwKhbYdDFUDn9hf7B -43j4ptZLvZuHjw/l1lOWqzzIQNph91Oj9w== ------END CERTIFICATE----- - -# Issuer: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited -# Subject: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited -# Label: "Sectigo Public Server Authentication Root E46" -# Serial: 88989738453351742415770396670917916916 -# MD5 Fingerprint: 28:23:f8:b2:98:5c:37:16:3b:3e:46:13:4e:b0:b3:01 -# SHA1 Fingerprint: ec:8a:39:6c:40:f0:2e:bc:42:75:d4:9f:ab:1c:1a:5b:67:be:d2:9a -# SHA256 Fingerprint: c9:0f:26:f0:fb:1b:40:18:b2:22:27:51:9b:5c:a2:b5:3e:2c:a5:b3:be:5c:f1:8e:fe:1b:ef:47:38:0c:53:83 ------BEGIN CERTIFICATE----- -MIICOjCCAcGgAwIBAgIQQvLM2htpN0RfFf51KBC49DAKBggqhkjOPQQDAzBfMQsw -CQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1T -ZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwHhcN -MjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEYMBYG -A1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1YmxpYyBT -ZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAR2+pmpbiDt+dd34wc7qNs9Xzjoq1WmVk/WSOrsfy2qw7LFeeyZYX8QeccC -WvkEN/U0NSt3zn8gj1KjAIns1aeibVvjS5KToID1AZTc8GgHHs3u/iVStSBDHBv+ -6xnOQ6OjQjBAMB0GA1UdDgQWBBTRItpMWfFLXyY4qp3W7usNw/upYTAOBgNVHQ8B -Af8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNnADBkAjAn7qRa -qCG76UeXlImldCBteU/IvZNeWBj7LRoAasm4PdCkT0RHlAFWovgzJQxC36oCMB3q -4S6ILuH5px0CMk7yn2xVdOOurvulGu7t0vzCAxHrRVxgED1cf5kDW21USAGKcw== ------END CERTIFICATE----- - -# Issuer: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited -# Subject: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited -# Label: "Sectigo Public Server Authentication Root R46" -# Serial: 156256931880233212765902055439220583700 -# MD5 Fingerprint: 32:10:09:52:00:d5:7e:6c:43:df:15:c0:b1:16:93:e5 -# SHA1 Fingerprint: ad:98:f9:f3:e4:7d:75:3b:65:d4:82:b3:a4:52:17:bb:6e:f5:e4:38 -# SHA256 Fingerprint: 7b:b6:47:a6:2a:ee:ac:88:bf:25:7a:a5:22:d0:1f:fe:a3:95:e0:ab:45:c7:3f:93:f6:56:54:ec:38:f2:5a:06 ------BEGIN CERTIFICATE----- -MIIFijCCA3KgAwIBAgIQdY39i658BwD6qSWn4cetFDANBgkqhkiG9w0BAQwFADBf -MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQD -Ey1TZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYw -HhcNMjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEY -MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1Ymxp -YyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCTvtU2UnXYASOgHEdCSe5jtrch/cSV1UgrJnwUUxDa -ef0rty2k1Cz66jLdScK5vQ9IPXtamFSvnl0xdE8H/FAh3aTPaE8bEmNtJZlMKpnz -SDBh+oF8HqcIStw+KxwfGExxqjWMrfhu6DtK2eWUAtaJhBOqbchPM8xQljeSM9xf -iOefVNlI8JhD1mb9nxc4Q8UBUQvX4yMPFF1bFOdLvt30yNoDN9HWOaEhUTCDsG3X -ME6WW5HwcCSrv0WBZEMNvSE6Lzzpng3LILVCJ8zab5vuZDCQOc2TZYEhMbUjUDM3 -IuM47fgxMMxF/mL50V0yeUKH32rMVhlATc6qu/m1dkmU8Sf4kaWD5QazYw6A3OAS -VYCmO2a0OYctyPDQ0RTp5A1NDvZdV3LFOxxHVp3i1fuBYYzMTYCQNFu31xR13NgE -SJ/AwSiItOkcyqex8Va3e0lMWeUgFaiEAin6OJRpmkkGj80feRQXEgyDet4fsZfu -+Zd4KKTIRJLpfSYFplhym3kT2BFfrsU4YjRosoYwjviQYZ4ybPUHNs2iTG7sijbt -8uaZFURww3y8nDnAtOFr94MlI1fZEoDlSfB1D++N6xybVCi0ITz8fAr/73trdf+L -HaAZBav6+CuBQug4urv7qv094PPK306Xlynt8xhW6aWWrL3DkJiy4Pmi1KZHQ3xt -zwIDAQABo0IwQDAdBgNVHQ4EFgQUVnNYZJX5khqwEioEYnmhQBWIIUkwDgYDVR0P -AQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAC9c -mTz8Bl6MlC5w6tIyMY208FHVvArzZJ8HXtXBc2hkeqK5Duj5XYUtqDdFqij0lgVQ -YKlJfp/imTYpE0RHap1VIDzYm/EDMrraQKFz6oOht0SmDpkBm+S8f74TlH7Kph52 -gDY9hAaLMyZlbcp+nv4fjFg4exqDsQ+8FxG75gbMY/qB8oFM2gsQa6H61SilzwZA -Fv97fRheORKkU55+MkIQpiGRqRxOF3yEvJ+M0ejf5lG5Nkc/kLnHvALcWxxPDkjB -JYOcCj+esQMzEhonrPcibCTRAUH4WAP+JWgiH5paPHxsnnVI84HxZmduTILA7rpX -DhjvLpr3Etiga+kFpaHpaPi8TD8SHkXoUsCjvxInebnMMTzD9joiFgOgyY9mpFui -TdaBJQbpdqQACj7LzTWb4OE4y2BThihCQRxEV+ioratF4yUQvNs+ZUH7G6aXD+u5 -dHn5HrwdVw1Hr8Mvn4dGp+smWg9WY7ViYG4A++MnESLn/pmPNPW56MORcr3Ywx65 -LvKRRFHQV80MNNVIIb/bE/FmJUNS0nAiNs2fxBx1IK1jcmMGDw4nztJqDby1ORrp -0XZ60Vzk50lJLVU3aPAaOpg+VBeHVOmmJ1CJeyAvP/+/oYtKR5j/K3tJPsMpRmAY -QqszKbrAKbkTidOIijlBO8n9pu0f9GBj39ItVQGL ------END CERTIFICATE----- - -# Issuer: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation -# Subject: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation -# Label: "SSL.com TLS RSA Root CA 2022" -# Serial: 148535279242832292258835760425842727825 -# MD5 Fingerprint: d8:4e:c6:59:30:d8:fe:a0:d6:7a:5a:2c:2c:69:78:da -# SHA1 Fingerprint: ec:2c:83:40:72:af:26:95:10:ff:0e:f2:03:ee:31:70:f6:78:9d:ca -# SHA256 Fingerprint: 8f:af:7d:2e:2c:b4:70:9b:b8:e0:b3:36:66:bf:75:a5:dd:45:b5:de:48:0f:8e:a8:d4:bf:e6:be:bc:17:f2:ed ------BEGIN CERTIFICATE----- -MIIFiTCCA3GgAwIBAgIQb77arXO9CEDii02+1PdbkTANBgkqhkiG9w0BAQsFADBO -MQswCQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQD -DBxTU0wuY29tIFRMUyBSU0EgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzQyMloX -DTQ2MDgxOTE2MzQyMVowTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jw -b3JhdGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgUlNBIFJvb3QgQ0EgMjAyMjCC -AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANCkCXJPQIgSYT41I57u9nTP -L3tYPc48DRAokC+X94xI2KDYJbFMsBFMF3NQ0CJKY7uB0ylu1bUJPiYYf7ISf5OY -t6/wNr/y7hienDtSxUcZXXTzZGbVXcdotL8bHAajvI9AI7YexoS9UcQbOcGV0ins -S657Lb85/bRi3pZ7QcacoOAGcvvwB5cJOYF0r/c0WRFXCsJbwST0MXMwgsadugL3 -PnxEX4MN8/HdIGkWCVDi1FW24IBydm5MR7d1VVm0U3TZlMZBrViKMWYPHqIbKUBO -L9975hYsLfy/7PO0+r4Y9ptJ1O4Fbtk085zx7AGL0SDGD6C1vBdOSHtRwvzpXGk3 -R2azaPgVKPC506QVzFpPulJwoxJF3ca6TvvC0PeoUidtbnm1jPx7jMEWTO6Af77w -dr5BUxIzrlo4QqvXDz5BjXYHMtWrifZOZ9mxQnUjbvPNQrL8VfVThxc7wDNY8VLS -+YCk8OjwO4s4zKTGkH8PnP2L0aPP2oOnaclQNtVcBdIKQXTbYxE3waWglksejBYS -d66UNHsef8JmAOSqg+qKkK3ONkRN0VHpvB/zagX9wHQfJRlAUW7qglFA35u5CCoG -AtUjHBPW6dvbxrB6y3snm/vg1UYk7RBLY0ulBY+6uB0rpvqR4pJSvezrZ5dtmi2f -gTIFZzL7SAg/2SW4BCUvAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j -BBgwFoAU+y437uOEeicuzRk1sTN8/9REQrkwHQYDVR0OBBYEFPsuN+7jhHonLs0Z -NbEzfP/UREK5MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAjYlt -hEUY8U+zoO9opMAdrDC8Z2awms22qyIZZtM7QbUQnRC6cm4pJCAcAZli05bg4vsM -QtfhWsSWTVTNj8pDU/0quOr4ZcoBwq1gaAafORpR2eCNJvkLTqVTJXojpBzOCBvf -R4iyrT7gJ4eLSYwfqUdYe5byiB0YrrPRpgqU+tvT5TgKa3kSM/tKWTcWQA673vWJ -DPFs0/dRa1419dvAJuoSc06pkZCmF8NsLzjUo3KUQyxi4U5cMj29TH0ZR6LDSeeW -P4+a0zvkEdiLA9z2tmBVGKaBUfPhqBVq6+AL8BQx1rmMRTqoENjwuSfr98t67wVy -lrXEj5ZzxOhWc5y8aVFjvO9nHEMaX3cZHxj4HCUp+UmZKbaSPaKDN7EgkaibMOlq -bLQjk2UEqxHzDh1TJElTHaE/nUiSEeJ9DU/1172iWD54nR4fK/4huxoTtrEoZP2w -AgDHbICivRZQIA9ygV/MlP+7mea6kMvq+cYMwq7FGc4zoWtcu358NFcXrfA/rs3q -r5nsLFR+jM4uElZI7xc7P0peYNLcdDa8pUNjyw9bowJWCZ4kLOGGgYz+qxcs+sji -Mho6/4UIyYOf8kpIEFR3N+2ivEC+5BB09+Rbu7nzifmPQdjH5FCQNYA+HLhNkNPU -98OwoX6EyneSMSy4kLGCenROmxMmtNVQZlR4rmA= ------END CERTIFICATE----- - -# Issuer: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation -# Subject: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation -# Label: "SSL.com TLS ECC Root CA 2022" -# Serial: 26605119622390491762507526719404364228 -# MD5 Fingerprint: 99:d7:5c:f1:51:36:cc:e9:ce:d9:19:2e:77:71:56:c5 -# SHA1 Fingerprint: 9f:5f:d9:1a:54:6d:f5:0c:71:f0:ee:7a:bd:17:49:98:84:73:e2:39 -# SHA256 Fingerprint: c3:2f:fd:9f:46:f9:36:d1:6c:36:73:99:09:59:43:4b:9a:d6:0a:af:bb:9e:7c:f3:36:54:f1:44:cc:1b:a1:43 ------BEGIN CERTIFICATE----- -MIICOjCCAcCgAwIBAgIQFAP1q/s3ixdAW+JDsqXRxDAKBggqhkjOPQQDAzBOMQsw -CQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQDDBxT -U0wuY29tIFRMUyBFQ0MgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzM0OFoXDTQ2 -MDgxOTE2MzM0N1owTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jwb3Jh -dGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgRUNDIFJvb3QgQ0EgMjAyMjB2MBAG -ByqGSM49AgEGBSuBBAAiA2IABEUpNXP6wrgjzhR9qLFNoFs27iosU8NgCTWyJGYm -acCzldZdkkAZDsalE3D07xJRKF3nzL35PIXBz5SQySvOkkJYWWf9lCcQZIxPBLFN -SeR7T5v15wj4A4j3p8OSSxlUgaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME -GDAWgBSJjy+j6CugFFR781a4Jl9nOAuc0DAdBgNVHQ4EFgQUiY8vo+groBRUe/NW -uCZfZzgLnNAwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2gAMGUCMFXjIlbp -15IkWE8elDIPDAI2wv2sdDJO4fscgIijzPvX6yv/N33w7deedWo1dlJF4AIxAMeN -b0Igj762TVntd00pxCAgRWSGOlDGxK0tk/UYfXLtqc/ErFc2KAhl3zx5Zn6g6g== ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos -# Subject: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos -# Label: "Atos TrustedRoot Root CA ECC TLS 2021" -# Serial: 81873346711060652204712539181482831616 -# MD5 Fingerprint: 16:9f:ad:f1:70:ad:79:d6:ed:29:b4:d1:c5:79:70:a8 -# SHA1 Fingerprint: 9e:bc:75:10:42:b3:02:f3:81:f4:f7:30:62:d4:8f:c3:a7:51:b2:dd -# SHA256 Fingerprint: b2:fa:e5:3e:14:cc:d7:ab:92:12:06:47:01:ae:27:9c:1d:89:88:fa:cb:77:5f:a8:a0:08:91:4e:66:39:88:a8 ------BEGIN CERTIFICATE----- -MIICFTCCAZugAwIBAgIQPZg7pmY9kGP3fiZXOATvADAKBggqhkjOPQQDAzBMMS4w -LAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgRUNDIFRMUyAyMDIxMQ0w -CwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTI2MjNaFw00MTA0 -MTcwOTI2MjJaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBDQSBF -Q0MgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMHYwEAYHKoZI -zj0CAQYFK4EEACIDYgAEloZYKDcKZ9Cg3iQZGeHkBQcfl+3oZIK59sRxUM6KDP/X -tXa7oWyTbIOiaG6l2b4siJVBzV3dscqDY4PMwL502eCdpO5KTlbgmClBk1IQ1SQ4 -AjJn8ZQSb+/Xxd4u/RmAo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR2 -KCXWfeBmmnoJsmo7jjPXNtNPojAOBgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMD -aAAwZQIwW5kp85wxtolrbNa9d+F851F+uDrNozZffPc8dz7kUK2o59JZDCaOMDtu -CCrCp1rIAjEAmeMM56PDr9NJLkaCI2ZdyQAUEv049OGYa3cpetskz2VAv9LcjBHo -9H1/IISpQuQo ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos -# Subject: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos -# Label: "Atos TrustedRoot Root CA RSA TLS 2021" -# Serial: 111436099570196163832749341232207667876 -# MD5 Fingerprint: d4:d3:46:b8:9a:c0:9c:76:5d:9e:3a:c3:b9:99:31:d2 -# SHA1 Fingerprint: 18:52:3b:0d:06:37:e4:d6:3a:df:23:e4:98:fb:5b:16:fb:86:74:48 -# SHA256 Fingerprint: 81:a9:08:8e:a5:9f:b3:64:c5:48:a6:f8:55:59:09:9b:6f:04:05:ef:bf:18:e5:32:4e:c9:f4:57:ba:00:11:2f ------BEGIN CERTIFICATE----- -MIIFZDCCA0ygAwIBAgIQU9XP5hmTC/srBRLYwiqipDANBgkqhkiG9w0BAQwFADBM -MS4wLAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgUlNBIFRMUyAyMDIx -MQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTIxMTBaFw00 -MTA0MTcwOTIxMDlaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBD -QSBSU0EgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtoAOxHm9BYx9sKOdTSJNy/BBl01Z -4NH+VoyX8te9j2y3I49f1cTYQcvyAh5x5en2XssIKl4w8i1mx4QbZFc4nXUtVsYv -Ye+W/CBGvevUez8/fEc4BKkbqlLfEzfTFRVOvV98r61jx3ncCHvVoOX3W3WsgFWZ -kmGbzSoXfduP9LVq6hdKZChmFSlsAvFr1bqjM9xaZ6cF4r9lthawEO3NUDPJcFDs -GY6wx/J0W2tExn2WuZgIWWbeKQGb9Cpt0xU6kGpn8bRrZtkh68rZYnxGEFzedUln -nkL5/nWpo63/dgpnQOPF943HhZpZnmKaau1Fh5hnstVKPNe0OwANwI8f4UDErmwh -3El+fsqyjW22v5MvoVw+j8rtgI5Y4dtXz4U2OLJxpAmMkokIiEjxQGMYsluMWuPD -0xeqqxmjLBvk1cbiZnrXghmmOxYsL3GHX0WelXOTwkKBIROW1527k2gV+p2kHYzy -geBYBr3JtuP2iV2J+axEoctr+hbxx1A9JNr3w+SH1VbxT5Aw+kUJWdo0zuATHAR8 -ANSbhqRAvNncTFd+rrcztl524WWLZt+NyteYr842mIycg5kDcPOvdO3GDjbnvezB -c6eUWsuSZIKmAMFwoW4sKeFYV+xafJlrJaSQOoD0IJ2azsct+bJLKZWD6TWNp0lI -pw9MGZHQ9b8Q4HECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU -dEmZ0f+0emhFdcN+tNzMzjkz2ggwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB -DAUAA4ICAQAjQ1MkYlxt/T7Cz1UAbMVWiLkO3TriJQ2VSpfKgInuKs1l+NsW4AmS -4BjHeJi78+xCUvuppILXTdiK/ORO/auQxDh1MoSf/7OwKwIzNsAQkG8dnK/haZPs -o0UvFJ/1TCplQ3IM98P4lYsU84UgYt1UU90s3BiVaU+DR3BAM1h3Egyi61IxHkzJ -qM7F78PRreBrAwA0JrRUITWXAdxfG/F851X6LWh3e9NpzNMOa7pNdkTWwhWaJuyw -xfW70Xp0wmzNxbVe9kzmWy2B27O3Opee7c9GslA9hGCZcbUztVdF5kJHdWoOsAgM -rr3e97sPWD2PAzHoPYJQyi9eDF20l74gNAf0xBLh7tew2VktafcxBPTy+av5EzH4 -AXcOPUIjJsyacmdRIXrMPIWo6iFqO9taPKU0nprALN+AnCng33eU0aKAQv9qTFsR -0PXNor6uzFFcw9VUewyu1rkGd4Di7wcaaMxZUa1+XGdrudviB0JbuAEFWDlN5LuY -o7Ey7Nmj1m+UI/87tyll5gfp77YZ6ufCOB0yiJA8EytuzO+rdwY0d4RPcuSBhPm5 -dDTedk+SKlOxJTnbPP/lPqYO5Wue/9vsL3SD3460s6neFE3/MaNFcyT6lSnMEpcE -oji2jbDwN/zIIX8/syQbPYtuzE2wFg2WHYMfRsCbvUOZ58SWLs5fyQ== ------END CERTIFICATE----- - -# Issuer: CN=TrustAsia Global Root CA G3 O=TrustAsia Technologies, Inc. -# Subject: CN=TrustAsia Global Root CA G3 O=TrustAsia Technologies, Inc. -# Label: "TrustAsia Global Root CA G3" -# Serial: 576386314500428537169965010905813481816650257167 -# MD5 Fingerprint: 30:42:1b:b7:bb:81:75:35:e4:16:4f:53:d2:94:de:04 -# SHA1 Fingerprint: 63:cf:b6:c1:27:2b:56:e4:88:8e:1c:23:9a:b6:2e:81:47:24:c3:c7 -# SHA256 Fingerprint: e0:d3:22:6a:eb:11:63:c2:e4:8f:f9:be:3b:50:b4:c6:43:1b:e7:bb:1e:ac:c5:c3:6b:5d:5e:c5:09:03:9a:08 ------BEGIN CERTIFICATE----- -MIIFpTCCA42gAwIBAgIUZPYOZXdhaqs7tOqFhLuxibhxkw8wDQYJKoZIhvcNAQEM -BQAwWjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dp -ZXMsIEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHMzAe -Fw0yMTA1MjAwMjEwMTlaFw00NjA1MTkwMjEwMTlaMFoxCzAJBgNVBAYTAkNOMSUw -IwYDVQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtU -cnVzdEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzMwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQDAMYJhkuSUGwoqZdC+BqmHO1ES6nBBruL7dOoKjbmzTNyPtxNS -T1QY4SxzlZHFZjtqz6xjbYdT8PfxObegQ2OwxANdV6nnRM7EoYNl9lA+sX4WuDqK -AtCWHwDNBSHvBm3dIZwZQ0WhxeiAysKtQGIXBsaqvPPW5vxQfmZCHzyLpnl5hkA1 -nyDvP+uLRx+PjsXUjrYsyUQE49RDdT/VP68czH5GX6zfZBCK70bwkPAPLfSIC7Ep -qq+FqklYqL9joDiR5rPmd2jE+SoZhLsO4fWvieylL1AgdB4SQXMeJNnKziyhWTXA -yB1GJ2Faj/lN03J5Zh6fFZAhLf3ti1ZwA0pJPn9pMRJpxx5cynoTi+jm9WAPzJMs -hH/x/Gr8m0ed262IPfN2dTPXS6TIi/n1Q1hPy8gDVI+lhXgEGvNz8teHHUGf59gX -zhqcD0r83ERoVGjiQTz+LISGNzzNPy+i2+f3VANfWdP3kXjHi3dqFuVJhZBFcnAv -kV34PmVACxmZySYgWmjBNb9Pp1Hx2BErW+Canig7CjoKH8GB5S7wprlppYiU5msT -f9FkPz2ccEblooV7WIQn3MSAPmeamseaMQ4w7OYXQJXZRe0Blqq/DPNL0WP3E1jA -uPP6Z92bfW1K/zJMtSU7/xxnD4UiWQWRkUF3gdCFTIcQcf+eQxuulXUtgQIDAQAB -o2MwYTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEDk5PIj7zjKsK5Xf/Ih -MBY027ySMB0GA1UdDgQWBBRA5OTyI+84yrCuV3/yITAWNNu8kjAOBgNVHQ8BAf8E -BAMCAQYwDQYJKoZIhvcNAQEMBQADggIBACY7UeFNOPMyGLS0XuFlXsSUT9SnYaP4 -wM8zAQLpw6o1D/GUE3d3NZ4tVlFEbuHGLige/9rsR82XRBf34EzC4Xx8MnpmyFq2 -XFNFV1pF1AWZLy4jVe5jaN/TG3inEpQGAHUNcoTpLrxaatXeL1nHo+zSh2bbt1S1 -JKv0Q3jbSwTEb93mPmY+KfJLaHEih6D4sTNjduMNhXJEIlU/HHzp/LgV6FL6qj6j -ITk1dImmasI5+njPtqzn59ZW/yOSLlALqbUHM/Q4X6RJpstlcHboCoWASzY9M/eV -VHUl2qzEc4Jl6VL1XP04lQJqaTDFHApXB64ipCz5xUG3uOyfT0gA+QEEVcys+TIx -xHWVBqB/0Y0n3bOppHKH/lmLmnp0Ft0WpWIp6zqW3IunaFnT63eROfjXy9mPX1on -AX1daBli2MjN9LdyR75bl87yraKZk62Uy5P2EgmVtqvXO9A/EcswFi55gORngS1d -7XB4tmBZrOFdRWOPyN9yaFvqHbgB8X7754qz41SgOAngPN5C8sLtLpvzHzW2Ntjj -gKGLzZlkD8Kqq7HK9W+eQ42EVJmzbsASZthwEPEGNTNDqJwuuhQxzhB/HIbjj9LV -+Hfsm6vxL2PZQl/gZ4FkkfGXL/xuJvYz+NO1+MRiqzFRJQJ6+N1rZdVtTTDIZbpo -FGWsJwt0ivKH ------END CERTIFICATE----- - -# Issuer: CN=TrustAsia Global Root CA G4 O=TrustAsia Technologies, Inc. -# Subject: CN=TrustAsia Global Root CA G4 O=TrustAsia Technologies, Inc. -# Label: "TrustAsia Global Root CA G4" -# Serial: 451799571007117016466790293371524403291602933463 -# MD5 Fingerprint: 54:dd:b2:d7:5f:d8:3e:ed:7c:e0:0b:2e:cc:ed:eb:eb -# SHA1 Fingerprint: 57:73:a5:61:5d:80:b2:e6:ac:38:82:fc:68:07:31:ac:9f:b5:92:5a -# SHA256 Fingerprint: be:4b:56:cb:50:56:c0:13:6a:52:6d:f4:44:50:8d:aa:36:a0:b5:4f:42:e4:ac:38:f7:2a:f4:70:e4:79:65:4c ------BEGIN CERTIFICATE----- -MIICVTCCAdygAwIBAgIUTyNkuI6XY57GU4HBdk7LKnQV1tcwCgYIKoZIzj0EAwMw -WjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs -IEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHNDAeFw0y -MTA1MjAwMjEwMjJaFw00NjA1MTkwMjEwMjJaMFoxCzAJBgNVBAYTAkNOMSUwIwYD -VQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtUcnVz -dEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATx -s8045CVD5d4ZCbuBeaIVXxVjAd7Cq92zphtnS4CDr5nLrBfbK5bKfFJV4hrhPVbw -LxYI+hW8m7tH5j/uqOFMjPXTNvk4XatwmkcN4oFBButJ+bAp3TPsUKV/eSm4IJij -YzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUpbtKl86zK3+kMd6Xg1mD -pm9xy94wHQYDVR0OBBYEFKW7SpfOsyt/pDHel4NZg6ZvccveMA4GA1UdDwEB/wQE -AwIBBjAKBggqhkjOPQQDAwNnADBkAjBe8usGzEkxn0AAbbd+NvBNEU/zy4k6LHiR -UKNbwMp1JvK/kF0LgoxgKJ/GcJpo5PECMFxYDlZ2z1jD1xCMuo6u47xkdUfFVZDj -/bpV6wfEU6s3qe4hsiFbYI89MvHVI5TWWA== ------END CERTIFICATE----- - -# Issuer: CN=CommScope Public Trust ECC Root-01 O=CommScope -# Subject: CN=CommScope Public Trust ECC Root-01 O=CommScope -# Label: "CommScope Public Trust ECC Root-01" -# Serial: 385011430473757362783587124273108818652468453534 -# MD5 Fingerprint: 3a:40:a7:fc:03:8c:9c:38:79:2f:3a:a2:6c:b6:0a:16 -# SHA1 Fingerprint: 07:86:c0:d8:dd:8e:c0:80:98:06:98:d0:58:7a:ef:de:a6:cc:a2:5d -# SHA256 Fingerprint: 11:43:7c:da:7b:b4:5e:41:36:5f:45:b3:9a:38:98:6b:0d:e0:0d:ef:34:8e:0c:7b:b0:87:36:33:80:0b:c3:8b ------BEGIN CERTIFICATE----- -MIICHTCCAaOgAwIBAgIUQ3CCd89NXTTxyq4yLzf39H91oJ4wCgYIKoZIzj0EAwMw -TjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29t -bVNjb3BlIFB1YmxpYyBUcnVzdCBFQ0MgUm9vdC0wMTAeFw0yMTA0MjgxNzM1NDNa -Fw00NjA0MjgxNzM1NDJaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21tU2Nv -cGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgRUNDIFJvb3QtMDEw -djAQBgcqhkjOPQIBBgUrgQQAIgNiAARLNumuV16ocNfQj3Rid8NeeqrltqLxeP0C -flfdkXmcbLlSiFS8LwS+uM32ENEp7LXQoMPwiXAZu1FlxUOcw5tjnSCDPgYLpkJE -hRGnSjot6dZoL0hOUysHP029uax3OVejQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSOB2LAUN3GGQYARnQE9/OufXVNMDAKBggq -hkjOPQQDAwNoADBlAjEAnDPfQeMjqEI2Jpc1XHvr20v4qotzVRVcrHgpD7oh2MSg -2NED3W3ROT3Ek2DS43KyAjB8xX6I01D1HiXo+k515liWpDVfG2XqYZpwI7UNo5uS -Um9poIyNStDuiw7LR47QjRE= ------END CERTIFICATE----- - -# Issuer: CN=CommScope Public Trust ECC Root-02 O=CommScope -# Subject: CN=CommScope Public Trust ECC Root-02 O=CommScope -# Label: "CommScope Public Trust ECC Root-02" -# Serial: 234015080301808452132356021271193974922492992893 -# MD5 Fingerprint: 59:b0:44:d5:65:4d:b8:5c:55:19:92:02:b6:d1:94:b2 -# SHA1 Fingerprint: 3c:3f:ef:57:0f:fe:65:93:86:9e:a0:fe:b0:f6:ed:8e:d1:13:c7:e5 -# SHA256 Fingerprint: 2f:fb:7f:81:3b:bb:b3:c8:9a:b4:e8:16:2d:0f:16:d7:15:09:a8:30:cc:9d:73:c2:62:e5:14:08:75:d1:ad:4a ------BEGIN CERTIFICATE----- -MIICHDCCAaOgAwIBAgIUKP2ZYEFHpgE6yhR7H+/5aAiDXX0wCgYIKoZIzj0EAwMw -TjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29t -bVNjb3BlIFB1YmxpYyBUcnVzdCBFQ0MgUm9vdC0wMjAeFw0yMTA0MjgxNzQ0NTRa -Fw00NjA0MjgxNzQ0NTNaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21tU2Nv -cGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgRUNDIFJvb3QtMDIw -djAQBgcqhkjOPQIBBgUrgQQAIgNiAAR4MIHoYx7l63FRD/cHB8o5mXxO1Q/MMDAL -j2aTPs+9xYa9+bG3tD60B8jzljHz7aRP+KNOjSkVWLjVb3/ubCK1sK9IRQq9qEmU -v4RDsNuESgMjGWdqb8FuvAY5N9GIIvejQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTmGHX/72DehKT1RsfeSlXjMjZ59TAKBggq -hkjOPQQDAwNnADBkAjAmc0l6tqvmSfR9Uj/UQQSugEODZXW5hYA4O9Zv5JOGq4/n -ich/m35rChJVYaoR4HkCMHfoMXGsPHED1oQmHhS48zs73u1Z/GtMMH9ZzkXpc2AV -mkzw5l4lIhVtwodZ0LKOag== ------END CERTIFICATE----- - -# Issuer: CN=CommScope Public Trust RSA Root-01 O=CommScope -# Subject: CN=CommScope Public Trust RSA Root-01 O=CommScope -# Label: "CommScope Public Trust RSA Root-01" -# Serial: 354030733275608256394402989253558293562031411421 -# MD5 Fingerprint: 0e:b4:15:bc:87:63:5d:5d:02:73:d4:26:38:68:73:d8 -# SHA1 Fingerprint: 6d:0a:5f:f7:b4:23:06:b4:85:b3:b7:97:64:fc:ac:75:f5:33:f2:93 -# SHA256 Fingerprint: 02:bd:f9:6e:2a:45:dd:9b:f1:8f:c7:e1:db:df:21:a0:37:9b:a3:c9:c2:61:03:44:cf:d8:d6:06:fe:c1:ed:81 ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIUPgNJgXUWdDGOTKvVxZAplsU5EN0wDQYJKoZIhvcNAQEL -BQAwTjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwi -Q29tbVNjb3BlIFB1YmxpYyBUcnVzdCBSU0EgUm9vdC0wMTAeFw0yMTA0MjgxNjQ1 -NTRaFw00NjA0MjgxNjQ1NTNaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21t -U2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgUlNBIFJvb3Qt -MDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwSGWjDR1C45FtnYSk -YZYSwu3D2iM0GXb26v1VWvZVAVMP8syMl0+5UMuzAURWlv2bKOx7dAvnQmtVzslh -suitQDy6uUEKBU8bJoWPQ7VAtYXR1HHcg0Hz9kXHgKKEUJdGzqAMxGBWBB0HW0al -DrJLpA6lfO741GIDuZNqihS4cPgugkY4Iw50x2tBt9Apo52AsH53k2NC+zSDO3Oj -WiE260f6GBfZumbCk6SP/F2krfxQapWsvCQz0b2If4b19bJzKo98rwjyGpg/qYFl -P8GMicWWMJoKz/TUyDTtnS+8jTiGU+6Xn6myY5QXjQ/cZip8UlF1y5mO6D1cv547 -KI2DAg+pn3LiLCuz3GaXAEDQpFSOm117RTYm1nJD68/A6g3czhLmfTifBSeolz7p -UcZsBSjBAg/pGG3svZwG1KdJ9FQFa2ww8esD1eo9anbCyxooSU1/ZOD6K9pzg4H/ -kQO9lLvkuI6cMmPNn7togbGEW682v3fuHX/3SZtS7NJ3Wn2RnU3COS3kuoL4b/JO -Hg9O5j9ZpSPcPYeoKFgo0fEbNttPxP/hjFtyjMcmAyejOQoBqsCyMWCDIqFPEgkB -Ea801M/XrmLTBQe0MXXgDW1XT2mH+VepuhX2yFJtocucH+X8eKg1mp9BFM6ltM6U -CBwJrVbl2rZJmkrqYxhTnCwuwwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUN12mmnQywsL5x6YVEFm45P3luG0wDQYJ -KoZIhvcNAQELBQADggIBAK+nz97/4L1CjU3lIpbfaOp9TSp90K09FlxD533Ahuh6 -NWPxzIHIxgvoLlI1pKZJkGNRrDSsBTtXAOnTYtPZKdVUvhwQkZyybf5Z/Xn36lbQ -nmhUQo8mUuJM3y+Xpi/SB5io82BdS5pYV4jvguX6r2yBS5KPQJqTRlnLX3gWsWc+ -QgvfKNmwrZggvkN80V4aCRckjXtdlemrwWCrWxhkgPut4AZ9HcpZuPN4KWfGVh2v -trV0KnahP/t1MJ+UXjulYPPLXAziDslg+MkfFoom3ecnf+slpoq9uC02EJqxWE2a -aE9gVOX2RhOOiKy8IUISrcZKiX2bwdgt6ZYD9KJ0DLwAHb/WNyVntHKLr4W96ioD -j8z7PEQkguIBpQtZtjSNMgsSDesnwv1B10A8ckYpwIzqug/xBpMu95yo9GA+o/E4 -Xo4TwbM6l4c/ksp4qRyv0LAbJh6+cOx69TOY6lz/KwsETkPdY34Op054A5U+1C0w -lREQKC6/oAI+/15Z0wUOlV9TRe9rh9VIzRamloPh37MG88EU26fsHItdkJANclHn -YfkUyq+Dj7+vsQpZXdxc1+SWrVtgHdqul7I52Qb1dgAT+GhMIbA1xNxVssnBQVoc -icCMb3SgazNNtQEo/a2tiRc7ppqEvOuM6sRxJKi6KfkIsidWNTJf6jn7MZrVGczw ------END CERTIFICATE----- - -# Issuer: CN=CommScope Public Trust RSA Root-02 O=CommScope -# Subject: CN=CommScope Public Trust RSA Root-02 O=CommScope -# Label: "CommScope Public Trust RSA Root-02" -# Serial: 480062499834624527752716769107743131258796508494 -# MD5 Fingerprint: e1:29:f9:62:7b:76:e2:96:6d:f3:d4:d7:0f:ae:1f:aa -# SHA1 Fingerprint: ea:b0:e2:52:1b:89:93:4c:11:68:f2:d8:9a:ac:22:4c:a3:8a:57:ae -# SHA256 Fingerprint: ff:e9:43:d7:93:42:4b:4f:7c:44:0c:1c:3d:64:8d:53:63:f3:4b:82:dc:87:aa:7a:9f:11:8f:c5:de:e1:01:f1 ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIUVBa/O345lXGN0aoApYYNK496BU4wDQYJKoZIhvcNAQEL -BQAwTjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwi -Q29tbVNjb3BlIFB1YmxpYyBUcnVzdCBSU0EgUm9vdC0wMjAeFw0yMTA0MjgxNzE2 -NDNaFw00NjA0MjgxNzE2NDJaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21t -U2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgUlNBIFJvb3Qt -MDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDh+g77aAASyE3VrCLE -NQE7xVTlWXZjpX/rwcRqmL0yjReA61260WI9JSMZNRTpf4mnG2I81lDnNJUDMrG0 -kyI9p+Kx7eZ7Ti6Hmw0zdQreqjXnfuU2mKKuJZ6VszKWpCtYHu8//mI0SFHRtI1C -rWDaSWqVcN3SAOLMV2MCe5bdSZdbkk6V0/nLKR8YSvgBKtJjCW4k6YnS5cciTNxz -hkcAqg2Ijq6FfUrpuzNPDlJwnZXjfG2WWy09X6GDRl224yW4fKcZgBzqZUPckXk2 -LHR88mcGyYnJ27/aaL8j7dxrrSiDeS/sOKUNNwFnJ5rpM9kzXzehxfCrPfp4sOcs -n/Y+n2Dg70jpkEUeBVF4GiwSLFworA2iI540jwXmojPOEXcT1A6kHkIfhs1w/tku -FT0du7jyU1fbzMZ0KZwYszZ1OC4PVKH4kh+Jlk+71O6d6Ts2QrUKOyrUZHk2EOH5 -kQMreyBUzQ0ZGshBMjTRsJnhkB4BQDa1t/qp5Xd1pCKBXbCL5CcSD1SIxtuFdOa3 -wNemKfrb3vOTlycEVS8KbzfFPROvCgCpLIscgSjX74Yxqa7ybrjKaixUR9gqiC6v -wQcQeKwRoi9C8DfF8rhW3Q5iLc4tVn5V8qdE9isy9COoR+jUKgF4z2rDN6ieZdIs -5fq6M8EGRPbmz6UNp2YINIos8wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUR9DnsSL/nSz12Vdgs7GxcJXvYXowDQYJ -KoZIhvcNAQELBQADggIBAIZpsU0v6Z9PIpNojuQhmaPORVMbc0RTAIFhzTHjCLqB -KCh6krm2qMhDnscTJk3C2OVVnJJdUNjCK9v+5qiXz1I6JMNlZFxHMaNlNRPDk7n3 -+VGXu6TwYofF1gbTl4MgqX67tiHCpQ2EAOHyJxCDut0DgdXdaMNmEMjRdrSzbyme -APnCKfWxkxlSaRosTKCL4BWaMS/TiJVZbuXEs1DIFAhKm4sTg7GkcrI7djNB3Nyq -pgdvHSQSn8h2vS/ZjvQs7rfSOBAkNlEv41xdgSGn2rtO/+YHqP65DSdsu3BaVXoT -6fEqSWnHX4dXTEN5bTpl6TBcQe7rd6VzEojov32u5cSoHw2OHG1QAk8mGEPej1WF -sQs3BWDJVTkSBKEqz3EWnzZRSb9wO55nnPt7eck5HHisd5FUmrh1CoFSl+NmYWvt -PjgelmFV4ZFUjO2MJB+ByRCac5krFk5yAD9UG/iNuovnFNa2RU9g7Jauwy8CTl2d -lklyALKrdVwPaFsdZcJfMw8eD/A7hvWwTruc9+olBdytoptLFwG+Qt81IR2tq670 -v64fG9PiO/yzcnMcmyiQiRM9HcEARwmWmjgb3bHPDcK0RPOWlc4yOo80nOAXx17O -rg3bhzjlP1v9mxnhMUF6cKojawHhRUzNlM47ni3niAIi9G7oyOzWPPO5std3eqx7 ------END CERTIFICATE----- - -# Issuer: CN=Telekom Security TLS ECC Root 2020 O=Deutsche Telekom Security GmbH -# Subject: CN=Telekom Security TLS ECC Root 2020 O=Deutsche Telekom Security GmbH -# Label: "Telekom Security TLS ECC Root 2020" -# Serial: 72082518505882327255703894282316633856 -# MD5 Fingerprint: c1:ab:fe:6a:10:2c:03:8d:bc:1c:22:32:c0:85:a7:fd -# SHA1 Fingerprint: c0:f8:96:c5:a9:3b:01:06:21:07:da:18:42:48:bc:e9:9d:88:d5:ec -# SHA256 Fingerprint: 57:8a:f4:de:d0:85:3f:4e:59:98:db:4a:ea:f9:cb:ea:8d:94:5f:60:b6:20:a3:8d:1a:3c:13:b2:bc:7b:a8:e1 ------BEGIN CERTIFICATE----- -MIICQjCCAcmgAwIBAgIQNjqWjMlcsljN0AFdxeVXADAKBggqhkjOPQQDAzBjMQsw -CQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0eSBH -bWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBFQ0MgUm9vdCAyMDIw -MB4XDTIwMDgyNTA3NDgyMFoXDTQ1MDgyNTIzNTk1OVowYzELMAkGA1UEBhMCREUx -JzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkGA1UE -AwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgRUNDIFJvb3QgMjAyMDB2MBAGByqGSM49 -AgEGBSuBBAAiA2IABM6//leov9Wq9xCazbzREaK9Z0LMkOsVGJDZos0MKiXrPk/O -tdKPD/M12kOLAoC+b1EkHQ9rK8qfwm9QMuU3ILYg/4gND21Ju9sGpIeQkpT0CdDP -f8iAC8GXs7s1J8nCG6NCMEAwHQYDVR0OBBYEFONyzG6VmUex5rNhTNHLq+O6zd6f -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cA -MGQCMHVSi7ekEE+uShCLsoRbQuHmKjYC2qBuGT8lv9pZMo7k+5Dck2TOrbRBR2Di -z6fLHgIwN0GMZt9Ba9aDAEH9L1r3ULRn0SyocddDypwnJJGDSA3PzfdUga/sf+Rn -27iQ7t0l ------END CERTIFICATE----- - -# Issuer: CN=Telekom Security TLS RSA Root 2023 O=Deutsche Telekom Security GmbH -# Subject: CN=Telekom Security TLS RSA Root 2023 O=Deutsche Telekom Security GmbH -# Label: "Telekom Security TLS RSA Root 2023" -# Serial: 44676229530606711399881795178081572759 -# MD5 Fingerprint: bf:5b:eb:54:40:cd:48:71:c4:20:8d:7d:de:0a:42:f2 -# SHA1 Fingerprint: 54:d3:ac:b3:bd:57:56:f6:85:9d:ce:e5:c3:21:e2:d4:ad:83:d0:93 -# SHA256 Fingerprint: ef:c6:5c:ad:bb:59:ad:b6:ef:e8:4d:a2:23:11:b3:56:24:b7:1b:3b:1e:a0:da:8b:66:55:17:4e:c8:97:86:46 ------BEGIN CERTIFICATE----- -MIIFszCCA5ugAwIBAgIQIZxULej27HF3+k7ow3BXlzANBgkqhkiG9w0BAQwFADBj -MQswCQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0 -eSBHbWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBSU0EgUm9vdCAy -MDIzMB4XDTIzMDMyODEyMTY0NVoXDTQ4MDMyNzIzNTk1OVowYzELMAkGA1UEBhMC -REUxJzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkG -A1UEAwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgUlNBIFJvb3QgMjAyMzCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAO01oYGA88tKaVvC+1GDrib94W7zgRJ9 -cUD/h3VCKSHtgVIs3xLBGYSJwb3FKNXVS2xE1kzbB5ZKVXrKNoIENqil/Cf2SfHV -cp6R+SPWcHu79ZvB7JPPGeplfohwoHP89v+1VmLhc2o0mD6CuKyVU/QBoCcHcqMA -U6DksquDOFczJZSfvkgdmOGjup5czQRxUX11eKvzWarE4GC+j4NSuHUaQTXtvPM6 -Y+mpFEXX5lLRbtLevOP1Czvm4MS9Q2QTps70mDdsipWol8hHD/BeEIvnHRz+sTug -BTNoBUGCwQMrAcjnj02r6LX2zWtEtefdi+zqJbQAIldNsLGyMcEWzv/9FIS3R/qy -8XDe24tsNlikfLMR0cN3f1+2JeANxdKz+bi4d9s3cXFH42AYTyS2dTd4uaNir73J -co4vzLuu2+QVUhkHM/tqty1LkCiCc/4YizWN26cEar7qwU02OxY2kTLvtkCJkUPg -8qKrBC7m8kwOFjQgrIfBLX7JZkcXFBGk8/ehJImr2BrIoVyxo/eMbcgByU/J7MT8 -rFEz0ciD0cmfHdRHNCk+y7AO+oMLKFjlKdw/fKifybYKu6boRhYPluV75Gp6SG12 -mAWl3G0eQh5C2hrgUve1g8Aae3g1LDj1H/1Joy7SWWO/gLCMk3PLNaaZlSJhZQNg -+y+TS/qanIA7AgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtqeX -gj10hZv3PJ+TmpV5dVKMbUcwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS2 -p5eCPXSFm/c8n5OalXl1UoxtRzANBgkqhkiG9w0BAQwFAAOCAgEAqMxhpr51nhVQ -pGv7qHBFfLp+sVr8WyP6Cnf4mHGCDG3gXkaqk/QeoMPhk9tLrbKmXauw1GLLXrtm -9S3ul0A8Yute1hTWjOKWi0FpkzXmuZlrYrShF2Y0pmtjxrlO8iLpWA1WQdH6DErw -M807u20hOq6OcrXDSvvpfeWxm4bu4uB9tPcy/SKE8YXJN3nptT+/XOR0so8RYgDd -GGah2XsjX/GO1WfoVNpbOms2b/mBsTNHM3dA+VKq3dSDz4V4mZqTuXNnQkYRIer+ -CqkbGmVps4+uFrb2S1ayLfmlyOw7YqPta9BO1UAJpB+Y1zqlklkg5LB9zVtzaL1t -xKITDmcZuI1CfmwMmm6gJC3VRRvcxAIU/oVbZZfKTpBQCHpCNfnqwmbU+AGuHrS+ -w6jv/naaoqYfRvaE7fzbzsQCzndILIyy7MMAo+wsVRjBfhnu4S/yrYObnqsZ38aK -L4x35bcF7DvB7L6Gs4a8wPfc5+pbrrLMtTWGS9DiP7bY+A4A7l3j941Y/8+LN+lj -X273CXE2whJdV/LItM3z7gLfEdxquVeEHVlNjM7IDiPCtyaaEBRx/pOyiriA8A4Q -ntOoUAw3gi/q4Iqd4Sw5/7W0cwDk90imc6y/st53BIe0o82bNSQ3+pCTE4FCxpgm -dTdmQRCsu/WU48IxK63nI1bMNSWSs1A= ------END CERTIFICATE----- - -# Issuer: CN=FIRMAPROFESIONAL CA ROOT-A WEB O=Firmaprofesional SA -# Subject: CN=FIRMAPROFESIONAL CA ROOT-A WEB O=Firmaprofesional SA -# Label: "FIRMAPROFESIONAL CA ROOT-A WEB" -# Serial: 65916896770016886708751106294915943533 -# MD5 Fingerprint: 82:b2:ad:45:00:82:b0:66:63:f8:5f:c3:67:4e:ce:a3 -# SHA1 Fingerprint: a8:31:11:74:a6:14:15:0d:ca:77:dd:0e:e4:0c:5d:58:fc:a0:72:a5 -# SHA256 Fingerprint: be:f2:56:da:f2:6e:9c:69:bd:ec:16:02:35:97:98:f3:ca:f7:18:21:a0:3e:01:82:57:c5:3c:65:61:7f:3d:4a ------BEGIN CERTIFICATE----- -MIICejCCAgCgAwIBAgIQMZch7a+JQn81QYehZ1ZMbTAKBggqhkjOPQQDAzBuMQsw -CQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UE -YQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENB -IFJPT1QtQSBXRUIwHhcNMjIwNDA2MDkwMTM2WhcNNDcwMzMxMDkwMTM2WjBuMQsw -CQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UE -YQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENB -IFJPT1QtQSBXRUIwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARHU+osEaR3xyrq89Zf -e9MEkVz6iMYiuYMQYneEMy3pA4jU4DP37XcsSmDq5G+tbbT4TIqk5B/K6k84Si6C -cyvHZpsKjECcfIr28jlgst7L7Ljkb+qbXbdTkBgyVcUgt5SjYzBhMA8GA1UdEwEB -/wQFMAMBAf8wHwYDVR0jBBgwFoAUk+FDY1w8ndYn81LsF7Kpryz3dvgwHQYDVR0O -BBYEFJPhQ2NcPJ3WJ/NS7Beyqa8s93b4MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjO -PQQDAwNoADBlAjAdfKR7w4l1M+E7qUW/Runpod3JIha3RxEL2Jq68cgLcFBTApFw -hVmpHqTm6iMxoAACMQD94vizrxa5HnPEluPBMBnYfubDl94cT7iJLzPrSA8Z94dG -XSaQpYXFuXqUPoeovQA= ------END CERTIFICATE----- - -# Issuer: CN=TWCA CYBER Root CA O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA CYBER Root CA O=TAIWAN-CA OU=Root CA -# Label: "TWCA CYBER Root CA" -# Serial: 85076849864375384482682434040119489222 -# MD5 Fingerprint: 0b:33:a0:97:52:95:d4:a9:fd:bb:db:6e:a3:55:5b:51 -# SHA1 Fingerprint: f6:b1:1c:1a:83:38:e9:7b:db:b3:a8:c8:33:24:e0:2d:9c:7f:26:66 -# SHA256 Fingerprint: 3f:63:bb:28:14:be:17:4e:c8:b6:43:9c:f0:8d:6d:56:f0:b7:c4:05:88:3a:56:48:a3:34:42:4d:6b:3e:c5:58 ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIQQAE0jMIAAAAAAAAAATzyxjANBgkqhkiG9w0BAQwFADBQ -MQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FOLUNBMRAwDgYDVQQLEwdSb290 -IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3QgQ0EwHhcNMjIxMTIyMDY1NDI5 -WhcNNDcxMTIyMTU1OTU5WjBQMQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FO -LUNBMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3Qg -Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDG+Moe2Qkgfh1sTs6P -40czRJzHyWmqOlt47nDSkvgEs1JSHWdyKKHfi12VCv7qze33Kc7wb3+szT3vsxxF -avcokPFhV8UMxKNQXd7UtcsZyoC5dc4pztKFIuwCY8xEMCDa6pFbVuYdHNWdZsc/ -34bKS1PE2Y2yHer43CdTo0fhYcx9tbD47nORxc5zb87uEB8aBs/pJ2DFTxnk684i -JkXXYJndzk834H/nY62wuFm40AZoNWDTNq5xQwTxaWV4fPMf88oon1oglWa0zbfu -j3ikRRjpJi+NmykosaS3Om251Bw4ckVYsV7r8Cibt4LK/c/WMw+f+5eesRycnupf -Xtuq3VTpMCEobY5583WSjCb+3MX2w7DfRFlDo7YDKPYIMKoNM+HvnKkHIuNZW0CP -2oi3aQiotyMuRAlZN1vH4xfyIutuOVLF3lSnmMlLIJXcRolftBL5hSmO68gnFSDA -S9TMfAxsNAwmmyYxpjyn9tnQS6Jk/zuZQXLB4HCX8SS7K8R0IrGsayIyJNN4KsDA -oS/xUgXJP+92ZuJF2A09rZXIx4kmyA+upwMu+8Ff+iDhcK2wZSA3M2Cw1a/XDBzC -kHDXShi8fgGwsOsVHkQGzaRP6AzRwyAQ4VRlnrZR0Bp2a0JaWHY06rc3Ga4udfmW -5cFZ95RXKSWNOkyrTZpB0F8mAwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBSdhWEUfMFib5do5E83QOGt4A1WNzAd -BgNVHQ4EFgQUnYVhFHzBYm+XaORPN0DhreANVjcwDQYJKoZIhvcNAQEMBQADggIB -AGSPesRiDrWIzLjHhg6hShbNcAu3p4ULs3a2D6f/CIsLJc+o1IN1KriWiLb73y0t -tGlTITVX1olNc79pj3CjYcya2x6a4CD4bLubIp1dhDGaLIrdaqHXKGnK/nZVekZn -68xDiBaiA9a5F/gZbG0jAn/xX9AKKSM70aoK7akXJlQKTcKlTfjF/biBzysseKNn -TKkHmvPfXvt89YnNdJdhEGoHK4Fa0o635yDRIG4kqIQnoVesqlVYL9zZyvpoBJ7t -RCT5dEA7IzOrg1oYJkK2bVS1FmAwbLGg+LhBoF1JSdJlBTrq/p1hvIbZv97Tujqx -f36SNI7JAG7cmL3c7IAFrQI932XtCwP39xaEBDG6k5TY8hL4iuO/Qq+n1M0RFxbI -Qh0UqEL20kCGoE8jypZFVmAGzbdVAaYBlGX+bgUJurSkquLvWL69J1bY73NxW0Qz -8ppy6rBePm6pUlvscG21h483XjyMnM7k8M4MZ0HMzvaAq07MTFb1wWFZk7Q+ptq4 -NxKfKjLji7gh7MMrZQzvIt6IKTtM1/r+t+FHvpw+PoP7UV31aPcuIYXcv/Fa4nzX -xeSDwWrruoBa3lwtcHb4yOWHh8qgnaHlIhInD0Q9HWzq1MKLL295q39QpsQZp6F6 -t5b5wR9iWqJDB0BeJsas7a5wFsWqynKKTbDPAYsDP27X ------END CERTIFICATE----- - -# Issuer: CN=SecureSign Root CA12 O=Cybertrust Japan Co., Ltd. -# Subject: CN=SecureSign Root CA12 O=Cybertrust Japan Co., Ltd. -# Label: "SecureSign Root CA12" -# Serial: 587887345431707215246142177076162061960426065942 -# MD5 Fingerprint: c6:89:ca:64:42:9b:62:08:49:0b:1e:7f:e9:07:3d:e8 -# SHA1 Fingerprint: 7a:22:1e:3d:de:1b:06:ac:9e:c8:47:70:16:8e:3c:e5:f7:6b:06:f4 -# SHA256 Fingerprint: 3f:03:4b:b5:70:4d:44:b2:d0:85:45:a0:20:57:de:93:eb:f3:90:5f:ce:72:1a:cb:c7:30:c0:6d:da:ee:90:4e ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUZvnHwa/swlG07VOX5uaCwysckBYwDQYJKoZIhvcNAQEL -BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u -LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExMjAeFw0yMDA0MDgw -NTM2NDZaFw00MDA0MDgwNTM2NDZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD -eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS -b290IENBMTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6OcE3emhF -KxS06+QT61d1I02PJC0W6K6OyX2kVzsqdiUzg2zqMoqUm048luT9Ub+ZyZN+v/mt -p7JIKwccJ/VMvHASd6SFVLX9kHrko+RRWAPNEHl57muTH2SOa2SroxPjcf59q5zd -J1M3s6oYwlkm7Fsf0uZlfO+TvdhYXAvA42VvPMfKWeP+bl+sg779XSVOKik71gur -FzJ4pOE+lEa+Ym6b3kaosRbnhW70CEBFEaCeVESE99g2zvVQR9wsMJvuwPWW0v4J -hscGWa5Pro4RmHvzC1KqYiaqId+OJTN5lxZJjfU+1UefNzFJM3IFTQy2VYzxV4+K -h9GtxRESOaCtAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBRXNPN0zwRL1SXm8UC2LEzZLemgrTANBgkqhkiG9w0BAQsF -AAOCAQEAPrvbFxbS8hQBICw4g0utvsqFepq2m2um4fylOqyttCg6r9cBg0krY6Ld -mmQOmFxv3Y67ilQiLUoT865AQ9tPkbeGGuwAtEGBpE/6aouIs3YIcipJQMPTw4WJ -mBClnW8Zt7vPemVV2zfrPIpyMpcemik+rY3moxtt9XUa5rBouVui7mlHJzWhhpmA -8zNL4WukJsPvdFlseqJkth5Ew1DgDzk9qTPxpfPSvWKErI4cqc1avTc7bgoitPQV -55FYxTpE05Uo2cBl6XLK0A+9H7MV2anjpEcJnuDLN/v9vZfVvhgaaaI5gdka9at/ -yOPiZwud9AzqVN/Ssq+xIvEg37xEHA== ------END CERTIFICATE----- - -# Issuer: CN=SecureSign Root CA14 O=Cybertrust Japan Co., Ltd. -# Subject: CN=SecureSign Root CA14 O=Cybertrust Japan Co., Ltd. -# Label: "SecureSign Root CA14" -# Serial: 575790784512929437950770173562378038616896959179 -# MD5 Fingerprint: 71:0d:72:fa:92:19:65:5e:89:04:ac:16:33:f0:bc:d5 -# SHA1 Fingerprint: dd:50:c0:f7:79:b3:64:2e:74:a2:b8:9d:9f:d3:40:dd:bb:f0:f2:4f -# SHA256 Fingerprint: 4b:00:9c:10:34:49:4f:9a:b5:6b:ba:3b:a1:d6:27:31:fc:4d:20:d8:95:5a:dc:ec:10:a9:25:60:72:61:e3:38 ------BEGIN CERTIFICATE----- -MIIFcjCCA1qgAwIBAgIUZNtaDCBO6Ncpd8hQJ6JaJ90t8sswDQYJKoZIhvcNAQEM -BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u -LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNDAeFw0yMDA0MDgw -NzA2MTlaFw00NTA0MDgwNzA2MTlaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD -eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS -b290IENBMTQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDF0nqh1oq/ -FjHQmNE6lPxauG4iwWL3pwon71D2LrGeaBLwbCRjOfHw3xDG3rdSINVSW0KZnvOg -vlIfX8xnbacuUKLBl422+JX1sLrcneC+y9/3OPJH9aaakpUqYllQC6KxNedlsmGy -6pJxaeQp8E+BgQQ8sqVb1MWoWWd7VRxJq3qdwudzTe/NCcLEVxLbAQ4jeQkHO6Lo -/IrPj8BGJJw4J+CDnRugv3gVEOuGTgpa/d/aLIJ+7sr2KeH6caH3iGicnPCNvg9J -kdjqOvn90Ghx2+m1K06Ckm9mH+Dw3EzsytHqunQG+bOEkJTRX45zGRBdAuVwpcAQ -0BB8b8VYSbSwbprafZX1zNoCr7gsfXmPvkPx+SgojQlD+Ajda8iLLCSxjVIHvXib -y8posqTdDEx5YMaZ0ZPxMBoH064iwurO8YQJzOAUbn8/ftKChazcqRZOhaBgy/ac -18izju3Gm5h1DVXoX+WViwKkrkMpKBGk5hIwAUt1ax5mnXkvpXYvHUC0bcl9eQjs -0Wq2XSqypWa9a4X0dFbD9ed1Uigspf9mR6XU/v6eVL9lfgHWMI+lNpyiUBzuOIAB -SMbHdPTGrMNASRZhdCyvjG817XsYAFs2PJxQDcqSMxDxJklt33UkN4Ii1+iW/RVL -ApY+B3KVfqs9TC7XyvDf4Fg/LS8EmjijAQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUBpOjCl4oaTeqYR3r6/wtbyPk -86AwDQYJKoZIhvcNAQEMBQADggIBAJaAcgkGfpzMkwQWu6A6jZJOtxEaCnFxEM0E -rX+lRVAQZk5KQaID2RFPeje5S+LGjzJmdSX7684/AykmjbgWHfYfM25I5uj4V7Ib -ed87hwriZLoAymzvftAj63iP/2SbNDefNWWipAA9EiOWWF3KY4fGoweITedpdopT -zfFP7ELyk+OZpDc8h7hi2/DsHzc/N19DzFGdtfCXwreFamgLRB7lUe6TzktuhsHS -DCRZNhqfLJGP4xjblJUK7ZGqDpncllPjYYPGFrojutzdfhrGe0K22VoF3Jpf1d+4 -2kd92jjbrDnVHmtsKheMYc2xbXIBw8MgAGJoFjHVdqqGuw6qnsb58Nn4DSEC5MUo -FlkRudlpcyqSeLiSV5sI8jrlL5WwWLdrIBRtFO8KvH7YVdiI2i/6GaX7i+B/OfVy -K4XELKzvGUWSTLNhB9xNH27SgRNcmvMSZ4PPmz+Ln52kuaiWA3rF7iDeM9ovnhp6 -dB7h7sxaOgTdsxoEqBRjrLdHEoOabPXm6RUVkRqEGQ6UROcSjiVbgGcZ3GOTEAtl -Lor6CZpO2oYofaphNdgOpygau1LgePhsumywbrmHXumZNTfxPWQrqaA0k89jL9WB -365jJ6UeTo3cKXhZ+PmhIIynJkBugnLNeLLIjzwec+fBH7/PzqUqm9tEZDKgu39c -JRNItX+S ------END CERTIFICATE----- - -# Issuer: CN=SecureSign Root CA15 O=Cybertrust Japan Co., Ltd. -# Subject: CN=SecureSign Root CA15 O=Cybertrust Japan Co., Ltd. -# Label: "SecureSign Root CA15" -# Serial: 126083514594751269499665114766174399806381178503 -# MD5 Fingerprint: 13:30:fc:c4:62:a6:a9:de:b5:c1:68:af:b5:d2:31:47 -# SHA1 Fingerprint: cb:ba:83:c8:c1:5a:5d:f1:f9:73:6f:ca:d7:ef:28:13:06:4a:07:7d -# SHA256 Fingerprint: e7:78:f0:f0:95:fe:84:37:29:cd:1a:00:82:17:9e:53:14:a9:c2:91:44:28:05:e1:fb:1d:8f:b6:b8:88:6c:3a ------BEGIN CERTIFICATE----- -MIICIzCCAamgAwIBAgIUFhXHw9hJp75pDIqI7fBw+d23PocwCgYIKoZIzj0EAwMw -UTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28uLCBM -dGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNTAeFw0yMDA0MDgwODMy -NTZaFw00NTA0MDgwODMyNTZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpDeWJl -cnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBSb290 -IENBMTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQLUHSNZDKZmbPSYAi4Io5GdCx4 -wCtELW1fHcmuS1Iggz24FG1Th2CeX2yF2wYUleDHKP+dX+Sq8bOLbe1PL0vJSpSR -ZHX+AezB2Ot6lHhWGENfa4HL9rzatAy2KZMIaY+jQjBAMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTrQciu/NWeUUj1vYv0hyCTQSvT -9DAKBggqhkjOPQQDAwNoADBlAjEA2S6Jfl5OpBEHvVnCB96rMjhTKkZEBhd6zlHp -4P9mLQlO4E/0BdGF9jVg3PVys0Z9AjBEmEYagoUeYWmJSwdLZrWeqrqgHkHZAXQ6 -bkU6iYAZezKYVWOr62Nuk22rGwlgMU4= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST BR Root CA 2 2023 O=D-Trust GmbH -# Subject: CN=D-TRUST BR Root CA 2 2023 O=D-Trust GmbH -# Label: "D-TRUST BR Root CA 2 2023" -# Serial: 153168538924886464690566649552453098598 -# MD5 Fingerprint: e1:09:ed:d3:60:d4:56:1b:47:1f:b7:0c:5f:1b:5f:85 -# SHA1 Fingerprint: 2d:b0:70:ee:71:94:af:69:68:17:db:79:ce:58:9f:a0:6b:96:f7:87 -# SHA256 Fingerprint: 05:52:e6:f8:3f:df:65:e8:fa:96:70:e6:66:df:28:a4:e2:13:40:b5:10:cb:e5:25:66:f9:7c:4f:b9:4b:2b:d1 ------BEGIN CERTIFICATE----- -MIIFqTCCA5GgAwIBAgIQczswBEhb2U14LnNLyaHcZjANBgkqhkiG9w0BAQ0FADBI -MQswCQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlE -LVRSVVNUIEJSIFJvb3QgQ0EgMiAyMDIzMB4XDTIzMDUwOTA4NTYzMVoXDTM4MDUw -OTA4NTYzMFowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEi -MCAGA1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDIgMjAyMzCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBAK7/CVmRgApKaOYkP7in5Mg6CjoWzckjYaCTcfKr -i3OPoGdlYNJUa2NRb0kz4HIHE304zQaSBylSa053bATTlfrdTIzZXcFhfUvnKLNE -gXtRr90zsWh81k5M/itoucpmacTsXld/9w3HnDY25QdgrMBM6ghs7wZ8T1soegj8 -k12b9py0i4a6Ibn08OhZWiihNIQaJZG2tY/vsvmA+vk9PBFy2OMvhnbFeSzBqZCT -Rphny4NqoFAjpzv2gTng7fC5v2Xx2Mt6++9zA84A9H3X4F07ZrjcjrqDy4d2A/wl -2ecjbwb9Z/Pg/4S8R7+1FhhGaRTMBffb00msa8yr5LULQyReS2tNZ9/WtT5PeB+U -cSTq3nD88ZP+npNa5JRal1QMNXtfbO4AHyTsA7oC9Xb0n9Sa7YUsOCIvx9gvdhFP -/Wxc6PWOJ4d/GUohR5AdeY0cW/jPSoXk7bNbjb7EZChdQcRurDhaTyN0dKkSw/bS -uREVMweR2Ds3OmMwBtHFIjYoYiMQ4EbMl6zWK11kJNXuHA7e+whadSr2Y23OC0K+ -0bpwHJwh5Q8xaRfX/Aq03u2AnMuStIv13lmiWAmlY0cL4UEyNEHZmrHZqLAbWt4N -DfTisl01gLmB1IRpkQLLddCNxbU9CZEJjxShFHR5PtbJFR2kWVki3PaKRT08EtY+ -XTIvAgMBAAGjgY4wgYswDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUZ5Dw1t61 -GNVGKX5cq/ieCLxklRAwDgYDVR0PAQH/BAQDAgEGMEkGA1UdHwRCMEAwPqA8oDqG -OGh0dHA6Ly9jcmwuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3RfYnJfcm9vdF9jYV8y -XzIwMjMuY3JsMA0GCSqGSIb3DQEBDQUAA4ICAQA097N3U9swFrktpSHxQCF16+tI -FoE9c+CeJyrrd6kTpGoKWloUMz1oH4Guaf2Mn2VsNELZLdB/eBaxOqwjMa1ef67n -riv6uvw8l5VAk1/DLQOj7aRvU9f6QA4w9QAgLABMjDu0ox+2v5Eyq6+SmNMW5tTR -VFxDWy6u71cqqLRvpO8NVhTaIasgdp4D/Ca4nj8+AybmTNudX0KEPUUDAxxZiMrc -LmEkWqTqJwtzEr5SswrPMhfiHocaFpVIbVrg0M8JkiZmkdijYQ6qgYF/6FKC0ULn -4B0Y+qSFNueG4A3rvNTJ1jxD8V1Jbn6Bm2m1iWKPiFLY1/4nwSPFyysCu7Ff/vtD -hQNGvl3GyiEm/9cCnnRK3PgTFbGBVzbLZVzRHTF36SXDw7IyN9XxmAnkbWOACKsG -koHU6XCPpz+y7YaMgmo1yEJagtFSGkUPFaUA8JR7ZSdXOUPPfH/mvTWze/EZTN46 -ls/pdu4D58JDUjxqgejBWoC9EV2Ta/vH5mQ/u2kc6d0li690yVRAysuTEwrt+2aS -Ecr1wPrYg1UDfNPFIkZ1cGt5SAYqgpq/5usWDiJFAbzdNpQ0qTUmiteXue4Icr80 -knCDgKs4qllo3UCkGJCy89UDyibK79XH4I9TjvAA46jtn/mtd+ArY0+ew+43u3gJ -hJ65bvspmZDogNOfJA== ------END CERTIFICATE----- - -# Issuer: CN=TrustAsia TLS ECC Root CA O=TrustAsia Technologies, Inc. -# Subject: CN=TrustAsia TLS ECC Root CA O=TrustAsia Technologies, Inc. -# Label: "TrustAsia TLS ECC Root CA" -# Serial: 310892014698942880364840003424242768478804666567 -# MD5 Fingerprint: 09:48:04:77:d2:fc:65:93:71:66:b1:11:95:4f:06:8c -# SHA1 Fingerprint: b5:ec:39:f3:a1:66:37:ae:c3:05:94:57:e2:be:11:be:b7:a1:7f:36 -# SHA256 Fingerprint: c0:07:6b:9e:f0:53:1f:b1:a6:56:d6:7c:4e:be:97:cd:5d:ba:a4:1e:f4:45:98:ac:c2:48:98:78:c9:2d:87:11 ------BEGIN CERTIFICATE----- -MIICMTCCAbegAwIBAgIUNnThTXxlE8msg1UloD5Sfi9QaMcwCgYIKoZIzj0EAwMw -WDELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs -IEluYy4xIjAgBgNVBAMTGVRydXN0QXNpYSBUTFMgRUNDIFJvb3QgQ0EwHhcNMjQw -NTE1MDU0MTU2WhcNNDQwNTE1MDU0MTU1WjBYMQswCQYDVQQGEwJDTjElMCMGA1UE -ChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjEiMCAGA1UEAxMZVHJ1c3RB -c2lhIFRMUyBFQ0MgUm9vdCBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABLh/pVs/ -AT598IhtrimY4ZtcU5nb9wj/1WrgjstEpvDBjL1P1M7UiFPoXlfXTr4sP/MSpwDp -guMqWzJ8S5sUKZ74LYO1644xST0mYekdcouJtgq7nDM1D9rs3qlKH8kzsaNCMEAw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQULIVTu7FDzTLqnqOH/qKYqKaT6RAw -DgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2gAMGUCMFRH18MtYYZI9HlaVQ01 -L18N9mdsd0AaRuf4aFtOJx24mH1/k78ITcTaRTChD15KeAIxAKORh/IRM4PDwYqR -OkwrULG9IpRdNYlzg8WbGf60oenUoWa2AaU2+dhoYSi3dOGiMQ== ------END CERTIFICATE----- - -# Issuer: CN=TrustAsia TLS RSA Root CA O=TrustAsia Technologies, Inc. -# Subject: CN=TrustAsia TLS RSA Root CA O=TrustAsia Technologies, Inc. -# Label: "TrustAsia TLS RSA Root CA" -# Serial: 160405846464868906657516898462547310235378010780 -# MD5 Fingerprint: 3b:9e:c3:86:0f:34:3c:6b:c5:46:c4:8e:1d:e7:19:12 -# SHA1 Fingerprint: a5:46:50:c5:62:ea:95:9a:1a:a7:04:6f:17:58:c7:29:53:3d:03:fa -# SHA256 Fingerprint: 06:c0:8d:7d:af:d8:76:97:1e:b1:12:4f:e6:7f:84:7e:c0:c7:a1:58:d3:ea:53:cb:e9:40:e2:ea:97:91:f4:c3 ------BEGIN CERTIFICATE----- -MIIFgDCCA2igAwIBAgIUHBjYz+VTPyI1RlNUJDxsR9FcSpwwDQYJKoZIhvcNAQEM -BQAwWDELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dp -ZXMsIEluYy4xIjAgBgNVBAMTGVRydXN0QXNpYSBUTFMgUlNBIFJvb3QgQ0EwHhcN -MjQwNTE1MDU0MTU3WhcNNDQwNTE1MDU0MTU2WjBYMQswCQYDVQQGEwJDTjElMCMG -A1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjEiMCAGA1UEAxMZVHJ1 -c3RBc2lhIFRMUyBSU0EgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC -AgoCggIBAMMWuBtqpERz5dZO9LnPWwvB0ZqB9WOwj0PBuwhaGnrhB3YmH49pVr7+ -NmDQDIPNlOrnxS1cLwUWAp4KqC/lYCZUlviYQB2srp10Zy9U+5RjmOMmSoPGlbYJ -Q1DNDX3eRA5gEk9bNb2/mThtfWza4mhzH/kxpRkQcwUqwzIZheo0qt1CHjCNP561 -HmHVb70AcnKtEj+qpklz8oYVlQwQX1Fkzv93uMltrOXVmPGZLmzjyUT5tUMnCE32 -ft5EebuyjBza00tsLtbDeLdM1aTk2tyKjg7/D8OmYCYozza/+lcK7Fs/6TAWe8Tb -xNRkoDD75f0dcZLdKY9BWN4ArTr9PXwaqLEX8E40eFgl1oUh63kd0Nyrz2I8sMeX -i9bQn9P+PN7F4/w6g3CEIR0JwqH8uyghZVNgepBtljhb//HXeltt08lwSUq6HTrQ -UNoyIBnkiz/r1RYmNzz7dZ6wB3C4FGB33PYPXFIKvF1tjVEK2sUYyJtt3LCDs3+j -TnhMmCWr8n4uIF6CFabW2I+s5c0yhsj55NqJ4js+k8UTav/H9xj8Z7XvGCxUq0DT -bE3txci3OE9kxJRMT6DNrqXGJyV1J23G2pyOsAWZ1SgRxSHUuPzHlqtKZFlhaxP8 -S8ySpg+kUb8OWJDZgoM5pl+z+m6Ss80zDoWo8SnTq1mt1tve1CuBAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFLgHkXlcBvRG/XtZylomkadFK/hT -MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQwFAAOCAgEAIZtqBSBdGBanEqT3 -Rz/NyjuujsCCztxIJXgXbODgcMTWltnZ9r96nBO7U5WS/8+S4PPFJzVXqDuiGev4 -iqME3mmL5Dw8veWv0BIb5Ylrc5tvJQJLkIKvQMKtuppgJFqBTQUYo+IzeXoLH5Pt -7DlK9RME7I10nYEKqG/odv6LTytpEoYKNDbdgptvT+Bz3Ul/KD7JO6NXBNiT2Twp -2xIQaOHEibgGIOcberyxk2GaGUARtWqFVwHxtlotJnMnlvm5P1vQiJ3koP26TpUJ -g3933FEFlJ0gcXax7PqJtZwuhfG5WyRasQmr2soaB82G39tp27RIGAAtvKLEiUUj -pQ7hRGU+isFqMB3iYPg6qocJQrmBktwliJiJ8Xw18WLK7nn4GS/+X/jbh87qqA8M -pugLoDzga5SYnH+tBuYc6kIQX+ImFTw3OffXvO645e8D7r0i+yiGNFjEWn9hongP -XvPKnbwbPKfILfanIhHKA9jnZwqKDss1jjQ52MjqjZ9k4DewbNfFj8GQYSbbJIwe -SsCI3zWQzj8C9GRh3sfIB5XeMhg6j6JCQCTl1jNdfK7vsU1P1FeQNWrcrgSXSYk0 -ly4wBOeY99sLAZDBHwo/+ML+TvrbmnNzFrwFuHnYWa8G5z9nODmxfKuU4CkUpijy -323imttUQ/hHWKNddBWcwauwxzQ= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST EV Root CA 2 2023 O=D-Trust GmbH -# Subject: CN=D-TRUST EV Root CA 2 2023 O=D-Trust GmbH -# Label: "D-TRUST EV Root CA 2 2023" -# Serial: 139766439402180512324132425437959641711 -# MD5 Fingerprint: 96:b4:78:09:f0:09:cb:77:eb:bb:1b:4d:6f:36:bc:b6 -# SHA1 Fingerprint: a5:5b:d8:47:6c:8f:19:f7:4c:f4:6d:6b:b6:c2:79:82:22:df:54:8b -# SHA256 Fingerprint: 8e:82:21:b2:e7:d4:00:78:36:a1:67:2f:0d:cc:29:9c:33:bc:07:d3:16:f1:32:fa:1a:20:6d:58:71:50:f1:ce ------BEGIN CERTIFICATE----- -MIIFqTCCA5GgAwIBAgIQaSYJfoBLTKCnjHhiU19abzANBgkqhkiG9w0BAQ0FADBI -MQswCQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlE -LVRSVVNUIEVWIFJvb3QgQ0EgMiAyMDIzMB4XDTIzMDUwOTA5MTAzM1oXDTM4MDUw -OTA5MTAzMlowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEi -MCAGA1UEAxMZRC1UUlVTVCBFViBSb290IENBIDIgMjAyMzCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBANiOo4mAC7JXUtypU0w3uX9jFxPvp1sjW2l1sJkK -F8GLxNuo4MwxusLyzV3pt/gdr2rElYfXR8mV2IIEUD2BCP/kPbOx1sWy/YgJ25yE -7CUXFId/MHibaljJtnMoPDT3mfd/06b4HEV8rSyMlD/YZxBTfiLNTiVR8CUkNRFe -EMbsh2aJgWi6zCudR3Mfvc2RpHJqnKIbGKBv7FD0fUDCqDDPvXPIEysQEx6Lmqg6 -lHPTGGkKSv/BAQP/eX+1SH977ugpbzZMlWGG2Pmic4ruri+W7mjNPU0oQvlFKzIb -RlUWaqZLKfm7lVa/Rh3sHZMdwGWyH6FDrlaeoLGPaxK3YG14C8qKXO0elg6DpkiV -jTujIcSuWMYAsoS0I6SWhjW42J7YrDRJmGOVxcttSEfi8i4YHtAxq9107PncjLgc -jmgjutDzUNzPZY9zOjLHfP7KgiJPvo5iR2blzYfi6NUPGJ/lBHJLRjwQ8kTCZFZx -TnXonMkmdMV9WdEKWw9t/p51HBjGGjp82A0EzM23RWV6sY+4roRIPrN6TagD4uJ+ -ARZZaBhDM7DS3LAaQzXupdqpRlyuhoFBAUp0JuyfBr/CBTdkdXgpaP3F9ev+R/nk -hbDhezGdpn9yo7nELC7MmVcOIQxFAZRl62UJxmMiCzNJkkg8/M3OsD6Onov4/knF -NXJHAgMBAAGjgY4wgYswDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqvyREBuH -kV8Wub9PS5FeAByxMoAwDgYDVR0PAQH/BAQDAgEGMEkGA1UdHwRCMEAwPqA8oDqG -OGh0dHA6Ly9jcmwuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3RfZXZfcm9vdF9jYV8y -XzIwMjMuY3JsMA0GCSqGSIb3DQEBDQUAA4ICAQCTy6UfmRHsmg1fLBWTxj++EI14 -QvBukEdHjqOSMo1wj/Zbjb6JzkcBahsgIIlbyIIQbODnmaprxiqgYzWRaoUlrRc4 -pZt+UPJ26oUFKidBK7GB0aL2QHWpDsvxVUjY7NHss+jOFKE17MJeNRqrphYBBo7q -3C+jisosketSjl8MmxfPy3MHGcRqwnNU73xDUmPBEcrCRbH0O1P1aa4846XerOhU -t7KR/aypH/KH5BfGSah82ApB9PI+53c0BFLd6IHyTS9URZ0V4U/M5d40VxDJI3IX -cI1QcB9WbMy5/zpaT2N6w25lBx2Eof+pDGOJbbJAiDnXH3dotfyc1dZnaVuodNv8 -ifYbMvekJKZ2t0dT741Jj6m2g1qllpBFYfXeA08mD6iL8AOWsKwV0HFaanuU5nCT -2vFp4LJiTZ6P/4mdm13NRemUAiKN4DV/6PEEeXFsVIP4M7kFMhtYVRFP0OUnR3Hs -7dpn1mKmS00PaaLJvOwiS5THaJQXfuKOKD62xur1NGyfN4gHONuGcfrNlUhDbqNP -gofXNJhuS5N5YHVpD/Aa1VP6IQzCP+k/HxiMkl14p3ZnGbuy6n/pcAlWVqOwDAst -Nl7F6cTVg8uGF5csbBNvh1qvSaYd2804BC5f4ko1Di1L+KIkBI3Y4WNeApI02phh -XBxvWHZks/wCuPWdCg== ------END CERTIFICATE----- - -# Issuer: CN=SwissSign RSA TLS Root CA 2022 - 1 O=SwissSign AG -# Subject: CN=SwissSign RSA TLS Root CA 2022 - 1 O=SwissSign AG -# Label: "SwissSign RSA TLS Root CA 2022 - 1" -# Serial: 388078645722908516278762308316089881486363258315 -# MD5 Fingerprint: 16:2e:e4:19:76:81:85:ba:8e:91:58:f1:15:ef:72:39 -# SHA1 Fingerprint: 81:34:0a:be:4c:cd:ce:cc:e7:7d:cc:8a:d4:57:e2:45:a0:77:5d:ce -# SHA256 Fingerprint: 19:31:44:f4:31:e0:fd:db:74:07:17:d4:de:92:6a:57:11:33:88:4b:43:60:d3:0e:27:29:13:cb:e6:60:ce:41 ------BEGIN CERTIFICATE----- -MIIFkzCCA3ugAwIBAgIUQ/oMX04bgBhE79G0TzUfRPSA7cswDQYJKoZIhvcNAQEL -BQAwUTELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzErMCkGA1UE -AxMiU3dpc3NTaWduIFJTQSBUTFMgUm9vdCBDQSAyMDIyIC0gMTAeFw0yMjA2MDgx -MTA4MjJaFw00NzA2MDgxMTA4MjJaMFExCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxT -d2lzc1NpZ24gQUcxKzApBgNVBAMTIlN3aXNzU2lnbiBSU0EgVExTIFJvb3QgQ0Eg -MjAyMiAtIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDLKmjiC8NX -vDVjvHClO/OMPE5Xlm7DTjak9gLKHqquuN6orx122ro10JFwB9+zBvKK8i5VUXu7 -LCTLf5ImgKO0lPaCoaTo+nUdWfMHamFk4saMla+ju45vVs9xzF6BYQ1t8qsCLqSX -5XH8irCRIFucdFJtrhUnWXjyCcplDn/L9Ovn3KlMd/YrFgSVrpxxpT8q2kFC5zyE -EPThPYxr4iuRR1VPuFa+Rd4iUU1OKNlfGUEGjw5NBuBwQCMBauTLE5tzrE0USJIt -/m2n+IdreXXhvhCxqohAWVTXz8TQm0SzOGlkjIHRI36qOTw7D59Ke4LKa2/KIj4x -0LDQKhySio/YGZxH5D4MucLNvkEM+KRHBdvBFzA4OmnczcNpI/2aDwLOEGrOyvi5 -KaM2iYauC8BPY7kGWUleDsFpswrzd34unYyzJ5jSmY0lpx+Gs6ZUcDj8fV3oT4MM -0ZPlEuRU2j7yrTrePjxF8CgPBrnh25d7mUWe3f6VWQQvdT/TromZhqwUtKiE+shd -OxtYk8EXlFXIC+OCeYSf8wCENO7cMdWP8vpPlkwGqnj73mSiI80fPsWMvDdUDrta -clXvyFu1cvh43zcgTFeRc5JzrBh3Q4IgaezprClG5QtO+DdziZaKHG29777YtvTK -wP1H8K4LWCDFyB02rpeNUIMmJCn3nTsPBQIDAQABo2MwYTAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBRvjmKLk0Ow4UD2p8P98Q+4 -DxU4pTAdBgNVHQ4EFgQUb45ii5NDsOFA9qfD/fEPuA8VOKUwDQYJKoZIhvcNAQEL -BQADggIBAKwsKUF9+lz1GpUYvyypiqkkVHX1uECry6gkUSsYP2OprphWKwVDIqO3 -10aewCoSPY6WlkDfDDOLazeROpW7OSltwAJsipQLBwJNGD77+3v1dj2b9l4wBlgz -Hqp41eZUBDqyggmNzhYzWUUo8aWjlw5DI/0LIICQ/+Mmz7hkkeUFjxOgdg3XNwwQ -iJb0Pr6VvfHDffCjw3lHC1ySFWPtUnWK50Zpy1FVCypM9fJkT6lc/2cyjlUtMoIc -gC9qkfjLvH4YoiaoLqNTKIftV+Vlek4ASltOU8liNr3CjlvrzG4ngRhZi0Rjn9UM -ZfQpZX+RLOV/fuiJz48gy20HQhFRJjKKLjpHE7iNvUcNCfAWpO2Whi4Z2L6MOuhF -LhG6rlrnub+xzI/goP+4s9GFe3lmozm1O2bYQL7Pt2eLSMkZJVX8vY3PXtpOpvJp -zv1/THfQwUY1mFwjmwJFQ5Ra3bxHrSL+ul4vkSkphnsh3m5kt8sNjzdbowhq6/Td -Ao9QAwKxuDdollDruF/UKIqlIgyKhPBZLtU30WHlQnNYKoH3dtvi4k0NX/a3vgW0 -rk4N3hY9A4GzJl5LuEsAz/+MF7psYC0nhzck5npgL7XTgwSqT0N1osGDsieYK7EO -gLrAhV5Cud+xYJHT6xh+cHiudoO+cVrQkOPKwRYlZ0rwtnu64ZzZ ------END CERTIFICATE----- diff --git a/python/tk-core/requirements/3.7/frozen_requirements.txt b/python/tk-core/requirements/3.7/frozen_requirements.txt deleted file mode 100644 index fa55883f..00000000 --- a/python/tk-core/requirements/3.7/frozen_requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -distro==1.4.0 -packaging==24.0 -PyYAML==5.4.1 -ruamel.yaml==0.18.13 -ruamel.yaml.clib==0.2.8 -shotgun-api3==3.9.0 diff --git a/python/tk-core/requirements/3.7/pkgs.zip b/python/tk-core/requirements/3.7/pkgs.zip deleted file mode 100644 index 42f3092922ff4c61eabe5f512e13341e76bd12e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 861226 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%0AXNGEQb0xF3^X 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%0A>uZt!Qep8i9M*mJ8qXq8L9KU<*L<4LS1pN& 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

    RTmBUzJP;S+q$73pdYv}eQR*#b2)Rb;+ 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

    P1 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

    x1wSOK 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�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 diff --git a/python/tk-core/requirements/3.7/requirements.txt b/python/tk-core/requirements/3.7/requirements.txt deleted file mode 100644 index e4f56efe..00000000 --- a/python/tk-core/requirements/3.7/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -distro==1.4.0 -packaging==24.0 -pyyaml==5.4.1 -ruamel.yaml==0.18.13 -shotgun_api3==3.9.0 diff --git a/python/tk-core/requirements/3.9/frozen_requirements.txt b/python/tk-core/requirements/3.9/frozen_requirements.txt index 212246db..f7a436c5 100644 --- a/python/tk-core/requirements/3.9/frozen_requirements.txt +++ b/python/tk-core/requirements/3.9/frozen_requirements.txt @@ -1,5 +1,7 @@ distro==1.4.0 +Fileseq==2.1.2 packaging==25.0 +PyJWT==2.12.0 PyYAML==5.4.1 ruamel.yaml==0.18.14 ruamel.yaml.clib==0.2.15 diff --git a/python/tk-core/requirements/3.9/pkgs.zip b/python/tk-core/requirements/3.9/pkgs.zip index c0043ab132f4a0237dd1cd2a97a43846d24a345c..86e8258b25b64dda91285424d560cb903417900f 100644 GIT binary patch delta 61635 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 diff --git a/python/tk-core/requirements/3.9/requirements.txt b/python/tk-core/requirements/3.9/requirements.txt index 4db18269..24a23f3c 100644 --- a/python/tk-core/requirements/3.9/requirements.txt +++ b/python/tk-core/requirements/3.9/requirements.txt @@ -1,5 +1,7 @@ distro==1.4.0 +fileseq==2.1.2 packaging==25.0 +pyjwt==2.12.0 pyyaml==5.4.1 ruamel.yaml==0.18.14 shotgun_api3==3.10.0 diff --git a/python/tk-core/requirements/any/flow_data_sdk-beta.zip b/python/tk-core/requirements/any/flow_data_sdk-beta.zip new file mode 100644 index 0000000000000000000000000000000000000000..0250e7feddcf1d70a0eccdf6287d8df1135d1d2d GIT binary patch literal 68735 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

    U+&e0XC z(>~$BAL`@wSCx{zJ9YQv+1I~&^{c!4`+}YOZ}y0GCFm5e%gOry)aq+5C$qua9Z*C* zXnS~4i@iiqBK%D(l3{mTq`PqWfVOQGvU`9nBafD78m*CfJdB-Vz{`Thu@M=fF-=UY z6C(HuD@NX^^7WrQ0v{D-qF>Rfb5tD){2;^lm0x95PJ(h$&P(*_&$Y&zr7CFdzc+B+ zKU;aa@Y7U}=K65z;3Ik2drDXvHiwyt7{kwuC6E~sA(t^sdfDEphY}%bV|5Cr5=Iq| z;xtKe5y+_ea&MaEeiAkHY34~caZ}mi0Z89k>Gn4)8?hcSdQK5ozk~q-bfzL?zTWf+{wM&H)5(_qb0Vdz+ zZW4W{_*kaV%whYhR}3+IWngFf+OTeow_Av=1>zMI(o7(P&$6KrHZDTaBv?`;%|W70 zlW=#}6O&ms2ex)373>qop1+Qd_^hg zz>tlX+n#u!C%!oU`j~zqv3z-w#K13_!P;6$^uF{EO--9w_$WpMx+F%A-@^Qg8)+&Q zG_5u;C`GK9*uW-qkU=KIT#V+ZI=+rvR47tHHgz@_S<3e+V|k2poy9-3<=G!d|E<_@ z+*47@>f-Ud1to7Q8UFGdr8y84zrqfoH&7j-hG!QM#x3p2y*6R%RTshhkw1;T(bwq@hoU;$9qZ&nUb|@z-I05H)gpjd_ zNgm=lFsl|<$VlOVgqdZbAoNB9d*`kZd)>z|-GEIfe96kTEiw2XC#96#Ga86?Zp`df z>%qg~K5O2J)Q$QweY+ls72`h(qx9pld^NF+x3V|5A(Tkit@v*NA0tYiN9riJ0}6uD z_2@*G3~lzTY5F^|Nm%OW7k+?XFOjZj9oVpJSxqH{lIBGkz~ z$*6pZ1|BYVe66*l&-p)EZml@@kU+m6>9(UW@3uedm@j3y&>QPp1h*EDP;?i=4P1g4 z0bH5by%>W&RKj?9g7zoT6?mvf%iU18FW(E1kfCwLRqnL%XtdYlYR+BSx^G`h4h+Qy z;|<9S)--K!-At8#_nrHXN3OX_|CyYxO4rnsMFPkCXz#`|i3_!}a)a6T)Udsk)W3h* zGQ-j4g|D$er!`!WY`g-NMPt9!GTvsA9YVjH#OTkAl{QGKiBjn?m@d5((I%TCy~g4k z?KOFRU6;CA*_-5g*K2J*IJI3n(_hV4H1MhFTwn&sySi2*Av<=*ZkhPpB_0*Su8YM^ z@ig)2wSMSPse{Z!Y;g=h+9*9%rou$h=uE(Xj@CUK9Jqy^(^s>>oAu3JtbBLGTT>;k z&>Dvh319sSm*Q`8S)Ssr)3MuOkp#z&T_^n<2oLO9xyy&wbOo|YA8`?N(a&g0xFWDg z`$x^mJawe&c&=vcfj+=n*35oUgL!}5zqg^(Ljx+S8QisYyZ2ldFLzVD`#>#w(Ll-8 zZW`GLmdi4SNX)K138UEOM7GfRbv+@kh};+BvDT~f$@HhpTyt7b7wf@O=p!Q9ixjijK>t=LGN7!QtSi; zi^4irBX5?W-hdn@>#Xmdv-zRqGo_p|$Q>C|DK%gPZ(PR^l{i_~W-#pYV|G{mTlKlF zyBpA@6cAWL@HA=Adwpw@`gnqmQ#0-`x-p)mqqWKYat|Uy0L2=cnJ`(D3#}RJ7-byP z)3S*H84>gx7T*-q6dBOYL#2b|_VzRxIyQ0;>$RK~1Ra1?;jSm@`8hOoJK(F{%g18_ z=lUwXA0_)WhO@* zsNdE`mLZ`cA<7V}1%HqDU!@Cs>VDwB3_ix+nz|~ZjfjJ`m|`c{w9zg=cVi-HXnnC= zaw7&YClVeW`Fz6sG@G!Jh*HJVAb5Wwfxqr=;pgmf%;CIfBcS`tC59REu^>*z&YClM zWo7-kG&LhgY($KAdz)A|^Y9@2`yHGQW$NI^zBt4#sd+h#%DRVU1ugrbxLkdVU~*9tnHA{nIXp_9&pl3(aH~X zD!NK%+4%w`V}J|-qD|*O&uI$X>VOBrDCLA=+JAc;-eCI5ND1Q%p0YUqB<82QMZ~hy zg)+7-6JD)2Ij{qeE#N(y(!|ZNf=I$d0;c?Y==}8q$jA@wCYA|R#%^;|Tgm7i0W4xeqxnBWJ7j#+Rc5=VrF9C^(8~%WH2Hz(rS<5d ziU&?37CF-`qk|B+e8+- zpk?oqJE_}G`2PwA61o&o6F~t0Ku7=pei6a{z5n8W!U0D+Ym@)P0#_RU3k&R1Xrm|? zCfll7D4R616j4x1Eg;Y-giPtn>$_%Sx|zZp+Tt7L+UFY2MqhETwTv&61fyC2jyfH` zetPeoq^}3wu_`kd0D^u>6Vd)rPg0g-dBWvD=nDZmXNFZCAVvaVHght9hEv8y=z_J= z?e$po{Bp9oL0|LQ+}X71^=WOdZ)c1*gh~|H>foCnQvJ@IAyr(u0}^WoV}lJ@x&^eu z_2oO?$XreoF~=JNkw1Z5z#b7~{@}_9VR0xlBRo()3nngUs%I7>k&wa3m6Jd*SD*Ly zG#$&9AG4K2ROpgdajoTAD8IFc^H|^60{C<$9rlDR&tfXJ|5gB*%6xi*(0TE|Ffh-= z=3mzQTLuNn-d?Z|IHG8p#zloc+s?puf_^?|O)-q0rnNiUg(B|wATQj@vf}Lc=6-JI zWOR~`lrh;9IVzN^fcvuY`2bX)vhrw{x5?@3T|RNprODc`7_%9A3$SXEWw9#DWx)p# zB+2}NMck1+dOz?A8y~IxFL6Ub_j1a4ziI#c zEx!oab=87F*iCI2DZk_{J`uW&d1r<(Cb9vPn{C%w}-~*Zd3W zFTn7?z;Rc-!iHF(gM?x`l2_VZtP5h;!JfM*O?eDStAfLEtUdYhD282c1GC;0fHh`u zfsMYpw!}MW&RPedpvde^slmTzg$VS5Y9R;0=N;T9B3VJb#VQAZw%id*Fd-sTR=5AB zw6_4OE6LWsaS!h9?(XjH?oM#`;O_1Of=kfg?k>SKxNFb=0lw3B{xj)jdiu`S_wXEu zoc&vC7bUx@-df8TgNiu>>J3Ta|egH zi`=~uPUe|8 zy4KW!v7^hpWO{4Kq*B&pHVR2T#)WL`z12_fM2jtB8z-XeS?n4otRySIkEd+x5N* z#P*9PD0z8%A{kwwY%a@yN0j^dY?@5!O3?R1b8Y)@;P6ky(6Hws?%A``72%S-Y+~77 z>3HTQs?cn#Fs#fsnNIOY$K+Yt?|RF^RT+cEu+lGR;VeNU_5?TbG+~vlIvI#l3(EZ4kq(p31Q%^Wh+D%sSu6X?+gUx~#r@$yfL$*{A zRkev?6W6%gL1{beXX?hktsZblUh+P5h~c!R0MsvOAyF~v( zv#7ld=Avj1*+A%kj2Qvrh=mLV?k!xLee$QWJ0aCEepoM4oO% zRD%S*LREs}{Dt+d@=EjLXI=SsV+0ySLA9>(=XJCwd_G@05Au9Z+Jhh6^64sjw(oCH z!mp7tDkUqdkNsIt7>TD7TS7-dB*nhbn;A~=PW^441&Ru8SZj~LN zQuA*I-O^=+H!e7e1i9Wcl0S8YSR-x7iOOSC)&68sRaY39j04=ZBytLUPf8+oy!dJF zb@*hhIAx%(zhkMs(vfCjNI^7Tj_)g%aRL@%&-HAv{9Pf**;W8>As0w3HDx}VXqLgX`^N$9TO_DH^w=J5@J$Qx>_-1YBF2fZd06o8)An!{t32o>iC z`6s3 z%0*nK-M!TFA}EIp}0V1tv^ZLNQOwc|C^swTT^%keWE=^{bquByJ#<%#=$0qtw>W zq4HNn+wdPo2{5ehbkg5v!cn~#edlb6?t*c$DzqZ|%5Tx_Z-SBlF^qSl=@gh?g&3pQ z1iU1WhZXk0*WudxK*TyvPvCvu&{OP!?O1GnZGf52hpCEN+yWDsEUyLOmxv{K6Wq{D zE4K=sfO7FS52c!6@jF^k!^DIKQSESC#r!p0EuG1BFl^t`%*&= zly|-o-Ti~DDV3Iq7;_43Ng=^{57|gaAKl3~U@7+qpbKk(SCLLVbpsh~Z#lW;=IA?L zx3$tz+43BLo`d^LpQng5MRG|YWANFAl>za6p&N;GjMqiHDs1m|=?_7{3W4zU;1YnH4m8u$54Jc2ZTU4-;*r$D zMWW@X7$${6sQW&>EFsk78;RiIKJmx*Q^>k9)9@*LPvieYFYYW_NCDUcSj~xuz_A0!+zqV~1P=)4@I%SUNparuywbZo5={G}a$_olQrCtNeTj@#K@blkFUq zxT~Haag0Lc*kQ5?SopuFBm2L1r20st7I)lx5^x)Tz~RJL>G6}@K|Wi|-#J|FoIa2J zWD98*rV<76$Rp4d5n;8Kg#XTzrmzB@G6n1gcp-?ERT6E%WN$rf@mh<^Yf_yNJ;azh zB-zLH^;di6%Oj+5u+hDdwfF zjbhD@;u&8i6?w&-+M`WMHqVp~+E=^*2RzsVo9Gp&iQ3@RwPJzj2z-pNfD|maPDX>- zi}PkGci>^_6Su6N)1HJz1EmqGF6-hhOTB~Z3Y~WrJBIEVmg}PBUT|@AcjmH$D%g!$ zg3TDq_jo#c8cPDg&$l-*682D#TTRBADT~2|>$7d3udg;Y^w?{CZIY?;5gV#v`gRG6 zdQ{UXb4y`Rh+h2C+ilV>8%$g*U=BW&BHznSz~Gn$jH(66sOkHC-$YiciwQa*6dO== zpaNV#PlTTxt@ z1#3XWhk=U#A4nmD7TWwHX`=wVMl=|n7`G;-=p^d0C=;|*x|>x7zlDhgXXeKvzH8En z&1*uqIbmWK1_2#u9M#g60bdAf5HWNI2HG#WIW5VHw6W$jEmr=jz)=szDU$@VKcTP8 z5)KBO&?Fj)(V2rDiK$H~L&FIww>iM><$|KIFV5(DZ*yx zg;Ji)J+oiDS0^>Ya2~zCTfCAh<~AGy?X&CdY(|Ydu_pY0SHr-sj77Oo2B%V?&59D? zjVs~Uuj#HdxQW%7_!LBn5YK7tK5C@!!FM&Q@AZDW+tCd&`kE^bXXiYL|NRwUarjM4 zgaD~S<4M50)+YrBNa(Lh@z3H4{E9K~`w#&-3Ok&bz7ofN;prCBj6B#@33vG-^*oiD zf>w}LAIqnkKTB9CFGC~OZ+F>e_e-5F!Q&AL9dTVV_BZ{w$}!>j_>Q1`In&8r%48eu zHOw6k+GbcNdqNo+p{&?=!n=PdDFZ(~{!4a}m<=TKt_AP91RzK-{bjp*p4Dx*VO%rU847IsomR7e$^W zs2}XglH8zA3w5Be8_?eo&ZR# zS0_$aGRYtIa~YA>kp`neM_f{F*c51=h0xDTJ`kvM=GHQ9$@CWIz%X42w(SicoLsS~ zEs5MxW2ve}h*r4qrqZqtpK4KmpjNi&Lz5e=N*h7v+M!Bn&`Y3tmMSk)Gs|*`e}?ZC zST5E`eI|-AIJjq4_`c%~adZJxytuts^pRmr4a_@ zvHle7v#kDS{m2q0GW}3qg;3y1G<$IlTL4_oWf2#n|{ zRD3=F53!yi3=y6I{sVqSU*>6!01{(kCFH5TtBbK0wyj$hNctRwj0vUGk+DrA8@i4a zb|(+nVXWN&XYJ>i!FXhmfcgtzZs;=+{*8W2&@$eqZx=O{7rx6FCHD08Rks&{w=$VZ zxlGQZ^J=6Z#|=r5M@qEoBMI5(wHc2QSG zS=ff7uH*{2y2?YJezpc5k1~aJt)(?Ow;9{k`qUQAexs_D)=BM7ZH!&VKSV04n^fae zmDJtO2Mr2IMys35m>}FeFky%7J)&ME%^OxPGLMS6T@xHNhHNJy7`UdpoG6~$%)Q7WBX z7akP_wX9PopOTH&KhB{wO^w;obiLx@+gXk$nq#jKVqNwV}?T3xKsFxY_Wsh6z z7Fs0t(e*Y0k8IN{{RjCLcA~LZWeWXfRwF|+{g=BRllKGb_kE5TIOZ|+_;}rc-wMIE zDkWgEZ%YFdHsNv4DIBtIf%38a6+uI`Dj_Gm1P#3WJ2xvKJxm}xOc*dN_*^zC!ypkj zc-KHj92W|}(>J@@EI=l`cu$z`#Wv$CKDY+yv~+&Pt?AB)gt$CymzskApwNX4S?^6k zL8pJh;NshrBe>L4(_w)btOuyeLQ6PCi-2D4Mh{4ImEx1o#yn^Gdceuk&HmJ~&$hwC zkhkaozXoVp{yCg`4zC2fr%UfLjvI5EaUsI%XEu5 z00DT4$c2Xk0+Rl}4iXsH7uUb398cQ@o~ z-g*n6pwp0!%r&ld#b%@IMFLp!sM6{XN>j-DbbiOM$ZmYa>@g6ZqZ4#hJy>8-1P35C z7|d$DCVn8N*r0JZx)xjeSRhQ30QW9r42gG)v~(>Sk3q;!yp@W&k!~Np=^fEO9q%DTZ@)rIGYu# ze55s7G1Vt{Hmx0M0c|ViXW2vdGimmia1G{XR+@*O1JM0ZYl(Sp- zEMjRsB#&cYlr@$BJQp;DvJRRAbE*qt(W`z@ResUIIlj53xkZ?s;4?KVZ&Ykh-vaht zm%~Wdfj{&CRV+8CRff9w zBvHz)ah{x0#e5_90jO`RlxINTT$JfovZEJDxbL=ha6z>vjF@xB6Thn@@{4filpOhR zM-^~tSJt2U*6LMh;CKY|7$QpO%0#RssH1<_fs%FzQp-=mB9z`X)?$U+ZbrozOJaOq?w==EZa`F?17PEoanR(%}W`JC#c1EJseHr*(u<_^CPCM`dvK6RFFnH`}2fj;D|Hq6*$r zd)yopiW$IfCglHC?SCgZj)@h54P-GD2Oh#S|8!2I zDn{zkV$2TwmE)Naa{c)u{V#g_8poQTnJxlN&=ywdwn=$b_An7%@Hzgp5BTSpLcX1@ znNm+r*_v{lhJ61O+3X+T$e`Q}uR%e9fbPkGfCT=2o&Kj1@k~?6euWY7 zgT%Ig=9#n7QMq)*9Hewb#QUJK{G`X=wSIpZ6N$z?(UO<@W$5DAGqAfa(mx82=Q^{e z4%#lVdBA7M&<$guL5^|I6LaVg#c-vQZ@ck8lcoHbX?tL1K#=Q>TzN`1vl4)#^@F0W zqblmJ87!Ww^ZY#5FANOyU3u0g2|e)89 zc+{~+^g6ce3&eLe`2?AF*hG;`mW9|dgn$etz{gCMd4xfT7?xj@66t0uTM|CO!RMFz zn!i6Spbuh)VX-V>4q`0A0xO-!%h-k!=53U4TqWTLZ={^{YJ9xJ z`E4#gKPx;`B}ar!Z~n8!?jl`R>|`V_YDY8!;eh@089dm6oBoZ!H=TKdW#kI}+t_77sq>Qhp(ld^Q&y}Y zh!ynO0P{Ok9Lw5(MiHC5WsvWKU;RCHet@MtduVMC70biMa=03Uel~X{4V8prk4?ig z2AvR-?MU}}%_mQ*@QZ}dhQ~-3eu`nGYc_0u{A{iixDmf@{RI2RG2=jL(_jp+Mv@H3 zWgznR+t=^qZD*QOfHsEONwVixbC^-?qE@7~5&&GDj!BpomP5?Jv`M{`aHjeR<@M?6 zYBmC|5szIhr3)Xs%cASYz{OMUCE5ypsVEONQu51C#C8y$k*J|quQlsdxMPTLw+(o_7b$jpn3KHecRq*6LHwL`lyj3-&iYxG)6wd;O`C&kJMrv)|oz{GPYs(yl!p zd3ET2E`#|BJ%89Z8SqfRQcq^NnLWuz6(T0ZcyK-@!+8{M|HhR={R0*{xsv?KWE{(= z0UXgdkDrbUOuNo>?$)3T~l+Ic$f-N_Os7GjZ_Y$6aEML5lt`@ zq|At{RVrMDT>R6NvNY9QMkbZb-!^0I&7a91 zw>bON?HGeuZ}b}0uPT{KW2z1vPCl7Jld`pwtF6>R3A^{3Y_n)sH>gX3y{}Bv5(a}! zNE2f^dNam3A%fkb$H36R}PpRNyMeL8lQ07i{X%T4tKMQ(pEA zU(0W@u=MQgfC_qmZRDx|XHAx^)F%@Ajh1IK*DoDgZ#8Cb&08=ho+sY3y5-acCPBhx z^RjMn7o58kZ2)UL7C-sA50=dLU-8t=udLDK^1EqJnaQ7{GX&9eh))u9-Moy^eR~rc zGjTM)5(hAHvjW11!U!JqDmb<~ew$ZQ8}Cs0qcsvpKNDo1^Ao zs?>xX0h3F4+UjU*j&VVn9-*#%Tl*Gg&mTkav1iwgJ45#3+;*(7_d(<0EA(RhJhwJo zd&5N_BqMf=4QvUI>Sj6b+UYbt^5s~gAQ}_7Cx{G&vPbTA@yAX4`J}FsY84#ixS6It z&xF0wJWQm{F>)EIMp?3TC7%yOL7^g}Gh0YZw=Huv%ALT` z((=F+(Hi5G2kLbQyNmDR4;8HvPK@#w`-RJ*f)=cHl=mJrC0Xkfk4%XcM~&0<(X}T; z3~vN!EielHmf ziV1lb?C9@?3E7M&j?mxB>0kJ=!P)&iChx_;9xgyYhkFd|ekQ(;PM&B$%d69!JuJ|4 z;3xv2iLzfHfhh$TS2-0vF1&22$UN!louR4|jHX$;u{mE;qAy{WdXQ+Cbd)XvtO<1; zWAT-d+@2|Ar@KqqgEOMX^|0TEZ8-9t4H!*_rmw|<@t>eRF1F$i)nA#?gxkPmvq+Rv zAWI&apzmm`k$!iUE7^a^PbY7%dJgG|pkwjT@)+AOu*J|ZSJe|DZuP1npa-#NaLXCy za<7(IdolTR&uRG~KhVYqTtlsnY)`#~=&btI=ZGtz$&T)!d;$koqs8YVTWWqI(nROL zsSfJ6mmS%Y;D^r;5%4MKE%@l>8^o~n_7DC~sf}q7aGDM!T_0~dY1dw%7jHonV%j8v zRe1`V%HK>G)UED;wE=ZL3Gn9p|6BKex4EIB4mC1Nt1dYn|NMJtI8}2feA4vkRS-ow+@OoS3SR zsF14AXRTFb94Ta9ia@{80UZ3od>yEOTDDYoCc`W&JChm?awtf>V|ppJFRk8>fz!Na zvmd$#KWzDo2n-~ZlPmYd`j*TQ0v80R%?$10_&d3fa8Jsq^omd|@l|LGz z4zh%8nD?wdYKxezo}E=!>!Hn-$sYJR7K6}*M1wfu?om$^#THYK4j?T=vS5wWZeM6f z2t+7lM+Oncfu^iSxGx#`zB8b3JT5JpGcv$6%^1z9_(p{WSL8>buaLr1XP_%(JS%;C zF>~zl?D1&sdj`iIk9Yi9dCwf`Z z)j8?MP`_(4<|Xx~r}dm%fzz|j72l%PtNCwso9@qF<=y?-+Rhkk?;0_q;;18LdA*N6 zP(__st|j!SO60tntyVNkK2vo8H8IL_=OMHNZt#dGJ}1sX&;~OPH}Sh6%NuxFoPdZ8}!h^>v-`C{{`|)Q&dm%W~t6n}kcKoyQ+L zJy`N?=~;2h#uZ!>Nr)$nWG$w0tT|g4oNnXY72Dl~c%wMC@3G(K?1b^A_#%})g>IAN z?D;amA>H;ETBN1C5~4;#_6XVtdhOJD?ve$mLbi`x znb&dPR@9=Bww51V8IhAK0~Z*ECFNVe&m2rc{~VC|4M`ArOLsf`FAW4?M1n}?K*l=3 z{S@bnHw4ejY4eiUP zu~Jpvv|0rJI4_ubX6;1^x!i+yX6*T<-S89({5amLp8e(tJ#kgFBee=TC)R^=SBie? zH)b!A(!73laj1ixKLKg;hH_Rw1R-3}lHtr?ex?&k9p&RM~D(A>L087(ZX z#rEu1s_<89aD5pqN}7@9(`eTqWS-OF?3?w_-m~6U=(azFH=!|KIBNw-mW$h;K%CsZ zp|9W8Jl^11%GA?=K!D^Cj+-SC?qk|19q0NQj{x0^uJQ#eRS_si z+#*!L6&pu=_-^Nt`JSR`B)-ohGdOZ`2nRpWi0CqZeLoq4V|&ag`}3mVZm|UjX*RPc z{(Hnxq<8jI9{Lrki@Wb&fo-Tipf-6u?-@s9r1Ft9HjqbJVYL{lxyXn}=X)Ii*Tog2 zM}Y0=!Keq^Y7cg4K*b&2rCAR$d+nGJibE?C2dv}vt*plB9YrdH`|t}zBpYkdcH#q$ zS^KB69J$N8s`B2f+B)`u-<#F%rkQNIGO-pWeoOD7tG^=P1~D2rc7@m8U0j@5eN>V8 z`F-jYsyoOdF0TVT5sI`i8V+LC9Y!heg$*v@D+;&-QNe7lA#(`AKu$!y@wfTzf)Ya+ zs#{yrT2~LmPx+!XU|ifA<*Z3qSmO1g8`-oR;!!vyJ1c1Q%j2Ivx`*#0p-gboY2fZw zMihf43_5m(T#ZMn`jWWOeA*bU%;B!jG;^J!q)9SK8Bz!O#Mi2}Y)xvdXGNgM6aGy8 zv8}GFA@9+uyR~`M&JWmlWJyfL+H@~O77^;YTg(WOB@-wDxKPzhh`1@d!<3$bw*u%R z2*hHvWiT=akbAjb8xQW2*|k>OzO98W-+MOSjztEgb@sWT4|*{tac{!U!H|~uQGH&S`1QiH?u%zav*Yqze+vn+Uf2^+V z8LTjt%%BrfCS0USOCPGPMr!_c+M~-T^u1myV0TG`8gjIjT6-QHECC^79+!-sw5bQgIdvk~Mwa-3M{=`P=lDl+PojBJO=w0e`vMWR_KQarc~ke2E^ zXd3=m7cpM+ys*RE#!NU>CkJRQnxR}T%w-fEOQhX$nPU`1d*~OI83bB6+RUzWx#7S) z7$c^iQ4-mgPM8}N)KRh$x;EFkpd4sDA?|JRg9JKs@6j^IMA5+x6Tx(>4L@*V)JGUY zOz;heG}U!}r>^dF7|_AaUXH+}WTxqHWGaoHX3#tv8;)Kq&Jc7|t5qW-=B5ZNbC_q9 zjrYu_VE3fI;wSKH=WgM=4{v%lM6~*NOb)%nW%6TxOA0n@jUv8r3fG`Xn?`sf6C>Lq zI=hIw$*mhWGV6WY8Th6=#H_7yevUOh~Ot->~ahRwzO32o&V15R!X#`^`Rj0d`WdH<;I*) z-_N_611Rd9JE)&Q*RzY0my7qy(dpUuArAcvRnCa8CVlrs6u+M*8$W?0uC>($_~hNa zW*IGIJnm+pSQ1X$-FbD6YT_wq1UZ^X!52}XyS9+jiD`@bZfviuntFVg7NOiM+w{K1 z9()R?3@Qt|Ji+haFRNB9*XTEXj%O~qnn=BrQ>kCl|HhMiU#G*KkXCIq-7%ENjAlBx zrUmq~mYmTYVl8jQR-ClWF@?kr9m}1Gc*0cMV3njHZ2*zwTQH(O9-73~nv+W>+vl&J zTH(1Qo%s^^E$47q#>oPAQx>QF!$rM6(>b++Yv4+)bu~heP@3dHROLwAoF3 zGOWXvW=d{ax8t28un{Hhp^^Wkg}m~R!S%Hgb0$XB4=rssx@;-kw(o+bT=E8PX2m{p zMt4*ky7milv5vKrP|lBulo;n}Y4ftN`EIUy7i_9J(FZTEtR*Ye1_Qp#X8z7r{O)JG zg+;5=ZUwuCy7Pr^Ki03Tn~ZTPSf`D~l?4hzyinRM*XRh>fyCre7*j z#tQmtFyqc9)(&XMO>_E)!DWy|q8su+DMwZ)RHX zL3`Dv%ZHgkM1%7UVlVM?9(R8}pY?2QeV?B{yB$y%I>;Re2OXO}iCO?nF29Kg+BtNm zcKV!Ju;UK-QNG$9fk9p&4xw79xQRldFqFsa`Q>V7AkM?yUdE=^dqY z%%-YGT9>Y0GiMiX^NZo9S>D_hG@yxYgYAazmZp*eYjxVYtl(OFh$1)RX4$fAt|iA7 zAkGqE&soQ~QYxm=nC4*v2C!9;q+4Z?2dq6N#Sdm6MQ2%XosUu8eRcZ`=ywtr-XE1GAELTK5EK1Rz!Xc&!oS~UQ>Nz>WZF}LO5;bA z?pootV&0k~-$b7SWpT_jm{|P)&zWS^>*%RBcM690xbFJnN{h=0`k5Las$mge21oY4 z&)$^9L===oi&97G3YL&U?_)2s1le}BYA!*D#DR^I{ofIZGs(y%dOWHxpC4CrUY#A^ z(SwG+@=&n6l3o{gi5*#Si3ENy>vw0Kf2wdbDLm@h;?vpjE@4H!})JRw;* z3qQNgDmV$N<4uqC--LV7cN+<XoxH{x|x+~4ZoDZ zCDWt_L>KITVU|=p-g*>7SvV!t;GjO{xg9;*J=+%}-@1BpT;d(*KJG$0wJ3qMhz|k` z{H@&lp0rJNYBrW233f`gFXOCgEAicurX5ro+fF@u-mXnib&*$lRi{*Qr#}#OqJ7FL z|3v1Y_Ya|EdnRHz@G82h!T~Ui+97{BrDOgm+2g^T<;o*{)~78+5>BD7OBgc)kn8VU z@RJj$VgvhlHMeQgxVW@&?1>_eVp*t3flS27;KaHo-D z^1kc@pwk@pH`Yj=gq}Bw^}|_H%bD**#h-M}5V{!gdB_k+k|H;as!fGy;>QlY$op;Q5MTkW*JJFYMV9B4F%pQK-hLY^-3sJnrTA^*@`A)>) zxMH;(^acOpAd@#;w9-j=tAeI-KE8_3Kk3A)#+8Y5b6se~lqK47B@_=Yy0 z%J=ProRtwT2B<;1eVdn;moMM3In#3-fNKg)-3G=x{v7^Tf=rD1P{!nkopUo0H$-rG zbhgW*XJgNsm^?kMPuAloftoIlcf22ZN zU%){UR~^2X?hj^)hDg`=mRU}U>(OZOS*geRJHOXsHG(b&lSu**lFoVVE_|g7x*wdX z9vP7qJeQ_niv2S>*En2Ph(=nWFRPnl(;8Ek;P^QVnFU;`vpYD6oRLKk@Vkwao6idv zsXKw{*4YE!N#h9-pT_oI`0yXey*uu}*B}Jq=+y*o3v-Nr6!W^r3Kj`lTyUXzd4n(I zT_V5;2X!IfCpjQA>N7{oeed*c}XpkSHLA|z9@MZG)XH{7)ZOZ8g#O4@Y@CE{y! z^%`m~4jo0n@Lh2^p@yaiZF4c1uEHb&hVItkKq4-tL;?eoicdg-891W)_)*%Eht&=u z4ce;RRx63_YumR5h^PI)abL=-XyJG<1rJ@2gm}sZmxw3w8U%lWM7| zuzwH331wt`u`=)wc_`?}!1J35k)MuK$7QQDtDZiGVbKKR6v@LNs(?i8BOCJdSEPMr zvAvue=Fk*IJ{NTp*!UDix8SPubuEF(b?@hJ&5yv7>klPsgEV2An52ID)E{|IGM_Rf zcgxJ7^uTb}-mg;~Z?pMC<`te;bTjD%B1iZOYX<(vAon(zn*7!(FIo4#k@tSWanPu} zz?;>k8u+LRz6z-1@=I9g)q-=aMX5kB99gH)hUC7Eb}Wjvo9Am3ee+tXa|;1%=;wNO z19kD{3-=GhEI8$^46^IA@nM-!8eUlg)Yd2LA%c-)FQ|;SX{95nl@ILeB^#737aT9` z;_s8<_6Kc?VY$yLFzX%Y6%*H%GNf}`;HJtpFxCakaLt6KKUm_Z3ssNR9u^IP=DTz@ zdh#;pyRai1V?z+VT7n%aIC_dK9fV%e{Bc~OTe`eP0*prpfcL*e+x_=dMHhPq0~<3p zGaGsr4;L9g=D9cpK<2q<2KkZwJ&-pGmRykC?1ljBZ|{FoivK%WLsCpk7QBZE2C#Dj z)UB5%U?~fcQK%IupxBzCoVg6102YmE>N$Mj-E>Zz(zSiYIKf&1y+uT=-^;6#bZC)2 zFW&c@TFe>;WnaH(v7_N$HpHOfff1~*%$&2>`<`0&Mp*C%Kv)M1f(nER@aW(3yTSj@ zzy9_O5$ILux1WE^_V!oT{+6)*AFto8{VxjguV8>EP``s&0sj0)M~sb}%>X-S|GX0@ zpmIQ_y4poGOdWup<2w`}nczRK2mEXd$ow~eiH((+-9JL6yv0Nm1PvVkE>Hq&$6@>d zLksrSkAJ9T05L9qLH@l|fBEuT$w&eeRDZmg|95cvw;X!EF#ouvi4*T+8h{@;fE}t| znBQ*6@82-LTabT?VFk#L%V2WF}V05PTi^=b^*0z8oY(VPD%+J6+!AMWcP4w*!A zFMa@&Zxg^9!hdmobEqHChW>^|9R*IN`6##H-of!z| zSH=GAHc9>e6lL#V=4ABSZT<=DZDP=WI@TDl9rLHKf2Iljy;pyhDf1TyJMK?GzssBX zmi0CzKgLR#YA`t`fY{$~d}exd(7W#m8UjR9Z@e}VpI zEQDXDL*9blW{UU)HqZaB!GBN^zqRl-iu*4Mw8j60h2QB<-;&=3Z$y}H z>2ITy{-T4`{8#jU#VmbGejDWP7nz{pzaalpX!jQTHel8-EOqODf&IO{=q>tf@Qq(+ zuHOFw{VzGjTkhMF-@mx1!~X^McWQ&T9df%<(V&AI<$`bA2lt|7G|6^53@m7mfI>qWYJ;u9d%S?|*69Z#BZd zY#OcoA8h`|2LD!J`^#R^`ro$qpSpp!a>HN7t~dX-vA^sb-e|Ud86?>K+Xnw*m+@Ap z^vhcM-ru(N7ahr4amX)w$%p?x?fpgP@>bIE%ZljH8!P`lU;3xO<82r6cBSzb6y*MY zh5lpR@h$T0B=HwA^Z9>8{$a}ami%^(_=|k|zmxxG#;7O*4tRW)+(_Vi2 G+y4jFudKlU literal 0 HcmV?d00001 diff --git a/python/tk-core/requirements/update_python_packages.py b/python/tk-core/requirements/update_python_packages.py index 77c5e684..abfabba5 100644 --- a/python/tk-core/requirements/update_python_packages.py +++ b/python/tk-core/requirements/update_python_packages.py @@ -88,9 +88,14 @@ def main(): ] # Make sure we found as many Python packages as there - # are packages listed inside frozen_requirements.txt - # assert len(package_names) == nb_dependencies - assert len(package_names) >= nb_dependencies + # are packages listed inside frozen_requirements.txt. + # Count .dist-info directories rather than package directories because + # namespace packages (e.g. ruamel.yaml + ruamel.yaml.clib, jaraco.*) + # share a single parent directory, making package_names < nb_dependencies. + dist_info_count = len( + [name for name in os.listdir(temp_dir) if name.endswith(".dist-info")] + ) + assert dist_info_count >= nb_dependencies # Write out the zip file for python packages. Compress the zip file with ZIP_DEFLATED. Note # that this requires zlib to decompress when importing. Compression also causes import to diff --git a/python/tk-core/scripts/tank_cmd.py b/python/tk-core/scripts/tank_cmd.py index e686eea4..b43e0dbe 100644 --- a/python/tk-core/scripts/tank_cmd.py +++ b/python/tk-core/scripts/tank_cmd.py @@ -8,36 +8,36 @@ # agreement to the Shotgun Pipeline Toolkit Source Code License. All rights # not expressly granted therein are reserved by Shotgun Software Inc. -import sys -import os -from html import escape +import datetime import logging +import os import string -import tank +import sys import textwrap -import datetime +from html import escape -from tank.errors import TankError, TankInitError -from tank.commands.tank_command import get_actions, run_action +import tank +from tank import LogManager, pipelineconfig_utils +from tank.authentication import ( + AuthenticationCancelled, + AuthenticationError, + CoreDefaultsManager, + IncompleteCredentials, + ShotgunAuthenticationError, + ShotgunAuthenticator, +) +from tank.commands import constants as command_constants +from tank.commands.action_base import Action from tank.commands.clone_configuration import clone_pipeline_configuration_html from tank.commands.core_upgrade import TankCoreUpdater -from tank.commands.action_base import Action -from tank.util import shotgun -from tank.util import shotgun_entity +from tank.commands.tank_command import get_actions, run_action +from tank.errors import TankError, TankInitError +from tank.platform import constants as platform_constants +from tank.platform import engine from tank.util import is_windows from tank.util import sgre as re -from tank.platform import constants as platform_constants -from tank.authentication import ShotgunAuthenticator -from tank.authentication import AuthenticationError -from tank.authentication import ShotgunAuthenticationError -from tank.authentication import AuthenticationCancelled -from tank.authentication import IncompleteCredentials -from tank.authentication import CoreDefaultsManager -from tank.commands import constants as command_constants +from tank.util import shotgun, shotgun_entity from tank_vendor import yaml -from tank.platform import engine -from tank import pipelineconfig_utils -from tank import LogManager # the logger used by this file is sgtk.tank_cmd logger = LogManager.get_logger("tank_cmd") diff --git a/python/tk-core/setup.py b/python/tk-core/setup.py index 43b4f24a..01dab5fe 100644 --- a/python/tk-core/setup.py +++ b/python/tk-core/setup.py @@ -10,12 +10,32 @@ # Basic setup.py so tk-core could be installed as # a standard Python package +import glob import os import re +import shutil import subprocess import sys -from setuptools import setup, find_packages +from setuptools import find_packages, setup +from setuptools.command.build_py import build_py as _build_py + + +class build_py(_build_py): + def run(self): + super().run() + # Copy requirements/any/*.zip into tank_vendor/vendor_any/ inside the + # build tree so pip-installed packages can find version-independent + # vendor zips (e.g. flow_data_sdk). Editable installs skip this step + # intentionally — they use the source-tree requirements/any/ path. + src_dir = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "requirements", "any" + ) + dst_dir = os.path.join(self.build_lib, "tank_vendor", "vendor_any") + if os.path.isdir(src_dir): + os.makedirs(dst_dir, exist_ok=True) + for zip_path in glob.glob(os.path.join(src_dir, "*.zip")): + shutil.copy2(zip_path, dst_dir) def get_version(): @@ -40,7 +60,7 @@ def get_version(): if re.match(r"v[0-9]*.[0-9]*.[0-9]*", version_git): return version_git return "dev" - except: + except Exception: # Blindly ignore problems, git might be not available, or the user could # be installing from zip archive, etc... pass @@ -97,6 +117,7 @@ def get_install_requires(): f.close() setup( + cmdclass={"build_py": build_py}, name="sgtk", version=get_version(), description="Flow Production Tracking Toolkit Core API", diff --git a/python/tk-core/setup/tank_api_proxy/sgtk/__init__.py b/python/tk-core/setup/tank_api_proxy/sgtk/__init__.py index d0c107d4..1ac7cd76 100644 --- a/python/tk-core/setup/tank_api_proxy/sgtk/__init__.py +++ b/python/tk-core/setup/tank_api_proxy/sgtk/__init__.py @@ -11,6 +11,7 @@ # thin proxy wrapper which finds the real sgtk and replaces itself with that +import importlib import os import sys @@ -63,4 +64,4 @@ # prepend this to the python path and reload the module # this way we will load the 'real' tank! os.sys.path.insert(0, parent_python_path) -reload(sys.modules["sgtk"]) +importlib.reload(sys.modules["sgtk"]) diff --git a/python/tk-core/setup/tank_api_proxy/tank/__init__.py b/python/tk-core/setup/tank_api_proxy/tank/__init__.py index a02f7590..15ad0b7c 100644 --- a/python/tk-core/setup/tank_api_proxy/tank/__init__.py +++ b/python/tk-core/setup/tank_api_proxy/tank/__init__.py @@ -11,6 +11,7 @@ # thin proxy wrapper which finds the real tank and replaces itself with that +import importlib import os import sys @@ -62,4 +63,4 @@ # prepend this to the python path and reload the module # this way we will load the 'real' tank! os.sys.path.insert(0, parent_python_path) -reload(sys.modules["tank"]) +importlib.reload(sys.modules["tank"])

    ^NcB9cg4%K6gw5_V#0b?nTaA1zq zZHSYqI_) zzWGBsGyO?869yq-#d3d)|GlQ?|J0lxIPo9N_e<9pf|CdZt{fRf2nxhu0tX44!f^yf zaU3UBR7QaCm*pYJPBypn7ry14s9iuafwr!(4BWcrQFw!lS-Qz?;$PP{Q+xHs)&q}h z*leYc?lSS~;28Uzu?Mzgz*fk)k>!11TbgTK6|oh4 zq}1Mj4{s;T>&VR%4%!l5E1-<`D(#iSD^n1MtsE>HesHuP)~J z8PdaxKCi%U2p;CnMZZ={cYjsCf(o935H1vn%H5jpdte;`m5TeEh&j)%KP7Y6BZ@GPAQ8H*K z!;gTQ$efDs*rz5*EQ17FXO~Gew)8m0{%X&@eUcRe{&3j(#iC1|v3iaLSvwfvq06o7 z$$p*98`ta3_UzS*$@vwT%LpKt{5~`N`7dqM8=7Nkx@3H^LR#)zXV*8DpW+TD`{ANB zW^hIp4^YX|v?#^^OF*>0+f_S7>mrf35{mvbZA>f#rj;Xb(Vw4)PBy&;JNSw}D|3fI1o=|!WILu@`SJcS&bH{b za_yMda$E5pFTb4tuGhhAjiz7wbs*bm;kPi3M7y~;vgwO#6YrsKv(13E6M>a}ufcF- z@L{?;Wd6<~eN$%MMVGg48f{s>H7Kt%ecc;2D-UQp7FY+s@W#b4Wc#>2NE+?+5ZT9S z_P7l1)qyLgC$a5hVqI$r{v~&Bw<104hef(6^~RO;j()G|Qq17(@Sue5PiiOQR;*Wl z?%n;zkr?_AlH!q664r#zgO#3ww%aFE)fKQQlYZh5PM`GYV-9SE84g4p|{#f-! z&4It-=HEL|P8R}qHFSK|0e@ki7s`TFrpSx{(0fX(w0lilZ*2soR(Q@I0YooSDBceT zt~POlr|X!x29s>cio>h(aa#JOQbSfvuOJX4oEBLRtzfM%NUD3q^+0$e#jL!z(JM8aRUK9a{by@7*>q6{?ur(JzMJ3<$Y&OlnqHIixOl7 zQIgwX@T@eDg8&}fCyN6YT=oMmwjXeTL5%mRHR~xqOHey-{lOCr)8iDKr{LEdAH+PhgyVxT~=U#U0!uu-1>(C_R`f&jh8_N-qAu05HU|+ z(zf{hj@EN=wpX+T90Y|k2Iu5CZr7cHc2pLOY@{21f6-P_KRS{)%J@lPYsVGTs%`bG zJA{L-c=??A2NSqpIX2O`IEK@aD?$4Cy#(?rNwFWjygyZ}0KbzIW8*%^&~T1rG8~sj zIqHw+K=gW7Xul|m0Y6KMeW6SIjfS7*;anpuAB0NTo*z{oUWF)knl@kob!D+a?ga|j zb9u(*0HR-1%)rj_1aysPdmb?;ZR%6UDhR`xNU*fR+kERbvZ+31ot?;P*w z6k4})-`^w>Oir-!BykL)((ESM_6h}VFSB+u3VE~d=gIZ4!3*Cw&cvk4vqqG2bue^Ka9}iwwbPSPnb7y%2<%KQ_P7D|!(9V_d&cxArjJ4( z8aJtkl3^<{f9Yipdk~2=62hdu7 zJyCo_E~#56i2S+@`t`kVy}~1L=7mHt6T=b)u!pK^y(duzdpL^BFV3{`d(eMSQliz3i|5vb-o7*d1} zdbgaM7&I?YT7uMp^>X=exjIEforaVxS*fCKIzUT8VcCglR44v|P<0Q-pj*JPaDT6F zoEy=AiWbMQHkUYuouZ*1`SDtdWtw?o7zPYr(Fd_(XKN~v_LU#_zn^pdU-nYukLE`f zR*`+zDuZyBq?z{Eu?w%Lu-U7TbW|Z6#!&tUa*-bzl z-TENHJ=GlVerlU4`|paPqIAoofYAo0)_JLD`?qpxINmh!Qglz0P~V$;L3~GYyKelt z?5*%>uYBDoIkgqMVmmNQcNzK3J@YTs*I9D|XXy`HbdB~bnV2Q2hAN#h&C_RB0ZrmR znW?oWXdnsJ|5#I z>CXS`F@Wtk{+q}6B{Ti)F_=JOv|lpQAHRWhQWu*fm zUGQ}8WeJ2nJ$8w1x5~jGy>5UqDq|UKPh4USS^8WEmC~bA&dMgIJ|ojUyi*9*s6%yJ z7Tu=?r+$*XIvL$C&28NWz#+|I?QdtDjsLT~YRjVjua#RG?*EBbX1RZ98HTe3D-r%V z{Qb@GAEED$SHFio5&qQ$2w6EPO5!L8As~nn>yH2Bso++W0&TrrTj$pRP#mFkjPPZ+$54rj>jQ3-GPVW0L?q9~q zCM^}=dznzU>2ZR8Y49QhwIzddJp zitB>4w+c$%Oq7KrA6TTy3kua{w@_3i!k- zeDhA23%h5@RqK)@1@J(`9PBH<}wBqAN&N1ou{RM^_xF&-N? zJ=i^af3?dcbPR`QHUGYxZ%^QHuw#;aIM?$-6pBkKlUhDH;Q74V=FTYCy& z-8WRz0}0;>uU+aHxF!~-4v3%eQHJi(Y_C6fGdVBPvGB;oj@9=)$n^p@1-Tta8y#mE{mf=|?AaxccZKtwNkG-wRVwL9tv2}p83-3T#0oEwoth4ASz zy1UH8ILLEv>J;Rpl26|)CH;*}jM;@Q%a?aX- z0;4Btl|dKfGoZ$u%L$yH!xxTNdE`QN!lhbpF-Tre4LTsH#GX3NG0vb=CiGJG&YoeI z$^Bxv0nP&H#mY~Xc4&^!Ili|qw0G(^Yk4YfsYP?+A6m}KkaV7-`U=N z+TB>$hVE0J<|uQ0E!C(132Ehz+IrJp$@PBkzxQ=Cd>h&9%c@5&1~ZT0iL@03PsrKdKzXEu0`crOjAO0$rczdW_&T3##)(m?XW&fxtSwN7^BEzPWfwqR+P ztv%|%Fh|32Rc+i8zmL054`6VufVxk>KOjEc}Lp zdET?{wC^MBRacQi3mMg6<%pd;YV7$Gwy-)q5)O2QWAEBiRstYWQPHJWW;-|3hh+}q z5?Ezp-n#qae7NU?bbLLpi6362dp9KoF`_Nswea*J@GSjOj+@0G_d^wu?r7CYHfRxLe#}o8^lLxi>MB2 z=}N@g_P`i6ViB2-kx*;-Fd@%qel)4VKk7Y`q!6K90n=gye+9KNa+7J=RLOT^i0E5u&9@TZcGulD z(4FdG)CSZ-Y&*SQDd%R=MQx05MQ2+X-R}~x>;2e{@>Y1Zl}jfZl0tUpM3UTHz3>eW zqS!VJ-7OcteF=iQt|zpAf^UkR>&Nvepzwdg(XI-R{0+-R0p6em`9ro-W3t$|^-qNa zeMo(^^OtZ-7Ui!Juz!eTuCv*fsS7XI5dO)hP;a*5@Bk(!Kz6=Sj!lh96s&pkFHB$o z4s1q_;Hg?Cc*OI#7Z0x#Zr6tSEYuC@e)utdX~*dN%s{mXFdPlk z9OWkps!bo)KA!X6JtpvXp7Y;5Ch&Kj^WQz@*S3?+-$#r9t=5Ta-_$dg+Mur*gSAzu zz-UX7r}JA#uw-u8sJ_xAara>AA?KbmxmX3N{-&bF>&$+h^>jH$+^c>zTKYeyBv)gQ4aD+ zdzV#Joe7;jqj!jRP^RsA=h4tlhmKmK#soNeEhGS4IvA^18G3ZXb-XsJ2wLPJorkBw zJNoJRJQH@@2poegPu?M*VtNLdMKu>4Cz*hM3ps( z`=StZF&`_+?c&iQ&dT|9YteVsmDJKaGMo?zY({M7Xi zo`%z{5G(pzMR&_Mb6R;(nT24|T&^9c2CRO0FPBH*_y_64qaeEwXF)Q0Q;$jut1BahZ~5)kT{i5Qv+mqnzs5=qu(%Sze7@3I*ZmXg!Db-IWZe?99r& zAE+`^t}0LE>?A+#6pBoNU$rs7Tu5qpM;8k=f~l~E_@>G)>0tKs+lq|>!EU}8TbY66 z!P({oN_X3`$W+BfdWOG151=0le{-=DLyXP!g{bJOdl0zO@V5JjJh{*mCfF@Kzn17r z#0dObZFc36i>j0a@rWX?;5=@92ickc8D@+aIU4wpkc3GHFRn0L zvlMvG6=Kq^G-8(hAfFYI@zIHzMD|9rS_Yj$8k7QsyGw)HHes>;ksw$z<|=P4(|HC> zpcan@w6vw1iq4qTK~W-eXhiGniEXVSW%V}p`nEb%^FYR_V!=uX#xHZwwH! zS681>UdTEo?q?6F<-4rpck~fK3Vg(Au0Q!nrO%M)oCfg1Ji~{KHKo0NyCI5rpi>2R z>9NiX!ApP;(a|aOw{tVPPRM5rydqGMruWmVG!$3|Lv@)Do1DQQ|}H3{C{NZ^K-tb!~z4dl-Y zc_ir*UE~UOdcq{#@xqFs)lwxkHO^`~rR;ly@AnCz7$;qF8h z#v6KssI8g=gSW-Q@U9IH@9W=%rb6<6M}MgS&-y#6_|XHRahGSta%6MmFsn|ebWZ<7Z^XEqf{^>J+eq`Y9Kl9f)5a5?2h(r*P;g=|)&8+s!vD%2= z4_g;i2Cak>jW{K3-w>=7WPYMbR-#(0Uk(ydTTO($E$e^Bcf%F)Op+oyKWlxC|CmFK7_Y zViXy%&fm%#{SeA)9HQMEqgRXgFQYO-qW^zI<^OoJMv zgcA@!k|cyf3-CHL|_6Io_2t z@ZH)GM7MB>CtHEvCaJN;U~J1RZ+fX*lX#@*`Xq;ne2|4yXn z{7ZS5sd3Ec)1OkF)t?KvA2i2QbV(xs9h|O~r5u{G zc6eD89`^|7DjLVXFdnQZ<|)td!#b2ycd{`scaIewJpU<=Abu6HXam~JX?fS-_ zKBf#t5E??;sX+jIUL-6;@4a0(^~grG z#(0%y%lsN7!P>AqeO(2knVuyA4y5Sc>ZR$o=E$S=y-u2AYs2&c!7cvq_5Dz$_&KBj z|Mtk%$wz~8QJvdQY?trXW^HjX-Kj%OtUjAx_O@pGE2;i&e#t-|t6)7(SDeao+?g>Q zUU037vK^b@fCy2>H8jr}M}M5cKAlRqSe~3)@HF^$q5HbRd$%}dfaGd5yBfJv{jJXH z?~T_mbQYbf>d`=9wl6MVB3Crtm12Pc=*`fhuP;TdKA|wTiF`00*C%}Ks!J)tm=<%PMsz z^-T*5EUB@Gc<(0v_%I@DQ7A`GWv)5V{y+@VFgTY|j&*a0#djw3glW6&$}Ye$5=~Lc zfJcBVo)j7G(lF1b!Vt7wmLpt1=Hmo)?~qI>?i#bNrz@SWfW0VYp+CX2(7Z67 zJkC=hHro3{z9AB{6Qhl(|d4Qh+7>`UUx7vyh|=LA;M>a){zik6{hG7 zwEw@lCG*qM>!os2il?#>dWW5zpZZtd?9f4 zM-?}xo^sVl&YmeEiE66@ThTVJ24H!Ld?KGuE1_%~@aCaM@%(t5U`TS^*V(NbyS|9b z5i{S0bXq2gHs~%~;Mw0ffs7fX> z9Rg33{kBF&JEd<1K|s!tIC3F?=aJ-w78)zPQIYu8*U%x%#%eY*L~pt&jND~ztH&W2 z$|uZSUtE!=M3oOl&tR-`BY|geVk_)w(gc2>TUtPDx5qQbTPwiT2&BG}~X2p{M4rnd*Qf21&y zhgNldR&IbCj_-F3P}gf(WXb%uF(A$U%cAArUxKbV|I1>vf7$%H32}zS+v}&IYZ>;6 z(tf;ZxSO|A+I>QN|M@H*`0j7a@N1higrV@t)>lM_UJTuwS(6ha1Y#Jp{s(^D zphs>USGMZ0k12Gi2Y)=o!mmZkUki0V2(_- zPr|(sZ-sOixfN65yOw6O3kXMh<@k025dH7?ucd>d4bo*lq=QX=@aM?5@+f?ZMOaN9 zES}WPpW39+&slom7aE_BvQ=Ta$3nIVf)iJ+;r6?)665N1eD@a3%11!h>ldvXx9-*} z#uMBbva~Xv^>XD`d^4#W-F_5K%b>9JAv3nuQc%4t$-YcO4nkN`KTi>!jJ^c*;LetIljv!hq@4q5RYAvY-oY z9Vix0+3N(`<4K;UoZa83mi@uN&mrzXXL)XiOs}4{oZ45g(I1b2sojK0Z)75M-edN_ zG@|K~V=>7S22}~@A{iHH9K8DT64dZbKUc8IKOz#0$PTog7Ng&fNhTaa5_V#A{rM%+ zf>SM%oC*_aPJnw~Sv80o1^(US`XAZ=0Y4I{w1}yP6}0$4PF6?Lyx^~RIzGTVrujesRMuu@u8#93pU%MDdjp zgBVIs7)jy;1|gd_2}WWoEJR_9`0_|}<*+N6MZhiGteg_ZH_=53-FPRycc8%NcHp>% z-A#-v`&z6F*#pVW0m5Y-Y*&M9nNc4oPZ?Xv0kbGMksjrB?gmmdSil{xW(1x;XXwz_}L?{qSd7Sc#>Uu z*K?CO+&eWuORRS5{N}&jrU(q8EYP>`_`>s&CPJ4Zrgx;NDinqUXFTB1R0%o3?ueDX z5?&oh$sCl-X+y}1D*c@R2!u;)#St&7ejSe4$(PF%?!+_H5?)4`WPTv7LN#-iqrVi2 z6<4m=hezX;Wunk#?n=&DWFS#XmE<*0;u;>eO32&8MM3xn;q!fT37M)%K@qy)3rC&~ zRd9B$xA?&JGCJBkFhdC3i|rC*6Z@$7yF7F1*>bQvg=!&Z&f?v^26=fdrJ+2LY;v%i zSv(4taD8l5z6ii_&C&b2XTw|uMOnK#PwR3}L$=S13*sQl@F4SK!3fdTU#f1+F{od& zltUr7J`0P_1BZA62Z?~ZeGQh@QO~)Eu2y2cP?1XNDq69|OTLc|*GZ1c92D(xy2}by zw)P`0SRIg$%_EK<*;EN&!y|BIMX}XP+3BK9mn*Nq;*sr3g*qI9#KnVykj+GLof6_) z!osw4zyx=}eAEe&?WAW?cd2K=kpjlgJ8Iz9N^4oYZ74F*I5F$Ib&I&a)S!LELBbY~ zsto~V7GAl3j3(iMBZW#c%2Kv<2Umxj8m{f_VfJum4$>n-&i7L;jziuyxX3kXT*s}; z0_d*_&41aS{JA|D_@KKqG{0h0lv-^bpZ&!}%kW}nq;OyH#BT|#G@$@-_E}Z!qwFca zR%#XxeV#Oxyg1ooc(M&)iBKr)%DyPHwy)0O9z?a6?7Hh(VI0vu16)%ebckXPO?75dK;Q4qwr4BDJQV4{AOwj5b zo}U!Vvd{}wpI1R|Iefr1FMXI!`_Pg_oGeDbuPT24CrbbX>sBbt*`7hfxXNcnA7ryP zaXE_0oA*2@$TPSbZc?ctroZkAF~AHcMz_mLIdwv*_Q30M^N!B~2Nx%$wE8xVxJXrR z-ZxM^CEWQU-7U|a8I#aK329p;KobZT)prcBYHn9R(CB*MT;S-G!}g=PrL1b2uf;Ms z(QG1=U&!Z!$gX3q>-p?!t(;#?X6fx=oYS@#FyMXgvvR)RHy^x8xq7&IH1CnegBmTv zRind}2s1^CvKYR}6+5~VN7>@rvFFL*{LAAEphM+PQL{WIyJQ3yi?cNl=q0R?LO43M znkhq4Ew2ZUE2AGAhVn4@)AfpKaO5Upi~~B7#ux=x91?Ir^W@0qk>Gd*^(m>~V2XfF zJe4S^(1STqYUe}#Q+XO4cMZ=BX zt`j53?zoU``qR3Z*u>oDh2| z1m3=DjBg8Cx$wIF^&hpvENE8~!#2YDmz0#RqWwn?jz#%*p{K>u2xOZ85e!3tnQXO2m3xFQk79vYOw=A= z<91n44Qk)GmZs6i*eg&gfBVDHZHPyyjxk-*Byg}Kx8wO0cBk6NI`-k`b2y372`z5A<6oi8mg~BKdk}w64D27rf24i2wuy4ka z_^x-ba;|hgN?RG))_lB+MX%ft+%ucWmN@+~hHWh^#3n@rAzMt@0!O?x2Cvt*xx?+C z4I#F;1MRht=&n^otYPSPl`(77fvN4zO%-83=1b7MMiJgtNbCjyRJ0klC*c+q*X!#F zFnEiT>y6p2(zQ;qGEW%X8je@mxd!7kysb=-3jdM@<{J%!e`HG4OZBEMLw_#n0S{95 zOTQV%`Q$fadgdfA^zBF0$KCBWBjD)b%|7hr(S>@4S8K~=O7U|!CrWuTrVoEx^5ER9>Ue6zV|)c!=SSZbbwwq(~gG!h+@1HjZ$VEJaocWC9_ZGi;~+G)~BF66O& zzu&`~W>KDNI{rk{kl6MT-dcLX`I%9KQ>XxTXqQj+eWE)HrNrVirWUThgh9moC;{&} zq*Y?v9MA6I91EzM+x_e-lwm1FFG=@G0$$XL+zrPK$M zO|d=9xR56}C|>2x%^>b!D(FE%rxFCvQ!R3t2O5q121T^1!j)}sy@)?Lo)>~NXAtOl zxiRVhgOGTYc_le2&HS(zx1|Fy6VBQ~uvHtp3dPmctUTWfR>y-XP6M@fe>4HAKB}%yI z$jVcxtJh7+6mn1-Dr4~{v-EW=@Y}&(wBT)LFSN;8Brmfe&%H;uqydjTW`wA6BZi+E zj&It=FrGqq;cu+yz1nNsE3PKZy_mR3C>{xcSN+l?mOc?{bW~X2+Aob&=aO#9BdSiI z-EF-$$4Kni@dYp3F@7)9mFnpk3%n=TtIkF1`hXMW*=D;w0dRRd+X%yfvU*%;@bRfQ z^w6YK@iv^44A1u|OceM+rk%&;_bFy5_Br~u+%oR|%?dK$ARkY(#TiO`#(d_TPeI0k z^DJxOiPDV41U1?wV;(~fSLmPzC&Y2|1AJthgGLunQ~=cwH(jM5aiKq^g|vi7U9rsN zu>ST5_H|gd{p@(*&*wXw<~g0hQrz}Y`egVk+9%4H0LIsRa9u|r;Jj8)uAEPt%fFZ4 z>BNbS%wQG2LP!-ac}g``$v5qgIy{|peeX^7;1~?x$VUvhTmwOaPl{K9Xm{bB=G}zE z(e(+BMh*jg)GR;CL04!JSAnq$Cb9fm9B2N4vw-Fr2WZ{Un-G3OZI|g031`S9LGH${?<K;z&I#^yVuzdAO|)eZb2) zZ;S4k=ueXbr-HxpE~e6*Q$@!5$E<1247AzHqzP!&Vdf$&0XaB#i@JdNfDG3v{|7~I zv@WcWCw{-u4fzb|>xbZqvA;&YH|Ugv$-k2HkD9Z1t2r~=eZ)G{3XA1)O7wql-XBTQ z-_7|;(HpgrPY^*N5Ck{kiGJB$vZAMzyP@cI*qu;f_?^#%9b!$zNzt+YAKwvLot18bk~uTSlX zjdD^y+Dl|EIhTXDU?IVO3Dt7n{9&=NsR}x*8^hWnqx#~mi0aR&L}j7t55Oc$8(cNctf{PBt zcQ<#p$?o3#lf=}AjOl1NG^jZn#M97C#uU(&_2T9?@^P_bnH%?$6N;rN*5WT(nIpQx zkDm&fg-vbxp|S3V#%cO(savTXHHR1L7O+ee*uT`{mAl^QcM%)ln~QnRIF-MvVYzqV znU;L9ZkZoN%)vgXpw~X)&Ff^&IvE^X<(~`+|3Pmutq-qo9`1o)d-;F%QxvGLK5%>i(RA7nWhJ#-xPQbB8m7Yoc z4zqdh2Ufhi?Q@k(H8q3HyL$9zbz+dt2ZvCZip5~egE3pc6S6dKe0a(IEa0M>5_hOw z#(Q#jOy}2ymXBT-aFg4m_?>Ri=~jY`lvHYZ&YYwx%mug*1=N6!@{%az%zz~!pPtXR zDl^r{9@{Ct2bHQ$>}g&65%Lp|^J>M)qA~VH?39E@z%C4x@<_&~PEtGTE#5&?XDr(oxDCpj9tT##y8P#%D)E4RXob&kZ?gk<;_n|SxcMLgZ~ zwKX%ZgBfF%nUYShvJ-j8uEqnYRLwE&3g<-#@W3ROCWCJFj}go)xvAWe;Cc6R5$%to zBrIJoO8Cf5)%pHvPyAW)45@_r*|Icr#u(sDHrTNEK^DBI>J|FXRBKiUZh(RD`3GSFBMllb+zCq=xT`pH0+xzV9Xh%3J z69IaaDLwC6&#=}d$$@UhT@GhtZ=|pH;EFh)$Y_Z%&6Y(c7Jb{fCJCBN)+@&CDsn^2 zoiHAEE>4s;&oxwlw=lHA>tdk~Evui5hvq9wjF~s1t4!@2Pw$`|y*OOU`LsFOlqNtE~T`UwS96GUOnn z1K%+`@d0paV7+x6tCW2U;X-o4G5$d-C~M;0)$e>p4+T$uHXVsbcx+Hiv1#r8A%8u# z(UEBY*)s4dyn2GaKDi;cZ_qquW5r#oenDbbd=~Uj;{0fzq$b*_HUz>FXy*>!3>76Qc48KjQ60+7TdHcb*1W74NeY*452$4wHCP6d_<{gx zzG&?0dJ~dITn{fD8Axm4>QcZ&{l=$Viam$BIi)ouIbBWa?Uk+kxIsJo)apso0K-7K zs+--ja%#t=gqd0m)*=fe|7M&U!hR|-eOpzpXsRp^=D!ah59~Hpzwzh)`plet@Lk_0 zQS%!Y48d>K+7C(9|7QIk=KuWO_;#HBi|K_QK;(b=-d};_kN5pU-j9F|gHD`4D3T&! zoJMgPBM(JY7(-~3#vvNPh@W~+{|+0`9WWlfXf$~=Ucn?R2$%Vt&D0D4lPzN zR%p9%--F0(-r+8ya?z@B4)jF}U;V=|;GTbZE&uLI0lvPLfA^&T->N9TcqzZCp#1Js z!UKv#beDY}m@2%`5WU!vwYyEJ+JxCHE9%GdRi%w@uNcB&l_X$nfv%+7++5_$)udek z!b$}_44v;-k?X2tvQ}HaSkqG&(Kwp31Pxgxn3d6Y;QsK{>Pj8?MI2V$Y=Tr0~ z=n*!1>2gIZB@(An7BDDpBG)TlxY^5M_bviZKnBhDIEfmK<%7gj1NAhTH6l?_!< zygl+P2!^7>PaW#{^8Iw{0-}lDotXn|A*u8fA|@G zh{`|Q{g1XJ6bYde1n>MF!C)FEsr@H%-$*e6h7pv&aTxn)*YnPu_ZS%=hlXmJ91-o% zzfO;dVdz8r_b7{F2RT1F-sqo(=IB$GKKM8E38BeR%Z)zzvU_X{$%DHipCU{2DFtKr zr*0hVVft5mKRE`D_uT>~KjX{z(b>0$|DDkX^fB^G21mgrrjMuDPm4a)Wc*VjIz%zx z<8nMaP7XiEA?$dW!DjXDI&6^^Y*kBdUGWdHC&Xm`jUX3 zZ8`tsB>_LaroZ!&zV8~})M_O0a zzS2lcJarF59?5scQ}438CmFTW2m^;sFsL=wUWN>075*iofXKKT_AD2p=la+QfO&p0!TO3q*1<9Ii(l2QKar8&t(UN zmTo>}9i0Vx8$oJ3u-Q(5%&Ct+E^UV>`fi_5!>@oyxmLQjCq+Ia!kRFZNTLYwz zQ}9Nj!B#D=&OJG<{0d|nkSLyxc*W+)V+~+JS9r@fgu947z8c(4ZrRKrXhd?L*A-c{ z_DMdNotjE#H3YK>wnRlVH{(QE@RQ~V!0uyYuw7~R)?%@w&NR~K{0i9 z60(+0`5lhU#11m|{q#4@UP=tOFBMB6>S?C%FbAFKkqHRDQ9X05wX&3O>kjdD|9Eql zr(tQkJuu0l?C$1gUZI_*2H4cD4&qg;BME}h+Jw*qYs=CD-%xeRUl;w2C{M(E;ATW% zQ>BfGx+UtxK(2W_V44Zws;x@2b4hQ$2~iNFMjT>x{k2PHnrEE$2DPS~5GpKLVs>t+ zv$wXlrt4+CA_Kp-es+-8H>P1NtED?VfOg(!3FhsW7 z=l~>HZo|!vF^9@JjF@4EdsH#&CvloE$T5X`A@v=0zxh$IhZF(2$MHGHWg+eesNH{w zJi@0FcJBuT8Cc(tvOUlUw6@%E&5+lWB3wIZ-+@+09hIPzI%dnz50naj zt|=C!htxm$(T0W6a$rgr zIwnRARoUpX80_O%iXV!)RPvb~p^pSWiXMHE`xETgHT<~X?ay@d_k5BLP;d;Q>|FgA zH9?N{M-2W;5ZE6@AN(6Xcli10Vg;)fMQ{(t(8+~YE=v{K^nFRQAAeqa8N zwVRJT3?T7tzoSAZs*XM+0rqX)SJ~*RvVq}>?)XJ`#`q@4@O_B}_-n@jU4y`tW(7Uw zcEApM*~mHrOMAC-I>kGN!->Q@JvU_XF0DhQgI-+4tx~HOXQWx^keuy5y9K^ui9~5v zA68VQujY_|ie7J*7(ir$Yi=`y?}%4>prl+tVVJWHqTddl<&f*oJg zq$&6GvYpW^zGVX7&Tq-l--JQGPoyvgTqPsm*v6vgt|WUQwIoYra>oo&LRxGXyF;ql zE%zLQErdPQ2QJOSEamjEwpw`xRqSLaBbxg4Min6KHNCmCemFZC7&CE}iCFLO@UdyzhO5nrrtE?(@aXsUVX|qD`a_ zP)okor)!#kew@4tKOY~`Wc$kthSm8Af%|e_+Xl~e;2YKX5lLW$-FaS$LRudsD+BVG zb%b;^L-$pe`P5msS8w<6)p$YAJr)PAeAO>c#`L-bOyLc$}q}$8_q(mp% z1GE%gVoR@kl^bM84-~1*P0$pvzcQHOyk^UNFohmXXMuCMhZWzZ{!F*^dIxZDO}qf+ zq51syV~yr}yk=agcb_^ay3m0wL6~=H9-2SsF@FeF{{ry+P~>5Ppjv1UnF{dsWsbX?l=sPyN0I?SY8~$7Rmg4tK~8Fw=xV^g03ZF&t-ksG(o)! z1fC|bM2LwNJF;Bf<1>^fveKc=8v%naM9!^~*K(dMW9KnA4_agzGYyGl)-&3)W$0ka zsYTdJ7!=8v3MUNWp_mmm?Dzl>`oZN#`;vwePwFpN%}L}yjwPw0^Ij&26e_cN#fPC&80%c0m= zQC>vCY|8H-4li0RK0&=@#&Xet1ny7~ODr4IA5rE`rKM3*w%n;b}>(mZ2TvqaAXa_@`Wx zGqbOB%yS^7Th5fm#IK5@zFOZI0UvI12)yGp zF)7QWenr1AQ4lB9{!LKFznMv&1YPv}O{)9hHH-&v>-VdEz<>YYTYrUu|HEy+M};Io z!6fyOK%ih0r%@6jupK5M#10n`8X*r!grAxf5cuKcPKSqd07V>wAcy7vbhPRO$N}!) zPZ!UTblc(E&ucXha_AdC_|aOOeuicb7d`Aife>+6*2T#I2jLI8OFnQe{x}#AzpB;j zAPz&;a?{N-v{cz)^7>HTh!X(jpisSxD`|i`BH(UKMSNB+y9slJmv=e0IIBu z+wahBXJG2S3usUO;tt36-W@;kTO|-7?lY>iM&ipcLd|z9x*voUtp{M@3-v601y!NN z3zp>^O+cpVtgPigM>_5+y0Sj4)XVP;-pld*&E{v#cDCD>25gib(3;27H%GG*CQ|RCuE#}fNoNVx|=UyEMETA%#uL8xvvba zO0EqM&ncfHGIwM^(amYR6_5NaM0h3=C3TJlOa32IDX!#m<7SLG9rK<`w2|s5tq zjZwcb0u1)?Z1*=_SZO|M8y~9kx-L=_ywf4t1>VHW!+^oD0}!ZhUnIz^uKynHJ5-_n zU&4L=iCg~!_x*U=Kk8qRIE>R2j$;%A;V?yFBnFWfMj#N3;W$pBC`}MQ1AakrB*?Jn zXr3X6|3>kT_|*prQXffv8vV?}p+{ydgnn);5FO3o(MK?4$8|gYqLJSv{*N;5#|@N< ze>Yb?dcKn*8wkPwjZwbP$qzk3V2JeXi zZa=n4Y;6Bylg>W|eFx?P{!P&LMXCB**YnRo-%;FM)IWm0ADfm;! zpPjZ9vtfF(>|JKus7;>3FXXL&??pSlYIdyVzMGoY6RSCQC}^pwI-!m1_+j7tNud&8 zvdiVq`c@I6UW~KKib*%+k=?xJHf3I2B%8*K&LRsP^ZCj@3~fFJ^(>-yoR@g6pc$Fl zzUd8lBMDC)t4x{|C<$09H0MU3)@;0Acs^`EV?O%?EUlRa)Qg4a!tG@<{yRUa{neb_cJ{!B&Jo6q~;hkxt zKj+oq!FD6$XhPfrGDaT+7NtL<(BToW@#rXc9Of|5*JhXWDCDHcujB>EkFW&(5tjHU zG=#`U5E?y7C_B^MgYWS*KKg(N?1-@YY2;`6=P1rZhZYuz98z5AC%hh3G0=yW@Avu3 zIp~XUgjetzua+(-_lBm^7>Yk1tZ}|8sQ_PxXAX?~HI&?(zaA=)c>lczggv~9^5j?U zb{srZp$(|KNIZ|IxwmQi2kgfEE&zR~1Lo?YeN+MCF9Ogx0|R?N|8`In_#ec%Tw8Ud z+4w3$&6VFqdcIEd0Dl_kd9jz^ArIbzT|>m*cY!Z87Kzv7VZk0FMk0#VS@&I8j~n$B5wdr!DI%~o}uuXf;s9IIc);TTC- zC*i7PSkaOo_Y_mQ6*#C*(hG2Ip|jNGBLQZxuYKPWW^6C*!_K?~SHK4iPk5^Y$fq9kc->X=L@4u;KKyF%uriR(EP`kt-9khqwQc+uz4}$d zjS}eftJ~=iANG%{U&Z`tUTEs^Lgdper4l{9z(GGgS31~6nLQ8J#SXv~3Cvm$r{bE9 zvl!AMXakBwEq8aaS3{`=;i`o1lr$(ulB<(KUnja=Uo98A0=1}w80SnP(X7ACNqMox zWS#_o&RqJ=5!bDw|hZXE?Z|yAY&+-kIc*2 z!OqRn#S3KRLgGXxS(?YM@>rNSsgl_Lu~cG~TQYWHZJfr-;SOH>%Cix;{AUUz%QQDZcpE7|Hfc3u!}$lIFW z?+Qz%nf~Ign30G4oMVc@!+mq!&alWpa1i9SChSmymZ=*o8 z8px%Ap6!CY6NLsgmyipu(mUhGcq*AF5ra?$o@qd9`jbg6k`Zz3DRp{03kn04eRc$& zJ6-MLv#u9&kg##|-(jFh5V-yAy-1;N0^ zc1Ywl3wPM|4NZ9zZPvHR%`#a3raeSj zVhj3CxXv{*)2BP%_;v1EkLNn`rQM$nE{@ zH17X7!SqfwDXhKjK?ARyqd$FH?pEV`MZi0HPfr-hy7p{&Hes^vsMye@Yv4&I{e-*4 zk+Iy3ZOr;i^*BudE@8|2Yot%S98Z?%aLF7;jGw-*8zG5{`?n$IbTrTWfi~a%@7Hnc z{Cw5HZ|CO!{9o50{?V=E?_c#5PX6hN?_nZ=LWk!F31bjK;{*f|2u9;Omc(%Qn439< zvT2k;Pzv8qqOqT0$Q`O3La6XDY=R>P$lDPYhJGe!lB3HS|M>2~A0|xUKcA!dXj~sE zU!R)J(VK&Ox_^j|ybW@Ue+TF>WxZ2x_+#(91Hi*K>Q}BKM`ulVv~wfTaXo?_MViBl z`qQmL1_v4>>7#on!H?k@3^`_M_LUz`@af`7!cWEl{rHvyN7*UD4**HV{~e=$Nzu8F z9@za`pH5h{)IE6H(>ud`;%WtiLE;q@!9z3u(O^xT0dxC7y#~U*(0y zhZUb02sK{$1@h0>a>*I*Uo#{R|8t_myWFAM93nJy3}b&&ndYKRwHb8BmXId=t}?wJ z1HL;r|2wMzzF*E?u154`p7F%re+S35AOH%+^UPV|yo}*}msPrE!OLO?PE5`<#8m^! z@@_m*T7H}7aY41SHf()4z!Y`bS?3i3Ch+-`8@GoWH;ih|0^{K|Xtezzk;N3AFC(kP zQ%#5bEj<}J${?!Rsbf69yQGqijW@yA*uv=A)_LP+ehw8^Yt!&rb3Iwx(`AqqnoJcj z6e;S%wt>H^CjGJ6UaB(ztCsD*s6=u0?S0ObQo;EJE9)*iLwjmD|v`w4A zR+QXF1N$c6WD8Q-dN>}^Gr*xNM#TE1E`vbn*C&#LlK-0QyF6#lwCxJ-Jx45$c^BjA zWtDknINVNqD9{?Yv-k^ek?q?*3~B#7oc*&<_LDG%QY3!ZlpZmQrceysgBZETHJZez zLns=eF%l*)8v1BMQ$KAt45?$Z4kbTBd>>WkJvLAuez||{laD0x7m4V@jwt%Mc@lQW z-V^i@diH3z)6Tf9}B<0pDMps*iA2@J+ct*W%sPBRy4YrEK&5_-9&_u6o zoc(6#Eyarfsq0)rzK$v><@cz%O+p^LaMHM>(sYjk)q`82Ce&+xy#`4yT5&s<~dTB7xE|aSz(MqV>Y^H0mqn z(*Si&6Y%7pR4A{{3+_Qy)HyT$u&T#nXOxVmFY3g(Hgj(uQKL+h3D1PQ!6ZzcLp2tG zv}~QH+IWWK1XsnzmfRt54XXOgid!ZjUFNFgM^B!+$~od_ix?%l64Xn8UWstbNTYc%hb>CUaNC@VtVgoQ5RQ-+2ShLD_m7m<@oF}w z9(Ue=UpL6~vOWs>OSd7fADRP!Z{30au;EV$TgwWP0ibkYo=?_;l230rcDp*aPx#KQ z>HOU}on$0CW3jbXLB=`K;A>_S6B&x3A~QYCKkqS6FZ=+CWr5zfjE>RFrK+;8{n=6M z(=fkhIA9>^@p#xyMey-uLvHICJoUHbN*C7$ymRSijFAFNz0|zR%NRl2f{Bu$PCFt<8@_1>Bt@PouBA51z>l{V}(LD&$ zu)XtC4LZwuG8nU$ruceUU`!m_bKp+WYXWS}5tZz!B&<1@>%h2UeO0RS)1PnI)~r-7 z%JssDH)OL*+0ZiiF)Y>1W-jZH#{AU+EXwuIOd?MGgG*1z9ZAGUk<Hxopyjky(B;H>D$A5nv>W+)*D6;auq*p*3eTgkXsvj zA@6GkMa@D=u^Q~Zye4b65$pMo20|K6ozjK9>HKKK?Qzqgawi#CwQ%~2%&~4_V7lbyZLni>wx`&NR8K@RfcKrOYj&6DYA;WSDNvfIrMUA>-ZrK@-Yq7Cqb-l7DT;(B8it|6 zun5|*6-?}32$X=~pL0R#Uy6U6B6qS#7fp$YaeBMN@y1HS_@68V&jlcSmuP)9Lg z2VpxU-H9Mhe#SG%<3~9DsDELH*<}3TvPgPVMX1l*@JD( zyc}FG_@)hQ7_kyVk84Y|2{T(uPgp0>`E$8e|FK+qSn$5pbMzIm9HzOD|By%jVI0y~ zdHndyr|!ta-Tb?-dPtT5CMr+ygINTdvA=;SzOnlGLCc$2p82`3MDsZakxqM6OhRB_TW;WG*N1)At_$11Y|2>i9T=`y z9UH;Kzi_ycQ0m}@FVICp&6fP2%g*aI3Nln{gpE6dYvSjMgTa@fy2H7iI~V|4j0tXu zY8fXagojW_ul3(=Zh7g7^o{BL*Ke1j@#Op*>+CrPzu8HdL{0S}eZT#LC;s!RzqP3R z>B>LkzaW|*5CTCl1lqsQB!yGNA&-xs&|%s3Irh`W6yi&R@FyEZd@7^~_3=Od7~39$ z{^?QXJS@qRBVY7WW47SvL`kqCA|)Ra^W-BOfPI9claHwL9-WSgYJ433;>xziCE`~` zLMe0vxG4FAC*-KYhUrloJ+ubHqt9iJV*B;cCmnZa4?rJf>fo3~+xg*P+xBTqK6+M= zLpEU#g-0HY{wyN;OS%{wbP@h$BxGD;q~9v#Q7QsQTsbYS-igQkv?E#nu_M`WH$GR- z{MY7`V5f+1SjA0@@R@u0OmR)&??g@7DI@U7H*JjnZThTuz8!v$zoU%V)nY~UcMIJe z6|HJ6&9{#dz8L^tJaqZ>XgbmC-#v8y6z$B1YN@kie6`ShbAjlNKJr9?oi{rEeJKxV z>BIH+`kJ%fDP*X!#n;vt%es_?1r^zMEztY<(E@xgC;eAy(lm>MPOYw-s27u|K@Dxp zK&zcci+&*}>WcnkQutQzV)dRSO%C>*pmtNMB;@_U*X2oF5@I_G%~Y87grPV#%oE^7 z8LBU*J)Ex_F2+&Aho=~9f`-dm(toe$YotpdBF1sSahRr!%D|J?{(@I~hOH9;lzwLV zE%MM}A7(r*>p+Y5yjc@VntI}XVgz9KJayP3<;NG}ob0ngB2TJCUHRg3^#&L{>DSr1 z^=5T&{*sG8OVmazaBqZiTKsii^ zAL}LPJY7ANQhx3aKbz7_fnlI@bCQFKN`d*51Ct^?MSg3$qC^;7zM^3&Q( zie0^w1X|2VD=k`tabF0_tyKjoMEBjo^m`M2m(+}z6%_gact<1ny)lD`l)VOlZgqN| z(y-u*oMvmva>?K=L3GGadKOttK7h&G+apz7(R-z2DiDCdjjxi5>SPaRB$?mV_qd!P zC}#yK*-(ZRQ$Nik1=8GU2_6dry4TBvZ)@cOjvfJ|y#%HSNnID?gg1}axtvfdfxfCq z|4*KKe>4)J>gaJQi3XfJI*Q$9?8^(sB1tyrD8}>Pzs&cU~_fip_FPO zV>lS!O7<3}vDNpzy6@p7zF6(Z&kI&JCS?}yqK!;Y63qULEmShcDR7(sl$qHox)niYs4H_3Cr}mJ)$<2i>R%-zjn}ONcaNjb(a` zh0hW}2RBTD5uD;h_HseD40!ESGim~#Np4^b75;F(pWNy`3W#2c1K5C2QcfqnVm-U) z)$@eUFTZ7$L~d9C)}IY<#RI(?Wkran7Th-vfB1{ZdOJ_%;bi zYCw2*ef8ey^4{`mCjeSP;X%Rg@3~9UbjpQ=dt%-BtByE)#z(6uo?SZ^>Yz45o_ArQ zJEzdigTaDGU)0#kNP0l8je7x_Mk$c~Jzv!HW zVE8A0B}-;p)Dy7tKCJfcto3?7(82Kyx(nBG5TA{D)k#l_>*tnOa?*QDx{;)*!=6!{ zNB2qaX?-^wz~hR(pIP@h+HgPPk3|+(MxH@Jd8EV?f~$TWLRV=7Vhp`>wjBFW$SE?l zReQM^|3D!6JL{i6SOndi?|=Hfe)wO%nb@xlhyK}3equoM<5_<+B0A95ArJr~6pc|7 zhM+Wok~qD88h^?!cd&98T~Hq$34e?azt~{l$LLlN9LQ$JN>FP0Sgc*&(>vq|Hv(K*4R<}EPc~3UWPx~2mMf>lg`lL#JKPqV}4ECpNlUh zKfv!UKi@s5etYou$9_-LON(mr+gF>8BT=tz*$k*(%!!VMHuV18(*EwsfL|@`@2u>; zvtrW2Y^iHIN9K}yQ{&AnB8ITWYIJaRF79h}TY%9Eu~(V0E`^^@ z_3cR`?ipN2mbuDfG?U=6isePIc2vZJt!Cj{GsoZ4M&O?~?0wxA-78CW&K<)F76eZ7 zdpwcYw%Tj{)SMq`iV|n;w=fwglL{J&x^hQlVpS{5opsrChA|QdD*+-&j9spnX9?vq z%XcJt4r2GBF=!rVjtWZ14T-ZBL#ykW=g^|Iw$X(*kSzVa`uicuwtjbZJxJUh(z7!8 zA|v7YP9cfmimKBiDVlA`-M4_Q6( zh)T&v5ao-$=^jSO4_iG_VdN3>qV%sTgGW+pJN+T(6bQBStR}xM<4gFH%JO{BJn?5q zt#5+q=cnqM2tE18QcA*C-H=0I?P!!eItLcj*mwu{sxZ$i>eYmg<$d*w{aO{=8AmRy ze+)MNI`%OO+JlYw1L^$Rs{y`W&i}NUpZUce{jk7K{9+N_P_E*5d&YQAqSuq7cZvIk z7^+E;^XUPtY$Gr96sRdUH2^{`?e(2J8f>|qtO@DUJ@T-~a*FN`bUfiytG_2!ksoc+ zI_-o>YkGZOFOf%2kLp40e}$6l0wsi&@-1=>WT+?Y)|p5v&%1Czl-K_5&cA8o8oT%yLJV#u5ZT%r+i`x)CPxA9E zFdH%_f#oO)q^E0G0xgrD$}yt?*|f<m(Zq; z6y>EinBR01;DH5udgOEhFX*Wb#M8K?y@BJUn?RElPH-lg#NsI{+a-&_#c^h>OWIo>->AG#Lw4ZT1}6YAM5WIU3NNk2^8sGs?KJC(i9O zz|A+aobUJwO~cI@qlE)4*VIP&%H5;1gXXYPNpph1Mqm-s zzu03p1CH$sS9Ypd^ML|o_0ys)|Fun&RM?S?{n{^9KDEXx41qH~p1_5;7ccD8RIU=d zUxd^T^lW!tmNl1U3QDwRZ%@R>o3yI#^4gxlN9EnpjJWa%U=;jz-XeNy%2|k7SXOd9 zARm@-zIfXzLEAP7Qe$U}K`5z!NI2&d+q*wqN+St}aRr`4N>O0Tx~BO$m(^R!oJDW0 zcXAjW+I8N_SbbbhS-tN_r2X=Oqabu)VHDVR(cL+DLvHs_hjLK?<4K#VkVe;dl<%%*n1#@6nx|{ z@Q;#Pd|-|E=LC%ojwv3DJ}}l!gW~Y$e@Z{bieYrLR_(;-5Xc}u!Wqe-t`5-$Ric08 z)I-Hb7uJzP|BNW@;Oc;K&@r4ue1z1oR?0E3s!b)9#*VwZYv7QUF?uJfCbvkXm!0o%u z><6JxqZj)T)6^w)gU;UUu_(~%be`S=P^aPi^w_X*o>slp!f?Wx?gn1tDs#s8G%)wo z7b)W<`rs+5)9fmY6V6zmy??$hx#a-_S2m>VlnEL<@v6d~X0@}@?bIa@Lew`3#PrvS zqAb+oN{>N8-3)R;gY2DV$H&BsfO;m*px#mg8!6W9E>+Y$3}|9rJAj>&saZK zm|Mq8^9sBq3Qy?z81?a<0V!=hIas*r+(|`7VUD%@94I0_8{4}{WN?HXD$c?&C`h$v zvf1`q+MWlgYAm=?bQd_GI_n~0tO!2L6NH$Lk?I(Q5qnQ{l2AO^Hb*M5R2jA|AP2sW z`Yp2MOGm&8#ffB#--N~mT0nJb7l8bSyu8ygj!ns zb-brdn=iO|2c(W}Efiy=P|DQ-EULmB?(PuN#yJz^>5|BaR_Ld2Ra&T91oP&S{s~D2 z*zL{QRs!HcqV8CZmA!K6m%}GhK;o| zLdAA&fh;29%dnWy4C~RYE{CW0ygaHEZ;EStw-q=TsdL18O$s`$auIYLa%ASVKIvOA z%>OB@G=iX#ziz3G*9vlyn|JHD@)9M8@jqZC7F4zY6@jU}q=*%(XL^2AtkAwRjK*u> z9(77`DToNRMo$)yFhIvy#Uy!(snQ%D)~7Z_OOkdutu59!;iYX+=g82 zS+I^~EW(>=eqj8F}n!Qi6her9c)O z?+z^^xv^a)!oksJVRrJvZ1171h@_!rz{*^2_m1?530dvPm@YJ(Ces6ZQQ@fCP3gF9 zo!^Z$IaSGwDTMMu-(qKH78AU{OELlCDxD*+&(7^BcKPwSrF3SJ4ERW>(Cv_i#lSu~1DElkQa?PIEwb7-G*(M72JQ$%k( zrSE?c`xV-j0jHGuA4C_^D1BKf^x<{g?0Is zrY*eWTx3zv31Iqk4fW+~+VVeZYg+(fsf(R-d^-RnQU z=$my%D}m^HbVn_J^kUsP1&yWvR!NMan2a7vMmEiW-5c2bH~ASHeEvN(_O+2!fGdVFspXf}(H?g+G)KU^(d8tYn0s!MY2B1N&LxlTe!g z%^I*x9dFryz&zsPzETE`r4Z2GL068od0Qk5a3P~N{Z+QD&yY0OYk@Z*K@0<0hLb;A zoWVgeE8da~fL@#iji_W>&Ve%^xgrVRl*??rtCcscbZI4e>pib5k6-{fT5lM{CSu@j zfK)x%va#b$x&BM8#PdK+9g*L0rMIlUWb;xhD9oJyE|mI8OrZaUCjnvteauX>-{MId zSNd;w61W@a*E~u4j}b5s%UXrI7)NcspPIiYU>tTP@s%L_B;p4iJB%V(mjHaXU;;J-4@1*YSC+|IW zRxaUBwj%=^yR*%;0tQeDwsla@TSw5X&(45}8UR{i3vSucy$}riN;gzo z(Tgqso`I~cO>&yk;Qo*V98CSvhVeth8V}VFP0uuKIqL&y=l?olS^vL6EbCW@g-M&gJsfu1I8MDITY4yg%v6Fg>VSrN7tu zi#4)~YQ%n5UGZ1v<>^b8Gso+_TKN4ug1j!{uk-u?w3j};wEjTWz%26ECmxYW;5-_KL)L2^JZPi)29qR0tT3p;$Q*?6M!QzDVXok^tN=IZ@S6^;8FTB z?^qNEM*w9yzG=)qWkx64G_L^C1e)0vl5qf9=$2UpJbJccRxn)e20?(84p2T|n{uE4 z>xt{t68hihua%k^&DBk{^^}S-&y{Dcqjka%@z87sZX`cF{kmzV8z4(#~)cs&}7!K27S4s z*L@?^M|ga^WSo6p&lI_EPiU?8m+WxebAfgVf>F=Q0XIsy($y;it$spMcSG$>8xJv;_1=q@l#e*eT?~~e#zujJn2Oi_=KJ$ zYq=%{s!mMN;_9v;Ko2aqdS!MsOzCV!goUdJVH#Oi4@8byO5Mvu3UeZiA?V(F<}1GH z`@0vMrOXRwwsj%uU@rF%(_;H{7_Y_1p2_`HU2L!GlG{BoTFI=NWG|xQBOsbOIMG#A z=v1}GAGIFf4MZMBRYnf2Vudfqtg#>sJ$_|2t5I(lthkt1{PD4q&9gaVuT-3G?F69O=^G+Fx#l`=7TW ze)OXI=>}jU^yhY5pWsz2!Vi2f;vlH^jr}U72aSmeM88hT^^l1#>M>B~qTHTr1Ld_N#<}2RC#GQ2Xbt2KU!sg<7Wz|i|kkyBpx93IeKT!rHeGb$#*Bnb(O(#XxD2_9x}bS{G`~J(~n7##=9aP z@k1W^eNRWerm*vcx3qjgO*Bmpufs_*B#6w_{?Hm1?DmeD#@caV%GDJ{^*n1njxwKL z6Nm-tT%aiGq7Rylx1NS`WE1CLRR}?v~w4vT*9)9Zsz#h2s4@xn}F)Nb!nV zPkGdC2B$LZFEeAD(CDn@I7_U6;@`QfW3K!G0sXZmC3ihDJ=%7fvwdrpD*bl6bCap$ z**fyJLXo=*5|DkF)Z-mj1qMQ}};e+jHE1arRg0g8&;hL7uK1g}Tpzbp|^FaW&sU-x1P?QWiMH^g?0IR`-u z!@XYry-bvU900D@{%c)sEzC5VM?R%a^4u{A6j^iRQU2`hCr-7f`nCi4zV6AQ;(WUY zqkZyU9Y6c8j+@u2%M!Zaji3BiHRQ`{kSc38HZr7`Q*XKFjE5DI(3ZLy%g^%r2p|5_bTB1&KW$$noxxX1+;)Sb)_U|ml z=+kJ3$T4=644B(Vbv#jboqtl989C5eDfR?8+)NSQ+ibaVjPo>8JLg_FH)NSCUpiUW zNXP3#_GqS2Ik*U-%VEAgFqvtbVaW1NMDh;b)^mL%S@3wdh{|te93Kr^JPmuuPxQE8 zZ#9yfNdCmVo)go5ya~^9)2FqDVy&omntY%%fxJNGi6yVqwaJe5Xq5C2VM?dotv>to z6@MppA68L)PI$1a{;5z8QDqJ>@NKsXC_<$|^XcvTuHM%J1&(Nr`6Y|aOLDNUsn856 zYPad#uYg@;?hs!uq~3`d%6LX_D`b0Dfj5=1zHzKtuGc5+_O0Ch4vXvG*$Mo4`t4Ju zFS*!1gQ!XVF`RV3zzb&WEGIA=vX+h@;Sub5Iq-9{#Z%^goRAe(-CY7e8%y{|)Ee z+y6MuOa4E?c~exe=q!LFfEo`Q`Swf}0*waBl9cYD;$-4fbdcxAZYtxu@^Vso{ir;& z*Z0E1qeg8uMYvLtqbd~Ilx0)FPv!6!-bw1sWqleiySBjm+Hsokyti)*6U7io zuGXVhUh$veJZ-Udgh9sBY6wZdTeIlm<%I6v_n&0h|BvFlkN)rCyzNK-AL9I6Er-)1 z35X8_0PWBJ{(t@@KhhtU-T(OHubBUzPW(QQ0YMoAAz_q8NDRdp8paWX zSpTCa0%iyb!3Y%liNObjfZ%#E2D=ByHW!Xb0N?qS)d;YLwauh|M(-)Wva=lIBdm`O zcw3hO84NiX0n9%Ilv=_0Au%+|AWEQ`ivlcZSVmmK!L@dP6d`C?lNTcQE?zDm8qSvkU82%vN4}u-Gh!*9eHP+LTMM5@u&lTMedq7 zQ%5*GnFrCb%9?Jii-GfM3&D%uENx#sa0j`2NYuy_;v2a?f8JF74(c_@wtepWT&RaC zy-1mt9f-qux!|PdAB~W{Nl$=2#V1@??cnj6#Vc`x9EsgRC$%S_!TNdJNMRZVo8R%}1KazDQC^|lK^3g1(s9L~|?EDkf|KSI3UIQK)q`{BIr z@D5>s(JhHm6i(0#1%s&(4zD;zU<^voE8``I58D|a#CeOL0Ym1^Qn5h6#5=(OQh@C( z9ONE=-b3-#jP?h-izzS|TJdBhlSBrnEwycft-rEOE)6_sw>f(JN#wkZ&sY4!h@VZo zDZo%a(NmZJu8`}=E3Sc^)6KXRh;nFfS4<9=E5!i%j3%J@0&j`eNCv=>+zfEZt-q3P zzD@CZf4{^#=?sP=F!>kWnRhrpRbv!+!4+0YS z1vXtJw-4FAnC_Rn(2(4rDOub>aTOTqt9W3~J;A}4sVUf#x8CO=m_qb=J-v@*XH@s5 zy_KE%Q0pNdrbCB4TGnXI=>S70zf+{)?XfOOsr!q|#S(s$@dg*e%Vlq$4@9uM9=KrV z!EU^%J8F>WzVY0^zmm2z9XknHPb6)NFyzA#TlPO)O7AFp^(GhpF&}^7=+E2ouozA%|;N2UKpWTzk>Ds~%{^P7xk zc>iz*QQD;$qz=QpkO_@XR#&%|Yo$6iY1aTtK(xQ>cR(Ib<9YG)ATq|Jo$yAB1~vYiHa{^3rr+v@-WAyXzSxydBKz@R%~JRu7a@ zh2@^IFRFFE>NylPzPa?*u{;h2n*>446nX)+4K?{TrVVF!JH6>d&*FCJx%V{QO9HwV zZ0C3mjGL)K{iU&u4C&5%AN*Uk?MpN;sT&EE_ zgmT`{_v8M#{`e{pIZK+zzs}s7w%51Uy*O|es=H8&ZZvD1hz|0Bf8WY$p}(_?(5WM2 z>b+&eC}lcVy?#vSR1ff&bzU2H=jf6~mb43R*_=+~8}Tgc4wUDMP%~)f*?y=>kb%FI zonZAXSJcujJ{K-8%Wk1-T*|!76a72}7mFEprT4a8cUZu=xoVV1d1GkR&y5AyVt?Qk zyQ16!!5L(AC!TMjl5l3d<;Z=%f`hw%WlNiuwz zyPsDKsr&KZCA;gL-Myj}hccK@940EL!O2Vkv#-p-@LrL}2#Z>+wNz#g(B9M^1e=?f z6P@u0Np?@e70*LE3opSB%J}w{oUE!EJb5xZc<)n``EX=yqGkDtQ}GUJ$$p@Sec@^} z_dY03dBGmMhq4E(8(YoHIE;per*-d!Ge@$w44?VvS!L#a1xLKBM@aM1eWtUXG&I-p zqWb0K?qxGI2TrLL67TT$Gj7N_GO2$2+JH2^m9@}-6BQfZS}D>>zsSv*V?AJHW}jv_X$mSl z9R0Z$5Q3E(lAEeA{-qbBWP=Xj{IyiHSs6EX>rZtWTx$(+VMMfue#d^8GXKSg%EE4#Ny!wC&_&`t1M<~ zdi>~0ahgN(aIMbODP^fZZ{>r4J}#q}?$fS(?{2T1L1>l>4Ntpq^@fkRGd#T1j5F-l zsfV#6%68~J#F}vS`*9ktB{dmu#$o8iz3=bpaG?q<$ulUHW~Uv(njRatFBqzMJI5xC z2Wb=rmN@oLdoofNb4qkpm}7Y$?yb^jBm%$q*L|PB5W-VcI^59d-TD0-XvQ$sLZX%F zEWxw*45G7&sACtkh1272f*UM}*tM}%*(tB7E&;u;OI)cIx)R4D7YY_59M)p?C|%1l z(OnO6*o7lsySfv{d$wI1`&9HeRtqXs)}%~{y6K|v{)}?eJX_Fs>_zw0D>zG>{Psl8RG8&T857E zG_?7e5XLpO)gbL&Q&<|Q?^C>{gl2$8CN`_Z(?IivEP_LJp&79-? zZKW>Osiwki3fDIg*Vo>w)o%6K)?g0Q$l{t!&A-+72X`g?`OLs=fvy?Lb2N^G4R zLwMYIxb(`oI=Ok6uQz_8kGn;)p}dq#eip6%#*)ujCOKtR@3?bF+n3Xlq1Yb-`{{H) zq$dB>9e}>^zW$}cl;hmXv!d(j%&dipNRmAHhO+hTV%}4Y`N&f7vvlU|=fj&*V;?un znC+IMrMrIN_^DyNATwbJa{pAKVa53CMO0@I#tNyS^&kj(iocvpu1e2O2C1>v)xRxB zPjF#&C!58MM=XPA|JIGJQEM{m+g2tWDzWTanSB!V%9a@HMc&G}WUBcZ1{0l(X0XsJ zDo5hskc;tJ2_fTazJ=|}u<$|CG}JloFQi5Dw!~t!J@H_!I+HH%I=}E&j(%W|V=F{17VR$8sP9jnuzPed>Unvjzr<>I z&?ma4pgQ%Qd-ADZxI77%x)=B&a`zTEDZ3qmB5a{W;^A1!Sl-2#5pRvR8VvY$eC{Hs%j007) z(E~b7*t<1{Sn(~FWpHBZw8A~Fwbay~;Ok27&mQg_>jTmqEKfMJq0+vOg}3<4`*F|I z8JhWVxe@X>!K8L}HS5e3jKbvs9AUh1Z(ihNsJ1CzX}F1dEGv*5Dz`_qHte1MNQehC zhOBKS1H2RO7(U0L(e9lPTc}Z~X~S8czZ1F_;@pJG6}U^wpBd5$UvxYjlIQr2NyzYb zr+Zv;ft8QyiT?e*(+~7T`~yn#w_|@oiNxy*GUng!HY~HFn?Q#k3SuQ6H~(Jhj?d zbnN8Q`rv+=v)JaR2P(&>l#8y8tsL9*@zla1dLCrgiaf5fu%5-7IXNBzo+aJ2q~mTV zWa&|R9dGn4e4zuURhVBJoJ5&3E2js^-@;HjGiyijM@lQ z-k#(ReapxNhpzb`%a`!E2Fe*Szihq zb9MU>@AOwyikdL5^%0U?gJQcTH(|l`7 zudl4-6+;7Y#flx+CIX}YtbDvcQobo}B_uOEZ6wZr#8y%2kAEzR*p`HQRm zG`Y67vT%p{q6BgCP>0U}vdAktSIbHBMeD6O-FW)EStf|H;(p`4FC-|^X93ZEnY({$ zrwH=TKj*@snh;G82ou&^Z#F*3L~t-BG=#6OjnNO)s8h4wbi^AMI!d}^!HoXR))j?8#3Skovu+UBd1Oa*OQE0abihmQsZiB@6Uu~8- zw>Dtb?|>-`?h%HkJU!ty@-jlk^s_gD8hhg6D7S{>9){W4D0RAVsx0pK$D_zqD=9yfW3@YRM{;=T_uYXztIMB(>yMjd4Z9LfwqpIzlbOAmydh?JPx`yena)0( z#M=T(SK)Nm+C@aC{`f547L2z(BA*6K?H+p8;1_usM_ya6_nct^N^&@A`raj-F!8PG z;%Q4^AH?AD?3GSEan#W`=BllAcR3M*8WMFz_f;56-7)4_! zO~N0ppyAsRKC?L*t*H2^1BT)N5?8dLw``IXYKkopj``R@66mQnwHlQGSY1JgVn8=+ z1-TWd(#zMCR}4%D;9pA>fMYV-rW>`zb|M8h7=V8Y8fz=4uJ;<}f4YKZ`2kbolzYA%nuO1! z&g{5O{x~ea`>_!P(%kMEZ+!_1$gG>MIJdPxnK{As70>a`iUmua?Qop$+cM-LisDPR z>FBb_m%so?R8BxNXQR^)fq?VBgmhn^kpMQfhRcG8%xKb)O+o>0-nJFHe12{8g}#t8OgL)S>6oLiZhCj^_i?uLGaThnRn?s0vV z627mBH2chS8EJ!n2s(QxylzHgTQT=D;~>Gq#I83dxH^j z0|Wan+BQHWQ+!mXe3FBt_yiDujO_~|JE z`LXM>eILqxaHrX4RJs&fpflTx=h3n7!G?Q9@nioM`5wK8=Zk8SD+4|r__>)ULNO3836I6SJyh-(@QlM)7G7Or#4+Z0m^zxLjwozJUr;D|vJFfH)%)OJTraR$| zV;0USHKLRDnzhT@t@zqB5A3{HK@jE3488W`lJeub9pwLtfT90A0sEax{09Q|-TFVV zzL8f3M$#AwQw)Q_2t$wvLE{*LVhGH@1c4$SmZwC%t(}oT^-mO_&I1W_^tP{n0D(VN zfTen1cL?pMwT_B*Mz&P+z+&ExP+tvXL13A}9nBt!~ErDpK z4BQoiZAO_CkYr&DxWvlwKCjAUAX%Nywg0fq^K#o!14Il1s@1i+r8lzx zP`3WE^TsQHGQ{t{!kV~LE&}U0nxu4)Zij`kPvqZKtKN^Dw?F1yfO7mQ-PNSKE?C=w#^&Y%!tZw70WZ$1KF)8jQQX z;T&L5KvFPn?z{Mzu}ihSH{^-c2JMQNYTnZqFEp(2bWNg6kUZhRTnmbWaIC`H{;Uq? z_puuHHBuYFb6I3dZ?6nuRLuAXDpqI3vhvdW%X}wwnQn$k`RiZoyT9g-{!6p$(@+2> zLD%i`@oIT5`%ilJ?;Cgj<<-7v+x`BPzMEFi49!p&jT0C~AQX<`Yxzon9WRoC8DuSI zN#6d33w;BI3S zRIKZ*t~F^)Y@*#9yk2a}0>!7iy#hQEFdB$DR?MccU-$HY^fmn^%X3gQ^xC&NY!^~N zAi#l@`TK@f@gry+txAkEF8VUAFt_~9L;Xl*PKyJi%?|!;^KbexwwRGENfVBPY>*`m ziSAPy&76A<74#g+7c2DP_~5_Si+pXCeHm>4EeFtfK${+R`Q8y~lfy0mM8C>miyzAC zuXhXm$?bl0x6tq2?$7#q5NPbNtc~v4dz+L(zsoWVA5-e7cTBic%@Yak{%s#P#;Yr4 z^f^+hl;`s~3TZ1(QyvP2o2c(SSa*7CdC->%IaRFu=#V%s6Mv{2;^a26fUsvbrPsRT z*kSK|={vo{2}f?&LFDu>EYkR>5V7UH)q+A&!#TpAEf!GkP9OL0Hu}a21NsfW*B|?O z4_4rAY{fpPryWC2{y>pl9@g?5M6C9?x0i>ro(Eh-sdmH0-5obG{^r8=v1X;987_-r zO*}?6D=K482zN+XeIJQ-f_d#m%@1_)GsAelhIf5l>xil7upFfh8ZPaI>=^>-Sh;1BKd zFm&t6F<|ry#QVgSh`cG#K#(W_MjZ(PFqXl7mW~`}TknklBjX$gQ{ELwS4bu|IHkAc z1VBL1%^!WEss#a##D11uwQ|j5W5z2jMq?nhi__1^TIkmCTfuXM)(i%Xz7;lO3^3*# z2EdJP3C!4LpSKcOVq4bDHygiV3$TL8U$y~DfT-ACnW0&PF(paR+$fMwCwSm#-b;UL z18&O%#gA>kKSovPXE^m6Fy#Q4g1&AU{6kcQ{`4X6?j`n$#jY8PbRypMUOCs=seLSvBXHMUBhklaDm(qSJ56J85U1%`1=_2)zDc1! zp5)RqklaR6wPX7rtK0v~m@Yd%`@X6t`%P^Qxw5UOZQ(>xTVLlpc5_iqDqfw3N0r@lO*B?RX+>vzPE7Bp zcWCJzsIIJ%9-`mzc`ftC5u53U@L+pGdaeAvmXYEtHbU(b93t#?IyudW&zG?5E_A`Z z_7v8?vSOz~$Cy2H@j&kQH)p*s`1(Aeo&(I_rg_3(GOXuEPfyo?jDz5%V!}-+XWYD( z$mx8vu&IZZ|FC`FKlJFVgv9Oo9L2H`qsRSfae*v*x36^#^rzbg-z^{TObXrC&xxx^ zt>%f5>{m>PP?(mE{=mMLvqB%kKIBsLddr_DLU>n17Nw2+N)?P2FGv^Va)bLfJ?-TFwK+AD!V7a?M?l7?P7D<+R5;*|9=o>@p57^<+ZxnZAf z9zpE1n{2h^!3M%s37f@1*=cZI6-0d?^jo^WsgL8ps%bDyrf{n`NQsP;uXcH7X^VJm z9xpR36W+C1?}!Jixl@8mxpI%#JWk!?;mb6BoX+>`?aC@kz1k2GuGOHnFHBsY(edsk zwefL1x};r!c8<5O@jAX5Ci#&k4^49yfvK8Ox)_%^V(zW}j$5%83>? zNN_{MXOwfV<(0SWN%VJR^NM>3pI4O7yWQD4QU@{)h25Kgvg3m|zQ)WSk>iWjh6kP< z+Ff@KE=&+neikm#baT6k+kSe`v2Vuk?ORqeIWJV18)k1K1CSiZM5pb=jzK6vo8yoFq z=X3edH|}=@;gx)52XnvMH&K7GiE4ksdd2Lt*1oe5WIem(l)Ttea&ybfkjtv(4En*e zZ@6F%T!k@m?^}o8cUX5E_5XsL_0QXuUyVgj7zKU4^`HO6H?J0aQCIf#BX#@JlfN>x z|8U}W#0+>+5h%r=I7(wEx^gjsrZIvdVSN1)j#4N^qr`_>?KG%l(`}6%+x$n0&BHSz z0sjFxoZDm*xOLM1&f=eyy6YkImLEfb1q4u}u0#ohh!#LOvJxT~1M~_*z+%Kom)46h z*}v1DmAdqnJhL)9bgN+#eDhjKHsh?V=*CFUD+EzC1R!Zy2Kd-o^JZI&=~^b!Ae{#A z!ep~KPPW<`tly(xH~*K!4D<)Fze?SNqT*L*FuW*~C5-M6Gh5$TAI@iuj}`^~B4(G- z^blPG@{aVu4e9-p8s!_givS7S>Rl zltj`xPSPYyw_sj5Mbw*v=lYE#o?@0!R8X>05Jm*`QWKikCw7UoXUa2$q@N1vKfh~o6rzE4}!dj?}moCoU7Zrod$0UZhrqlalCLeAA?+Ya&1t>0ab9N^* zo5~R1zr!Bpu4M4cz5Mc|1(A7t%E`%F-$*LMP{cLr)MDOKrUCC>c*L~5f*81z^f#C$ zmWg5yD(nacf#i{a%M9n(+vBjb;o*isHX1LndGSvsPr#(*FH&p1Yh`REMZ(gUbccb5 z&Ajo-tWO?yq%tR}(!{_uNVcG;5z1Z!=S}kRsvF#T4xz9RTopz~tq)#haW>A(eX<^2 zl?+*_=94I46Pd|2fK`VFGaGsal^K?65hJLek*gv)dw_oB*$c#s; zQ0$uZ0_u6GB^D#z1kX1Ii0!@V$e96|4axN4$QkP%_x*4|yy!;RoEpLJnu~Vi`ZjvC z!_&rF#ToMDbtba@UZMqbS>fTlsFcHA_NWu!9PbTZ=CPZ7=+7K-K6N)Lh~qA!)Ue)e z#xd$`h9AiauxgeC{>MN<8af^JIEozXCj)vgf*liR6M0 zod#KbaSb{raD7*==vMId@bhiF@N?R5;}f~WY+M+2Yoj@@E5l87pT4VvP1SOX!E-|a z*?2j>TV|sa zb2=`<6>$}@c8{^Re|V)M<_fcZRS|?j%e6SdA2wc`_W1QZHE#bBo3n|I5PK1hiOiRS zeYRwlnJ@lctIZvC&tvkY4bNQ~Y2%ZU4k^AgL7%=cg4U%pd=>2e)nQNQMLarHvUin+ zzs342Q|pha3AcHqt7#_0bnEHWJTgf$Dgl4SZ>n)PT%u+7oYHRBRVAcd8*-0(@*Eij zeQRY=vN3&!mV?Oe2#$l9ot?a?$5Iw|)5@wNA+3d4#O{vjRln(`2QjoUHX$j_kF|Pr z=Ji7y`21lT_es0=x^JCp8-Lx|KWMUjLy^7>T>oQY_FE@^M9h9X@mpesk|azZ2m=xX z85m~}ibM&RB2bb-7#zki5=YSwb#uUzo%-CfC$=?&G~KLva^TgDFq@#50&Ahf`cEG> z%$Nd-scAMBEDtEJSIpS-dnd~@QUH+^u9{u^U{HiE!_nOu==zIP<( z#jQ7%A)u27TuCt?^aD*kW>Y{Xzf~A@BvdaE?;VyNcxB7fG@y8i{eG zW*!FnPT?PVA7w-j&F=DQINQtjdH}uob8%iS>O*IL;=J&anXVL8a-FmgLdds3r1M&k zO@WosaX`CFPz=22(#u+FF6I!D^RU-3Y^1V0&w>WYYDL0XFw@O-D1qfmwL*dGKl%)Y z+i87N+kta1YT+=Q;QqGvq9RoLXSx?(Qi`6~YmF@vaej~&^702G2)1v!Pm2+G_Nk-) z8K?kg0q|M@3kZe5aX(<=AD;RJ8Gq}v?{~^*3d8Uf5D}P!NdiS-oI+3nV-R|+Yu9=f zY~X(wxJqs_)C}OrS{?%b9tOZoo&j~pS~IS|1l-s*2g~^5bPHyy3#qME#kUCpkh5UG zFAePIQ=ld$(QUp^fPMFPo3bYBD?dxOSpThv!NvrZ1F6l5ZrSFs$!vT3@HTFM5g=AZ zsZBzhZFv_oI4j-O$$(6U1~oVc*FZpdzLvV!cFeB>S9xhOWcy3nVxBKldykmg!NiL4 z92%@Uuz!b0O>^)OQa?A_1>Wbf1G9WtUpNQ$C%Nr6xbg{S01|Gc zk2lUri+YExr<@3;vnNj@PlCA*p+1bMCYaqsHp=)w)@XuvrQ&mok7Zr@6e8TzMwNh9 zvYfRBadPYAa_4LAhR7D;SUAL1%7Z>zPO{sFQ-;6y_MQFQ)%}fSX&Z%3d>9ltcfUUx zrMov&RhgmQ>t<7Z9K8AC@)`7b`)mw|TT2t;)Hn4j(PJjtNi=~-ySMPto8?>-W=dxZ zb@NVWLomu&;A2A*`ZvV$FTO=yGVq?f=bA>4rto5PMZLwmjGnXEVm)zK8If^_Vk~X* zzPl}`&kl^5R@||Hm?N^6Wv8{?R`cJ(9cZ5YL%93+)L+8gx2Ju-N`b7b4`vvGf>&OM zkQj}j6wY8cf?_N7Q6x#x)Q5Ptf>4G5+Lh3NSf$(60ktJcuP}zi0G~dk^2z|pE)A7!5(ZqBo zBXb=^pZ6SB!^j!J_2bTO=8*1lrb1^-#+d?1-N;IZnY|Jdkw4I|>*Q07k93LLC)`TT zQi?x9ulKuXfTDaC?0N1mNoIBl;XRQ|EQn-@s8-vf#FA}LH?2+=v!EcNZ z3$UQONWmGp-4Ds)G+~jwO-5a7`D=DM^VhrN)EzrWFC=+Z8Z*UbGL`TbQ}@?+6b(%G z1XD>Rp@R+)IZk^84$xkl9%%4BU*sT2@{@H)7{2Y{$s=!v_CY81>)hY2B>g%^kLe&v zOP+c41A5$4V*d!*hQ#*SrF~e2DKR*9yq??h<9>?cHzHk$>!a)ald0#hF|zt7(*^Dc z;_E(MAxx}yMfaSm07VBv8ybJyRrIUB$V7x^eYoHrYN*Q8vUly)+~iWMChMR@UH#UA zw<$pIls})-y;8a1hNMY(e!RlV^?o;|s8g}SF@%G>4h?s_ojBPx0)#-R8+!3~EqXgf z%M4v|F5+I8(!Wi#^igFOPhykyuiZ77CWK`a{e_J?=ZN^pyF8~C;wGe~F=PgI5US)cI- zWbOss+gYEecUF_eCcwK>E=B%siVLNFDY0W2jR4CE8ZTYi|G&(=*|wY5wk-P2SFCs4 zeW|O}+Ic{tu4@o))Dne20)*h}FKF6Mm+8!vtL<~`W?NSc$qhm#dldq>um2&T1{XA^^?ubgBPM%2tKDF}1hG6VGw><`5(;~0 zZdd)4_&Hs#ZLlCmgfvj2&vP=Rg`r{Si*Sn4#9K!{?m@A_SWo)y@`DXP8(-=k#I*8!I@7+F z&&vcqY9YheD>86ge(U zgO^25lIMt+ij#4KmaEKA+%it9ad>3&8Oku*Oeg1fFL;~@w74~pSo}LlmloO}}UM$w%(3Wr3!wlE>yTOHj345IMA76Fz^m6N(uDs^M zPc3l&(S^Q*C;s{(-waZa8{r~Q7{eh5Lns_2VS=U!9C{B?P%w&ZdK4zM0|>r-iTr6V z+gmEa$-k3#o7qNy_CB?01F4n&fD8*jS+ z_2yAK=@<84pa(}Un$G$Pne@X}xA{6IT9M38-MHBWZ(w7dwTet8sMG73TweA3V;2dqTf7C;Plgx%n5oyqPrS?u^*z_nivqn%T6##3tOue{`@=Dp zWv-v;lK_8nl9&ke^&HG!OGZ&!nH=~;&|s}%<`3uG=Ck_=thx1WewPbO&%@>x?b_DysG4!xs+MFj3h5D#F$@W@{wZo%M!pn8Ofa!NlGbfEiDLIJ5fE z5ue8v&7^2kkx+1Xn*^1vA})l)T13Z_LPE)0n~bRzj&vfq9=P8R{Jn0@ca^R> z_G;q~v(1o-J2+i*Q3nGng6B0~8Wm>B?1(v5sO7SLQ`YNp3EYqYmLn|42p?BqqeG~S zM;D^tBj%zO=y-*rZ9VK|^G5fYE%&b%o-Vh}y&kHT4j6NlwE?(@;0qKUR14)9LLib^ z=t$<8p+mUR6}-U~d@&cQWPRz-T*8tQp8C2mXHoQo0;kImSTFaKg&q{j*_|&`SIb=w zs^kdzy6Wa~xFUxF^%=bgG83)CO1z@kou7R95*_*U#yo-AM=`VYnbWI{7Ux_BZFSTW z+U#NRg&es@a5%-cYe}A}P7x{Lh&$xmKbpQjUp>4XT%e%&+FX$|<&viBd@_)%8>%^s z+2(OOj)gx^58=gxhQBbetwvaytn?geSSfCiUp0Mym zX}7*z_&WlGyw3Y@&%;a*sS8&5IbOv&=nCld#`TuKh@PHyZm&LGaXf~(3g5);usRnc zNk-U#0a~aZ>wq|=iD21%XB6qzIEH=1$l}(y{31v=dJWv$Z9#l)8;8o&Y z5fvc0HJnLp8xInGxK-wc2sfOL0&p=LwPDnI;)xn)VIi@77>2P)#iToR0pqM^S_5+* z@I|jd?&~J!*WZFQc_i$m<0}EF|@?=sTmgwW_l^fo1mK`27+;V<-Fa`AM)KY;crw2kcHZ#Uoq+iR(NI(N1Y z-=f4`K-ez2(NXNPyWKvTK<wr@Qjm! zhl$6mCROET`SAFImDvpZ6K1y)JK#TMb~^j9^9Fpw>?-+3X17-xe!=W^Vh8*aX1AXM z{5i9;{?yBfVcZumP!NWnd=}5J=#)&yJeK_M09}=cVU32gh zAIzN=ljQ5CtmNM`JALkT>XT7vC}LI6L#<^*Si&s}^ez2bXzbf&CnX@AzA%Pm1bbG@ z8%&Q%B6_CjGyj!Q#V-cLjyW|A!phaJ8^kb4k{$HtQRh5xU9g%^#j6c?ik{3`56e#l zta(T+yH}~mppeRahnw6<<6mdCiI5epSon3)rjD2}@>OSE!TS+g0btVm#9VM5F`)Mx zy9`%8IZG6+Jw;!_-5~foxiPyBos)Kb{&^JZ!@}-!L&^U@Zj7D79&07(*e9L`j@P3529joFZWaLr4^cs7)^u8?qAnnC&luanX414BlOp(p^td z?|{P%j5hQ^ioNs@BYOu)^6nIYe{PWny$uM`cZc$Z&znfz9`7Mn)LzHfe$SxY%#)1w zy27Tr<9EZ%c47Qig<5#;IN4!6i+9t3-3&C}J@xk9l;Yh^{Fc7k``oThyelUA0+8)5 zfMRdEy!3q{v|A5sXQAl+hPD-AQ_r%Cl!Z`nCoSs)K_ z@VW9~ecjhG?tY}epF^gt>Qg)UFwv!YVO6Mo%_u$3?~i7@tFPRIPC(HVSsk`%qBhQz zcPMps4wHr=oX+*68d{xZ&exEMCYWzto{`S@SlyfxYnErVuVoIn*uu@Jx{=7DPK7Rp zw+y1Wk&7vQp@yG-vc3MbodEFdeljO~XO(9h5tZ?DR1mB)W8W-}292o*eO>!hzz2S` zzvGx2YZg|nRd-H8R20MR!Jay3V9(W29Bt z+jF5Z87ENL_f^5HN8lmW) z6H9uBiVuspopfb;9T!jc;wVh-zs`4&z0iPH^$HiikkM^d*d(dZ71 z^m}Zhc)Jo5?``<~&Kk=h?naBt^Jc4s^49R`>rJM5+J0(0_V6hrK8#(PpB zu~TCBy(<_~?|9qvor3$`W+afkjtgUZC3yEYfcJhJEdD(TvfrYhVj|I=DB71Cv0Q9Y zJb-x2T-h*${%@jS^*st&knY;wqu_o}|KCJG>9;6|X_DBTUt~j|yv>5Cc%(YK4PORq zf!YQmDo`Qu#`F&K>m1XEL_kNDfR0qPHkG)Nv27j{-Kd<}57f#}P;g343Op#ZWLtOo z&b1!!#B6rZC(bFgN(i!hLh;j+IpaDlNYe8kqoCUgVhEB5n_mHIWd9s@ zHYV05O)NSs6b4h|Sh%xV@#0|AI*{lDN1!ljnn*`$9rh{0_&{5)Gu~j0bn(Zz%OXfs zjQH<#>iq(bK2Lr9M_lmNC;tWozdG?7E{JdX86r^>AvfrwHY`EuO;RH?MI#&e!>LVH z;{*bsFt#V={M3&M%HIKk_}+H6(Ix_YR~xb&{5BxTuzhrFqgZbWe- zX`7neE{43l*S81Mht&!BZ<^dYP&T&tVd-AHa{>$G-)~_4X^JYcH$oTmJ9#zU$=}8? z>EvygQoQl=o!7m$$iO?yqU8S77~NY|cJPCDUW>iMx_5p`>~Cm;;uL=4@Neys`Q+^f z>U=>#v()7>^n#2P3|D#juZZcJ!NWNn`XL_YT|D_GNC@mu_$NsC)$G|%_+Vwhzz&7q zAmMiK?;s(tL*d^=!mnn}#y!XNPm3ep&G*la5LB!UpD>&sZ)c|l&e7SKCzM658YF}X zLOfwVct$?sYbG@;S_2($Pn%Z8vxDY|B#QAOGv;}-+R8J zfoYLGGoC{m7R9uL#Fef?u~Zb!lQUtxGulfyZU6^~0Ted?`;gV1A)3MLW2muv@a4e#!O-?o8m>`eT zkK$#;eK0&v)(RzvRA32AC-SOvH1(LPMd(ZLe&!p%qy+7n27xAb$_l#P!n)(lIZ%~* z6}$rx-iUTN<5pN%U>aR}%4>Ld!CQl1;q-}PB%nyh2H=POhN@TfG_9x*hYZJBJ?|JT z43oBdZsD8E5){Y~C7P}mwJqFhadhⓈ-#o(r7q3+j>!gy&#~&Gnxfh$z+6^K_O4Hn6{M! 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