Repository: mamba-org/mamba Branch: main Commit: 622f328c7282 Files: 690 Total size: 7.2 MB Directory structure: gitextract_bdxngetk/ ├── .clang-format ├── .cmake-format.json ├── .flake8 ├── .git-blame-ignore-revs ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ └── bug.yml │ ├── PULL_REQUEST_TEMPLATE.md │ ├── actions/ │ │ └── workspace/ │ │ └── action.yml │ ├── dependabot.yml │ └── workflows/ │ ├── bot_issue_template.md │ ├── brew.yml │ ├── coverage.yml │ ├── label_check.yml │ ├── linters.yml │ ├── set_pr_label.yml │ ├── static_build.yml │ ├── tests.yml │ ├── unix_impl.yml │ └── windows_impl.yml ├── .gitignore ├── .isort.cfg ├── .markdownlint.yaml ├── .pre-commit-config.yaml ├── .readthedocs.yml ├── CHANGELOG.md ├── CITATION.cff ├── CMakeLists.txt ├── CMakePresets.json ├── CONTRIBUTING.rst ├── LICENSE ├── README.md ├── SECURITY.md ├── _typos.toml ├── cmake/ │ ├── Checks.cmake │ ├── CompilerWarnings.cmake │ ├── LinkTimeOptimization.cmake │ └── modules/ │ └── FindLibsolv.cmake ├── codecov.yml ├── dev/ │ ├── CMakePresetsMamba.json │ ├── CMakePresetsUnix.json │ ├── environment-dev-extra.yml │ ├── environment-dev.yml │ └── environment-micromamba-static.yml ├── docs/ │ ├── Doxyfile │ ├── Makefile │ ├── environment.yml │ ├── make.bat │ └── source/ │ ├── advanced_usage/ │ │ ├── artifacts_verification.rst │ │ ├── detailed_operations.rst │ │ ├── more_concepts.rst │ │ └── package_resolution.rst │ ├── api/ │ │ ├── solver.rst │ │ └── specs.rst │ ├── conf.py │ ├── developer_zone/ │ │ ├── changes-2.0.rst │ │ ├── contributing.rst │ │ ├── dev_environment.rst │ │ └── internals.rst │ ├── index.rst │ ├── installation/ │ │ ├── mamba-installation.rst │ │ └── micromamba-installation.rst │ ├── tools/ │ │ ├── mermaid.css │ │ ├── mermaid.py │ │ └── mermaid_inheritance.py │ ├── usage/ │ │ ├── solver.rst │ │ └── specs.rst │ └── user_guide/ │ ├── concepts.rst │ ├── configuration.rst │ ├── mamba.rst │ ├── micromamba.rst │ └── troubleshooting.rst ├── libmamba/ │ ├── CHANGELOG.md │ ├── CMakeLists.txt │ ├── LICENSE │ ├── data/ │ │ ├── Mamba.psm1 │ │ ├── _mamba_activate.bat │ │ ├── activate.bat │ │ ├── bin2header.py │ │ ├── compile_pyc.py │ │ ├── conda_exe.hpp │ │ ├── mamba.bat │ │ ├── mamba.csh │ │ ├── mamba.fish │ │ ├── mamba.sh │ │ ├── mamba.xsh │ │ ├── mamba_completion.posix │ │ ├── mamba_hook.bat │ │ └── mamba_hook.ps1 │ ├── ext/ │ │ └── solv-cpp/ │ │ ├── CMakeLists.txt │ │ ├── include/ │ │ │ └── solv-cpp/ │ │ │ ├── dependency.hpp │ │ │ ├── ids.hpp │ │ │ ├── pool.hpp │ │ │ ├── queue.hpp │ │ │ ├── repo.hpp │ │ │ ├── solvable.hpp │ │ │ ├── solver.hpp │ │ │ └── transaction.hpp │ │ ├── src/ │ │ │ ├── dependency.cpp │ │ │ ├── pool.cpp │ │ │ ├── queue.cpp │ │ │ ├── repo.cpp │ │ │ ├── solvable.cpp │ │ │ ├── solver.cpp │ │ │ └── transaction.cpp │ │ └── tests/ │ │ ├── CMakeLists.txt │ │ └── src/ │ │ ├── main.cpp │ │ ├── msvc_catch_string_view.cpp │ │ ├── pool_data.cpp │ │ ├── pool_data.hpp │ │ ├── test_pool.cpp │ │ ├── test_queue.cpp │ │ ├── test_repo.cpp │ │ ├── test_scenarios.cpp │ │ ├── test_solvable.cpp │ │ ├── test_solver.cpp │ │ └── test_transaction.cpp │ ├── include/ │ │ └── mamba/ │ │ ├── api/ │ │ │ ├── c_api.h │ │ │ ├── channel_loader.hpp │ │ │ ├── clean.hpp │ │ │ ├── config.hpp │ │ │ ├── configuration.hpp │ │ │ ├── configuration_impl.hpp │ │ │ ├── constants.hpp │ │ │ ├── create.hpp │ │ │ ├── env.hpp │ │ │ ├── info.hpp │ │ │ ├── install.hpp │ │ │ ├── list.hpp │ │ │ ├── remove.hpp │ │ │ ├── repoquery.hpp │ │ │ ├── shell.hpp │ │ │ └── update.hpp │ │ ├── core/ │ │ │ ├── activation.hpp │ │ │ ├── channel_context.hpp │ │ │ ├── context.hpp │ │ │ ├── context_params.hpp │ │ │ ├── download_progress_bar.hpp │ │ │ ├── env_lockfile.hpp │ │ │ ├── environments_manager.hpp │ │ │ ├── error_handling.hpp │ │ │ ├── execution.hpp │ │ │ ├── fsutil.hpp │ │ │ ├── history.hpp │ │ │ ├── invoke.hpp │ │ │ ├── logging.hpp │ │ │ ├── logging_tools.hpp │ │ │ ├── menuinst.hpp │ │ │ ├── output.hpp │ │ │ ├── package_cache.hpp │ │ │ ├── package_database_loader.hpp │ │ │ ├── package_fetcher.hpp │ │ │ ├── package_handling.hpp │ │ │ ├── package_paths.hpp │ │ │ ├── palette.hpp │ │ │ ├── pinning.hpp │ │ │ ├── prefix_data.hpp │ │ │ ├── progress_bar.hpp │ │ │ ├── query.hpp │ │ │ ├── repo_checker_store.hpp │ │ │ ├── run.hpp │ │ │ ├── shard_index_loader.hpp │ │ │ ├── shard_traversal.hpp │ │ │ ├── shard_types.hpp │ │ │ ├── shards.hpp │ │ │ ├── shell_init.hpp │ │ │ ├── subdir_index.hpp │ │ │ ├── subdir_parameters.hpp │ │ │ ├── tasksync.hpp │ │ │ ├── thread_utils.hpp │ │ │ ├── timeref.hpp │ │ │ ├── transaction.hpp │ │ │ ├── util.hpp │ │ │ ├── util_os.hpp │ │ │ ├── util_scope.hpp │ │ │ └── virtual_packages.hpp │ │ ├── download/ │ │ │ ├── downloader.hpp │ │ │ ├── mirror.hpp │ │ │ ├── mirror_map.hpp │ │ │ ├── parameters.hpp │ │ │ └── request.hpp │ │ ├── fs/ │ │ │ └── filesystem.hpp │ │ ├── solver/ │ │ │ ├── libsolv/ │ │ │ │ ├── database.hpp │ │ │ │ ├── parameters.hpp │ │ │ │ ├── repo_info.hpp │ │ │ │ ├── solver.hpp │ │ │ │ └── unsolvable.hpp │ │ │ ├── problems_graph.hpp │ │ │ ├── request.hpp │ │ │ └── solution.hpp │ │ ├── specs/ │ │ │ ├── archive.hpp │ │ │ ├── authentication_info.hpp │ │ │ ├── build_number_spec.hpp │ │ │ ├── channel.hpp │ │ │ ├── chimera_string_spec.hpp │ │ │ ├── conda_url.hpp │ │ │ ├── error.hpp │ │ │ ├── glob_spec.hpp │ │ │ ├── match_spec.hpp │ │ │ ├── package_info.hpp │ │ │ ├── platform.hpp │ │ │ ├── regex_spec.hpp │ │ │ ├── repo_data.hpp │ │ │ ├── unresolved_channel.hpp │ │ │ ├── version.hpp │ │ │ └── version_spec.hpp │ │ ├── util/ │ │ │ ├── build.hpp │ │ │ ├── cast.hpp │ │ │ ├── cfile.hpp │ │ │ ├── charconv.hpp │ │ │ ├── conditional.hpp │ │ │ ├── cryptography.hpp │ │ │ ├── deprecation.hpp │ │ │ ├── encoding.hpp │ │ │ ├── environment.hpp │ │ │ ├── flat_binary_tree.hpp │ │ │ ├── flat_bool_expr_tree.hpp │ │ │ ├── flat_set.hpp │ │ │ ├── graph.hpp │ │ │ ├── heap_optional.hpp │ │ │ ├── iterator.hpp │ │ │ ├── json.hpp │ │ │ ├── loop_control.hpp │ │ │ ├── os.hpp │ │ │ ├── os_linux.hpp │ │ │ ├── os_osx.hpp │ │ │ ├── os_unix.hpp │ │ │ ├── os_win.hpp │ │ │ ├── parsers.hpp │ │ │ ├── path_manip.hpp │ │ │ ├── random.hpp │ │ │ ├── string.hpp │ │ │ ├── synchronized_value.hpp │ │ │ ├── tuple_hash.hpp │ │ │ ├── type_traits.hpp │ │ │ ├── url.hpp │ │ │ ├── url_manip.hpp │ │ │ ├── variant_cmp.hpp │ │ │ └── weakening_map.hpp │ │ ├── validation/ │ │ │ ├── errors.hpp │ │ │ ├── keys.hpp │ │ │ ├── repo_checker.hpp │ │ │ ├── tools.hpp │ │ │ ├── update_framework.hpp │ │ │ ├── update_framework_v0_6.hpp │ │ │ └── update_framework_v1.hpp │ │ ├── version.hpp │ │ └── version.hpp.tmpl │ ├── libmambaConfig.cmake.in │ ├── longpath.manifest │ ├── src/ │ │ ├── api/ │ │ │ ├── c_api.cpp │ │ │ ├── channel_loader.cpp │ │ │ ├── clean.cpp │ │ │ ├── config.cpp │ │ │ ├── configuration.cpp │ │ │ ├── create.cpp │ │ │ ├── env.cpp │ │ │ ├── info.cpp │ │ │ ├── install.cpp │ │ │ ├── list.cpp │ │ │ ├── remove.cpp │ │ │ ├── repoquery.cpp │ │ │ ├── shell.cpp │ │ │ ├── update.cpp │ │ │ ├── utils.cpp │ │ │ └── utils.hpp │ │ ├── core/ │ │ │ ├── activation.cpp │ │ │ ├── channel_context.cpp │ │ │ ├── context.cpp │ │ │ ├── download_progress_bar.cpp │ │ │ ├── env_lockfile.cpp │ │ │ ├── env_lockfile_conda.cpp │ │ │ ├── env_lockfile_impl.hpp │ │ │ ├── env_lockfile_mambajs.cpp │ │ │ ├── environments_manager.cpp │ │ │ ├── error_handling.cpp │ │ │ ├── execution.cpp │ │ │ ├── fsutil.cpp │ │ │ ├── history.cpp │ │ │ ├── link.cpp │ │ │ ├── link.hpp │ │ │ ├── logging.cpp │ │ │ ├── menuinst.cpp │ │ │ ├── output.cpp │ │ │ ├── package_cache.cpp │ │ │ ├── package_database_loader.cpp │ │ │ ├── package_fetcher.cpp │ │ │ ├── package_handling.cpp │ │ │ ├── package_paths.cpp │ │ │ ├── pinning.cpp │ │ │ ├── prefix_data.cpp │ │ │ ├── progress_bar.cpp │ │ │ ├── progress_bar_impl.cpp │ │ │ ├── progress_bar_impl.hpp │ │ │ ├── query.cpp │ │ │ ├── repo_checker_store.cpp │ │ │ ├── run.cpp │ │ │ ├── shard_index_loader.cpp │ │ │ ├── shard_traversal.cpp │ │ │ ├── shard_types.cpp │ │ │ ├── shards.cpp │ │ │ ├── shell_init.cpp │ │ │ ├── singletons.cpp │ │ │ ├── subdir_index.cpp │ │ │ ├── thread_utils.cpp │ │ │ ├── timeref.cpp │ │ │ ├── transaction.cpp │ │ │ ├── transaction_context.cpp │ │ │ ├── transaction_context.hpp │ │ │ ├── util.cpp │ │ │ ├── util_os.cpp │ │ │ └── virtual_packages.cpp │ │ ├── download/ │ │ │ ├── compression.cpp │ │ │ ├── compression.hpp │ │ │ ├── curl.cpp │ │ │ ├── curl.hpp │ │ │ ├── downloader.cpp │ │ │ ├── downloader_impl.hpp │ │ │ ├── mirror.cpp │ │ │ ├── mirror_impl.cpp │ │ │ ├── mirror_impl.hpp │ │ │ ├── mirror_map.cpp │ │ │ └── request.cpp │ │ ├── fs/ │ │ │ └── filesystem.cpp │ │ ├── solver/ │ │ │ ├── helpers.cpp │ │ │ ├── helpers.hpp │ │ │ ├── libsolv/ │ │ │ │ ├── database.cpp │ │ │ │ ├── helpers.cpp │ │ │ │ ├── helpers.hpp │ │ │ │ ├── matcher.cpp │ │ │ │ ├── matcher.hpp │ │ │ │ ├── parameters.cpp │ │ │ │ ├── repo_info.cpp │ │ │ │ ├── solver.cpp │ │ │ │ └── unsolvable.cpp │ │ │ └── problems_graph.cpp │ │ ├── specs/ │ │ │ ├── archive.cpp │ │ │ ├── authentication_info.cpp │ │ │ ├── build_number_spec.cpp │ │ │ ├── channel.cpp │ │ │ ├── chimera_string_spec.cpp │ │ │ ├── conda_url.cpp │ │ │ ├── glob_spec.cpp │ │ │ ├── match_spec.cpp │ │ │ ├── package_info.cpp │ │ │ ├── platform.cpp │ │ │ ├── regex_spec.cpp │ │ │ ├── repo_data.cpp │ │ │ ├── unresolved_channel.cpp │ │ │ ├── version.cpp │ │ │ ├── version_spec.cpp │ │ │ └── version_spec_impl.hpp │ │ ├── util/ │ │ │ ├── cfile.cpp │ │ │ ├── cryptography.cpp │ │ │ ├── encoding.cpp │ │ │ ├── environment.cpp │ │ │ ├── os_linux.cpp │ │ │ ├── os_osx.cpp │ │ │ ├── os_unix.cpp │ │ │ ├── os_win.cpp │ │ │ ├── parsers.cpp │ │ │ ├── path_manip.cpp │ │ │ ├── random.cpp │ │ │ ├── string.cpp │ │ │ ├── url.cpp │ │ │ └── url_manip.cpp │ │ ├── validation/ │ │ │ ├── errors.cpp │ │ │ ├── keys.cpp │ │ │ ├── repo_checker.cpp │ │ │ ├── tools.cpp │ │ │ ├── update_framework.cpp │ │ │ ├── update_framework_v0_6.cpp │ │ │ └── update_framework_v1.cpp │ │ └── version.cpp │ └── tests/ │ ├── CMakeLists.txt │ ├── data/ │ │ ├── config/ │ │ │ └── .condarc │ │ ├── env_file/ │ │ │ ├── env_1.yaml │ │ │ ├── env_2.yaml │ │ │ ├── env_3.yaml │ │ │ └── env_4.yaml │ │ ├── env_lockfile/ │ │ │ ├── bad_package-lock.json │ │ │ ├── bad_package-lock.yaml │ │ │ ├── bad_version-lock.json │ │ │ ├── bad_version-lock.yaml │ │ │ ├── good_multiple_categories-lock.yaml │ │ │ ├── good_multiple_packages-lock.json │ │ │ ├── good_multiple_packages-lock.yaml │ │ │ ├── good_no_package-lock.json │ │ │ ├── good_no_package-lock.yaml │ │ │ ├── good_one_package-lock.json │ │ │ ├── good_one_package-lock.yaml │ │ │ ├── good_one_package_missing_category-lock.json │ │ │ └── good_one_package_missing_category-lock.yaml │ │ ├── history/ │ │ │ ├── parse/ │ │ │ │ └── conda-meta/ │ │ │ │ ├── aux_file │ │ │ │ └── history │ │ │ ├── parse_metadata/ │ │ │ │ └── conda-meta/ │ │ │ │ └── history │ │ │ └── parse_segfault/ │ │ │ └── conda-meta/ │ │ │ └── history │ │ ├── repodata/ │ │ │ ├── conda-forge-numpy-linux-64.json │ │ │ ├── conda-forge-repodata-version-2-missing-base_url.json │ │ │ ├── conda-forge-repodata-version-2.json │ │ │ └── sudoku.json │ │ ├── repodata_json_cache/ │ │ │ ├── test_1.json │ │ │ ├── test_2.json │ │ │ ├── test_3.json │ │ │ ├── test_4.json │ │ │ ├── test_5.json │ │ │ ├── test_6.json │ │ │ ├── test_7.json │ │ │ └── test_7.state.json │ │ └── validation/ │ │ ├── 1.sv0.6.root.json │ │ ├── root copy.json │ │ └── root.json │ ├── include/ │ │ ├── mambatests.hpp │ │ ├── mambatests_utils.hpp │ │ └── test_shard_utils.hpp │ ├── libmamba_lock/ │ │ └── lock.cpp │ ├── libmamba_logging/ │ │ ├── include/ │ │ │ └── mamba/ │ │ │ └── testing/ │ │ │ └── test_logging_common.hpp │ │ ├── test_logging_anyloghandler.cpp │ │ ├── test_logging_tools.cpp │ │ └── test_main_logging.cpp │ └── src/ │ ├── catch-utils/ │ │ ├── conda_url.hpp │ │ ├── msvc_catch_byte.cpp │ │ └── msvc_catch_string_view.cpp │ ├── core/ │ │ ├── test_activation.cpp │ │ ├── test_channel_context.cpp │ │ ├── test_channel_loader.cpp │ │ ├── test_configuration.cpp │ │ ├── test_cpp.cpp │ │ ├── test_env_file_reading.cpp │ │ ├── test_env_lockfile.cpp │ │ ├── test_environments_manager.cpp │ │ ├── test_execution.cpp │ │ ├── test_filesystem.cpp │ │ ├── test_history.cpp │ │ ├── test_invoke.cpp │ │ ├── test_lockfile.cpp │ │ ├── test_output.cpp │ │ ├── test_package_fetcher.cpp │ │ ├── test_pinning.cpp │ │ ├── test_prefix_interoperability.cpp │ │ ├── test_progress_bar.cpp │ │ ├── test_query.cpp │ │ ├── test_shard_index_loader.cpp │ │ ├── test_shard_traversal.cpp │ │ ├── test_shard_types.cpp │ │ ├── test_shard_utils.cpp │ │ ├── test_sharded_repodata_integration.cpp │ │ ├── test_shards.cpp │ │ ├── test_shell_init.cpp │ │ ├── test_subdir_index.cpp │ │ ├── test_tasksync.cpp │ │ ├── test_thread_utils.cpp │ │ ├── test_transaction_context.cpp │ │ ├── test_util.cpp │ │ └── test_virtual_packages.cpp │ ├── download/ │ │ ├── test_downloader.cpp │ │ └── test_mirror.cpp │ ├── solver/ │ │ ├── libsolv/ │ │ │ ├── test_database.cpp │ │ │ └── test_solver.cpp │ │ ├── test_problems_graph.cpp │ │ ├── test_request.cpp │ │ └── test_solution.cpp │ ├── specs/ │ │ ├── test_archive.cpp │ │ ├── test_authentication_info.cpp │ │ ├── test_build_number_spec.cpp │ │ ├── test_channel.cpp │ │ ├── test_chimera_string_spec.cpp │ │ ├── test_conda_url.cpp │ │ ├── test_glob_spec.cpp │ │ ├── test_match_spec.cpp │ │ ├── test_package_info.cpp │ │ ├── test_platform.cpp │ │ ├── test_regex_spec.cpp │ │ ├── test_repo_data.cpp │ │ ├── test_unresolved_channel.cpp │ │ ├── test_version.cpp │ │ └── test_version_spec.cpp │ ├── test_main.cpp │ ├── util/ │ │ ├── test_cast.cpp │ │ ├── test_charconv.cpp │ │ ├── test_cryptography.cpp │ │ ├── test_encoding.cpp │ │ ├── test_environment.cpp │ │ ├── test_flat_bool_expr_tree.cpp │ │ ├── test_flat_set.cpp │ │ ├── test_graph.cpp │ │ ├── test_heap_optional.cpp │ │ ├── test_iterator.cpp │ │ ├── test_os_linux.cpp │ │ ├── test_os_osx.cpp │ │ ├── test_os_unix.cpp │ │ ├── test_os_win.cpp │ │ ├── test_parsers.cpp │ │ ├── test_path_manip.cpp │ │ ├── test_random.cpp │ │ ├── test_string.cpp │ │ ├── test_synchronized_value.cpp │ │ ├── test_tuple_hash.cpp │ │ ├── test_type_traits.cpp │ │ ├── test_url.cpp │ │ ├── test_url_manip.cpp │ │ └── test_weakening_map.cpp │ └── validation/ │ ├── test_tools.cpp │ ├── test_update_framework_v0_6.cpp │ └── test_update_framework_v1.cpp ├── libmamba-spdlog/ │ ├── CMakeLists.txt │ ├── cmake/ │ │ └── libmamba-spdlogConfig.cmake.in │ ├── include/ │ │ └── mamba/ │ │ └── spdlog/ │ │ ├── logging_spdlog.hpp │ │ └── logging_spdlog_impl.hpp │ └── tests/ │ ├── CMakeLists.txt │ └── test_logging_spdlog.cpp ├── libmambapy/ │ ├── .gitignore │ ├── CHANGELOG.md │ ├── CMakeLists.txt │ ├── LICENSE │ ├── pyproject.toml │ ├── src/ │ │ └── libmambapy/ │ │ ├── __init__.py │ │ ├── solver/ │ │ │ ├── __init__.py │ │ │ └── libsolv.py │ │ ├── specs.py │ │ ├── utils.py │ │ ├── version.py │ │ └── version.py.tmpl │ └── tests/ │ ├── test_legacy.py │ ├── test_solver.py │ ├── test_solver_libsolv.py │ ├── test_specs.py │ ├── test_utils.py │ └── test_version.py ├── libmambapy-stubs/ │ ├── pyproject.toml │ ├── setup.py │ └── src/ │ └── .gitkeep ├── mamba_package/ │ ├── CMakeLists.txt │ └── src/ │ ├── main.cpp │ ├── package.cpp │ └── package.hpp ├── micromamba/ │ ├── CHANGELOG.md │ ├── CMakeLists.txt │ ├── LICENSE │ ├── longpath.manifest │ ├── src/ │ │ ├── activate.cpp │ │ ├── clean.cpp │ │ ├── common_options.cpp │ │ ├── common_options.hpp │ │ ├── completer.cpp │ │ ├── config.cpp │ │ ├── constructor.cpp │ │ ├── constructor.hpp │ │ ├── create.cpp │ │ ├── env.cpp │ │ ├── info.cpp │ │ ├── install.cpp │ │ ├── list.cpp │ │ ├── login.cpp │ │ ├── main.cpp │ │ ├── package.cpp │ │ ├── remove.cpp │ │ ├── repoquery.cpp │ │ ├── run.cpp │ │ ├── shell.cpp │ │ ├── umamba.cpp │ │ ├── umamba.hpp │ │ ├── update.cpp │ │ ├── version.cpp │ │ ├── version.hpp │ │ └── version.hpp.tmpl │ ├── test-server/ │ │ ├── channel_a/ │ │ │ ├── linux-64/ │ │ │ │ ├── repodata.json │ │ │ │ ├── repodata.tar.bz2 │ │ │ │ └── repodata.tpl │ │ │ ├── noarch/ │ │ │ │ ├── _r-mutex-1.0.1-anacondar_1.tar.bz2 │ │ │ │ └── repodata.json │ │ │ └── win-64/ │ │ │ ├── repodata.json │ │ │ ├── repodata.tar.bz2 │ │ │ └── repodata.tpl │ │ ├── channel_b/ │ │ │ ├── linux-64/ │ │ │ │ └── repodata.json │ │ │ ├── noarch/ │ │ │ │ └── repodata.json │ │ │ └── win-64/ │ │ │ └── repodata.json │ │ ├── generate_gpg_keys.sh │ │ ├── repo/ │ │ │ ├── channeldata.json │ │ │ ├── index.html │ │ │ ├── noarch/ │ │ │ │ ├── current_repodata.json │ │ │ │ ├── current_repodata.json.bz2 │ │ │ │ ├── index.html │ │ │ │ ├── repodata.json │ │ │ │ ├── repodata.json.bz2 │ │ │ │ ├── repodata_from_packages.json │ │ │ │ ├── repodata_from_packages.json.bz2 │ │ │ │ └── test-package-0.1-0.tar.bz2 │ │ │ └── recipes/ │ │ │ └── test-package/ │ │ │ └── meta.yaml │ │ ├── reposerver.py │ │ ├── testserver.sh │ │ └── testserver_auth_pkg_signing.sh │ └── tests/ │ ├── __init__.py │ ├── channel_a/ │ │ ├── linux-64/ │ │ │ ├── repodata.json │ │ │ ├── repodata.tar.bz2 │ │ │ └── repodata.tpl │ │ ├── noarch/ │ │ │ ├── _r-mutex-1.0.1-anacondar_1.tar.bz2 │ │ │ └── repodata.json │ │ └── win-64/ │ │ ├── repodata.json │ │ ├── repodata.tar.bz2 │ │ └── repodata.tpl │ ├── channel_b/ │ │ ├── linux-64/ │ │ │ └── repodata.json │ │ ├── noarch/ │ │ │ └── repodata.json │ │ └── win-64/ │ │ └── repodata.json │ ├── conftest.py │ ├── data/ │ │ └── cph_test_data-0.0.1-0.tar.bz2 │ ├── dump_proxy_connections.py │ ├── env-create-export.yaml │ ├── env-extra-white-space.yaml │ ├── env-logging-overhead-regression.yaml │ ├── env-pip-numpy.yaml │ ├── env-pypi-pkg-test.yaml │ ├── env-requires-pip-install-with-spaces.yaml │ ├── env-requires-pip-install.yaml │ ├── env_lockfiles/ │ │ ├── envlockfile-check-step-1-lock-linux-64.json │ │ ├── envlockfile-check-step-1-lock-osx-64.json │ │ ├── envlockfile-check-step-1-lock-osx-arm64.json │ │ ├── envlockfile-check-step-1-lock-win-64.json │ │ ├── envlockfile-check-step-1-lock.yaml │ │ ├── envlockfile-check-step-2-lock-linux-64.json │ │ ├── envlockfile-check-step-2-lock-osx-64.json │ │ ├── envlockfile-check-step-2-lock-osx-arm64.json │ │ ├── envlockfile-check-step-2-lock-win-64.json │ │ ├── envlockfile-check-step-2-lock.yaml │ │ ├── test-env-lock-linux-64.json │ │ ├── test-env-lock-osx-64.json │ │ ├── test-env-lock-osx-arm64.json │ │ ├── test-env-lock-pip-git-https.yaml │ │ ├── test-env-lock-win-64.json │ │ ├── test-env-lock.yaml │ │ ├── test-env-pip-lock-linux-64.json │ │ └── test-env-pip-lock.yaml │ ├── explicit_env_linux.txt │ ├── explicit_env_osx.txt │ ├── helpers.py │ ├── pre_commit_conda_hooks_repo/ │ │ ├── .pre-commit-hooks.yaml │ │ ├── README.md │ │ └── environment.yml │ ├── spec_file_1.txt │ ├── spec_file_2.txt │ ├── test-server/ │ │ ├── channel_a/ │ │ │ ├── linux-64/ │ │ │ │ ├── repodata.json │ │ │ │ ├── repodata.tar.bz2 │ │ │ │ └── repodata.tpl │ │ │ ├── noarch/ │ │ │ │ ├── _r-mutex-1.0.1-anacondar_1.tar.bz2 │ │ │ │ └── repodata.json │ │ │ └── win-64/ │ │ │ ├── repodata.json │ │ │ ├── repodata.tar.bz2 │ │ │ └── repodata.tpl │ │ ├── channel_b/ │ │ │ ├── linux-64/ │ │ │ │ └── repodata.json │ │ │ ├── noarch/ │ │ │ │ └── repodata.json │ │ │ └── win-64/ │ │ │ └── repodata.json │ │ ├── repo/ │ │ │ ├── channeldata.json │ │ │ ├── index.html │ │ │ ├── noarch/ │ │ │ │ ├── current_repodata.json │ │ │ │ ├── current_repodata.json.bz2 │ │ │ │ ├── index.html │ │ │ │ ├── repodata.json │ │ │ │ ├── repodata.json.bz2 │ │ │ │ ├── repodata_from_packages.json │ │ │ │ ├── repodata_from_packages.json.bz2 │ │ │ │ └── test-package-0.1-0.tar.bz2 │ │ │ └── recipes/ │ │ │ └── test-package/ │ │ │ └── meta.yaml │ │ └── reposerver.py │ ├── test_activation.py │ ├── test_config.py │ ├── test_constructor.py │ ├── test_create.py │ ├── test_env.py │ ├── test_history.py │ ├── test_info.py │ ├── test_install.py │ ├── test_linking.py │ ├── test_list.py │ ├── test_login.py │ ├── test_menuinst.py │ ├── test_package.py │ ├── test_pkg_cache.py │ ├── test_prefix_interoperability.py │ ├── test_proxy.py │ ├── test_remove.py │ ├── test_repoquery.py │ ├── test_run.py │ ├── test_run.sh │ ├── test_shell.py │ ├── test_update.py │ ├── test_virtual_pkgs.py │ └── yaml_env.yml ├── pyproject.toml ├── releaser.py ├── update_changelog.py ├── vcpkg.json └── version_scheme.py ================================================ FILE CONTENTS ================================================ ================================================ FILE: .clang-format ================================================ BasedOnStyle: Mozilla Language: Cpp Standard: c++20 AccessModifierOffset: "-4" AlignAfterOpenBracket: BlockIndent AlignEscapedNewlinesLeft: "false" AllowAllArgumentsOnNextLine: false AllowAllParametersOfDeclarationOnNextLine: false AllowShortBlocksOnASingleLine: "false" AllowShortCaseLabelsOnASingleLine: "false" AllowShortFunctionsOnASingleLine: "false" AllowShortIfStatementsOnASingleLine: "false" AllowShortLoopsOnASingleLine: "false" AlwaysBreakTemplateDeclarations: "true" BinPackArguments: false BinPackParameters: false BreakAfterAttributes: Leave BreakBeforeBinaryOperators: All BreakBeforeBraces: Allman BreakBeforeTernaryOperators: "true" BreakConstructorInitializersBeforeComma: "true" BreakStringLiterals: "false" ColumnLimit: "100" ConstructorInitializerAllOnOneLineOrOnePerLine: "false" ConstructorInitializerIndentWidth: "4" ContinuationIndentWidth: "4" Cpp11BracedListStyle: "false" DerivePointerAlignment: "false" DisableFormat: "false" EmptyLineAfterAccessModifier: Always EmptyLineBeforeAccessModifier: Always ExperimentalAutoDetectBinPacking: "true" IncludeBlocks: Regroup IncludeCategories: - Regex: <[^.]+> Priority: -3 - Regex: Priority: -1 - Regex: <.+> Priority: -2 - Regex: '"mamba/.+"' Priority: 0 - Regex: '"solv-cpp/.+"' Priority: 0 - Regex: '".+/.+"' Priority: 1 - Regex: '".+"' Priority: 2 IndentCaseLabels: "true" IndentWidth: "4" IndentWrappedFunctionNames: "false" InsertBraces: true # Experimental KeepEmptyLinesAtTheStartOfBlocks: "false" MaxEmptyLinesToKeep: "2" NamespaceIndentation: All ObjCBlockIndentWidth: "4" ObjCSpaceAfterProperty: "false" ObjCSpaceBeforeProtocolList: "false" PackConstructorInitializers: Never PenaltyBreakAssignment: 100000 PenaltyBreakBeforeFirstCallParameter: 0 PenaltyBreakComment: 10 PenaltyBreakOpenParenthesis: 0 PenaltyBreakTemplateDeclaration: 0 PenaltyExcessCharacter: 10 PenaltyIndentedWhitespace: 0 PenaltyReturnTypeOnItsOwnLine: 10 PointerAlignment: Left QualifierAlignment: Custom # Experimental QualifierOrder: [inline, static, constexpr, const, volatile, type] ReflowComments: "true" SeparateDefinitionBlocks: Always SortIncludes: CaseInsensitive SortUsingDeclarations: Never SpaceAfterCStyleCast: "true" SpaceAfterTemplateKeyword: "true" SpaceBeforeAssignmentOperators: "true" SpaceBeforeParens: ControlStatements SpaceInEmptyParentheses: "false" SpacesBeforeTrailingComments: "2" SpacesInAngles: "false" SpacesInCStyleCastParentheses: "false" SpacesInContainerLiterals: "false" SpacesInParentheses: "false" SpacesInSquareBrackets: "false" TabWidth: "4" UseTab: Never ================================================ FILE: .cmake-format.json ================================================ { "encode": { "emit_byteorder_mark": false, "input_encoding": "utf-8", "output_encoding": "utf-8" }, "format": { "always_wrap": [], "autosort": false, "command_case": "lower", "dangle_align": "prefix", "dangle_parens": true, "enable_sort": true, "keyword_case": "upper", "layout_passes": {}, "line_ending": "unix", "line_width": 100, "max_lines_hwrap": 0, "max_pargs_hwrap": 6, "max_prefix_chars": 0, "max_rows_cmdline": 1, "max_subgroups_hwrap": 2, "min_prefix_chars": 0, "require_valid_layout": false, "separate_ctrl_name_with_space": false, "separate_fn_name_with_space": false, "tab_size": 4 }, "misc": { "per_command": {} } } ================================================ FILE: .flake8 ================================================ [flake8] max-line-length=100 extend-ignore=E203,D104,D100,I004 exclude=*/tests/*,docs/source/tools/* ================================================ FILE: .git-blame-ignore-revs ================================================ # This file is read by GitHub and `git blame --ignore-revs-file`. # See: https://docs.github.com/en/repositories/working-with-files/using-files/viewing-a-file#ignore-commits-in-the-blame-view # -------------------------------------- # The following section was generated by running: # `git log --format="# %s%n%H" .clang-format` # These entries have been manually removed from the output # since they change more than styling: # # MRepo refactor (#3118) # 7d6856e9b56fbff35a6563889a737824054cf51f # Add CondaURL (#2805) # a527511c14ade1db03b3a88cf9c603eb35469663 # bump clang-format to 13.0.1 and make it work again # 7f9c5adb778e4fc8537c81cc078ad7da2052169f # Enforce space between definitions (#3049) 21675b6517ff5da3c4dc91b9083366136308db2d # Attempt to fix CI (#2637) 50a627e002d8260fa2e116e5833190a135aff4e8 # Change brace space in clang-format (#2627) 3dce9901118a837f889139a052ccc915e0b63198 # Arrange header sorting (#2375) 156edfd89f39cba9c8028b8a35656233fae9bdaf # Fine tune clang-format proposal (#2290) 365342cc045a21bfb7a93fccd50a47fdbd573e47 # Add cpp linter and fix warnings 98f2530d2384f7e4a03742b5b191919391ce71e6 # -------------------------------------- # The following section was generated by running: # `git log --format="# %s%n%H" .pre-commit-config.yaml` # These entries have been manually removed from the output # since they change more than styling: # # Fix compilation with -Werror=unused-result (#3676) # 693ee82c7bb0838c47e1ed6820fa3c0d7fe069d5 # Add MatchSpec doc and fix errors (#3224) # a00ef3567585e0d14921c2c3f3c07ade5c163496 # Modularize libmambapy (#2960) # 0d42e816675a182a7994070a5c7c99651f93755f # Fix Ci (#2889) # 7c02338cb55b2bd11ef0a5f96314dc2338360536 # Structure test directory layout (#2380) # aa8d28c6c58369734e40d59c137316d71db61bf9 # use local meta.yaml for static builds (#2214) # e9695a45cc10848375d449a280282f6d29a8bb6c # Fix JSON output issues (#1600) # 048cb67f6285493fd7e1788adfddaa185edaa256 # bump clang-format to 13.0.1 and make it work again # 7f9c5adb778e4fc8537c81cc078ad7da2052169f # add tests for etag/mod/etc reading in cache # 7e4c03245b6c58af150f1a4d99bd3ee6a19c418f # maint: Add prettier pre-commit hook (#3663) d0c74588392c584ffc8ba5be92bd0924454b756c # maint: Add pre-commit typos back (#3682) 99290aeebfcc72358f20d22cea31a0d733f1f9ec # maint: Add pyupgrade pre-commit hook (#3671) f67914ef8a77d60acef3eb2e598542d23fc26e28 # maint: Update clang-format to v19 (#3600) ad9b2d6b8840825411a3c23251cfbb978ab60e89 # Update pre-commit hooks except clang-format (#3599) 0f4ad44c2e6ea11825c8ea3c4e92cf9bbf633086 # Add checking typos to pre-commit (#3278) 3e1e97b0e6e49cac042cff7396fbbe5e71a63a9f # Update pre-commit hooks" (#3252) 245de2009e037ac3bd68f68578bfbf35f296efff # Move to Ruff (#3011) 1230b9209466fdd386a3160033f1d71af5f244e6 # Add cmake-format (#2962) d116ff891798b0d915d84d496d65ec143412febd # Update pre-commit hooks (#2586) 48d595ae455e6b15778077d3ee898d8f48ee8526 # Update pre-commit versions (#2178) 6e4011c38d52928594e5a8ca5967956edf83bc29 # Update flake8 pre-commit versions (#2117) 5fd5c955d1dfa581a8f9a1eb62f1a72f41c6680c # Update pre-commit-config (#2092) 557e232ff5c9d44ea9eeeaa68c5975b2f0566074 # Upgrade pre-commit env (#1602) 81f2ffe03681f1312f341b655d90b5346275fbed # Get clang-format from PyPI and version pre-commit hook 01a336c0c154f15d7a5414bce4af85b71718ec65 # Update pre-commit versions 3719781cdfef64081114741cf1df39573c1c2831 # Add cpp linter and fix warnings 98f2530d2384f7e4a03742b5b191919391ce71e6 # Add pre-commit configuration 5c2951cc181d383e131fc345d439fc2878fe94db ================================================ FILE: .github/ISSUE_TEMPLATE/bug.yml ================================================ name: Bug report description: Problem using Mamba / Micromamba body: - type: checkboxes id: troubleshooting1 attributes: label: Troubleshooting docs description: Please check the [troubleshooting docs](https://mamba.readthedocs.io/en/latest/user_guide/troubleshooting.html) before making a report. options: - label: "My problem is not solved in the Troubleshooting docs" required: true - type: checkboxes id: troubleshooting2 attributes: label: Anaconda default channels description: Please be sure that you do NOT use the `pkgs/*` etc. channels. See the [troubleshooting docs](https://mamba.readthedocs.io/en/latest/user_guide/troubleshooting.html#using-the-defaults-channels). options: - label: "I do NOT use the Anaconda default channels (pkgs/* etc.)" required: true - type: dropdown id: mamba_installation_method attributes: label: How did you install Mamba? description: | If you use Mamba, please install it via [Miniforge](https://mamba.readthedocs.io/en/latest/installation.html#fresh-install). If you use Micromamba, please select "Micromamba" below. options: - "Mambaforge or latest Miniforge" - "Micromamba" - "Other (please describe)" validations: required: true - type: input id: search attributes: label: Search tried in issue tracker description: Please search for similar issues before making a report. placeholder: ... validations: required: true - type: checkboxes id: latest_version attributes: label: Latest version of Mamba description: | Please try with the most recent version of Mamba/Micromamba: [Latest Mamba version](https://anaconda.org/conda-forge/mamba) / [Latest Micromamba version](https://anaconda.org/conda-forge/micromamba) options: - label: "My problem is not solved with the latest version" required: true - type: dropdown id: conda_reproducible attributes: label: Tried in Conda? description: | If possible, please try to reproduce your problem with Conda (without Mamba or Micromamba). Can you reproduce the problem with Conda? options: - "I have this problem with Conda as well, without using Mamba" - "I do not have this problem with Conda, just with Mamba" - "I didn't try" - "Not applicable" validations: required: true - type: textarea id: freeform attributes: label: Describe your issue validations: required: true - type: textarea id: mamba_info attributes: label: mamba info / micromamba info description: | Please post the output of `mamba info` / `micromamba info`. Auto-rendered as code, no need for backticks. render: shell - type: textarea id: logs attributes: label: Logs description: | Verbose logs of the problematic command, eg. `mamba install -v ...`. Auto-rendered as code, no need for backticks. render: shell - type: textarea id: environment_yml attributes: label: environment.yml description: | Please post your `environment.yml` file if applicable. Auto-rendered as code, no need for backticks. placeholder: | name: ... channels: ... dependencies: ... render: yaml - type: textarea id: condarc attributes: label: ~/.condarc description: | `cat ~/.condarc` Auto-rendered as code, no need for backticks. render: yaml ================================================ FILE: .github/PULL_REQUEST_TEMPLATE.md ================================================ # Description ## Type of Change - [ ] Bugfix - [ ] Feature / enhancement - [ ] CI / Documentation - [ ] Maintenance ## Checklist - [ ] My code follows the general style and conventions of the codebase, ensuring consistency - [ ] I have performed a self-review of my code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] My changes generate no new warnings - [ ] I have run `pre-commit run --all` locally in the source folder and confirmed that there are no linter errors. - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing tests pass locally with my changes ================================================ FILE: .github/actions/workspace/action.yml ================================================ name: workspace description: "A action to persist your workspace across different jobs" branding: icon: "box" color: "green" inputs: action: required: true options: - save - restore - delete path: required: true key_prefix: default: workspace key_base: required: true default: ${{ github.workflow }}-${{ github.run_id }}-${{ github.run_number }}-${{ github.sha }} key_suffix: default: "" token: required: false default: ${{ github.token }} runs: using: "composite" steps: - name: Create workspace if: ${{ inputs.action == 'save' }} uses: actions/cache/save@v5 with: path: ${{ inputs.path }} key: ${{ inputs.key_prefix }}-${{ inputs.key_base }}-${{ inputs.key_suffix }} - name: Restore workspace if: ${{ inputs.action == 'restore' }} uses: actions/cache/restore@v5 with: path: ${{ inputs.path }} key: ${{ inputs.key_prefix }}-${{ inputs.key_base }}-${{ inputs.key_suffix }} fail-on-cache-miss: true - name: Delete workspace if: ${{ inputs.action == 'delete' }} shell: bash env: GH_TOKEN: ${{ inputs.token }} run: | gh cache delete '${{ inputs.key_prefix }}-${{ inputs.key_base }}-${{ inputs.key_suffix }}' ================================================ FILE: .github/dependabot.yml ================================================ # To get started with Dependabot version updates, you'll need to specify which # package ecosystems to update and where the package manifests are located. # Please see the documentation for all configuration options: # https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file version: 2 updates: - package-ecosystem: github-actions directory: / schedule: interval: weekly - package-ecosystem: github-actions directory: .github/actions/workspace/ schedule: interval: weekly ================================================ FILE: .github/workflows/bot_issue_template.md ================================================ --- title: Bot failure --- There was a problem with the **{{ workflow }}** workflow, please investigate. ================================================ FILE: .github/workflows/brew.yml ================================================ name: Homebrew and Linuxbrew toolchains on: workflow_call: jobs: build_linuxbrew: name: Build on linuxbrew runs-on: ubuntu-latest container: image: homebrew/brew:latest options: --user 0 steps: - name: Disk Space Before Clean Up run: | df -h - name: Free Disk Space (Container) run: | rm -rf /mnt/usr/local/lib/android rm -rf /mnt/usr/share/dotnet rm -rf /mnt/usr/local/share/boost rm -rf /mnt/opt/ghc rm -rf /mnt/opt/hostedtoolcache/CodeQL rm -rf /mnt/usr/local/lib/node_modules - name: Disk Space After Clean Up run: | df -h # v1 required due to permissions error - name: Checkout mamba repository uses: actions/checkout@v6 - name: Correct the creation permissions run: sudo chown -R linuxbrew . - name: Install host and build dependencies run: brew install fmt libarchive libsolv lz4 openssl@3 reproc simdjson xz yaml-cpp zstd cmake cli11 nlohmann-json spdlog tl-expected curl pkgconfig python bzip2 krb5 zlib msgpack - name: Configure to build mamba run: cmake -S. -Bbuild -DBUILD_LIBMAMBA=ON -DBUILD_MAMBA=ON -DBUILD_LIBMAMBA_SPDLOG=ON -DBUILD_SHARED=ON -DBUILD_STATIC=OFF - name: Build mamba run: cmake --build build -j4 build_homebrew: name: Build on homebrew runs-on: macos-15 steps: - name: Checkout mamba repository uses: actions/checkout@v6 # Note: cmake already installed from a local Github tap # Attempting to install it from homebrew/core creates a conflict without more handling - name: Install host and build dependencies run: > brew install --overwrite fmt libarchive libsolv lz4 openssl@3 reproc simdjson xz yaml-cpp zstd cli11 nlohmann-json spdlog tl-expected pkgconfig python msgpack - name: Configure to build mamba run: > cmake -S. -Bbuild -DBUILD_LIBMAMBA=ON -DBUILD_MAMBA=ON -DBUILD_LIBMAMBA_SPDLOG=ON -DBUILD_SHARED=ON -DBUILD_STATIC=OFF -DLibArchive_ROOT=$(brew --prefix libarchive) - name: Build mamba run: cmake --build build -j4 ================================================ FILE: .github/workflows/coverage.yml ================================================ name: Code Coverage on: push: branches: - main - feat/* pull_request: branches: - main - feat/* paths-ignore: - "docs/**" - "**.md" merge_group: types: [checks_requested] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true defaults: run: # micromamba activation shell: bash -l -eo pipefail {0} jobs: coverage: name: Code Coverage runs-on: ubuntu-latest steps: - name: Disk Space Before Clean Up run: | df -h - name: Free Disk Space (Base Runner) uses: jlumbroso/free-disk-space@v1.3.1 with: tool-cache: false large-packages: false docker-images: false - name: Disk Space After Clean Up run: | df -h - name: Checkout mamba repository uses: actions/checkout@v6 - name: Create build environment uses: mamba-org/setup-micromamba@v2 with: environment-file: ./dev/environment-dev.yml environment-name: build_env cache-environment: true - name: Install dev-extra environment run: micromamba install -n build_env -y -f ./dev/environment-dev-extra.yml - name: Install micromamba-static environment run: micromamba install -n build_env -y -f ./dev/environment-micromamba-static.yml - uses: hendrikmuhs/ccache-action@main with: variant: sccache key: ${{ github.job }}-${{ github.runner.os }} restore-keys: | ccache-libmamba-${{ github.runner.os }} - name: Build mamba with coverage run: | # Ensure ar/ranlib are found: conda compiler activation may not set AR when # mixing envs (dev + micromamba-static); CMAKE_AR from preset uses $env{AR} # which can resolve to a bare name, causing "x86_64-conda-linux-gnu-ar: not found" # when building the static libmamba (micromamba requires BUILD_STATIC). export AR="${CONDA_PREFIX}/bin/x86_64-conda-linux-gnu-ar" export RANLIB="${CONDA_PREFIX}/bin/x86_64-conda-linux-gnu-ranlib" cmake -B build/ -G Ninja \ --preset mamba-unix-shared-debug \ -D CMAKE_CXX_COMPILER_LAUNCHER=sccache \ -D CMAKE_C_COMPILER_LAUNCHER=sccache \ -D MAMBA_WARNING_AS_ERROR=ON \ -D BUILD_LIBMAMBA_SPDLOG=ON \ -D BUILD_LIBMAMBAPY=ON \ -D BUILD_MICROMAMBA=ON \ -D ENABLE_MAMBA_ROOT_PREFIX_FALLBACK=OFF \ -D CMAKE_BUILD_TYPE=Debug \ -D CMAKE_CXX_FLAGS_DEBUG="-g -O0 -fno-omit-frame-pointer --coverage -fprofile-update=atomic" \ -D CMAKE_C_FLAGS_DEBUG="-g -O0 -fno-omit-frame-pointer --coverage -fprofile-update=atomic" cmake --build build/ --parallel - name: Show build cache statistics run: sccache --show-stats - name: Run C++ tests with coverage continue-on-error: true run: | unset CONDARC # Interferes with tests ./build/libmamba/ext/solv-cpp/tests/test_solv_cpp ./build/libmamba/tests/test_libmamba - name: Install lcov run: | sudo apt-get update sudo apt-get install -y lcov - name: Generate C++ coverage report run: | lcov --directory . --capture --output-file cpp_coverage.info lcov --remove cpp_coverage.info '/usr/*' '*/tests/*' '*/build/*' 'libmamba/tests/*' --output-file cpp_coverage.info --ignore-errors unused lcov --summary cpp_coverage.info --ignore-errors mismatch --rc geninfo_unexecuted_blocks=1 # TODO: Those steps need adaptations so that the coverage reports from the C++ and the python test suites are consolidated. # - name: Install libmambapy # run: | # cmake --install build/ --prefix "${CONDA_PREFIX}" # python -m pip install --no-deps --no-build-isolation ./libmambapy # - name: Run Python tests with coverage # continue-on-error: true # run: | # # Run libmambapy tests with coverage # python -m pytest libmambapy/tests/ --cov=libmambapy --cov-report=xml --cov-report=term-missing # # Run micromamba tests with coverage # export TEST_MAMBA_EXE=$(pwd)/build/micromamba/mamba # python -m pytest micromamba/tests/ --cov=micromamba --cov-report=xml --cov-report=term-missing - name: Upload coverage to Codecov uses: codecov/codecov-action@v5 with: files: | ./cpp_coverage.info ./coverage.xml fail_ci_if_error: true token: ${{ secrets.CODECOV_TOKEN }} ================================================ FILE: .github/workflows/label_check.yml ================================================ name: Check release label on: pull_request: types: - synchronize - opened - reopened - edited - labeled - unlabeled jobs: label_check: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v6 - name: Wait for bot to set label run: sleep 10 - name: Check labels env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | # Get PR number and repo name from event payload PR_NUMBER=$(jq -r .pull_request.number "$GITHUB_EVENT_PATH") REPO_FULL_NAME=$(jq -r .repository.full_name "$GITHUB_EVENT_PATH") # Fetch fresh PR data from GitHub API PR_DATA=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \ "https://api.github.com/repos/$REPO_FULL_NAME/issues/$PR_NUMBER") NUMBER_OF_LABELS=$(echo "$PR_DATA" | jq '.labels | length') if [ $NUMBER_OF_LABELS -eq 0 ]; then echo "PR has no labels. Please add at least one label of release type." exit 1 fi RELEASE_LABELS=("release::enhancements" "release::bug_fixes" "release::ci_docs" "release::maintenance") PR_LABELS=$(echo "$PR_DATA" | jq -r '.labels[].name') NB_RELEASE_LABELS=0 for LABEL in $PR_LABELS; do if [[ " ${RELEASE_LABELS[@]} " =~ " ${LABEL} " ]]; then NB_RELEASE_LABELS=$((NB_RELEASE_LABELS+1)) fi done if [ $NB_RELEASE_LABELS -eq 0 ]; then echo "PR has no release labels. Please add a label of release type." exit 1 elif [ $NB_RELEASE_LABELS -gt 1 ]; then echo "PR has multiple release labels. Please remove all but one label." exit 1 fi ================================================ FILE: .github/workflows/linters.yml ================================================ name: Linters on: push: branches: - main - feat/* pull_request: branches: - main - feat/* merge_group: types: [checks_requested] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: build: runs-on: ubuntu-latest env: PRE_COMMIT_USE_MICROMAMBA: 1 steps: - name: Disk Space Before Clean Up run: | df -h - name: Free Disk Space (Base Runner) uses: jlumbroso/free-disk-space@v1.3.1 with: tool-cache: false large-packages: false docker-images: false - name: Disk Space After Clean Up run: | df -h - uses: actions/checkout@v6 - name: Install pre-commit and identify uses: mamba-org/setup-micromamba@v2 with: environment-name: linters create-args: pre-commit identify - name: Add micromamba to GITHUB_PATH run: echo "${HOME}/micromamba-bin" >> $GITHUB_PATH - name: Run all linters shell: micromamba-shell {0} run: | pre-commit run --all-files --verbose --show-diff-on-failure ================================================ FILE: .github/workflows/set_pr_label.yml ================================================ name: Set release label to PR based on title and description on: pull_request_target: types: - opened - edited permissions: contents: read issues: write pull-requests: write jobs: set_label: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v6 - name: Assign label based on PR title uses: actions/github-script@v8 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const pr_title = context.payload.pull_request.title; // Define regex patterns for labels based on conventional commit keywords const label_patterns_map = { "release::bug_fixes": /^(fix)\b/i, "release::enhancements": /^(feat|refactor|perf)\b/i, "release::ci_docs": /^(ci|docs)\b/i, "release::maintenance": /^(chore|style|test|build|revert)\b/i, }; let assigned_label = null; // Check each pattern for (const [release_label, pattern] of Object.entries(label_patterns_map)) { if (pattern.test(pr_title)) { assigned_label = release_label; break; // Assign first matching label } } // If a label was matched, add it to PR if (assigned_label) { await github.rest.issues.addLabels({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, labels: [assigned_label] }); } - name: Assign label based on PR description uses: actions/github-script@v8 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const pr_body = context.payload.pull_request.body; const label_map = { "Bugfix": "release::bug_fixes", "Feature / enhancement": "release::enhancements", "CI / Documentation": "release::ci_docs", "Maintenance": "release::maintenance" }; let assigned_label = null; for (const [checkbox_label, release_label] of Object.entries(label_map)) { const checkbox_regex = new RegExp(`- \\[x\\] ${checkbox_label}`, 'mi'); if (checkbox_regex.test(pr_body)) { assigned_label = release_label; break; // Assign first matching label } } // If a label was matched, add it to PR if (assigned_label) { await github.rest.issues.addLabels({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, labels: [assigned_label] }); } ================================================ FILE: .github/workflows/static_build.yml ================================================ name: Micromamba on: push: branches: - main - feat/* pull_request: branches: - main - feat/* paths-ignore: - "docs/**" - "mamba/**" - "libmambapy/**" - "**.md" merge_group: types: [checks_requested] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: micromamba-static-unix: name: "${{ matrix.platform }}-${{ matrix.arch }}" runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - { os: ubuntu-latest, platform: linux, arch: "64" } - { os: ubuntu-latest, platform: linux, arch: aarch64 } - { os: ubuntu-latest, platform: linux, arch: ppc64le } - { os: macos-latest, platform: osx, arch: "64" } - { os: macos-latest, platform: osx, arch: arm64 } steps: - name: Disk Space Before Clean Up if: matrix.platform == 'linux' run: | df -h - name: Free Disk Space (Base Runner) if: matrix.platform == 'linux' && matrix.arch == '64' uses: jlumbroso/free-disk-space@v1.3.1 with: tool-cache: false large-packages: false docker-images: false - name: Free Disk Space (Container) if: matrix.platform == 'linux' && matrix.arch != '64' run: | rm -rf /mnt/usr/local/lib/android rm -rf /mnt/usr/share/dotnet rm -rf /mnt/usr/local/share/boost rm -rf /mnt/opt/ghc rm -rf /mnt/opt/hostedtoolcache/CodeQL rm -rf /mnt/usr/local/lib/node_modules - name: Disk Space After Clean Up if: matrix.platform == 'linux' run: | df -h - name: Checkout micromamba-feedstock uses: actions/checkout@v6 with: repository: conda-forge/micromamba-feedstock ref: dev path: micromamba-feedstock - name: Disable output validation if: ${{ matrix.platform == 'osx' }} run: | cd micromamba-feedstock/ sed -i '' '/conda_forge_output_validation/d' conda-forge.yml - name: Replaces python 3.9 with 3.13 if: ${{ matrix.platform == 'linux' }} run: | cd micromamba-feedstock/recipe/ sed -i 's| - micromamba{{ bin_ext }} create -n test --override-channels -c conda-forge --yes python=3\.9| - micromamba{{ bin_ext }} create -n test --override-channels -c conda-forge --yes python=3.13|' meta.yaml - name: Uses libcurl 8.14 if: ${{ matrix.platform == 'linux' }} run: | cd micromamba-feedstock/recipe/ sed -i 's| - libcurl >=8\.4\.0[[:space:]]*# \[unix\]| - libcurl >=8.4,<8.15 #[unix]|' meta.yaml sed -i 's| - libcurl-static >=8\.4\.0[[:space:]]*# \[unix\]| - libcurl-static >=8.4,<8.15 #[unix]|' meta.yaml - name: Checkout mamba branch uses: actions/checkout@v6 with: path: mamba - name: Clear mamba git directory and link source # `source` subfolder is the special location looked-up by our feedstock. # Due to Docker, we can only put it as a subfolder of `micromamba-feedstock`, run: | rm -rf "mamba/.git" mv mamba/ micromamba-feedstock/source # Prevent irrelevant file permission error git -C micromamba-feedstock/ config --local --add safe.directory '*' - uses: mamba-org/setup-micromamba@v2 with: environment-name: mambabuild create-args: python boa post-cleanup: none # FIXME the cleanup fails on OSX - name: Build conda package (Unix native) if: ${{ !(matrix.platform == 'linux' && matrix.arch != '64') }} shell: bash -l {0} run: | cd micromamba-feedstock/ # Special values for running the feedstock with a local source export FEEDSTOCK_ROOT="${PWD}" export CI="local" # For OSX not using Docker export CONDA_BLD_PATH="${PWD}/build_artifacts" mkdir -p "${CONDA_BLD_PATH}" python build-locally.py "${{ matrix.platform }}_${{ matrix.arch }}_" # The build_locally.py script will test all Linux builds, which fails outside of linux-64 - name: Build conda package (Linux emulated) if: ${{ matrix.platform == 'linux' && matrix.arch != '64' }} uses: uraimo/run-on-arch-action@v3 with: arch: ${{ matrix.arch }} distro: ubuntu_latest dockerRunArgs: -v /var/run/docker.sock:/var/run/docker.sock install: | apt-get update -y apt-get install -y python3 docker.io run: | cd micromamba-feedstock/ # Prevent irrelevant file permission error chown -R $(whoami) . # Special values for running the feedstock with a local source export FEEDSTOCK_ROOT="${PWD}" export CI="local" python3 build-locally.py "${{ matrix.platform }}_${{ matrix.arch }}_" - name: Unpack micromamba package shell: bash -l {0} run: | ls micromamba-feedstock/build_artifacts micromamba package extract \ "micromamba-feedstock/build_artifacts/${{ matrix.platform }}-${{ matrix.arch }}/"micromamba-*.tar.bz2 "pkg/" mkdir -p "${{ github.workspace }}/artifacts" cp pkg/bin/micromamba "${{ github.workspace }}/artifacts" - name: Test basic commands if: ${{ matrix.arch != 'aarch64' && matrix.arch != 'ppc64le' }} run: | mkdir test_prefix ${{ github.workspace }}/artifacts/micromamba --version ${{ github.workspace }}/artifacts/micromamba --help ${{ github.workspace }}/artifacts/micromamba env create -y -n testenv -r ./test_prefix "python<3.13" ${{ github.workspace }}/artifacts/micromamba list -n testenv -r ./test_prefix --log-level 1 - name: Archive conda-build artifact if: failure() run: tar -czf ${{ github.workspace }}/micromamba-conda-build-failed-${{ matrix.platform }}-${{ matrix.arch }}.tar.gz $MAMBA_ROOT_PREFIX/envs/mambabuild/conda-bld/micromamba_* - name: Upload conda build artifacts uses: actions/upload-artifact@v7 if: failure() with: name: micromamba-conda-build-failed-${{ matrix.platform }}-${{ matrix.arch }} path: ${{ github.workspace }}/micromamba-conda-build-failed-${{ matrix.platform }}-${{ matrix.arch }}.tar.gz retention-days: 7 - name: Upload micromamba uses: actions/upload-artifact@v7 with: name: micromamba-${{ matrix.platform }}-${{ matrix.arch }} path: ${{ github.workspace }}/artifacts/micromamba micromamba-static-win: name: "win-64" runs-on: windows-latest steps: - uses: actions/checkout@v6 - name: Cache vcpkg packages uses: actions/cache@v5 with: # The installed packages are in %VCPKG_INSTALLATION_ROOT%\installed\x64-windows-static # and the info which packages are installed is in %VCPKG_INSTALLATION_ROOT%\installed\vcpkg path: C:\Users\runneradmin\AppData\Local\vcpkg key: vcpkg-win-64-appdata - name: Install dependencies with vcpkg shell: cmd # remove libsolv overlay-ports once https://github.com/microsoft/vcpkg/pull/31275 is released run: | vcpkg install --triplet x64-windows-static-md - uses: hendrikmuhs/ccache-action@main with: variant: sccache key: sccache-${{ github.job }}-win-64 - name: Set up MSVC uses: ilammy/msvc-dev-cmd@v1 - uses: mamba-org/setup-micromamba@v2 with: environment-name: mambabuild init-shell: bash cmd.exe create-args: >- cli11>=2.2,<3 cpp-expected nlohmann_json simdjson-static>=3.3.0 spdlog fmt>=11.1.0 yaml-cpp-static>=0.8.0 libsolv-static>=0.7.24 reproc-cpp-static>=14.2.4.post0 libmsgpack-c-static - name: build micromamba shell: cmd /C call {0} run: | set CMAKE_PREFIX_PATH=.\vcpkg_installed\x64-windows-static-md;%CONDA_PREFIX%\Library cmake -B build/ -G Ninja ^ -D CMAKE_CXX_COMPILER_LAUNCHER=sccache ^ -D CMAKE_C_COMPILER_LAUNCHER=sccache ^ -D CMAKE_MSVC_RUNTIME_LIBRARY="MultiThreadedDLL" ^ -D CMAKE_BUILD_TYPE="Release" ^ -D BUILD_LIBMAMBA=ON ^ -D BUILD_LIBMAMBA_SPDLOG=ON ^ -D BUILD_STATIC=ON ^ -D BUILD_MICROMAMBA=ON if %errorlevel% neq 0 exit /b %errorlevel% cmake --build build/ --parallel if %errorlevel% neq 0 exit /b %errorlevel% sccache --show-stats if %errorlevel% neq 0 exit /b %errorlevel% .\build\micromamba\micromamba.exe --version if %errorlevel% neq 0 exit /b %errorlevel% .\build\micromamba\micromamba.exe --help if %errorlevel% neq 0 exit /b %errorlevel% - name: build cache statistics run: sccache --show-stats - name: Archive-build artifact if: failure() run: tar -czf ${{ github.workspace }}/micromamba-build-failed-win-64.tar.gz ${{ github.workspace }}/build/ - name: Test basic commands run: | mkdir test_prefix ${{ github.workspace }}/build/micromamba/micromamba.exe --version ${{ github.workspace }}/build/micromamba/micromamba.exe --help ${{ github.workspace }}/build/micromamba/micromamba.exe env create -y -n testenv -r ./test_prefix "python<3.13" ${{ github.workspace }}/build/micromamba/micromamba.exe list -n testenv -r ./test_prefix --log-level 1 - name: Upload build artifacts uses: actions/upload-artifact@v7 if: failure() with: name: micromamba-build-failed-win-64 path: ${{ github.workspace }}/micromamba-build-failed-win-64.tar.gz retention-days: 7 - uses: actions/upload-artifact@v7 with: name: micromamba-win-64 path: ${{ github.workspace }}/build/micromamba/micromamba.exe ================================================ FILE: .github/workflows/tests.yml ================================================ name: Mamba on: push: branches: - main - feat/* pull_request: branches: - main - feat/* paths-ignore: - "docs/**" - "**.md" merge_group: types: [checks_requested] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: unix_tests: name: Unix strategy: matrix: os: [ubuntu-latest, macos-latest] build_type: [release, debug] fail-fast: false uses: ./.github/workflows/unix_impl.yml with: os: ${{ matrix.os }} build_type: ${{ matrix.build_type }} win_tests: name: Windows strategy: matrix: os: [windows-latest] build_type: [release] fail-fast: true uses: ./.github/workflows/windows_impl.yml with: os: ${{ matrix.os }} build_type: ${{ matrix.build_type }} brew_tests: name: Homebrew and Linuxbrew toolchains uses: ./.github/workflows/brew.yml ================================================ FILE: .github/workflows/unix_impl.yml ================================================ name: Unix tests impl on: workflow_call: inputs: os: required: true type: string build_type: required: true type: string defaults: run: # micromamba activation shell: bash -l -eo pipefail {0} jobs: build_shared_unix: name: Build binaries runs-on: ${{ inputs.os }} steps: - name: Disk Space Before Clean Up if: startsWith(inputs.os, 'ubuntu') run: | df -h - name: Free Disk Space (Base Runner) if: startsWith(inputs.os, 'ubuntu') uses: jlumbroso/free-disk-space@v1.3.1 with: tool-cache: false large-packages: false docker-images: false - name: Free Disk Space (Container) if: startsWith(inputs.os, 'ubuntu') run: | rm -rf /mnt/usr/local/lib/android rm -rf /mnt/usr/share/dotnet rm -rf /mnt/usr/local/share/boost rm -rf /mnt/opt/ghc rm -rf /mnt/opt/hostedtoolcache/CodeQL rm -rf /mnt/usr/local/lib/node_modules - name: Disk Space After Clean Up if: startsWith(inputs.os, 'ubuntu') run: | df -h - name: Checkout mamba repository uses: actions/checkout@v6 - name: Create build environment uses: mamba-org/setup-micromamba@v2 with: environment-file: ./dev/environment-dev.yml environment-name: build_env cache-environment: true - uses: hendrikmuhs/ccache-action@main with: variant: sccache key: ${{ github.job }}-${{ inputs.os }} restore-keys: | ccache-libmamba-${{ inputs.os }} - name: Build mamba run: | cmake -B build/ -G Ninja \ --preset mamba-unix-shared-${{ inputs.build_type }} \ -D CMAKE_CXX_COMPILER_LAUNCHER=sccache \ -D CMAKE_C_COMPILER_LAUNCHER=sccache \ -D MAMBA_WARNING_AS_ERROR=ON \ -D BUILD_LIBMAMBAPY=OFF \ -D BUILD_LIBMAMBA_SPDLOG=ON \ -D BUILD_LIBMAMBA_SPDLOG_TESTS=ON \ -D ENABLE_MAMBA_ROOT_PREFIX_FALLBACK=OFF cmake --build build/ --parallel - name: Show build cache statistics run: sccache --show-stats - name: Lock environment run: micromamba env export --explicit > build/environment.lock - name: Remove extra files before saving workspace run: find build/ -type f -name '*.o' -exec rm {} + - name: Save workspace uses: ./.github/actions/workspace with: action: save path: build/ key_suffix: ${{ inputs.os }}-${{ inputs.build_type }} libmamba_tests_unix: name: libmamba tests needs: ["build_shared_unix"] runs-on: ${{ inputs.os }} steps: - name: Disk Space Before Clean Up if: startsWith(inputs.os, 'ubuntu') run: | df -h - name: Free Disk Space (Base Runner) if: startsWith(inputs.os, 'ubuntu') uses: jlumbroso/free-disk-space@v1.3.1 with: tool-cache: false large-packages: false docker-images: false - name: Free Disk Space (Container) if: startsWith(inputs.os, 'ubuntu') run: | rm -rf /mnt/usr/local/lib/android rm -rf /mnt/usr/share/dotnet rm -rf /mnt/usr/local/share/boost rm -rf /mnt/opt/ghc rm -rf /mnt/opt/hostedtoolcache/CodeQL rm -rf /mnt/usr/local/lib/node_modules - name: Disk Space After Clean Up if: startsWith(inputs.os, 'ubuntu') run: | df -h - name: Checkout mamba repository uses: actions/checkout@v6 - name: Restore workspace uses: ./.github/actions/workspace with: action: restore path: build/ key_suffix: ${{ inputs.os }}-${{ inputs.build_type }} - name: Create build environment uses: mamba-org/setup-micromamba@v2 with: environment-file: ./build/environment.lock environment-name: build_env - name: Run solv-cpp tests run: | ./build/libmamba/ext/solv-cpp/tests/test_solv_cpp - name: Run libmamba tests run: | unset CONDARC # Interferes with tests ./build/libmamba/tests/test_libmamba - name: Run libmamba logging system tests shell: bash -elo pipefail {0} run: | unset CONDARC # Interferes with tests ./build/libmamba/tests/test_libmamba_logging - name: Run libmamba spdlog-based logging tests shell: bash -elo pipefail {0} run: | unset CONDARC # Interferes with tests ./build/libmamba-spdlog/tests/test_libmamba_logging_spdlog libmambapy_tests_unix: name: libmambapy tests needs: ["build_shared_unix"] runs-on: ${{ inputs.os }} steps: - name: Disk Space Before Clean Up if: startsWith(inputs.os, 'ubuntu') run: | df -h - name: Free Disk Space (Base Runner) if: startsWith(inputs.os, 'ubuntu') uses: jlumbroso/free-disk-space@v1.3.1 with: tool-cache: false large-packages: false docker-images: false - name: Free Disk Space (Container) if: startsWith(inputs.os, 'ubuntu') run: | rm -rf /mnt/usr/local/lib/android rm -rf /mnt/usr/share/dotnet rm -rf /mnt/usr/local/share/boost rm -rf /mnt/opt/ghc rm -rf /mnt/opt/hostedtoolcache/CodeQL rm -rf /mnt/usr/local/lib/node_modules - name: Disk Space After Clean Up if: startsWith(inputs.os, 'ubuntu') run: | df -h - name: Checkout mamba repository uses: actions/checkout@v6 - name: Restore workspace uses: ./.github/actions/workspace with: action: restore path: build/ key_suffix: ${{ inputs.os }}-${{ inputs.build_type }} - name: Create build environment uses: mamba-org/setup-micromamba@v2 with: environment-file: ./build/environment.lock environment-name: build_env - name: Install libmambapy run: | cmake --install build/ --prefix "${CONDA_PREFIX}" # TODO add some ccache and parallelism to builds python -m pip install --no-deps --no-build-isolation ./libmambapy - name: Run libmamba Python bindings tests run: | # Only rerun flaky tests on the `main` branch python -m pytest libmambapy/tests/ \ ${{ runner.debug == 'true' && '-v --capture=tee-sys' || '--exitfirst' }} \ ${{ github.ref == 'refs/heads/main' && '--reruns 3' || '' }} - name: Test generation of libmambapy stubs run: stubgen -o stubs/ -p libmambapy -p libmambapy.bindings - name: Test libmambapy-stubs run: python -m build --wheel --no-isolation libmambapy-stubs/ mamba_integration_tests_unix: name: mamba integration tests needs: ["build_shared_unix"] runs-on: ${{ inputs.os }} steps: - name: Disk Space Before Clean Up if: startsWith(inputs.os, 'ubuntu') run: | df -h - name: Free Disk Space (Base Runner) if: startsWith(inputs.os, 'ubuntu') uses: jlumbroso/free-disk-space@v1.3.1 with: tool-cache: false large-packages: false docker-images: false - name: Free Disk Space (Container) if: startsWith(inputs.os, 'ubuntu') run: | rm -rf /mnt/usr/local/lib/android rm -rf /mnt/usr/share/dotnet rm -rf /mnt/usr/local/share/boost rm -rf /mnt/opt/ghc rm -rf /mnt/opt/hostedtoolcache/CodeQL rm -rf /mnt/usr/local/lib/node_modules - name: Disk Space After Clean Up if: startsWith(inputs.os, 'ubuntu') run: | df -h - name: Checkout mamba repository uses: actions/checkout@v6 - name: Restore workspace uses: ./.github/actions/workspace with: action: restore path: build/ key_suffix: ${{ inputs.os }}-${{ inputs.build_type }} - name: Create build environment uses: mamba-org/setup-micromamba@v2 with: environment-file: ./build/environment.lock environment-name: build_env - name: install zsh, xonsh, fish and tcsh in linux if: startsWith(inputs.os, 'ubuntu') run: | sudo apt-get install zsh xonsh fish tcsh -y - name: Install xonsh and fish in mac if: startsWith(inputs.os, 'macos') run: | brew install fish xonsh - name: Diagnose CURL/DNS issue run: | echo 'ping -c 3 conda.anaconda.org' ping -c 3 conda.anaconda.org || echo 'FAILED' echo '--------------------------------------------------' echo 'ping -c 3 repo.mamba.pm' ping -c 3 repo.mamba.pm || echo 'FAILED' echo '--------------------------------------------------' echo 'nslookup conda.anaconda.org' nslookup conda.anaconda.org || echo 'FAILED' echo '--------------------------------------------------' echo 'nslookup repo.mamba.pm' nslookup repo.mamba.pm || echo 'FAILED' echo '--------------------------------------------------' echo 'which curl' which curl || echo 'FAILED' echo '--------------------------------------------------' echo 'curl -I -vvvv https://conda.anaconda.org/conda-forge/noarch/repodata.json' curl -I -vvv https://conda.anaconda.org/conda-forge/noarch/repodata.json || echo 'FAILED' echo '--------------------------------------------------' echo 'curl -I -vvvv https://repo.mamba.pm/conda-forge/noarch/repodata.json' curl -I -vvv https://repo.mamba.pm/conda-forge/noarch/repodata.json || echo 'FAILED' - name: mamba python based tests run: | export TEST_MAMBA_EXE=$(pwd)/build/micromamba/mamba unset CONDARC # Interferes with tests # Only rerun flaky tests on the `main` branch python -m pytest micromamba/tests/ \ ${{ runner.debug == 'true' && '-v --capture=tee-sys' || '--exitfirst' }} \ ${{ github.ref == 'refs/heads/main' && '--reruns 3' || '' }} verify_pkg_and_auth_tests: name: mamba-content-trust and auth tests needs: ["build_shared_unix"] runs-on: ${{ inputs.os }} if: false # Disabled for now steps: - name: Disk Space Before Clean Up run: | df -h - name: Free Disk Space (Base Runner) uses: jlumbroso/free-disk-space@v1.3.1 with: tool-cache: false large-packages: false docker-images: false - name: Free Disk Space (Container) run: | rm -rf /mnt/usr/local/lib/android rm -rf /mnt/usr/share/dotnet rm -rf /mnt/usr/local/share/boost rm -rf /mnt/opt/ghc rm -rf /mnt/opt/hostedtoolcache/CodeQL rm -rf /mnt/usr/local/lib/node_modules - name: Disk Space After Clean Up run: | df -h - name: Checkout mamba repository uses: actions/checkout@v6 - name: Restore workspace uses: ./.github/actions/workspace with: action: restore path: build/ key_suffix: ${{ inputs.os }}-${{ inputs.build_type }} - name: Create build environment uses: mamba-org/setup-micromamba@v2 with: environment-file: ./build/environment.lock environment-name: build_env - name: Run tests using conda-content-trust (server side) shell: bash -l {0} -euo pipefail -x run: | export TEST_MAMBA_EXE=$(pwd)/build/micromamba/mamba export MAMBA_ROOT_PREFIX="${HOME}/micromamba" unset CONDARC # Interferes with tests cd micromamba/test-server ./generate_gpg_keys.sh ./testserver_auth_pkg_signing.sh ================================================ FILE: .github/workflows/windows_impl.yml ================================================ name: Windows tests impl on: workflow_call: inputs: os: required: true type: string build_type: required: true type: string defaults: run: # micromamba activation shell: cmd /C call {0} jobs: build_shared_win: name: Build binaries runs-on: ${{ inputs.os }} steps: - name: Checkout mamba repository uses: actions/checkout@v6 - name: Create build environment uses: mamba-org/setup-micromamba@v2 with: environment-file: ./dev/environment-dev.yml environment-name: build_env cache-environment: true init-shell: cmd.exe - uses: hendrikmuhs/ccache-action@main with: variant: sccache key: ${{ github.job }}-${{ inputs.os }} restore-keys: | ccache-libmamba-${{ inputs.os }} - name: Build mamba run: | cmake -B build/ -G Ninja ^ --preset mamba-win-shared-${{ inputs.build_type }} ^ -D CMAKE_MSVC_RUNTIME_LIBRARY="MultiThreadedDLL" ^ -D CMAKE_CXX_COMPILER_LAUNCHER=sccache ^ -D CMAKE_C_COMPILER_LAUNCHER=sccache ^ -D BUILD_LIBMAMBAPY=OFF ^ -D BUILD_LIBMAMBA_SPDLOG=ON ^ -D BUILD_LIBMAMBA_SPDLOG_TESTS=ON ^ -D ENABLE_MAMBA_ROOT_PREFIX_FALLBACK=OFF if %errorlevel% neq 0 exit /b %errorlevel% cmake --build build/ --parallel if %errorlevel% neq 0 exit /b %errorlevel% - name: Show build cache statistics run: sccache --show-stats - name: Lock environment run: micromamba env export --explicit > build/environment.lock - name: Remove extra files before saving workspace shell: bash -eo pipefail {0} run: find build/ -type f -name '*.obj' -exec rm {} + - name: Save workspace uses: ./.github/actions/workspace with: action: save path: build/ key_suffix: ${{ inputs.os }}-${{ inputs.build_type }} libmamba_tests_win: name: libmamba tests needs: ["build_shared_win"] runs-on: ${{ inputs.os }} steps: - name: Checkout mamba repository uses: actions/checkout@v6 - name: Restore workspace uses: ./.github/actions/workspace with: action: restore path: build/ key_suffix: ${{ inputs.os }}-${{ inputs.build_type }} - name: Create build environment uses: mamba-org/setup-micromamba@v2 with: environment-file: ./build/environment.lock environment-name: build_env init-shell: bash cmd.exe - name: Run solv-cpp tests shell: bash -elo pipefail {0} run: | ./build/libmamba/ext/solv-cpp/tests/test_solv_cpp - name: Run libmamba logging system tests shell: bash -elo pipefail {0} run: | unset CONDARC # Interferes with tests cd ./build/libmamba && ./tests/test_libmamba_logging - name: Run libmamba spdlog-based logging tests shell: bash -elo pipefail {0} run: | unset CONDARC # Interferes with tests cd ./build/libmamba && ../libmamba-spdlog/tests/test_libmamba_logging_spdlog - name: Run libmamba tests shell: bash -elo pipefail {0} run: | unset CONDARC # Interferes with tests cd ./build/libmamba && ./tests/test_libmamba libmambapy_tests_win: name: libmambapy tests needs: ["build_shared_win"] runs-on: ${{ inputs.os }} steps: - name: Checkout mamba repository uses: actions/checkout@v6 - name: Restore workspace uses: ./.github/actions/workspace with: action: restore path: build/ key_suffix: ${{ inputs.os }}-${{ inputs.build_type }} - name: Create build environment uses: mamba-org/setup-micromamba@v2 with: environment-file: ./build/environment.lock environment-name: build_env init-shell: bash cmd.exe - name: Install libmambapy run: | cmake --install build/ --prefix %CONDA_PREFIX% # TODO add some ccache and parallelism to builds python -m pip install --no-deps --no-build-isolation ./libmambapy - name: Run libmamba Python bindings tests run: | # Only rerun flaky tests on the `main` branch python -m pytest libmambapy/tests/ ^ ${{ runner.debug == 'true' && '-v --capture=tee-sys' || '--exitfirst' }} ^ ${{ github.ref == 'refs/heads/main' && '--reruns 3' || '' }} mamba_integration_tests_win: name: mamba integration tests needs: ["build_shared_win"] runs-on: ${{ inputs.os }} steps: - name: Checkout mamba repository uses: actions/checkout@v6 - name: Restore workspace uses: ./.github/actions/workspace with: action: restore path: build/ key_suffix: ${{ inputs.os }}-${{ inputs.build_type }} - name: Create build environment uses: mamba-org/setup-micromamba@v2 with: environment-file: ./build/environment.lock environment-name: build_env init-shell: bash cmd.exe powershell - name: Install mamba shell: bash -elo pipefail {0} run: | cmake --install build/ --prefix local/ - name: mamba python based tests with pwsh shell: pwsh run: | $env:PYTHONIOENCODING='UTF-8' $env:MAMBA_ROOT_PREFIX = Join-Path -Path $pwd -ChildPath 'mambaroot' $env:TEST_MAMBA_EXE = Join-Path -Path $pwd -ChildPath 'local\bin\mamba.exe' $env:MAMBA_TEST_SHELL_TYPE='powershell' Remove-Item -Path "env:CONDARC" # Only rerun flaky tests on the `main` branch python -m pytest micromamba/tests/ ` ${{ runner.debug == 'true' && '-v --capture=tee-sys' || '--exitfirst' }} ` ${{ github.ref == 'refs/heads/main' && '--reruns 3' || '' }} ================================================ FILE: .gitignore ================================================ # Git files *.orig # User Taskfile.yml Taskfile.yml Taskfile.yaml taskfile.yml taskfile.yaml # Mamba generated files include/mamba/core/version.hpp # OS files .DS_Store # Editor files .vscode .idea *.swap # CMake files **/build/ **/build-*/ CMakeUserPresets.json **/cmake-build-debug/ # CMake files that should not exists in the root dir because they should be generated under a build folder /CMakeLists.txt.user /CMakeCache.txt /CMakeFiles /CMakeScripts /Testing # There exist other Makefiles in /docs /Makefile cmake_install.cmake install_manifest.txt CTestTestfile.cmake _deps # Clang tools .cache/ compile_commands.json # Prerequisites *.d # Compiled Object files *.slo *.lo *.o *.obj # Precompiled Headers *.gch *.pch # Compiled Dynamic libraries *.so *.dylib *.dll # Fortran module files *.mod *.smod # Compiled Static libraries *.lai *.la *.a *.lib # Executables *.exe *.out *.app # Python caches *.pyc .ipynb_checkpoints/ .pytest_cache/ __pycache__ mamba.egg-info/ # Misc __cache__/ *.cppimporthash .rendered* installed.json tmp/ test_7.json.state _skbuild/ dist/ /vcpkg_installed/ ================================================ FILE: .isort.cfg ================================================ [settings] line_length=88 known_third_party=pybind11,conda,conda_env multi_line_output=3 include_trailing_comma=True force_grid_wrap=0 use_parentheses=True profile=black ================================================ FILE: .markdownlint.yaml ================================================ # Default state for all rules default: true # MD013/line-length - Line length MD013: # Number of characters line_length: 200 no-duplicate-heading: false ================================================ FILE: .pre-commit-config.yaml ================================================ exclude: libmamba/tests/data/repodata_json_cache* repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v6.0.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - id: check-merge-conflict - id: debug-statements language_version: python3 # Autoformat: YAML, JSON, Markdown, etc. - repo: https://github.com/rbubley/mirrors-prettier rev: v3.6.2 hooks: - id: prettier - repo: https://github.com/pre-commit/pygrep-hooks rev: v1.10.0 hooks: - id: rst-backticks - id: rst-directive-colons - id: rst-inline-touching-normal - repo: https://github.com/DavidAnson/markdownlint-cli2 rev: v0.18.1 hooks: - id: markdownlint-cli2 args: [--fix] - repo: https://github.com/asottile/pyupgrade rev: v3.21.2 hooks: - id: pyupgrade args: [--py39-plus] - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.14.0 hooks: - id: ruff-check args: [--fix] exclude_types: [pyi] - id: ruff-format - repo: https://github.com/asottile/blacken-docs rev: 1.20.0 hooks: - id: blacken-docs additional_dependencies: [black==24.10.0] - repo: https://github.com/pre-commit/mirrors-clang-format rev: v21.1.2 hooks: - id: clang-format args: [--style=file] exclude_types: [json] - repo: https://github.com/cheshirekow/cmake-format-precommit rev: v0.6.13 hooks: - id: cmake-format - repo: https://github.com/Quantco/pre-commit-mirrors-typos rev: 1.33.1 hooks: - id: typos-conda # In case of ambiguity (multiple possible corrections), `typos` will just report it to the user and move on without applying/writing any changes. # cf. https://github.com/crate-ci/typos args: [--write-changes] ================================================ FILE: .readthedocs.yml ================================================ version: 2 sphinx: # Path to Sphinx configuration file configuration: docs/source/conf.py build: os: "ubuntu-22.04" tools: python: "mambaforge-22.9" jobs: pre_build: - | ( cat docs/Doxyfile; echo "INPUT=libmamba/include"; echo "XML_OUTPUT=docs/xml" ) | doxygen - conda: environment: docs/environment.yml ================================================ FILE: CHANGELOG.md ================================================ ## 2026.01.08 Release: 2.5.0 (libmamba, mamba, micromamba, libmambapy) Enhancements: - [all] Remove `spdlog` from `libmamba`, provide `libmamba-spdlog` library by @Klaim in - [micromamba, libmamba] feat: Support environment variables modifications by @jjerphan in - [micromamba, libmamba] feat: Support cloning environment by @jjerphan in Bug fixes: - [micromamba] CMake adaptations for distributing libmamba-spdlog by @JohanMabille in - [micromamba, libmamba] fix: Pin `python_abi` when `python-freethreading` is installed by @jjerphan in - [micromamba, libmamba] fix: Resolve ca-certificates installed in the local environment by @jjerphan in - [micromamba, libmamba] fix: List all environments' names by @jjerphan in - [micromamba, libmamba] fix: list dependencies pulled with uv by @iisakkirotko in CI fixes and doc: - [all] Fix formatting of unordered lists in the docs by @pozdneev in - [all] docs: Uninstallation instructions by @jjerphan in - [all] Update README to remove QuantStack Zulip link by @jezdez in - [all] Change chat links to QuantStack and Conda Zulip by @jezdez in Maintenance: - [libmamba] fixed test "load_file_specs" too strict by @Klaim in - [all] build(deps): bump actions/cache from 4 to 5 by @app/dependabot in - [all] build(deps): bump actions/upload-artifact from 5 to 6 by @app/dependabot in - [all] build(deps): bump actions/cache from 4 to 5 in /.github/actions/workspace by @app/dependabot in - [all] build(deps): bump actions/checkout from 1 to 6 by @app/dependabot in ## 2026.01.07 Release: 2.5.0.rc0 (libmamba, mamba, micromamba, libmambapy) Enhancements: - [all] Remove `spdlog` from `libmamba`, provide `libmamba-spdlog` library by @Klaim in - [libmamba, micromamba] feat: Support environment variables modifications by @jjerphan in - [libmamba, micromamba] feat: Support cloning environment by @jjerphan in Bug fixes: - [micromamba] CMake adaptations for distributing libmamba-spdlog by @JohanMabille in - [libmamba, micromamba] fix: Pin `python_abi` when `python-freethreading` is installed by @jjerphan in - [libmamba, micromamba] fix: Resolve ca-certificates installed in the local environment by @jjerphan in - [libmamba, micromamba] fix: List all environments' names by @jjerphan in - [libmamba, micromamba] fix: list dependencies pulled with uv by @iisakkirotko in CI fixes and doc: - [all] Fix formatting of unordered lists in the docs by @pozdneev in - [all] docs: Uninstallation instructions by @jjerphan in - [all] Update README to remove QuantStack Zulip link by @jezdez in - [all] Change chat links to QuantStack and Conda Zulip by @jezdez in Maintenance: - [libmamba] fixed test "load_file_specs" too strict by @Klaim in - [all] build(deps): bump actions/cache from 4 to 5 by @app/dependabot in - [all] build(deps): bump actions/upload-artifact from 5 to 6 by @app/dependabot in - [all] build(deps): bump actions/cache from 4 to 5 in /.github/actions/workspace by @app/dependabot in ## 2025.11.21 Release: 2.4.0 (libmamba, mamba, micromamba, libmambapy) Enhancements: - [micromamba, libmamba] Support for `mambajs`'s environment lockfile format by @Klaim in - [all] Logging impl separation by @Klaim in Bug fixes: - [micromamba] fix: Update URL of lock files by @jjerphan in - [micromamba] Fix Windows tests by @JohanMabille in Maintenance: - [all] build(deps): bump actions/upload-artifact from 4 to 5 by @app/dependabot in - [libmamba] Removed deprecated libcurl backend by @JohanMabille in ## 2025.11.18 Release: 2.4.0.rc0 (libmamba, mamba, micromamba, libmambapy) Enhancements: - [libmamba, micromamba] Support for `mambajs`'s environment lockfile format by @Klaim in - [all] Logging impl separation by @Klaim in Bug fixes: - [micromamba] fix: Update URL of lock files by @jjerphan in - [micromamba] Fix Windows tests by @JohanMabille in Maintenance: - [all] build(deps): bump actions/upload-artifact from 4 to 5 by @app/dependabot in - [libmamba] Removed deprecated libcurl backend by @JohanMabille in ## 2025.10.17 Release: 2.3.3 (libmamba, mamba, micromamba, libmambapy) Bug fixes: - [libmamba] fix: pass `$argv` for fish wrapper by @sghng in - [libmamba] Fix empty depends/constrains when installing explicit spec files by @benmoss in - [libmamba] fix: proxy both micromamba and mamba with fish function by @sghng in - [libmamba] Fix nodiscard errors by @AntoinePrv in - [libmambapy] Fix deprecated license key by @AntoinePrv in CI fixes and doc: - [all] Added lower bounds on spdlog and fmt by @JohanMabille in - [all] Static Windows build fix by @JohanMabille in Maintenance: - [all] maint: Auto-update `pre-commit` setup by @jjerphan in - [micromamba] Fixed test_repodata_record_patch by @JohanMabille in - [all] build(deps): bump actions/github-script from 7 to 8 by @app/dependabot in - [libmambapy] Use fmt::format by @AntoinePrv in - [libmambapy] Move to Pybind 3.0 by @AntoinePrv in - [libmambapy, libmamba] libmambapy: Switch build backend to `scikit-build-core` by @LecrisUT in ## 2025.10.14 Release: 2.3.3.alpha1 (libmamba, mamba, micromamba, libmambapy) Bug fixes: - [libmamba] fix: pass `$argv` for fish wrapper by @sghng in - [libmamba] Fix empty depends/constrains when installing explicit spec files by @benmoss in - [libmamba] fix: proxy both micromamba and mamba with fish function by @sghng in - [libmamba] Fix nodiscard errors by @AntoinePrv in - [libmambapy] Fix deprecated license key by @AntoinePrv in CI fixes and doc: - [all] Added lower bounds on spdlog and fmt by @JohanMabille in - [all] Static Windows build fix by @JohanMabille in Maintenance: - [all] maint: Auto-update `pre-commit` setup by @jjerphan in - [micromamba] Fixed test_repodata_record_patch by @JohanMabille in - [all] build(deps): bump actions/github-script from 7 to 8 by @app/dependabot in - [libmambapy] Use fmt::format by @AntoinePrv in - [libmambapy] Move to Pybind 3.0 by @AntoinePrv in - [libmamba, libmambapy] libmambapy: Switch build backend to `scikit-build-core` by @LecrisUT in ## 2025.09.04 Release: 2.3.3.alpha0 (libmamba, mamba, micromamba, libmambapy) Bug fixes: - [libmamba] Fix nodiscard errors by @AntoinePrv in - [libmambapy] Fix deprecated license key by @AntoinePrv in Maintenance: - [libmambapy] Use fmt::format by @AntoinePrv in - [libmambapy] Move to Pybind 3.0 by @AntoinePrv in - [libmamba, libmambapy] libmambapy: Switch build backend to `scikit-build-core` by @LecrisUT in ## 2025.08.26 Release: 2.3.2 (libmamba, mamba, micromamba, libmambapy) Enhancements: - [all] feat: Support for optional `python_site_packages_path` in repodata by @jjhelmus in Bug fixes: - [libmamba] Fix libsolv MatchSpec parsing by @AntoinePrv in - [all] fix: Workaround `mamba-org/mamba#4043` by @jjerphan in - [libmamba] Fix string lookup in MatchSpec parsing by @AntoinePrv in - [libmamba] Fix wrong sticky package hash by @AntoinePrv in Maintenance: - [libmamba] `synchronized_value` move and copy implementation by @Klaim in ## 2025.07.28 Release: 2.3.1 (libmamba, mamba, micromamba, libmambapy) Enhancements: - [libmambapy, libmamba] Add missing bindings and other improvements by @AntoinePrv in Bug fixes: - [libmamba, micromamba] Consider `SHELL` env var by @Hind-M in CI fixes and doc: - [all] [skip ci] Fix typo by @davidbrochart in - [all] ci: use VS2022 instead of VS2019 by @Klaim in Maintenance: - [libmamba] fix CI issues related to moving dependencies by @Klaim in - [libmamba] maint: use `synchronized_value` where we use a mutex to protect data by @Klaim in - [libmambapy] maint: handle `fmt>=11.2` by @Klaim in - [libmambapy] Handle removed `is_rgb` from `fmt 11.2.0` by @Hind-M in - [libmamba] Replace macros used in tests for compatibility with coverage report by @jjerphan in - [libmamba] maint: fixes warnings by @Klaim in - [libmamba] `synchronized_value` by @Klaim in - [libmamba] maintenance: fixed msvc warnings about unreachable code by @Klaim in ## 2025.06.16 Release: 2.3.0 (libmamba, mamba, micromamba, libmambapy) Enhancements: - [libmamba, micromamba] feat: add option revision to install command by @SandrineP in - [libmambapy] Add missing bindings by @AntoinePrv in - [all] Adapt label check to bot by @Hind-M in - [libmambapy] Move stubs to libmambapy-stubs by @AntoinePrv in - [all] Move PR template by @Hind-M in Bug fixes: - [libmamba, micromamba] fix: Skip inaccessible CONDA_ENVS_DIRS by @holzman in - [libmamba] Fix env vars substitution from env yaml file by @Hind-M in - [libmambapy] Add missing init bindings from subdir structs by @AntoinePrv in - [libmambapy] Enable and update Python stubs by @AntoinePrv in CI fixes and doc: - [all] doc: Mention fix for `libmamba Download error (7) Could not connect ...` by @OverLordGoldDragon in - [all] Add constraint on `fmt` by @Hind-M in Maintenance: - [all] Depend on LGPL builds of libarchive>=3.8 by @jjerphan in - [libmamba, libmambapy] Use range in Solution by @AntoinePrv in - [micromamba] maint: Cancel activation script removal by @jjerphan in - [all] Compile with C++20 by @AntoinePrv in ## 2025.06.04 Release: 2.2.0 (libmamba, mamba, micromamba, libmambapy) Enhancements: - [all] Allow users to set labels on PRs by @Hind-M in - [libmamba, micromamba] support installing pip dependencies with uv by @iisakkirotko in - [libmamba] Load local path when offline by @AntoinePrv in Bug fixes: - [libmamba, micromamba] Fix listing dependencies pulled with `pip` by @Hind-M in - [libmamba, micromamba] Handle environment variables from `yaml` file by @Hind-M in - [libmamba] Fix fmt headers includes by @Hind-M in - [libmamba, micromamba] unify channels of installed and removed packages written in history by @SandrineP in - [libmamba] Create packages diff between the current state and a revision by @SandrineP in - [libmamba] Fix deactivate nushell by @cvanelteren in - [libmamba] Fix wrong use of deprecation macro by @AntoinePrv in - [libmamba, micromamba] Fix typo in help menu for the `reactivate` command by @ickc in - [libmamba, micromamba] Unify CONDA_ENVS_PATH, CONDA_ENVS_DIRS by @holzman in - [libmamba, micromamba] Allow creating environment with empty folder as target prefix by @nsoranzo in - [libmamba] [Unix] Fix slashes usage in file urls by @Hind-M in - [libmamba] fix: Avoid use-after-free in MessageLogger by @jmakovicka in - [libmamba, libmambapy] Remove implicit zero in Version formatting by @AntoinePrv in CI fixes and doc: - [all] ci: Disable GitHub annotations for Codecov in PRs by @jjerphan in - [all] Remove obsolete mamba/micromamba differences by @AntoinePrv in Maintenance: - [all] Compile with C++20 by @AntoinePrv in - [libmamba] Use fmt::runtime where needed in C++20 by @AntoinePrv in - [libmamba] Out of context by @JohanMabille in - [all] Transaction context by @JohanMabille in - [libmamba, libmambapy] Context dependency reduction by @JohanMabille in - [micromamba] Make integration tests not rely on specific organisation of packages by @Klaim in - [libmamba] Constexpr `fmt::formatter::parse` for C++20 with `from_chars` by @AntoinePrv in - [libmamba] Constexpr `fmt::formatter::parse` for C++20 by @AntoinePrv in - [all] Refactor `SubdirData` > `SubdirIndexLoader` by @AntoinePrv in - [libmambapy] Avoid ODR violation for `type_caster` by @jjerphan in - [libmamba] Remove temp_file from public API by @AntoinePrv in - [all] Adapt citation information for mamba by @jjerphan in - [libmamba] Use range in subdir iteration by @AntoinePrv in - [libmamba, libmambapy] Simplify SubdirData by @AntoinePrv in - [libmamba, libmambapy] Remove Context from downloaders by @AntoinePrv in - [all] Rename str > to_string by @AntoinePrv in - [libmamba, libmambapy] Matchspec hardening by @AntoinePrv in ## 2025.05.05 Release: 2.1.1 (libmamba, mamba, micromamba, libmambapy) Enhancements: - [libmamba] Use Simdjson ondemand parser instead of DOM parser by @Klaim in Bug fixes: - [libmamba] Fix segfault in error messages by @AntoinePrv in - [libmamba] fix: Requalify warning when parsing the "mod/etag" header by @jjerphan in - [micromamba] Make `self-update` a command for micromamba only by @jjerphan in - [libmamba] Fix nushell env for Windows by @cvanelteren in - [libmamba, micromamba] fix: Give precedence to repodata when constructing `repodata_record` files by @jjerphan in - [libmamba, micromamba] feat: add sha256 flag to list command by @SandrineP in - [libmamba, libmambapy] Fix VersionSpec globs by @AntoinePrv in - [micromamba] hotfix: in integration tests assume xtensor is v0.26 by @Klaim in CI fixes and doc: - [all] Explicit API and ABI stability commitments by @AntoinePrv in - [all] Add minimal citation information for mamba by @jjerphan in Maintenance: - [libmambapy] DX: libmambapy import in build tree by @AntoinePrv in - [libmamba] Internally add flag for switching MatchSpec parser by @AntoinePrv in - [micromamba] Some test isolation by @AntoinePrv in - [libmamba] Ready Libsolv for C++20 by @AntoinePrv in - [all] build(deps): bump codecov/codecov-action from 4 to 5 by @app/dependabot in - [all] ci: Adapt code coverage workflow by @jjerphan in ## 2025.04.01 Release: 2.1.0 (libmamba, mamba, micromamba, libmambapy) Bug fixes: - [micromamba, libmamba] fix: Prohibit conda envs path and conda envs dirs by @holzman in - [libmamba] fix: ProgressBar member initialization order by @jmakovicka in - [micromamba, libmamba] Fix authenticated downloading by @Hind-M in - [micromamba, libmamba] Windows menuinst by @Hind-M in - [libmamba, libmambapy] Support SHA256 hashes in @EXPLICIT files by @jaimergp in ## 2025.03.19 Release: 2.0.8 (libmamba, mamba, micromamba, libmambapy) Bug fixes: - [micromamba] fix: Correct paths and suggestions in `etc/profile.d/mamba.sh` by @jjerphan in - [libmamba] Avoid possible out of range index in MatchSpec::parse() by @opoplawski in - [libmamba] fix: Modify cache directory permissions in two steps by @jjerphan in ## 2025.03.07 Release: 2.0.7 (libmamba, mamba, micromamba, libmambapy) Bug fixes: - [libmamba, micromamba] fix: Adapt root prefix' precedence for CONDA_ENVS_PATH by @holzman in - [libmamba, micromamba] feat: add envs flag to info command by @SandrineP in - [libmamba, micromamba] feat: add revisions flag to list command by @SandrineP in - [libmamba] fix: Remove invalid cached tarballs by @jjerphan in - [libmamba, micromamba] fix: Create directories from `envs_dirs` if they do not exist by @holzman in - [all] Add `x86_64` archspec support for Windows by @jjerphan in - [all] Use correct `url` in metadata and mirrors by @Hind-M in - [all] Add base flag to info command by @SandrineP in - [all] Explain unsolvable updates by @k-collie in - [all] Adapt root prefix' precedence for `envs_dirs` by @holzman in - [all] Fix windows paths and add tests by @Hind-M in - [all] Adaptive level for compatible Version formatting by @jjerphan in - [all] add export flag to list command by @SandrineP in - [mamba] Warn about future removal of `etc/profile.d/mamba.sh` by @jjerphan in - [all] Use `libmamba`'s installation instead of `mamba`'s as a fallback by @jjerphan in - [all] add canonical flag to list command by @SandrineP in - [all] Factor handling of `GetModuleFileNameW` by @jjerphan in - [all] Adapt root prefix determination by @jjerphan in - [all] Remove pip warning for `PIP_NO_PYTHON_VERSION_WARNING` by @Hind-M in - [all] Add md5 flag to list command by @SandrineP in - [all] Support globs in `MatchSpec` build strings by @jjerphan in - [all] Don't encode URLs for `mamba env export --explicit` by @maresb in - [all] Uncomment no more failing test by @Hind-M in - [all] Use CA certificates from `conda-forge::ca-certificates` by @jjerphan in - [all] Handle `git+https` pip urls by @Hind-M in - [all] Add explicit flag to list command by @SandrineP in - [all] Fix dependency and `subdir` in repoquery `whoneeds` by @Hind-M in - [all] Use `LOG_DEBUG` for CUDA version detection by @jjerphan in - [all] Add missing thread and undefined sanitizers CMake options by @mathbunnyru in - [all] Add reverse flag to list command by @SandrineP in - [all] Support more condarc paths by @SandrineP in - [all] Add a hint on cache corruption by @jjerphan in - [mamba, micromamba] Options args enhancement by @Hind-M in - [all] Correctly populate lists of `MatchSpec` in `MTransaction`'s history by @Hind-M in - [all] Honour `CONDA_ENVS_PATH` again by @jjerphan in - [mamba] Generate and install `etc/profile.d/mamba.sh` by @jjerphan in - [all] Improve CUDA version detection by @jjerphan in - [all] Support installation using explicit url by @Hind-M in - [all] Improve display of environment activation message by @Hind-M in - [all] Adapt warnings shown when several channels are used by @jjerphan in - [all] Always add `root_prefix/envs` in `envs_dirs` by @Hind-M in - [mamba] Add `no-pip` flag to `list` command by @Hind-M in CI fixes and doc: - [all] build(deps): bump uraimo/run-on-arch-action from 2 to 3 by @app/dependabot in - [all] ci: Add "release::maintenance" Pull Request label by @jjerphan in - [micromamba] fix: Temporarily skip `test_pip_git_https_lockfile` by @jjerphan in - [all] Warning as error default to OFF and enabled in CI by @JohanMabille in - [all] Add missing config for RTD by @Hind-M in - [all] Write command in multiple lines by @Hind-M in - [all] Document that mamba 2 only supports trailing globs in version strings by @jdblischak in - [all] Add prettier pre-commit hook by @mathbunnyru in - [all] Update Linux installation script for Nushell by @deephbz in - [all] Unique Release Tag by @Klaim in - [all] `update_changelog.py` now can also take input as cli parameters by @Klaim in - [all] Use a portable web request for Windows by @jjerphan in - [all] Document slight differences for environment export by @jjerphan in Maintenance: - [all] Add markdownlint pre-commit hook by @mathbunnyru in - [all] Consistently name `Database` objects by @jjerphan in - [all] Remove unused structure in update path by @jjerphan in - [all] Also run workflows for `feat/*` branches by @jjerphan in - [all] Fix typo in Windows workflows by @jjerphan in - [all] Rerun pytest tests on `main` in case of failures by @jjerphan in - [all] `list` refactoring by @SandrineP in - [all] Fix build status badge by @mathbunnyru in - [all] Don't exclude Changelog files from typos-conda by @mathbunnyru in - [all] Update pre-commit hooks by by @mathbunnyru - [all] Correctly exclude json files in clang-format by @mathbunnyru in ## 2025.03.05 Release: 2.0.7.rc1 (libmamba, mamba, micromamba, libmambapy) Bug fixes: - [libmamba] fix: Remove invalid cached tarballs by @jjerphan in - [libmamba, micromamba] fix: Create directories from `envs_dirs` if they do not exist by @holzman in CI fixes and doc: - [all] build(deps): bump uraimo/run-on-arch-action from 2 to 3 by @app/dependabot in - [all] ci: Add "release::maintenance" Pull Request label by @jjerphan in - [micromamba] fix: Temporarily skip `test_pip_git_https_lockfile` by @jjerphan in ## 2025.02.24 Release: 2.0.7.rc0 (libmamba, mamba, micromamba, libmambapy) Bug fixes: - [all] Add `x86_64` archspec support for Windows by @jjerphan in - [all] Use correct `url` in metadata and mirrors by @Hind-M in - [all] Add base flag to info command by @SandrineP in - [all] Explain unsolvable updates by @k-collie in - [all] Adapt root prefix' precedence for `envs_dirs` by @holzman in - [all] Fix windows paths and add tests by @Hind-M in - [all] Adaptive level for compatible Version formatting by @jjerphan in - [all] add export flag to list command by @SandrineP in CI fixes and doc: - [all] Add missing config for RTD by @Hind-M in - [all] Warning as error default to OFF and enabled in CI by @JohanMabille in - [all] Write command in multiple lines by @Hind-M in - [all] Document that mamba 2 only supports trailing globs in version strings by @jdblischak in Maintenance: - [all] Also run workflows for `feat/*` branches by @jjerphan in - [all] Add markdownlint pre-commit hook by @mathbunnyru in - [all] Consistently name `Database` objects by @jjerphan in - [all] Remove unused structure in update path by @jjerphan in ## 2025.02.04 Release: 2.0.6 (libmamba, mamba, micromamba, libmambapy) Enhancements: - [all] Add reverse flag to list command by @SandrineP in - [all] Add md5 flag to list command by @SandrineP in - [all] add canonical flag to list command by @SandrineP in Bug fixes: - [all] Correctly populate lists of `MatchSpec` in `MTransaction`'s history by @Hind-M in - [all] Honour `CONDA_ENVS_PATH` again by @jjerphan in - [all] Improve CUDA version detection by @jjerphan in - [all] Support installation using explicit url by @Hind-M in - [all] Improve display of environment activation message by @Hind-M in - [all] Adapt warnings shown when several channels are used by @jjerphan in - [all] Add a hint on cache corruption by @jjerphan in - [all] Support more condarc paths by @SandrineP in - [all] Always add `root_prefix/envs` in `envs_dirs` by @Hind-M in - [mamba] Generate and install `etc/profile.d/mamba.sh` by @jjerphan in - [mamba] Add `no-pip` flag to `list` command by @Hind-M in - [mamba, micromamba] Options args enhancement by @Hind-M in - [all] Support globs in `MatchSpec` build strings by @jjerphan in - [all] Don't encode URLs for `mamba env export --explicit` by @maresb in - [all] Handle `git+https` pip urls by @Hind-M in - [all] Uncomment no more failing test by @Hind-M in - [all] Use CA certificates from `conda-forge::ca-certificates` by @jjerphan in - [all] Add explicit flag to list command by @SandrineP in - [all] Fix dependency and `subdir` in repoquery `whoneeds` by @Hind-M in - [all] Use `LOG_DEBUG` for CUDA version detection by @jjerphan in - [all] Add missing thread and undefined sanitizers CMake options by @mathbunnyru in - [all] Factor handling of `GetModuleFileNameW` by @jjerphan in - [all] Adapt root prefix determination by @jjerphan in - [all] Remove pip warning for `PIP_NO_PYTHON_VERSION_WARNING` by @Hind-M in - [all] Use `libmamba`'s installation instead of `mamba`'s as a fallback by @jjerphan in - [mamba] Warn about future removal of `etc/profile.d/mamba.sh` by @jjerphan in - [all] Fix typo in Windows workflows by @jjerphan in - [all] Rerun pytest tests on `main` in case of failures by @jjerphan in CI fixes and doc: - [all] Use a portable web request for Windows by @jjerphan in - [all] Add prettier pre-commit hook by @mathbunnyru in - [all] Document slight differences for environment export by @jjerphan in - [all] Unique Release Tag by @Klaim in - [all] Update Linux installation script for Nushell by @deephbz in - [all] `update_changelog.py` now can also take input as cli parameters by @Klaim in Maintenance: - [all] `list` refactoring by @SandrineP in - [all] Correctly exclude json files in clang-format by @mathbunnyru in - [all] Fix build status badge by @mathbunnyru in - [all] Don't exclude Changelog files from typos-conda by @mathbunnyru in - [all] Update pre-commit hooks by by @mathbunnyru ## 2025.02.04 Release: 2.0.6.rc3 (libmamba, mamba, micromamba, libmambapy) Enhancement: - [all] add canonical flag to list command by @SandrineP in Bug fixes: - [all] Use `libmamba`'s installation instead of `mamba`'s as a fallback by @jjerphan in Maintenance: - [mamba] Warn about future removal of `etc/profile.d/mamba.sh` by @jjerphan in - [all] Fix typo in Windows workflows by @jjerphan in - [all] Rerun pytest tests on `main` in case of failures by @jjerphan in ## 2025.01.31 Release: 2.0.6.rc2 (libmamba, mamba, micromamba, libmambapy) Enhancements: - [all] Add md5 flag to list command by @SandrineP in Bug fixes: - [all] Factor handling of `GetModuleFileNameW` by @jjerphan in - [all] Adapt root prefix determination by @jjerphan in - [all] Remove pip warning for `PIP_NO_PYTHON_VERSION_WARNING` by @Hind-M in ## 2025.01.28 Release: 2.0.6.rc1 (libmamba, mamba, micromamba, libmambapy) Enhancements: - [all] Add reverse flag to list command by @SandrineP in Bug fixes: - [all] Support globs in `MatchSpec` build strings by @jjerphan in - [all] Don't encode URLs for `mamba env export --explicit` by @maresb in - [all] Handle `git+https` pip urls by @Hind-M in - [all] Uncomment no more failing test by @Hind-M in - [all] Use CA certificates from `conda-forge::ca-certificates` by @jjerphan in - [all] Add explicit flag to list command by @SandrineP in - [all] Fix dependency and `subdir` in repoquery `whoneeds` by @Hind-M in - [all] Use `LOG_DEBUG` for CUDA version detection by @jjerphan in - [all] Add missing thread and undefined sanitizers CMake options by @mathbunnyru in Maintenance: - [all] `list` refactoring by @SandrineP in - [all] Correctly exclude json files in clang-format by @mathbunnyru in - [all] Fix build status badge by @mathbunnyru in - [all] Don't exclude Changelog files from typos-conda by @mathbunnyru in - [all] Update pre-commit hooks by by @mathbunnyru ## 2025.01.14 Release: 2.0.6.rc0 (libmamba, mamba, micromamba, libmambapy) Bug fixes: - [all] Correctly populate lists of `MatchSpec` in `MTransaction`'s history by @Hind-M in - [all] Honour `CONDA_ENVS_PATH` again by @jjerphan in - [all] Improve CUDA version detection by @jjerphan in - [all] Support installation using explicit url by @Hind-M in - [all] Improve display of environment activation message by @Hind-M in - [all] Adapt warnings shown when several channels are used by @jjerphan in - [all] Add a hint on cache corruption by @jjerphan in - [all] Support more condarc paths by @SandrineP in - [all] Always add `root_prefix/envs` in `envs_dirs` by @Hind-M in - [mamba] Generate and install `etc/profile.d/mamba.sh` by @jjerphan in - [mamba] Add `no-pip` flag to `list` command by @Hind-M in - [mamba, micromamba] Options args enhancement by @Hind-M in CI fixes and doc: - [all] Use a portable web request for Windows by @jjerphan in - [all] Add prettier pre-commit hook by @mathbunnyru in - [all] Document slight differences for environment export by @jjerphan in - [all] Unique Release Tag by @Klaim in - [all] Update Linux installation script for Nushell by @deephbz in - [all] `update_changelog.py` now can also take input as cli parameters by @Klaim in ## 2024.12.12 Releases: libmamba 2.0.5, libmambapy 2.0.5, micromamba 2.0.5 Enhancements: - [all] `micromamba/mamba --version` displays pre-release version names + establishes pre-release versions name scheme by @Klaim in Bug fixes: - [libmamba] Fix channel in `PackageInfo` by @Hind-M in - [libmamba] fix: Clarify shell init dry runs outputs by @jjerphan in - [libmamba] fix: Wrap `MAMBA_EXE` around double quotes in run shell script by @luciorq in - [libmamba] fix: Activated environment name by @jjerphan in - [libmamba] Fixed uninitialized variable in curl handler by @JohanMabille in - [libmamba, micromamba] fix: Skip empty lines in environment spec files by @jjerphan in - [all] Handle `.tar.gz` in pkg url by @Hind-M in - [libmamba, micromamba] fix: Effectively apply dry-run on installation from PyPI by @jjerphan in - [libmamba, micromamba] fix: Handle environment with empty or absent `dependencies` by @jjerphan in - [micromamba] fix: Reintroduce the `uninstall` command by @jjerphan in - [libmamba] Allow repoquery on non env prefix by @Hind-M in CI fixes and doc: - [all] Introducing mamba Guru on Gurubase.io by @kursataktas in - [micromamba] build: Remove server by @jjerphan in - [all] docs: Clarify installation of lock file by @jjerphan in - [all] maint: Add pre-commit typos back by @mathbunnyru in - [libmamba, micromamba] maint: Cleanup CMake files and delete not compiled files by @mathbunnyru in - [libmambapy, micromamba] maint: Add pyupgrade pre-commit hook by @mathbunnyru in - [all] docs: Adapt shell completion subsection by @jjerphan in - [all] maint: Restructure docs configuration file and improve docs pages by @mathbunnyru in - [libmamba] maint: Use Catch2 instead of doctest by @mathbunnyru in - [all] docs: Remove installation non-recommendation by @jjerphan in - [libmambapy] ci: Remove Conda Nightly tests by @jjerphan in ## 2024.12.09 Releases: libmamba 2.0.5.rc0, libmambapy 2.0.5.rc0, micromamba 2.0.5.rc0 Enhancements: - [all] `micromamba/mamba --version` displays pre-release version names + establishes pre-release versions name scheme by @Klaim in Bug fixes: - [libmamba] fix: Wrap `MAMBA_EXE` around double quotes in run shell script by @luciorq in - [libmamba] fix: Activated environment name by @jjerphan in - [libmamba] Fixed uninitialized variable in curl handler by @JohanMabille in - [libmamba, micromamba] fix: Skip empty lines in environment spec files by @jjerphan in - [all] Handle `.tar.gz` in pkg url by @Hind-M in - [libmamba, micromamba] fix: Effectively apply dry-run on installation from PyPI by @jjerphan in - [libmamba, micromamba] fix: Handle environment with empty or absent `dependencies` by @jjerphan in - [micromamba] fix: Reintroduce the `uninstall` command by @jjerphan in - [libmamba] Allow repoquery on non env prefix by @Hind-M in CI fixes and doc: - [libmamba, micromamba] maint: Cleanup CMake files and delete not compiled files by @mathbunnyru in - [libmambapy, micromamba] maint: Add pyupgrade pre-commit hook by @mathbunnyru in - [all] docs: Adapt shell completion subsection by @jjerphan in - [all] maint: Restructure docs configuration file and improve docs pages by @mathbunnyru in - [libmamba] maint: Use Catch2 instead of doctest by @mathbunnyru in - [all] docs: Remove installation non-recommendation by @jjerphan in - [libmambapy] ci: Remove Conda Nightly tests by @jjerphan in ## 2024.11.22 Releases: libmamba 2.0.4, libmambapy 2.0.4, micromamba 2.0.4 Enhancements: - [micromamba] feat: List PyPI packages in environment export by @jjerphan in - [libmamba] More details in error message when failing to parse json from a python command's output by @Klaim in - [libmamba] Fix: json parsing error due to wrong encoding of Python output by @Klaim in - [libmamba] Adds logs clarifying the source of the error "could not load prefix data by @Klaim in - [libmamba, micromamba] pip packages support with `list` by @Hind-M in - [libmamba, libmambapy] chore: some CMake cleanup by @henryiii in - [libmamba] Replaced rstrip reimplementation with call to remove_suffix by @JohanMabille in Bug fixes: - [micromamba, libmamba] fix: Return JSON on environment creation dry run by @jjerphan in - [libmamba] fix: support homebrew/linuxbrew (AppleClang, GCC 11) by @henryiii in - [libmamba, libmambapy] maint: Enable -Werror compiler flag for GCC, Clang and AppleClang by @mathbunnyru in - [libmamba] Fix build trailing `*` display by @Hind-M in - [libmamba] fixed: incorrect erasing of env vars by @Klaim in - [libmamba] Prevent pip "rich" output by @Klaim in - [micromamba, libmamba] maint: Address compiler warnings by @mathbunnyru in - [micromamba] fix: Export `'channels'` as part of environments' export by @mathbunnyru in - [libmamba] Fix some warnings by @mathbunnyru in - [all] Remove Taskfile from `environment-dev-extra.yml` by @mathbunnyru in - [all] fixed incorrect syntax in static_build.yml by @Klaim in - [micromamba] fix: Correct `mamba env export --json --from-history` by @mathbunnyru in - [libmamba] fix: Skip misformatted configuration files by @ChaonengQuan in - [libmamba] Fix locking error by @Hind-M in - [libmamba, micromamba] Fix test on windows by @Hind-M in - [libmamba] fix: Only register channels in the context once by @jjerphan in - [micromamba] fix: JSON output for environment export by @jjerphan in - [micromamba] fix: Support `conda env export` `no-builds` flag by @jjerphan in - [micromamba] fix: Export the environment prefix in specification by @jjerphan in - [libmamba] windows shell init files use executable name by @Klaim in - [libmamba, micromamba] Fix relative path in local channel by @Hind-M in - [libmamba, micromamba] Correctly rename test to be run by @Hind-M in - [libmamba, micromamba] Create empty base prefix with `env update` by @Hind-M in - [libmamba, micromamba] fix: Use POSIX-compliant scripts by @jjerphan in - [libmamba, micromamba] maint: Clarify `env` subcommand documentation in help menu (cont'd) by @jjerphan in - [libmamba] fix: Handle space in `mamba` and `micromamba` executable absolute paths by @NewUserHa in - [libmamba, micromamba] maint: Clarify `env` subcommand documentation in help menu by @jjerphan in - [micromamba] fix: Adapt `test_env_update_pypi_with_conda_forge` by @jjerphan in - [libmamba] Add recommendation if error with root prefix by @Hind-M in - [libmamba] fix: Ignore inline comment in environment specification by @jjerphan in - [libmamba] Replace `[System.IO.Path]::GetFileNameWithoutExtension` with `-replace` by @mleistner-bgr in - [libmamba] Fix warnings and co by @Hind-M in CI fixes and doc: - [all] ci: add brew toolchain test by @henryiii in - [all] doc: show how to use advanced match specs in yaml spec by @corneliusroemer in - [all] Doc: how to install specific Micromamba version by @truh in - [all] doc: Homebrew currently only installs micromamba v1 by @corneliusroemer in - [all] maint: Add dependabot config for GitHub workflows/actions by @mathbunnyru in - [all] maint: Unify `cmake` calls in workflows, build win static builds in p… by @mathbunnyru in - [all] docs: Update pieces of documentation after the release of mamba 2 by @jjerphan in - [libmambapy, libmamba] maint: Update clang-format to v19 by @mathbunnyru in - [micromamba, libmamba] Update pre-commit hooks except clang-format by @mathbunnyru in - [all] Force spinx v6 in readthedocs by @mathbunnyru in - [all] Fix doc by @Hind-M in - [all] [windows-vcpkg] Replace deprecated openssl with crypto feature with latest libarchive by @Hind-M in - [all] maint: Unpin libcurl<8.10 by @jjerphan in - [all] dev: Remove the use of Taskfile by @jjerphan in - [all] Upgraded CI to micromamba 2.0.2 by @JohanMabille in ## 2024.11.21 Releases: libmamba 2.0.4alpha3, libmambapy 2.0.4alpha3, micromamba 2.0.4alpha3 Enhancements: - [micromamba] feat: List PyPI packages in environment export by @jjerphan in Bug fixes: - [libmamba] Fix build trailing `*` display by @Hind-M in - [libmamba] fixed: incorrect erasing of env vars by @Klaim in - [libmamba] Prevent pip "rich" output by @Klaim in - [micromamba, libmamba] maint: Address compiler warnings by @mathbunnyru in - [micromamba] fix: Export `'channels'` as part of environments' export by @mathbunnyru in CI fixes and doc: - [all] doc: show how to use advanced match specs in yaml spec by @corneliusroemer in - [all] Doc: how to install specific Micromamba version by @truh in - [all] doc: Homebrew currently only installs micromamba v1 by @corneliusroemer in - [all] maint: Add dependabot config for GitHub workflows/actions by @mathbunnyru in - [all] maint: Unify `cmake` calls in workflows, build win static builds in p… by @mathbunnyru in - [all] docs: Update pieces of documentation after the release of mamba 2 by @jjerphan in - [libmambapy, libmamba] maint: Update clang-format to v19 by @mathbunnyru in ## 2024.11.14 Releases: libmamba 2.0.4alpha2, libmambapy 2.0.4alpha2, micromamba 2.0.4alpha2 Enhancements: - [libmamba] More details in error message when failing to parse json from a python command's output by @Klaim in Bug fixes: - [libmamba] Fix some warnings by @mathbunnyru in - [all] Remove Taskfile from `environment-dev-extra.yml` by @mathbunnyru in CI fixes and doc: - [micromamba, libmamba] Update pre-commit hooks except clang-format by @mathbunnyru in - [all] Force spinx v6 in readthedocs by @mathbunnyru in ## 2024.11.12-0 Releases: libmamba 2.0.4alpha1, libmambapy 2.0.4alpha1, micromamba 2.0.4alpha1 Bug fixes: - [all] fixed incorrect syntax in static_build.yml by @Klaim in - [micromamba] fix: Correct `mamba env export --json --from-history` by @mathbunnyru in ## 2024.11.12 Releases: libmamba 2.0.4alpha0, libmambapy 2.0.4alpha0, micromamba 2.0.4alpha0 Enhancements: - [libmamba] Fix: json parsing error due to wrong encoding of Python output by @Klaim in - [libmamba] Adds logs clarifying the source of the error "could not load prefix data by @Klaim in Bug fixes: - [libmamba] fix: Skip misformatted configuration files by @ChaonengQuan in ## 2024.11.05 Releases: libmamba 2.0.3, libmambapy 2.0.3, micromamba 2.0.3 Enhancements: - [libmamba, micromamba] pip packages support with `list` by @Hind-M in - [libmamba, libmambapy] chore: some CMake cleanup by @henryiii in - [libmamba] Replaced rstrip reimplementation with call to remove_suffix by @JohanMabille in Bug fixes: - [libmamba] Fix locking error by @Hind-M in - [libmamba, micromamba] Fix test on windows by @Hind-M in - [libmamba] fix: Only register channels in the context once by @jjerphan in - [micromamba] fix: JSON output for environment export by @jjerphan in - [micromamba] fix: Support `conda env export` `no-builds` flag by @jjerphan in - [micromamba] fix: Export the environment prefix in specification by @jjerphan in - [libmamba] windows shell init files use executable name by @Klaim in - [libmamba, micromamba] Fix relative path in local channel by @Hind-M in - [libmamba, micromamba] Correctly rename test to be run by @Hind-M in - [libmamba, micromamba] Create empty base prefix with `env update` by @Hind-M in - [libmamba, micromamba] fix: Use POSIX-compliant scripts by @jjerphan in - [libmamba, micromamba] maint: Clarify `env` subcommand documentation in help menu (cont'd) by @jjerphan in - [libmamba] fix: Handle space in `mamba` and `micromamba` executable absolute paths by @NewUserHa in - [libmamba, micromamba] maint: Clarify `env` subcommand documentation in help menu by @jjerphan in - [micromamba] fix: Adapt `test_env_update_pypi_with_conda_forge` by @jjerphan in - [libmamba] Add recommendation if error with root prefix by @Hind-M in - [libmamba] fix: Ignore inline comment in environment specification by @jjerphan in - [libmamba] Replace `[System.IO.Path]::GetFileNameWithoutExtension` with `-replace` by @mleistner-bgr in - [libmamba] Fix warnings and co by @Hind-M in CI fixes and doc: - [all] Fix doc by @Hind-M in - [all] [windows-vcpkg] Replace deprecated openssl with crypto feature with latest libarchive by @Hind-M in - [all] maint: Unpin libcurl<8.10 by @jjerphan in - [all] dev: Remove the use of Taskfile by @jjerphan in - [all] Upgraded CI to micromamba 2.0.2 by @JohanMabille in ## 2024.10.02 Releases: libmamba 2.0.2, libmambapy 2.0.2, micromamba 2.0.2 Bug fixes: - [micromamba, libmamba] fix: Handle `MatchSpec` with brackets when parsing environments' history by @jjerphan in - [libmamba] Win activate by @JohanMabille in - [micromamba, libmamba] Fix `channel` and `base_url` in `list` cmd by @Hind-M in CI fixes and doc: - [all] Rollback to micromamba 1.5.10 in CI by @JohanMabille in ## 2024.09.30 Releases: libmamba 2.0.1, libmambapy 2.0.1, micromamba 2.0.1 Bug fixes: - [libmamba] Fixed channel output in umamba list by @JohanMabille in - [libmamba, micromamba] --full-name option for list by @JohanMabille in - [libmamba, micromamba] fix: Support for PEP 440 "Compatible Releases" (operator `~=` for `MatchSpec`) by @jjerphan in - [libmamba] Fix micromamba activate on Windows by @JohanMabille in - [micromamba] Added --copy flag to create and install commands by @JohanMabille in CI fixes and doc: - [all] doc: add github links to documentation by @timhoffm in ## 2024.09.25 Releases: libmamba 2.0.0, libmambapy 2.0.0, micromamba 2.0.0 Enhancements: - [libmamba] test: `MatchSpec` edges cases by @jjerphan in - [libmamba] Compute `root prefix` as mamba install path by @Hind-M in - [libmamba, micromamba] Support CONDA_DEFAULT_ENV by @SylvainCorlay in - [all] Remove cctools patch from feedstock in CI by @JohanMabille in - [micromamba] test: Adapt test_explicit_export_topologically_sorted by @jjerphan in - [libmamba] test: Comparability and hashability of `PackageInfo` and `MatchSpec` by @jjerphan in - [libmamba] build: Support fmt 11 (follow-up) by @jjerphan in - [libmamba, micromamba] build: Support fmt 11 by @jjerphan in - [libmamba] Make more classes hashable and comparable by @jjerphan in - [libmambapy, libmamba] Replace `Context` with `Context::platform` where possible by @jjerphan in - [libmamba] Update mamba.xsh: support xonsh >= 0.18.0 by @anki-code in - [libmamba] Remove logs for every package by @Hind-M in - [libmamba] maint: Remove declaration of `PrefixData::load` by @jjerphan in - [libmamba] maint: Remove some warnings by @jjerphan in - [libmamba] maint: Remove `PrefixData::load` by @jjerphan in - [libmamba, micromamba] OCI/Conda mapping by @Hind-M in - [libmamba, micromamba] [OCI - Mirrors] Add tests and doc by @Hind-M in - [libmamba] [OCI Registry] Handle compressed repodata by @Hind-M in - [libmamba] [CEP-15] Support `base_url` with `repodata_version: 2` using `mamba` parser by @Hind-M in - [libmamba] Fix OCIMirror use by @Hind-M in - [all] Add checking typos to pre-commit by @Hind-M in - [libmambapy, libmamba] Bind text_style and graphic params by @AntoinePrv in - [libmambapy] Bind VersionPredicate by @AntoinePrv in - [all] Update pre-commit hooks" by @AntoinePrv in - [micromamba, libmamba] Refactor os utilities by @AntoinePrv in - [libmamba] Implemented OCI mirrors by @JohanMabille in - [libmamba] Passed url_path to request_generators by @JohanMabille in - [libmambapy, libmamba] Handle regex in build string by @AntoinePrv in - [micromamba, libmamba] [mamba-content-trust] Add integration test by @Hind-M in - [libmamba] Release libsolv memory before installation by @AntoinePrv in - [all] Custom resolve complex MatchSpec in Solver by @AntoinePrv in - [libmambapy, libmamba] Add MatchSpec::contains_except_channel" by @AntoinePrv in - [all] [mamba content trust] Enable verifying packages signatures by @Hind-M in - [libmambapy, libmamba] Refactor MatchSpec::str by @AntoinePrv in - [all] Subdir renaming by @AntoinePrv in - [libmambapy, libmamba] Fully bind MatchSpec by @AntoinePrv in - [libmamba] Add more MatchSpec tests by @AntoinePrv in - [micromamba, libmamba] Expected in specs parse API by @AntoinePrv in - [libmamba] Refactor MatchSpec::parse by @AntoinePrv in - [all] Added HTTP Mirrors by @JohanMabille in - [all] Use expected for specs parsing by @AntoinePrv in - [libmamba] Refactor ObjPool to use views in callbacks by @AntoinePrv in - [libmambapy, libmamba] Add more solver tests and other small features by @AntoinePrv in - [libmambapy, libmamba] Finalized Solver bindings and add solver doc by @AntoinePrv in - [libmambapy, libmamba] Add libsolv.Database Bindings and tests by @AntoinePrv in - [libmamba] Add (some) solver Database tests by @AntoinePrv in - [libmamba] Make libsolv wrappers into standalone library by @AntoinePrv in - [all] Rename MPool into solver::libsolv::Database by @AntoinePrv in - [all] Automate releases (`CHANGELOG.md` updating) by @Hind-M in - [all] Simplify MPool Interface by @AntoinePrv in - [all] Clean libsolv use in Transaction by @AntoinePrv in - [micromamba, libmamba] Rewrite Query with Pool functions (wrapping libsolv) by @AntoinePrv in - [micromamba] Remove hard coded mamba by @AntoinePrv in - [libmamba, micromamba] Support multiple env yaml specs by @jchorl in - [libmamba] Update shell hook comments by @jonashaag in - [micromamba] Duplicate reposerver to isolate micromamba tests by @AntoinePrv in - [libmamba, libmambapy] More specs bindings by @AntoinePrv in - [libmamba, libmambapy] Add VersionSpec::str by @AntoinePrv in - [all] Some future proofing MatchSpec by @AntoinePrv in - [libmamba] Reformat string by @AntoinePrv in - [libmamba] Clean up url_manip by @AntoinePrv in - [libmamba, libmambapy] Fix VersionSpec free ranges by @AntoinePrv in - [libmamba] Add parsing utilities by @AntoinePrv in - [libmamba] Bump MAMBA libsolv file ABI by @AntoinePrv in - [libmamba, libmambapy] MatchSpec use VersionSpec by @AntoinePrv in - [libmamba, libmambapy] GlobSpec by @AntoinePrv in - [libmamba] Add BuildNumberSpec by @AntoinePrv in - [libmamba] Refactor MatchSpec unlikely data by @AntoinePrv in - [libmamba, micromamba] Remove micromamba shell init -p by @AntoinePrv in - [all] Clean PackageInfo interface by @AntoinePrv in - [libmamba, libmambapy] NoArchType as standalone enum by @AntoinePrv in - [all] Move PackageInfo in specs:: by @AntoinePrv in - [libmamba, libmambapy] Change PackageInfo types by @AntoinePrv in - [libmamba, libmambapy] Add some PackageInfo tests by @AntoinePrv in - [libmamba, libmambapy] Rename ChannelSpec > UndefinedChannel by @AntoinePrv in - [libmamba, libmambapy] Add Channel::contains_package by @AntoinePrv in - [libmamba, libmambapy] Pool channel match by @AntoinePrv in - [libmamba] Added mirrored channels by @JohanMabille in - [libmamba, micromamba] Move util_random.hpp > util/random.hpp by @AntoinePrv in - [micromamba] Refactor test_remove.py to use fixture by @AntoinePrv in - [libmambapy] Add expected caster to Union by @AntoinePrv in - [all] MRepo refactor by @AntoinePrv in - [libmamba, libmambapy] No M by @AntoinePrv in - [libmamba, micromamba] Explicit transaction duplicate code by @AntoinePrv in - [libmamba, libmambapy] Solver improvements by @AntoinePrv in - [libmamba] Sort transaction table entries by @AntoinePrv in - [all] Solver Request by @AntoinePrv in - [libmamba] Improve Solution usage by @AntoinePrv in - [libmamba, libmambapy] Refactor solver flags by @AntoinePrv in - [libmamba] Moved download related files to dedicated folder by @JohanMabille in - [libmamba] Remove outdated commented code snippet by @jjerphan in - [libmamba] Implemented support for mirrors by @JohanMabille in - [all] Split Solver and Unsolvable by @AntoinePrv in - [libmamba] Proper sorting of display actions by @AntoinePrv in - [all] Solver sort deps by @AntoinePrv in - [libmamba, libmambapy] Bind solver::libsolv::UnSolvable by @AntoinePrv in - [libmamba, libmambapy] Improve Query API by @AntoinePrv in - [all] Context: not a singleton by @Klaim in - [libmamba] Add CondaURL by @AntoinePrv in - [micromamba] Add env update by @Hind-M in - [micromamba] Adding locks for cache directories by @rmittal87 in - [micromamba] Refactor tests by @AntoinePrv in - [all] No ugly kenum by @AntoinePrv in - [libmamba, micromamba] Add Nushell activation support by cvanelteren in - [libmamba] Support $var syntax in .condarc by @jonashaag in - [libmamba] Handle null and false noarch values by @gabrielsimoes in - [libmamba] Add CondaURL::pretty_str by @AntoinePrv in - [libmamba, micromamba] Channel cleanup by @AntoinePrv in - [libmamba] Authenfitication split user and password by @AntoinePrv in - [libmamba] Improved static build error message by @JohanMabille in - [libmamba] Add local channels test by @Hind-M in - [libmamba, micromamba] Don't force MSVC_RUNTIME by @AntoinePrv in - [libmamba] Build micromamba with /MD by @AntoinePrv in - [micromamba] Add comments in micromamba repoquery by @Hind-M in - [libmamba, micromamba] Fix Posix shell on Windows by @AntoinePrv in - [libmamba, libmambapy] Further improve micromamba search output by @delsner in - [libmamba] Minor Channel refactoring by @AntoinePrv in - [libmamba] path_to_url percent encoding by @AntoinePrv in - [libmamba] Change libsolv static lib name by @AntoinePrv in - [libmamba, libmambapy] Download by @JohanMabille in - [libmamba, micromamba] Use CMake targets for reproc by @AntoinePrv in - [micromamba] Add mamba tests by @Hind-M in - [libmamba] Add FindLibsolv.cmake by @AntoinePrv in - [libmamba] Read repodata.json using nl::json (rerun) by @AntoinePrv in - [libmamba, micromamba] Filesystem library by @AntoinePrv in - [libmamba] Header cleanup filesystem follow-up by @AntoinePrv in - [all] Add multiple queries to repoquery search by @AntoinePrv in - [all] Add ChannelSpec by @AntoinePrv in - [micromamba] Make some fixture local by @JohanMabille in - [libmamba] Print error code if run fails by @jonashaag in - [all] Added PackageFetcher by @JohanMabille in - [libmamba] return architecture levels for micromamba by @isuruf in - [all] Resolve ChannelSpec into a Channel by @AntoinePrv in - [libmamba] Factorize Win user folder function between files by @AntoinePrv in - [libmamba, libmambapy] Combine dev environments by @AntoinePrv in - [libmamba, micromamba] Refactor win encoding conversion by @AntoinePrv in - [micromamba] Move reposerver tests to micromamba by @AntoinePrv in - [micromamba] Remove mamba by @AntoinePrv in - [all] Dev workflow by @AntoinePrv in - [libmamba, micromamba] Add refactor getenv setenv unsetenv by @AntoinePrv in - [all] Explicit and smart CMake target by @AntoinePrv in - [libmamba, micromamba] Rename env functions by @AntoinePrv in - [libmambapy] Modularize libmambapy by @AntoinePrv in - [libmamba] Environment map by @AntoinePrv in - [libmamba] Add environment cleaner test fixtures by @AntoinePrv in - [all] Update dependencies on OSX by @AntoinePrv in - [all] Channel initialization by @AntoinePrv in - [libmamba] Add weakening_map by @AntoinePrv in - [libmamba, micromamba] Refactor env directories by @AntoinePrv in - [libmamba] Enable new repodata parser by default by @AntoinePrv in - [libmamba] Allow overriding archspec by @isuruf in - [libmamba] Add Python-like set operations to flat_set by @AntoinePrv in - [libmamba, micromamba] Migrate expand/shrink_home by @AntoinePrv in - [libmamba, micromamba] Refactor env::which by @AntoinePrv in - [all] Migrate Channel::make_channel to resolve multi channels by @AntoinePrv in - [all] Move core/channel > specs/channel by @AntoinePrv in - [libmamba, libmambapy] Remove ChannelContext ctor by @AntoinePrv in - [libmamba] Improve ChannelContext and Channel by @AntoinePrv in xhttps://github.com/mamba-org/mamba/pull/3003 - [all] Remove ChannelContext context capture by @AntoinePrv in - [libmamba, libmambapy] Bind Channel by @AntoinePrv in - [libmamba, micromamba] Default to hide credentials by @AntoinePrv in - [libmamba] Validation QA by @AntoinePrv in - [libmamba, micromamba] Refactor (some) OpenSSL functions by @AntoinePrv in - [libmamba] Use std::array by @AntoinePRv in - [libmambapy] Bind ChannelContext by @AntoinePrv in - [libmamba, micromamba] Default to conda-forge channel by @AntoinePrv in - [libamba, libmambapy] Split validate.[ch]pp by @AntoinePrv in - [libmamba] Remove duplicate function by @AntoinePrv in - [libmamba, libmambapy] MatchSpec small improvements by @AntoinePrv in - [all] Plug ChannelSpec in MatchSpec by @AntoinePrv in - [libmamba] Drop unneeded dependencies by @opoplawski in - [all] Change MatchSpec::parse to named constructor by @AntoinePrv in - [libmamba, libmambapy] restore use_default_signal_handler flag for libmambapy by @dholth in - [micromamba] Added mamba as dynamic build of micromamba by @JohanMabille in Bug fixes: - [libmamba, micromamba] fix: Handle extra white-space in `MatchSpec` by @jjerphan in - [micromamba] Fix `test_env_update_pypi_with_conda_forge` by @Hind-M in - [libmamba, micromamba] fix: Environment removal confirmation by @jjerphan in - [micromamba] Fix test in osx by @Hind-M in - [libmamba, libmambapy] fix: add warning when using defaults by @wolfv in - [libmamba, micromamba] Add fallback to root prefix by @Hind-M in - [libmamba] Fix x86_64 to use underscore instead of dash by @traversaro in - [libmamba, micromamba] Fixed micromamba static build after cctools and ld64 upgrade on conda… by @JohanMabille in - [libmamba, micromamba] fix: PyPI support for `env update` by @jjerphan in - [libmamba] Fix output by @Hind-M in - [all] Update mamba.sh.in script by @SylvainCorlay in - [libmamba] Execute remove action before install actions by @SylvainCorlay in - [micromamba] test: Adapt `test_remove_orphaned` unlinks by @jjerphan in - [micromamba, libmamba] fix: Reduce logging system overhead by @jjerphan in - [all] Define `etc/profile.d/mamba.sh` and install it by @jjerphan in - [micromamba] Add posix to supported shells by @jjerphan in - [all] Replaces instances of -p with --root-prefix in documentation by @SylvainCorlay in - [libmamba, micromamba] [micromamba] Fix behavior of `env update` (to mimic conda) by @Hind-M in - [libmamba] Reset the prompt back to default by @cvanelteren in - [libmamba] Add missing header by @Hind-M in - [libmamba] Restore previous behavior of `MAMBA_ROOT_PREFIX` by @Hind-M in - [libmamba] Allow leading lowercase letter in version by @Hind-M in - [libmamba] Allow spaces in version after operator by @Hind-M in - [micromamba] Attempt to fix `test_proxy_install` by @Hind-M in - [micromamba] Fix `test_no_python_pinning` by @Hind-M in - [libmamba] Fixed restoring the previous signal handler for example in python case (Windows only for now) by @Klaim in - [all] Split `ContextOptions::enable_logging_and_signal_handling` into 2 different options by @Klaim in - [libmambapy, libmamba] libmambapy: use `Context` explicitly by @Klaim in - [micromamba] Fix test_no_python_pinning by @Hind-M in - [all] Fix release scripts by @Hind-M in - [libmamba] Hotfix to allow Ctrl+C in python scripts by @Klaim in - [libmamba] Fix typos in comments by @ryandesign in - [all] Fix VersionSpec equal and glob by @AntoinePrv in - [libmamba] Fix pin repr in solver error messages by @AntoinePrv in - [libmambapy] Add missing pybind header by @AntoinePrv in - [libmambapy, libmamba] Don't add duplicate .conda and .tar.bz2 packages by @AntoinePrv in - [all] Use conda-forge feedstock for static builds by @AntoinePrv in - [micromamba, libmamba] Mamba 2.0 name fixes by @AntoinePrv in - [all] Make Taskfile.dist.yml Windows-compatible by @carschandler in - [libmamba] fix(micromamba): anaconda private channels not working by @s22chan in - [micromamba] Remove unmaintained and broken pytest-lazy-fixture by @AntoinePrv in - [libmamba] Simple logging fix by @AntoinePrv in - [libmamba, micromamba] Fix URL encoding in repodata.json by @AntoinePrv in - [libmamba, micromamba] gracefully handle conflicting names in yaml specs by @jchorl in - [libmamba] Fix verbose and strange prefix in Powershell by @pwnfan in - [libmamba] handle other deps in multiple env files by @jchorl in - [libmambapy] Fix expected caster by @AntoinePrv in - [libmamba, micromamba] add manually given .tar.bz2 / .conda packages to solver pool by @0xbe7a in - [libmambapy] Fix 2.0 alpha by @AntoinePrv in - [libmambapy] fix subs by @AntoinePrv in - [libmamba, micromamba] Fix linking on Windows when Scripts folder is missing by @dalcinl in - [libmamba] added support for empty lines in dependency file in txt format by @rmittal87 in - [libmamba] Fix local channels location by @AntoinePrv in - [libmamba] Fixed libmamba tests static build by @JohanMabille in - [micromamba] Fix win test micro.mamba.pm by @AntoinePrv in - [libmamba, micromamba] Add CI test for local channels by @Hind-M in - [micromamba] Fixed "micromamba package transmute names files going from .conda -> .tar.bz2 incorrectly" by @mariusvniekerk in - [libmamba] Nushell hotfix by @cvanelteren - [libmamba] Added missing dependency in libmambaConfig.cmake.in by @JohanMabille in - [libmamba] Allow defaults::\* spec by @isuruf in - [libmamba] by @bruchim-cisco in - [libmamba] Fix channels with slashes regression by @isuruf in - [micromamba] Fix micromamba test dependency conda-package-handling by @rominf in - [libmamba, libmambapy] fix: Parse remote_connect_timeout_secs as a double by @jjerphan in - [libmamba] Add mirrors by @Hind-M in - [all] Add cmake-format by @AntoinePrv in - [micromamba] removed dependency on conda-index by @JohanMabille in - [libmamba] Fixed move semantics of DownloadAttempt by @JohanMabille in - [libmamba] Nu 0.87.0 by @cvanelteren in - [libmamba] fix config precedence for base env by @0xbe7a in - [libmamba] Fix libmamba cmake version file by @opoplawski in CI fixes and doc: - [all] Fix wrong version of miniforge in doc by @Hind-M in - [all] Remove cctools patch removal in CI by @Hind-M in - [all] docs: Specify `CMAKE_INSTALL_PREFIX` by @jjerphan in - [all] docs: Adapt "Solving Package Environments" section by @jjerphan in - [all] [win-64] Remove workaround by @Hind-M in - [all] [win-64] Add constraint on fmt by @Hind-M in - [all] Unpin cryptography, python, and add make to environment-dev.yml by @jaimergp in - [all] ci: Unpin libcxx <18 by @jjerphan in - [all] chore(ci): bump github action versions by @corneliusroemer in - [all] doc(more_concepts.rst): improve clarity by @corneliusroemer in - [micromamba] Temporarily disabled no_python_pinning test on Windows by @JohanMabille in - [all] Fix CI failure on win-64 by @Hind-M in - [micromamba] Test with xtensor-python instead of unmaintained xframe by @JohanMabille in - [all] Small changelog additions by @AntoinePrv in - [all] Fixed a spelling mistake in micromamba-installation.rst by @codeblech in - [all] Typos in dev_environment.rst by @jd-foster in - [all] Add MatchSpec doc and fix errors by @AntoinePrv in - [libmambapy] Remove dead mamba.py doc by @AntoinePrv in - [all] Document specs::Channel by @AntoinePrv in - [all] Fix --override-channels docs by @jonashaag in - [all] Add 2.0 changes draft by @AntoinePrv in - [all] Add Breathe for API documentation by @AntoinePrv in - [micromamba] Add instructions for gnu coreutils on OSX by @benmoss in - [all] Warning around manual install and add ref to conda-libmamba by @AntoinePrv in - [all] Add MacOS DNS issue logging by @AntoinePrv in - [all] Add CI merge groups by @AntoinePrv in - [micromamba] Build micromamba win with feedstock by @AntoinePrv in - [micromamba] Update GitHub Actions steps to open Issues for failed scheduled jobs by @jdblischak in - [micromamba] Fix Ci by @AntoinePrv in - [micromamba] Mark Anaconda channels as unsupported by @jonashaag in - [micromamba] Fix nodefaults in documentation by @jonashaag in - [micromamba] Improve install instruction by @jonashaag in - [libmambapy] Refactor CI and libamambapy tests (on Unix) by @AntoinePrv in - [libmambapy] Refactor CI and libamambapy tests (on Win) by @AntoinePrv in - [all] Simplify and correct development documentation by @AntoinePrv in - [all] Add install from source instructions by @AntoinePrv in - [all] update readme install link by @artificial-agent in - [all] Fail fast except on debug runs by @AntoinePrv in ## 2024.09.20 Releases: libmamba 2.0.0rc6, libmambapy 2.0.0rc6, micromamba 2.0.0rc6 Enhancements: - [libmamba] test: `MatchSpec` edges cases by @jjerphan in - [libmamba] Compute `root prefix` as mamba install path by @Hind-M in - [libmamba, micromamba] Support CONDA_DEFAULT_ENV by @SylvainCorlay in Bug fixes: - [libmamba, micromamba] fix: Handle extra white-space in `MatchSpec` by @jjerphan in - [micromamba] Fix `test_env_update_pypi_with_conda_forge` by @Hind-M in - [libmamba, micromamba] fix: Environment removal confirmation by @jjerphan in - [micromamba] Fix test in osx by @Hind-M in CI fixes and doc: - [all] Fix wrong version of miniforge in doc by @Hind-M in - [all] Remove cctools patch removal in CI by @Hind-M in ## 2024.09.13 Releases: libmamba 2.0.0rc5, libmambapy 2.0.0rc5, micromamba 2.0.0rc5 Enhancements: - [all] Remove cctools patch from feedstock in CI by @JohanMabille in Bug fixes: - [libmamba, libmambapy] fix: add warning when using defaults by @wolfv in - [libmamba, micromamba] Add fallback to root prefix by @Hind-M in - [libmamba] Fix x86_64 to use underscore instead of dash by @traversaro in - [libmamba, micromamba] Fixed micromamba static build after cctools and ld64 upgrade on conda… by @JohanMabille in - [libmamba, micromamba] fix: PyPI support for `env update` by @jjerphan in - [libmamba] Fix output by @Hind-M in - [all] Update mamba.sh.in script by @SylvainCorlay in - [libmamba] Execute remove action before install actions by @SylvainCorlay in CI fixes and doc: - [all] docs: Specify `CMAKE_INSTALL_PREFIX` by @jjerphan in ## 2024.08.29 Releases: libmamba 2.0.0rc4, libmambapy 2.0.0rc4, micromamba 2.0.0rc4 Bug fixes: - [micromamba] test: Adapt `test_remove_orphaned` unlinks by @jjerphan in - [micromamba, libmamba] fix: Reduce logging system overhead by @jjerphan in ## 2024.08.26 Releases: libmamba 2.0.0rc3, libmambapy 2.0.0rc3, micromamba 2.0.0rc3 Bug fixes: - [all] Define `etc/profile.d/mamba.sh` and install it by @jjerphan in - [micromamba] Add posix to supported shells by @jjerphan in - [all] Replaces instances of -p with --root-prefix in documentation by @SylvainCorlay in CI fixes and doc: - [all] docs: Adapt "Solving Package Environments" section by @jjerphan in ## 2024.08.19 Releases: libmamba 2.0.0rc2, libmambapy 2.0.0rc2, micromamba 2.0.0rc2 Enhancements: - [micromamba] test: Adapt test_explicit_export_topologically_sorted by @jjerphan in - [libmamba] test: Comparability and hashability of `PackageInfo` and `MatchSpec` by @jjerphan in - [libmamba] build: Support fmt 11 (follow-up) by @jjerphan in - [libmamba, micromamba] build: Support fmt 11 by @jjerphan in - [libmamba] Make more classes hashable and comparable by @jjerphan in - [libmambapy, libmamba] Replace `Context` with `Context::platform` where possible by @jjerphan in Bug fixes: - [libmamba, micromamba] [micromamba] Fix behavior of `env update` (to mimic conda) by @Hind-M in - [libmamba] Reset the prompt back to default by @cvanelteren in - [libmamba] Add missing header by @Hind-M in - [libmamba] Restore previous behavior of `MAMBA_ROOT_PREFIX` by @Hind-M in CI fixes and doc: - [all] [win-64] Remove workaround by @Hind-M in - [all] [win-64] Add constraint on fmt by @Hind-M in - [all] Unpin cryptography, python, and add make to environment-dev.yml by @jaimergp in - [all] ci: Unpin libcxx <18 by @jjerphan in ## 2024.07.26 Releases: libmamba 2.0.0rc1, libmambapy 2.0.0rc1, micromamba 2.0.0rc1 Enhancements: - [libmamba] Update mamba.xsh: support xonsh >= 0.18.0 by @anki-code in - [libmamba] Remove logs for every package by @Hind-M in Bug fixes: - [libmamba] Allow leading lowercase letter in version by @Hind-M in - [libmamba] Allow spaces in version after operator by @Hind-M in CI fixes and doc: - [all] chore(ci): bump github action versions by @corneliusroemer in - [all] doc(more_concepts.rst): improve clarity by @corneliusroemer in ## 2024.07.08 Releases: libmamba 2.0.0rc0, libmambapy 2.0.0rc0, micromamba 2.0.0rc0 Enhancements: - [libmamba] maint: Remove declaration of `PrefixData::load` by @jjerphan in Bug fixes: - [micromamba] Attempt to fix `test_proxy_install` by @Hind-M in - [micromamba] Fix `test_no_python_pinning` by @Hind-M in - [libmamba] Fixed restoring the previous signal handler for example in python case (Windows only for now) by @Klaim in - [all] Split `ContextOptions::enable_logging_and_signal_handling` into 2 different options by @Klaim in CI fixes and doc: - [micromamba] Temporarily disabled no_python_pinning test on Windows by @JohanMabille in ## 2024.06.14 Releases: libmamba 2.0.0beta3, libmambapy 2.0.0beta3, micromamba 2.0.0beta3 Enhancements: - [libmamba] maint: Remove some warnings by @jjerphan in - [libmamba] maint: Remove `PrefixData::load` by @jjerphan in - [libmamba, micromamba] OCI/Conda mapping by @Hind-M in - [libmamba, micromamba] [OCI - Mirrors] Add tests and doc by @Hind-M in Bug fixes: - [libmambapy, libmamba] libmambapy: use `Context` explicitly by @Klaim in - [micromamba] Fix test_no_python_pinning by @Hind-M in - [all] Fix release scripts by @Hind-M in CI fixes and doc: - [all] Fix CI failure on win-64 by @Hind-M in ## 2024.05.29 Releases: libmamba 2.0.0beta2, libmambapy 2.0.0beta2, micromamba 2.0.0beta2 Enhancements: - [libmamba] [OCI Registry] Handle compressed repodata by @Hind-M in - [libmamba] [CEP-15] Support `base_url` with `repodata_version: 2` using `mamba` parser by @Hind-M in - [libmamba] Fix OCIMirror use by @Hind-M in - [all] Add checking typos to pre-commit by @Hind-M in ## 2024.05.04 Releases: libmamba 2.0.0beta1, libmambapy 2.0.0beta1, micromamba 2.0.0beta1 Enhancements: - [libmambapy, libmamba] Bind text_style and graphic params by @AntoinePrv in - [libmambapy] Bind VersionPredicate by @AntoinePrv in - [all] Update pre-commit hooks" by @AntoinePrv in - [micromamba, libmamba] Refactor os utilities by @AntoinePrv in - [libmamba] Implemented OCI mirrors by @JohanMabille in - [libmamba] Passed url_path to request_generators by @JohanMabille in - [libmambapy, libmamba] Handle regex in build string by @AntoinePrv in - [micromamba, libmamba] [mamba-content-trust] Add integration test by @Hind-M in - [libmamba] Release libsolv memory before installation by @AntoinePrv in - [all] Custom resolve complex MatchSpec in Solver by @AntoinePrv in - [libmambapy, libmamba] Add MatchSpec::contains_except_channel" by @AntoinePrv in - [all] [mamba content trust] Enable verifying packages signatures by @Hind-M in - [libmambapy, libmamba] Refactor MatchSpec::str by @AntoinePrv in - [all] Subdir renaming by @AntoinePrv in - [libmambapy, libmamba] Fully bind MatchSpec by @AntoinePrv in - [libmamba] Add more MatchSpec tests by @AntoinePrv in - [micromamba, libmamba] Expected in specs parse API by @AntoinePrv in Bug fixes: - [libmamba] Hotfix to allow Ctrl+C in python scripts by @Klaim in - [libmamba] Fix typos in comments by @ryandesign in - [all] Fix VersionSpec equal and glob by @AntoinePrv in - [libmamba] Fix pin repr in solver error messages by @AntoinePrv in - [libmambapy] Add missing pybind header by @AntoinePrv in - [libmambapy, libmamba] Don't add duplicate .conda and .tar.bz2 packages by @AntoinePrv in - [all] Use conda-forge feedstock for static builds by @AntoinePrv in - [micromamba, libmamba] Mamba 2.0 name fixes by @AntoinePrv in - [all] Make Taskfile.dist.yml Windows-compatible by @carschandler in - [libmamba] fix(micromamba): anaconda private channels not working by @s22chan in CI fixes and doc: - [micromamba] Test with xtensor-python instead of unmaintained xframe by @JohanMabille in - [all] Small changelog additions by @AntoinePrv in - [all] Fixed a spelling mistake in micromamba-installation.rst by @codeblech in - [all] Typos in dev_environment.rst by @jd-foster in - [all] Add MatchSpec doc and fix errors by @AntoinePrv in ## 2024.04.04 Releases: libmamba 2.0.0beta0, libmambapy 2.0.0beta0, micromamba 2.0.0beta0 Enhancements: - [libmambapy] Bind VersionPredicate by @AntoinePrv in - [all] Update pre-commit hooks" by @AntoinePrv in - [libmamba, micromamba] Refactor os utilities by @AntoinePrv in Bug fixes: - [libmambapy] Add missing pybind header by @AntoinePrv in - [libmambapy, libmamba] Don't add duplicate .conda and .tar.bz2 packages by @AntoinePrv in CI fixes and doc: - [all] Small changelog additions by @AntoinePrv in ## 2024.03.26 Releases: libmamba 2.0.0alpha4, libmambapy 2.0.0alpha4, micromamba 2.0.0alpha4 Enhancements: - [libmamba] Implemented OCI mirrors by @JohanMabille in - [libmamba] Passed url_path to request_generators by @JohanMabille in - [libmambapy, libmamba] Handle regex in build string by @AntoinePrv in - [micromamba, libmamba] [mamba-content-trust] Add integration test by @Hind-M in - [libmamba] Release libsolv memory before installation by @AntoinePrv in - [all] Custom resolve complex MatchSpec in Solver by @AntoinePrv in - [libmambapy, libmamba] Add MatchSpec::contains_except_channel" by @AntoinePrv in - [all] [mamba content trust] Enable verifying packages signatures by @Hind-M in - [libmambapy, libmamba] Refactor MatchSpec::str by @AntoinePrv in - [all] Subdir renaming by @AntoinePrv in - [libmambapy, libmamba] Fully bind MatchSpec by @AntoinePrv in - [libmamba] Add more MatchSpec tests by @AntoinePrv in - [micromamba, libmamba] Expected in specs parse API by @AntoinePrv in - [libmamba] Refactor MatchSpec::parse by @AntoinePrv in Bug fixes: - [all] Use conda-forge feedstock for static builds by @AntoinePrv in - [micromamba, libmamba] Mamba 2.0 name fixes by @AntoinePrv in - [all] Make Taskfile.dist.yml Windows-compatible by @carschandler in - [libmamba] fix(micromamba): anaconda private channels not working by @s22chan in CI fixes and doc: - [all] Fixed a spelling mistake in micromamba-installation.rst by @codeblech in - [all] Typos in dev_environment.rst by @jd-foster in - [all] Add MatchSpec doc and fix errors by @AntoinePrv in ## 2024.02.28 Releases: libmamba 2.0.0alpha3, libmambapy 2.0.0alpha3, micromamba 2.0.0alpha3 Enhancements: - [all] Added HTTP Mirrors by @JohanMabille in - [all] Use expected for specs parsing by @AntoinePrv in - [libmamba] Refactor ObjPool to use views in callbacks by @AntoinePrv in - [libmambapy, libmamba] Add more solver tests and other small features by @AntoinePrv in - [libmambapy, libmamba] Finalized Solver bindings and add solver doc by @AntoinePrv in - [libmambapy, libmamba] Add libsolv.Database Bindings and tests by @AntoinePrv in - [libmamba] Add (some) solver Database tests by @AntoinePrv in - [libmamba] Make libsolv wrappers into standalone library by @AntoinePrv in - [all] Rename MPool into solver::libsolv::Database by @AntoinePrv in - [all] Automate releases (`CHANGELOG.md` updating) by @Hind-M in - [all] Simplify MPool Interface by @AntoinePrv in - [all] Clean libsolv use in Transaction by @AntoinePrv in - [micromamba, libmamba] Rewrite Query with Pool functions (wrapping libsolv) by @AntoinePrv in Bug fixes: - [micromamba] Remove unmaintained and broken pytest-lazy-fixture by @AntoinePrv in - [libmamba] Simple logging fix by @AntoinePrv in CI fixes and doc: ## 2024.02.02 Releases: libmamba 2.0.0alpha2, libmambapy 2.0.0alpha2, micromamba 2.0.0alpha2 Enhancements: - [micromamba] Remove hard coded mamba by @AntoinePrv in - [libmamba, micromamba] Support multiple env yaml specs by @jchorl in - [libmamba] Update shell hook comments by @jonashaag in - [micromamba] Duplicate reposerver to isolate micromamba tests by @AntoinePrv in - [libmamba, libmambapy] More specs bindings by @AntoinePrv in - [libmamba, libmambapy] Add VersionSpec::str by @AntoinePrv in - [all] Some future proofing MatchSpec by @AntoinePrv in - [libmamba] Reformat string by @AntoinePrv in - [libmamba] Clean up url_manip by @AntoinePrv in - [libmamba, libmambapy] Fix VersionSpec free ranges by @AntoinePrv in - [libmamba] Add parsing utilities by @AntoinePrv in - [libmamba] Bump MAMBA libsolv file ABI by @AntoinePrv in - [libmamba, libmambapy] MatchSpec use VersionSpec by @AntoinePrv in - [libmamba, libmambapy] GlobSpec by @AntoinePrv in - [libmamba] Add BuildNumberSpec by @AntoinePrv in - [libmamba] Refactor MatchSpec unlikely data by @AntoinePrv in - [libmamba, micromamba] Remove micromamba shell init -p by @AntoinePrv in - [all] Clean PackageInfo interface by @AntoinePrv in - [libmamba, libmambapy] NoArchType as standalone enum by @AntoinePrv in - [all] Move PackageInfo in specs:: by @AntoinePrv in - [libmamba, libmambapy] Change PackageInfo types by @AntoinePrv in - [libmamba, libmambapy] Add some PackageInfo tests by @AntoinePrv in - [libmamba, libmambapy] Rename ChannelSpec > UndefinedChannel by @AntoinePrv in - [libmamba, libmambapy] Add Channel::contains_package by @AntoinePrv in - [libmamba, libmambapy] Pool channel match by @AntoinePrv in - [libmamba] Added mirrored channels by @JohanMabille in - [libmamba, micromamba] Move util_random.hpp > util/random.hpp by @AntoinePrv in - [micromamba] Refactor test_remove.py to use fixture by @AntoinePrv in - [libmambapy] Add expected caster to Union by @AntoinePrv in - [all] MRepo refactor by @AntoinePrv in - [libmamba, libmambapy] No M by @AntoinePrv in - [libmamba, micromamba] Explicit transaction duplicate code by @AntoinePrv in - [libmamba, libmambapy] Solver improvements by @AntoinePrv in - [libmamba] Sort transaction table entries by @AntoinePrv in - [all] Solver Request by @AntoinePrv in - [libmamba] Improve Solution usage by @AntoinePrv in - [libmamba, libmambapy] Refactor solver flags by @AntoinePrv in - [libmamba] Moved download related files to dedicated folder by @JohanMabille in - [libmamba] Remove outdated commented code snippet by @jjerphan in - [libmamba] Implemented support for mirrors by @JohanMabille in - [all] Split Solver and Unsolvable by @AntoinePrv in - [libmamba] Proper sorting of display actions by @AntoinePrv in - [all] Solver sort deps by @AntoinePrv in - [libmamba, libmambapy] Bind solver::libsolv::UnSolvable by @AntoinePrv in - [libmamba, libmambapy] Improve Query API by @AntoinePrv in Bug fixes: - [libmamba, micromamba] Fix URL encoding in repodata.json by @AntoinePrv in - [libmamba, micromamba] gracefully handle conflicting names in yaml specs by @jchorl in - [libmamba] Fix verbose and strange prefix in Powershell by @pwnfan in - [libmamba] handle other deps in multiple env files by @jchorl in - [libmambapy] Fix expected caster by @AntoinePrv in - [libmamba, micromamba] add manually given .tar.bz2 / .conda packages to solver pool by @0xbe7a in CI fixes and doc: - [libmambapy] Remove dead mamba.py doc by @AntoinePrv in - [all] Document specs::Channel by @AntoinePrv in - [all] Fix --override-channels docs by @jonashaag in - [all] Add 2.0 changes draft by @AntoinePrv in - [all] Add Breathe for API documentation by @AntoinePrv in - [micromamba] Add instructions for gnu coreutils on OSX by @benmoss in - [all] Warning around manual install and add ref to conda-libmamba by @AntoinePrv in - [all] Add MacOS DNS issue logging by @AntoinePrv in ## 2023.12.18 Releases: libmamba 2.0.0alpha1, libmambapy 2.0.0alpha1, micromamba 2.0.0alpha1 Bug fixes: - [libmambapy] Fix 2.0 alpha by @AntoinePrv in CI fixes and doc: - [all] Add CI merge groups by @AntoinePrv in ## 2023.12.14 Releases: libmamba 2.0.0alpha0, libmambapy 2.0.0alpha0, micromamba 2.0.0alpha0 Enhancements: - [all] Context: not a singleton by @Klaim in - [libmamba] Add CondaURL by @AntoinePrv in - [micromamba] Add env update by @Hind-M in - [micromamba] Adding locks for cache directories by @rmittal87 in - [micromamba] Refactor tests by @AntoinePrv in - [all] No ugly kenum by @AntoinePrv in - [libmamba, micromamba] Add Nushell activation support by cvanelteren in - [libmamba] Support $var syntax in .condarc by @jonashaag in - [libmamba] Handle null and false noarch values by @gabrielsimoes in - [libmamba] Add CondaURL::pretty_str by @AntoinePrv in - [libmamba, micromamba] Channel cleanup by @AntoinePrv in - [libmamba] Authenfitication split user and password by @AntoinePrv in - [libmamba] Improved static build error message by @JohanMabille in - [libmamba] Add local channels test by @Hind-M in - [libmamba, micromamba] Don't force MSVC_RUNTIME by @AntoinePrv in - [libmamba] Build micromamba with /MD by @AntoinePrv in - [micromamba] Add comments in micromamba repoquery by @Hind-M in - [libmamba, micromamba] Fix Posix shell on Windows by @AntoinePrv in - [libmamba, libmambapy] Further improve micromamba search output by @delsner in - [libmamba] Minor Channel refactoring by @AntoinePrv in - [libmamba] path_to_url percent encoding by @AntoinePrv in - [libmamba] Change libsolv static lib name by @AntoinePrv in - [libmamba, libmambapy] Download by @JohanMabille in - [libmamba, micromamba] Use CMake targets for reproc by @AntoinePrv in - [micromamba] Add mamba tests by @Hind-M in - [libmamba] Add FindLibsolv.cmake by @AntoinePrv in - [libmamba] Read repodata.json using nl::json (rerun) by @AntoinePrv in - [libmamba, micromamba] Filesystem library by @AntoinePrv in - [libmamba] Header cleanup filesystem follow-up by @AntoinePrv in - [all] Add multiple queries to repoquery search by @AntoinePrv in - [all] Add ChannelSpec by @AntoinePrv in - [micromamba] Make some fixture local by @JohanMabille in - [libmamba] Print error code if run fails by @jonashaag in - [all] Added PackageFetcher by @JohanMabille in - [libmamba] return architecture levels for micromamba by @isuruf in - [all] Resolve ChannelSpec into a Channel by @AntoinePrv in - [libmamba] Factorize Win user folder function between files by @AntoinePrv in - [libmamba, libmambapy] Combine dev environments by @AntoinePrv in - [libmamba, micromamba] Refactor win encoding conversion by @AntoinePrv in - [micromamba] Move reposerver tests to micromamba by @AntoinePrv in - [micromamba] Remove mamba by @AntoinePrv in - [all] Dev workflow by @AntoinePrv in - [libmamba, micromamba] Add refactor getenv setenv unsetenv by @AntoinePrv in - [all] Explicit and smart CMake target by @AntoinePrv in - [libmamba, micromamba] Rename env functions by @AntoinePrv in - [libmambapy] Modularize libmambapy by @AntoinePrv in - [libmamba] Environment map by @AntoinePrv in - [libmamba] Add environment cleaner test fixtures by @AntoinePrv in - [all] Update dependencies on OSX by @AntoinePrv in - [all] Channel initialization by @AntoinePrv in - [libmamba] Add weakening_map by @AntoinePrv in - [libmamba, micromamba] Refactor env directories by @AntoinePrv in - [libmamba] Enable new repodata parser by default by @AntoinePrv in - [libmamba] Allow overriding archspec by @isuruf in - [libmamba] Add Python-like set operations to flat_set by @AntoinePrv in - [libmamba, micromamba] Migrate expand/shrink_home by @AntoinePrv in - [libmamba, micromamba] Refactor env::which by @AntoinePrv in - [all] Migrate Channel::make_channel to resolve multi channels by @AntoinePrv in - [all] Move core/channel > specs/channel by @AntoinePrv in - [libmamba, libmambapy] Remove ChannelContext ctor by @AntoinePrv in - [libmamba] Improve ChannelContext and Channel by @AntoinePrv in xhttps://github.com/mamba-org/mamba/pull/3003 - [all] Remove ChannelContext context capture by @AntoinePrv in - [libmamba, libmambapy] Bind Channel by @AntoinePrv in - [libmamba, micromamba] Default to hide credentials by @AntoinePrv in - [libmamba] Validation QA by @AntoinePrv in - [libmamba, micromamba] Refactor (some) OpenSSL functions by @AntoinePrv in - [libmamba] Use std::array by @AntoinePRv in - [libmambapy] Bind ChannelContext by @AntoinePrv in - [libmamba, micromamba] Default to conda-forge channel by @AntoinePrv in - [libamba, libmambapy] Split validate.[ch]pp by @AntoinePrv in - [libmamba] Remove duplicate function by @AntoinePrv in - [libmamba, libmambapy] MatchSpec small improvements by @AntoinePrv in - [all] Plug ChannelSpec in MatchSpec by @AntoinePrv in - [libmamba] Drop unneeded dependencies by @opoplawski in - [all] Change MatchSpec::parse to named constructor by @AntoinePrv in - [libmamba, libmambapy] restore use_default_signal_handler flag for libmambapy by @dholth in - [micromamba] Added mamba as dynamic build of micromamba by @JohanMabille in Bug fixes: - [libmambapy] fix subs by @AntoinePrv in - [libmamba, micromamba] Fix linking on Windows when Scripts folder is missing by @dalcinl in - [libmamba] added support for empty lines in dependency file in txt format by @rmittal87 in - [libmamba] Fix local channels location by @AntoinePrv in - [libmamba] Fixed libmamba tests static build by @JohanMabille in - [micromamba] Fix win test micro.mamba.pm by @AntoinePrv in - [libmamba, micromamba] Add CI test for local channels by @Hind-M in - [micromamba] Fixed "micromamba package transmute names files going from .conda -> .tar.bz2 incorrectly" by @mariusvniekerk in - [libmamba] Nushell hotfix by @cvanelteren - [libmamba] Added missing dependency in libmambaConfig.cmake.in by @JohanMabille in - [libmamba] Allow defaults::\* spec by @isuruf in - [libmamba] by @bruchim-cisco in - [libmamba] Fix channels with slashes regression by @isuruf in - [micromamba] Fix micromamba test dependency conda-package-handling by @rominf in - [libmamba, libmambapy] fix: Parse remote_connect_timeout_secs as a double by @jjerphan in - [libmamba] Add mirrors by @Hind-M in - [all] Add cmake-format by @AntoinePrv in - [micromamba] removed dependency on conda-index by @JohanMabille in - [libmamba] Fixed move semantics of DownloadAttempt by @JohanMabille in - [libmamba] Nu 0.87.0 by @cvanelteren in - [libmamba] fix config precedence for base env by @0xbe7a in - [libmamba] Fix libmamba cmake version file by @opoplawski in CI fixes and doc: - [micromamba] Build micromamba win with feedstock by @AntoinePrv in - [micromamba] Update GitHub Actions steps to open Issues for failed scheduled jobs by @jdblischak in - [micromamba] Fix Ci by @AntoinePrv in - [micromamba] Mark Anaconda channels as unsupported by @jonashaag in - [micromamba] Fix nodefaults in documentation by @jonashaag in - [micromamba] Improve install instruction by @jonashaag in - [libmambapy] Refactor CI and libamambapy tests (on Unix) by @AntoinePrv in - [libmambapy] Refactor CI and libamambapy tests (on Win) by @AntoinePrv in - [all] Simplify and correct development documentation by @AntoinePrv in - [all] Add install from source instructions by @AntoinePrv in - [all] update readme install link by @artificial-agent in - [all] Fail fast except on debug runs by @AntoinePrv in ## 2023.09.05 Releases: libmamba 1.5.1, libmambapy 1.5.1, mamba 1.5.1, micromamba 1.5.1 Enhancements: - [libmamba] Add scope in util tests by @AntoinePrv in - [micromamba] Speed up tests (a bit) by @AntoinePrv in - [micromamba] Restore \_\_linux=0 test by @jonashaag in - [libmamba, micromamba] Enable Link Time Optimization by @AntoinePrv in - [libmamba] Add libsolv namespace callback by @AntoinePrv in - [all] Clearer output from micromamba search by @delsner in - [libmamba] add context.register_envs to control whether environments are registered to environments.txt or not by @jaimergp in - [libmamba, micromamba] Windows path manipulation and other cleanups by @AntoinePrv in - [libmamba] Bring back repodata_use_zst by @jonashaag in - [micromamba] Implement --md5 and --channel-subdir for non-explicit env export by @jonashaag in Bug fixes: - [libmamba] fix install pin by @AntoinePrv in - [libmamba] Use generic_string for path on Windows unix shells by @AntoinePrv in - [libmamba] Fix pins by @AntoinePrv in - [libmamba] Various fixes by @AntoinePrv in - [micromamba] Fix extra argument in self-update reinit by @AntoinePrv in - [libmamba] Parse subdirs in CLI match specs by @jonashaag in CI fixes and doc: - [all] Split GHA workflow by @JohanMabille in - [all] Use Release build mode in Windows CI by @AntoinePrv in - [micromamba] Fix wrong command description by @Hind-M in ## 2023.08.23 Releases: libmamba 1.5.0, libmambapy 1.5.0, mamba 1.5.0, micromamba 1.5.0 Enhancements: - [libmamba] All headers at the top by @AntoinePrv in - [libmamba] Add boolean expression tree by @AntoinePrv in - [libmamba] Add VersionSpec by @AntoinePrv in - [micromamba] Refactor test_repoquery to use new fixtures by @AntoinePrv in - [libmamba] Use xdg schemas for config saving/reading (minified) by @danpf in - [micromamba] Remove warnings from test_activation by @AntoinePrv in - [micromamba] Refactor test_shell by @AntoinePrv in - [libmamba] specs platform by @AntoinePrv in - [libmamba] Safe Curl opt in url.cpp by @AntoinePrv in - [libmamba] Add win-arm64 support by @isuruf in - [libmamba] Move util_string to utility library by @AntoinePrv in - [libmamba] Remove get_clean_dirs() by @jonashaag in - [micromamba] Fix and improve static builds by @AntoinePrv in - [all] Enable pytest color output by @jonashaag in - [libmamba, micromamba] Isolate URL object by @AntoinePrv in - [all] Fix warnings by @Hind-M in - [libmamba] New apis for downloading by @JohanMabille in Bug fixes: - [libmamba] Respect subdir in match spec by @ThomasBlauthQC in - [libmamba] Fixed move constructor in CURLHandle by @JohanMabille in - [micromamba] Fix wrong activated PATH in micromamba shell by @AntoinePrv in - [mamba] Fix Repo missing url by @Hind-M in - [mamba] Try Revert "Fix Repo missing url" by @AntoinePrv in - [mamba] fix subcommands handling in recent versions of conda by @jaimergp in - [libmamba] Remove created prefix if aborted with --platform by @Hind-M in - [libmamba] Add missing newline in legacy errors by @jaimergp in - [mamba] Try fix Missing Url error by @AntoinePrv in - [libmamba] fix: added missing hook_preamble() for powershell hook by @chawyehsu in - [micromamba] Fix config list sources by @Hind-M in - [libmamba] Fix fish completion by @soraxas in - [libmamba, micromamba] Fix \_\_linux virtual package default version by jonashaag in - [micromamba] Strong pin in test by @AntoinePrv in - [mamba] fix: only reactivate current environment by @chawyehsu in - [micromamba] Revert failing test by @jonashaag in CI fixes and doc: - [mamba, micromamba] Update troubleshooting.rst by @AntoinePrv in - [all] Ignore format changes in git blame by @jonashaag in - [mamba] Put more "not recommended" warnings in the installation instructions by @jonashaag in - [micromamba] Add command to docs for completeness by @danpf in - [micromamba] fix: Correct a command in installation.rst by @wy-luke in - [micromamba] Split Mamba and Micromamba installation docs by @jonashaag in - [micromamba] fix: Shell completion section title missing by @wy-luke in - [all] Add Debug build type by @Hind-M in ## 2023.07.13 Releases: libmamba 1.4.9, libmambapy 1.4.9, mamba 1.4.9, micromamba 1.4.9 Bug fixes: - [micromamba] Added upper bound to fmt to avoid weird failure on ci (windows only) by @JohanMabille in - [libmamba] Fixed missing key in channel issue by @JohanMabille in ## 2023.07.11 Releases: libmamba 1.4.8, libmambapy 1.4.8, mamba 1.4.8, micromamba 1.4.8 Enhancements: - [libmamba, micromamba] No profile.d fallback in rc files by @AntoinePrv in - [libmamba] Removed unused function by @Klaim in - [libmamba] Replace MTransaction::m_remove with Solution by @AntoinePrv in - [mamba] Improve warning when package record not found by @maresb in Bug fixes: - [libmamba] Fixed zst check in MSubdirData by @JohanMabille in CI fixes and doc; - [mamba] Force conda-forge in Anaconda install by @jonashaag in - [mamba, micromamba] Update installation docs by @AntoinePrv in ## 2023.07.06 Releases: libmamba 1.4.7, libmambapy 1.4.7, mamba 1.4.7, micromamba 1.4.7 Enhancements: - [libmamba] ZST support to mamba and remove the feature flag by @johnhany97 in - [libmamba] Add Version::starts_with and Version::compatible_with by @AntoinePrv in - [libmamba, libmambapy] Create Solver solution by @AntoinePrv in Bug fixes: - [libmamba] call init_console to prevent UTF8 errors when extracting packages by @wolfv in [libmambapy, mamba] Call init_console in mamba to prevent UTF8 errors when extracting packages by @JohanMabille in CI fixes and doc: - [libmambapy] Fixup python-api docs slightly by @HaoZeke in ## 2023.06.30 Releases: libmamba 1.4.6, libmambapy 1.4.6, mamba 1.4.6, micromamba 1.4.6 Enhancements: - [libmamba] Channels refactoring/cleaning by @Hind-M in - [libmamba] Troubleshooting update by @AntoinePrv in - [libmamba] Directly call uname for linux detection by @AntoinePrv in Bug fixes: - [libmamba] Fix build with older Clang by @pavelzw in - [libmambapy, mamba] Fixed missing subdirs in mamba by @AntoinePrv in - [libmamba] Add missing noarch in PackageInfo serialization by @AntoinePrv in - [libmamba] Allow --force-reinstall on uninstalled specs by @AntoinePrv in CI fixes and doc: - [micromamba] Document micromamba support for conda-lock spec files by @mfisher87 in ## 2023.06.27 Releases: libmamba 1.4.5, libmambapy 1.4.5, mamba 1.4.5, micromamba 1.4.5 Enhancements: - [all] No singleton: ChannelContext, ChannelBuilder and channel cache by @Klaim in - [libmamba, libmambapy] Move problem graph creation to MSolver by @AntoinePrv in - [libmamba] Add ObjSolver by @AntoinePrv in - [micromamba] Micromamba tests improvements by @AntoinePrv in - [libmamba] Use ObjSolver in MSolver by @AntoinePrv in - [all] Common CMake presets by @AntoinePrv in - [libmamba] Wrap libsolv Transaction by @AntoinePrv in - [libmamba] Split the transaction.hpp header by @AntoinePrv in - [libmamba] Add more tests for channel canonical_name by @Hind-M in - [libmamba] use ObjTransaction in MTransaction by @AntoinePrv in - [libmamba] by @jonashaag in - [libmamba] Libcurl: Cleaning and comments by @Hind-M in - [all] No singleton: configuration by @Klaim in - [libmamba] Added filtering iterators by @JohanMabille in - [libmamba] Use ObjSolver wrapper in MSolver by @AntoinePrv in - [all] Remove banner by @jonashaag in - [libmamba, libmambapy] LockFile behavior on file-locking is now almost independent from Context by @Klaim in - [micromamba] Add topological sort explicit export tests by @AntoinePrv in - [libmamba] Small whitespace fix in error messages by @AntoinePrv in Bug fixes: - [libmamba, micromamba] Use subsub commands for micromamba shell by @AntoinePrv in - [micromamba] Fix umamba tests by @AntoinePrv in - [mamba] fix different behavior between --version and -V options by @alaniwi in - [libmamba, micromamba] Honor envs_dirs by @AntoinePrv in - [libmambapy] Fix stubgens by @AntoinePrv in - [mamba] Fix server auth test by @AntoinePrv in - [libmamba] Fixed Windows test build by @JohanMabille in - [libmamba] Add missing cstdint include to libmamba/src/solv-cpp/solvable.cpp by @maxyvisser in - [libmamba, micromamba] Fix wrong download url for custom channels by @Hind-M in - [libmamba, micromamba] Fix --force-reinstall by @AntoinePrv in - [libmamba] Handle pip <-> python cycle in topo sort by @AntoinePrv in - [libmamba] Fix add missing pip PREREQ_MARKER by @AntoinePrv in - [libmamba] Fix lockfiles topological sort by @AntoinePrv in - [libmamba] Fix missing SAT message on already installed packages by @AntoinePrv in CI fixes and doc: - [libmamba] Fix clang-format by @AntoinePrv in - [micromamba] Use only vcpkg for static windows build by @pavelzw in - [all] update the umamba GHA link by @ocefpaf in - [all] Extend troubleshooting docs by @jonashaag in - [micromamba] Try new vcpkg by @AntoinePrv in - [all] Update pre-commit hooks by @jonashaag in - [all] Move GHA to setup-micromamba by @AntoinePrv in - [all] Switch linters to setup-micromamba by @AntoinePrv in - [all] Switch to setup-micromamba by @pavelzw in - [all] Fix broken ref directives in docs by @mfisher87 in ## 2023.05.16 Releases: libmamba 1.4.4, libmambapy 1.4.4, mamba 1.4.4, micromamba 1.4.4 Bug fixes: - [micromamba] fix: let the new executable run the shell init script by @ruben-arts in - [libmambapy] Support future deprecated API for Context by @Hind-M in - [libmamba] Fix CURLHandle::get_info on 32bit platform by e8035669 in ## 2023.05.15 Releases: libmamba 1.4.3, libmambapy 1.4.3, mamba 1.4.3, micromamba 1.4.3 Enhancements: - [libmamba] No Storing Channel\* and MRepo\* in Solvables by @AntoinPrv in - [libmamba, libmambapy] Remove dead code / attribute by @AntoinePrv in - [all] Context structuring by @Hind-M in - [libmamba] Clean up fetch by @Hind-M in - [libmamba] Wapped curl multi handle by @JohanMabille in - [libmamba] Remove empty test_flat_set.hpp by @AntoinePrv in - [libmamba] Add doctest printer for pair and vector by @AntoinePrv in - [libmamba] Add topological sort by @AntoinePrv in - [mamba] Add mamba version to mamba info output by @Hind-M in - [libmamba, libmambapy] Store PackageInfo::track_features as a vector by @AntoinePrv in - [libmamba] Use topological sort instead of libsolv by @AntoinePrv in - [libmamba] Remove assign_or in favor of json::value by @AntoinePrv in - [all] Resume Context structuring by @Hind-M in - [micromamba] cleanup: fix pytest warnings by @AntoinePrv in - [libmamba] Improve micromamba transaction message by @ruben-arts in - [libmamba] Remove unused raw function in subdirdata by @Hind-M in - [libmamba] Wrap ::Pool and ::Repo by @AntoinePrv in - [libmamba] Curl wrapping by @Hind-M in - [libmamba] Reset fish shell status even if variable not exists by @soraxas in - [libmamba, libmambapy, micromamba] Use libsolv wrappers in MPool and MRepo by @AntoinePrv in - [libmamba, micromamba] add bearer token authentication by @wolfv in Bug fixes: - [libmamba] fix: parsing of empty track_features by @AntoinePrv in - [libmamba] track_feature typo by @AntoinePrv in - [libmamba, mamba] Move repoquery python test from libmamba (not run) to mamba by @Hind-M in - [libmamba] Set log_level to critical with --json option by @Hind-M in - [libmamba] Add missing cstdint include for GCC 13 by @alexfikl in - [libmamba] Forward NETRC environment variable to curl, if exported by @timostrunk in - [libmamba] Remove wrong $Args in psm1 by @troubadour-hell in - [libmamba] Avoid using /tmp by @johnhany97 in - [libmamba] Fixed winreg search by @JohanMabille in CI fixes and doc: - [libmamba] Extend troubleshooting docs by @jonashaag in - [all] Extend issue template by @jonashaag in ## 2023.04.06 Releases: libmamba 1.4.2, libmambapy 1.4.2, mamba 1.4.2, micromamba 1.4.2 Enhancements: - [libmamba] Small libsolv improvements by @AntoinePrv in - [micromamba] Refactor test_create, test_proxy, and test_env for test isolation by @AntoinePrv in - [libmamba] Improve message after the env creating with micromamba by @xmnlab in - [libmamba] Use custom function to properly parse matchspec by @AntoinePrv in - [libmamba, micromamba] Remove const ref to string_view in codebase by @Hind-M in - [libmamba] Wrap more libcurl calls by @Hind-M in Bug fixes: - [libmamba] Fix PKG_BUILDNUM env variable for post-link scripts by nsoranzo in - [libmamba] Solve a corner case in the SAT error messages by @AntoinePrv in - [libmamba] Windows: Fixed environment variables not read as unicode by @Klaim in - [libmamba] Fix segfault in add_pin/all_problems_structured by @AntoinePrv in - [mamba] Safely ignores virtual packages in `compute_final_precs` function by @mariusvniekerk in CI fixes and doc: - [libmambapy, micromamba] Fixes typos by @nsoranzo in - [micromamba] Remove outdated micromamba experimental warning by @jonashaag in - [libmamba] Replaced libtool 2.4.6_9 with libtool 2.4.7-3 in vcpkg builds by @JohanMabille in - [all] Migrated to doctest by @JohanMabille in ## 2023.03.28 Releases: libmamba 1.4.1, libmambapy 1.4.1, mamba 1.4.1, micromamba 1.4.1 Enhancements: - [libmamba] First version/steps of unraveling fetch code and wrapping libcurl by @Hind-M in - [libmamba] Parse repodata.json by @AntoinePrv in - [libmamba] TimeRef is not a singleton anymore by @Klaim in - [libmamba] Handle url via ChannelBuilder in Repo constructor by @jaimergp in - [libmamba, micromamba] add option to relocate prefix by @DerThorsten in - [libmamba] Renamed validate namespace to `mamba::validation` by @Klaim in Bug fixes: - [libmamba] Fixed build with older Clang by @ZhongRuoyu in ## 2023.03.22 Releases: libmamba 1.4.0, libmambapy 1.4.0, mamba 1.4.0, micromamba 1.4.0 Enhancements: - [all] Implemented recursive dependency printout in repoquery by @timostrunk in - [libmamba, libmambapy, micromamba] Aggressive compilation warnings by @AntoinePrv in - [all] Fine tune clang-format by @AntoinePrv in - [libmamba] Added checked numeric cast by @AntoinePrv in - [libmamba, libmambapy] Activated SAT error messages by @AntoinePrv in - [libmamba] Added RISC-V support by @dtcxzyw in - [mamba] Allow the direct installation of both .tar.bz2 and .conda packages by @romain-intel in - [libmamba, libmambapy] Removed redundant `DependencyInfo` by @AntoinePrv in - [libmamba] Isolate solv::ObjQueue by @AntoinePrv in - [libmamba] Removed unused libarchive header in fetch by @hind-M in - [libmamba] Removed duplicated header by @JohanMabille in - [libmamba] Cleaned `util_string` by @AntoinePrv in - [libmamba, libmambapy, micromamba] Only full shared or full static builds by @JohanMabille in - [libmamba, libmambapy, micromamba] Fixed repoquery commands working with installed packages only by @Hind-M in - [libmamba] Added a heuristic to better handle the (almost) cyclic Python conflicts by @AntoinePrv in - [libmamba, libmambapy, mamba] Isolate `PackageInfo` from libsolv from @AntoinePrv in - [libmamba] Added `strip_if` functions by @AntoinePrv in - [libmamba] Added conda.rc Options for Existing Remote Settings by @srilman in - [micromamba] Added micromamba server by @wolfv in - [libmamba] Hide independent curl code and compression structures in unexposed files by @Hind-M in - [libmamba] Added `strip_parts` functions by @AntoinePrv in - [libmamba] Added parsing of Conda version by @AntoinePrv in - [libmamba] Slight refactoring of the utility library by @AntoinePrv in Bug fixes: - [libmamba] Fixed invalid reinstall count display by @timostrunk in - [libmamba] Fixed segmentation fault in case of an invalid package name by @timostrunk in - [micromamba] Fixed `micromamba env export` to get channel name instead of full url by @Hind-M in - [mamba] Fixed `mamba init --no-user` by @xylar in - [libmambapy] Fixed repoquery output of mamba when query format is JSON by @JohanMabille in - [libmamba] Fixed `to_lower(wchar_t)` and `to_upper(wchar_t)` by @AntoinePrv in - [libmamba] Fixed undefined-behaviors reported by UBSAN by @klaim in CI fixes & docs: - [libmamba] Fixed sign warning in tests by @AntoinePrv in - [micromamba] Added missing dependency in local recipe by @wolfv in - [mamba] `repoquery depends` requires the package to be installed or to specify a channel by @samtygier in - [libmamba] Structured test directory layout by @AntoinePrv in - [micromamba] Fixed Conda Lock Path by @function in ## 2023.02.09 Releases: libmamba 1.3.1, libmambapy 1.3.1, mamba 1.3.1, micromamba 1.3.1 A bugfix release for 1.3.0! Bug fixes: - [micromamba, libmamba] fix up single download target perform finalization to make lockfile download work by @wolfv in - [micromamba] use CONDA_PKGS_DIRS even in explicit installation trasactions by @hmaarrfk in - [libmamba, micromamba] fix rename or remove by @wolfv in - [libmamba] add channel specific job with new str by @AntoinePrv in - [libmamba, micromamba] fix `micromamba shell` for base environment, and improve behavior when `auto_activate_base` is true by @jonashaag, @Hind-M and @wolfv Docs: - add micromamba docker image by @wholtz in - added biweekly meetings information to README by @JohanMabille in - change docs to homebrew/core by @pavelzw in ## 2023.02.03 Releases: libmamba 1.3.0, libmambapy 1.3.0, mamba 1.3.0, micromamba 1.3.0 Enhancements: - [libmambapy] add `use_lockfiles` to libmambapy bindings by @jaimergp in - [micromamba] add functionality to download lockfiles from internet by @wolfv in - [micromamba] Stop run command when given prefix does not exist by @Hind-M in - [micromamba] Install pip deps like conda by @michalsieron in - [libmamba, micromamba] switch to repodata.state.json format from cep by @wolfv in Bug fixes: - [micromamba, libmamba] Fix temporary file renaming by @jonashaag in - [mamba] Fix mamba / conda incompatibility by @jonashaag in CI fixes & docs: - [micromamba] use proper recipe also on macOS by @wolfv in - [micromamba] Update micromamba installation docs for Windows by @Tiksagol in - [all] docs: defaults should not be used with conda-forge by @jonashaag in - [all] fix tests for pkg_cache by @wolfv in - [libmamba] Added missing public dependency to libmambaConfig.cmake by @JohanMabille in - [libmambapy] Remove unused `get_tarball` function by @Hind-M in - [mamba] update documentation for mamba activate by @cdeepali in - [micromamba] Fix Windows static builds by @jonashaag in ## 2023.01.16 Releases: libmamba 1.2.0, libmambapy 1.2.0, mamba 1.2.0, micromamba 1.2.0 This release contains some speed improvements: download repodata faster as zstd encoded files (configure using `repodata_use_zst: true` in your `~/.mambarc` file). Also, `.conda` file extraction is now faster, a prefix with spaces works better thanks to a new "shebang" style and the `micromamba package compress` and `transmute` commands produce better conda packages. Enhancements: - [micromamba, libmamba] Make tarballs look more similar to conda-package-handling by @wolfv in #2177, #2217 - [micromamba, libmamba] Use new shebang style by @wolfv in #2211 - [micromamba, libmamba] Faster conda decompress by @wolfv in #2200 - [micromamba, libmamba] Initial repodata.zst support by @wolfv & @jonashaag in #2113 Bug fixes: - [micromamba, libmamba] log warnings but ignore cyclic symlinks by @wolfv in #2212 - [mamba] Add Context binding for experimental_sat_error_message by @syslaila in #2143 - [libmamba] Error messages improvements by @AntoinePrv in #2149 - [micromamba, libmamba] Report failure when packages to remove don't exist. (#2131) by @Klaim in #2132 - [libmamba] Fixing typo in solver errors by @shughes-uk in #2168 - [micromamba] Fix micromamba shell completion when running 'shell hook' directly by @TomiBelan in #2137 - [libmamba] Extend `last_write_time` implementation by special-casing file touching by @coroa in #2141 - [libmamba, micromamba] Don't create a prefix which is missing conda-meta by @maresb in #2162 - [libmamba, micromamba, mamba] Fix `custom_channels` parsing by @XuehaiPan in #2207 - [micromamba] Fix #1783: Add `micromamba env create` by @jonashaag in #1790 - [mamba] Use check_allowlist from conda by @duncanmmacleod in #2220 CI fixes & docs: - Improve build env cleanup by @jonashaag in #2213 - Run conda_nightly once per week by @jonashaag in #2147 - Update doc by @Hind-M in #2156 - Use Conda canary in nightly tests by @jonashaag in #2180 - Explicitly point to libmamba test data independently of cwd by @AntoinePrv in #2158 - Add bug report issue template by @jonashaag in #2182 - Downgrade curl to fix micromamba on macOS x64 by @wolfv in #2205 - Use conda-forge micromamba feedstock instead of a fork by @JohanMabille in #2206 - Update pre-commit versions by @jonashaag in #2178 - Use local meta.yaml by @wolfv in #2214 - Remove feedstock patches by @wolfv in #2216 - Fixed static dependency order by @JohanMabille in #2201 ## 2022.11.25 Releases: libmamba 1.1.0, libmambapy 1.1.0, mamba 1.1.0, micromamba 1.1.0 Some bugfixes for 1.0 and experimental release of the new solver messages Bug fixes - [micromamba] Fix fish scripts (thanks @JafarAbdi, @raj-magesh, @jonashaag) #2101 - [mamba] Fix activate/deactivate in fish shell (thanks @psobolewskiPhD) #2081 - [micromamba] fix direct hook for powershell #2122 - [libmamba] Fix libmamba CMake config file after dependency change (thanks @l2dy) #2091 - [micromamba] fixes for ssl init and static build #2076 Enhancements - [libmamba] Add safe signed/unsigned conversion (thanks @AntoinePrv) #2087 - [libmamba] Move to fmt::terminal_color and other output IO improvements & drop termcolor (thanks @AntoinePrv) #2085 - [libmamba, micromamba] Handle non leaf conflicts (thanks @AntoinePrv) #2133 - [libmamba, micromamba] Bind SAT error messages to python (thanks @AntoinePrv) #2127 - [libmamba, micromamba] Nitpicking error messages (thanks @AntoinePrv) #2121 - [libmamba, micromamba] Tree error message improvements (thanks @AntoinePrv) #2093 - [libmamba, micromamba] Tree error message (thanks @AntoinePrv) #2064 - [libmamba, micromamba] Add experimental flag for error messages (thanks @AntoinePrv) #2080 - [libmamba, micromamba] Handle non leaf conflicts (thanks @AntoinePrv) #2133 - [mamba] fix: Don't print banner in quiet mode (thanks @corneliusroemer) #2097 - [all] ci: Update pre-commit-config #2092 - [all] docs: Add warning to manual install instructions #2100 - [all] docs: Consistently use curl for fetching files #2126 ## 2022.11.01 Releases: libmamba 1.0.0, libmambapy 1.0.0, mamba 1.0.0, micromamba 1.0.0 Our biggest version number yet! Finally a 1.0 release :) New notable micromamba features include: - improved shell scripts with autocompletion available in PowerShell, xonsh, fish, bash and zsh - `micromamba shell -n someenv`: enter a sub-shell without modifying the system - `micromamba self-update`: micromamba searches for updates and installs them if available (you can also downgrade using `--version 0.26.0` for example) Bug fixes: - [micromamba, libmamba] ignore "Permission denied" in `env::which` (thanks @Rafflesiaceae) #2067 - [micromamba] Link micromamba with static libc++.a and system libc++abi (thanks @isuruf) #2069 - [libmamba, micromamba] Fix an infinite loop in replace_all() when the search string is empty (thanks @tsibley) - [mamba, libmambapy] Ensure package record always has subdir (thanks @jaimergp) #2016 - [libmamba, micromamba] Do not crash when permissions cannot be changed, instead log warning (thanks @hwalinga) Enhancements: - [libmamba] Rewrite LockFile interface (thanks @Klaim) #2014 - [micromamba] Add `micromamba env remove` (thanks @Hind-M) #2002 - [micromamba] add self-update functionality (#2023) - [micromamba] order dependencies alphabetically from `micromamba env export` (thanks @torfinnberset) #2063 - [libmambapy] add stubs with pybind11-stubgen (thanks @dholth) #1983 - [mamba] Support for mamba init fish (thanks @dlukes) #2006 - [mamba] Fix Repoquery help text (thanks @BastianZim) #1998 - [all] Fix ci deprecation warnings, upload conda-bld artifacts for failed builds #2058, #2062 - [all] Explicitly define SPDLOG_FMT_EXTERNAL and use spdlog header only use external fmt (thanks @AntoinePrv) #2060, #2048 - [all] Fix CI by pointing to updated feedstock and fixing update tests (thanks @AntoinePrv) #2055 - [all] Add authentication with urlencoded @ to proxy test (#2024) @AdrianFreundQC - [all] better test isolation (thanks @AntoinePrv) #1903 - [all] Test special characters in basic auth (thanks @jonashaag) #2012 - [libmamba] ProblemsGraph compression (thanks @AntoinePrv) #2019 - [libmamba] vector_set compare function (thanks @AntoinePrv) #2051 - [libmamba] Clean up util_graph header and tests (thanks @AntoinePrv) #2039 - [libmamba] Add string utilities (thanks @AntoinePrv) # - [libmamba] Dynamic tree walk of the Compressed problem graph - [libmamba] Creating the initial problems graph (thanks @syslaila) #1891 ## 2022.10.04 Releases: libmamba 0.27.0, libmambapy 0.27.0, mamba 0.27.0, micromamba 0.27.0 Bug fixes: - [libmamba, micromamba] fix lockfiles relying on PID (thanks @Klaim) #1915 - [micromamba] fix error condition in micromamba run to not print warning every time #1985 - [micromamba] fix error when getting size of directories (thanks @Klaim) #1982 - [micromamba] fix crash when installing pip packages from env files (thanks @Klaim) #1978 - [libmambapy] make compilation with external fmt library work #1987 Enhancements: - [micromamba] add cross-compiled builds to CI (thanks @pavelzw) #1976, #1989 ## 2022.09.29 Releases: libmamba 0.26.0, libmambapy 0.26.0, mamba 0.26.0, micromamba 0.26.0 Bug fixes: - [micromamba] fix fish scripts (thanks @jonashaag) #1975 - [micromamba] fix issues with `micromamba ps` #1953 - [libmamba, micromamba] add symlinks and empty directories to archive for `micromamba package compress` #1955 - [mamba] fix mamba.sh and mamba.bat shell scripts to work with conda 22.09 #1952 - [libmamba] increase curl buffer size for faster max download speeds (thanks @jonashaag) #1949 - [micromamba] add `micromamba info --licenses` to print licenses of used OSS (thanks @jonashaag) #1933 - [micromamba] proper quoting in `micromamba run` (thanks @jonashaag) #1936 - [micromamba] install pip dependencies and by category for YAML lockfiles (thanks @jvansanten) #1908 #1917 - [libmamba] fix crash when installing from environment lockfile (thanks @Klaim) #1893 - [micromamba] fix update for packages with explicit channels (thanks @AntoinePrv) #1864 - [libmamba] fix linux version regex (thanks @kelszo) #1852 - [libmamba] remove duplicate console output (thanks @pavelzw) #1845 - [mamba] remove usage of non-existing function (thanks @AntoinePrv) #1835 Enhancements: - [libmamba] add option to disable file locks globally (thanks @danpf @JohanMabille) #1830 - [libmamba] extend graph class for better solver messaging work (thanks @syslaila @AntoinePrv) #1880 - [micromamba] only call compinit once to fix oh-my-zsh (thanks @AntoinePrv) #1911 - [libmamba] use std::filesystem instead of ghc::filesystem (thanks @Klaim) #1665 - [libmamba] add missing SolverRuleInfo enum entries (thanks @AntoinePrv) #1833 - [micromamba] CI: add fully static micromamba build (thanks @jonashaag) #1821 - [mamba, micromamba] allow configuring proxies (thanks @AdrianFreundQC) #1841 ## 2022.07.29 Releases: micromamba 0.25.1 Bug fixes: - [micromamba] fix issue where pip installation was broken on Windows @Klaim #1828 ## 2022.07.26 Releases: libmamba 0.25.0, libmambapy 0.25.0, mamba 0.25.0, micromamba 0.25.0 Bug fixes: - [micromamba] fix pip execution in environments with spaces (thanks @chaubold) #1815 - [mamba] keep Pool alive for the lifetime of the solver (thanks @AntoinePrv) #1804 - [micromamba] Fix `shell init --dry-run` (thanks @jonashaag) #1767 - [mamba] print banner to stderr and do not print banner with `mamba run` (thanks @jonashaag) #1810 - [micromamba] Change exit(1) to throw exceptions instead (thanks @jonashaag) #1792 - [libmamba] Make lockfiles less noisy (thanks @Klaim) #1750 - [libmamba] Make clobber warnings less noisy #1764 - [libmamba] Do not ever log password in plain text (thanks @AntoinePrv) #1776 Enhancements: - [libmambapy] Add missing SOLVER_RULE_PKG_CONSTRAINS ruleinfo in libmambapy bindings (thanks @syslaila) #1823 - [libmamba, libmambapy] Add safe id2pkginfo (thanks @AntoinePrv) #1822 - [libmambapy] Change PackageInfo value mutability and add named arguments (thanks @AntoinePrv) #1822 - [libmamba, micromamba] add handling of different tokens for channels on same host (thanks @AntoinePrv) #1784 - [all] better test isolation (thanks @AntoinePrv) #1791 - [micromamba] Add deinit shell command (thanks @pavelzw) #1781 - [all] Add nodefaults handling to libmamba (thanks @AdrianFreundQC) #1773 - [micromamba] Fix micromamba Windows download instructions (thanks @jonashaag) #1793 - [libmamba, libmambapy] Add utilities for better error reporting and refactor Queue #1789 - [micromamba] Better error message if root prefix is not a directory #1792 - [libmamba] Do not modify string during sregex iteration (thanks @jonashaag) #1768 - [libmamba] Better error message for invalid `.condarc` file (thanks @jonashaag) #1765 - [libmamba] Tweak is_writable() (thanks @Klaim) #1750 - [libmamba] Allow for external fmt library (thanks @gdolle) #1732 - [libmamba] Remove error message when `touch` fails #1747 - [libmamba] Log the exception that caused configuration parsing failure (thanks @johnhany97) #1755 - [mamba, micromamba] Make `--use-index-cache` option work (thanks @AdrianFreundQC) #1762 - [micromaba] Do not truncate channel url in `micromamba env export` (thanks @nstinus) #1733 - [libmamba] Fix MSVC warnings (thanks @Klaim) #1721 - [all] Test improvements (thanks @AntoinePrv) #1777, #1778 ## 2022.05.31 Releases: libmamba 0.24.0, libmambapy 0.24.0, mamba 0.24.0, micromamba 0.24.0 Bug fixes: - [micromamba] constructor now uses proper (patched) repodata to create repodata_record.json files #1698 - [libmamba, micromamba] use fmt::format for pretty printing in `micromamba search --pretty` #1710 - [mamba] remove flag from clean subcommand that conflicts with conda (`mamba clean -l`, use `--lock` instead) #1709 - [libmamba] commit fix for compiling with ppc64le on conda-forge #1695 ## 2022.05.20 Releases: libmamba 0.23.3, libmambapy 0.23.3, mamba 0.23.3, micromamba 0.23.3 Bug fixes - [micromamba] Fix summing behavior of `-v` flags #1690 - [all] fix curl callback to not exit anymore but report a proper error #1684 - [micromamba] fix up explicit installation by using proper variables #1677 - [libmamba] fix channel prefix test (thanks @jonashaag) #1674 - [mamba] fix strict priority for `mamba create env ...` #1688 Improvements - [micromamba] make clean_force_pkgs respect `-y` flag (thanks @Patricol) #1686 - [libmamba] various Windows / CMake improvements #1683 - [libmamba] various warnings fixed on Windows and Unix #1683, 1691 - [libmamba] fix yaml-cpp linkage #1678 ## 2022.05.12 Releases: micromamba 0.23.2 Bug fixes - [micromamba] Fix a bug with platform replacement in URLs #1670 ## 2022.05.11 Releases: libmamba 0.23.1, libmambapy 0.23.1, mamba 0.23.1, micromamba 0.23.1 Bug fixes - [micromamba] Fix powershell unset of env vars (thanks @chawyeshu) #1668 - [all] Fix thread clean up and singleton destruction order (thanks @Klaim) #1666, #1620 - [all] Show reason for multi-download failure (thanks @syslaila) #1652 - [libmamba] Fix platform splitting to work with unknown platforms #1662 - [libmamba] Create prefix before writing the config file #1662 - [libmamba] Retry HTTP request on 413 & 429, respect Retry-After header (thanks @kenodegard) #1661 - [mamba] Add high-level Python API (thanks @martinRenou) #1656 - [libmamba] Initialize curl (thanks @Klaim) #1648 - [libmamba] Replace thread detaching by thread joining before main's end (thanks @Klaim) #1637 ## 2022.04.21 Releases: libmamba 0.23.0, libmambapy 0.23.0, mamba 0.23.0, micromamba 0.23.0 This release uses tl::expected for some improvements in the error handling. We also cleaned the API a bit and did some refactorings to make the code compile faster and clean up headers. Bug fixes - [micromamba] Do not clean env when running post-link scripts (fixes Qt install on Windows) #1630 - [micromamba] Fix powershell activation in strict mode (thanks @mkessler) #1633 Enhancements - [micromamba] Add `micromamba auth login / logout` commands - [micromamba] Add support for new conda-lock yml file format (thanks @Klaim) #1577 - [libmamba, libmambapy] Make user agent configurable through Context - [micromamba] Use cli11 2.2.0 #1626 - [libmamba] Correct header casing for macOS (thanks @l2dy) #1613 - [libmamba] Log the thrown error when validating cache (thanks @johnhany97) #1608 - [all] Use sscache to speed up builds (thanks @jonashaag) #1606 - [all] Upgrade black - [micromamba, libmamba] Use bin2header to inline the various scripts (thanks @jonashaag) #1601 - [micromamba] Fix JSON output issues (thanks @Klaim) #1600 - [all] Refactor the include chain, headers cleanup (thanks @JohanMabille) #1588, #1592, #1590 - [mamba] Remove import of init_std_stream_encoding (thanks @jezdez) #1589 - [all] Refactor error handling (thanks @JohanMabille) #1579 - [libmamba] Do not store multi pkgs cache in subdir anymore #1572 - [libmambapy] Add structured problem extraction #1570, #1566 - [micromamba] Add tests for micromamba run (thanks @Klaim) #1564 - [libmamba, libmambapy] Add API to remove repo from pool - [libmamba] Store channel in subdirdata and libsolv repo appdata - [libmamba] Remove prefixdata.load() #1555 - [libmamba] Remove prefixdata from solver interface #1550 - [micromamba] Also complete for micromamba deactivate #1577 ## 2022.02.28 Releases: libmamba 0.22.1, libmambapy 0.22.1, mamba 0.22.1 Bug fixes - [mamba] Properly add `noarch` to package record to force recompilation #1545 ## 2022.02.25 Releases: libmamba 0.22.0, libmambapy 0.22.0, mamba 0.22.0, micromamba 0.22.0 Bug fixes - [libmamba, mamba, micromamba] Add noarch recompilation step for mamba and micromamba #1511 - [micromamba] Add `--force-reinstall`, `--only-deps` and `--no-deps` to micromamba #1531 - [micromamba] Tolerate `PATH` being unset better (thanks @chrisburr) #1532 Improvements - [micromamba] Add `--label` option to micromamba run and automatically generate process names otherwise (thanks @Klaim) #1491, #1530, #1529 - [libmamba] Remove compile time warnings by updating deprecated openssl functions #1509 - [micromamba] Add `search` as an alias for `repoquery search` (thanks @JohanMabille) #1510 - [micromamba] Fix `repoquery search` not working outside activated environment (thanks @JohanMabille) #1510 - [micromamba] Refactor configuration system (thanks @JohanMabille) #1500 - [libmamba] Use custom debug callback from libcurl and libsolv (routed through spdlog) #1507 - [libmamba] Refactor Channel implementation (thanks @JohanMabille) #1537 - [libmamba] Hide tokens in libcurl and libsolv as well (and remove need for `--experimental` flag to load tokens) #1538 - [libmamba] Pass through QEMU_LD_PREFIX to subprocesses (thanks @chrisburr) #1533 - [micromamba] Fix segfault on Linux with "fake" micromamba activate command #1496 ## 2022.02.14 Releases: libmamba 0.21.2, libmambapy 0.21.2, mamba 0.21.2, micromamba 0.21.2 Bug fixes - [libmamba] Fix json read of `_mod` and `_etag` when they are not available #1490 - [micromamba] Properly attach stdin for `micromamba run` #1488 ## 2022.02.11 Releases: libmamba 0.21.1, libmambapy 0.21.1, mamba 0.21.1, micromamba 0.21.1 Bug fixes - [libmamba] Adjust cache url hashing and header data parsing #1482 - [libmamba] Properly strip header of \r\n before adding to repodata.json cache #1482 - [micromamba] Revert removal of environment variables when running pip (thanks @austin1howard) #1477 - [mamba] Fix undefined transaction when creating env with no specs #1460 Improvements - [micromamba] Add `micromamba config --json` (thanks @JohanMabille) #1484 - [mamba,micromamba,libmamba] Adjustments for the progress bars, make better visible on light backgrounds #1458 - [mamba] Refer to mamba activate for activation hint #1462 - [micromamba] Micromamba run add `--clean-env` and `-e,--env` handling to pass in environment variables #1464 - [mamba] Mention in help message that `mamba activate` and `deactivate` are supported (thanks @traversaro) #1476 - [micromamba] Disable banner with `micromamba run` #1474 ## 2022.02.07 Releases: libmamba 0.21.0, libmambapy 0.21.0, mamba 0.21.0, micromamba 0.21.0 Bug fixes - [libmamba] generate PkgMgr role file from its file definition #1408 - [micromamba] fix crash with missing CONDARC file (thanks @jonashaag) #1417 - [micromamba] fix `micromamba --log-level` (thanks @jonashaag) #1417 - [micromamba] Fix erroneous error print when computing SHA256 of missing symlink #1412 - [micromamba] Add `-n` flag handling to `micromamba activate` #1411 - [micromamba] Refactor configuration loading and create file if it doesn't exist when setting values #1420 - [libmamba] Fix a regex segfault in history parsing #1441 - [libmamba] Add test for segfault history parsing #1444 (thanks @jonashaag) - [micromamba] Improve shell scripts when ZSH_VERSION is unbound #1440 - [micromamba] Return error code when pip install fails from environment.yml #1442 Improvements - [all] Update pre-commit versions (thanks @jonashaag) #1417 - [all] Use clang-format from pypi (thanks @chrisburr) #1430 - [all] Incremental ccache updates (thanks @jonashaag) #1445 - [micromamba] Substitute environment vars in .condarc files (thanks @jonashaag) #1423 - [micromamba, libmamba] Speed up noarch compilation (thanks @chrisburr) #1422 - [mamba] Include credentials for defaults channel URLs (thanks @wulmer) #1421 - [micromamba, libmamba] New fancy progress bars! (thanks @adriendelsalle) #1426, #1350 - [libmamba] Refactor how we set env vars in the Context #1426 - [micromamba] Add `micromamba run` command (thanks @JohanMabille) #1380, #1395, #1406, #1438, #1434 - [micromamba] Add `-f` for `micromamba clean` command (thanks @JohanMabille) #1449 - [micromamba] Add improved `micromamba update --all` #1318 - [micromamba] Add `micromamba repoquery` command #1318 ## 2022.01.25 Releases: libmamba 0.20.0, libmambapy 0.20.0, mamba 0.20.0, micromamba 0.20.0 Bug fixes - [libmamba] Close file before retry & deletion when downloading subdir (thanks @xhochy) #1373 - [micromamba] Fix micromamba init & conda init clobber (thanks @maresb) #1357 - [micromamba] Rename mamba.sh to micromamba.sh for better compatibility between mamba & micromamba (thanks @maresb) #1355 - [micromamba] Print activate error to stderr (thanks @maresb) #1351 Improvements - [micromamba, libmamba] Store platform when creating env with `--platform=...` (thanks @adriendelsalle) #1381 - [libmamba] Add environment variable to disable low speed limit (thanks @xhochy) #1380 - [libmamba] Make max download threads configurable (thanks @adriendelsalle) #1377 - [micromamba] Only print micromamba version and add library versions to `info` command #1372 - [micromamba] Implement activate as a micromamba subcommand for better error messages (thanks @maresb) #1360 - [micromamba] Experimental was logged twice (thanks @baszalmstra) #1360 - [mamba] Update to Python 3.10 in the example snippet (thanks @jtpio) #1371 ## 2021.12.08 Releases: libmamba 0.19.1, libmambapy 0.19.1, mamba 0.19.1, micromamba 0.19.1 Bug fixes - [mamba] Fix environment double print and add dry run to `mamba env create` (@wolfv) #1315 - [micromamba] Fix lockfiles in Unicode prefix (@wolfv) #1319 - [libmamba] Fix curl progress callback Improvements - [libmamba] Use WinReg from conda-forge - [libmamba] Add fast path for hide_secrets (thanks @baszalmstra) #1337 - [libmamba] Use the original sha256 hash if a file doesnt change (thanks @baszalmstra) #1338 - [libmamba] Rename files that are in use (and cannot be removed) on Windows (@wolfv) #1319 - [micromamba] Add `micromamba clean --trash` command to remove `*.mamba_trash` files (@wolfv) #1319 - [libmamba] Avoid recomputing SHA256 for symbolic links (@wolfv) #1319 - [libmamba] Improve cleanup of directories in use (@wolfv) #1319 - [libmamba] Fix pyc compilation on Windows (@adriendelsalle) #1340 ## 2021.11.30 Releases: libmamba 0.19.0, libmambapy 0.19.0, mamba 0.19.0, micromamba 0.19.0 Bug fixes - [all] Better Unicode support on Windows (@wolfv) #1306 - [libmamba, libmambapy] Solver has function to get more solver errors (@wolfv) #1310 - [mamba, micromamba] Do not set higher prio to arch vs noarch (@wolfv) #1312 - [libmamba] Close json repodata file after opening (@wolfv) #1309 - [micromamba] Add shell_completion, changeps1 and env_prompt as RC settings, remove auto-activate-base CLI flag (@wolfv) #1304 - [libmamba] Add bash & zsh shell_completion to activation functions - [mamba] Use always_yes for `mamba env` subcommand (@wolfv) #1301 - [libmambapy] Remove libmamba from install_requires for libmambapy (@duncanmmacleod) #1303 ## 2021.11.24 Releases: libmamba 0.18.2, libmambapy 0.18.2, mamba 0.18.2, micromamba 0.18.2 Bug fixes - [mamba, libmamba] Fix use of a read-only cache (@adriendelsalle) #1294 - [mamba, libmamba] Fix dangling LockFiles (@adriendelsalle) #1290 - [micromamba] Fix CMake config for micromamba fully statically linked on Windows (@adriendelsalle) #1297 - [micromamba, libmamba] Fix shell activation regression (@adriendelsalle) #1289 ## 2021.11.19 Releases: libmamba 0.18.1, libmambapy 0.18.1, mamba 0.18.1, micromamba 0.18.1 Bug fixes - [all] Fix default log level, use warning everywhere (@adriendelsalle) #1279 - [mamba] Fix json output of `info` subcommand when verbose mode is active (@adriendelsalle) #1280 - [libmamba, libmambapy, mamba] Allow mamba to set max extraction threads using `MAMBA_EXTRACT_THREADS` env var (@adriendelsalle) #1281 ## 2021.11.17 Releases: libmamba 0.18.0, libmambapy 0.18.0, mamba 0.18.0, micromamba 0.18.0 New features - [libmamba, mamba, micromamba] Implement parallel packages extraction using subprocesses (@jonashaag @adriendelsalle) #1195 - [micromamba] Improve bash completion (activate sub-command, directories completion) (@adriendelsalle) #1234 - [libmamba, micromamba] Add channel URLs to info (@jonashaag) #1235 - [libmamba] Read custom_multichannels from .condarc (@jonashaag) #1240 - [libmamba] Improve pyc compilation, make it configurable (@adriendelsalle) #1249 - [micromamba] Make pyc compilation configurable using `--pyc,--no-pyc` flags (@adriendelsalle) #1249 - [libmamba] Use `spdlog` for nicer and configurable logs (@adriendelsalle) #1255 - [micromamba] Add `--log-level` option to control log level independently of verbosity (@adriendelsalle) #1255 - [libmamba] Make show_banner rc and env_var configurable (@adriendelsalle) #1257 - [micromamba] Add zsh completion (@adriendelsalle) #1269 - [mamba] Make mamba env download and extract using `libmamba` (@adriendelsalle) #1270 - [libmamba] Add info JSON output (@adriendelsalle) #1271 - [micromamba] Add `--json` CLI flag to `info` sub-command (@adriendelsalle) #1271 Bug fixes - [micromamba] Init all powershell profiles (@adriendelsalle) #1226 - [micromamba] Fix multiple activations in Windows bash (@adriendelsalle) #1228 - [libmamba] Fix failing package cache checks (@wolfv) #1237 - [mamba] Use libmamba LockFile, add `clean --lock` flag (@adriendelsalle) #1238 - [libmamba] Improve catching of reproc errors (such as OOM-killed) (@adriendelsalle) #1250 - [libmamba] Fix shell init with relative paths (@adriendelsalle) #1252 - [libmamba] Fix not thrown error in multiple caches logic (@adriendelsalle) #1253 Docs - [micromamba] Document fish support (@izahn) #1216 General improvements - [all] Split projects, improve CMake options (@adriendelsalle) #1219 #1243 - [libmamba] Test that a missing file doesn't cause an unlink error (@adriendelsalle) #1251 - [libmamba] Improve logging on YAML errors (@adriendelsalle) #1254 - [mamba] Conditionally import bindings for cross-compiling (@adriendelsalle) #1263 ## 0.17.0 (October 13, 2021) API Breaking changes: The Transaction and the Subdir interface have slightly changed (no more explicit setting of the writable packages dir is necessary, this value is taken directly from the MultiPackagesCache now) - improve listing of (RC-) configurable values in `micromamba` #1210 (thanks @adriendelsalle) - Improve micromamba lockfiles and add many tests #1193 (thanks @adriendelsalle) - Support multiple package caches in micromamba (thanks @adriendelsalle) #1109 - Order explicit envs in micromamba (also added some text to the docs about libsolv transactions) #1198 - Add `micromamba package` subcommand to extract, create and transmute packages #1187 - Improve micromamba configuration to support multi-stage loading of RC files (thanks @adriendelsalle) #1189 #1190 #1191 #1188 - Add handling of `CONDA_SAFETY_CHECKS` to micromamba #1143 (thanks @isuruf) - Improve mamba messaging by adding a space #1186 (thanks @wkusnierczyk) - Add support for `custom_multichannels` #1142 - micromamba: expose setting for `add_pip_as_python_dependency` #1203 - stop displaying banner when running `mamba list` #1184 (thanks @madhur-thandon) ## 0.16.0 (September 27, 2021) - Add a User-Agent header to all requests (mamba/0.16.0) (thanks @shankerwangmiao) - Add `micromamba env export (--explicit)` to micromamba - Do not display banner with `mamba list` (thanks @madhur-tandon) - Use directory of environment.yml as cwd when creating environment (thanks @marscher & @adriendelsalle) - Improve outputs - content-trust: Add Python bindings for content-trust API - content-trust: Load PkgMgr definitions from file - content-trust: Improve HEAD request fallback handling - export Transaction.find_python_version to Python - Continue `shell init` when we can't create the prefix script dir (thanks @maresb) - Implement support for `fish` shell in `micromamba` (thanks @soraxas) - Add constraint with pin when updating - Expose methods for virtual packages to Python (thanks @madhur-tandon) ## 0.15.3 (August 18, 2021) - change token regex to work with edge-cases (underscores in user name) (#1122) - only pin major.minor version of python for update --all (#1101, thanks @mparry!) - add mamba init to the activate message (#1124, thanks @isuruf) - hide tokens in logs (#1121) - add lockfiles for repodata and pkgs download (#1105, thanks @jaimergp) - log actual SHA256/MD5/file size when failing to avlidate (#1095, thanks @johnhany97) - Add mamba.bat in front of PATH (#1112, thanks @isuruf) - Fix mamba not writable cache errors (#1108) ## 0.15.2 (July 16, 2021) - micromamba autocomplete now ready for usage (#1091) - improved file:// urls for windows to properly work (#1090) ## 0.15.1 (July 15, 2021) New features: - add `mamba init` command and add mamba.sh (#1075, thanks @isuruf & #1078) - add flexible channel priority option in micromamba CLI (#1087) - improved autocompletion for micromamba (#1079) Bug fixes: - improve "file://" URL handling, fix local channel on Windows (#1085) - fix CONDA_SUBDIR not being used in mamba (#1084) - pass in channel_alias and custom_channels from conda to mamba (#1081) ## 0.15.0 (July 9, 2021) Big changes: - improve solutions by inspecting dependency versions as well (libsolv PR: ) @wolfv - properly implement strict channel priority (libsolv PR: ) @adriendelsalle - Note that this changes the meaning of strict and flexible priority as the previous implementation did not follow conda's semantics. Mamba now has three modes, just like conda: strict, flexible and disabled. Strict will completely disregard any packages from lower-priority channels if a package of the same name exists in a higher priority channel. Flexible will use packages from lower-priority channels if necessary to fulfill dependencies or explicitly requested (e.g. by version number). Disabled will use the highest version number, irregardless of the channel order. - allow subdir selection as part of the channel: users can now specify an explicit list of subdirs, for example: `-c mychannel[linux-static64, linux-64, noarch]` to pull in repodata and packages from these three subdirs. Thanks for the contribution, @afranchuk! #1033 New features - remove orphaned packages such as dependencies of explicitly installed packages (@adriendelsalle) #1040 - add a diff character before package name in transaction table to improve readability without coloration (@adriendelsalle) #1040 - add capability to freeze installed packages during `install` operation using `--freeze-installed` flag (@adriendelsalle) #1048 - Hide tokens and basic http auth secrets in log messages (#1061) - Parse and use explicit platform specifications (thanks @afranchuk) (#1033) - add pretty print to repoquery search (thanks @madhur-tandon) (#1018) - add docs for package resolution Bug fixes: - Fix small output issues (#1060) - More descriptive incorrect download error (thanks @AntoinePrv) #1066 - respect channel specific pins when updating (#1045) - keep track features in PackageInfo class (#1046) ## 0.14.1 (June 25, 2021) New features - [micromamba] add remove command, to remove keys of vectors (@marimeireles) #1011 Bug fixes - [micromamba] fixed in config prepend and append sequence (@adriendelsalle) #1023 - fix bug when username has @ (@madhur-tandon) #1025 - fix wrong update spec in history (@madhur-tandon) #1028 - [mamba] silent pinned packages using JSON output (@adriendelsalle) #1031 ## 0.14.0 (June 16, 2021) New features - [micromamba] add `config set`, `get`, `append` and `prepend`, `remove` (@marimeireles) #838 - automatically include `pip` in conda dependencies when having pip packages to install (@madhur-tandon) #973 - add experimental support for artifacts verification (@adriendelsalle) #954,#955,#956,#963,#965,#970,#972,#978 - [micromamba] shell init will try attempt to enable long paths support on Windows (@wolfv) #975 - [micromamba] if `menuinst` json files are present, micromamba will create shortcuts in the start menu on Windows (@wolfv) #975 - Improve python auto-pinning and add --no-py-pin flag to micromamba (@adriendelsalle) #1010 - [micromamba] Fix constructor invalid repodata_record (@adriendelsalle) #1007 - Refactor log levels for linking steps (@adriendelsalle) #1009 - [micromamba] Use a proper requirements.txt file for pip installations #1008 Bug fixes - fix double-print int transaction (@JohanMabille) #952 - fix strip function (@wolfv) #974 - [micromamba] expand home directory in `--rc-file` (@adriendelsalle) #979 - [micromamba] add yes and no as additional ways of answering a prompt (@ibebrett) #989 - fix long paths support on Windows (@adriendelsalle) #994 General improvement - remove duplicate snippet (@madhur-tandon) #957 - add `trace` log level (@adriendelsalle) #988 Docs - concepts, user guide, configuration, update installation and build locally (@adriendelsalle) #953 - advance usage section, linking (@adriendelsalle) #998 - repo, channel, subdir, repodata, tarball (@adriendelsalle) #1004 - artifacts verification (@adriendelsalle) #1000 ## 0.13.1 (May 17, 2021) Bug fixes - [micromamba] pin only minor python version #948 - [micromamba] use openssl certs when not linking statically #949 ## 0.13.0 (May 12, 2021) New features - [mamba & micromamba] aggregated progress bar for package downloading and extraction (thanks @JohanMabille) #928 Bug fixes - [micromamba] fixes for micromamba usage in constructor #935 - [micromamba] fixes for the usage of lock files #936 - [micromamba] switched from libsodium to openssl for ed25519 signature verification #933 Docs - Mention mambaforge in the README (thanks @s-pike) #932 ## 0.12.3 (May 10, 2021) New features - [libmamba] add free-function to use an existing conda root prefix (@adriendelsalle) #927 General improvements - [micromamba] fix a typo in documentation (@cjber) #926 ## 0.12.2 (May 03, 2021) New features - [micromamba] add initial framework for TUF validation (@adriendelsalle) #916 #919 - [micromamba] add channels from specs to download (@wolfv) #918 ## 0.12.1 (Apr 30, 2021) New features - [micromamba] env list subcommand (@wolfv) #913 Bug fixes - [micromamba] fix multiple shell init with cmd.exe (@adriendelsalle) #915 - [micromamba] fix activate with --stack option (@wolfv) #914 - [libmamba] only try loading ssl certificates when needed (@adriendelsalle) #910 - [micromamba] remove target_prefix checks when activating (@adriendelsalle) #909 - [micromamba] allow 'ultra-dry' config checks in final build (@adriendelsalle) #912 ## 0.12.0 (Apr 26, 2021) New features - [libmamba] add experimental shell autocompletion (@wolfv) #900 - [libmamba] add token handling (@wolfv) #886 - [libmamba] add experimental pip support in spec files (@wolfv) #885 Bug fixes - [libmamba] ignore failing pyc compilation for noarch packages (@wolfv) #904 #905 - [libmamba] fix string wrapping in error message (@bdice) #902 - [libmamba] fix cache error during remove operation (@adriendelsalle) #901 - [libmamba] add constraint with pinning during update operation (@wolfv) #892 - [libmamba] fix shell activate prefix check (@ashwinvis) #889 - [libmamba] make prefix mandatory for shell init (@adriendelsalle) #896 - [mamba] fix `env update` command (@ScottWales) #891 General improvements - [libmamba] use lockfile, fix channel not loaded logic (@wolfv) #903 - [libmamba] make root_prefix warnings more selective (@adriendelsalle) #899 - [libmamba] house-keeping in python tests (@adriendelsalle) #898 - [libmamba] modify mamba/micromamba specific guards (@adriendelsalle) #895 - [libmamba] add simple lockfile mechanism (@wolfv) #894 - [libmamba] deactivate ca-certificates search when using offline mode (@adriendelsalle) #893 ## 0.11.3 (Apr 21, 2021) - [libmamba] make platform rc configurable #883 - [libmamba] expand user home in target and root prefixes #882 - [libmamba] avoid memory effect between operations on target_prefix #881 - [libmamba] fix unnecessary throwing target_prefix check in `clean` operation #880 - [micromamba] fix `clean` flags handling #880 - [libmamba] C-API teardown on error #879 ## 0.11.2 (Apr 21, 2021) - [libmamba] create "base" env only for install operation #875 - [libmamba] remove confirmation prompt of root_prefix in shell init #874 - [libmamba] improve overrides between target_prefix and env_name #873 - [micromamba] fix use of `-p,--prefix` and spec file env name #873 ## 0.11.1 (Apr 20, 2021) - [libmamba] fix channel_priority computation #872 ## 0.11.0 (Apr 20, 2021) - [libmamba] add experimental mode that unlock edge features #858 - [micromamba] add `--experimental` umamba flag to enable experimental mode #858 - [libmamba] improve base env creation #860 - [libmamba] fix computation of weakly canonical target prefix #859 - update libsolv dependency in env-dev.yml file, update documentation (thanks @Aratz) #843 - [libmamba] handle package cache in secondary locations, fix symlink errors (thanks wenjuno) #856 - [libmamba] fix CI cURL SSL error on macos with Darwin backend (thanks @wolfv) #865 - [libmamba] improve error handling in C-API by catching and returning an error code #862 - [libmamba] handle configuration lifetime (single operation configs) #863 - [libmamba] enable ultra-dry C++ tests #868 - [libmamba] migrate `config` operation implem from `micromamba` to `libmamba` API #866 - [libmamba] add capapbility to set CLI config from C-API #867 ## 0.10.0 (Apr 16, 2021) - [micromamba] allow creation of empty env (without specs) #824 #827 - [micromamba] automatically create empty `base` env at new root prefix #836 - [micromamba] add remove all CLI flags `-a,--all` #824 - [micromamba] add dry-run and ultra-dry-run tests to increase coverage and speed-up CI #813 #845 - [micromamba] allow CLI to override spec file env name (create, install and update) #816 - [libmamba] split low-level and high-level API #821 #824 - [libmamba] add a C high-level API #826 - [micromamba] support `__linux` virtual package #829 - [micromamba] improve the display of solver problems #822 - [micromamba] improve info sub-command with target prefix status (active, not found, etc.) #825 - [mamba] Change pybind11 to a build dependency (thanks @maresb) #846 - [micromamba] add shell detection for shell sub-command #839 - [micromamba] expand user in shell prefix sub-command #831 - [micromamba] refactor explicit specs install #824 - [libmamba] improve configuration (refactor API, create a loading sequence) #840 - [libmamba] support cpp-filesystem breaking changes on Windows fs #849 - [libmamba] add a simple context debugging (thanks @wolf) #820 - [libmamba] improve C++ test suite #830 - fix CI C++ tests (unix/libmamba) and Python tests (win/mamba) wrongly successful #853 ## 0.9.2 (Apr 1, 2021) - [micromamba] fix unc url support (thanks @adamant) - [micromamba] add --channel-alias as cli option to micromamba (thanks @adriendelsalle) - [micromamba] fix --no-rc and environment yaml files (thanks @adriendelsalle) - [micromamba] handle spec files in update and install subcommands (thanks @adriendelsalle) - add simple context debugging, dry run tests and other test framework improvements ## 0.9.1 (Mar 26, 2021) - [micromamba] fix remove command target_prefix selection - [micromamba] improve target_prefix fallback for CLI, add tests (thanks @adriendelsalle) ## 0.9.0 (Mar 25, 2021) - [micromamba] use strict channels priority by default - [micromamba] change config precedence order: API>CLI>ENV>RC - [micromamba] `config list` sub command optional display of sources, defaults, short/long descriptions and groups - [micromamba] prevent crashes when no bashrc or zshrc file found (thanks @wolfv) - add support for UNC file:// urls (thanks @adamant) - add support for use_only_tar_bz2 (thanks @tl-hbk @wolfv) - add pinned specs for env update (thanks @wolfv) - properly adhere to run_constrains (thanks @wolfv) ## 0.8.2 (Mar 12, 2021) - [micromamba] fix setting network options before explicit spec installation - [micromamba] fix python based tests for windows ## 0.8.1 (Mar 11, 2021) - use stoull (instead of stoi) to prevent overflow with long package build numbers (thanks @pbauwens-kbc) - [micromamba] fixing OS X certificate search path - [micromamba] refactor default root prefix, make it configurable from CLI (thanks @adriendelsalle) - [micromamba] set ssl backend, use native SSL if possible (thanks @adriendelsalle) - [micromamba] sort json transaction, and add UNLINK field - [micromamba] left align log messages - [micromamba] libsolv log messages to stderr (thanks @mariusvniekerk) - [micromamba] better curl error messages ## 0.8.0 (Mar 5, 2021) - [micromamba] condarc and mambarc config file reading (and config subcommand) (thanks @adriendelsalle) - [micromamba] support for virtual packages (thanks @adriendelsalle) - [micromamba] set ssl backend, use native SSL if possible - [micromamba] add python based testing framework for CLI - [micromamba] refactor CLI and micromamba main file (thanks @adriendelsalle) - [micromamba] add linking options (--always-copy etc.) (thanks @adriendelsalle) - [micromamba] fix multiple prefix replacements in binary files - [micromamba] fix micromamba clean (thanks @phue) - [micromamba] change package validation settings to --safety-checks and --extra-safety-checks - [micromamba] add update subcommand (thanks @adriendelsalle) - [micromamba] support pinning packages (including python minor version) (thanks @adriendelsalle) - [micromamba] add try/catch to WinReg getStringValue (thanks @SvenAdler) - [micromamba] add ssl-no-revoke option for more conda-compatibility (thanks @tl-hbk) - [micromamba] die when no ssl certificates are found (thanks @wholtz) - [docs] add explanation for base env install (thanks @ralexx) and rename changelog to .md (thanks @kevinheavey) - [micromamba] compare cleaned URLs for cache invalidation - [micromamba] add regex handling to list command ## 0.7.14 (Feb 12, 2021) - [micromamba] better validation of extracted directories - [mamba] add additional tests for authentication and simple repodata server - make LOG_WARN the default log level, and move some logs to INFO - [micromamba] properly replace long shebangs when linking - [micromamba] add quote for shell for prefixes with spaces - [micromamba] add clean functionality - [micromamba] always make target prefix path absolute ## 0.7.13 (Feb 4, 2021) - [micromamba] Immediately exit after printing version (again) ## 0.7.12 (Feb 3, 2021) - [micromamba] Improve CTRL+C signal handling behavior and simplify code - [micromamba] Revert extraction to temporary directory because of invalid cross-device links on Linux - [micromamba] Clean up partially extracted archives when CTRL+C interruption occurred ## 0.7.11 (Feb 2, 2021) - [micromamba] use wrapped call when compiling noarch Python code, which properly calls chcp for Windows - [micromamba] improve checking the pkgs cache - [mamba] fix authenticated URLs (thanks @wenjuno) - first extract to temporary directory, then move to final pkgs cache to prevent corrupted extracted data ## 0.7.10 (Jan 22, 2021) - [micromamba] properly fix PATH when linking, prevents missing vcruntime140.dll - [mamba] add virtual packages when creating any environment, not just on update (thanks @cbalioglu) ## 0.7.9 (Jan 19, 2021) - [micromamba] fix PATH when linking ## 0.7.8 (Jan 14, 2021) - [micromamba] retry on corrupted repodata - [mamba & micromamba] fix error handling when writing repodata ## 0.7.6 (Dec 22, 2020) - [micromamba] more console flushing for std::cout consumers ## 0.7.6 (Dec 14, 2020) - [mamba] more arguments for repodata.create_pool ## 0.7.5 (Dec 10, 2020) - [micromamba] better error handling for YAML file reading, allows to pass in `-n` and `-p` from command line - [mamba & micromamba] ignore case of HTTP headers - [mamba] fix channel keys are without tokens (thanks @s22chan) ## 0.7.4 (Dec 5, 2020) - [micromamba] fix noarch installation for explicit environments ## 0.7.3 (Nov 20, 2020) - [micromamba] fix installation of noarch files with long prefixes - [micromamba] fix activation on windows with whitespaces in root prefix (thanks @adriendelsalle) - [micromamba] add `--json` output to micromamba list ## 0.7.2 (Nov 18, 2020) - [micromamba] explicit specs installing should be better now - empty lines are ignored - network settings are correctly set to make ssl verification work - New Python repoquery API for mamba - Fix symlink packing for mamba package creation and transmute - Do not keep tempfiles around ## 0.7.1 (Nov 16, 2020) - Handle LIBARCHIVE_WARN to not error, instead print warning (thanks @obilaniu) ## 0.7.0 (Nov 12, 2020) - Improve activation and deactivation logic for micromamba - Switching `subprocess` implementation to more tested `reproc++` - Fixing Windows noarch entrypoints generation with micromamba - Fix pre-/post-link script running with micromamba to use micromamba activation logic - Empty environment creation skips all repodata downloading & solving - Fix micromamba install when environment is activated (thanks @isuruf) - Micromamba now respects the $CONDA_SUBDIR environment variable (thanks @mariusvniekerk) - Fix compile time warning (thanks @obilaniu) - Fixed wrong CondaValueError import statement in mamba.py (thanks @saraedum) ## 0.6.5 (Oct 2020) - Fix code signing for Apple Silicon (osx-arm64) @isuruf ================================================ FILE: CITATION.cff ================================================ cff-version: 1.2.0 message: "If you use this software, please cite it as below." type: "software" title: "mamba" date-released: "2019-03" authors: - family-names: "QuantStack and Mamba Contributors" given-names: "" website: "https://github.com/mamba-org/mamba" repository-code: "https://github.com/mamba-org/mamba" url: "https://mamba.readthedocs.io/" abstract: "Mamba is a fast, robust, and cross-platform package manager for the Conda ecosystem." license: "BSD-3-Clause" keywords: - "package manager" - "conda" - "python" - "dependency resolution" - "cross-platform" ================================================ FILE: CMakeLists.txt ================================================ # Copyright (c) 2019, QuantStack and Mamba Contributors # # Distributed under the terms of the BSD 3-Clause License. # # The full license is in the file LICENSE, distributed with this software. cmake_minimum_required(VERSION 3.16) project(mamba) # Build options # ============= option(BUILD_SHARED "Build shared libmamba library" OFF) option(BUILD_STATIC "Build static libmamba library with static linkage to its dependencies" OFF) option(BUILD_LIBMAMBA "Build libmamba library" OFF) option(BUILD_LIBMAMBA_SPDLOG "Build libmamba-spdlog library" OFF) option(BUILD_LIBMAMBA_SPDLOG_TESTS "Build libmamba-spdlog library tests" OFF) option(BUILD_LIBMAMBAPY "Build libmamba Python bindings" OFF) option(BUILD_LIBMAMBA_TESTS "Build libmamba C++ tests" OFF) option(BUILD_MAMBA "Build mamba" OFF) option(BUILD_MICROMAMBA "Build micromamba" OFF) option(BUILD_MAMBA_PACKAGE "Build mamba package utility" OFF) option(MAMBA_WARNING_AS_ERROR "Treat compiler warnings as errors" OFF) set( MAMBA_LTO "Default" CACHE STRING "Apply Link Time Optimization to targets" ) include("cmake/CompilerWarnings.cmake") include("cmake/LinkTimeOptimization.cmake") include("cmake/Checks.cmake") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules") if(MSVC) # NOMINMAX : prevent tons of code to be included when having to `#include ` /EHsc : # enable C++ exceptions (otherwise exceptions do not work) /Zc:__cplusplus : makes sure # `__cplusplus` is set to the current C++ version language. Otherwise it is always set to an # incorrect wrong value. /MP : enable multi-process build with MSBuild (it should be on by # default but CMake generates the project files without the right params). /external:I # $ENV{CONDA_PREFIX}: consider the conda env prefix libraries headers as "external" to this # project. set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D_CRT_SECURE_NO_WARNINGS /DNOMINMAX /EHsc /Zc:__cplusplus /utf-8 /MP /experimental:external /external:I $ENV{CONDA_PREFIX}" ) # Force release mode to avoid debug libraries to be linked set( CMAKE_BUILD_TYPE "Release" CACHE STRING "The build type" ) # add_definitions("-DUNICODE -D_UNICODE") set( CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL" CACHE STRING "MSVC runtime library" ) endif() # Variants # ======== # mamba is a dynamic build of micromamba if(BUILD_MAMBA) set(BUILD_SHARED ON) endif() # micromamba requires static linkage if(BUILD_MICROMAMBA) set(BUILD_STATIC ON) endif() # libmamba library and tests if(BUILD_LIBMAMBA) add_subdirectory(libmamba) endif() # libmamba-spdlog library and tests (if enabled) if(BUILD_LIBMAMBA_SPDLOG) add_subdirectory(libmamba-spdlog) endif() # Python bindings of libmamba if(BUILD_LIBMAMBAPY) add_subdirectory(libmambapy) endif() # micromamba if(BUILD_MICROMAMBA OR BUILD_MAMBA) add_subdirectory(micromamba) endif() # mamba package tarball utility if(BUILD_MAMBA_PACKAGE) add_subdirectory(mamba_package) endif() ================================================ FILE: CMakePresets.json ================================================ { "configurePresets": [ { "displayName": "Mamba Unix Shared Debug", "inherits": ["conda-unix", "libmamba-all", "mamba-shared", "mamba-debug"], "name": "mamba-unix-shared-debug" }, { "displayName": "Mamba Unix Shared Release", "inherits": [ "conda-unix", "libmamba-all", "mamba-shared", "mamba-release" ], "name": "mamba-unix-shared-release" }, { "displayName": "Mamba Unix Shared Debug Dev", "inherits": ["mamba-unix-shared-debug", "mamba-dev"], "name": "mamba-unix-shared-debug-dev" }, { "displayName": "Mamba Win Shared Release", "inherits": ["libmamba-all", "mamba-shared", "mamba-release"], "name": "mamba-win-shared-release" } ], "include": ["dev/CMakePresetsUnix.json", "dev/CMakePresetsMamba.json"], "version": 4 } ================================================ FILE: CONTRIBUTING.rst ================================================ ============== Contributing ============== The mamba repository is hosted at https://github.com/mamba-org/mamba. The general developer documentation is hosted at https://mamba.readthedocs.io/en/latest/developer_zone/contributing.html. See also https://mamba.readthedocs.io/en/latest/developer_zone/dev_environment.html for setting up a development environment. When contributing to this repository, it is always a good idea to first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change. We welcome all kinds of contribution -- code or non-code -- and value them highly. We pledge to treat everyones contribution fairly and with respect and we are here to help awesome pull requests over the finish line. Please note we have a code of conduct, and follow it in all your interactions with the project. We follow the `NumFOCUS code of conduct `_. ================================================ FILE: LICENSE ================================================ Copyright 2019 QuantStack and the Mamba contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================ FILE: README.md ================================================ # Mamba: The Fast Cross-Platform Package Manager ![mamba header image](docs/assets/mamba_header.png)
part of mamba-org
Package Manager mamba Package Server quetz
## mamba [![Build Status](https://github.com/mamba-org/mamba/actions/workflows/tests.yml/badge.svg)](https://github.com/mamba-org/mamba/actions/workflows/tests.yml?query=branch%3Amain) [![Join the Gitter Chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mamba-org/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![docs](https://readthedocs.org/projects/mamba/badge/?version=latest&style=flat)](https://mamba.readthedocs.io/en/latest) [![Gurubase](https://img.shields.io/badge/Gurubase-Ask%20mamba%20Guru-006BFF)](https://gurubase.io/g/mamba) `mamba` is a reimplementation of the conda package manager in C++. - parallel downloading of repository data and package files using multi-threading - libsolv for much faster dependency solving, a state of the art library used in the RPM package manager of Red Hat, Fedora and OpenSUSE - core parts of `mamba` are implemented in C++ for maximum efficiency At the same time, `mamba` utilizes the same command line parser, package installation and deinstallation code and transaction verification routines as `conda` to stay as compatible as possible. `mamba` is part of the [conda-forge](https://conda-forge.org/) ecosystem, which also consists of `quetz`, an open source `conda` package server. You can read our [announcement blog post](https://medium.com/@QuantStack/open-software-packaging-for-science-61cecee7fc23). ## micromamba `micromamba` is the statically linked version of `mamba`. It can be installed as a standalone executable without any dependencies, making it a perfect fit for CI/CD pipelines and containerized environments. See the [documentation on `micromamba`](https://mamba.readthedocs.io/en/latest/user_guide/micromamba.html) for details. ## `mamba` v.s. `micromamba` `mamba` has to be preferred when: - `libmambapy` or `libmamba` is used by other software in the same environment. - Scenarios where regular updates to libraries are required (especially for security). - Environments are focused on reducing disk space usage for dependencies. `micromamba` has to be preferred when: - Relying a single self-contained executable is required. - A miniforge distribution is not present. - Usage requires minimal runtime. ## Installation Please refer to the [mamba](https://mamba.readthedocs.io/en/latest/installation/mamba-installation.html) and [micromamba](https://mamba.readthedocs.io/en/latest/installation/micromamba-installation.html) installation guide in the documentation. ## Additional features in Mamba and Micromamba `mamba` and `micromamba` come with features on top of stock `conda`. ### `repoquery` To efficiently query repositories and query package dependencies you can use `mamba repoquery` or `micromamba repoquery`. See the [repoquery documentation](https://mamba.readthedocs.io/en/latest/user_guide/mamba.html#repoquery) for details. ### Installing lock files `micromamba` can be used to install lock files generated by [conda-lock](https://conda.github.io/conda-lock/) without having to install `conda-lock`. Simply invoke `micromamba create` with the `-f` option, providing an environment lockfile whose name ends with `-lock.yml` or `-lock.yaml`; for instance: ```bash micromamba create -n my-env -f conda-lock.yml ``` ### setup-micromamba (setup-miniconda replacement) [setup-micromamba](https://github.com/marketplace/actions/setup-micromamba) is a replacement for [setup-miniconda](https://github.com/marketplace/actions/setup-miniconda) that uses `micromamba`. It can significantly reduce your CI setup time by: - Using `micromamba`, which takes around 1 s to install. - Caching package downloads. - Caching entire `conda` environments. ## Differences with `conda` While `mamba` and `micromamba` are generally a drop-in replacement for `conda` there are some differences: - `mamba` and `micromamba` normalize `MatchSpec` strings to the simplest form, whereas `conda` use a more verbose form This can lead to slight differences in the output of `conda env export` and `mamba env export`. ## Development installation Please refer to the instructions given by the [official documentation](https://mamba.readthedocs.io/en/latest/developer_zone/dev_environment.html). ## API and ABI stability The Mamba project uses [semantic versioning](https://semver.org/) of the form `MAJOR.MINOR.PATCH`. While we try to keep things stable for users, we also need to make breaking changes to improve Mamba and reduce technical debt. Future versions of Mamba may give stronger guarantees. ### `libmamba` (C++) We are not aware of consumers of the C++ API, so we give ourselves room for improvements. For `libmamba`, the term _backward compatible_ is understood as follows: - _ABI backward compatible_ means that you can replace the library binary files without recompiling your code with the updated headers. The observed behavior will be the same, except for bugs (disappearing, hopefully) and performance. - _API backward compatible_ means that you must recompile your code with the new library version code, but you won't need to change your code, just re-build it. This applies as long as you did not use any declaration understood to be private, for instance in the `detail` sub-namespaces. The observed behavior will be the same, except for bugs (disappearing, hopefully) and performance. When declarations are deprecated but not removed and still functional, we consider it also backward compatible, as only the observed behavior during compilation changes. With this in mind, `libmamba` offers the following guarantees: - `PATCH` releases are API and ABI backward compatible; - `MINOR` releases are API compatible for declarations in `mamba/api`, They can break API elsewhere and ABI anywhere; - `MAJOR` releases make no guarantees. ### `libmambapy` (Python) For `libmambapy`, the term _API backward compatible_ implies that your Python code will work the same for a newer version of `libmambapy` as long as you did not use any declaration understood to be private, for instance accessed with a name starting with an `_`. The observed behavior will be the same, except for bugs (disappearing, hopefully) and performance. When declarations are deprecated but not removed and still functional, we consider it also backward compatible, as the behavior is only observable when activating Python `DeprecationWarning`, which is usually only activated in development. With this in mind, `libmambapy` offers the following guarantees: - `PATCH` releases are API backward compatible; - `MINOR` releases are API backward compatible; - `MAJOR` releases make no guarantees. ### `mamba` and `micromamba` (executables) For executables, the term _backward compatible_ applies to programmable inputs and outputs and means that your code (including shell scripts) will work with newer versions of the executable without modifications. Programmable inputs/outputs include executable name, command line arguments, configuration files, environment variables, JSON command line outputs, and files created. It _excludes_ human-readable output and error messages, and thus deprecation warnings written in the human-readable output. With this in mind, `mamba` and `micromamba` offer the following guarantees: - `PATCH` releases are backward compatible; - `MINOR` releases are backward compatible; - `MAJOR` releases make no guarantees. ## Support us Only `mamba` and `micromamba` 2.0 and later are supported and are actively developed. The `1.x` branch is only maintained for addressing security issues such as CVEs. For questions, you can also join us on the [Conda Zulip](https://conda.zulipchat.com/#narrow/channel/457607-general) (note that this project is not officially affiliated with `conda` or Anaconda Inc.). ## License We use a shared copyright model that enables all contributors to maintain the copyright on their contributions. This software is licensed under the BSD-3-Clause license. See the [LICENSE](LICENSE) file for details. --- ### Biweekly Dev Meeting We have videoconference meetings every two weeks where we discuss what we have been working on and get feedback from one another. Anyone is welcome to attend, if they would like to discuss a topic or just listen in. - When: Tuesday [4:00 PM CET (Europe)](https://calendar.google.com/calendar/u/0/embed?src=ab3jrfpede0kq0ubsroe82cd00@group.calendar.google.com&ctz=Europe/Paris) - Where: [Mamba jitsi](https://meet.jit.si/mamba-org) - What: [Meeting notes](https://hackmd.io/@guj2k_aBSSyr1YHBG9raWw/HyHt-Ekzj) ================================================ FILE: SECURITY.md ================================================ # Security issues If you find a security issue and want to responsibly disclose it, please contact the following email addresses: Wolf Vollprecht QuantStack Thanks! ================================================ FILE: _typos.toml ================================================ [default.extend-words] # False positives to ignore eit = "eit" pn = "pn" Ome = "Ome" haa = "haa" "fo" = "fo" "ba" = "ba" ================================================ FILE: cmake/Checks.cmake ================================================ # Module to make checks/assertions # Check that the target has the proper type. # # This is useful for targets that can be either static or dynamic but have the same name. function(mamba_target_check_type target expected_type log_level) get_target_property(actual_type ${target} TYPE) if(NOT actual_type STREQUAL expected_type) message( ${log_level} "Expected type \"${expected_type}\" for target \"${target}\"" " but found \"${actual_type}\"" ) endif() endfunction() ================================================ FILE: cmake/CompilerWarnings.cmake ================================================ # Module to set default compiler warnings. # # File adapted from Jason Turner's cpp_starter_project # https://github.com/lefticus/cpp_starter_project/blob/master/cmake/CompilerWarnings.cmake Using # INTERFACE targets is not so desirable as they need to be installed when building static libraries. function(mamba_target_add_compile_warnings target) # Names of option parameters (without arguments) set(options) # Names of named parameters with a single argument set(oneValueArgs WARNING_AS_ERROR) # Names of named parameters with a multiple arguments set(multiValueArgs) cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) # Extra arguments not accounted for if(ARG_UNPARSED_ARGUMENTS) message( AUTHOR_WARNING "Unrecoginzed options passed to ${CMAKE_CURRENT_FUNCTION}: " "${ARG_UNPARSED_ARGUMENTS}" ) endif() set( msvc_warnings # External sever warnings /experimental:external /external:W1 # Baseline reasonable warnings /W4 # "identifier": conversion from "type1" to "type1", possible loss of data /w14242 # "operator": conversion from "type1:field_bits" to "type2:field_bits", possible loss of # data /w14254 # "function": member function does not override any base class virtual member function /w14263 # "classname": class has virtual functions, but destructor is not virtual instances of this # class may not be destructed correctly /w14265 # "operator": unsigned/negative constant mismatch /w14287 # Nonstandard extension used: "variable": loop control variable declared in the for-loop is # used outside the for-loop scope /we4289 # "operator": expression is always "boolean_value" /w14296 # "variable": pointer truncation from "type1" to "type2" /w14311 # Expression before comma evaluates to a function which is missing an argument list /w14545 # Function call before comma missing argument list /w14546 # "operator": operator before comma has no effect; expected operator with side-effect /w14547 # "operator": operator before comma has no effect; did you intend "operator"? /w14549 # Expression has no effect; expected expression with side- effect /w14555 # Pragma warning: there is no warning number "number" /w14619 # Enable warning on thread un-safe static member initialization /w14640 # Conversion from "type1" to "type_2" is sign-extended. This may cause unexpected runtime # behavior. /w14826 # Wide string literal cast to "LPSTR" /w14905 # String literal cast to "LPWSTR" /w14906 # Illegal copy-initialization; more than one user-defined conversion has been implicitly # applied /w14928 ) set( clang_warnings # Some default set of warnings -Wall # Reasonable and standard -Wextra # Warn the user if a variable declaration shadows one from a parent context -Wshadow # Warn the user if a class with virtual functions has a non-virtual destructor. This helps # catch hard to track down memory errors -Wnon-virtual-dtor # Warn for c-style casts -Wold-style-cast # Warn for potential performance problem casts -Wcast-align # Warn on anything being unused -Wunused # Warn if you overload (not override) a virtual function -Woverloaded-virtual # Warn if non-standard C++ is used -Wpedantic # Warn on type conversions that may lose data -Wconversion # Warn on sign conversions -Wsign-conversion # Warn if a null dereference is detected Deactivated because it produced too many false # positive with ranges while we are not doing many pointer operations. -Wnull-dereference # Warn if float is implicit promoted to double -Wdouble-promotion # Warn on security issues around functions that format output (ie printf) -Wformat=2 # Warn on code that cannot be executed -Wunreachable-code # Warn if a variable is used before being initialized -Wuninitialized ) # It seems that these flags are leaked to CXXFLAGS: `-framework CoreFoundation` `-framework # CoreServices` `-framework Security` `-framework Kerberos` `-fno-merge-constants` # # These flags give compiler warnings/errors: `unused-command-line-argument` and # `ignored-optimization-argument` So we disable these warnings/errors for all the files # # This might be happening during `conda-build` and might be a bug in # https://github.com/conda-forge/clang-compiler-activation-feedstock if(APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set( clang_warnings ${clang_warnings} -Wno-unused-command-line-argument -Wno-ignored-optimization-argument ) endif() if(${ARG_WARNING_AS_ERROR}) set(clang_warnings ${clang_warnings} -Werror) set(msvc_warnings ${msvc_warnings} /WX) endif() set( gcc_warnings ${clang_warnings} # Warn if indentation implies blocks where blocks do not exist -Wmisleading-indentation # Warn if if / else chain has duplicated conditions -Wduplicated-cond # Warn if if / else branches have duplicated code -Wduplicated-branches # Warn about logical operations being used where bitwise were probably wanted -Wlogical-op # Warn if you perform a cast to the same type -Wuseless-cast ) if(MSVC) set(warnings ${msvc_warnings}) elseif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") set(warnings ${clang_warnings}) elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set(warnings ${clang_warnings}) else() set(warnings ${gcc_warnings}) endif() get_target_property(type ${target} TYPE) if(NOT ${type} STREQUAL "INTERFACE_LIBRARY") target_compile_options("${target}" PRIVATE ${warnings}) endif() endfunction() ================================================ FILE: cmake/LinkTimeOptimization.cmake ================================================ # Module to set Link Time Optimization flags include(CheckIPOSupported) # Detect is setting Link Time Optimization is recommended. # # Currently checks if LTO is supported and if the build is a release. function(mamba_should_lto) # Names of option parameters (without arguments) set(options) # Names of named parameters with a single argument set(oneValueArgs RESULT OUTPUT) # Names of named parameters with a multiple arguments set(multiValueArgs) cmake_parse_arguments(arg "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) # Extra arguments not accounted for if(arg_UNPARSED_ARGUMENTS) message( AUTHOR_WARNING "Unrecoginzed options passed to ${CMAKE_CURRENT_FUNCTION}: " "${ARG_UNPARSED_ARGUMENTS}" ) endif() # Check if we are building in a release-like build string(TOLOWER "${CMAKE_BUILD_TYPE}" build_type_lower) set(valid_release_names "release" "relwithdebinfo") if(NOT ${build_type_lower} IN_LIST valid_release_names) set( ${arg_RESULT} FALSE PARENT_SCOPE ) set( ${arg_OUTPUT} "the build type is not a release" PARENT_SCOPE ) return() endif() # Check if LTO is supported by compiler check_ipo_supported(RESULT lto_is_supported OUTPUT lto_not_supported_reason) if(NOT lto_is_supported) set( ${arg_RESULT} FALSE PARENT_SCOPE ) set( ${arg_OUTPUT} "${lto_not_supported_reason}" PARENT_SCOPE ) endif() set( ${arg_RESULT} TRUE PARENT_SCOPE ) endfunction() # Set Link Time Optimization on a given target. # # MODE parameter takes the possible values - A false constant: deactivate LTO - A true constant: # activate LTO, fails if this is not supported by the compiler - "Default" or "Auto": set LTO if # supported and the build type is a release. function(mamba_target_set_lto target) # Names of option parameters (without arguments) set(options) # Names of named parameters with a single argument set(oneValueArgs MODE) # Names of named parameters with a multiple arguments set(multiValueArgs) cmake_parse_arguments(arg "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) # Extra arguments not accounted for if(arg_UNPARSED_ARGUMENTS) message( AUTHOR_WARNING "Unrecoginzed parameter passed to ${CMAKE_CURRENT_FUNCTION}: " "'${arg_UNPARSED_ARGUMENTS}'" ) return() endif() mamba_should_lto(RESULT should_lto OUTPUT lto_message) string(TOLOWER ${arg_MODE} arg_MODE_lower) set(valid_default_names "default" "auto" "") if(arg_MODE_lower IN_LIST valid_default_names) set(is_default TRUE) endif() if("${arg_MODE}" OR (is_default AND should_lto)) message(STATUS "Setting LTO for target ${PROJECT_NAME}::${target}") set_property(TARGET ${arg_TARGET} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE) else() if(is_default) message(STATUS "Skipping LTO for target ${PROJECT_NAME}::${target}, ${lto_message}") else() message(STATUS "Skipping LTO for target ${PROJECT_NAME}::${target}") endif() endif() endfunction() ================================================ FILE: cmake/modules/FindLibsolv.cmake ================================================ find_package(PkgConfig) pkg_check_modules(PC_Libsolv QUIET libsolv) find_path( Libsolv_INCLUDE_DIR NAMES solv/pool.h solvversion.h PATHS ${PC_Libsolv_INCLUDE_DIRS} ) find_path( Libsolvext_INCLUDE_DIR NAMES solv/repo_conda.h repo_conda.h PATHS ${PC_Libsolv_INCLUDE_DIRS} ) find_library( Libsolv_LIBRARY NAMES libsolv.so libsolv.dylib solv.lib PATHS ${PC_Libsolv_LIBRARY_DIRS} ) find_library( Libsolv_static_LIBRARY NAMES libsolv.a solv_static PATHS ${PC_Libsolv_LIBRARY_DIRS} ) find_library( Libsolvext_LIBRARY NAMES libsolvext.so libsolvext.dylib solvext.lib PATHS ${PC_Libsolv_LIBRARY_DIRS} ) find_library( Libsolvext_static_LIBRARY NAMES libsolvext.a solvext_static PATHS ${PC_Libsolv_LIBRARY_DIRS} ) set(Libsolv_VERSION ${PC_Libsolv_VERSION}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args( Libsolv FOUND_VAR Libsolv_FOUND REQUIRED_VARS Libsolv_INCLUDE_DIR VERSION_VAR Libsolv_VERSION ) if(Libsolv_FOUND) if(NOT TARGET solv::libsolv_static AND Libsolv_static_LIBRARY) add_library(solv::libsolv_static STATIC IMPORTED) set_target_properties( solv::libsolv_static PROPERTIES IMPORTED_LOCATION "${Libsolv_static_LIBRARY}" INTERFACE_COMPILE_OPTIONS "${PC_Libsolv_CFLAGS_OTHER}" INTERFACE_INCLUDE_DIRECTORIES "${Libsolv_INCLUDE_DIR}" ) endif() if(NOT TARGET solv::libsolv AND Libsolv_LIBRARY) if(UNIX) add_library(solv::libsolv SHARED IMPORTED) else() add_library(solv::libsolv UNKNOWN IMPORTED) endif() set_target_properties( solv::libsolv PROPERTIES IMPORTED_LOCATION "${Libsolv_LIBRARY}" INTERFACE_COMPILE_OPTIONS "${PC_Libsolv_CFLAGS_OTHER}" INTERFACE_INCLUDE_DIRECTORIES "${Libsolv_INCLUDE_DIR}" ) endif() if(NOT TARGET solv::libsolvext_static AND Libsolvext_static_LIBRARY) add_library(solv::libsolvext_static STATIC IMPORTED) set_target_properties( solv::libsolvext_static PROPERTIES IMPORTED_LOCATION "${Libsolvext_static_LIBRARY}" INTERFACE_COMPILE_OPTIONS "${PC_Libsolv_CFLAGS_OTHER}" INTERFACE_INCLUDE_DIRECTORIES "${Libsolvext_INCLUDE_DIR}" ) endif() if(NOT TARGET solv::libsolvext AND Libsolvext_LIBRARY) if(UNIX) add_library(solv::libsolvext SHARED IMPORTED) else() add_library(solv::libsolvext UNKNOWN IMPORTED) endif() set_target_properties( solv::libsolvext PROPERTIES IMPORTED_LOCATION "${Libsolvext_LIBRARY}" INTERFACE_COMPILE_OPTIONS "${PC_Libsolv_CFLAGS_OTHER}" INTERFACE_INCLUDE_DIRECTORIES "${Libsolvext_INCLUDE_DIR}" ) endif() endif() ================================================ FILE: codecov.yml ================================================ github_checks: annotations: false ignore: - "libmamba/tests" ================================================ FILE: dev/CMakePresetsMamba.json ================================================ { "configurePresets": [ { "cacheVariables": { "BUILD_LIBMAMBA": "ON", "BUILD_LIBMAMBAPY": "ON", "BUILD_LIBMAMBA_TESTS": "ON", "BUILD_LIBMAMBA_SPDLOG": "ON", "BUILD_LIBMAMBA_SPDLOG_TESTS": "ON", "BUILD_MAMBA_PACKAGE": "ON" }, "description": "Base profile for building libmamba and related", "displayName": "libmamba All", "hidden": true, "name": "libmamba-all" }, { "cacheVariables": { "BUILD_MAMBA": "ON", "BUILD_SHARED": "ON" }, "hidden": true, "name": "mamba-shared" }, { "cacheVariables": { "BUILD_MICROMAMBA": "ON", "BUILD_STATIC": "ON", "ENABLE_WIN32_XMLLITE": "ON" }, "hidden": true, "name": "mamba-static" }, { "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" }, "hidden": true, "name": "mamba-debug" }, { "cacheVariables": { "CMAKE_BUILD_TYPE": "Release" }, "hidden": true, "name": "mamba-release" }, { "cacheVariables": { "CMAKE_COLOR_DIAGNOSTICS": "ON", "CMAKE_COLOR_MAKEFILE": "ON", "CMAKE_CXX_COMPILER_LAUNCHER": "ccache", "CMAKE_CXX_EXTENSIONS": "OFF", "CMAKE_CXX_STANDARD": "20", "CMAKE_CXX_STANDARD_REQUIRED": "ON", "CMAKE_C_COMPILER_LAUNCHER": "ccache", "CMAKE_EXPORT_COMPILE_COMMANDS": "ON" }, "description": "Extra convenience flags used when developing", "displayName": "Mamba Dev", "hidden": true, "name": "mamba-dev", "warnings": { "dev": true, "unusedCli": true } } ], "version": 4 } ================================================ FILE: dev/CMakePresetsUnix.json ================================================ { "configurePresets": [ { "binaryDir": "${sourceDir}/build/${presetName}", "cacheVariables": { "CMAKE_AR": "$env{AR}", "CMAKE_CXX_COMPILER": "$env{CXX}", "CMAKE_CXX_FLAGS_DEBUG": "$env{DEBUG_CXXFLAGS}", "CMAKE_CXX_FLAGS_RELEASE": "$env{CXXFLAGS}", "CMAKE_C_COMPILER": "$env{CC}", "CMAKE_C_FLAGS_DEBUG": "$env{DEBUG_CFLAGS}", "CMAKE_C_FLAGS_RELEASE": "$env{CFLAGS}", "CMAKE_EXE_LINKER_FLAGS": "$env{LDFLAGS}", "CMAKE_Fortran_COMPILER": "$env{FC}", "CMAKE_Fortran_FLAGS_DEBUG": "$env{DEBUG_FORTRANFLAGS}", "CMAKE_Fortran_FLAGS_RELEASE": "$env{FORTRANFLAGS}", "CMAKE_INSTALL_LIBDIR": "lib", "CMAKE_INSTALL_PREFIX": "$env{CONDA_PREFIX}", "CMAKE_LINKER": "$env{LD}", "CMAKE_PREFIX_PATH": "$env{CONDA_PREFIX}", "CMAKE_RANLIB": "$env{RANLIB}" }, "description": "Base profile using conda libraries and compilers on Unix", "displayName": "Conda Unix", "hidden": true, "name": "conda-unix" }, { "cacheVariables": { "CMAKE_AR": "$env{GCC_AR}", "CMAKE_CXX_COMPILER": "$env{GXX}", "CMAKE_C_COMPILER": "$env{GCC}", "CMAKE_Fortran_COMPILER": "$env{GFORTRAN}", "CMAKE_LINKER": "$env{LD_GOLD}", "CMAKE_RANLIB": "$env{GCC_RANLIB}" }, "description": "Base profile using conda libraries and GNU compilers", "displayName": "Conda GNU", "hidden": true, "inherits": ["conda-unix"], "name": "conda-gnu" }, { "cacheVariables": { "CMAKE_CXX_COMPILER": "clang++", "CMAKE_C_COMPILER": "clang", "CMAKE_Fortran_COMPILER": "lfortran", "CMAKE_LINKER": "lld" }, "description": "Base profile using conda libraries and LLVM compilers", "displayName": "Conda Clang", "hidden": true, "inherits": ["conda-unix"], "name": "conda-llvm" } ], "version": 4 } ================================================ FILE: dev/environment-dev-extra.yml ================================================ channels: - conda-forge dependencies: # Compiler cache - ccache # C++ LSP tools and related packages - clang-tools - clang - clangxx - lld - cmake-format # C++ Debugging - sel(linux): gdb - sel(osx): lldb - sel(linux): valgrind # Out of date on MacOS # Python LSP support - ruff - python-lsp-server-base - ruff-lsp # Interactive Python tools - jupyterlab - ipython # Python Debugging - ipdb # Github CLI tool - gh ================================================ FILE: dev/environment-dev.yml ================================================ channels: - conda-forge dependencies: # libmamba build dependencies # Workaround `mamba-org/mamba#4043` # TODO: Understand the linkage issue with GCC 14 - sel(linux): cxx-compiler <1.11 # GCC 13 - sel(linux): sysroot_linux-64==2.17 - sel(osx): cxx-compiler - sel(win): cxx-compiler - cmake >=3.16 - pkg-config # Used by some CMake dependencies - ninja - make # not always present # libmamba dependencies - cpp-expected - fmt >=12.0.0 # As of libarchive 3.8, builds of libarchive for different licenses # are available. We use the LGPL version here. - libarchive>=3.8 lgpl_* - libcurl >=7.86 - libsodium - libsolv >=0.7.18 - libmsgpack-c - nlohmann_json - reproc-cpp >=14.2.4.post0 - simdjson >=3.3.0 - spdlog >=1.16.0 - yaml-cpp >=0.8.0 - sel(win): winreg # libmamba test dependencies - catch2 # micromamba dependencies - cli11 >=2.2 # micromamba test dependencies - python - mitmproxy - bcrypt==4.0.1 # An indirect dependency pin due to failures on MacOS - pytest >=7.3.0 - pytest-asyncio - pytest-timeout - pytest-xprocess - pytest-rerunfailures - pytest-cov - memory_profiler - requests - sel(win): pywin32 - sel(win): menuinst - conda-content-trust - conda-package-handling - cryptography - securesystemslib # libmambapy build dependencies - scikit-build-core # libmambapy dependencies - python - pybind11>=3.0.0 # libmambapy-stubs build dependencies - mypy # For stubgen - setuptools - python-build # dev dependencies - pre-commit # Documentation dependencies - doxygen - breathe - sphinx - sphinx-book-theme - myst-parser - sphinx-copybutton ================================================ FILE: dev/environment-micromamba-static.yml ================================================ channels: - conda-forge dependencies: - python >=3.12 # libmamba build dependencies # Workaround `mamba-org/mamba#4043` # TODO: Understand the linkage issue with GCC 14 - sel(linux): cxx-compiler <1.11 # GCC 13 - sel(linux): sysroot_linux-64==2.17 - sel(osx): cxx-compiler - sel(win): cxx-compiler - cmake >=3.16 - pkg-config # Used by some CMake dependencies - ninja # libmamba dependencies - cpp-expected - nlohmann_json - simdjson-static >=3.3.0 - spdlog - fmt >=11.1.0 - libsolv-static >=0.7.24 - yaml-cpp-static >=0.8.0 - reproc-static >=14.2.4.post0 - reproc-cpp-static >=14.2.4.post0 - libcurl >=8.4.0 - libcurl-static >=8.4.0 - libmsgpack-c-static - xz-static - libssh2-static # As of libarchive 3.8, builds of libarchive for different licenses # are available. We use the LGPL version here. - libarchive-minimal-static>=3.8 lgpl_* - krb5-static - openssl - libopenssl-static - zstd-static - zlib - libnghttp2-static - lz4-c-static # libmamba test dependencies - catch2 # micromamba dependencies - cli11 >=2.2,<3 ================================================ FILE: docs/Doxyfile ================================================ PROJECT_NAME = "libmamba" INPUT = "../libmamba/include" CASE_SENSE_NAMES = NO EXCLUDE_SYMBOLS = detail GENERATE_HTML = NO GENERATE_LATEX = NO GENERATE_MAN = NO GENERATE_RTF = NO GENERATE_TREEVIEW = YES GENERATE_XML = YES JAVADOC_AUTOBRIEF = YES MACRO_EXPANSION = YES PREDEFINED = IN_DOXYGEN QUIET = YES RECURSIVE = YES SOURCE_BROWSER = YES WARN_IF_UNDOCUMENTED = NO XML_OUTPUT = xml ================================================ FILE: docs/Makefile ================================================ # Minimal makefile for Sphinx documentation # # You can set these variables from the command line, and also # from the environment for the first two. SPHINXOPTS ?= SPHINXBUILD ?= sphinx-build SOURCEDIR = source BUILDDIR = build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) ================================================ FILE: docs/environment.yml ================================================ name: docs channels: - conda-forge dependencies: - myst-parser - six - sphinx=6.* - sphinx-book-theme - sphinx-copybutton - doxygen - breathe ================================================ FILE: docs/make.bat ================================================ @ECHO OFF pushd %~dp0 REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set SOURCEDIR=source set BUILDDIR=build if "%1" == "" goto help %SPHINXBUILD% >NUL 2>NUL if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% goto end :help %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% :end popd ================================================ FILE: docs/source/advanced_usage/artifacts_verification.rst ================================================ .. _artifacts_verification: Artifacts verification ====================== Overview -------- | Artifacts verification is a general description to describe the security steps realized by the package manager. 3 verifications are implemented in Mamba, on: - repositories packages index (experimental) - packages tarballs, fetched from package repo - packages files, expanded from tarballs .. _repodata_verification: Repodata -------- | The verification of :ref:`repodata` files is under active development based on `The Update Framework specification `_. The goal is to ensure that a :ref:`package tarball` metadata are correct (including size and checksums). It relies on multiple (asymmetric) cryptographic keys to: - define one or multiple trusted public keys for a given package (also called target in that context) - add to the ``repodata`` files one or more (public key, signature) pair for each package tarball metadata Further documentation will come soon. .. _tarball_verification: Package tarball --------------- Assuming a valid :ref:`repodata` (see the previous :ref:`repodata verification`), :ref:`package tarball` metadata are used to check if a tarball is valid or not after fetching it from a repository. .. _files_verification: Package files ------------- | All the package files are listed in a ``paths.json`` file index extracted from the :ref:`package tarball` with files themselves. This index also contains metadata such as the size and checksum (SHA-256) of each file of the package. When a package has already been extracted during a previous operation, it can be directly re-used. The files sizes are nevertheless verified to be sure that they match package definition. It prevents from alteration of its content (manual editing of a file, etc.). SHA-256 checksum verification can be additionally performed using ``extra safety checks`` configuration. By default, Mamba will only emit a warning if one of those 2 checks (file size and checksum) are failing. You can also configure a different policy: - ignore - warn - throw .. note:: After fetching a package tarball from a repo, its size and checksums are already verified (see the previous :ref:`package tarball verification`). There is no need to perform additional checks on each file. ================================================ FILE: docs/source/advanced_usage/detailed_operations.rst ================================================ .. _detailed_operations: Detailed operations =================== Overview -------- | This section explains what are the main operations in details. Please have a look at the :ref:`more concepts` section, the following documentation relies heavily on it. .. _detailed_install: Install ------- The ``install`` operation is using a ``package specification`` to add/install additional packages to a :ref:`target prefix`. The workflow for that operation is: .. mermaid:: :align: center %%{init: {'themeVariables':{'edgeLabelBackground':'white'}}}%% graph TD style start fill:#00000000,stroke:#00000000,color:#00000000; config[Compute configuration fa:fa-link] fetch_index[Fetch repositories index fa:fa-unlink] solve[Solving fa:fa-unlink] fetch_pkgs[Fetch packages fa:fa-unlink] extract[Extract tarballs fa:fa-unlink] link[Link fa:fa-link] stop([Stop]) start-->|User spec|config; config-->fetch_index; fetch_index-->solve; solve-->fetch_pkgs; fetch_pkgs-->extract; extract-->link; link-->stop; click config href "../user_guide/configuration.html" click link href "./more_concepts.html#linking" See also: :ref:`package tarball` The package installation process -------------------------------- When a package gets installed, several steps are executed: - the package is downloaded and placed into the ``$ROOT_PREFIX/pkgs`` folder - the package is extracted - the package is "linked" from the ``pkgs`` folder into the final destination When the package is linked to the final destination (for example, some newly created environment), most files are "hard"-linked. That means, there is no copy of the file created. This saves a considerable amount of disk-space when re-using the same package in multiple environments. However, sometimes a text-replacement is necessary. This is the case when a file contains a reference to the prefix. On Unix systems a very long prefix is used during build (you might have seen something like ``_h_123123_placeholder_placeholder_placeholder...``). This very long prefix is stored in the metadata of the package. When a file contains this prefix, the file is copied into the target prefix and the prefix it is replaced. In text files, this is done via a simple string replacement, and in binary files the string is padded with ``\0`` bytes (to keep the same total length of the file). Binary replacement on Windows is usually not necessary because dynamic library loading on Windows follows different rules. When installing a ``noarch: python`` package, the installation process will compile all ``.py``-files into Python bytecode (``.pyc``) files. All installed files are later referenced in the ``$TARGET_PREFIX/conda-meta/mypkg-version-build.json`` file, to facilitate the removal (e.g. when upgrading or removing a package). If the package contains a ``menu/*.json`` entry that follows the spec introduced by ``menuinst``, a start-menu entry is created on Windows. This is currently not implemented on Linux or macOS but that might change in the future. ================================================ FILE: docs/source/advanced_usage/more_concepts.rst ================================================ .. _more_concepts: More concepts ============= Overview -------- | This section complements :ref:`concepts` with advanced terminology. While not necessary to understand the basic usage, those ``advanced concepts`` are fundamental to understand Mamba in details. .. _repo: Packages repository ------------------- | A packages repository, also called ``repo``, is a generic way to describe a storage location for software packages. In the Mamba's context, it may points to a packages server, a :ref:`channel` or a :ref:`subdir`. .. _channel: Channel ------- | A ``channel`` is an independent and isolated :ref:`repo` structure that is used to classify and administrate more easily a packages server. .. note:: A packages server may host one or multiple ``channels``. .. _subdir: Subdir ------ | A ``subdir`` is a :ref:`channel` subdirectory specific to a given operating system/platform pair. Mamba is a general purpose, language agnostic package manager. The ``subdir`` structure is a convenient way to provide and access packages depending on the targeted os and platform. Typically ``linux-64``, ``osx-arm64`` or ``win-64`` but not limited to those ones. A ``subdir`` provides the packages tarballs alongside a :ref:`packages index` including additional metadata. .. note:: In most cases, both ``noarch`` and ``-`` subdirs are used for an operation requiring data from the :ref:`repo` .. _repodata: Packages index -------------- | A repository package index is a file containing metadata about all the packages tarballs served by a :ref:`repo`. .. note:: Those metadata include license, file size, checksums, etc. In Mamba, it is more often called a ``repodata`` in reference to the index filename ``repodata.json``. A ``repodata`` is specific to a :ref:`channel subdirectory`. .. _tarball: Package tarball --------------- | A tarball is a single archive file, compressed or not, that expands to multiples files/directories. It is typically a ``zip`` file or so. In the case of Mamba, 2 ``conda`` formats are used as package tarball: - ``tar.bz2`` is the historical formats: a ``tar`` file/ball that has been compressed using ``bzip2`` algorithm - ``conda`` more recent format that allows faster access to packages metadata .. _linking: Linking ------- Each package contains its files index, used at a step called ``linking``. The ``linking`` consists in creating a *link* between the package cache where the tarballs are expanded into multiple directories/files and the installation :ref:`target prefix`. The 3 kinds of *links* are: - :ref:`hard-link` - :ref:`soft-link` - :ref:`copy` | The default behavior is to use ``hard-links`` and fallback to ``copy``. The advanced user may want to change that behavior using configuration (see the relevant CLI or API reference for more details): - allow ``soft-links`` to be used as a preferred fallback to ``copy`` (try to ``copy`` if ``soft-link`` fails) - use ``soft-links`` instead of ``hard-links`` as default behavior (``copy`` is still a fallback) - always ``copy`` instead of ``hard-links`` as default behavior (no fallback then) .. warning:: ``soft-links`` more easily lead to broken environment due to their property of becoming invalid when the target is deleted/moved .. _hard_link: Hard-link ********* | A ``hard-link`` is the relation between a name/path and the actual file located on the file system. | It is often used to describe additional ``hard-links`` pointed the same file, but the ownership of the file is shared across all those links (equivalent to a C++ shared pointer): - a reference counter is incremented when creating a new ``hard-link``, decremented when deleting one - the file system location is freed only when that counter decreases to 0 .. image:: hard_links.png :height: 300 :align: center source: `Wikipedia `_ This is the most efficient way to link: - the underlying file on the file system is not duplicated - it is super efficient and resource friendly - ``hard-link`` stays valid when another ``hard-link`` to the same reference is deleted/moved There are some limitations to use ``hard-links``: - not all file systems support ``hard-links`` - ``hard-links`` don't work across file systems/partitions .. _soft_link: Soft-link ********* | A ``soft-link``, also called ``symlink`` (symbolic link), is much more similar to a shortcut or a redirection to another name. It is as efficient as a ``hard-link`` but has different properties: - works across a filesystem/partition boundaries - becomes invalid then the pointed name is deleted or moved (no shared ownership) .. _copy: Copy **** | This is a most well-known link, a simple copy of the file is done. It is not efficient nor resource friendly but preserve the file from deletion/modification of the reference. ================================================ FILE: docs/source/advanced_usage/package_resolution.rst ================================================ Package resolution ================== To resolve packages, mamba uses the `libsolv `_ library. Libsolv employs a "backtracking" satisfiability (SAT) solver to make sure that each requested spec and the dependencies are properly satisfied. It is possible to inspect the package resolution process by adding ``-vvv`` on the command line (which activates the triple-"verbose" mode). In this mode, curl and libsolv will print additional information. .. note:: This documentation talks about "track_feature". Track features are a "deprecated" conda feature that are still used solely to "down-weight" variant packages. Conda tries to "globally minimize" the amount of track_features in an environment. In mamba, we don't implement the same global optimization but we do de-prioritize track features. If you want to properly de-prioritize packages with mamba, please make sure to add the track_feature in the variant package or at least as a first-order dependency (e.g. numpy-1.20-pypy should either have a track feature or a specific dependency to ``python 3.8 *pypy`` which then in turn should have the track_feature). The package resolution basically filters, sorts and selects packages until a working solution is found. The pruning and sorting works as follows (implemented in ``policy.c`` in libsolv): **solver_prune_to_highest_prio** - if strict channel priority is activated, we prune (filter) packages not belonging to the highest prio channel - if a solvable is installed, it is sorted to the front and preferred **prune_to_best_version_conda** - we first sort by track_feature: if a package has a track_feature, it's sorted to the bottom - next we sort by version -- highest versions first (in libsolv, a version string is called ``evr`` which stands for epoch/version/release) - then we sort by the sub-priority of the repository, preferring the repo with higher sub-priority - next we compare the build number Now, if multiple packages with the same build number are found, libsolv will create "variant" branches. The variants are also sorted, according to the following: **sort_by_best_dependencies** - first it's checked if the variant packages have different dependencies. For example, there can be one variant package that's built for ``python >=3.7,<3.8`` and one for ``python >=3.8,<3.9``. - if we find different requirements, we check if one selection **only selects packages with a track_feature** (this would be the case with a match spec like ``python 3.8.* *pypy``). In this case, we de-prioritize that variant - if there is no difference in track features in the dependencies, we want to prefer the variant for the higher dependency (python 3.8 in this case). To do this, we find all matching packages for ``python >=3.7,<3.8`` and ``python >=3.8,<3.9`` and check which of the two specs selects the higher version - if we still find no difference, we compare the timestamps of the two packages and prefer the package that was added later to the repository Examples -------- **Simple example:** To give some example orderings, we could look at the python package. In conda-forge, we'd find something like - python 3.9.2 HASH_cpython [build number: 1] - python 3.9.2 HASH_cpython [build number: 0] - python 3.9.1 HASH_cpython - python 3.8 HASH_cpython - python 3.7 HASH_cpython - python 3.7 HASH_pypy [track_feature: pypy] If we want to plainly install "python", we would prefer python 3.9.2 with build number 1 since it has the highest version and build number. If we want to install ``python 3.7.*`` we would prefer ``python 3.7 HASH_cpython`` since it does not come with a track_feature. **More difficult example:** On conda-forge, we're building "variant packages" for numpy (and other packages requiring the C API of Python). This means for a given version of numpy, we'll end up with ~5 almost equivalent variant packages, for cpython 3.6, 3.7 and 3.8 as well as pypy 3.6 and 3.7. For this example the default is the cpython build of numpy. However, currently conda-forge does not apply the down-weigthing via track_feature on the terminal node (numpy), but only in some dependency package (such as python). For the case where we want to simply install ``numpy``, we need to find which numpy variant installs the highest python package. In this case libsolv would decide for ``numpy-1.20-cpython38``. If we install ``numpy python=3.7`` we have two potential variants: ``numpy-1.20-cpython37`` and ``numpy-1.20-pypy37``. In this case we need to inspect whether one of those two builds will require exclusively packages with a track_feature applied. And indeed, the ``pypy37`` package will have a requirement on ``python_abi 3.7 *pypy`` and **all** packages matching this requirement have a track_feature, so that it will be down-weighted. ================================================ FILE: docs/source/api/solver.rst ================================================ ``mamba::solver`` ================= The ``mamba::solver`` namespace contains the packages solver and related objects. This particular namespace is a generic common interface, while the subnamespace ``mamba::solver::libsolv`` contains `LibSolv `_ specific implementations. .. doxygennamespace:: mamba::solver ================================================ FILE: docs/source/api/specs.rst ================================================ ``mamba::specs`` ================ The ``mamba::specs`` namespace contains object to *describe* abstraction in the Conda ecosystem. They are purely functional and do not have any observable impact on the user system. .. doxygennamespace:: mamba::specs ================================================ FILE: docs/source/conf.py ================================================ # Configuration file for the Sphinx documentation builder. # # For the full list of built-in configuration values, see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information project = "mamba" copyright = "2024, QuantStack & mamba contributors" author = "QuantStack & mamba contributors" version = "latest" release = "latest" # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration extensions = [] templates_path = ["_templates"] exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] language = "en" # -- Options for HTML output ------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output html_theme = "alabaster" html_static_path = ["_static"] # The file above was generated using sphinx 8.1.3 with this command: # sphinx-quickstart --project "mamba" --author "QuantStack & mamba contributors" -v "latest" -r "latest" -l en --no-sep --no-makefile --no-batchfile # These are custom options for this project html_theme = "sphinx_book_theme" html_logo = "_static/logo.png" html_title = "documentation" html_theme_options = { "path_to_docs": "docs/source", "repository_branch": "main", "repository_url": "https://github.com/mamba-org/mamba", "use_download_button": True, "use_edit_page_button": True, "use_issues_button": True, "use_repository_button": True, } import os # noqa: E402 import sys # noqa: E402 from pathlib import Path # noqa: E402 # Load local extensions (e.g. mermaid) sys.path.insert(0, str(Path.cwd().resolve() / "tools")) # Add Sphinx extension modules extensions = [ "mermaid", "mermaid_inheritance", "myst_parser", "breathe", "sphinx_copybutton", ] # Configuration of Breathe Doxygen interopt breathe_projects = {"libmamba": os.environ.get("MAMBA_DEV_DOXYGEN_XML_DIR", "../xml")} breathe_default_project = "libmamba" breathe_default_members = ("members", "undoc-members") breathe_show_include = False # Configure links which should be ignored during linkcheck linkcheck_ignore = [ r".*github\.com.*#", # javascript based anchors ] ================================================ FILE: docs/source/developer_zone/changes-2.0.rst ================================================ Mamba 2.0 Changes ================= .. ...................... .. .. THIS IS STILL A DRAFT .. .. ...................... .. .. TODO high-level summary of new features: .. - OCI registries .. - Mirrors .. - Own implementation repodata.json Command Line Executables ------------------------ Mamba (executable) ****************** ``mamba``, previously a Python executable mixing ``libmambapy``, ``conda``, and some specific code logic has been entirely replaced by the dynamically linked version of ``micromamba``, a statically-linked ELF based on ``libmamba``. Hence ``mamba`` now has the exact same user interface and experience as ``micromamba``. .. warning:: The previous code being a highly complex project with few of its original developers still active, it is hard to make an exhaustive list of all changes. Please help us by reporting changes missing changes. Micromamba ********** Micromamba receives all new features and its CLI remains mostly unchanged. Breaking changes include: - ``micromamba shell init`` root prefix parameter ``--prefix`` (``-p``) was renamed ``--root-prefix`` (``-r``). Both options were supported in version ``1.5``. - A new config ``order_solver_request`` (default true) can be used to order the dependencies passed to the solver, getting order independent solutions. - Support for complex match specs such as ``pkg[md5=0000000000000]`` and ``pkg[build='^\d*$']``. - **For ``micromamba<=2.1.0``:** Lost support for leading and internal globs in version strings (via redesigned ``VersionSpec``, which no longer handles version strings as a regex). Only trailing globs were supported. - Full version regexes, such as ``^3.3+$``, are not implemented. .. TODO OCI and mirrors Libraries --------- Mamba (Python package) ********************** In version 2.0, all tools are fully written in C++. All code previously available in Python through ``import mamba`` has been removed. Libmambapy (Python bindings) **************************** The Python bindings to the C++ ``libmamba`` library remain available through ``import libmambapy``. They are now considered the first class citizen to using Mamba in Python. Changes include: - The global ``Context``, previously available through ``Context()``, must now be instantiated at least once before using ``libmambapy`` functions and types. Only one instance can exist at any time, but that instance can be destroyed and another recreated later, for example if you use it in specific functions scopes. What's more, it is required to be passed explicitly in a few more functions. Notably: - ``MultiPackageCache`` (constructor) - ``SubdirData.create_repo`` - ``SubdirIndex.create`` - ``SubdirIndex.download`` - ``clean`` - ``transmute`` - ``get_virtual_packages`` - ``cancel_json_output`` In version 2, ``Context()`` will throw an exception to allow catching errors more smoothly. - ``ChannelContext`` is no longer an implicit global variable. It must be constructed with one of ``ChannelContext.make_simple`` or ``ChannelContext.make_conda_compatible`` (with ``Context.instance`` as argument in most cases) and passed explicitly to a few functions. - A new ``Context`` independent submodule ``libmambapy.specs`` has been introduced with: - The redesign of the ``Channel`` and a new ``UnresolvedChannel`` used to describe unresolved channel strings. A featureful ``libmambapy.specs.CondaURL`` is used to describe channel URLs. - The redesign of ``MatchSpec``. The module also includes a platform enumeration, an implementation of ordered ``Version``, and a ``VersionSpec`` to match versions. **Breaking change (for ``libmambapy<=2.1.0``):** ``VersionSpec`` lost support for leading and internal globs in version strings because they are no longer handled as a regex. Only trailing globs were supported. - Full version regexes, such as ``^3.3+$``, are not implemented in ``VersionSpec`` and ``MatchSpec``. - ``PackageInfo`` has been moved to this submodule. Some attributes have been given a more explicit name ``fn`` > ``filename``, ``url`` > ``package_url``. - A new ``Context`` independent submodule ``libmambapy.solver`` has been introduced with the changes below. A usage documentation page is available at :ref:`mamba_usage_solver`. - The redesign of the ``Pool``, which is now available as ``libmambapy.solver.libsolv.Database``. The new interfaces make it easier to create repositories without using other ``libmambapy`` objects. - ``Repo`` has been redesigned into a lightweight ``RepoInfo`` and moved to ``libmambapy.solver.libsolv``. The creation and modification of repos happen through the ``Database``, with methods such as ``Database.add_repo_from_repodata_json`` and ``Database.add_repo_from_packages``, but also high-level free functions such as ``load_subdir_in_database`` and ``load_installed_packages_in_database``. - The ``Solver`` has been moved to ``libmambapy.solver.libsolv.Solver``. - All jobs, pins, and flags must be passed as a single ``libmambapy.solver.Request``. - The outcome of solving the request is either a ``libmambapy.solver.Solution`` or a ``libmambapy.solver.libsolv.Unsolvable`` state from which rich error messages can be extracted. For many changes, an exception throwing placeholders has been kept to advise developers on the new direction to take. Libmamba (C++) ************** The C++ library ``libmamba`` has received significant changes. Due to the low usage of the C++ interface, all changes are not listed here. The main changes are: - Refactoring and testing of a large number of utilities into a ``util::`` namespace. - Creation of ``specs::`` including the items below. A usage documentation (in Python) is available at :ref:`mamba_usage_specs`. - Implementations of ``Version`` and ``VersionSpec`` for matching versions, - A refactoring of a purely functional ``Channel`` class, - Implementation of a ``UnresolvedChannel`` to describe unresolved ``Channels``, - A refactored and complete implementation of ``MatchSpec`` using the components above. - **Breaking change (for ``libmamba<=2.1.0``):** ``VersionSpec`` lost support for leading and internal globs in version strings because they are no longer handled as a regex. Only trailing globs were supported. This affects version strings in both the command-line interface and recipe requirements. - Full version regexes, such as ``^3.3+$``, are not implemented in ``VersionSpec`` and ``MatchSpec``. - A cleanup of ``ChannelContext`` to be a light proxy and parameter holder wrapping the ``specs::Channel``. - A new ``repodata.json`` parser using `simdjson `_. - The ``MPool``, ``MRepo`` and ``MSolver`` API has been completely redesigned into a ``solver`` subnamespace and works independently of the ``Context``. The ``solver::libsolv`` sub-namespace has also been added for full isolation of libsolv, and a solver API without ``Context``. The ``solver`` API redesign includes the items below. A usage documentation (in Python) is available at :ref:`mamba_usage_solver`. - A refactoring of the ``MPool`` as a ``DataBase``, fully isolates libsolv, and simplifies repository creation. - A refactoring and thinning of ``MRepo`` as a new ``RepoInfo``. - A solver ``Request`` with all requirements to solve is the new way to specify jobs. - A refactoring of ``Solver``. - A solver outcome as either a ``Solution`` or an ``UnSolvable`` state. - Plug of the Mamba's ``MatchSpec`` implementation in the ``Solver``, enabling the solving of all types of previously unsupported MatchSpecs. - Improved downloaders. Mirrors and OCI registries -------------------------- In the perspective of ensuring continuous and faster access when downloading packages, we now support mirroring channels. Furthermore, we support fetching packages from `OCI registries `_ in order to provide an alternative to hosting on https://conda.anaconda.org/conda-forge/. Specifying a mirror can be done in the rc file as follows: .. code:: $ cat ~/.mambarc # Specify a mirror (can be a list of mirrors) for conda-forge channel mirrored_channels: conda-forge: ["oci://ghcr.io/channel-mirrors/conda-forge"] # ``repodata_use_zst`` isn't considered when fetching from oci registries # since compressed repodata is handled internally # (if present, compressed repodata is necessarily fetched) # Setting ``repodata_use_zst`` to ``false`` avoids useless requests with # zst extension in repodata filename repodata_use_zst: false Then, you can for instance create a new environment ``pandoc_from_oci`` where ``pandoc`` can be fetched from the specified mirror and installed: .. code:: $ micromamba create -n pandoc_from_oci pandoc -c conda-forge Listing packages in the created ``pandoc_from_oci`` environment: .. code:: $ micromamba list -n pandoc_from_oci Name Version Build Channel ────────────────────────────────────────── pandoc 3.2 ha770c72_0 conda-forge ================================================ FILE: docs/source/developer_zone/contributing.rst ================================================ .. include:: ../../../CONTRIBUTING.rst ================================================ FILE: docs/source/developer_zone/dev_environment.rst ================================================ ======================= Development Environment ======================= .. warning:: These instructions have some inaccuracies on Windows. Get the code and Mamba ====================== Clone the repo ************** Fork and clone the repository in your preferred manner. Refer to GitHub documentation for how to do so. Install micromamba ****************** Setting the development environment requires conda, mamba, or micromamba. Since some commands are automated with ``micromamba``, and to avoid any runtime linking issue, it is best to work with micromamba. Refer to the :ref:`installation` page for how to install micromamba or mamba. Running commands manually ========================= .. note:: The CI files in ``.github/workflow`` provide an alternative way of developing Mamba. Install development dependencies ******************************** .. code:: bash micromamba create -n mamba -c conda-forge -f dev/environment-dev.yml micromamba activate mamba Compile ``libmamba`` and other artifacts **************************************** ``libmamba`` is built using CMake. Typically during development, we build everything dynamically using dependencies from Conda-Forge. The first step is to configure the build options. A recommended set is already provided as CMake Preset, but feel free to use any variations. .. note:: If you do choose to use the provided CMake Preset, you may need to install ``ccache`` as an extra requirement as specified in ``dev/environment-dev-extra.yml``. .. note:: All ``cmake`` commands listed below use ``bash`` multi-line syntax. On Windows, replace ``\`` trailing character with ``^``. .. code:: bash cmake -B build/ -G Ninja --preset mamba-unix-shared-debug-dev Compilation can then be launched with: .. code:: bash cmake --build build/ --parallel ``libmamba`` tests ****************** The tests for libmamba are written in C++. .. code:: bash ./build/libmamba/tests/test_libmamba ``mamba``/``micromamba`` integration tests ****************************************** Many ``mamba`` integration tests are written through a pytest Python wrapper. The environment variable ``TEST_MAMBA_EXE`` controls which executable is being tested. .. code:: bash export TEST_MAMBA_EXE="${PWD}/build/micromamba/mamba" python -m pytest micromamba/tests ``libmambapy`` tests ******************** To run the ``libmambapy`` tests, the Python package needs to be properly installed first. .. warning:: This needs to be done every time ``libmamba`` changes. .. code:: bash cmake --install build/ --prefix "${CONDA_PREFIX}" Then the Python bindings can be installed .. code:: bash python -m pip install --no-deps --no-build-isolation libmambapy/ Finally the tests can be run: .. code:: bash python -m pytest libmambapy/tests Code Formatting =============== Code formatting is done using Pre-Commit hooks. Whichever way you decided to install development dependencies, we recommend installing Pre-Commit hooks with .. code:: bash pre-commit install Alternatively, the checks can be run manually .. code:: bash pre-commit run --all-files ================================================ FILE: docs/source/developer_zone/internals.rst ================================================ Internals of mamba ================== Mamba comes with a C++ core (for speed and efficiency), and a clean Python API on top. The core of mamba uses: - ``libsolv`` to solve dependencies (the same library used in RedHat dnf and other Linux package managers) - ``curl`` for reliable and fast downloads - ``libarchive`` to extract the packages .. _libsolv_internals: libsolv ------- pool **** | The ``pool`` holds pointers of almost all the data manipulated in ``libsolv``. Some are presented here: - string pool ``Stringpool`` - relations of dependency ``Reldep`` - solvables/packages ``Solvable`` - repositories ``Repo`` - data about providers of a specific name or relation, as ``Id`` s and ``Offset`` s (resp. ``int`` and ``unsigned int``) for maximum performance Sizes of allocated memory or offset to the first free slot are also stored. .. mermaid:: :align: center classDiagram class Pool{ +Stringpool ss +Reldep *rels +int nrels +Repo **repos +int nrepos +int urepos +Repo *installed +Solvable *solvables +int nsolvables +Offset *whatprovides +Offset *whatprovides_rel +Id *whatprovidesdata +Offset whatprovidesdataoff +int whatprovidesdataleft ... } Ids ### Strings (package names, requirements, etc.) are converted to ``Id`` s using a hash table for efficient data manipulation (storage, usage). - ``Id pool_str2id(Pool *pool, const char *str, int create)`` is used to get an ``Id`` from a string - It eventually creates a fresh one if not existing - ``const char *pool_id2str(const Pool *pool, Id id)`` is used to get back the string from ``Id`` .. warning:: Do not use ``solvable`` ``Id`` s with ``pool_id2str``, use the equivalent ``const char *pool_solvid2str(Pool *pool, Id p)`` Reldeps ####### A ``Reldep`` describes a relation of dependency with: - a ``name`` Id - an epoque version ``evr`` Id - some ``flags``: ``REL_CONDA`` in our case .. mermaid:: :align: center classDiagram class Reldep{ +Id name +Id evr +int flags } An example could be ``{1, 2, 30}``, with: - ``1`` the Id for ``"xtensor"`` - ``2`` the Id for ``">=0.20"`` - ``30`` the ``REL_CONDA`` flag | The pool holds a ``Reldep *rels`` pointer on the first memory location and the size ``int nrels`` of allocated memory. ``Reldep`` are also handled with ``Id`` s that have bit 31 used as a flag to distinguish them from regular ``Id`` s. There are multiple macros that help to convert those special ``Id`` s: - ``MAKERELDEP(id)``: turn a regular ``Id`` into a ``Reldep`` ``Id`` - ``ISRELDEP(id)``: test the bit 31 - ``GETRELID(id)``: get the regular ``Id`` - ``GETRELDEP(pool, id)``: get the ``Reldep`` from its ``Id`` .. note:: ``pool_id2str`` also works with ``Reldep`` ``Id`` s! But it will only returns the ``Reldep`` 's ``name`` Offsets ####### An ``Offset`` represents a positive or negative shift of a pointer on an array. For example, a *solvable* does not contain all its data but rather holds multiple offsets on its ``repo->idarraydata`` storage. - ``idarraydata`` is an ``Id`` pointer - ``provides``, ``requires``, etc. are offsets in ``idarraydata`` whatprovides ************ A ``provider`` is a *solvable* fulfilling a *specification*. The following definitions are key to disambiguate how ``libsolv`` works: - a *package* is an identification of the resource handled: a name such as ``xtensor`` - a *solvable* is a specific version of the *package*. It can be assimilated to its tarball. - in ``Mamba``, a *solvable* name MUST match the package name - ``libsolv`` handles cases where *solvables* are providing different entities than what identified in their names (example: ``pynum`` providing ``numpy``) - this is not used, but important to know to understand the terminology - a *specification*: an expression to match *solvables* providing the same *package* - the package name can be used to select all providers/*solvables* - a more specific *spec* like ``s2="xtensor>=0.20"`` will only match a subset of *solvables*: the ones that have version >=0.20 (whatever the build string) Let's take a simple example to recap: - the package: ``xtensor`` - solvable(s): - ``xtensor=0.20.10=hc9558a2_0`` - ``xtensor=0.23.10=h4bd325d_0`` - etc. - specification(s): - ``xtensor`` - ``xtensor>=0.20`` - etc. .. note:: It's possible that a *package* is not provided by any *solvable*. It is then uninstallable. .. mermaid:: :align: center %%{init: {'themeVariables':{'edgeLabelBackground':'white'}}}%% graph TD subgraph " " spec1((s1)) -.-> solvable1:::solvable spec1 -.-> solvable2:::solvable ...:::empty spec1 -.-> solvableN:::solvable spec2((s2)) -.-> solvableN:::solvable end classDef solvable fill:#f96; classDef empty fill:#ffffff00,stroke:#ffffff00; .. note:: Specifications are stored as ``Id`` s (see the previous section) .. warning:: While a ``solvable`` is a ``libsolv`` notion, ``specs`` and ``packages`` are not. Storage ####### | The free function ``void pool_createwhatprovides(Pool *pool)`` is used to create hashes over pool of solvables to ease provide lookups. It computes and store what *solvables* provide each *spec*, using a two-step indirect list: - from the spec ``Id``, an offset is computed in ``Id *whatprovidesdata`` - ``Offset *whatprovides`` stores regular string specs - ``Offset *whatprovides_rel`` stores ``Reldep`` specs - ``whatprovidesdata`` at the given offset is a 0-terminated list of *solvables* ``Id`` s, providing the spec ``Id`` .. image:: whatprovides.svg :height: 300 :align: center Lookups ####### The ``pool_whatprovides(Pool *pool, Id d)`` function returns the offset of the first solvable ``Id`` in ``whatprovidesdata``: .. mermaid:: :align: center graph LR A{"ISRELDEP(d)?"} -->|Yes| B1["whatprovides[d]"]; A -->|No| B2["whatprovides_rel[GETRELID(d)]"]; B1 --> C{0?}; B2 --> C; C -->|Yes| D1["pool_addrelproviders[d]"]; C -->|No| D2((return)); D1 --> D2; Rules ***** A *rule* is all about *solvables*, it represents a logical disjunction ``OR`` between one or more literals. Rules are created to translate in mathematical logic: - a specification: installation/removal/updates - ``(A)`` means ``A`` must be installed - ``(-A)`` means ``A`` must be removed or kept uninstalled - ``(A|B1|B2|...)`` means ``A`` could be updated with ``B1``, ``B2``, etc. - a dependency: ``A`` needs/requires ``b`` (a *spec*) - ``(-A|B1|B2|...)`` means ``A`` requires one of ``B1``, ``B2``, etc. (``b`` providers) - an incompatibility: ``A1`` can't be installed alongside ``A2`` - ``(-A1|-A2), (-A1|-A3), ...`` means ``A1`` is not compatible with ``A2``, ``A3``, etc. - this is a common case: multiple providers of the same package - etc. Still for efficiency, *rules* are storing ``Id`` s of *solvables* and *specs*: - ``p`` is the package ``Id`` of ``A`` - ``d`` is the package ``Id`` offset into the list of providers (negative value means the rule is disabled) - ``w1`` and ``w2`` are watches - ``n1`` and ``n2`` are the next rules in linked-lists, corresponding to ``w1`` and ``w2`` .. mermaid:: :align: center classDiagram class Rule{ +Id p +Id d +Id w1 +Id w2 +Id n1 +Id n2 } Dependencies ############ Each dependency is turned into a rule to be satisfied during the solving stage. Example: - ``p1`` and ``p2`` are 2 specs - ``p1`` is provided by a single solvable ``s11`` - ``p2`` is provided by ``s21`` and ``s22`` .. mermaid:: :align: center %%{init: {'themeVariables':{'edgeLabelBackground':'white'}}}%% graph LR subgraph p1 providers[ ] p1((p1)):::package -.-> s11:::solvable end s11:::solvable --> p2((p2)):::package subgraph p2 providers[ ] p2((p2)):::package -.-> s21:::solvable p2((p2)):::package -.-> s22:::solvable end classDef solvable fill:#f96; The corresponding rule ``r`` is ``-s11|s21|s22``. That means that taking the decision to install ``s11``: - ``-s11`` is not satisfied - either ``s21`` or ``s22`` need to be satisfied .. note:: Exclusive rules are used to avoid installation of multiple solvables providing the same package Watches ####### | Watches are a way to link rules. They are triggered during a phase called ``propagation`` after decisions taken on previous rules for some solvable. The possible decisions on solvables are ``installation`` or ``removal``/``conflict``, this is stored as resp. positive and negative Ids. Related rules are then evaluated during another level of decision: those are the one with an opposite first literal. Example: - the install spec is to install ``p1`` provided by a single solvable ``s1``: ``r1=(s1)`` - ``s1`` depends on spec ``p2``, provided by ``s21`` or ``s22``: ``r2=(-s1|s21|s22)`` - decision to install ``s1`` triggers rule ``r2`` Transaction *********** Another important part of libsolv is the ``Transaction``. A transaction governs what packages are installed or removed, and a transaction is the result of a successful solve process. A transaction in libsolv is a single list (Queue) of Solvable ``Id's`` and is thus rather simple. The Queue contains either a positive or negative ``Id``. Each negative ``Id`` is ``uninstalled`` from the environment, and each positive ``Id`` is to be ``installed``. libsolv classifies the entire range of Id's into different types of transaction operations. For example, if we have ``{ -5, 5 }`` that would be a reinstall transaction for the Solvable with ``Id == 5``. If the ``Id's`` are different then it can be a downgrade or upgrade operation (first, the previous package needs removal before the higher or lower version can be installed). The ``transaction_classify`` and ``transaction_classify_pkgs`` functions of libsolv take care of this classification to present a nice output to the user. Another crucial libsolv function is ``transaction_order`` to order the transaction in a way that they are installed with the lowest dependency first (topological sort). This ensures that e.g. ``python`` is installed before any packages depending on ``python`` as they are sometimes needed during installation (for example for ``noarch`` packages with ``entry_points``). Lastly, we can force installation or explicitly install from URL's by crafting transactions without using the solver – just by adding the correct ``Id's`` into the Transaction queue. ================================================ FILE: docs/source/index.rst ================================================ Welcome to Mamba's documentation! ================================= Mamba is a fast, robust, and cross-platform package manager. It runs on Windows, OS X and Linux (ARM64 and PPC64LE included) and is fully compatible with ``conda`` packages and supports most of conda's commands. Mamba is a framework with several components: - ``libmamba``: a C++ library of the domain, exposing low-level and high-level APIs - ``mamba``: a ELF as a *drop-in* replacement for ``conda``, built on top of ``libmamba`` - ``micromamba``: the statically linked version of ``mamba`` - ``libmambapy``: python bindings of ``libmamba`` .. note:: In this documentation, ``Mamba`` will refer to all flavors while flavor-specific details will mention ``mamba``, ``micromamba`` or ``libmamba``. .. note:: :ref:`micromamba` is especially well fitted for the CI use-case but not limited to that! You can try Mamba now by visiting the installation for :ref:`mamba` or :ref:`micromamba` .. toctree:: :caption: INSTALLATION :maxdepth: 2 :hidden: Mamba Micromamba .. toctree:: :caption: USER GUIDE :maxdepth: 2 :hidden: user_guide/concepts Mamba Micromamba user_guide/configuration user_guide/troubleshooting .. toctree:: :caption: ADVANCED USAGE :maxdepth: 2 :hidden: advanced_usage/more_concepts advanced_usage/detailed_operations advanced_usage/artifacts_verification advanced_usage/package_resolution .. toctree:: :caption: LIBMAMBA USAGE :maxdepth: 2 :hidden: usage/specs usage/solver .. toctree:: :caption: API REFERENCE :maxdepth: 2 :hidden: api/specs api/solver .. toctree:: :caption: DEVELOPER ZONE :maxdepth: 2 :hidden: developer_zone/contributing developer_zone/dev_environment developer_zone/internals developer_zone/changes-2.0 ================================================ FILE: docs/source/installation/mamba-installation.rst ================================================ .. _mamba-install: ================== Mamba Installation ================== Fresh install (recommended) *************************** We recommend that you start with the `Miniforge distribution `_ >= ``Miniforge3-23.3.1-0``. If you need an older version of Mamba, please use the Mambaforge distribution. Miniforge comes with the popular ``conda-forge`` channel preconfigured, but you can modify the configuration to use any channel you like. After successful installation, you can use the mamba commands as described in :ref:`mamba user guide`. .. note:: 1. After installation, please :ref:`make sure ` that you do not have the Anaconda default channels configured. 2. Do not install anything into the ``base`` environment as this might break your installation. See :ref:`here ` for details. Docker images ************* In addition to the Miniforge standalone distribution (see above), there are also the `condaforge/miniforge3 `_ docker images: .. code-block:: bash docker run -it --rm condaforge/miniforge3:latest mamba info Conda libmamba solver ********************* For a totally conda-compatible experience with the fast Mamba solver, `conda-libmamba-solver `_ now ships by default with Conda. Just use an up to date version of Conda to enjoy the speed improvememts. .. _mamba-uninstall: Uninstalling Mamba ****************** Since ``mamba`` is typically installed as part of the `Miniforge distribution `_, uninstalling ``mamba`` involves removing the entire Miniforge installation. .. note:: Before uninstalling, you can check your specific installation paths by running: .. code-block:: bash mamba info This will show you important information such as: - ``envs directories``: where your environments are stored - ``package cache``: where downloaded packages are cached - ``user config files``: location of your ``.mambarc`` file - ``populated config files``: location of your ``.condarc`` file - ``base environment``: the base Miniforge installation directory (parent of the base env) Use these paths to adapt the commands below to your specific installation. 1. Remove shell initialization ^^^^^^^^^^^^^^^^^^^^^^^^^^^ If you initialized your shell with ``mamba shell init``, you need to remove the initialization code from your shell configuration files. Run the following command for each shell you initialized: .. code-block:: bash mamba shell deinit -s bash # for bash mamba shell deinit -s zsh # for zsh mamba shell deinit -s fish # for fish mamba shell deinit -s xonsh # for xonsh mamba shell deinit -s csh # for csh/tcsh mamba shell deinit -s nu # for nushell On Windows PowerShell: .. code-block:: powershell mamba shell deinit -s powershell This will remove the mamba initialization block from your shell configuration files (``.bashrc``, ``.zshrc``, ``config.fish``, etc.). 2. Remove the Miniforge installation directory and package cache ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The Miniforge installation directory contains ``mamba``, ``conda``, and all installed packages and environments. Check ``mamba info`` to find the exact location: - The base environment path shows the Miniforge installation directory (it's the parent of the base env) - The package cache location is shown under ``package cache`` Default locations depend on your operating system: - **Linux/macOS:** Usually ``~/miniforge3`` or ``~/mambaforge`` - **Windows:** Usually ``C:\Users\\miniforge3`` or ``C:\Users\\mambaforge`` .. code-block:: bash # Linux/macOS - remove the installation directory # Use the base environment path from 'mamba info' to find the exact location rm -rf ~/miniforge3 # or rm -rf ~/mambaforge # Also remove the package cache if it's in a separate location # (check the 'package cache' path from 'mamba info') rm -rf ~/.cache/conda/pkgs # or your specific cache location On Windows PowerShell: .. code-block:: powershell # Use the base environment path from 'mamba info' to find the exact location Remove-Item -Recurse -Force $env:USERPROFILE\miniforge3 # or Remove-Item -Recurse -Force $env:USERPROFILE\mambaforge # Also remove package cache if separate (check 'mamba info' for exact path) .. warning:: This will delete the entire Miniforge installation, including all environments, installed packages, and cached data. Make sure you have backed up any important environments or data before removing this directory. 3. Remove configuration files (optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Check ``mamba info`` for the exact paths to your configuration files: - ``user config files`` shows the location of ``.mambarc`` - ``populated config files`` shows the location of ``.condarc`` If you want to remove these configuration files: .. code-block:: bash # Use the paths from 'mamba info', or default locations: rm ~/.mambarc # if it exists rm ~/.condarc # if it exists and was only used for mamba/miniforge On Windows: .. code-block:: powershell # Use the paths from 'mamba info', or default locations: Remove-Item $env:USERPROFILE\.mambarc -ErrorAction SilentlyContinue Remove-Item $env:USERPROFILE\.condarc -ErrorAction SilentlyContinue .. note:: If you also use ``conda`` from another distribution (like Anaconda), be careful not to delete shared configuration files that are still needed. 4. Remove from PATH (if manually added) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If you manually added Miniforge to your PATH, remove those entries from your shell configuration files (``.bashrc``, ``.zshrc``, ``.profile``, etc.). After completing these steps, ``mamba`` and the Miniforge distribution will be completely removed from your system. ================================================ FILE: docs/source/installation/micromamba-installation.rst ================================================ .. _umamba-install: ======================= Micromamba Installation ======================= ``micromamba`` is a fully statically-linked, self-contained, executable. This means that the ``base`` environment is completely empty. The configuration for ``micromamba`` is slightly different, namely all environments and cache will be created by default under the ``MAMBA_ROOT_PREFIX`` environment variable. There is also no pre-configured ``.condarc``/``.mambarc`` shipped with micromamba (they are however still read if present). .. _umamba-install-automatic-installation: Operating System package managers ********************************* Homebrew ^^^^^^^^ On macOS, you can install ``micromamba`` from `Homebrew `_: .. code:: bash brew install micromamba Mamba-org releases ****************** Automatic install ^^^^^^^^^^^^^^^^^ .. hint:: This is the recommended way to install micromamba. If you are using macOS, Linux, or Git Bash on Windows there is a simple way of installing ``micromamba``. Simply execute the installation script in your preferred shell. For Linux, macOS, or Git Bash on Windows install with: .. We use ``bash <(curl ...)`` instead of ``curl .. | bash`` as the latter does not work with prompts .. code:: bash "${SHELL}" <(curl -L micro.mamba.pm/install.sh) For NuShell users, run ``sh -c (curl -L micro.mamba.pm/install.sh)``. On Windows Powershell, use .. code :: powershell Invoke-Expression ((Invoke-WebRequest -Uri https://micro.mamba.pm/install.ps1 -UseBasicParsing).Content) A specific micromamba release can be installed by setting the ``VERSION`` environment variable. The release versions contain a build number in addition to the micromamba version. Micromamba releases can be found on Github: https://github.com/mamba-org/micromamba-releases/releases Self updates ^^^^^^^^^^^^ Once installed, ``micromamba`` can be updated with .. code-block:: bash micromamba self-update A explicit version can be specified with .. code-block:: bash micromamba self-update --version 1.4.6 Manual installation ^^^^^^^^^^^^^^^^^^^ .. warning:: This is for advanced users. .. _umamba-install-posix: Linux and macOS ~~~~~~~~~~~~~~~ Download and unzip the executable (from the official conda-forge package): Ensure that basic utilities are installed. We need ``curl`` and ``tar`` with support for ``bzip2``. Also you need a glibc based system like Ubuntu, Fedora or Centos (Alpine Linux does not work natively). The following magic URL always returns the latest available version of micromamba, and the ``bin/micromamba`` part is automatically extracted using ``tar``. .. code:: bash # Linux Intel (x86_64): curl -Ls https://micro.mamba.pm/api/micromamba/linux-64/latest | tar -xvj bin/micromamba # Linux ARM64: curl -Ls https://micro.mamba.pm/api/micromamba/linux-aarch64/latest | tar -xvj bin/micromamba # Linux Power: curl -Ls https://micro.mamba.pm/api/micromamba/linux-ppc64le/latest | tar -xvj bin/micromamba # macOS Intel (x86_64): curl -Ls https://micro.mamba.pm/api/micromamba/osx-64/latest | tar -xvj bin/micromamba # macOS Silicon/M1 (ARM64): curl -Ls https://micro.mamba.pm/api/micromamba/osx-arm64/latest | tar -xvj bin/micromamba After extraction is completed, we can use the micromamba binary. If you want to quickly use micromamba in an ad-hoc usecase, you can run .. code:: bash export MAMBA_ROOT_PREFIX=/some/prefix # optional, defaults to ~/micromamba eval "$(./bin/micromamba shell hook -s posix)" This shell hook modifies your shell variables to include the micromamba command. If you want to persist these changes, you can automatically write them to your ``.bashrc`` (or ``.zshrc``) by running ``./micromamba shell init ...``. This also allows you to choose a custom MAMBA_ROOT_ENVIRONMENT, which is where the packages and repodata cache will live. .. code:: sh # Linux/bash: ./bin/micromamba shell init -s bash -r ~/micromamba # this writes to your .bashrc file # sourcing the bashrc file incorporates the changes into the running session. # better yet, restart your terminal! source ~/.bashrc # macOS/zsh: ./micromamba shell init -s zsh -r ~/micromamba source ~/.zshrc Now you can activate the base environment and install new packages, or create other environments. .. code:: bash micromamba activate # this activates the base environment micromamba install python=3.6 jupyter -c conda-forge # or micromamba create -n env_name xtensor -c conda-forge micromamba activate env_name An exclusive `conda-forge `_ setup can be configured with: .. code-block:: bash micromamba config append channels conda-forge micromamba config set channel_priority strict .. _umamba-install-win: Windows ~~~~~~~ | ``micromamba`` also has Windows support! For Windows, we recommend powershell. | Below are the commands to get micromamba installed in ``PowerShell``. .. code-block:: powershell Invoke-Webrequest -URI https://micro.mamba.pm/api/micromamba/win-64/latest -OutFile micromamba.tar.bz2 tar xf micromamba.tar.bz2 MOVE -Force Library\bin\micromamba.exe micromamba.exe .\micromamba.exe --help # You can use e.g. $HOME\micromambaenv as your base prefix $Env:MAMBA_ROOT_PREFIX="C:\Your\Root\Prefix" # Invoke the hook .\micromamba.exe shell hook -s powershell | Out-String | Invoke-Expression # ... or initialize the shell .\micromamba.exe shell init -s powershell -r C:\Your\Root\Prefix # and use micromamba directly micromamba create -f ./test/env_win.yaml -y micromamba activate yourenv Nightly builds ************** You can download fully statically linked builds for each commit to ``main`` on GitHub (scroll to the bottom of the "Summary" page): https://github.com/mamba-org/mamba/actions/workflows/static_build.yml?query=is%3Asuccess Docker images ************* The `mambaorg/micromamba `_ docker image can be used to run ``micromamba`` without installing it: .. code-block:: bash docker run -it --rm mambaorg/micromamba:latest micromamba info Build from source ***************** .. note:: These instructions do not work currently on Windows, which requires a more complex hybrid build. For up-to-date instructions on Windows and Unix, consult the scripts in the `micromamba-feedstock `_. To build from source, install the development dependencies, using a Conda compatible installer (``conda``/``mamba``/``micromamba``/``rattler``/``pixi``). .. code-block:: bash micromamba create -n mamba --file dev/environment-micromamba-static.yml micromamba activate mamba Use CMake from this environment to drive the build: .. code-block:: bash cmake -B build/ \ -G Ninja \ ${CMAKE_ARGS} \ -D CMAKE_INSTALL_PREFIX="${CONDA_PREFIX}" \ -D CMAKE_BUILD_TYPE="Release" \ -D BUILD_LIBMAMBA=ON \ -D BUILD_LIBMAMBA_SPDLOG=ON \ -D BUILD_STATIC=ON \ -D BUILD_MICROMAMBA=ON cmake --build build/ --parallel You will find the executable under "build/micromamba/micromamba". The executable can be striped to remove its size: .. code:: bash strip "build/micromamba/micromamba" .. _umamba-uninstall: Uninstalling Micromamba ************************ To completely remove ``micromamba`` from your system, follow these steps: .. note:: Before uninstalling, you can check your specific installation paths by running: .. code-block:: bash micromamba info This will show you important information such as: - ``envs directories``: where your environments are stored - ``package cache``: where downloaded packages are cached - ``user config files``: location of your ``.mambarc`` file - ``populated config files``: location of your ``.condarc`` file - ``root prefix``: the base directory for micromamba (usually shown as the first envs directory's parent) Use these paths to adapt the commands below to your specific installation. 1. Remove shell initialization ^^^^^^^^^^^^^^^^^^^^^^^^^^^ If you initialized your shell with ``micromamba shell init``, you need to remove the initialization code from your shell configuration files. Run the following command for each shell you initialized: .. code-block:: bash micromamba shell deinit -s bash # for bash micromamba shell deinit -s zsh # for zsh micromamba shell deinit -s fish # for fish micromamba shell deinit -s xonsh # for xonsh micromamba shell deinit -s csh # for csh/tcsh micromamba shell deinit -s nu # for nushell On Windows PowerShell: .. code-block:: powershell micromamba shell deinit -s powershell This will remove the mamba initialization block from your shell configuration files (``.bashrc``, ``.zshrc``, ``config.fish``, etc.). 2. Remove the micromamba executable ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The location of the ``micromamba`` executable depends on your installation method: **Automatic installation script:** The executable is typically installed to ``~/.local/bin/micromamba`` (Linux/macOS) or ``%LOCALAPPDATA%\micromamba\micromamba.exe`` (Windows). **Homebrew (macOS):** .. code-block:: bash brew uninstall micromamba **Manual installation:** Remove the directory where you extracted or installed the ``micromamba`` executable. 3. Remove the root prefix directory and package cache ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``micromamba`` stores all environments, packages, and cache in specific directories. Check ``micromamba info`` to find the exact locations for your installation: - The root prefix is typically the parent directory of the first ``envs directories`` path shown - The package cache location is shown under ``package cache`` By default, the root prefix is ``~/micromamba`` (Linux/macOS) or ``%USERPROFILE%\micromamba`` (Windows). If you specified a custom location with ``-r`` during initialization, use that location instead. .. code-block:: bash # Linux/macOS - remove the default root prefix rm -rf ~/micromamba # Or if you used a custom location (check with 'micromamba info'): rm -rf /path/to/your/custom/root/prefix # Also remove the package cache if it's in a separate location # (check the 'package cache' path from 'micromamba info') rm -rf ~/.cache/conda/pkgs # or your specific cache location On Windows PowerShell: .. code-block:: powershell Remove-Item -Recurse -Force $env:USERPROFILE\micromamba # Also remove package cache if separate (check 'micromamba info' for exact path) .. warning:: This will delete all environments, installed packages, and cached data. Make sure you have backed up any important environments or data before removing this directory. 4. Remove configuration files (optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Check ``micromamba info`` for the exact paths to your configuration files: - ``user config files`` shows the location of ``.mambarc`` - ``populated config files`` shows the location of ``.condarc`` If you want to remove these configuration files: .. code-block:: bash # Use the paths from 'micromamba info', or default locations: rm ~/.mambarc # if it exists rm ~/.condarc # if it exists and was only used for micromamba On Windows: .. code-block:: powershell # Use the paths from 'micromamba info', or default locations: Remove-Item $env:USERPROFILE\.mambarc -ErrorAction SilentlyContinue Remove-Item $env:USERPROFILE\.condarc -ErrorAction SilentlyContinue .. note:: If you also use ``conda`` or ``mamba`` (from Miniforge), be careful not to delete shared configuration files that are still needed. After completing these steps, ``micromamba`` will be completely removed from your system. ================================================ FILE: docs/source/tools/mermaid.css ================================================ .mermaid svg { max-width: 800px; } ================================================ FILE: docs/source/tools/mermaid.py ================================================ """ sphinx-mermaid ~~~~~~~~~~~~~~~ https://github.com/mgaitan/sphinxcontrib-mermaid Modified for the purpose of CoSApp by the CoSApp team https://gitlab.com/cosapp/cosapp Allow mermaid diagrams to be included in Sphinx-generated documents inline. :copyright: Copyright 2016 by Martín Gaitán and others, see AUTHORS. :license: BSD, see LICENSE for details. """ import codecs import os import posixpath from errno import ENOENT from hashlib import sha1 from subprocess import PIPE, Popen from tempfile import _get_default_tempdir import sphinx from docutils import nodes from docutils.parsers.rst import Directive, directives from docutils.statemachine import ViewList from sphinx.application import Sphinx from sphinx.errors import SphinxError from sphinx.locale import _ from sphinx.util import logging from sphinx.util.fileutil import copy_asset from sphinx.util.i18n import search_image_for_language from sphinx.util.osutil import ensuredir logger = logging.getLogger(__name__) class MermaidError(SphinxError): category = "Mermaid error" class mermaid(nodes.General, nodes.Inline, nodes.Element): pass def figure_wrapper(directive, node, caption): figure_node = nodes.figure("", node) if "align" in node: figure_node["align"] = node.attributes.pop("align") parsed = nodes.Element() directive.state.nested_parse(ViewList([caption], source=""), directive.content_offset, parsed) caption_node = nodes.caption(parsed[0].rawsource, "", *parsed[0].children) caption_node.source = parsed[0].source caption_node.line = parsed[0].line figure_node += caption_node return figure_node def align_spec(argument): return directives.choice(argument, ("left", "center", "right")) class Mermaid(Directive): """ Directive to insert arbitrary Mermaid markup. """ has_content = True required_arguments = 0 optional_arguments = 1 final_argument_whitespace = False option_spec = { "alt": directives.unchanged, "align": align_spec, "caption": directives.unchanged, } def get_mm_code(self): if self.arguments: # try to load mermaid code from an external file document = self.state.document if self.content: return [ document.reporter.warning( "Mermaid directive cannot have both content and a filename argument", line=self.lineno, ) ] env = self.state.document.settings.env argument = search_image_for_language(self.arguments[0], env) rel_filename, filename = env.relfn2path(argument) env.note_dependency(rel_filename) try: with codecs.open(filename, "r", "utf-8") as fp: mmcode = fp.read() except OSError: # noqa return [ document.reporter.warning( "External Mermaid file %r not found or reading it failed" % filename, line=self.lineno, ) ] else: # inline mermaid code mmcode = "\n".join(self.content) if not mmcode.strip(): return [ self.state_machine.reporter.warning( 'Ignoring "mermaid" directive without content.', line=self.lineno, ) ] return mmcode def run(self): node = mermaid() node["code"] = self.get_mm_code() node["options"] = {} if "alt" in self.options: node["alt"] = self.options["alt"] if "align" in self.options: node["align"] = self.options["align"] if "inline" in self.options: node["inline"] = True caption = self.options.get("caption") if caption: node = figure_wrapper(self, node, caption) return [node] def render_mm(self, code, options, fmt, prefix="mermaid"): """Render mermaid code into a PNG or PDF output file.""" if fmt == "raw": fmt = "png" mermaid_cmd = self.builder.config.mermaid_cmd hashkey = (code + str(options) + str(self.builder.config.mermaid_sequence_config)).encode( "utf-8" ) basename = f"{prefix}-{sha1(hashkey).hexdigest()}" fname = f"{basename}.{fmt}" relfn = posixpath.join(self.builder.imgpath, fname) outdir = os.path.join(self.builder.outdir, self.builder.imagedir) outfn = os.path.join(outdir, fname) tmpfn = os.path.join(_get_default_tempdir(), basename) if os.path.isfile(outfn): return relfn, outfn ensuredir(os.path.dirname(outfn)) # mermaid expects UTF-8 by default if isinstance(code, str): code = code.encode("utf-8") with open(tmpfn, "wb") as t: t.write(code) mm_args = [mermaid_cmd, "-i", tmpfn, "-o", outfn] mm_args.extend(self.builder.config.mermaid_params) if self.builder.config.mermaid_sequence_config: mm_args.extend("--configFile", self.builder.config.mermaid_sequence_config) try: p = Popen(mm_args, stdout=PIPE, stdin=PIPE, stderr=PIPE) except OSError as err: if err.errno != ENOENT: # No such file or directory raise logger.warning( "command %r cannot be run (needed for mermaid " "output), check the mermaid_cmd setting" % mermaid_cmd ) return None, None stdout, stderr = p.communicate(code) if self.builder.config.mermaid_verbose: logger.info(stdout) if p.returncode != 0: raise MermaidError(f"Mermaid exited with error:\n[stderr]\n{stderr}\n[stdout]\n{stdout}") if not os.path.isfile(outfn): raise MermaidError( "Mermaid did not produce an output file:\n[stderr]\n{}\n[stdout]\n{}".format( stderr, stdout ) ) return relfn, outfn def _render_mm_html_raw(self, node, code, options, prefix="mermaid", imgcls=None, alt=None): if "align" in node: tag_template = """
{code}
""" else: tag_template = """
{code}
""" self.body.append(tag_template.format(align=node.get("align"), code=self.encode(code))) raise nodes.SkipNode def render_mm_html(self, node, code, options, prefix="mermaid", imgcls=None, alt=None): fmt = self.builder.config.mermaid_output_format if fmt == "raw": return _render_mm_html_raw( self, node, code, options, prefix="mermaid", imgcls=None, alt=None ) try: if fmt not in ("png", "svg"): raise MermaidError( "mermaid_output_format must be one of 'raw', 'png', 'svg', but is %r" % fmt ) fname, outfn = render_mm(self, code, options, fmt, prefix) except MermaidError as exc: logger.warning("mermaid code %r: " % code + str(exc)) raise nodes.SkipNode if fname is None: self.body.append(self.encode(code)) else: if alt is None: alt = node.get("alt", self.encode(code).strip()) imgcss = imgcls and 'class="%s"' % imgcls or "" if fmt == "svg": svgtag = """

{}

\n""".format( fname, alt, ) self.body.append(svgtag) else: if "align" in node: self.body.append( '
'.format(node["align"], node["align"]) ) self.body.append(f'{alt}\n') if "align" in node: self.body.append("
\n") raise nodes.SkipNode def html_visit_mermaid(self, node): render_mm_html(self, node, node["code"], node["options"]) def render_mm_latex(self, node, code, options, prefix="mermaid"): try: fname, outfn = render_mm(self, code, options, "pdf", prefix) except MermaidError as exc: logger.warning("mm code %r: " % code + str(exc)) raise nodes.SkipNode if self.builder.config.mermaid_pdfcrop != "": mm_args = [self.builder.config.mermaid_pdfcrop, outfn] try: p = Popen(mm_args, stdout=PIPE, stdin=PIPE, stderr=PIPE) except OSError as err: if err.errno != ENOENT: # No such file or directory raise logger.warning( "command %r cannot be run (needed to crop pdf), \ check the mermaid_cmd setting" % self.builder.config.mermaid_pdfcrop ) return None, None stdout, stderr = p.communicate() if self.builder.config.mermaid_verbose: logger.info(stdout) if p.returncode != 0: raise MermaidError( f"PdfCrop exited with error:\n[stderr]\n{stderr}\n[stdout]\n{stdout}" ) if not os.path.isfile(outfn): raise MermaidError( "PdfCrop did not produce an output file:\n[stderr]\n%s\n" "[stdout]\n%s" % (stderr, stdout) ) fname = "{filename[0]}-crop{filename[1]}".format(filename=os.path.splitext(fname)) is_inline = self.is_inline(node) if is_inline: para_separator = "" else: para_separator = "\n" if fname is not None: post = None if not is_inline and "align" in node: if node["align"] == "left": self.body.append("{") post = "\\hspace*{\\fill}}" elif node["align"] == "right": self.body.append("{\\hspace*{\\fill}") post = "}" self.body.append(f"{para_separator}\\sphinxincludegraphics{{{fname}}}{para_separator}") if post: self.body.append(post) raise nodes.SkipNode def latex_visit_mermaid(self, node): render_mm_latex(self, node, node["code"], node["options"]) def render_mm_texinfo(self, node, code, options, prefix="mermaid"): try: fname, outfn = render_mm(self, code, options, "png", prefix) except MermaidError as exc: logger.warning("mm code %r: " % code + str(exc)) raise nodes.SkipNode if fname is not None: self.body.append("@image{%s,,,[mermaid],png}\n" % fname[:-4]) raise nodes.SkipNode def texinfo_visit_mermaid(self, node): render_mm_texinfo(self, node, node["code"], node["options"]) def text_visit_mermaid(self, node): if "alt" in node.attributes: self.add_text(_("[graph: %s]") % node["alt"]) else: self.add_text(_("[graph]")) raise nodes.SkipNode def man_visit_mermaid(self, node): if "alt" in node.attributes: self.body.append(_("[graph: %s]") % node["alt"]) else: self.body.append(_("[graph]")) raise nodes.SkipNode def config_inited(app, config): version = config.mermaid_version mermaid_js_url = f"https://unpkg.com/mermaid@{version}/dist/mermaid.min.js" app.add_js_file(mermaid_js_url) app.add_js_file( None, body='mermaid.initialize({startOnLoad:true, theme:"neutral", securityLevel="loose", \ sequenceConfig: {mirrorActors: false}});', ) app.add_css_file("mermaid.css") def on_build_finished(app: Sphinx, exc: Exception) -> None: if exc is None: src = os.path.join(os.path.dirname(__file__), "mermaid.css") dst = os.path.join(app.outdir, "_static") copy_asset(src, dst) def setup(app): app.add_node( mermaid, html=(html_visit_mermaid, None), latex=(latex_visit_mermaid, None), texinfo=(texinfo_visit_mermaid, None), text=(text_visit_mermaid, None), man=(man_visit_mermaid, None), ) app.add_directive("mermaid", Mermaid) # app.add_config_value("mermaid_cmd", "mmdc", "html") app.add_config_value("mermaid_pdfcrop", "", "html") app.add_config_value("mermaid_output_format", "raw", "html") app.add_config_value("mermaid_params", list(), "html") app.add_config_value("mermaid_verbose", False, "html") app.add_config_value("mermaid_sequence_config", False, "html") app.add_config_value("mermaid_version", "8.10.2", "html") app.connect("config-inited", config_inited) app.connect("build-finished", on_build_finished) return {"version": sphinx.__display_version__, "parallel_read_safe": True} ================================================ FILE: docs/source/tools/mermaid_inheritance.py ================================================ r""" mermaid_inheritance ~~~~~~~~~~~~~~~~~~~ Modified by the CoSApp team from sphinx.ext.inheritance_diagram https://gitlab.com/cosapp/cosapp Defines a docutils directive for inserting inheritance diagrams. Provide the directive with one or more classes or modules (separated by whitespace). For modules, all of the classes in that module will be used. Example:: Given the following classes: class A: pass class B(A): pass class C(A): pass class D(B, C): pass class E(B): pass .. inheritance-diagram: D E Produces a graph like the following: A / \ B C / \ / E D The graph is inserted as a PNG+image map into HTML and a PDF in LaTeX. :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from typing import Any, cast from collections.abc import Iterable import sphinx from docutils import nodes from docutils.nodes import Node from docutils.parsers.rst import directives from mermaid import render_mm_html, render_mm_latex, render_mm_texinfo from sphinx import addnodes from sphinx.application import Sphinx from sphinx.environment import BuildEnvironment from sphinx.ext.inheritance_diagram import ( InheritanceDiagram, InheritanceException, InheritanceGraph, figure_wrapper, get_graph_hash, inheritance_diagram, skip, ) from sphinx.writers.html import HTMLTranslator from sphinx.writers.latex import LaTeXTranslator from sphinx.writers.texinfo import TexinfoTranslator class MermaidGraph(InheritanceGraph): """ Given a list of classes, determines the set of classes that they inherit from all the way to the root "object", and then is able to generate a mermaid graph from them. """ # These are the default attrs default_graph_attrs = {} # 'rankdir': 'LR', # 'size': '"8.0, 12.0"', # 'bgcolor': 'transparent', # } default_node_attrs = {} # 'shape': 'box', # 'fontsize': 10, # 'height': 0.25, # 'fontname': '"Vera Sans, DejaVu Sans, Liberation Sans, ' # 'Arial, Helvetica, sans"', # 'style': '"setlinewidth(0.5),filled"', # 'fillcolor': 'white', # } default_edge_attrs = {} # 'arrowsize': 0.5, # 'style': '"setlinewidth(0.5)"', # } def _format_node_attrs(self, attrs: dict) -> str: # return ','.join(['%s=%s' % x for x in sorted(attrs.items())]) return "" def _format_graph_attrs(self, attrs: dict) -> str: # return ''.join(['%s=%s;\n' % x for x in sorted(attrs.items())]) return "" def generate_dot( self, name: str, urls: dict = {}, # noqa env: BuildEnvironment = None, graph_attrs: dict = {}, # noqa node_attrs: dict = {}, # noqa edge_attrs: dict = {}, # noqa ) -> str: """Generate a mermaid graph from the classes that were passed in to __init__. *name* is the name of the graph. *urls* is a dictionary mapping class names to HTTP URLs. *graph_attrs*, *node_attrs*, *edge_attrs* are dictionaries containing key/value pairs to pass on as graphviz properties. """ # g_attrs = self.default_graph_attrs.copy() # n_attrs = self.default_node_attrs.copy() # e_attrs = self.default_edge_attrs.copy() # g_attrs.update(graph_attrs) # n_attrs.update(node_attrs) # e_attrs.update(edge_attrs) # if env: # g_attrs.update(env.config.inheritance_graph_attrs) # n_attrs.update(env.config.inheritance_node_attrs) # e_attrs.update(env.config.inheritance_edge_attrs) res = [] # type: List[str] res.append("classDiagram\n") for name, fullname, bases, tooltip in sorted(self.class_info): # Write the node res.append(f" class {name!s}\n") if fullname in urls: res.append( ' link {!s} "./{!s}" {!s}\n'.format( name, urls[fullname], tooltip or f'"{name}"' ) ) # Write the edges for base_name in bases: res.append(f" {base_name!s} <|-- {name!s}\n") return "".join(res) class mermaid_inheritance(inheritance_diagram): """ A docutils node to use as a placeholder for the inheritance diagram. """ pass class MermaidDiagram(InheritanceDiagram): """ Run when the mermaid_inheritance directive is first encountered. """ has_content = False required_arguments = 1 optional_arguments = 0 final_argument_whitespace = True option_spec = { "parts": int, "private-bases": directives.flag, "caption": directives.unchanged, "top-classes": directives.unchanged_required, } def run(self) -> list[Node]: node = mermaid_inheritance() node.document = self.state.document class_names = self.arguments[0].split() class_role = self.env.get_domain("py").role("class") # Store the original content for use as a hash node["parts"] = self.options.get("parts", 0) node["content"] = ", ".join(class_names) node["top-classes"] = [] for cls in self.options.get("top-classes", "").split(","): cls = cls.strip() if cls: node["top-classes"].append(cls) # Create a graph starting with the list of classes try: graph = MermaidGraph( class_names, self.env.ref_context.get("py:module"), parts=node["parts"], private_bases="private-bases" in self.options, aliases=self.config.inheritance_alias, top_classes=node["top-classes"], ) except InheritanceException as err: return [node.document.reporter.warning(err, line=self.lineno)] # Create xref nodes for each target of the graph's image map and # add them to the doc tree so that Sphinx can resolve the # references to real URLs later. These nodes will eventually be # removed from the doctree after we're done with them. for name in graph.get_all_class_names(): refnodes, x = class_role( # type: ignore "class", ":class:`%s`" % name, name, 0, self.state ) # type: ignore node.extend(refnodes) # Store the graph object so we can use it to generate the # dot file later node["graph"] = graph if "caption" not in self.options: self.add_name(node) return [node] else: figure = figure_wrapper(self, node, self.options["caption"]) self.add_name(figure) return [figure] def html_visit_mermaid_inheritance(self: HTMLTranslator, node: inheritance_diagram) -> None: """ Output the graph for HTML. This will insert a PNG with clickable image map. """ graph = node["graph"] graph_hash = get_graph_hash(node) name = "inheritance%s" % graph_hash # Create a mapping from fully-qualified class names to URLs. mermaid_output_format = self.builder.env.config.mermaid_output_format.upper() current_filename = self.builder.current_docname + self.builder.out_suffix urls = {} pending_xrefs = cast(Iterable[addnodes.pending_xref], node) for child in pending_xrefs: if child.get("refuri") is not None: if mermaid_output_format == "SVG": urls[child["reftitle"]] = "../" + child.get("refuri") else: urls[child["reftitle"]] = child.get("refuri") elif child.get("refid") is not None: if mermaid_output_format == "SVG": urls[child["reftitle"]] = "../" + current_filename + "#" + child.get("refid") else: urls[child["reftitle"]] = "#" + child.get("refid") dotcode = graph.generate_dot(name, urls, env=self.builder.env) render_mm_html( self, node, dotcode, {}, "inheritance", "inheritance", alt="Inheritance diagram of " + node["content"], ) raise nodes.SkipNode def latex_visit_mermaid_inheritance(self: LaTeXTranslator, node: inheritance_diagram) -> None: """ Output the graph for LaTeX. This will insert a PDF. """ graph = node["graph"] graph_hash = get_graph_hash(node) name = "inheritance%s" % graph_hash dotcode = graph.generate_dot( name, env=self.builder.env, ) # graph_attrs={'size': '"6.0,6.0"'}) render_mm_latex(self, node, dotcode, {}, "inheritance") raise nodes.SkipNode def texinfo_visit_mermaid_inheritance(self: TexinfoTranslator, node: inheritance_diagram) -> None: """ Output the graph for Texinfo. This will insert a PNG. """ graph = node["graph"] graph_hash = get_graph_hash(node) name = "inheritance%s" % graph_hash dotcode = graph.generate_dot( name, env=self.builder.env, ) # graph_attrs={'size': '"6.0,6.0"'}) render_mm_texinfo(self, node, dotcode, {}, "inheritance") raise nodes.SkipNode def setup(app: Sphinx) -> dict[str, Any]: app.setup_extension("mermaid") app.add_node( mermaid_inheritance, latex=(latex_visit_mermaid_inheritance, None), html=(html_visit_mermaid_inheritance, None), text=(skip, None), man=(skip, None), texinfo=(texinfo_visit_mermaid_inheritance, None), ) app.add_directive("mermaid-inheritance", MermaidDiagram) # app.add_config_value('mermaid_inheritance_graph_attrs', {}, False) # app.add_config_value('mermaid_inheritance_node_attrs', {}, False) # app.add_config_value('mermaid_inheritance_edge_attrs', {}, False) app.add_config_value("inheritance_alias", {}, False) return {"version": sphinx.__display_version__, "parallel_read_safe": True} ================================================ FILE: docs/source/usage/solver.rst ================================================ .. _mamba_usage_solver: Solving Package Environments ============================ .. |MatchSpec| replace:: :cpp:type:`MatchSpec ` .. |PackageInfo| replace:: :cpp:type:`PackageInfo ` .. |Database| replace:: :cpp:type:`Database ` .. |Request| replace:: :cpp:type:`Request ` .. |Solver| replace:: :cpp:type:`Solver ` .. |Solution| replace:: :cpp:type:`Solution ` .. |UnSolvable| replace:: :cpp:type:`UnSolvable ` The :any:`libmambapy.solver ` submodule contains a generic API for solving requirements (|MatchSpec|) into a list of packages (|PackageInfo|) with no conflicting dependencies. .. note:: Solving Package Environments can be cast as a Boolean satisfiability problem (SAT). Mamba currently only uses one `SAT solver `_: `LibSolv `_. For this reason, the generic interface has not been fully completed and users need to access the submodule :any:`libmambapy.solver.libsolv ` for certain types. Populating the Package Database ------------------------------- The first thing needed is a |Database| of all the packages and their dependencies. Packages are organised in repositories, described by a :cpp:type:`RepoInfo `. This serves to resolve explicit channel requirements or channel priority. As such, the database constructor takes a set of :cpp:type:`ChannelResolveParams ` to work with :cpp:type:`Channel ` data internally (see :ref:`the usage section on Channels ` for more information). The first way to add a repository is from a list of |PackageInfo| using :cpp:func:`DataBase.add_repo_from_packages `: .. code:: python import libmambapy channel_alias = libmambapy.specs.CondaURL.parse("https://conda.anaconda.org") db = libmambapy.solver.libsolv.Database( libmambapy.specs.ChannelResolveParams(channel_alias=channel_alias) ) repo1 = db.add_repo_from_packages( packages=[ libmambapy.specs.PackageInfo(name="python", version="3.8", ...), libmambapy.specs.PackageInfo(name="pip", version="3.9", ...), ..., ], name="myrepo", ) The second way of loading packages is through Conda's repository index format ``repodata.json`` using :cpp:func:`DataBase.add_repo_from_repodata_json `. This is meant for convenience, and is not a performant alternative to the former method, since these files grow large. .. code:: python repo2 = db.add_repo_from_repodata_json( path="path/to/repodata.json", url="htts://conda.anaconda.org/conda-forge/linux-64", channel_id="conda-forge", ) One of the repositories can be set to have a special meaning of "installed repository". It is used as a reference point in the solver to compute changes. For instance, if a package is required but is already available in the installed repo, the solving result will not mention it. The function :cpp:func:`DataBase.set_installed_repo ` is used for that purpose. .. code:: python db.set_installed_repo(repo1) Binary serialization of the database (Advanced) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The |Database| reporitories can be serialized in binary format for faster reloading. To ensure integrity and freshness of the serialized file, metadata about the packages, such as source url and :cpp:type:`RepodataOrigin `, are stored inside the file when calling :cpp:func:`DataBase.native_serialize_repo ` . Upon reading, similar parameters are expected as inputs to :cpp:func:`DataBase.add_repo_from_native_serialization `. If they mismatch, the loading results in an error. A typical wokflow first tries to load a repository from such binary cache, and then quietly fallbacks to ``repodata.json`` on failure. Creating a solving request -------------------------- All jobs that need to be resolved are added as part of a |Request|. This includes installing, updating, removing packages, as well as solving cutomization parameters. .. code:: python Request = libmambapy.solver.Request MatchSpec = libmambapy.specs.MatchSpec request = Request( jobs=[ Request.Install(MatchSpec.parse("python>=3.9")), Request.Update(MatchSpec.parse("numpy")), Request.Remove(MatchSpec.parse("pandas"), clean_dependencies=False), ], flags=Request.Flags( allow_downgrade=True, allow_uninstall=True, ), ) Solving the request ------------------- The |Request| and the |Database| are the two input parameters needed to solve an environment. This task is achieved with the :cpp:func:`Solver.solve ` method. .. code:: python solver = libmambapy.solver.libsolv.Solver() outcome = solver.solve(db, request) The outcome can be of two types, either a |Solution| listing packages (|Packageinfo|) and the action to take on them (install, remove...), or an |UnSolvable| type when no solution exists (because of conflict, missing packages...). Examine the solution ~~~~~~~~~~~~~~~~~~~~ We can test if a valid solution exists by checking the type of the outcome. The attribute :cpp:member:`Solution.actions ` contains the actions to take on the installed repository so that it satisfies the |Request| requirements. .. code:: python Solution = libmambapy.solver.Solution if isinstance(outcome, Solution): for action in outcome.actions: if isinstance(action, Solution.Upgrade): my_upgrade(from_pkg=action.remove, to_pkg=action.install) if isinstance(action, Solution.Reinstall): ... ... Alternatively, an easy way to compute the update to the environment is to check for ``install`` and ``remove`` members, since they will populate the relevant fields for all actions: .. code:: python Solution = libmambapy.solver.Solution if isinstance(outcome, Solution): for action in outcome.actions: if hasattr(action, "install"): my_download_and_install(action.install) # WARN: Do not use `elif` since actions like `Upgrade` # are represented as an `install` and `remove` pair. if hasattr(action, "remove"): my_delete(action.remove) Understand unsolvable problems ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When a problem has no |Solution|, it is inherenty hard to come up with an explanation. In the easiest case, a required package is missing from the |Database|. In the most complex, many package dependencies are incompatible without a single culprit. In this case, packages should be rebuilt with weaker requirements, or with more build variants. The |UnSolvable| class attempts to build an explanation. The :cpp:func:`UnSolvable.problems ` is a list of problems, as defined by the solver. It is not easy to understand without linking it to specific |MatchSpec| and |PackageInfo|. The method :cpp:func:`UnSolvable.problems_graph ` gives a more structured graph of package dependencies and incompatibilities. This graph is the underlying mechanism used in :cpp:func:`UnSolvable.explain_problems ` to build a detail unsolvability message. ================================================ FILE: docs/source/usage/specs.rst ================================================ .. _mamba_usage_specs: Describing Conda Objects ======================== .. |CondaURL| replace:: :cpp:type:`CondaURL ` .. |UnresolvedChannel| replace:: :cpp:type:`UnresolvedChannel ` .. |Channel| replace:: :cpp:type:`Channel ` .. |Version| replace:: :cpp:type:`Version ` .. |VersionSpec| replace:: :cpp:type:`VersionSpec ` .. |BuildNumberSpec| replace:: :cpp:type:`BuildNumberSpec ` .. |GlobSpec| replace:: :cpp:type:`GlobSpec ` .. |MatchSpec| replace:: :cpp:type:`MatchSpec ` The :any:`libmambapy.specs ` submodule contains objects to *describe* abstraction in the Conda ecosystem. They are purely functional and do not have any observable impact on the user system. For instance |Channel| is used to describe a channel but does not download any file. CondaURL -------- The |CondaURL| is a rich URL object that has additional capabilities for dealing with tokens, platforms, and packages. To parse a string into a |CondaURL|, use :cpp:func:`CondaURL.parse ` as follows: .. code:: python import libmambapy.specs as specs url = specs.CondaURL.parse( "https://conda.anaconda.org/t/someprivatetoken/conda-forge/linux-64/x264-1%21164.3095-h166bdaf_2.tar.bz2" ) assert url.host() == "conda.anaconda.org" assert url.package() == "x264-1!164.3095-h166bdaf_2.tar.bz2" assert url.package(decode=False) == "x264-1%21164.3095-h166bdaf_2.tar.bz2" The :cpp:func:`CondaURL.parse ` method assumes that the URL is properly `percent encoded `_. For instance, here the character ``!`` in the file name ``x264-1!164.3095-h166bdaf_2.tar.bz2`` had to be replaced with ``%21``. The getter functions, such as :cpp:func:`CondaURL.package ` automatically decoded it for us, but we can specify ``decode=False`` to keep the raw representation. The setters follow the same logic, as described below. .. code:: python import libmambapy.specs as specs url = specs.CondaURL() url.set_host("mamba.pm") url.set_user("my%20name", encode=False) url.set_password("nd!3gfsd") assert url.user() == "my name" assert url.user(decode=False) == "my%20name" assert url.password() == "nd!3gfsd" assert url.password(decode=False) == "n%26%234d%213gfsd" Path manipulation is handled automatically, either with :cpp:func:`CondaURL.append_path ` or the ``/`` operator. .. code:: python import libmambapy.specs as specs url1 = specs.CondaURL.parse("mamba.pm") url2 = url / "/t/xy-12345678-1234/conda-forge/linux-64" assert url1.path() == "/" assert url2.path() == "/t/xy-12345678-1234/conda-forge/linux-64" assert url2.path_without_token() == "/conda-forge/linux-64" You can always assume that the paths returned will start with a leading ``/``. As always, encoding and decoding options are available. .. note:: Contrary to ``pathlib.Path``, the ``/`` operator will always append, even when the sub-path starts with a ``/``. The function :cpp:func:`CondaURL.str ` can be used to get a raw representation of the string. By default, it will hide all credentials .. code:: python import libmambapy.specs as specs url = specs.CondaURL.parse("mamba.pm/conda-forge") url.set_user("user@mail.com") url.set_password("private") url.set_token("xy-12345678-1234") assert url.str() == "https://user%40mail.com:*****@mamba.pm/t/*****" assert ( url.str(credentials="Show") == "https://user%40mail.com:private@mamba.pm/t/xy-12345678-1234" ) assert url.str(credentials="Remove") == "https://mamba.pm/" Similarly the :cpp:func:`CondaURL.pretty_str ` returns a more user-friendly string, but that may not be parsed back. UnresolvedChannel ----------------- A |UnresolvedChannel| is a lightweight object to represent a channel string, as in passed in the CLI or configuration. Since channels rely heavily on configuration options, this type can be used as a placeholder for a channel that has not been fully "resolved" to a specific location. It does minimal parsing and can detect the type of resource (an unresolved name, a URL, a file) and the platform filters. .. code:: python import libmambapy.specs as specs uc = specs.UnresolvedChannel.parse("https://conda.anaconda.org/conda-forge/linux-64") assert uc.location == "https://conda.anaconda.org/conda-forge" assert uc.platform_filters == {"linux-64"} assert uc.type == specs.UnresolvedChannel.Type.URL Dynamic platforms (as in not known by Mamba) can only be detected with the ``[]`` syntax. .. code:: python import libmambapy.specs as specs uc = specs.UnresolvedChannel.parse("conda-forge[prius-avx42]") assert uc.location == "conda-forge" assert uc.platform_filters == {"prius-avx42"} assert uc.type == specs.UnresolvedChannel.Type.Name .. _libmamba_usage_channel: Channel ------- The |Channel| are represented by a |CondaURL| and a set of platform filters. A display name is also available, but is not considered a stable identification form of the channel, since it depends on the many configuration parameters, such as the channel alias. We construct a |Channel| by *resolving* a |UnresolvedChannel|. All parameters that influence this resolution must be provided explicitly. .. code:: python import libmambapy.specs as specs import libmambapy.specs.CondaURL as CondaURL uc = specs.UnresolvedChannel.parse("conda-forge[prius-avx42]") chan, *_ = specs.Channel.resolve( uc, channel_alias=CondaURL.parse("https://repo.mamba.pm"), # ... ) assert chan.url.str() == "https://repo.mamba.pm/conda-forge" assert chan.platforms == {"prius-avx42"} assert chan.display_name == "conda-forge[prius-avx42]" There are no hard-coded names: .. code:: python import libmambapy.specs as specs import libmambapy.specs.CondaURL as CondaURL uc = specs.UnresolvedChannel.parse("defaults") chan, *_ = specs.Channel.resolve( uc, channel_alias=CondaURL.parse("https://repo.mamba.pm"), # ... ) assert chan.url.str() == "https://repo.mamba.pm/defaults" You may have noticed that :cpp:func:`Channel.resolve ` returns multiple channels. This is because of custom multichannels, a single name can return multiple channels. .. code:: python import libmambapy.specs as specs chan_main, *_ = specs.Channel.resolve( specs.UnresolvedChannel.parse("pkgs/main"), # ... ) chan_r, *_ = specs.Channel.resolve( specs.UnresolvedChannel.parse("pkgs/r"), # ... ) defaults = specs.Channel.resolve( specs.UnresolvedChannel.parse("defaults"), custom_multichannels=specs.Channel.MultiChannelMap( {"defaults": [chan_main, chan_r]} ), # ... ) assert defaults == [chan_main, chan_r] .. note:: Creating |Channel| objects this way, while highly customizable, can be very verbose. In practice, one can create a ``ChannelContext`` with ``ChannelContext.make_simple`` or ``ChannelContext.make_conda_compatible`` to compute and hold all these parameters from a ``Context`` (itself getting its values from all the configuration sources). ``ChannelContext.make_channel`` can then directly construct a |Channel| from a string. Version ------- In the conda ecosystem, a version is an epoch and a pair of arbitrary length sequences of arbitrary length sequences of string and integer pairs. Let's unpack this with an example. The version ``1.2.3`` is the outer sequence, it can actually contain as many elements as needed so ``1.2.3.4.5.6.7`` is also a valid version. For alpha version, we sometimes see something like ``1.0.0alpha1``. That's the inner sequence of pairs, for the last part ``[(0, "alpha"), (1, "")]``. There can also be any number, such as in ``1.0.0alpha1dev3``. We can specify another *"local"* version, that we can separate with a ``+``, as in ``1.9.0+2.0.0``, but that is not widely used. Finally, there is also an epoch, similar to `PEP440 `_, to accommodate for change in the versioning scheme. For instance, in ``1!2.0.3``, the epoch is ``1``. To sum up, a version like ``7!1.2a3.5b4dev+1.3.0``, can be parsed as: - **epoch**: ``7``, - **version**: ``[[(1, "")], [(2, "a"), (3, "")], [(5, "b"), (4, "dev")]]`` - **local version**: ``[[(1, "")], [(3, "")], [(0, "")]]`` Finally, all versions are considered equal to the same version with any number of trailing zeros, so ``1.2``, ``1.2.0``, and ``1.2.0.0`` are all considered equal. .. warning:: The flexibility of conda versions (arguably too flexible) is meant to accommodate differences in various ecosystems. Library authors should stick to well defined version schemes such as `semantic versioning `_, `calendar versioning `_, or `PEP440 `_. A |Version| can be created by parsing a string with :cpp:func:`Version.parse `. .. code:: python import libmambapy.specs as specs v = specs.Version.parse("7!1.2a3.5b4dev+1.3.0") The most useful operations on versions is to compare them. All comparison operators are available: .. code:: python import libmambapy.specs as specs assert specs.Version.parse("1.2.0") == specs.Version.parse("1.2.0.0") assert specs.Version.parse("1.2.0") < specs.Version.parse("1.3") assert specs.Version.parse("2!4.0.0") >= specs.Version.parse("1.8") VersionSpec ----------- A version spec is a way to describe a set of versions. We have the following primitives: - ``*`` matches all versions (unrestricted). - ``==`` for **equal** matches versions equal to the given one (a singleton). For instance ``==1.2.4`` matches ``1.2.4`` only, and not ``1.2.4.1`` or ``1.2``. Note that since ``1.2.4.0`` is the same as ``1.2.4``, this is also matched. - ``!=`` for **not equal** is the opposite, it matches all but the given version. For instance ``=!1.2.4`` matches ``1.2.5`` and ``1!1.2.4`` but not ``1.2.4``. - ``>`` for **greater** matches versions strictly greater than the current one, for instance ``>1.2.4`` matches ``2.0.0``, ``1!1.0.0``, but not ``1.1.0`` or ``1.2.4``. - ``>=`` for **greater or equal**. - ``<`` for **less**. - ``<=`` for **less or equal**. - ``=`` for **starts with** matches versions that start with the same non zero parts of the version. For instance ``=1.7`` matches ``1.7.8``, and ``1.7.0alpha1`` (beware since this is smaller than ``1.7.0``). This spec can equivalently be written ``1.7`` (bare), ``1.7.*``, or ``=1.7.*``. - ``=!`` with ``.*`` for **not starts with** matches all versions but the one that starts with the non zero parts specified. For instance ``!=1.7.*`` matches ``1.8.3`` but not ``1.7.2``. - ``~=`` for **compatible with** matches versions that are greater or equal and starting with the all but the last parts specified, including zeros. For instance ``~=2.0`` matches ``2.0.0``, ``2.1.3``, but not ``3.0.1`` or ``2.0.0alpha``. All version specs can be combined using a boolean grammar where ``|`` means **or** and ``,`` means **and**. For instance, ``(>2.1.0,<3.0)|==2.0.1`` means: - Either - equal to ``2.0.1``, - or, both - greater that ``2.1.0`` - and less than ``3.0``. To create a |VersionSpec| from a string, we parse it with :cpp:func:`VersionSpec.parse `. To check if a given version matches a version spec, we use :cpp:func:`VersionSpec.contains `. .. code:: python import libmambapy.specs as specs vs = specs.VersionSpec.parse("(>2.1.0,<3.0)|==2.0.1") assert vs.contains(specs.Version.parse("2.4.0")) assert vs.contains(specs.Version.parse("2.0.1")) assert not vs.contains(specs.Version.parse("3.0.1")) .. warning:: Single versions such as ``3.7`` are parsed by Conda and Mamba as ``==3.7``, which can seem unintuitive. As such, it is recommended to always specify an operator. This mistake is especially likely when writing a match spec such as ``python 3.7``. BuildNumberSpec --------------- Similarly, a build number spec is a way to describe a set of build numbers. It's much simpler than the |VersionSpec| in that it does not contain any boolean grammar (the ``,`` and ``|`` operators). |BuildNumberSpec| only contain primitives similar to those used in |VersionSpec|: - ``*`` or ``=*`` matches all build numbers (unrestricted). - ``=`` for **equal** matches build numbers equal to the given one (a singleton). - ``!=`` for **not equal**. - ``>`` for **greater** matches versions strictly greater than the current one. - ``>=`` for **greater or equal**. - ``<`` for **less**. - ``<=`` for **less or equal**. To create a |BuildNumberSpec| from a string, we parse it with :cpp:func:`BuildNumberSpec.parse `. To check if a given build number matches a build number spec, we use :cpp:func:`BuildNumberSpec.contains `. .. code:: python import libmambapy.specs as specs bs = specs.BuildNumberSpec.parse(">2") assert bs.contains(3) assert not bs.contains(2) Other Specs ----------- The |GlobSpec| is used to match glob expressions on strings. The only wildcard currently supported is ``*`` which stands for any string (0 or more characters). The glob spec is used as the basis for the |MatchSpec| package name and build string. .. code:: python import libmambapy.specs as specs glob = specs.GlobSpec.parse("py*") assert glob.contains("python") assert glob.contains("pypy") assert not vs.contains("rust-python") MatchSpec --------- Ultimately, the |MatchSpec| is the way to match on conda packages, that is a way to describe a set of packages. This is what is passed in a command line argument such as ``mamba install ``. Match specs have a complex string representation, which we can informally write as ``[[:]:][[=]][[=, [...]]]``, or with an example ``conda-forge:ns:python>=3.7=*cypthon[subdir="linux-64",fn=pkg.conda]``. - ````, here ``conda-forge``, describes an |UnresolvedChannel| where the package should come from. It accepts all values from an unresolved channel, such as ``conda-forge/label/micromamba_dev``, URL, local file path, and platforms filters in between brackets. - ````, here ``ns`` is a future, not implemented, feature. It is nonetheless parsed, and retrievable. - ````, here ``python`` is the package name or glob expression and is the only mandatory field. - Following is the |VersionSpec| ```` or ``>=3.7`` here. - When the version specification is written (but it could also be set to ``=*``), it can be followed by a ```` glob specification, here ``*cpython``. - Last, a bracket section of comma separated ```` = ````. In the example, we have two attributes, ``subdir`` and ``fn``. Attribute values support quoting with ``"`` or ``'``. As such, they can be useful to set previously mentioned fields without ambiguity. Valid attribute names are: - ``channel``, similar to ````. - ``name``, similar to ````. - ``version``, similar to ```` (can be useful to set version expression containing parentheses and ``,`` and ``|`` operators). - ``build``, similar to ````. - ``build_number`` to set the |BuildNumberSpec|. - ``subdir`` to select the channel subdirectory platform from which the package must come. - ``fn`` to select the filename the package must match. - ``md5`` to specify the MD5 hash the package archive must have. - ``sha256`` to specify the SHA256 hash the package archive must have. - ``license`` to specify the license the package must have. - ``track_features`` to specify a list of ``track_features`` specified at the package build time. - ``optional`` to add the package as a constraint rather than a strict dependency. .. warning:: Specifying some value multiple times, such as in ``python>=3.7[version="(=3.9|>3.11)"]``, or ``python[build="foo"][build="bar"]`` is undefined and subject to change in the future. .. warning:: When specifying a version in the attribute section, the first ``=`` is parsed as the attribute assignment. That is ``python[version=3.7]`` is equivalent to ``python 3.7``, which is equivalent to ``python==3.7`` (strong equality). This is intuitively different from how we write ``python=3.7``, which we must write with attributes as ``python[version="=3.7"]``. The method :cpp:func:`MatchSpec.contains_except_channel ` can be used to check if a package is contained (matched) by the current |MatchSpec|. The somewhat verbose name serves to indicate that the channel is ignored in this function. As mentioned in the :ref:`Channel section`, resolving and matching channels is a delicate operation. In addition, the channel is a part that describes the **provenance** of a package and not its content, so various applications may want to handle it in different ways. The :cpp:func:`MatchSpec.channel ` attribute can be used to reason about the possible channels contained in the |MatchSpec|. .. code:: python import libmambapy.specs as specs ms = specs.MatchSpec.parse("conda-forge::py*[build_number='>4']") assert ms.contains(name="python", build_number=5) assert not ms.contains(name="numpy", build_number=8) assert ms.channel.location == "conda-forge" ================================================ FILE: docs/source/user_guide/concepts.rst ================================================ .. _concepts: Concepts -------- A few concepts are extensively used in ``Mamba`` and in this documentation as well. You should start by getting familiar with those as a starting point. .. _prefix: Prefix/Environment ================== In Unix-like platforms, installing a piece of software consists of placing files in subdirectories of an "installation prefix": .. image:: prefix.png :height: 300 :align: center - no file is placed outside of the installation *prefix* - dependencies must be installed in the same *prefix* (or standard system prefixes with lower precedence) .. note:: Examples on Unix: the root of the filesystem, the ``/usr/`` and ``/usr/local/`` directories. | A *prefix* is a fully self-contained and portable installation. | To disambiguate with :ref:`root prefix`, *prefix* is often referred to as *target prefix*. Without an explicit *target* or *root* prefix, you can assume it refers to a *target prefix*. An *environment* is just another name for a *target prefix*. Mamba's environments are similar to virtual environments as seen in Python's ``virtualenv`` and similar software, but more powerful since Mamba also manages *native* dependencies and generalizes the virtual environment concept to many programming languages. .. _root-prefix: Root prefix =========== When downloading for the first time the index of packages for resolution of the environment, or the packages themselves, a *cache* is generated to speed up future operations: - the index has a :ref:`configurable` time-to-live (TTL) during which it will be considered as valid - the packages are preferentially hard-linked to the *cache* location This *cache* is shared by all *environments* or *target prefixes* based on the same *root prefix*. Basically, that *cache* directory is a subdirectory located at ``$root_prefix/pkgs/``. The *root prefix* also provide a convenient structure to store *environments* ``$root_prefix/envs/``, even if you are free to create an *environment* elsewhere. .. _base-env: Base environment ================ The *base* environment is the environment located at the *root prefix*. | This is a legacy *environment* from ``conda`` implementation that is still heavily used. | The *base* environment contains the ``conda`` and ``mamba`` installation alongside a Python installation (since ``mamba`` and ``conda`` require Python to run). | ``mamba`` and ``conda``, being themselves Python packages, are installed in the *base* environment, making the CLIs available in all *activated* environments *based* on this *base* environment. .. note:: You can't ``create`` the *base* environment because it's already part of the *root prefix* structure. Directly ``install`` in *base* instead. Activation/Deactivation ======================= .. _activation: Activation ********** The *activation* of an :ref:`environment` makes all its contents available to your shell. It mainly adds *target prefix* subdirectories to your ``$PATH`` environment variable. .. note:: *activation* implementation is platform dependent. | When *activating* an environment from another, you can choose to ``stack`` or not upon the currently activated env. | Stacking will result in a new intermediate :ref:`prefix`: ``system prefix < base < env1 < env2``. .. _deactivation: Deactivation ************ The *deactivation* is the opposite operation of :ref:`activation`, removing from your shell what makes the environment content accessible. .. _shell_completion: Shell completion **************** After initialization, shell completion is available in any new shell. Just hit ```` to get completion when typing your command. For example the following command will help you to pick a named environment to activate: .. code-block:: bash micromamba activate ================================================ FILE: docs/source/user_guide/configuration.rst ================================================ .. _configuration: Configuration ============= Overview -------- While ``mamba`` currently relies on ``conda`` configuration, ``libmamba`` and downstream projects such as ``micromamba`` or ``rhumba`` rely on a pure C++ implementation. .. note:: For ``mamba`` configuration, please refer to `conda documentation `_ The configuration is parsed/read from multiple sources types: - **rc file**: a file using ``YAML`` syntax - **environment variable**: a key/value pair set prior to mamba execution - **CLI**: a parsed argument/option from a CLI interface - **API**: a value set programmatically by a program relying on mamba The precedence order between those sources is: .. image:: config_srcs.svg :width: 600 :align: center .. note:: ``rc`` file stands historically for ``run commands`` which could also translate to ``runtime configuration``. It's a convenient way to persist configuration on the filesystem and use it as default. .. _precedence-resolution: Precedence resolution --------------------- Depending on its type, the resolution of a configuration value between multiple sources is: - scalar (boolean, string): value from highest precedence source - sequence (list): appended from highest precedence source to lowest Example: Running ``micromamba install xtensor -c my-channel`` with 3 sources of configuration: - ``channels`` and ``always_yes`` set from rc file located at ``~/.mambarc``. - ``channels`` set from CLI using ``-c`` option. - ``always_yes`` set from environment variable using ``MAMBA_ALWAYS_YES`` env var .. code:: $ cat ~/.mambarc channels: - conda-forge always_yes: false .. code:: $ echo $MAMBA_ALWAYS_YES true The resulting configuration written using ``YAML`` syntax is: .. code:: $ micromamba config list --sources channels: - my-channel # 'CLI' - conda-forge # '~/.mambarc' always_yes: true # 'MAMBA_ALWAYS_YES' > '~/.mambarc' Multiple rc files ----------------- A user may have multiple rc files located at different places on their machine. It's a convenient way for configuration to apply in given scopes: - system wide: all users - root prefix: all environments sharing the same root prefix - current user - target prefix: a specific target prefix | environment - a single use Alternatively, ones could also pass one or more rc files to use from the CLI. Other sources are then ignored. RC files have their own precedence order and use the same resolution process as other configuration sources: .. image:: config_rc_srcs.svg :width: 800 :align: center .. code:: // on_unix { "/etc/conda/.condarc", "/etc/conda/condarc", "/etc/conda/condarc.d/", "/etc/conda/.mambarc", "/var/lib/conda/.condarc", "/var/lib/conda/condarc", "/var/lib/conda/condarc.d/", "/var/lib/conda/.mambarc" } // on_win { "C:\\ProgramData\\conda\\.condarc", "C:\\ProgramData\\conda\\condarc", "C:\\ProgramData\\conda\\condarc.d", "C:\\ProgramData\\conda\\.mambarc" } { root_prefix }/.condarc { root_prefix }/condarc { root_prefix }/condarc.d { root_prefix }/.mambarc ~/.conda/.condarc ~/.conda/condarc ~/.conda/condarc.d ~/.condarc ~/.mambarc { target_prefix }/.condarc { target_prefix }/condarc { target_prefix }/condarc.d { target_prefix }/.mambarc $CONDARC, $MAMBARC; ================================================ FILE: docs/source/user_guide/mamba.rst ================================================ .. _mamba: Mamba User Guide ---------------- ``mamba`` is a CLI tool to manage ``conda`` s environments. If you already know ``conda``, great, you already know ``mamba``! If you're new to this world, don't panic you will find everything you need in this documentation. We recommend to get familiar with :ref:`concepts` first. Quickstart ========== The ``mamba create`` command creates a new environment. You can create an environment with the name ``nameofmyenv`` by calling: .. code:: shell mamba create -n nameofmyenv After this process has finished, you can :ref:`activate` the virtual environment by calling ``mamba activate ``. For example, to install JupyterLab from the ``conda-forge`` channel and then run it, you could use the following commands: .. code:: shell mamba create -n myjlabenv jupyterlab -c conda-forge mamba activate myjlabenv # activate our environment jupyter lab # this will start up jupyter lab and open a browser Once an environment is activated, ``mamba install`` can be used to install further packages into the environment. .. code:: shell mamba activate myjlabenv mamba install bqplot # now you can use bqplot in myjlabenv mamba install "matplotlib>=3.5.0" cartopy # now you installed matplotlib with version>=3.5.0 and default version of cartopy Instead of activating an environment, you can also execute a command inside the environment by calling ``mamba run -n ``. For instance, the previous activation example is similar to: .. code:: shell mamba run -n myjlabenv jupyter lab ``mamba`` vs ``conda`` CLIs =========================== ``mamba`` and ``conda`` mainly have the same command line arguments with a few differences. For simple cases, you can swap one for the other. For a full ``conda`` compatible experience, ``conda`` itself uses Mamba's solver under the hood, so you can get great speedups from previous versions. .. code:: $ mamba --help shell Generate shell init scripts create Create new environment install Install packages in active environment update Update packages in active environment repoquery Find and analyze packages in active environment or channels remove, uninstall Remove packages from active environment list List packages in active environment package Extract a package or bundle files into an archive clean Clean package cache config Configuration of micromamba info Information about micromamba constructor Commands to support using micromamba in constructor env See mamba/micromamba env --help activate Activate an environment run Run an executable in an environment ps Show, inspect or kill running processes auth Login or logout of a given host search Find packages in active environment or channels This is equivalent to `repoquery search` command Specification files =================== The ``create`` syntax also allows you to use specification or environment files (also called *spec files*) to easily re-create environments. The supported syntaxes are: .. contents:: :local: Simple text spec files ********************** The ``txt`` file contains *one spec per line*. For example, this could look like: .. code:: xtensor numpy 1.19 xsimd >=7.4 To use this file, pass: .. code:: shell mamba create -n from_file -f spec_file.txt -c conda-forge .. note:: You can pass multiple text spec files by repeating the ``-f,--file`` argument. Conda YAML spec files ********************* More powerful are ``YAML`` files like the following, because they already contain a desired environment name and the channels to use: .. code:: yaml name: testenv channels: - conda-forge dependencies: - python >=3.6,<3.7 - ipykernel >=5.1 - ipywidgets[build_number=!=0] They are used the same way as text files: .. code:: shell mamba create -f env.yml .. note:: CLI options will keep :ref:`precedence` over *target prefix* or *channels* specified in spec files. .. note:: You can pass multiple ``YAML`` spec files by repeating the ``-f,--file`` argument. Explicit spec files ******************* Using ``conda`` you can generate *explicit* environment lock files. For this, create an environment, activate it, and execute: .. code:: shell conda list --explicit --md5 These environment files look like the following and precisely "pin" the desired package + version + build string. Each package also has a checksum for reproducibility: .. code:: # This file may be used to create an environment using: # $ conda create --name --file # platform: linux-64 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-9.3.0-h2ae2ef3_17.tar.bz2#342f3c931d0a3a209ab09a522469d20c https://conda.anaconda.org/conda-forge/linux-64/libgomp-9.3.0-h5dbcf3e_17.tar.bz2#8fd587013b9da8b52050268d50c12305 https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-1_gnu.tar.bz2#561e277319a41d4f24f5c05a9ef63c04 https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-9.3.0-h5dbcf3e_17.tar.bz2#fc9f5adabc4d55cd4b491332adc413e0 https://conda.anaconda.org/conda-forge/linux-64/xtl-0.6.21-h0efe328_0.tar.bz2#9eee90b98fd394db7a049792e67e1659 https://conda.anaconda.org/conda-forge/linux-64/xtensor-0.21.8-hc9558a2_0.tar.bz2#1030174db5c183f3afb4181a0a02873d To install such a file with ``mamba``, just pass the ``-f`` flag again: .. code:: shell mamba create -n xtensor -f explicit_env.txt .. note:: Explicit spec files are single-platform. ``conda-lock`` YAML spec files ****************************** Using ``conda-lock``, you can generate lockfiles which, like explicit spec files, pin precisely and include a checksum for each package for reproducibility. Unlike explicit spec files, these "unified" lock files are multi-platform. These files are named ``conda-lock.yml`` by default, and look like: .. code:: # This lock file was generated by conda-lock (https://github.com/conda/conda-lock). DO NOT EDIT! # # A "lock file" contains a concrete list of package versions (with checksums) to be installed. Unlike # e.g. `conda env create`, the resulting environment will not change as new package versions become # available, unless you explicitly update the lock file. # # Install this environment as "YOURENV" with: # conda-lock install -n YOURENV --file conda-lock.yml # To update a single package to the latest version compatible with the version constraints in the source: # conda-lock lock --lockfile conda-lock.yml --update PACKAGE # To re-solve the entire environment, e.g. after changing a version constraint in the source file: # conda-lock -f environment.yml --lockfile conda-lock.yml version: 1 metadata: content_hash: osx-64: c2ccd3a86813af18ea19782a2f92b5a82e01c89f64a020ad6dea262aae638e48 linux-64: 06e0621a9712fb0dc0b16270ddb3e0be16982b203fc71ffa07408bf4bb7c22ec win-64: efee77261626b3877b9d7cf7bf5bef09fd8e5ddfc79349a5f598ea6c8891ee84 channels: - url: conda-forge used_env_vars: [] platforms: - linux-64 - osx-64 - win-64 sources: - environment.yml package: - name: _libgcc_mutex version: '0.1' manager: conda platform: linux-64 dependencies: {} url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 hash: md5: d7c89558ba9fa0495403155b64376d81 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 category: main optional: false - name: ca-certificates version: 2023.5.7 manager: conda platform: linux-64 dependencies: {} url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.5.7-hbcca054_0.conda hash: md5: f5c65075fc34438d5b456c7f3f5ab695 sha256: 0cf1bb3d0bfc5519b60af2c360fa4888fb838e1476b1e0f65b9dbc48b45c7345 category: main optional: false In order to YAML files to be considered as ``conda-lock`` files, their name must ends with ``-lock.yml`` or ``-lock.yaml``. To install such a file with ``mamba``, just pass the ``-f`` flag again: .. code:: $ mamba create -n my-environment -f conda-lock.yml Repoquery ========= ``mamba`` comes with features on top of stock ``conda``. To efficiently query repositories and query package dependencies you can use ``mamba repoquery``. Here are some examples: .. code:: shell # will show you all available xtensor packages. mamba repoquery search xtensor # you can also specify more constraints on this search query mamba repoquery search "xtensor>=0.18" # will show you a list of the direct dependencies of xtensor. mamba repoquery depends xtensor # will show you a list of the dependencies (including dependencies of dependencies). mamba repoquery depends xtensor --recursive The flag ``--recursive`` shows also recursive (i.e. transitive) dependencies of dependent packages instead of only direct dependencies. With the ``-t,--tree`` flag, you can get the same information of a recursive query in a tree. .. code:: mamba repoquery depends -t xtensor xtensor == 0.21.5 ├─ libgcc-ng [>=7.3.0] │ ├─ _libgcc_mutex [0.1 conda_forge] │ └─ _openmp_mutex [>=4.5] │ ├─ _libgcc_mutex already visited │ └─ libgomp [>=7.3.0] │ └─ _libgcc_mutex already visited ├─ libstdcxx-ng [>=7.3.0] └─ xtl [>=0.6.9,<0.7] ├─ libgcc-ng already visited └─ libstdcxx-ng already visited And you can ask for the inverse, which packages depend on some other package (e.g. ``ipython``) using ``whoneeds``. .. code:: mamba repoquery whoneeds ipython Name Version Build Depends Channel ------------------------------------------------------------------- jupyter_console 6.4.3 pyhd3eb1b0_0 ipython pkgs/main ipykernel 6.9.1 py39haa95532_0 ipython >=7.23.1 pkgs/main ipywidgets 7.6.5 pyhd3eb1b0_1 ipython >=4.0.0 pkgs/main With the ``-t,--tree`` flag, you can get the same information in a tree. .. code:: mamba repoquery whoneeds -t ipython ipython[8.2.0] ├─ jupyter_console[6.4.3] │ └─ jupyter[1.0.0] ├─ ipykernel[6.9.1] │ ├─ notebook[6.4.8] │ │ ├─ widgetsnbextension[3.5.2] │ │ │ └─ ipywidgets[7.6.5] │ │ │ └─ jupyter already visited │ │ └─ jupyter already visited │ ├─ jupyter_console already visited │ ├─ ipywidgets already visited │ ├─ jupyter already visited │ └─ qtconsole[5.3.0] │ └─ jupyter already visited └─ ipywidgets already visited .. note:: ``depends`` and ``whoneeds`` sub-commands require either the specified package to be installed in you environment, or for the channel to be specified with the ``-c,--channel`` flag. When ``search`` sub-command is used without specifying the **channel** explicitly (using the flag previously mentioned), the search will be performed considering the channels set during the configuration. ================================================ FILE: docs/source/user_guide/micromamba.rst ================================================ .. _micromamba: ===================== Micromamba User Guide ===================== ``micromamba`` is a tiny version of the ``mamba`` package manager. It is a statically linked C++ executable with a separate command line interface. It does not need a ``base`` environment and does not come with a default version of Python. .. note:: ``mamba`` and ``micromamba`` are the same code base, only build options vary. In combinations with subcommands like ``micromamba shell`` and ``micromamba run``, it is extremely convenient in CI and Docker environments where running shell activation hooks is complicated. It can be used with a drop-in installation without further steps: .. code-block:: shell /path/to/micromamba create -p /tmp/env 'pytest>=8.0' /path/to/micromamba run -p /tmp/env pytest myproject/tests ================================================ FILE: docs/source/user_guide/troubleshooting.rst ================================================ .. _troubleshooting: Troubleshooting =============== Please use the official installer --------------------------------- Please make sure that you use the :ref:`official Mambaforge installer ` to install Mamba. Other installation methods are not supported. Mamba should be installed to the ``base`` environment ----------------------------------------------------- Installing Mamba to an environment other than ``base`` is not supported. Mamba must be installed in the ``base`` environment alongside Conda, and no other packages may be installed into ``base``. .. _base_packages: No other packages should be installed to ``base`` ------------------------------------------------- Installing packages other than Conda and Mamba into the ``base`` environment is not supported. Mamba must live in the same environment as Conda, and Conda does not support having packages other than Conda itself and its dependencies in ``base``. .. _defaults_channels: Using the ``defaults`` channels ------------------------------- It is **not recommended** to use the `Anaconda default channels `_: - ``pkgs/main`` - ``pkgs/r`` / ``R`` - ``msys2`` - ``defaults`` (which includes all of the above) Please note that we won't be able to help resolving any problems you might face with the Anaconda channels. To check if you have any Anaconda default channels in your configuration, use:: $ mamba info ... channel URLs : https://repo.anaconda.com/pkgs/... # BAD! ... https://conda.anaconda.org/conda-forge/... ... Please change your configuration to use only ``conda-forge`` using one of the following methods. Disable the default channels in your install commands:: mamba install --override-channels ... Or your :file:`environment.yml` file: .. code-block:: yaml name: ... channels: - ... - nodefaults Or in your :file:`~/.condarc` file: .. code-block:: yaml ... channels: - ... - defaults # BAD! Remove this if it exists. - nodefaults Mixing the ``defaults`` and ``conda-forge`` channels ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The `Anaconda default channels `_ are **incompatible** with conda-forge. Using the default and ``conda-forge`` channels at the same time is not supported and will lead to broken environments: .. code-block:: yaml # NOT supported! channels: - conda-forge - defaults Mamba broken after Conda update ------------------------------- Mamba sometimes stops working if you update to a very recent version of Conda. Please downgrade to the latest working a version and file a bug report in the Mamba bug tracker if the problem has not been reported yet. Mamba or Micromamba broken after an update ------------------------------------------ While we make our best effort to keep backward compatibility, it is not impossible that an update breaks the current installation. The following actions can be tried: - Reinitializing your shell with ``micromamba shell reinit``. - Deleting the package cache (``"package cache"`` entries in ``micromamba info``) libmamba.so.2: undefined symbol ... ----------------------------------- See :ref:`defaults_channels`. Windows long paths ------------------ Windows API historically supports paths up to 260 characters. While it's now possible to used longer ones, there are still limitations related to that. ``libmamba`` internally relies on ``\\?\`` prefixing to handle such paths. If you get error messages advertising such prefix, please have look at the following steps: Long paths support has to be activated ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ source: Robocop `troubleshooting documentation `_ 1. Open the Local Group Policy Editor application: - Start --> type gpedit.msc --> Enter: 2. Navigate to Computer Configuration > Administrative Templates > System > Filesystem. On the right, find the "Enable win32 long paths" item and double-click it 3. Change the setting to Enabled 4. Exit the Local Group Policy Editor and restart your computer (or sign out and back in) to allow the changes to finish If the problem persists after those steps, try the following: 1. Open the Registry Editor application: - Start --> type regedit.msc and press Enter: 2. Navigate to HKEY-LOCAL-MACHINE > SYSTEM > CurrentControlSet > Control > FileSystem. On the right, find the LongPathsEnabled item and double-click it 3. Change the Value data: to 1 4. Exit the Registry Editor cmd.exe does not support calls to long prefixes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ While ``cmd.exe`` shell support long paths prefixing for directory operations such as ``dir``, it doesn't allow to call an executable or a batch file located at a long path prefix. Thus, the following cases will fail: - completely - calling executables located at long prefixes - installation of packages with pre/post linking or activation ``.bat`` scripts - partially - pre-compilation of ``noarch`` packages, with no impact on capability to use the package but removing it will let artifacts (pycache) on the filesystem Hangs during install in QEMU ---------------------------- When using Mamba/Micromamba inside a QEMU guest, installing packages may sometimes hang forever due to an `issue with QEMU and glibc `_. As a workaround, set ``G_SLICE=always-malloc`` in the QEMU guest, eg.:: export G_SLICE=always-malloc mamba install ... See `#1611 `_ for discussion. Hangs during package installation on NFS (Network File Systems) --------------------------------------------------------------- When using Mamba/Micromamba in a environment with NFS, package installation (e.g., NumPy) may hang at the step when ``libmamba`` attempts to lock a directory. A solution is to update the Mamba/Micromamba configuration to not use lockfile by the command:: micromamba config set use_lockfiles False See `#2592 `_, `#1446 `_, `#1448 `_, `#1515 `_ for more details. "libmamba Download error (7) Could not connect to server" --------------------------------------------------------- ``mamba install`` and other ``mamba`` commands yield said errors. This might be due to being flagged by an antivirus. A solution is to whitelist the appropriate folders and files; see `#3979 `_ for more details. ================================================ FILE: libmamba/CHANGELOG.md ================================================ ## libmamba 2.5.0 (January 08, 2026) Enhancements: - Remove `spdlog` from `libmamba`, provide `libmamba-spdlog` library by @Klaim in - feat: Support environment variables modifications by @jjerphan in - feat: Support cloning environment by @jjerphan in Bug fixes: - fix: Pin `python_abi` when `python-freethreading` is installed by @jjerphan in - fix: Resolve ca-certificates installed in the local environment by @jjerphan in - fix: List all environments' names by @jjerphan in - fix: list dependencies pulled with uv by @iisakkirotko in CI fixes and doc: - Fix formatting of unordered lists in the docs by @pozdneev in - docs: Uninstallation instructions by @jjerphan in - Update README to remove QuantStack Zulip link by @jezdez in - Change chat links to QuantStack and Conda Zulip by @jezdez in Maintenance: - fixed test "load_file_specs" too strict by @Klaim in - build(deps): bump actions/cache from 4 to 5 by @app/dependabot in - build(deps): bump actions/upload-artifact from 5 to 6 by @app/dependabot in - build(deps): bump actions/cache from 4 to 5 in /.github/actions/workspace by @app/dependabot in - build(deps): bump actions/checkout from 1 to 6 by @app/dependabot in ## libmamba 2.5.0.rc0 (January 07, 2026) Enhancements: - Remove `spdlog` from `libmamba`, provide `libmamba-spdlog` library by @Klaim in - feat: Support environment variables modifications by @jjerphan in - feat: Support cloning environment by @jjerphan in Bug fixes: - fix: Pin `python_abi` when `python-freethreading` is installed by @jjerphan in - fix: Resolve ca-certificates installed in the local environment by @jjerphan in - fix: List all environments' names by @jjerphan in - fix: list dependencies pulled with uv by @iisakkirotko in CI fixes and doc: - Fix formatting of unordered lists in the docs by @pozdneev in - docs: Uninstallation instructions by @jjerphan in - Update README to remove QuantStack Zulip link by @jezdez in - Change chat links to QuantStack and Conda Zulip by @jezdez in Maintenance: - fixed test "load_file_specs" too strict by @Klaim in - build(deps): bump actions/cache from 4 to 5 by @app/dependabot in - build(deps): bump actions/upload-artifact from 5 to 6 by @app/dependabot in - build(deps): bump actions/cache from 4 to 5 in /.github/actions/workspace by @app/dependabot in ## libmamba 2.4.0 (November 21, 2025) Enhancements: - Support for `mambajs`'s environment lockfile format by @Klaim in - Logging impl separation by @Klaim in Maintenance: - build(deps): bump actions/upload-artifact from 4 to 5 by @app/dependabot in - Removed deprecated libcurl backend by @JohanMabille in ## libmamba 2.4.0.rc0 (November 18, 2025) Enhancements: - Support for `mambajs`'s environment lockfile format by @Klaim in - Logging impl separation by @Klaim in Maintenance: - build(deps): bump actions/upload-artifact from 4 to 5 by @app/dependabot in - Removed deprecated libcurl backend by @JohanMabille in ## libmamba 2.3.3 (October 17, 2025) Bug fixes: - fix: pass `$argv` for fish wrapper by @sghng in - Fix empty depends/constrains when installing explicit spec files by @benmoss in - fix: proxy both micromamba and mamba with fish function by @sghng in - Fix nodiscard errors by @AntoinePrv in CI fixes and doc: - Added lower bounds on spdlog and fmt by @JohanMabille in - Static Windows build fix by @JohanMabille in Maintenance: - maint: Auto-update `pre-commit` setup by @jjerphan in - build(deps): bump actions/github-script from 7 to 8 by @app/dependabot in - libmambapy: Switch build backend to `scikit-build-core` by @LecrisUT in ## libmamba 2.3.3.alpha1 (October 14, 2025) Bug fixes: - fix: pass `$argv` for fish wrapper by @sghng in - Fix empty depends/constrains when installing explicit spec files by @benmoss in - fix: proxy both micromamba and mamba with fish function by @sghng in - Fix nodiscard errors by @AntoinePrv in CI fixes and doc: - Added lower bounds on spdlog and fmt by @JohanMabille in - Static Windows build fix by @JohanMabille in Maintenance: - maint: Auto-update `pre-commit` setup by @jjerphan in - build(deps): bump actions/github-script from 7 to 8 by @app/dependabot in - libmambapy: Switch build backend to `scikit-build-core` by @LecrisUT in ## libmamba 2.3.3.alpha0 (September 04, 2025) Bug fixes: - Fix nodiscard errors by @AntoinePrv in Maintenance: - libmambapy: Switch build backend to `scikit-build-core` by @LecrisUT in ## libmamba 2.3.2 (August 26, 2025) Enhancements: - feat: Support for optional `python_site_packages_path` in repodata by @jjhelmus in Bug fixes: - Fix libsolv MatchSpec parsing by @AntoinePrv in - fix: Workaround `mamba-org/mamba#4043` by @jjerphan in - Fix string lookup in MatchSpec parsing by @AntoinePrv in - Fix wrong sticky package hash by @AntoinePrv in Maintenance: - `synchronized_value` move and copy implementation by @Klaim in ## libmamba 2.3.1 (July 28, 2025) Enhancements: - Add missing bindings and other improvements by @AntoinePrv in Bug fixes: - Consider `SHELL` env var by @Hind-M in CI fixes and doc: - [skip ci] Fix typo by @davidbrochart in - ci: use VS2022 instead of VS2019 by @Klaim in Maintenance: - fix CI issues related to moving dependencies by @Klaim in - maint: use `synchronized_value` where we use a mutex to protect data by @Klaim in - Replace macros used in tests for compatibility with coverage report by @jjerphan in - maint: fixes warnings by @Klaim in - `synchronized_value` by @Klaim in - maintenance: fixed msvc warnings about unreachable code by @Klaim in ## libmamba 2.3.0 (June 16, 2025) Enhancements: - feat: add option revision to install command by @SandrineP in - Adapt label check to bot by @Hind-M in - Move PR template by @Hind-M in Bug fixes: - fix: Skip inaccessible CONDA_ENVS_DIRS by @holzman in - Fix env vars substitution from env yaml file by @Hind-M in CI fixes and doc: - doc: Mention fix for `libmamba Download error (7) Could not connect ...` by @OverLordGoldDragon in - Add constraint on `fmt` by @Hind-M in Maintenance: - Depend on LGPL builds of libarchive>=3.8 by @jjerphan in - Use range in Solution by @AntoinePrv in - Compile with C++20 by @AntoinePrv in ## libmamba 2.3.0 (June 16, 2025) Enhancements: - feat: add option revision to install command by @SandrineP in - Adapt label check to bot by @Hind-M in - Move PR template by @Hind-M in Bug fixes: - fix: Skip inaccessible CONDA_ENVS_DIRS by @holzman in - Fix env vars substitution from env yaml file by @Hind-M in CI fixes and doc: - doc: Mention fix for `libmamba Download error (7) Could not connect ...` by @OverLordGoldDragon in - Add constraint on `fmt` by @Hind-M in Maintenance: - Depend on LGPL builds of libarchive>=3.8 by @jjerphan in - Use range in Solution by @AntoinePrv in - Compile with C++20 by @AntoinePrv in ## libmamba 2.2.0 (June 04, 2025) Enhancements: - Allow users to set labels on PRs by @Hind-M in - support installing pip dependencies with uv by @iisakkirotko in - Load local path when offline by @AntoinePrv in Bug fixes: - Fix listing dependencies pulled with `pip` by @Hind-M in - Handle environment variables from `yaml` file by @Hind-M in - Fix fmt headers includes by @Hind-M in - unify channels of installed and removed packages written in history by @SandrineP in - Create packages diff between the current state and a revision by @SandrineP in - Fix deactivate nushell by @cvanelteren in - Fix wrong use of deprecation macro by @AntoinePrv in - Fix typo in help menu for the `reactivate` command by @ickc in - Unify CONDA_ENVS_PATH, CONDA_ENVS_DIRS by @holzman in - Allow creating environment with empty folder as target prefix by @nsoranzo in - [Unix] Fix slashes usage in file urls by @Hind-M in - fix: Avoid use-after-free in MessageLogger by @jmakovicka in - Remove implicit zero in Version formatting by @AntoinePrv in CI fixes and doc: - ci: Disable GitHub annotations for Codecov in PRs by @jjerphan in - Remove obsolete mamba/micromamba differences by @AntoinePrv in Maintenance: - Compile with C++20 by @AntoinePrv in - Use fmt::runtime where needed in C++20 by @AntoinePrv in - Out of context by @JohanMabille in - Transaction context by @JohanMabille in - Context dependency reduction by @JohanMabille in - Constexpr `fmt::formatter::parse` for C++20 with `from_chars` by @AntoinePrv in - Constexpr `fmt::formatter::parse` for C++20 by @AntoinePrv in - Refactor `SubdirData` > `SubdirIndexLoader` by @AntoinePrv in - Remove temp_file from public API by @AntoinePrv in - Adapt citation information for mamba by @jjerphan in - Use range in subdir iteration by @AntoinePrv in - Simplify SubdirData by @AntoinePrv in - Remove Context from downloaders by @AntoinePrv in - Rename str > to_string by @AntoinePrv in - Matchspec hardening by @AntoinePrv in ## libmamba 2.1.1 (May 05, 2025) Enhancements: - Use Simdjson ondemand parser instead of DOM parser by @Klaim in Bug fixes: - Fix segfault in error messages by @AntoinePrv in - fix: Requalify warning when parsing the "mod/etag" header by @jjerphan in - Fix nushell env for Windows by @cvanelteren in - fix: Give precedence to repodata when constructing `repodata_record` files by @jjerphan in - feat: add sha256 flag to list command by @SandrineP in - Fix VersionSpec globs by @AntoinePrv in CI fixes and doc: - Explicit API and ABI stability commitments by @AntoinePrv in - Add minimal citation information for mamba by @jjerphan in Maintenance: - Internally add flag for switching MatchSpec parser by @AntoinePrv in - Ready Libsolv for C++20 by @AntoinePrv in - build(deps): bump codecov/codecov-action from 4 to 5 by @app/dependabot in - ci: Adapt code coverage workflow by @jjerphan in ## libmamba 2.1.0 (April 01, 2025) Bug fixes: - fix: Prohibit conda envs path and conda envs dirs by @holzman in - fix: ProgressBar member initialization order by @jmakovicka in - Fix authenticated downloading by @Hind-M in - Windows menuinst by @Hind-M in - Support SHA256 hashes in @EXPLICIT files by @jaimergp in ## libmamba 2.0.8 (March 19, 2025) Bug fixes: - Avoid possible out of range index in MatchSpec::parse() by @opoplawski in - fix: Modify cache directory permissions in two steps by @jjerphan in ## libmamba 2.0.7 (March 07, 2025) Bug fixes: - fix: Adapt root prefix' precedence for CONDA_ENVS_PATH by @holzman in - feat: add envs flag to info command by @SandrineP in - feat: add revisions flag to list command by @SandrineP in - fix: Remove invalid cached tarballs by @jjerphan in - fix: Create directories from `envs_dirs` if they do not exist by @holzman in - Add `x86_64` archspec support for Windows by @jjerphan in - Use correct `url` in metadata and mirrors by @Hind-M in - Add base flag to info command by @SandrineP in - Explain unsolvable updates by @k-collie in - Adapt root prefix' precedence for `envs_dirs` by @holzman in - Fix windows paths and add tests by @Hind-M in - Adaptive level for compatible Version formatting by @jjerphan in - add export flag to list command by @SandrineP in - Use `libmamba`'s installation instead of `mamba`'s as a fallback by @jjerphan in - add canonical flag to list command by @SandrineP in - Factor handling of `GetModuleFileNameW` by @jjerphan in - Adapt root prefix determination by @jjerphan in - Remove pip warning for `PIP_NO_PYTHON_VERSION_WARNING` by @Hind-M in - Add md5 flag to list command by @SandrineP in - Support globs in `MatchSpec` build strings by @jjerphan in - Don't encode URLs for `mamba env export --explicit` by @maresb in - Uncomment no more failing test by @Hind-M in - Use CA certificates from `conda-forge::ca-certificates` by @jjerphan in - Handle `git+https` pip urls by @Hind-M in - Add explicit flag to list command by @SandrineP in - Fix dependency and `subdir` in repoquery `whoneeds` by @Hind-M in - Use `LOG_DEBUG` for CUDA version detection by @jjerphan in - Add missing thread and undefined sanitizers CMake options by @mathbunnyru in - Add reverse flag to list command by @SandrineP in - Support more condarc paths by @SandrineP in - Add a hint on cache corruption by @jjerphan in - Correctly populate lists of `MatchSpec` in `MTransaction`'s history by @Hind-M in - Honour `CONDA_ENVS_PATH` again by @jjerphan in - Improve CUDA version detection by @jjerphan in - Support installation using explicit url by @Hind-M in - Improve display of environment activation message by @Hind-M in - Adapt warnings shown when several channels are used by @jjerphan in - Always add `root_prefix/envs` in `envs_dirs` by @Hind-M in CI fixes and doc: - build(deps): bump uraimo/run-on-arch-action from 2 to 3 by @app/dependabot in - ci: Add "release::maintenance" Pull Request label by @jjerphan in - Warning as error default to OFF and enabled in CI by @JohanMabille in - Add missing config for RTD by @Hind-M in - Write command in multiple lines by @Hind-M in - Document that mamba 2 only supports trailing globs in version strings by @jdblischak in - Add prettier pre-commit hook by @mathbunnyru in - Update Linux installation script for Nushell by @deephbz in - Unique Release Tag by @Klaim in - `update_changelog.py` now can also take input as cli parameters by @Klaim in - Use a portable web request for Windows by @jjerphan in - Document slight differences for environment export by @jjerphan in Maintenance: - Add markdownlint pre-commit hook by @mathbunnyru in - Consistently name `Database` objects by @jjerphan in - Remove unused structure in update path by @jjerphan in - Also run workflows for `feat/*` branches by @jjerphan in - Fix typo in Windows workflows by @jjerphan in - Rerun pytest tests on `main` in case of failures by @jjerphan in - `list` refactoring by @SandrineP in - Fix build status badge by @mathbunnyru in - Don't exclude Changelog files from typos-conda by @mathbunnyru in - Update pre-commit hooks by by @mathbunnyru - Correctly exclude json files in clang-format by @mathbunnyru in ## libmamba 2.0.7.rc1 (March 05, 2025) Bug fixes: - fix: Remove invalid cached tarballs by @jjerphan in - fix: Create directories from `envs_dirs` if they do not exist by @holzman in CI fixes and doc: - build(deps): bump uraimo/run-on-arch-action from 2 to 3 by @app/dependabot in - ci: Add "release::maintenance" Pull Request label by @jjerphan in ## libmamba 2.0.7.rc0 (February 24, 2025) Bug fixes: - [all] Add `x86_64` archspec support for Windows by @jjerphan in - [all] Use correct `url` in metadata and mirrors by @Hind-M in - [all] Add base flag to info command by @SandrineP in - [all] Explain unsolvable updates by @k-collie in - [all] Adapt root prefix' precedence for `envs_dirs` by @holzman in - [all] Fix windows paths and add tests by @Hind-M in - [all] Adaptive level for compatible Version formatting by @jjerphan in - [all] add export flag to list command by @SandrineP in CI fixes and doc: - [all] Add missing config for RTD by @Hind-M in - [all] Warning as error default to OFF and enabled in CI by @JohanMabille in - [all] Write command in multiple lines by @Hind-M in - [all] Document that mamba 2 only supports trailing globs in version strings by @jdblischak in Maintenance: - [all] Also run workflows for `feat/*` branches by @jjerphan in - [all] Add markdownlint pre-commit hook by @mathbunnyru in - [all] Consistently name `Database` objects by @jjerphan in - [all] Remove unused structure in update path by @jjerphan in ## libmamba 2.0.6 (February 04, 2025) Enhancements: - Add reverse flag to list command by @SandrineP in - Add md5 flag to list command by @SandrineP in - add canonical flag to list command by @SandrineP in Bug fixes: - Correctly populate lists of `MatchSpec` in `MTransaction`'s history by @Hind-M in - Honour `CONDA_ENVS_PATH` again by @jjerphan in - Improve CUDA version detection by @jjerphan in - Support installation using explicit url by @Hind-M in - Improve display of environment activation message by @Hind-M in - Adapt warnings shown when several channels are used by @jjerphan in - Add a hint on cache corruption by @jjerphan in - Support more condarc paths by @SandrineP in - Always add `root_prefix/envs` in `envs_dirs` by @Hind-M in - Support globs in `MatchSpec` build strings by @jjerphan in - Don't encode URLs for `mamba env export --explicit` by @maresb in - Handle `git+https` pip urls by @Hind-M in - Uncomment no more failing test by @Hind-M in - Use CA certificates from `conda-forge::ca-certificates` by @jjerphan in - Add explicit flag to list command by @SandrineP in - Fix dependency and `subdir` in repoquery `whoneeds` by @Hind-M in - Use `LOG_DEBUG` for CUDA version detection by @jjerphan in - Add missing thread and undefined sanitizers CMake options by @mathbunnyru in - Factor handling of `GetModuleFileNameW` by @jjerphan in - Adapt root prefix determination by @jjerphan in - Remove pip warning for `PIP_NO_PYTHON_VERSION_WARNING` by @Hind-M in - Use `libmamba`'s installation instead of `mamba`'s as a fallback by @jjerphan in - Fix typo in Windows workflows by @jjerphan in - Rerun pytest tests on `main` in case of failures by @jjerphan in CI fixes and doc: - Use a portable web request for Windows by @jjerphan in - Add prettier pre-commit hook by @mathbunnyru in - Document slight differences for environment export by @jjerphan in - Unique Release Tag by @Klaim in - Update Linux installation script for Nushell by @deephbz in - `update_changelog.py` now can also take input as cli parameters by @Klaim in Maintenance: - `list` refactoring by @SandrineP in - Correctly exclude json files in clang-format by @mathbunnyru in - Fix build status badge by @mathbunnyru in - Don't exclude Changelog files from typos-conda by @mathbunnyru in - Update pre-commit hooks by by @mathbunnyru ## libmamba 2.0.6.rc3 (February 04, 2025) Enhancement: - add canonical flag to list command by @SandrineP in Bug fixes: - Use `libmamba`'s installation instead of `mamba`'s as a fallback by @jjerphan in Maintenance: - Fix typo in Windows workflows by @jjerphan in - Rerun pytest tests on `main` in case of failures by @jjerphan in ## libmamba 2.0.6.rc2 (January 31, 2025) Enhancements: - [all] Add md5 flag to list command by @SandrineP in Bug fixes: - [all] Factor handling of `GetModuleFileNameW` by @jjerphan in - [all] Adapt root prefix determination by @jjerphan in - [all] Remove pip warning for `PIP_NO_PYTHON_VERSION_WARNING` by @Hind-M in ## libmamba 2.0.6.rc1 (January 28, 2025) Enhancements: - Add reverse flag to list command by @SandrineP in Bug fixes: - Support globs in `MatchSpec` build strings by @jjerphan in - Don't encode URLs for `mamba env export --explicit` by @maresb in - Handle `git+https` pip urls by @Hind-M in - Uncomment no more failing test by @Hind-M in - Use CA certificates from `conda-forge::ca-certificates` by @jjerphan in - Add explicit flag to list command by @SandrineP in - Fix dependency and `subdir` in repoquery `whoneeds` by @Hind-M in - Use `LOG_DEBUG` for CUDA version detection by @jjerphan in - Add missing thread and undefined sanitizers CMake options by @mathbunnyru in Maintenance: - `list` refactoring by @SandrineP in - Correctly exclude json files in clang-format by @mathbunnyru in - Fix build status badge by @mathbunnyru in - Don't exclude Changelog files from typos-conda by @mathbunnyru in - Update pre-commit hooks by by @mathbunnyru ## libmamba 2.0.6.rc0 (January 14, 2025) Bug fixes: - Correctly populate lists of `MatchSpec` in `MTransaction`'s history by @Hind-M in - Honour `CONDA_ENVS_PATH` again by @jjerphan in - Improve CUDA version detection by @jjerphan in - Support installation using explicit url by @Hind-M in - Improve display of environment activation message by @Hind-M in - Adapt warnings shown when several channels are used by @jjerphan in - Add a hint on cache corruption by @jjerphan in - Support more condarc paths by @SandrineP in - Always add `root_prefix/envs` in `envs_dirs` by @Hind-M in CI fixes and doc: - Use a portable web request for Windows by @jjerphan in - Add prettier pre-commit hook by @mathbunnyru in - Document slight differences for environment export by @jjerphan in - Unique Release Tag by @Klaim in - Update Linux installation script for Nushell by @deephbz in - `update_changelog.py` now can also take input as cli parameters by @Klaim in ## libmamba 2.0.5 (December 12, 2024) Enhancements: - `micromamba/mamba --version` displays pre-release version names + establishes pre-release versions name scheme by @Klaim in Bug fixes: - Fix channel in `PackageInfo` by @Hind-M in - fix: Clarify shell init dry runs outputs by @jjerphan in - fix: Wrap `MAMBA_EXE` around double quotes in run shell script by @luciorq in - fix: Activated environment name by @jjerphan in - Fixed uninitialized variable in curl handler by @JohanMabille in - fix: Skip empty lines in environment spec files by @jjerphan in - Handle `.tar.gz` in pkg url by @Hind-M in - fix: Effectively apply dry-run on installation from PyPI by @jjerphan in - fix: Handle environment with empty or absent `dependencies` by @jjerphan in - Allow repoquery on non env prefix by @Hind-M in CI fixes and doc: - Introducing mamba Guru on Gurubase.io by @kursataktas in - docs: Clarify installation of lock file by @jjerphan in - maint: Add pre-commit typos back by @mathbunnyru in - maint: Cleanup CMake files and delete not compiled files by @mathbunnyru in - docs: Adapt shell completion subsection by @jjerphan in - maint: Restructure docs configuration file and improve docs pages by @mathbunnyru in - maint: Use Catch2 instead of doctest by @mathbunnyru in - docs: Remove installation non-recommendation by @jjerphan in ## libmamba 2.0.5.rc0 (December 09, 2024) Enhancements: - `micromamba/mamba --version` displays pre-release version names + establishes pre-release versions name scheme by @Klaim in Bug fixes: - fix: Wrap `MAMBA_EXE` around double quotes in run shell script by @luciorq in - fix: Activated environment name by @jjerphan in - Fixed uninitialized variable in curl handler by @JohanMabille in - fix: Skip empty lines in environment spec files by @jjerphan in - Handle `.tar.gz` in pkg url by @Hind-M in - fix: Effectively apply dry-run on installation from PyPI by @jjerphan in - fix: Handle environment with empty or absent `dependencies` by @jjerphan in - Allow repoquery on non env prefix by @Hind-M in CI fixes and doc: - maint: Cleanup CMake files and delete not compiled files by @mathbunnyru in - docs: Adapt shell completion subsection by @jjerphan in - maint: Restructure docs configuration file and improve docs pages by @mathbunnyru in - maint: Use Catch2 instead of doctest by @mathbunnyru in - docs: Remove installation non-recommendation by @jjerphan in ## libmamba 2.0.4 (November 22, 2024) Enhancements: - More details in error message when failing to parse json from a python command's output by @Klaim in - Fix: json parsing error due to wrong encoding of Python output by @Klaim in - Adds logs clarifying the source of the error "could not load prefix data by @Klaim in - pip packages support with `list` by @Hind-M in - chore: some CMake cleanup by @henryiii in - Replaced rstrip reimplementation with call to remove_suffix by @JohanMabille in Bug fixes: - fix: Return JSON on environment creation dry run by @jjerphan in - fix: support homebrew/linuxbrew (AppleClang, GCC 11) by @henryiii in - maint: Enable -Werror compiler flag for GCC, Clang and AppleClang by @mathbunnyru in - Fix build trailing `*` display by @Hind-M in - fixed: incorrect erasing of env vars by @Klaim in - Prevent pip "rich" output by @Klaim in - maint: Address compiler warnings by @mathbunnyru in - Fix some warnings by @mathbunnyru in - Remove Taskfile from `environment-dev-extra.yml` by @mathbunnyru in - fixed incorrect syntax in static_build.yml by @Klaim in - fix: Skip misformatted configuration files by @ChaonengQuan in - Fix locking error by @Hind-M in - Fix test on windows by @Hind-M in - fix: Only register channels in the context once by @jjerphan in - windows shell init files use executable name by @Klaim in - Fix relative path in local channel by @Hind-M in - Correctly rename test to be run by @Hind-M in - Create empty base prefix with `env update` by @Hind-M in - fix: Use POSIX-compliant scripts by @jjerphan in - maint: Clarify `env` subcommand documentation in help menu (cont'd) by @jjerphan in - fix: Handle space in `mamba` and `micromamba` executable absolute paths by @NewUserHa in - maint: Clarify `env` subcommand documentation in help menu by @jjerphan in - Add recommendation if error with root prefix by @Hind-M in - fix: Ignore inline comment in environment specification by @jjerphan in - Replace `[System.IO.Path]::GetFileNameWithoutExtension` with `-replace` by @mleistner-bgr in - Fix warnings and co by @Hind-M in CI fixes and doc: - ci: add brew toolchain test by @henryiii in - doc: show how to use advanced match specs in yaml spec by @corneliusroemer in - Doc: how to install specific Micromamba version by @truh in - doc: Homebrew currently only installs micromamba v1 by @corneliusroemer in - maint: Add dependabot config for GitHub workflows/actions by @mathbunnyru in - maint: Unify `cmake` calls in workflows, build win static builds in p… by @mathbunnyru in - docs: Update pieces of documentation after the release of mamba 2 by @jjerphan in - maint: Update clang-format to v19 by @mathbunnyru in - Update pre-commit hooks except clang-format by @mathbunnyru in - Force spinx v6 in readthedocs by @mathbunnyru in - Fix doc by @Hind-M in - [windows-vcpkg] Replace deprecated openssl with crypto feature with latest libarchive by @Hind-M in - maint: Unpin libcurl<8.10 by @jjerphan in - dev: Remove the use of Taskfile by @jjerphan in - Upgraded CI to micromamba 2.0.2 by @JohanMabille in ## libmamba 2.0.4alpha3 (November 21, 2024) Bug fixes: - Fix build trailing `*` display by @Hind-M in - fixed: incorrect erasing of env vars by @Klaim in - Prevent pip "rich" output by @Klaim in - maint: Address compiler warnings by @mathbunnyru in CI fixes and doc: - doc: show how to use advanced match specs in yaml spec by @corneliusroemer in - Doc: how to install specific Micromamba version by @truh in - doc: Homebrew currently only installs micromamba v1 by @corneliusroemer in - maint: Add dependabot config for GitHub workflows/actions by @mathbunnyru in - maint: Unify `cmake` calls in workflows, build win static builds in p… by @mathbunnyru in - docs: Update pieces of documentation after the release of mamba 2 by @jjerphan in - maint: Update clang-format to v19 by @mathbunnyru in ## libmamba 2.0.4alpha2 (November 14, 2024) Enhancements: - More details in error message when failing to parse json from a python command's output by @Klaim in Bug fixes: - Fix some warnings by @mathbunnyru in - Remove Taskfile from `environment-dev-extra.yml` by @mathbunnyru in CI fixes and doc: - Update pre-commit hooks except clang-format by @mathbunnyru in - Force spinx v6 in readthedocs by @mathbunnyru in ## libmamba 2.0.4alpha1 (November 12, 2024) Bug fixes: - fixed incorrect syntax in static_build.yml by @Klaim in ## libmamba 2.0.4alpha0 (November 12, 2024) Enhancements: - Fix: json parsing error due to wrong encoding of Python output by @Klaim in - Adds logs clarifying the source of the error "could not load prefix data by @Klaim in Bug fixes: - fix: Skip misformatted configuration files by @ChaonengQuan in ## libmamba 2.0.3 (November 05, 2024) Enhancements: - pip packages support with `list` by @Hind-M in - chore: some CMake cleanup by @henryiii in - Replaced rstrip reimplementation with call to remove_suffix by @JohanMabille in Bug fixes: - Fix locking error by @Hind-M in - Fix test on windows by @Hind-M in - fix: Only register channels in the context once by @jjerphan in - windows shell init files use executable name by @Klaim in - Fix relative path in local channel by @Hind-M in - Correctly rename test to be run by @Hind-M in - Create empty base prefix with `env update` by @Hind-M in - fix: Use POSIX-compliant scripts by @jjerphan in - maint: Clarify `env` subcommand documentation in help menu (cont'd) by @jjerphan in - fix: Handle space in `mamba` and `micromamba` executable absolute paths by @NewUserHa in - maint: Clarify `env` subcommand documentation in help menu by @jjerphan in - Add recommendation if error with root prefix by @Hind-M in - fix: Ignore inline comment in environment specification by @jjerphan in - Replace `[System.IO.Path]::GetFileNameWithoutExtension` with `-replace` by @mleistner-bgr in - Fix warnings and co by @Hind-M in CI fixes and doc: - Fix doc by @Hind-M in - [windows-vcpkg] Replace deprecated openssl with crypto feature with latest libarchive by @Hind-M in - maint: Unpin libcurl<8.10 by @jjerphan in - dev: Remove the use of Taskfile by @jjerphan in - Upgraded CI to micromamba 2.0.2 by @JohanMabille in ## libmamba 2.0.2 (October 02, 2024) Bug fixes: - fix: Handle `MatchSpec` with brackets when parsing environments' history by @jjerphan in - Win activate by @JohanMabille in - Fix `channel` and `base_url` in `list` cmd by @Hind-M in CI fixes and doc: - Rollback to micromamba 1.5.10 in CI by @JohanMabille in ## libmamba 2.0.1 (September 30, 2024) Bug fixes: - Fixed channel output in umamba list by @JohanMabille in - --full-name option for list by @JohanMabille in - fix: Support for PEP 440 "Compatible Releases" (operator `~=` for `MatchSpec`) by @jjerphan in - Fix micromamba activate on Windows by @JohanMabille in CI fixes and doc: - doc: add github links to documentation by @timhoffm in ## libmamba 2.0.0 (September 25, 2024) Enhancements: - test: `MatchSpec` edges cases by @jjerphan in - Compute `root prefix` as mamba install path by @Hind-M in - Support CONDA_DEFAULT_ENV by @SylvainCorlay in - Remove cctools patch from feedstock in CI by @JohanMabille in - test: Comparability and hashability of `PackageInfo` and `MatchSpec` by @jjerphan in - build: Support fmt 11 (follow-up) by @jjerphan in - build: Support fmt 11 by @jjerphan in - Make more classes hashable and comparable by @jjerphan in - Replace `Context` with `Context::platform` where possible by @jjerphan in - Update mamba.xsh: support xonsh >= 0.18.0 by @anki-code in - Remove logs for every package by @Hind-M in - maint: Remove declaration of `PrefixData::load` by @jjerphan in - maint: Remove some warnings by @jjerphan in - maint: Remove `PrefixData::load` by @jjerphan in - OCI/Conda mapping by @Hind-M in - [OCI - Mirrors] Add tests and doc by @Hind-M in - [OCI Registry] Handle compressed repodata by @Hind-M in - [CEP-15] Support `base_url` with `repodata_version: 2` using `mamba` parser by @Hind-M in - Fix OCIMirror use by @Hind-M in - Add checking typos to pre-commit by @Hind-M in - Bind text_style and graphic params by @AntoinePrv in - Update pre-commit hooks" by @AntoinePrv in - Refactor os utilities by @AntoinePrv in - Implemented OCI mirrors by @JohanMabille in - Passed url_path to request_generators by @JohanMabille in - Handle regex in build string by @AntoinePrv in - [mamba-content-trust] Add integration test by @Hind-M in - Release libsolv memory before installation by @AntoinePrv in - Custom resolve complex MatchSpec in Solver by @AntoinePrv in - Add MatchSpec::contains_except_channel" by @AntoinePrv in - [mamba content trust] Enable verifying packages signatures by @Hind-M in - Refactor MatchSpec::str by @AntoinePrv in - Subdir renaming by @AntoinePrv in - Fully bind MatchSpec by @AntoinePrv in - Add more MatchSpec tests by @AntoinePrv in - Expected in specs parse API by @AntoinePrv in - Refactor MatchSpec::parse by @AntoinePrv in - Added HTTP Mirrors by @JohanMabille in - Use expected for specs parsing by @AntoinePrv in - Refactor ObjPool to use views in callbacks by @AntoinePrv in - Add more solver tests and other small features by @AntoinePrv in - Finalized Solver bindings and add solver doc by @AntoinePrv in - Add libsolv.Database Bindings and tests by @AntoinePrv in - Add (some) solver Database tests by @AntoinePrv in - Make libsolv wrappers into standalone library by @AntoinePrv in - Rename MPool into solver::libsolv::Database by @AntoinePrv in - Automate releases (`CHANGELOG.md` updating) by @Hind-M in - Simplify MPool Interface by @AntoinePrv in - Clean libsolv use in Transaction by @AntoinePrv in - Rewrite Query with Pool functions (wrapping libsolv) by @AntoinePrv in - Support multiple env yaml specs by @jchorl in - Update shell hook comments by @jonashaag in - More specs bindings by @AntoinePrv in - Add VersionSpec::str by @AntoinePrv in - Some future proofing MatchSpec by @AntoinePrv in - Reformat string by @AntoinePrv in - Clean up url_manip by @AntoinePrv in - Fix VersionSpec free ranges by @AntoinePrv in - Add parsing utilities by @AntoinePrv in - Bump MAMBA libsolv file ABI by @AntoinePrv in - MatchSpec use VersionSpec by @AntoinePrv in - GlobSpec by @AntoinePrv in - Add BuildNumberSpec by @AntoinePrv in - Refactor MatchSpec unlikely data by @AntoinePrv in - Remove micromamba shell init -p by @AntoinePrv in - Clean PackageInfo interface by @AntoinePrv in - NoArchType as standalone enum by @AntoinePrv in - Move PackageInfo in specs:: by @AntoinePrv in - Change PackageInfo types by @AntoinePrv in - Add some PackageInfo tests by @AntoinePrv in - Rename ChannelSpec > UndefinedChannel by @AntoinePrv in - Add Channel::contains_package by @AntoinePrv in - Pool channel match by @AntoinePrv in - Added mirrored channels by @JohanMabille in - Move util_random.hpp > util/random.hpp by @AntoinePrv in - MRepo refactor by @AntoinePrv in - No M by @AntoinePrv in - Explicit transaction duplicate code by @AntoinePrv in - Solver improvements by @AntoinePrv in - Sort transaction table entries by @AntoinePrv in - Solver Request by @AntoinePrv in - Improve Solution usage by @AntoinePrv in - Refactor solver flags by @AntoinePrv in - Moved download related files to dedicated folder by @JohanMabille in - Remove outdated commented code snippet by @jjerphan in - Implemented support for mirrors by @JohanMabille in - Split Solver and Unsolvable by @AntoinePrv in - Proper sorting of display actions by @AntoinePrv in - Solver sort deps by @AntoinePrv in - Bind solver::libsolv::UnSolvable by @AntoinePrv in - Improve Query API by @AntoinePrv in - Context: not a singleton by @Klaim in - Add CondaURL by @AntoinePrv in - No ugly kenum by @AntoinePrv in - Add Nushell activation support by cvanelteren in - Support $var syntax in .condarc by @jonashaag in - Handle null and false noarch values by @gabrielsimoes in - Add CondaURL::pretty_str by @AntoinePrv in - Channel cleanup by @AntoinePrv in - Authenfitication split user and password by @AntoinePrv in - Improved static build error message by @JohanMabille in - Add local channels test by @Hind-M in - Don't force MSVC_RUNTIME by @AntoinePrv in - Build micromamba with /MD by @AntoinePrv in - Fix Posix shell on Windows by @AntoinePrv in - Further improve micromamba search output by @delsner in - Minor Channel refactoring by @AntoinePrv in - path_to_url percent encoding by @AntoinePrv in - Change libsolv static lib name by @AntoinePrv in - Download by @JohanMabille in - Use CMake targets for reproc by @AntoinePrv in - Add FindLibsolv.cmake by @AntoinePrv in - Read repodata.json using nl::json (rerun) by @AntoinePrv in - Filesystem library by @AntoinePrv in - Header cleanup filesystem follow-up by @AntoinePrv in - Add multiple queries to repoquery search by @AntoinePrv in - Add ChannelSpec by @AntoinePrv in - Print error code if run fails by @jonashaag in - Added PackageFetcher by @JohanMabille in - return architecture levels for micromamba by @isuruf in - Resolve ChannelSpec into a Channel by @AntoinePrv in - Factorize Win user folder function between files by @AntoinePrv in - Combine dev environments by @AntoinePrv in - Refactor win encoding conversion by @AntoinePrv in - Dev workflow by @AntoinePrv in - Add refactor getenv setenv unsetenv by @AntoinePrv in - Explicit and smart CMake target by @AntoinePrv in - Rename env functions by @AntoinePrv in - Environment map by @AntoinePrv in - Add environment cleaner test fixtures by @AntoinePrv in - Update dependencies on OSX by @AntoinePrv in - Channel initialization by @AntoinePrv in - Add weakening_map by @AntoinePrv in - Refactor env directories by @AntoinePrv in - Enable new repodata parser by default by @AntoinePrv in - Allow overriding archspec by @isuruf in - Add Python-like set operations to flat_set by @AntoinePrv in - Migrate expand/shrink_home by @AntoinePrv in - Refactor env::which by @AntoinePrv in - Migrate Channel::make_channel to resolve multi channels by @AntoinePrv in - Move core/channel > specs/channel by @AntoinePrv in - Remove ChannelContext ctor by @AntoinePrv in - Improve ChannelContext and Channel by @AntoinePrv in xhttps://github.com/mamba-org/mamba/pull/3003 - Remove ChannelContext context capture by @AntoinePrv in - Bind Channel by @AntoinePrv in - Default to hide credentials by @AntoinePrv in - Validation QA by @AntoinePrv in - Refactor (some) OpenSSL functions by @AntoinePrv in - Use std::array by @AntoinePRv in - Default to conda-forge channel by @AntoinePrv in - Remove duplicate function by @AntoinePrv in - MatchSpec small improvements by @AntoinePrv in - Plug ChannelSpec in MatchSpec by @AntoinePrv in - Drop unneeded dependencies by @opoplawski in - Change MatchSpec::parse to named constructor by @AntoinePrv in - restore use_default_signal_handler flag for libmambapy by @dholth in Bug fixes: - fix: Handle extra white-space in `MatchSpec` by @jjerphan in - fix: Environment removal confirmation by @jjerphan in - fix: add warning when using defaults by @wolfv in - Add fallback to root prefix by @Hind-M in - Fix x86_64 to use underscore instead of dash by @traversaro in - Fixed micromamba static build after cctools and ld64 upgrade on conda… by @JohanMabille in - fix: PyPI support for `env update` by @jjerphan in - Fix output by @Hind-M in - Update mamba.sh.in script by @SylvainCorlay in - Execute remove action before install actions by @SylvainCorlay in - fix: Reduce logging system overhead by @jjerphan in - Define `etc/profile.d/mamba.sh` and install it by @jjerphan in - Replaces instances of -p with --root-prefix in documentation by @SylvainCorlay in - [micromamba] Fix behavior of `env update` (to mimic conda) by @Hind-M in - Reset the prompt back to default by @cvanelteren in - Add missing header by @Hind-M in - Restore previous behavior of `MAMBA_ROOT_PREFIX` by @Hind-M in - Allow leading lowercase letter in version by @Hind-M in - Allow spaces in version after operator by @Hind-M in - Fixed restoring the previous signal handler for example in python case (Windows only for now) by @Klaim in - Split `ContextOptions::enable_logging_and_signal_handling` into 2 different options by @Klaim in - libmambapy: use `Context` explicitly by @Klaim in - Fix release scripts by @Hind-M in - Hotfix to allow Ctrl+C in python scripts by @Klaim in - Fix typos in comments by @ryandesign in - Fix VersionSpec equal and glob by @AntoinePrv in - Fix pin repr in solver error messages by @AntoinePrv in - Don't add duplicate .conda and .tar.bz2 packages by @AntoinePrv in - Use conda-forge feedstock for static builds by @AntoinePrv in - Mamba 2.0 name fixes by @AntoinePrv in - Make Taskfile.dist.yml Windows-compatible by @carschandler in - fix(micromamba): anaconda private channels not working by @s22chan in - Simple logging fix by @AntoinePrv in - Fix URL encoding in repodata.json by @AntoinePrv in - gracefully handle conflicting names in yaml specs by @jchorl in - Fix verbose and strange prefix in Powershell by @pwnfan in - handle other deps in multiple env files by @jchorl in - add manually given .tar.bz2 / .conda packages to solver pool by @0xbe7a in - Fix linking on Windows when Scripts folder is missing by @dalcinl in - added support for empty lines in dependency file in txt format by @rmittal87 in - Fix local channels location by @AntoinePrv in - Fixed libmamba tests static build by @JohanMabille in - Add CI test for local channels by @Hind-M in - Nushell hotfix by @cvanelteren - Added missing dependency in libmambaConfig.cmake.in by @JohanMabille in - Allow defaults::\* spec by @isuruf in - by @bruchim-cisco in - Fix channels with slashes regression by @isuruf in - fix: Parse remote_connect_timeout_secs as a double by @jjerphan in - Add mirrors by @Hind-M in - Add cmake-format by @AntoinePrv in - Fixed move semantics of DownloadAttempt by @JohanMabille in - Nu 0.87.0 by @cvanelteren in - fix config precedence for base env by @0xbe7a in - Fix libmamba cmake version file by @opoplawski in CI fixes and doc: - Fix wrong version of miniforge in doc by @Hind-M in - Remove cctools patch removal in CI by @Hind-M in - docs: Specify `CMAKE_INSTALL_PREFIX` by @jjerphan in - docs: Adapt "Solving Package Environments" section by @jjerphan in - [win-64] Remove workaround by @Hind-M in - [win-64] Add constraint on fmt by @Hind-M in - Unpin cryptography, python, and add make to environment-dev.yml by @jaimergp in - ci: Unpin libcxx <18 by @jjerphan in - chore(ci): bump github action versions by @corneliusroemer in - doc(more_concepts.rst): improve clarity by @corneliusroemer in - Fix CI failure on win-64 by @Hind-M in - Small changelog additions by @AntoinePrv in - Fixed a spelling mistake in micromamba-installation.rst by @codeblech in - Typos in dev_environment.rst by @jd-foster in - Add MatchSpec doc and fix errors by @AntoinePrv in - Document specs::Channel by @AntoinePrv in - Fix --override-channels docs by @jonashaag in - Add 2.0 changes draft by @AntoinePrv in - Add Breathe for API documentation by @AntoinePrv in - Warning around manual install and add ref to conda-libmamba by @AntoinePrv in - Add MacOS DNS issue logging by @AntoinePrv in - Add CI merge groups by @AntoinePrv in - Simplify and correct development documentation by @AntoinePrv in - Add install from source instructions by @AntoinePrv in - update readme install link by @artificial-agent in - Fail fast except on debug runs by @AntoinePrv in ## libmamba 2.0.0rc6 (September 20, 2024) Enhancements: - test: `MatchSpec` edges cases by @jjerphan in - Compute `root prefix` as mamba install path by @Hind-M in - Support CONDA_DEFAULT_ENV by @SylvainCorlay in Bug fixes: - fix: Handle extra white-space in `MatchSpec` by @jjerphan in - fix: Environment removal confirmation by @jjerphan in CI fixes and doc: - Fix wrong version of miniforge in doc by @Hind-M in - Remove cctools patch removal in CI by @Hind-M in ## libmamba 2.0.0rc5 (September 13, 2024) Enhancements: - Remove cctools patch from feedstock in CI by @JohanMabille in Bug fixes: - fix: add warning when using defaults by @wolfv in - Add fallback to root prefix by @Hind-M in - Fix x86_64 to use underscore instead of dash by @traversaro in - Fixed micromamba static build after cctools and ld64 upgrade on conda… by @JohanMabille in - fix: PyPI support for `env update` by @jjerphan in - Fix output by @Hind-M in - Update mamba.sh.in script by @SylvainCorlay in - Execute remove action before install actions by @SylvainCorlay in CI fixes and doc: - docs: Specify `CMAKE_INSTALL_PREFIX` by @jjerphan in ## libmamba 2.0.0rc4 (August 29, 2024) Bug fixes: - fix: Reduce logging system overhead by @jjerphan in ## libmamba 2.0.0rc3 (August 26, 2024) Bug fixes: - Define `etc/profile.d/mamba.sh` and install it by @jjerphan in - Replaces instances of -p with --root-prefix in documentation by @SylvainCorlay in CI fixes and doc: - docs: Adapt "Solving Package Environments" section by @jjerphan in ## libmamba 2.0.0rc2 (August 19, 2024) Enhancements: - test: Comparability and hashability of `PackageInfo` and `MatchSpec` by @jjerphan in - build: Support fmt 11 (follow-up) by @jjerphan in - build: Support fmt 11 by @jjerphan in - Make more classes hashable and comparable by @jjerphan in - Replace `Context` with `Context::platform` where possible by @jjerphan in Bug fixes: - [micromamba] Fix behavior of `env update` (to mimic conda) by @Hind-M in - Reset the prompt back to default by @cvanelteren in - Add missing header by @Hind-M in - Restore previous behavior of `MAMBA_ROOT_PREFIX` by @Hind-M in CI fixes and doc: - [win-64] Remove workaround by @Hind-M in - [win-64] Add constraint on fmt by @Hind-M in - Unpin cryptography, python, and add make to environment-dev.yml by @jaimergp in - ci: Unpin libcxx <18 by @jjerphan in ## libmamba 2.0.0rc1 (July 26, 2024) Enhancements: - Update mamba.xsh: support xonsh >= 0.18.0 by @anki-code in - Remove logs for every package by @Hind-M in Bug fixes: - Allow leading lowercase letter in version by @Hind-M in - Allow spaces in version after operator by @Hind-M in CI fixes and doc: - chore(ci): bump github action versions by @corneliusroemer in - doc(more_concepts.rst): improve clarity by @corneliusroemer in ## libmamba 2.0.0rc0 (July 08, 2024) Enhancements: - maint: Remove declaration of `PrefixData::load` by @jjerphan in Bug fixes: - Fixed restoring the previous signal handler for example in python case (Windows only for now) by @Klaim in - Split `ContextOptions::enable_logging_and_signal_handling` into 2 different options by @Klaim in ## libmamba 2.0.0beta3 (June 14, 2024) Enhancements: - maint: Remove some warnings by @jjerphan in - maint: Remove `PrefixData::load` by @jjerphan in - OCI/Conda mapping by @Hind-M in - [OCI - Mirrors] Add tests and doc by @Hind-M in Bug fixes: - libmambapy: use `Context` explicitly by @Klaim in - Fix release scripts by @Hind-M in CI fixes and doc: - Fix CI failure on win-64 by @Hind-M in ## libmamba 2.0.0beta2 (May 29, 2024) Enhancements: - [OCI Registry] Handle compressed repodata by @Hind-M in - [CEP-15] Support `base_url` with `repodata_version: 2` using `mamba` parser by @Hind-M in - Fix OCIMirror use by @Hind-M in - Add checking typos to pre-commit by @Hind-M in ## libmamba 2.0.0beta1 (May 04, 2024) Enhancements: - Bind text_style and graphic params by @AntoinePrv in - Update pre-commit hooks" by @AntoinePrv in - Refactor os utilities by @AntoinePrv in - Implemented OCI mirrors by @JohanMabille in - Passed url_path to request_generators by @JohanMabille in - Handle regex in build string by @AntoinePrv in - Release libsolv memory before installation by @AntoinePrv in - Custom resolve complex MatchSpec in Solver by @AntoinePrv in - Add MatchSpec::contains_except_channel" by @AntoinePrv in - Refactor MatchSpec::str by @AntoinePrv in - Subdir renaming by @AntoinePrv in - Fully bind MatchSpec by @AntoinePrv in - Add more MatchSpec tests by @AntoinePrv in - Expected in specs parse API by @AntoinePrv in Bug fixes: - Hotfix to allow Ctrl+C in python scripts by @Klaim in - Fix typos in comments by @ryandesign in - Fix VersionSpec equal and glob by @AntoinePrv in - Fix pin repr in solver error messages by @AntoinePrv in - Don't add duplicate .conda and .tar.bz2 packages by @AntoinePrv in - Use conda-forge feedstock for static builds by @AntoinePrv in - Mamba 2.0 name fixes by @AntoinePrv in - Make Taskfile.dist.yml Windows-compatible by @carschandler in - fix(micromamba): anaconda private channels not working by @s22chan in CI fixes and doc: - Small changelog additions by @AntoinePrv in - Fixed a spelling mistake in micromamba-installation.rst by @codeblech in - Typos in dev_environment.rst by @jd-foster in - Add MatchSpec doc and fix errors by @AntoinePrv in ## libmamba 2.0.0beta0 (April 04, 2024) Enhancements: - Update pre-commit hooks" by @AntoinePrv in - Refactor os utilities by @AntoinePrv in Bug fixes: - Don't add duplicate .conda and .tar.bz2 packages by @AntoinePrv in CI fixes and doc: - Small changelog additions by @AntoinePrv in ## libmamba 2.0.0alpha4 (March 26, 2024) Enhancements: - Implemented OCI mirrors by @JohanMabille in - Passed url_path to request_generators by @JohanMabille in - Handle regex in build string by @AntoinePrv in - Release libsolv memory before installation by @AntoinePrv in - Custom resolve complex MatchSpec in Solver by @AntoinePrv in - Add MatchSpec::contains_except_channel" by @AntoinePrv in - Refactor MatchSpec::str by @AntoinePrv in - Subdir renaming by @AntoinePrv in - Fully bind MatchSpec by @AntoinePrv in - Add more MatchSpec tests by @AntoinePrv in - Expected in specs parse API by @AntoinePrv in - Refactor MatchSpec::parse by @AntoinePrv in Bug fixes: - Use conda-forge feedstock for static builds by @AntoinePrv in - Mamba 2.0 name fixes by @AntoinePrv in - Make Taskfile.dist.yml Windows-compatible by @carschandler in - fix(micromamba): anaconda private channels not working by @s22chan in CI fixes and doc: - Fixed a spelling mistake in micromamba-installation.rst by @codeblech in - Typos in dev_environment.rst by @jd-foster in - Add MatchSpec doc and fix errors by @AntoinePrv in ## libmamba 2.0.0alpha3 (February 28, 2024) Enhancements: - Added HTTP Mirrors by @JohanMabille in - Use expected for specs parsing by @AntoinePrv in - Refactor ObjPool to use views in callbacks by @AntoinePrv in - Add more solver tests and other small features by @AntoinePrv in - Finalized Solver bindings and add solver doc by @AntoinePrv in - Add libsolv.Database Bindings and tests by @AntoinePrv in - Add (some) solver Database tests by @AntoinePrv in - Make libsolv wrappers into standalone library by @AntoinePrv in - Rename MPool into solver::libsolv::Database by @AntoinePrv in - Automate releases (`CHANGELOG.md` updating) by @Hind-M in - Simplify MPool Interface by @AntoinePrv in - Clean libsolv use in Transaction by @AntoinePrv in - Rewrite Query with Pool functions (wrapping libsolv) by @AntoinePrv in Bug fixes: - Simple logging fix by @AntoinePrv in CI fixes and doc: ## libmamba 2.0.0alpha2 (February 02, 2024) Enhancements: - Support multiple env yaml specs by @jchorl in - Update shell hook comments by @jonashaag in - More specs bindings by @AntoinePrv in - Add VersionSpec::str by @AntoinePrv in - Some future proofing MatchSpec by @AntoinePrv in - Reformat string by @AntoinePrv in - Clean up url_manip by @AntoinePrv in - Fix VersionSpec free ranges by @AntoinePrv in - Add parsing utilities by @AntoinePrv in - Bump MAMBA libsolv file ABI by @AntoinePrv in - MatchSpec use VersionSpec by @AntoinePrv in - GlobSpec by @AntoinePrv in - Add BuildNumberSpec by @AntoinePrv in - Refactor MatchSpec unlikely data by @AntoinePrv in - Remove micromamba shell init -p by @AntoinePrv in - Clean PackageInfo interface by @AntoinePrv in - NoArchType as standalone enum by @AntoinePrv in - Move PackageInfo in specs:: by @AntoinePrv in - Change PackageInfo types by @AntoinePrv in - Add some PackageInfo tests by @AntoinePrv in - Rename ChannelSpec > UndefinedChannel by @AntoinePrv in - Add Channel::contains_package by @AntoinePrv in - Pool channel match by @AntoinePrv in - Added mirrored channels by @JohanMabille in - Move util_random.hpp > util/random.hpp by @AntoinePrv in - MRepo refactor by @AntoinePrv in - No M by @AntoinePrv in - Explicit transaction duplicate code by @AntoinePrv in - Solver improvements by @AntoinePrv in - Sort transaction table entries by @AntoinePrv in - Solver Request by @AntoinePrv in - Improve Solution usage by @AntoinePrv in - Refactor solver flags by @AntoinePrv in - Moved download related files to dedicated folder by @JohanMabille in - Remove outdated commented code snippet by @jjerphan in - Implemented support for mirrors by @JohanMabille in - Split Solver and Unsolvable by @AntoinePrv in - Proper sorting of display actions by @AntoinePrv in - Solver sort deps by @AntoinePrv in - Bind solver::libsolv::UnSolvable by @AntoinePrv in - Improve Query API by @AntoinePrv in Bug fixes: - Fix URL encoding in repodata.json by @AntoinePrv in - gracefully handle conflicting names in yaml specs by @jchorl in - Fix verbose and strange prefix in Powershell by @pwnfan in - handle other deps in multiple env files by @jchorl in - add manually given .tar.bz2 / .conda packages to solver pool by @0xbe7a in CI fixes and doc: - Document specs::Channel by @AntoinePrv in - Fix --override-channels docs by @jonashaag in - Add 2.0 changes draft by @AntoinePrv in - Add Breathe for API documentation by @AntoinePrv in - Warning around manual install and add ref to conda-libmamba by @AntoinePrv in - Add MacOS DNS issue logging by @AntoinePrv in ## libmamba 2.0.0alpha1 (December 18, 2023) CI fixes and doc: - Add CI merge groups by @AntoinePrv in ## libmamba 2.0.0alpha0 (December 14, 2023) Enhancements: - Context: not a singleton by @Klaim in - Add CondaURL by @AntoinePrv in - No ugly kenum by @AntoinePrv in - Add Nushell activation support by cvanelteren in - Support $var syntax in .condarc by @jonashaag in - Handle null and false noarch values by @gabrielsimoes in - Add CondaURL::pretty_str by @AntoinePrv in - Channel cleanup by @AntoinePrv in - Authenfitication split user and password by @AntoinePrv in - Improved static build error message by @JohanMabille in - Add local channels test by @Hind-M in - Don't force MSVC_RUNTIME by @AntoinePrv in - Build micromamba with /MD by @AntoinePrv in - Fix Posix shell on Windows by @AntoinePrv in - Further improve micromamba search output by @delsner in - Minor Channel refactoring by @AntoinePrv in - path_to_url percent encoding by @AntoinePrv in - Change libsolv static lib name by @AntoinePrv in - Download by @JohanMabille in - Use CMake targets for reproc by @AntoinePrv in - Add FindLibsolv.cmake by @AntoinePrv in - Read repodata.json using nl::json (rerun) by @AntoinePrv in - Filesystem library by @AntoinePrv in - Header cleanup filesystem follow-up by @AntoinePrv in - Add multiple queries to repoquery search by @AntoinePrv in - Add ChannelSpec by @AntoinePrv in - Print error code if run fails by @jonashaag in - Added PackageFetcher by @JohanMabille in - return architecture levels for micromamba by @isuruf in - Resolve ChannelSpec into a Channel by @AntoinePrv in - Factorize Win user folder function between files by @AntoinePrv in - Combine dev environments by @AntoinePrv in - Refactor win encoding conversion by @AntoinePrv in - Dev workflow by @AntoinePrv in - Add refactor getenv setenv unsetenv by @AntoinePrv in - Explicit and smart CMake target by @AntoinePrv in - Rename env functions by @AntoinePrv in - Environment map by @AntoinePrv in - Add environment cleaner test fixtures by @AntoinePrv in - Update dependencies on OSX by @AntoinePrv in - Channel initialization by @AntoinePrv in - Add weakening_map by @AntoinePrv in - Refactor env directories by @AntoinePrv in - Enable new repodata parser by default by @AntoinePrv in - Allow overriding archspec by @isuruf in - Add Python-like set operations to flat_set by @AntoinePrv in - Migrate expand/shrink_home by @AntoinePrv in - Refactor env::which by @AntoinePrv in - Migrate Channel::make_channel to resolve multi channels by @AntoinePrv in - Move core/channel > specs/channel by @AntoinePrv in - Remove ChannelContext ctor by @AntoinePrv in - Improve ChannelContext and Channel by @AntoinePrv in xhttps://github.com/mamba-org/mamba/pull/3003 - Remove ChannelContext context capture by @AntoinePrv in - Bind Channel by @AntoinePrv in - Default to hide credentials by @AntoinePrv in - Validation QA by @AntoinePrv in - Refactor (some) OpenSSL functions by @AntoinePrv in - Use std::array by @AntoinePRv in - Default to conda-forge channel by @AntoinePrv in - Remove duplicate function by @AntoinePrv in - MatchSpec small improvements by @AntoinePrv in - Plug ChannelSpec in MatchSpec by @AntoinePrv in - Drop unneeded dependencies by @opoplawski in - Change MatchSpec::parse to named constructor by @AntoinePrv in - restore use_default_signal_handler flag for libmambapy by @dholth in Bug fixes: - Fix linking on Windows when Scripts folder is missing by @dalcinl in - added support for empty lines in dependency file in txt format by @rmittal87 in - Fix local channels location by @AntoinePrv in - Fixed libmamba tests static build by @JohanMabille in - Add CI test for local channels by @Hind-M in - Nushell hotfix by @cvanelteren - Added missing dependency in libmambaConfig.cmake.in by @JohanMabille in - Allow defaults::\* spec by @isuruf in - by @bruchim-cisco in - Fix channels with slashes regression by @isuruf in - fix: Parse remote_connect_timeout_secs as a double by @jjerphan in - Add mirrors by @Hind-M in - Add cmake-format by @AntoinePrv in - Fixed move semantics of DownloadAttempt by @JohanMabille in - Nu 0.87.0 by @cvanelteren in - fix config precedence for base env by @0xbe7a in - Fix libmamba cmake version file by @opoplawski in CI fixes and doc: - Simplify and correct development documentation by @AntoinePrv in - Add install from source instructions by @AntoinePrv in - update readme install link by @artificial-agent in - Fail fast except on debug runs by @AntoinePrv in ## libmamba 2.0.0alpha0 (December 14, 2023) Enhancements: - Context: not a singleton by @Klaim in - Add CondaURL by @AntoinePrv in - No ugly kenum by @AntoinePrv in - Add Nushell activation support by cvanelteren in - Support $var syntax in .condarc by @jonashaag in - Handle null and false noarch values by @gabrielsimoes in - Add CondaURL::pretty_str by @AntoinePrv in - Channel cleanup by @AntoinePrv in - Authenfitication split user and password by @AntoinePrv in - Improved static build error message by @JohanMabille in - Add local channels test by @Hind-M in - Don't force MSVC_RUNTIME by @AntoinePrv in - Build micromamba with /MD by @AntoinePrv in - Fix Posix shell on Windows by @AntoinePrv in - Further improve micromamba search output by @delsner in - Minor Channel refactoring by @AntoinePrv in - path_to_url percent encoding by @AntoinePrv in - Change libsolv static lib name by @AntoinePrv in - Download by @JohanMabille in - Use CMake targets for reproc by @AntoinePrv in - Add FindLibsolv.cmake by @AntoinePrv in - Read repodata.json using nl::json (rerun) by @AntoinePrv in - Filesystem library by @AntoinePrv in - Header cleanup filesystem follow-up by @AntoinePrv in - Add multiple queries to repoquery search by @AntoinePrv in - Add ChannelSpec by @AntoinePrv in - Print error code if run fails by @jonashaag in - Added PackageFetcher by @JohanMabille in - return architecture levels for micromamba by @isuruf in - Resolve ChannelSpec into a Channel by @AntoinePrv in - Factorize Win user folder function between files by @AntoinePrv in - Combine dev environments by @AntoinePrv in - Refactor win encoding conversion by @AntoinePrv in - Dev workflow by @AntoinePrv in - Add refactor getenv setenv unsetenv by @AntoinePrv in - Explicit and smart CMake target by @AntoinePrv in - Rename env functions by @AntoinePrv in - Environment map by @AntoinePrv in - Add environment cleaner test fixtures by @AntoinePrv in - Update dependencies on OSX by @AntoinePrv in - Channel initialization by @AntoinePrv in - Add weakening_map by @AntoinePrv in - Refactor env directories by @AntoinePrv in - Enable new repodata parser by default by @AntoinePrv in - Allow overriding archspec by @isuruf in - Add Python-like set operations to flat_set by @AntoinePrv in - Migrate expand/shrink_home by @AntoinePrv in - Refactor env::which by @AntoinePrv in - Migrate Channel::make_channel to resolve multi channels by @AntoinePrv in - Move core/channel > specs/channel by @AntoinePrv in - Remove ChannelContext ctor by @AntoinePrv in - Improve ChannelContext and Channel by @AntoinePrv in xhttps://github.com/mamba-org/mamba/pull/3003 - Remove ChannelContext context capture by @AntoinePrv in - Bind Channel by @AntoinePrv in - Default to hide credentials by @AntoinePrv in - Validation QA by @AntoinePrv in - Refactor (some) OpenSSL functions by @AntoinePrv in - Use std::array by @AntoinePRv in - Default to conda-forge channel by @AntoinePrv in - Remove duplicate function by @AntoinePrv in - MatchSpec small improvements by @AntoinePrv in - Plug ChannelSpec in MatchSpec by @AntoinePrv in - Drop unneeded dependencies by @opoplawski in - Change MatchSpec::parse to named constructor by @AntoinePrv in - restore use_default_signal_handler flag for libmambapy by @dholth in Bug fixes: - Fix linking on Windows when Scripts folder is missing by @dalcinl in - added support for empty lines in dependency file in txt format by @rmittal87 in - Fix local channels location by @AntoinePrv in - Fixed libmamba tests static build by @JohanMabille in - Add CI test for local channels by @Hind-M in - Nushell hotfix by @cvanelteren - Added missing dependency in libmambaConfig.cmake.in by @JohanMabille in - Allow defaults::\* spec by @isuruf in - by @bruchim-cisco in - Fix channels with slashes regression by @isuruf in - fix: Parse remote_connect_timeout_secs as a double by @jjerphan in - Add mirrors by @Hind-M in - Add cmake-format by @AntoinePrv in - Fixed move semantics of DownloadAttempt by @JohanMabille in - Nu 0.87.0 by @cvanelteren in - fix config precedence for base env by @0xbe7a in - Fix libmamba cmake version file by @opoplawski in CI fixes and doc: - Simplify and correct development documentation by @AntoinePrv in - Add install from source instructions by @AntoinePrv in - update readme install link by @artificial-agent in - Fail fast except on debug runs by @AntoinePrv in ## libmamba 1.5.1 (September 05, 2023) Enhancements: - Add scope in util tests by @AntoinePrv in - Enable Link Time Optimization by @AntoinePrv in - Add libsolv namespace callback by @AntoinePrv in - Clearer output from micromamba search by @delsner in - add context.register_envs to control whether environments are registered to environments.txt or not by @jaimergp in - Windows path manipulation and other cleanups by @AntoinePrv in - Bring back repodata_use_zst by @jonashaag in Bug fixes: - fix install pin by @AntoinePrv in - Use generic_string for path on Windows unix shells by @AntoinePrv in - Fix pins by @AntoinePrv in - Various fixes by @AntoinePrv in - Parse subdirs in CLI match specs by @jonashaag in CI fixes and doc: - Split GHA workflow by @JohanMabille in - Use Release build mode in Windows CI by @AntoinePrv in ## libmamba 1.5.0 (August 24, 2023) Enhancements: - All headers at the top by @AntoinePrv in - Add boolean expression tree by @AntoinePrv in - Add VersionSpec by @AntoinePrv in - Use xdg schemas for config saving/reading (minified) by @danpf in - specs platform by @AntoinePrv in - Safe Curl opt in url.cpp by @AntoinePrv in - Add win-arm64 support by @isuruf in - Move util_string to utility library by @AntoinePrv in - Remove get_clean_dirs() by @jonashaag in - Enable pytest color output by @jonashaag in - Isolate URL object by @AntoinePrv in - Fix warnings by @Hind-M in - New apis for downloading by @JohanMabille in Bug fixes: - Respect subdir in match spec by @ThomasBlauthQC in - Fixed move constructor in CURLHandle by @JohanMabille in - Remove created prefix if aborted with --platform by @Hind-M in - Add missing newline in legacy errors by @jaimergp in - fix: added missing hook_preamble() for powershell hook by @chawyehsu in - Fix fish completion by @soraxas in - Fix \_\_linux virtual package default version by jonashaag in CI fixes and doc: - Ignore format changes in git blame by @jonashaag in - Add Debug build type by @Hind-M in ## libmamba 1.4.9 (July 13, 2023) Bug fixes: - Fixed missing key in channel issue by @JohanMabille in ## libmamba 1.4.8 (July 11, 2023) Enhancements: - No profile.d fallback in rc files by @AntoinePrv in - Removed unused function by @Klaim in - Replace MTransaction::m_remove with Solution by @AntoinePrv in Bug fixes: - Fixed zst check in MSubdirData by @JohanMabille in ## libmamba 1.4.7 (July 06, 2023) Enhancements: - ZST support to mamba and remove the feature flag by @johnhany97 in - Add Version::starts_with and Version::compatible_with by @AntoinePrv in - Create Solver solution by @AntoinePrv in Bug fixes: - call init_console to prevent UTF8 errors when extracting packages by @wolfv in ## libmamba 1.4.6 (June 30, 2023) Enhancements: - Channels refactoring/cleaning by @Hind-M in - Troubleshooting update by @AntoinePrv in - Directly call uname for linux detection by @AntoinePrv in Bug fixes: - Fix build with older Clang by @pavelzw in - Add missing noarch in PackageInfo serialization by @AntoinePrv in - Allow --force-reinstall on uninstalled specs by @AntoinePrv in ## libmamba 1.4.5 (June 27, 2023) Enhancements: - No singleton: ChannelContext, ChannelBuilder and channel cache by @Klaim in - Move problem graph creation to MSolver by @AntoinePrv in - Add ObjSolver by @AntoinePrv in - Use ObjSolver in MSolver by @AntoinePrv in - Common CMake presets by @AntoinePrv in - Wrap libsolv Transaction by @AntoinePrv in - Split the transaction.hpp header by @AntoinePrv in - Add more tests for channel canonical_name by @Hind-M in - use ObjTransaction in MTransaction by @AntoinePrv in - by @jonashaag in - Libcurl: Cleaning and comments by @Hind-M in - No singleton: configuration by @Klaim in - Added filtering iterators by @JohanMabille in - Use ObjSolver wrapper in MSolver by @AntoinePrv in - Remove banner by @jonashaag in - LockFile behavior on file-locking is now almost independent from Context by @Klaim in - Small whitespace fix in error messages by @AntoinePrv in Bug fixes: - Use subsub commands for micromamba shell by @AntoinePrv in - Honor envs_dirs by @AntoinePrv in - Fixed Windows test build by @JohanMabille in - Add missing cstdint include to libmamba/src/solv-cpp/solvable.cpp by @maxyvisser in - Fix wrong download url for custom channels by @Hind-M in - Fix --force-reinstall by @AntoinePrv in - Handle pip <-> python cycle in topo sort by @AntoinePrv in - Fix add missing pip PREREQ_MARKER by @AntoinePrv in - Fix lockfiles topological sort by @AntoinePrv in - Fix missing SAT message on already installed packages by @AntoinePrv in CI fixes and doc: - Fix clang-format by @AntoinePrv in - update the umamba GHA link by @ocefpaf in - Extend troubleshooting docs by @jonashaag in - Update pre-commit hooks by @jonashaag in - Move GHA to setup-micromamba by @AntoinePrv in - Switch linters to setup-micromamba by @AntoinePrv in - Switch to setup-micromamba by @pavelzw in - Fix broken ref directives in docs by @mfisher87 in ## libmamba 1.4.4 (May 16, 2023) Bug fixes: - Fix CURLHandle::get_info on 32bit platform by e8035669 in ## libmamba 1.4.3 (May 15, 2023) Enhancements: - No Storing Channel\* and MRepo\* in Solvables by @AntoinPrv in - Remove dead code / attribute by @AntoinePrv in - Context structuring by @Hind-M in - Clean up fetch by @Hind-M in - Wapped curl multi handle by @JohanMabille in - Remove empty test_flat_set.hpp by @AntoinePrv in - Add doctest printer for pair and vector by @AntoinePrv in - Add topological sort by @AntoinePrv in - Store PackageInfo::track_features as a vector by @AntoinePrv in - Use topological sort instead of libsolv by @AntoinePrv in - Remove assign_or in favor of json::value by @AntoinePrv in - Resume Context structuring by @Hind-M in - Improve micromamba transaction message by @ruben-arts in - Remove unused raw function in subdirdata by @Hind-M in - Wrap ::Pool and ::Repo by @AntoinePrv in - Curl wrapping by @Hind-M in - Reset fish shell status even if variable not exists by @soraxas in - Use libsolv wrappers in MPool and MRepo by @AntoinePrv in - add bearer token authentication by @wolfv in Bug fixes: - fix: parsing of empty track_features by @AntoinePrv in - track_feature typo by @AntoinePrv in - Move repoquery python test from libmamba (not run) to mamba by @Hind-M in - Set log_level to critical with --json option by @Hind-M in - Add missing cstdint include for GCC 13 by @alexfikl in - Forward NETRC environment variable to curl, if exported by @timostrunk in - Remove wrong $Args in psm1 by @troubadour-hell in - Avoid using /tmp by @johnhany97 in - Fixed winreg search by @JohanMabille in CI fixes and doc: - Extend troubleshooting docs by @jonashaag in - Extend issue template by @jonashaag in ## libmamba 1.4.2 (April 06, 2023) Enhancements: - Small libsolv improvements by @AntoinePrv in - Improve message after the env creating with micromamba by @xmnlab in - Use custom function to properly parse matchspec by @AntoinePrv in - Remove const ref to string_view in codebase by @Hind-M in - Wrap more libcurl calls by @Hind-M in Bug fixes: - Fix PKG_BUILDNUM env variable for post-link scripts by nsoranzo in - Solve a corner case in the SAT error messages by @AntoinePrv in - Windows: Fixed environment variables not read as unicode by @Klaim in - Fix segfault in add_pin/all_problems_structured by @AntoinePrv in CI fixes and doc: - Replaced libtool 2.4.6_9 with libtool 2.4.7-3 in vcpkg builds by @JohanMabille in - Migrated to doctest by @JohanMabille in ## libmamba 1.4.1 (March 28, 2023) Enhancements: - First version/steps of unraveling fetch code and wrapping libcurl by @Hind-M in - Parse repodata.json by @AntoinePrv in - TimeRef is not a singleton anymore by @Klaim in - Handle url via ChannelBuilder in Repo constructor by @jaimergp in - add option to relocate prefix by @DerThorsten in - Renamed validate namespace to `mamba::validation by @Klaim in Bug fixes: - Fixed build with older Clang by @ZhongRuoyu in ## libmamba 1.4.0 (March 22, 2023) Enhancements: - Implemented recursive dependency printout in repoquery by @timostrunk in - Aggressive compilation warnings by @AntoinePrv in - Fine tune clang-format by @AntoinePrv in - Added checked numeric cast by @AntoinePrv in - Activated SAT error messages by @AntoinePrv in - Added RISC-V support by @dtcxzyw in - Removed redundant `DependencyInfo` by @AntoinePrv in - Isolate solv::ObjQueue by @AntoinePrv in - Removed unused libarchive header in fetch by @hind-M in - Removed duplicated header by @JohanMabille in - Cleaned `util_string` by @AntoinePrv in - Only full shared or full static builds by @JohanMabille in - Fixed repoquery commands working with installed packages only by @Hind-M in - Added a heuristic to better handle the (almost) cyclic Python conflicts by @AntoinePrv in - Isolate `PackageInfo` from libsolv from @AntoinePrv in - Added `strip_if` functions by @AntoinePrv in - Added conda.rc Options for Existing Remote Settings by @srilman in - Hide independent curl code and compression structures in unexposed files by @Hind-M in - Added `strip_parts` functions by @AntoinePrv in - Added parsing of Conda version by @AntoinePrv in - Slight refactoring of the utility library by @AntoinePrv in Bug fixes: - Fixed invalid reinstall count display by @timostrunk in - Fixed segmentation fault in case of an invalid package name by @timostrunk in - Fixed `to_lower(wchar_t)` and `to_upper(wchar_t)` by @AntoinePrv in - Fixed undefined-behaviors reported by UBSAN by @klaim in CI fixes & docs: - Fixed sign warning in tests by @AntoinePrv in - Structured test directory layout by @AntoinePrv in ## libmamba 1.3.1 (February 09, 2023) A bugfix release for 1.3.0! Bug fixes: - fix up single download target perform finalization to make lockfile download work by @wolfv in - fix rename or remove by @wolfv in - add channel specific job with new str by @AntoinePrv in - fix `micromamba shell` for base environment, and improve behavior when `auto_activate_base` is true by @jonashaag, @Hind-M and @wolfv Docs: - - add micromamba docker image by @wholtz in - - added biweekly meetings information to README by @JohanMabille in - - change docs to homebrew/core by @pavelzw in ## libmamba 1.3.0 (February 03, 2023) Enhancements: - switch to repodata.state.json format from cep by @wolfv in Bug fixes: - Fix temporary file renaming by @jonashaag in CI fixes & docs: - docs: defaults should not be used with conda-forge by @jonashaag in - fix tests for pkg_cache by @wolfv in - Added missing public dependency to libmambaConfig.cmake by @JohanMabille in ## libmamba 1.2.0 (January 16, 2023) This release contains some speed improvements: download repodata faster as zstd encoded files (configure using `repodata_use_zst: true` in your `~/.mambarc` file). Also, `.conda` file extraction is now faster, a prefix with spaces works better thanks to a new "shebang" style and the `micromamba package compress` and `transmute` commands produce better conda packages. Enhancements: - Make tarballs look more similar to conda-package-handling by @wolfv in #2177, #2217 - Use new shebang style by @wolfv in #2211 - Faster conda decompress by @wolfv in #2200 - Initial repodata.zst support by @wolfv & @jonashaag in #2113 Bug fixes: - log warnings but ignore cyclic symlinks by @wolfv in #2212 - Error messages improvements by @AntoinePrv in #2149 - Report failure when packages to remove don't exist. (#2131) by @Klaim in #2132 - Fixing typo in solver errors by @shughes-uk in #2168 - Extend `last_write_time` implementation by special-casing file touching by @coroa in #2141 - Don't create a prefix which is missing conda-meta by @maresb in #2162 - Fix `custom_channels` parsing by @XuehaiPan in #2207 CI fixes & docs: - - Improve build env cleanup by @jonashaag in #2213 - - Run conda_nightly once per week by @jonashaag in #2147 - - Update doc by @Hind-M in #2156 - - Use Conda canary in nightly tests by @jonashaag in #2180 - - Explicitly point to libmamba test data independently of cwd by @AntoinePrv in #2158 - - Add bug report issue template by @jonashaag in #2182 - - Downgrade curl to fix micromamba on macOS x64 by @wolfv in #2205 - - Use conda-forge micromamba feedstock instead of a fork by @JohanMabille in #2206 - - Update pre-commit versions by @jonashaag in #2178 - - Use local meta.yaml by @wolfv in #2214 - - Remove feedstock patches by @wolfv in #2216 - - Fixed static dependency order by @JohanMabille in #2201 ## libmamba 1.1.0 (November 25, 2022) Some bugfixes for 1.0 and experimental release of the new solver messages Bug fixes - Fix libmamba CMake config file after dependency change (thanks @l2dy) #2091 Enhancements - Add safe signed/unsigned conversion (thanks @AntoinePrv) #2087 - Move to fmt::terminal_color and other output IO improvements & drop termcolor (thanks @AntoinePrv) #2085 - Handle non leaf conflicts (thanks @AntoinePrv) #2133 - Bind SAT error messages to python (thanks @AntoinePrv) #2127 - Nitpicking error messages (thanks @AntoinePrv) #2121 - Tree error message improvements (thanks @AntoinePrv) #2093 - Tree error message (thanks @AntoinePrv) #2064 - Add experimental flag for error messages (thanks @AntoinePrv) #2080 - Handle non leaf conflicts (thanks @AntoinePrv) #2133 - ci: Update pre-commit-config #2092 - docs: Add warning to manual install instructions #2100 - docs: Consistently use curl for fetching files #2126 ## libmamba 1.0.0 (November 01, 2022) Our biggest version number yet! Finally a 1.0 release :) New notable micromamba features include: - - improved shell scripts with autocompletion available in PowerShell, xonsh, fish, bash and zsh - - `micromamba shell -n someenv`: enter a sub-shell without modifying the system - - `micromamba self-update`: micromamba searches for updates and installs them if available (you can also downgrade using `--version 0.26.0` for example) Bug fixes: - ignore "Permission denied" in `env::which` (thanks @Rafflesiaceae) #2067 - Fix an infinite loop in replace_all() when the search string is empty (thanks @tsibley) - Do not crash when permissions cannot be changed, instead log warning (thanks @hwalinga) Enhancements: - Rewrite LockFile interface (thanks @Klaim) #2014 - Fix ci deprecation warnings, upload conda-bld artifacts for failed builds #2058, #2062 - Explicitly define SPDLOG_FMT_EXTERNAL and use spdlog header only use external fmt (thanks @AntoinePrv) #2060, #2048 - Fix CI by pointing to updated feedstock and fixing update tests (thanks @AntoinePrv) #2055 - Add authentication with urlencoded @ to proxy test (#2024) @AdrianFreundQC - better test isolation (thanks @AntoinePrv) #1903 - Test special characters in basic auth (thanks @jonashaag) #2012 - ProblemsGraph compression (thanks @AntoinePrv) #2019 - vector_set compare function (thanks @AntoinePrv) #2051 - Clean up util_graph header and tests (thanks @AntoinePrv) #2039 - Add string utilities (thanks @AntoinePrv) # - Dynamic tree walk of the Compressed problem graph - Creating the initial problems graph (thanks @syslaila) #1891 ## libmamba 0.27.0 (October 04, 2022) Bug fixes: - fix lockfiles relying on PID (thanks @Klaim) #1915 ## libmamba 0.26.0 (September 30, 2022) Bug fixes: - add symlinks and empty directories to archive for `micromamba package compress` #1955 - increase curl buffer size for faster max download speeds (thanks @jonashaag) #1949 - fix crash when installing from environment lockfile (thanks @Klaim) #1893 - fix linux version regex (thanks @kelszo) #1852 - remove duplicate console output (thanks @pavelzw) #1845 Enhancements: - add option to disable file locks globally (thanks @danpf @JohanMabille) #1830 - extend graph class for better solver messaging work (thanks @syslaila @AntoinePrv) #1880 - use std::filesystem instead of ghc::filesystem (thanks @Klaim) #1665 - add missing SolverRuleInfo enum entries (thanks @AntoinePrv) #1833 ## libmamba 0.25.0 (July 26, 2022) Bug fixes: - Make lockfiles less noisy (thanks @Klaim) #1750 - Make clobber warnings less noisy #1764 - Do not ever log password in plain text (thanks @AntoinePrv) #1776 Enhancements: - Add safe id2pkginfo (thanks @AntoinePrv) #1822 - add handling of different tokens for channels on same host (thanks @AntoinePrv) #1784 - better test isolation (thanks @AntoinePrv) #1791 - Add nodefaults handling to libmamba (thanks @AdrianFreundQC) #1773 - Add utilities for better error reporting and refactor Queue #1789 - Do not modify string during sregex iteration (thanks @jonashaag) #1768 - Better error message for invalid `.condarc` file (thanks @jonashaag) #1765 - Tweak is_writable() (thanks @Klaim) #1750 - Allow for external fmt library (thanks @gdolle) #1732 - Remove error message when `touch` fails #1747 - Log the exception that caused configuration parsing failure (thanks @johnhany97) #1755 - Fix MSVC warnings (thanks @Klaim) #1721 - Test improvements (thanks @AntoinePrv) #1777, #1778 ## libmamba 0.24.0 (June 01, 2022) Bug fixes: - use fmt::format for pretty printing in `micromamba search --pretty` #1710 - commit fix for compiling with ppc64le on conda-forge #1695 ## libmamba 0.23.3 (May 20, 2022) Bug fixes - fix curl callback to not exit anymore but report a proper error #1684 - fix channel prefix test (thanks @jonashaag) #1674 Improvements - various Windows / CMake improvements #1683 - various warnings fixed on Windows and Unix #1683, 1691 - fix yaml-cpp linkage #1678 ## libmamba 0.23.1 (May 11, 2022) Bug fixes - Fix thread clean up and singleton destruction order (thanks @Klaim) #1666, #1620 - Show reason for multi-download failure (thanks @syslaila) #1652 - Fix platform splitting to work with unknown platforms #1662 - Create prefix before writing the config file #1662 - Retry HTTP request on 413 & 429, respect Retry-After header (thanks @kenodegard) #1661 - Initialize curl (thanks @Klaim) #1648 - Replace thread detaching by thread joining before main's end (thanks @Klaim) #1637 ## libmamba 0.23.0 (April 21, 2022) This release uses tl::expected for some improvements in the error handling. We also cleaned the API a bit and did some refactorings to make the code compile faster and clean up headers. Enhancements - Make user agent configurable through Context - Correct header casing for macOS (thanks @l2dy) #1613 - Log the thrown error when validating cache (thanks @johnhany97) #1608 - Use sscache to speed up builds (thanks @jonashaag) #1606 - Upgrade black - Use bin2header to inline the various scripts (thanks @jonashaag) #1601 - Refactor the include chain, headers cleanup (thanks @JohanMabille) #1588, #1592, #1590 - Refactor error handling (thanks @JohanMabille) #1579 - Do not store multi pkgs cache in subdir anymore #1572 - Add API to remove repo from pool - Store channel in subdirdata and libsolv repo appdata - Remove prefixdata.load() #1555 - Remove prefixdata from solver interface #1550 ## libmamba 0.22.1 (February 28, 2022) ## libmamba 0.22.0 (February 25, 2022) Bug fixes - Add noarch recompilation step for mamba and micromamba #1511 Improvements - Remove compile time warnings by updating deprecated openssl functions #1509 - Use custom debug callback from libcurl and libsolv (routed through spdlog) #1507 - Refactor Channel implementation (thanks @JohanMabille) #1537 - Hide tokens in libcurl and libsolv as well (and remove need for `--experimental` flag to load tokens) #1538 - Pass through QEMU_LD_PREFIX to subprocesses (thanks @chrisburr) #1533 ## libmamba 0.21.2 (February 14, 2022) Bug fixes - Fix json read of `_mod` and `_etag` when they are not available #1490 ## libmamba 0.21.1 (February 11, 2022) Bug fixes - Adjust cache url hashing and header data parsing #1482 - Properly strip header of \r\n before adding to repodata.json cache #1482 Improvements - Adjustments for the progress bars, make better visible on light backgrounds #1458 ## libmamba 0.21.0 (February 07, 2022) Bug fixes - generate PkgMgr role file from its file definition #1408 - Fix a regex segfault in history parsing #1441 - Add test for segfault history parsing #1444 (thanks @jonashaag) Improvements - Update pre-commit versions (thanks @jonashaag) #1417 - Use clang-format from pypi (thanks @chrisburr) #1430 - Incremental ccache updates (thanks @jonashaag) #1445 - Speed up noarch compilation (thanks @chrisburr) #1422 - New fancy progress bars! (thanks @adriendelsalle) #1426, #1350 - Refactor how we set env vars in the Context #1426 ## libmamba 0.20.0 (January 25, 2022) Bug fixes - Close file before retry & deletion when downloading subdir (thanks @xhochy) #1373 Improvements - Store platform when creating env with `--platform=...` (thanks @adriendelsalle) #1381 - Add environment variable to disable low speed limit (thanks @xhochy) #1380 - Make max download threads configurable (thanks @adriendelsalle) #1377 ## libmamba 0.19.1 (December 08, 2021) Bug fixes - Fix curl progress callback Improvements - Use WinReg from conda-forge - Add fast path for hide_secrets (thanks @baszalmstra) #1337 - Use the original sha256 hash if a file doesnt change (thanks @baszalmstra) #1338 - Rename files that are in use (and cannot be removed) on Windows (@wolfv) #1319 - Avoid recomputing SHA256 for symbolic links (@wolfv) #1319 - Improve cleanup of directories in use (@wolfv) #1319 - Fix pyc compilation on Windows (@adriendelsalle) #1340 ## libmamba 0.19.0 (November 30, 2021) Bug fixes - Better Unicode support on Windows (@wolfv) #1306 - Solver has function to get more solver errors (@wolfv) #1310 - Close json repodata file after opening (@wolfv) #1309 - Add bash & zsh shell_completion to activation functions ## libmamba 0.18.2 (November 24, 2021) Bug fixes - Fix use of a read-only cache (@adriendelsalle) #1294 - Fix dangling LockFiles (@adriendelsalle) #1290 - Fix shell activation regression (@adriendelsalle) #1289 ## 0.18.1 (November 19, 2021) Bug fixes - Fix default log level, use warning everywhere (@adriendelsalle) #1279 - Allow mamba to set max extraction threads using `MAMBA_EXTRACT_THREADS` env var (@adriendelsalle) #1281 ## 0.18.0 (November 17, 2021) New features - Implement parallel packages extraction using subprocesses (@jonashaag @adriendelsalle) #1195 - Add channel URLs to info (@jonashaag) #1235 - Read custom_multichannels from .condarc (@jonashaag) #1240 - Improve pyc compilation, make it configurable (@adriendelsalle) #1249 - Use `spdlog` for nicer and configurable logs (@adriendelsalle) #1255 - Make show_banner rc and env_var configurable (@adriendelsalle) #1257 - Add info JSON output (@adriendelsalle) #1271 Bug fixes - Fix failing package cache checks (@wolfv) #1237 - Improve catching of reproc errors (such as OOM-killed) (@adriendelsalle) #1250 - Fix shell init with relative paths (@adriendelsalle) #1252 - Fix not thrown error in multiple caches logic (@adriendelsalle) #1253 General improvements - Split projects, improve CMake options (@adriendelsalle) #1219 #1243 - Test that a missing file doesn't cause an unlink error (@adriendelsalle) #1251 - Improve logging on YAML errors (@adriendelsalle) #1254 ## 0.17.0 (October 13, 2021) API Breaking changes: The Transaction and the Subdir interface have slightly changed (no more explicit setting of the writable packages dir is necessary, this value is taken directly from the MultiPackagesCache now) - improve listing of (RC-) configurable values in `micromamba` #1210 (thanks @adriendelsalle) - Improve micromamba lockfiles and add many tests #1193 (thanks @adriendelsalle) - Support multiple package caches in micromamba (thanks @adriendelsalle) #1109 - Order explicit envs in micromamba (also added some text to the docs about libsolv transactions) #1198 - Add `micromamba package` subcommand to extract, create and transmute packages #1187 - Improve micromamba configuration to support multi-stage loading of RC files (thanks @adriendelsalle) #1189 #1190 #1191 #1188 - Add handling of `CONDA_SAFETY_CHECKS` to micromamba #1143 (thanks @isuruf) - Improve mamba messaging by adding a space #1186 (thanks @wkusnierczyk) - Add support for `custom_multichannels` #1142 - micromamba: expose setting for `add_pip_as_python_dependency` #1203 - stop displaying banner when running `mamba list` #1184 (thanks @madhur-thandon) ## 0.16.0 (September 27, 2021) - Add a User-Agent header to all requests (mamba/0.16.0) (thanks @shankerwangmiao) - Add `micromamba env export (--explicit)` to micromamba - Do not display banner with `mamba list` (thanks @madhur-tandon) - Use directory of environment.yml as cwd when creating environment (thanks @marscher & @adriendelsalle) - Improve outputs - content-trust: Add Python bindings for content-trust API - content-trust: Load PkgMgr definitions from file - content-trust: Improve HEAD request fallback handling - export Transaction.find_python_version to Python - Continue `shell init` when we can't create the prefix script dir (thanks @maresb) - Implement support for `fish` shell in `micromamba` (thanks @soraxas) - Add constraint with pin when updating - Expose methods for virtual packages to Python (thanks @madhur-tandon) ## 0.15.3 (August 18, 2021) - change token regex to work with edge-cases (underscores in user name) (#1122) - only pin major.minor version of python for update --all (#1101, thanks @mparry!) - add mamba init to the activate message (#1124, thanks @isuruf) - hide tokens in logs (#1121) - add lockfiles for repodata and pkgs download (#1105, thanks @jaimergp) - log actual SHA256/MD5/file size when failing to avlidate (#1095, thanks @johnhany97) - Add mamba.bat in front of PATH (#1112, thanks @isuruf) - Fix mamba not writable cache errors (#1108) ## 0.15.2 (July 16, 2021) - micromamba autocomplete now ready for usage (#1091) - improved file:// urls for windows to properly work (#1090) ## 0.15.1 (July 15, 2021) New features: - add `mamba init` command and add mamba.sh (#1075, thanks @isuruf & #1078) - add flexible channel priority option in micromamba CLI (#1087) - improved autocompletion for micromamba (#1079) Bug fixes: - improve "file://" URL handling, fix local channel on Windows (#1085) - fix CONDA_SUBDIR not being used in mamba (#1084) - pass in channel_alias and custom_channels from conda to mamba (#1081) ## 0.15.0 (July 9, 2021) Big changes: - improve solutions by inspecting dependency versions as well (libsolv PR: ) @wolfv - properly implement strict channel priority (libsolv PR: ) @adriendelsalle - Note that this changes the meaning of strict and flexible priority as the previous implementation did not follow conda's semantics. Mamba now has three modes, just like conda: strict, flexible and disabled. Strict will completely disregard any packages from lower-priority channels if a package of the same name exists in a higher priority channel. Flexible will use packages from lower-priority channels if necessary to fulfill dependencies or explicitly requested (e.g. by version number). Disabled will use the highest version number, irregardless of the channel order. - allow subdir selection as part of the channel: users can now specify an explicit list of subdirs, for example: `-c mychannel[linux-static64, linux-64, noarch]` to pull in repodata and packages from these three subdirs. Thanks for the contribution, @afranchuk! #1033 New features - remove orphaned packages such as dependencies of explicitly installed packages (@adriendelsalle) #1040 - add a diff character before package name in transaction table to improve readability without coloration (@adriendelsalle) #1040 - add capability to freeze installed packages during `install` operation using `--freeze-installed` flag (@adriendelsalle) #1048 - Hide tokens and basic http auth secrets in log messages (#1061) - Parse and use explicit platform specifications (thanks @afranchuk) (#1033) - add pretty print to repoquery search (thanks @madhur-tandon) (#1018) - add docs for package resolution Bug fixes: - Fix small output issues (#1060) - More descriptive incorrect download error (thanks @AntoinePrv) #1066 - respect channel specific pins when updating (#1045) - keep track features in PackageInfo class (#1046) ## 0.14.1 (June 25, 2021) New features - [micromamba] add remove command, to remove keys of vectors (@marimeireles) #1011 Bug fixes - [micromamba] fixed in config prepend and append sequence (@adriendelsalle) #1023 - fix bug when username has @ (@madhur-tandon) #1025 - fix wrong update spec in history (@madhur-tandon) #1028 - [mamba] silent pinned packages using JSON output (@adriendelsalle) #1031 ## 0.14.0 (June 16, 2021) New features - [micromamba] add `config set`, `get`, `append` and `prepend`, `remove` (@marimeireles) #838 - automatically include `pip` in conda dependencies when having pip packages to install (@madhur-tandon) #973 - add experimental support for artifacts verification (@adriendelsalle) #954,#955,#956,#963,#965,#970,#972,#978 - [micromamba] shell init will try attempt to enable long paths support on Windows (@wolfv) #975 - [micromamba] if `menuinst` json files are present, micromamba will create shortcuts in the start menu on Windows (@wolfv) #975 - Improve python auto-pinning and add --no-py-pin flag to micromamba (@adriendelsalle) #1010 - [micromamba] Fix constructor invalid repodata_record (@adriendelsalle) #1007 - Refactor log levels for linking steps (@adriendelsalle) #1009 - [micromamba] Use a proper requirements.txt file for pip installations #1008 Bug fixes - fix double-print int transaction (@JohanMabille) #952 - fix strip function (@wolfv) #974 - [micromamba] expand home directory in `--rc-file` (@adriendelsalle) #979 - [micromamba] add yes and no as additional ways of answering a prompt (@ibebrett) #989 - fix long paths support on Windows (@adriendelsalle) #994 General improvement - remove duplicate snippet (@madhur-tandon) #957 - add `trace` log level (@adriendelsalle) #988 Docs - concepts, user guide, configuration, update installation and build locally (@adriendelsalle) #953 - advance usage section, linking (@adriendelsalle) #998 - repo, channel, subdir, repodata, tarball (@adriendelsalle) #1004 - artifacts verification (@adriendelsalle) #1000 ## 0.13.1 (May 17, 2021) Bug fixes - [micromamba] pin only minor python version #948 - [micromamba] use openssl certs when not linking statically #949 ## 0.13.0 (May 12, 2021) New features - [mamba & micromamba] aggregated progress bar for package downloading and extraction (thanks @JohanMabille) #928 Bug fixes - [micromamba] fixes for micromamba usage in constructor #935 - [micromamba] fixes for the usage of lock files #936 - [micromamba] switched from libsodium to openssl for ed25519 signature verification #933 Docs - Mention mambaforge in the README (thanks @s-pike) #932 ## 0.12.3 (May 10, 2021) New features - [libmamba] add free-function to use an existing conda root prefix (@adriendelsalle) #927 General improvements - [micromamba] fix a typo in documentation (@cjber) #926 ## 0.12.2 (May 03, 2021) New features - [micromamba] add initial framework for TUF validation (@adriendelsalle) #916 #919 - [micromamba] add channels from specs to download (@wolfv) #918 ## 0.12.1 (Apr 30, 2021) New features - [micromamba] env list subcommand (@wolfv) #913 Bug fixes - [micromamba] fix multiple shell init with cmd.exe (@adriendelsalle) #915 - [micromamba] fix activate with --stack option (@wolfv) #914 - [libmamba] only try loading ssl certificates when needed (@adriendelsalle) #910 - [micromamba] remove target_prefix checks when activating (@adriendelsalle) #909 - [micromamba] allow 'ultra-dry' config checks in final build (@adriendelsalle) #912 ## 0.12.0 (Apr 26, 2021) New features - [libmamba] add experimental shell autocompletion (@wolfv) #900 - [libmamba] add token handling (@wolfv) #886 - [libmamba] add experimental pip support in spec files (@wolfv) #885 Bug fixes - [libmamba] ignore failing pyc compilation for noarch packages (@wolfv) #904 #905 - [libmamba] fix string wrapping in error message (@bdice) #902 - [libmamba] fix cache error during remove operation (@adriendelsalle) #901 - [libmamba] add constraint with pinning during update operation (@wolfv) #892 - [libmamba] fix shell activate prefix check (@ashwinvis) #889 - [libmamba] make prefix mandatory for shell init (@adriendelsalle) #896 - [mamba] fix `env update` command (@ScottWales) #891 General improvements - [libmamba] use lockfile, fix channel not loaded logic (@wolfv) #903 - [libmamba] make root_prefix warnings more selective (@adriendelsalle) #899 - [libmamba] house-keeping in python tests (@adriendelsalle) #898 - [libmamba] modify mamba/micromamba specific guards (@adriendelsalle) #895 - [libmamba] add simple lockfile mechanism (@wolfv) #894 - [libmamba] deactivate ca-certificates search when using offline mode (@adriendelsalle) #893 ## 0.11.3 (Apr 21, 2021) - [libmamba] make platform rc configurable #883 - [libmamba] expand user home in target and root prefixes #882 - [libmamba] avoid memory effect between operations on target_prefix #881 - [libmamba] fix unnecessary throwing target_prefix check in `clean` operation #880 - [micromamba] fix `clean` flags handling #880 - [libmamba] C-API teardown on error #879 ## 0.11.2 (Apr 21, 2021) - [libmamba] create "base" env only for install operation #875 - [libmamba] remove confirmation prompt of root_prefix in shell init #874 - [libmamba] improve overrides between target_prefix and env_name #873 - [micromamba] fix use of `-p,--prefix` and spec file env name #873 ## 0.11.1 (Apr 20, 2021) - [libmamba] fix channel_priority computation #872 ## 0.11.0 (Apr 20, 2021) - [libmamba] add experimental mode that unlock edge features #858 - [micromamba] add `--experimental` umamba flag to enable experimental mode #858 - [libmamba] improve base env creation #860 - [libmamba] fix computation of weakly canonical target prefix #859 - update libsolv dependency in env-dev.yml file, update documentation (thanks @Aratz) #843 - [libmamba] handle package cache in secondary locations, fix symlink errors (thanks wenjuno) #856 - [libmamba] fix CI cURL SSL error on macos with Darwin backend (thanks @wolfv) #865 - [libmamba] improve error handling in C-API by catching and returning an error code #862 - [libmamba] handle configuration lifetime (single operation configs) #863 - [libmamba] enable ultra-dry C++ tests #868 - [libmamba] migrate `config` operation implem from `micromamba` to `libmamba` API #866 - [libmamba] add capapbility to set CLI config from C-API #867 ## 0.10.0 (Apr 16, 2021) - [micromamba] allow creation of empty env (without specs) #824 #827 - [micromamba] automatically create empty `base` env at new root prefix #836 - [micromamba] add remove all CLI flags `-a,--all` #824 - [micromamba] add dry-run and ultra-dry-run tests to increase coverage and speed-up CI #813 #845 - [micromamba] allow CLI to override spec file env name (create, install and update) #816 - [libmamba] split low-level and high-level API #821 #824 - [libmamba] add a C high-level API #826 - [micromamba] support `__linux` virtual package #829 - [micromamba] improve the display of solver problems #822 - [micromamba] improve info sub-command with target prefix status (active, not found, etc.) #825 - [mamba] Change pybind11 to a build dependency (thanks @maresb) #846 - [micromamba] add shell detection for shell sub-command #839 - [micromamba] expand user in shell prefix sub-command #831 - [micromamba] refactor explicit specs install #824 - [libmamba] improve configuration (refactor API, create a loading sequence) #840 - [libmamba] support cpp-filesystem breaking changes on Windows fs #849 - [libmamba] add a simple context debugging (thanks @wolf) #820 - [libmamba] improve C++ test suite #830 - fix CI C++ tests (unix/libmamba) and Python tests (win/mamba) wrongly successful #853 ## 0.9.2 (Apr 1, 2021) - [micromamba] fix unc url support (thanks @adamant) - [micromamba] add --channel-alias as cli option to micromamba (thanks @adriendelsalle) - [micromamba] fix --no-rc and environment yaml files (thanks @adriendelsalle) - [micromamba] handle spec files in update and install subcommands (thanks @adriendelsalle) - add simple context debugging, dry run tests and other test framework improvements ## 0.9.1 (Mar 26, 2021) - [micromamba] fix remove command target_prefix selection - [micromamba] improve target_prefix fallback for CLI, add tests (thanks @adriendelsalle) ## 0.9.0 (Mar 25, 2021) - [micromamba] use strict channels priority by default - [micromamba] change config precedence order: API>CLI>ENV>RC - [micromamba] `config list` sub command optional display of sources, defaults, short/long descriptions and groups - [micromamba] prevent crashes when no bashrc or zshrc file found (thanks @wolfv) - add support for UNC file:// urls (thanks @adamant) - add support for use_only_tar_bz2 (thanks @tl-hbk @wolfv) - add pinned specs for env update (thanks @wolfv) - properly adhere to run_constrains (thanks @wolfv) ## 0.8.2 (Mar 12, 2021) - [micromamba] fix setting network options before explicit spec installation - [micromamba] fix python based tests for windows ## 0.8.1 (Mar 11, 2021) - use stoull (instead of stoi) to prevent overflow with long package build numbers (thanks @pbauwens-kbc) - [micromamba] fixing OS X certificate search path - [micromamba] refactor default root prefix, make it configurable from CLI (thanks @adriendelsalle) - [micromamba] set ssl backend, use native SSL if possible (thanks @adriendelsalle) - [micromamba] sort json transaction, and add UNLINK field - [micromamba] left align log messages - [micromamba] libsolv log messages to stderr (thanks @mariusvniekerk) - [micromamba] better curl error messages ## 0.8.0 (Mar 5, 2021) - [micromamba] condarc and mambarc config file reading (and config subcommand) (thanks @adriendelsalle) - [micromamba] support for virtual packages (thanks @adriendelsalle) - [micromamba] set ssl backend, use native SSL if possible - [micromamba] add python based testing framework for CLI - [micromamba] refactor CLI and micromamba main file (thanks @adriendelsalle) - [micromamba] add linking options (--always-copy etc.) (thanks @adriendelsalle) - [micromamba] fix multiple prefix replacements in binary files - [micromamba] fix micromamba clean (thanks @phue) - [micromamba] change package validation settings to --safety-checks and --extra-safety-checks - [micromamba] add update subcommand (thanks @adriendelsalle) - [micromamba] support pinning packages (including python minor version) (thanks @adriendelsalle) - [micromamba] add try/catch to WinReg getStringValue (thanks @SvenAdler) - [micromamba] add ssl-no-revoke option for more conda-compatibility (thanks @tl-hbk) - [micromamba] die when no ssl certificates are found (thanks @wholtz) - [docs] add explanation for base env install (thanks @ralexx) and rename changelog to .md (thanks @kevinheavey) - [micromamba] compare cleaned URLs for cache invalidation - [micromamba] add regex handling to list command ## 0.7.14 (Feb 12, 2021) - [micromamba] better validation of extracted directories - [mamba] add additional tests for authentication and simple repodata server - make LOG_WARN the default log level, and move some logs to INFO - [micromamba] properly replace long shebangs when linking - [micromamba] add quote for shell for prefixes with spaces - [micromamba] add clean functionality - [micromamba] always make target prefix path absolute ## 0.7.13 (Feb 4, 2021) - [micromamba] Immediately exit after printing version (again) ## 0.7.12 (Feb 3, 2021) - [micromamba] Improve CTRL+C signal handling behavior and simplify code - [micromamba] Revert extraction to temporary directory because of invalid cross-device links on Linux - [micromamba] Clean up partially extracted archives when CTRL+C interruption occurred ## 0.7.11 (Feb 2, 2021) - [micromamba] use wrapped call when compiling noarch Python code, which properly calls chcp for Windows - [micromamba] improve checking the pkgs cache - [mamba] fix authenticated URLs (thanks @wenjuno) - first extract to temporary directory, then move to final pkgs cache to prevent corrupted extracted data ## 0.7.10 (Jan 22, 2021) - [micromamba] properly fix PATH when linking, prevents missing vcruntime140.dll - [mamba] add virtual packages when creating any environment, not just on update (thanks @cbalioglu) ## 0.7.9 (Jan 19, 2021) - [micromamba] fix PATH when linking ## 0.7.8 (Jan 14, 2021) - [micromamba] retry on corrupted repodata - [mamba & micromamba] fix error handling when writing repodata ## 0.7.6 (Dec 22, 2020) - [micromamba] more console flushing for std::cout consumers ## 0.7.6 (Dec 14, 2020) - [mamba] more arguments for repodata.create_pool ## 0.7.5 (Dec 10, 2020) - [micromamba] better error handling for YAML file reading, allows to pass in `-n` and `-p` from command line - [mamba & micromamba] ignore case of HTTP headers - [mamba] fix channel keys are without tokens (thanks @s22chan) ## 0.7.4 (Dec 5, 2020) - [micromamba] fix noarch installation for explicit environments ## 0.7.3 (Nov 20, 2020) - [micromamba] fix installation of noarch files with long prefixes - [micromamba] fix activation on windows with whitespaces in root prefix (thanks @adriendelsalle) - [micromamba] add `--json` output to micromamba list ## 0.7.2 (Nov 18, 2020) - [micromamba] explicit specs installing should be better now - empty lines are ignored - network settings are correctly set to make ssl verification work - New Python repoquery API for mamba - Fix symlink packing for mamba package creation and transmute - Do not keep tempfiles around ## 0.7.1 (Nov 16, 2020) - Handle LIBARCHIVE_WARN to not error, instead print warning (thanks @obilaniu) ## 0.7.0 (Nov 12, 2020) - Improve activation and deactivation logic for micromamba - Switching `subprocess` implementation to more tested `reproc++` - Fixing Windows noarch entrypoints generation with micromamba - Fix pre-/post-link script running with micromamba to use micromamba activation logic - Empty environment creation skips all repodata downloading & solving - Fix micromamba install when environment is activated (thanks @isuruf) - Micromamba now respects the $CONDA_SUBDIR environment variable (thanks @mariusvniekerk) - Fix compile time warning (thanks @obilaniu) - Fixed wrong CondaValueError import statement in mamba.py (thanks @saraedum) ## 0.6.5 (Oct 2020) - Fix code signing for Apple Silicon (osx-arm64) @isuruf ================================================ FILE: libmamba/CMakeLists.txt ================================================ # Copyright (c) 2019, QuantStack and Mamba Contributors # # Distributed under the terms of the BSD 3-Clause License. # # The full license is in the file LICENSE, distributed with this software. cmake_minimum_required(VERSION 3.16) cmake_policy(SET CMP0025 NEW) # Introduced in cmake 3.0 cmake_policy(SET CMP0077 NEW) # Introduced in cmake 3.13 project(libmamba) set(LIBMAMBA_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include) set(LIBMAMBA_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) set(LIBMAMBA_DATA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/data) # Versioning # =========== file( STRINGS "${LIBMAMBA_INCLUDE_DIR}/mamba/version.hpp" libmamba_version_defines REGEX "#define LIBMAMBA_VERSION_(MAJOR|MINOR|PATCH)" ) foreach(ver ${libmamba_version_defines}) if(ver MATCHES "#define LIBMAMBA_VERSION_(MAJOR|MINOR|PATCH) +([^ ]+)$") set( LIBMAMBA_VERSION_${CMAKE_MATCH_1} "${CMAKE_MATCH_2}" CACHE INTERNAL "" ) endif() endforeach() set( ${PROJECT_NAME}_VERSION ${LIBMAMBA_VERSION_MAJOR}.${LIBMAMBA_VERSION_MINOR}.${LIBMAMBA_VERSION_PATCH} ) message(STATUS "Building libmamba v${${PROJECT_NAME}_VERSION}") # Binary version See the following URL for explanations about the binary versioning # https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html#Updating-version-info file( STRINGS "${LIBMAMBA_INCLUDE_DIR}/mamba/version.hpp" libmamba_version_defines REGEX "#define LIBMAMBA_BINARY_(CURRENT|REVISION|AGE)" ) foreach(ver ${libmamba_version_defines}) if(ver MATCHES "#define LIBMAMBA_BINARY_(CURRENT|REVISION|AGE) +([^ ]+)$") set( LIBMAMBA_BINARY_${CMAKE_MATCH_1} "${CMAKE_MATCH_2}" CACHE INTERNAL "" ) endif() endforeach() set( LIBMAMBA_BINARY_VERSION ${LIBMAMBA_BINARY_CURRENT}.${LIBMAMBA_BINARY_REVISION}.${LIBMAMBA_BINARY_AGE} ) message(STATUS "libmamba binary version: v${LIBMAMBA_BINARY_VERSION}") # Build options # ============= set( BUILD_LOG_LEVEL "TRACE" CACHE STRING "Logger active level at compile time" ) if(NOT ${BUILD_LOG_LEVEL} MATCHES "^(TRACE|DEBUG|INFO|WARN|ERROR|CRITICAL|OFF)$") message( FATAL_ERROR "Invalid log level: ${BUILD_LOG_LEVEL}, should be one of { TRACE, DEBUG, INFO, WARN, ERROR, CRITICAL, OFF }" ) endif() # TODO: move this into the mamba_create_target macro if(BUILD_STATIC) add_definitions(-DLIBMAMBA_STATIC_DEPS) endif() if(WIN32) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) endif() option(ENABLE_ASAN "Enable AddressSanitizer (currently only supported on GCC and Clang)" OFF) if(ENABLE_ASAN) message( WARNING "AddressSanitizer instrumentation will be injected into binaries - do not release these binaries" ) add_compile_options(-fno-omit-frame-pointer -fsanitize=address) add_link_options(-fno-omit-frame-pointer -fsanitize=address) endif() option(ENABLE_TSAN "Enable ThreadSanitizer (currently only supported on GCC and Clang)" OFF) if(ENABLE_TSAN) message( WARNING "ThreadSanitizer instrumentation will be injected into binaries - do not release these binaries" ) add_compile_options(-fno-omit-frame-pointer -fsanitize=thread) add_link_options(-fno-omit-frame-pointer -fsanitize=thread) endif() option( ENABLE_UBSAN "Enable UndefinedBehaviorSanitizer (currently only supported on GCC and Clang)" OFF ) if(ENABLE_UBSAN) message( WARNING "UndefinedBehaviorSanitizer instrumentation will be injected into binaries - do not release these binaries" ) add_compile_options(-fno-omit-frame-pointer -fsanitize=undefined) add_link_options(-fno-omit-frame-pointer -fsanitize=undefined) endif() # Source files # ============ find_package(Python3 COMPONENTS Interpreter) set( SHELL_SCRIPTS mamba.sh mamba.csh mamba.bat activate.bat _mamba_activate.bat mamba_hook.bat mamba_hook.ps1 Mamba.psm1 mamba.xsh mamba.fish compile_pyc.py mamba_completion.posix ) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/shell_scripts) foreach(script ${SHELL_SCRIPTS}) string(REPLACE "." "_" script_var ${script}) add_custom_command( OUTPUT shell_scripts/${script}.cpp DEPENDS data/${script} COMMAND ${Python3_EXECUTABLE} ${LIBMAMBA_DATA_DIR}/bin2header.py --extern -v data_${script_var} -i ${CMAKE_CURRENT_SOURCE_DIR}/data/${script} -o ${CMAKE_CURRENT_BINARY_DIR}/shell_scripts/${script}.cpp ) endforeach() set( LIBMAMBA_SOURCES longpath.manifest ${LIBMAMBA_SOURCE_DIR}/version.cpp # Filesystem library ${LIBMAMBA_SOURCE_DIR}/fs/filesystem.cpp # C++ utility library ${LIBMAMBA_SOURCE_DIR}/util/cfile.cpp ${LIBMAMBA_SOURCE_DIR}/util/cryptography.cpp ${LIBMAMBA_SOURCE_DIR}/util/encoding.cpp ${LIBMAMBA_SOURCE_DIR}/util/environment.cpp ${LIBMAMBA_SOURCE_DIR}/util/os_linux.cpp ${LIBMAMBA_SOURCE_DIR}/util/os_osx.cpp ${LIBMAMBA_SOURCE_DIR}/util/os_unix.cpp ${LIBMAMBA_SOURCE_DIR}/util/os_win.cpp ${LIBMAMBA_SOURCE_DIR}/util/parsers.cpp ${LIBMAMBA_SOURCE_DIR}/util/path_manip.cpp ${LIBMAMBA_SOURCE_DIR}/util/random.cpp ${LIBMAMBA_SOURCE_DIR}/util/string.cpp ${LIBMAMBA_SOURCE_DIR}/util/url_manip.cpp ${LIBMAMBA_SOURCE_DIR}/util/url.cpp # Implementation of version and matching specs ${LIBMAMBA_SOURCE_DIR}/specs/archive.cpp ${LIBMAMBA_SOURCE_DIR}/specs/authentication_info.cpp ${LIBMAMBA_SOURCE_DIR}/specs/build_number_spec.cpp ${LIBMAMBA_SOURCE_DIR}/specs/channel.cpp ${LIBMAMBA_SOURCE_DIR}/specs/chimera_string_spec.cpp ${LIBMAMBA_SOURCE_DIR}/specs/conda_url.cpp ${LIBMAMBA_SOURCE_DIR}/specs/glob_spec.cpp ${LIBMAMBA_SOURCE_DIR}/specs/match_spec.cpp ${LIBMAMBA_SOURCE_DIR}/specs/package_info.cpp ${LIBMAMBA_SOURCE_DIR}/specs/platform.cpp ${LIBMAMBA_SOURCE_DIR}/specs/regex_spec.cpp ${LIBMAMBA_SOURCE_DIR}/specs/repo_data.cpp ${LIBMAMBA_SOURCE_DIR}/specs/unresolved_channel.cpp ${LIBMAMBA_SOURCE_DIR}/specs/version_spec.cpp ${LIBMAMBA_SOURCE_DIR}/specs/version.cpp # Solver generic interface ${LIBMAMBA_SOURCE_DIR}/solver/helpers.cpp ${LIBMAMBA_SOURCE_DIR}/solver/problems_graph.cpp # Solver libsolv implementation ${LIBMAMBA_SOURCE_DIR}/solver/libsolv/database.cpp ${LIBMAMBA_SOURCE_DIR}/solver/libsolv/helpers.cpp ${LIBMAMBA_SOURCE_DIR}/solver/libsolv/matcher.cpp ${LIBMAMBA_SOURCE_DIR}/solver/libsolv/parameters.cpp ${LIBMAMBA_SOURCE_DIR}/solver/libsolv/repo_info.cpp ${LIBMAMBA_SOURCE_DIR}/solver/libsolv/solver.cpp ${LIBMAMBA_SOURCE_DIR}/solver/libsolv/unsolvable.cpp # Artifacts validation ${LIBMAMBA_SOURCE_DIR}/validation/errors.cpp ${LIBMAMBA_SOURCE_DIR}/validation/keys.cpp ${LIBMAMBA_SOURCE_DIR}/validation/repo_checker.cpp ${LIBMAMBA_SOURCE_DIR}/validation/tools.cpp ${LIBMAMBA_SOURCE_DIR}/validation/update_framework_v0_6.cpp ${LIBMAMBA_SOURCE_DIR}/validation/update_framework_v1.cpp ${LIBMAMBA_SOURCE_DIR}/validation/update_framework.cpp # Downloaders and mirrors ${LIBMAMBA_SOURCE_DIR}/download/compression.cpp ${LIBMAMBA_SOURCE_DIR}/download/compression.hpp ${LIBMAMBA_SOURCE_DIR}/download/curl.cpp ${LIBMAMBA_SOURCE_DIR}/download/curl.hpp ${LIBMAMBA_SOURCE_DIR}/download/downloader_impl.hpp ${LIBMAMBA_SOURCE_DIR}/download/downloader.cpp ${LIBMAMBA_SOURCE_DIR}/download/mirror_impl.cpp ${LIBMAMBA_SOURCE_DIR}/download/mirror_impl.hpp ${LIBMAMBA_SOURCE_DIR}/download/mirror_map.cpp ${LIBMAMBA_SOURCE_DIR}/download/mirror.cpp ${LIBMAMBA_SOURCE_DIR}/download/request.cpp # Core API (low-level) ${LIBMAMBA_SOURCE_DIR}/core/activation.cpp ${LIBMAMBA_SOURCE_DIR}/core/channel_context.cpp ${LIBMAMBA_SOURCE_DIR}/core/context.cpp ${LIBMAMBA_SOURCE_DIR}/core/download_progress_bar.cpp ${LIBMAMBA_SOURCE_DIR}/core/env_lockfile.cpp ${LIBMAMBA_SOURCE_DIR}/core/env_lockfile_impl.hpp ${LIBMAMBA_SOURCE_DIR}/core/env_lockfile_conda.cpp ${LIBMAMBA_SOURCE_DIR}/core/env_lockfile_mambajs.cpp ${LIBMAMBA_SOURCE_DIR}/core/environments_manager.cpp ${LIBMAMBA_SOURCE_DIR}/core/error_handling.cpp ${LIBMAMBA_SOURCE_DIR}/core/execution.cpp ${LIBMAMBA_SOURCE_DIR}/core/fsutil.cpp ${LIBMAMBA_SOURCE_DIR}/core/history.cpp ${LIBMAMBA_SOURCE_DIR}/core/link.cpp ${LIBMAMBA_SOURCE_DIR}/core/link.hpp ${LIBMAMBA_SOURCE_DIR}/core/logging.cpp ${LIBMAMBA_SOURCE_DIR}/core/menuinst.cpp ${LIBMAMBA_SOURCE_DIR}/core/output.cpp ${LIBMAMBA_SOURCE_DIR}/core/package_cache.cpp ${LIBMAMBA_SOURCE_DIR}/core/package_database_loader.cpp ${LIBMAMBA_SOURCE_DIR}/core/package_fetcher.cpp ${LIBMAMBA_SOURCE_DIR}/core/package_handling.cpp ${LIBMAMBA_SOURCE_DIR}/core/package_paths.cpp ${LIBMAMBA_SOURCE_DIR}/core/pinning.cpp ${LIBMAMBA_SOURCE_DIR}/core/prefix_data.cpp ${LIBMAMBA_SOURCE_DIR}/core/progress_bar_impl.cpp ${LIBMAMBA_SOURCE_DIR}/core/progress_bar.cpp ${LIBMAMBA_SOURCE_DIR}/core/query.cpp ${LIBMAMBA_SOURCE_DIR}/core/repo_checker_store.cpp ${LIBMAMBA_SOURCE_DIR}/core/run.cpp ${LIBMAMBA_SOURCE_DIR}/core/shell_init.cpp ${LIBMAMBA_SOURCE_DIR}/core/shards.cpp ${LIBMAMBA_SOURCE_DIR}/core/shard_index_loader.cpp ${LIBMAMBA_SOURCE_DIR}/core/shard_traversal.cpp ${LIBMAMBA_SOURCE_DIR}/core/shard_types.cpp ${LIBMAMBA_SOURCE_DIR}/core/singletons.cpp ${LIBMAMBA_SOURCE_DIR}/core/subdir_index.cpp ${LIBMAMBA_SOURCE_DIR}/core/thread_utils.cpp ${LIBMAMBA_SOURCE_DIR}/core/timeref.cpp ${LIBMAMBA_SOURCE_DIR}/core/transaction_context.cpp ${LIBMAMBA_SOURCE_DIR}/core/transaction_context.hpp ${LIBMAMBA_SOURCE_DIR}/core/transaction.cpp ${LIBMAMBA_SOURCE_DIR}/core/util_os.cpp ${LIBMAMBA_SOURCE_DIR}/core/util.cpp ${LIBMAMBA_SOURCE_DIR}/core/virtual_packages.cpp # API (high-level) ${LIBMAMBA_SOURCE_DIR}/api/c_api.cpp ${LIBMAMBA_SOURCE_DIR}/api/channel_loader.cpp ${LIBMAMBA_SOURCE_DIR}/api/clean.cpp ${LIBMAMBA_SOURCE_DIR}/api/config.cpp ${LIBMAMBA_SOURCE_DIR}/api/configuration.cpp ${LIBMAMBA_SOURCE_DIR}/api/create.cpp ${LIBMAMBA_SOURCE_DIR}/api/env.cpp ${LIBMAMBA_SOURCE_DIR}/api/info.cpp ${LIBMAMBA_SOURCE_DIR}/api/install.cpp ${LIBMAMBA_SOURCE_DIR}/api/list.cpp ${LIBMAMBA_SOURCE_DIR}/api/utils.cpp ${LIBMAMBA_SOURCE_DIR}/api/utils.hpp ${LIBMAMBA_SOURCE_DIR}/api/remove.cpp ${LIBMAMBA_SOURCE_DIR}/api/repoquery.cpp ${LIBMAMBA_SOURCE_DIR}/api/shell.cpp ${LIBMAMBA_SOURCE_DIR}/api/update.cpp ) # TODO: remove when switch to C++20 if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") # This file uses capturing structured bindings, which was fixed in C++20 set_source_files_properties( ${LIBMAMBA_SOURCE_DIR}/download/mirror_impl.cpp PROPERTIES COMPILE_FLAGS -Wno-c++20-extensions ) endif() foreach(script ${SHELL_SCRIPTS}) list(APPEND LIBMAMBA_SOURCES shell_scripts/${script}.cpp) endforeach() set( LIBMAMBA_PUBLIC_HEADERS ${LIBMAMBA_INCLUDE_DIR}/mamba/version.hpp # Filesystem library ${LIBMAMBA_INCLUDE_DIR}/mamba/fs/filesystem.hpp # Utility library ${LIBMAMBA_INCLUDE_DIR}/mamba/util/build.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/cast.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/cfile.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/conditional.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/cryptography.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/deprecation.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/encoding.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/environment.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/flat_binary_tree.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/flat_bool_expr_tree.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/flat_set.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/graph.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/heap_optional.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/iterator.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/json.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/loop_control.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/os_linux.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/os_osx.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/os_unix.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/os_win.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/os.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/parsers.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/path_manip.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/random.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/string.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/synchronized_value.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/tuple_hash.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/type_traits.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/url_manip.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/url.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/variant_cmp.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/util/weakening_map.hpp # Implementation of version and matching specs ${LIBMAMBA_INCLUDE_DIR}/mamba/specs/archive.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/specs/authentication_info.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/specs/build_number_spec.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/specs/channel.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/specs/chimera_string_spec.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/specs/conda_url.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/specs/error.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/specs/glob_spec.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/specs/match_spec.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/specs/package_info.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/specs/platform.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/specs/regex_spec.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/specs/repo_data.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/specs/unresolved_channel.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/specs/version_spec.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/specs/version.hpp # Solver generic interface ${LIBMAMBA_INCLUDE_DIR}/mamba/solver/problems_graph.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/solver/request.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/solver/solution.hpp # Solver libsolv implementation ${LIBMAMBA_INCLUDE_DIR}/mamba/solver/libsolv/database.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/solver/libsolv/parameters.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/solver/libsolv/repo_info.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/solver/libsolv/solver.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/solver/libsolv/unsolvable.hpp # Artifacts validation ${LIBMAMBA_INCLUDE_DIR}/mamba/validation/errors.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/validation/keys.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/validation/repo_checker.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/validation/tools.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/validation/update_framework_v0_6.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/validation/update_framework_v1.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/validation/update_framework.hpp # Downloaders and mirrors ${LIBMAMBA_INCLUDE_DIR}/mamba/download/downloader.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/download/mirror_map.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/download/mirror.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/download/request.hpp # Core API (low-level) ${LIBMAMBA_INCLUDE_DIR}/mamba/core/activation.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/channel_context.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/context.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/context_params.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/download_progress_bar.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/env_lockfile.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/environments_manager.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/error_handling.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/execution.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/fsutil.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/history.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/invoke.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/logging.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/logging_tools.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/menuinst.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/output.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/package_cache.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/package_database_loader.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/package_fetcher.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/package_handling.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/package_paths.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/palette.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/pinning.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/prefix_data.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/progress_bar.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/query.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/repo_checker_store.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/run.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/shell_init.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/shards.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/shard_index_loader.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/shard_types.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/subdir_index.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/tasksync.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/thread_utils.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/timeref.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/transaction.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/util_os.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/util_scope.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/util.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/core/virtual_packages.hpp # API (high-level) ${LIBMAMBA_INCLUDE_DIR}/mamba/api/c_api.h ${LIBMAMBA_INCLUDE_DIR}/mamba/api/channel_loader.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/api/clean.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/api/config.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/api/configuration_impl.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/api/configuration.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/api/constants.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/api/create.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/api/env.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/api/info.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/api/install.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/api/list.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/api/remove.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/api/repoquery.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/api/shell.hpp ${LIBMAMBA_INCLUDE_DIR}/mamba/api/update.hpp ) # Targets and link # ================ find_package(fmt CONFIG REQUIRED) find_package(tl-expected CONFIG REQUIRED) find_package(nlohmann_json CONFIG REQUIRED) find_package(simdjson CONFIG REQUIRED) find_package(yaml-cpp CONFIG REQUIRED) find_package(reproc CONFIG REQUIRED) find_package(reproc++ CONFIG REQUIRED) find_package(Libsolv MODULE REQUIRED) find_package(msgpack-c CONFIG REQUIRED) add_subdirectory(ext/solv-cpp) macro(libmamba_create_target target_name linkage output_name) string(TOUPPER "${linkage}" linkage_upper) if(NOT ${linkage_upper} MATCHES "^(SHARED|STATIC)$") message(FATAL_ERROR "Invalid library linkage: ${linkage}") endif() # Output # ====== add_library(${target_name} ${linkage_upper} ${LIBMAMBA_PUBLIC_HEADERS} ${LIBMAMBA_SOURCES}) target_include_directories( ${target_name} PUBLIC $ $ PRIVATE ${LIBMAMBA_SOURCE_DIR} ) # Header only libraries are always linked the same way target_link_libraries(${target_name} PUBLIC tl::expected nlohmann_json::nlohmann_json) target_compile_features(${target_name} PUBLIC cxx_std_20) set_target_properties( ${target_name} PROPERTIES CXX_STANDARD 20 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO ) mamba_target_add_compile_warnings(${target_name} WARNING_AS_ERROR ${MAMBA_WARNING_AS_ERROR}) mamba_target_set_lto(${target_name} MODE ${MAMBA_LTO}) if(${linkage_upper} STREQUAL "STATIC") message(" -> Statically linking against libmamba (static) dependencies") if(TARGET msgpack-c-static) set(MSGPACK_TARGET msgpack-c-static) else() set(MSGPACK_TARGET msgpack-c) endif() mamba_target_check_type(yaml-cpp::yaml-cpp STATIC_LIBRARY FATAL_ERROR) mamba_target_check_type(reproc STATIC_LIBRARY FATAL_ERROR) mamba_target_check_type(reproc++ STATIC_LIBRARY FATAL_ERROR) mamba_target_check_type(${MSGPACK_TARGET} STATIC_LIBRARY FATAL_ERROR) target_link_libraries( ${target_name} PUBLIC fmt::fmt-header-only yaml-cpp::yaml-cpp ${MSGPACK_TARGET} PRIVATE reproc reproc++ simdjson::simdjson_static solv::libsolv_static solv::libsolvext_static solv::cpp ) if(UNIX) set( REQUIRED_STATIC_DEPS libcurl.a libssh2.a libgssapi_krb5.a libkrb5.a libk5crypto.a libkrb5support.a libcom_err.a libssl.a libcrypto.a libarchive.a libiconv.a libbz2.a liblz4.a libzstd.a libz.a liblzma.a libnghttp2.a libmsgpack-c.a ) if(APPLE) set(REQUIRED_STATIC_DEPS ${REQUIRED_STATIC_DEPS} libc++.a) endif() if(UNIX AND NOT APPLE) list(REMOVE_ITEM REQUIRED_STATIC_DEPS libiconv.a) endif() set(STATIC_DEPS "") foreach(LIB ${REQUIRED_STATIC_DEPS}) set(TMP_LIB "${LIB}-NOTFOUND") find_library(TMP_LIB NAMES "${LIB}") if(NOT ${TMP_LIB} STREQUAL "TMP_LIB-NOTFOUND") list(APPEND STATIC_DEPS "${TMP_LIB}") else() list(APPEND STATIC_DEPS "${LIB}-NOTFOUND") endif() endforeach(LIB) if(APPLE) find_library(SECURITY_LIBRARY Security) find_library(SYSTEMCONFIGURATION_LIBRARY SystemConfiguration) find_library(COREFOUNDATION_LIBRARY CoreFoundation) message("Found library: ${SECURITY_LIBRARY}\n${COREFOUNDATION_LIBRARY}") list( APPEND STATIC_DEPS ${COREFOUNDATION_LIBRARY} ${SECURITY_LIBRARY} ${SYSTEMCONFIGURATION_LIBRARY} ) endif() message(" -> Found static dependencies:") foreach(LIB ${STATIC_DEPS}) message(" - ${LIB}") endforeach(LIB) if(APPLE) set(MAMBA_FORCE_DYNAMIC_LIBS resolv c++abi) target_link_options(${target_name} PRIVATE -nostdlib++) elseif(UNIX) set(MAMBA_FORCE_DYNAMIC_LIBS rt dl resolv) target_link_options(${target_name} PUBLIC -static-libstdc++ -static-libgcc) endif() target_link_libraries(${target_name} PUBLIC ${STATIC_DEPS} ${MAMBA_FORCE_DYNAMIC_LIBS}) elseif(WIN32) set(CMAKE_PREFIX_PATH "$ENV{VCPKG_ROOT}/installed/x64-windows-static-md/") # TODO AND CONTEXT: We found a link error in libarchive which lacked a link to XmlLite # which is provided by Windows. libarchive has cmake scripts doing the necessary work to # link that library but for some reason we couldnt identify it is not linking in this # specific case (it was before but the version changed apparently). As a workaround we # manually link with that required library but a better solution would be to find why # libarchive doesnt do it itself. set(SYSTEM_PROVIDED_LIBRARIES XmlLite.lib) # required by libarchive set(ENABLE_WIN32_XMLLITE ON) # For Windows we have a vcpkg based build system right now. find_package(LibArchive MODULE REQUIRED) find_package(CURL CONFIG REQUIRED) find_library(LIBLZMA_LIBRARIES lzma REQUIRED) find_library(LZ4_LIBRARY NAMES lz4) find_library(LZO2_LIBRARY NAMES lzo2) find_package(zstd CONFIG REQUIRED) find_library(BZIP2_LIBRARIES NAMES bz2) find_library(CRYPTO_LIBRARIES NAMES libcrypto) find_library(LIBXML2_LIBRARY NAMES libxml2) find_library(ICONV_LIBRARY NAMES libiconv iconv) find_library(CHARSET_LIBRARY NAMES libcharset charset) message("Found: ${LIBXML2_LIBRARY} ${ICONV_LIBRARY} ${CHARSET_LIBRARY}") target_link_libraries( ${target_name} PUBLIC ${CRYPTO_LIBRARIES} ${SYSTEM_PROVIDED_LIBRARIES} ${LibArchive_LIBRARY} ${LIBXML2_LIBRARY} ${ICONV_LIBRARY} ${CHARSET_LIBRARY} zstd::libzstd_static ${LZ4_LIBRARY} ${LZO2_LIBRARY} ${BZIP2_LIBRARIES} ${LIBLZMA_LIBRARIES} CURL::libcurl ${sodium_LIBRARY_RELEASE} ) add_compile_definitions(LIBARCHIVE_STATIC CURL_STATICLIB) include_directories($ENV{CONDA_PREFIX}/Library/include/) include_directories($ENV{VCPKG_ROOT}/installed/x64-windows-static-md/include/) endif() else() message(" -> Dynamically linking against libmamba (shared) dependencies") mamba_target_check_type(yaml-cpp::yaml-cpp SHARED_LIBRARY WARNING) find_package(CURL REQUIRED) find_package(LibArchive REQUIRED) find_package(zstd REQUIRED) find_package(BZip2 REQUIRED) find_package(OpenSSL REQUIRED) target_link_libraries( ${target_name} PUBLIC ${LIBSOLV_LIBRARIES} ${LIBSOLVEXT_LIBRARIES} yaml-cpp::yaml-cpp fmt::fmt msgpack-c PRIVATE ${LibArchive_LIBRARIES} ${CURL_LIBRARIES} ${OPENSSL_LIBRARIES} BZip2::BZip2 reproc reproc++ simdjson::simdjson zstd::libzstd_shared solv::libsolv solv::libsolvext solv::cpp ) # CMake 3.17 provides a LibArchive::LibArchive target that could be used instead of # LIBRARIES/INCLUDE_DIRS target_include_directories(${target_name} PRIVATE "${LibArchive_INCLUDE_DIRS}") endif() if(WIN32) find_path( WINREG_INCLUDE_DIR NAMES WinReg.hpp PATH_SUFFIXES winreg ) target_include_directories(${target_name} PRIVATE ${WINREG_INCLUDE_DIR}) endif() if(UNIX) math(EXPR LIBMAMBA_BINARY_COMPATIBLE "${LIBMAMBA_BINARY_CURRENT} - ${LIBMAMBA_BINARY_AGE}") set_target_properties( ${target_name} PROPERTIES # PUBLIC_HEADER "${LIBMAMBA_PUBLIC_HEADERS}" COMPILE_DEFINITIONS "LIBMAMBA_EXPORTS" PREFIX "" VERSION "${LIBMAMBA_BINARY_COMPATIBLE}.${LIBMAMBA_BINARY_REVISION}.${LIBMAMBA_BINARY_AGE}" SOVERSION ${LIBMAMBA_BINARY_COMPATIBLE} OUTPUT_NAME "${output_name}" ) else() set_target_properties( ${target_name} PROPERTIES # PUBLIC_HEADER "${LIBMAMBA_PUBLIC_HEADERS}" COMPILE_DEFINITIONS "LIBMAMBA_EXPORTS" PREFIX "" VERSION ${LIBMAMBA_BINARY_VERSION} SOVERSION ${LIBMAMBA_BINARY_CURRENT} OUTPUT_NAME "${output_name}" ) target_compile_definitions(${target_name} PUBLIC GHC_WIN_DISABLE_WSTRING_STORAGE_TYPE) endif() if(${linkage_upper} STREQUAL "STATIC") find_package(Threads REQUIRED) target_link_libraries(${target_name} PUBLIC Threads::Threads) endif() list(APPEND libmamba_targets ${target_name}) add_library(mamba::${target_name} ALIAS ${target_name}) endmacro() set(libmamba_targets "") option( ENABLE_MAMBA_ROOT_PREFIX_FALLBACK "Enable mamba (shared) root prefix to be set to install prefix" ON ) if(BUILD_SHARED) message(STATUS "Adding shared libmamba target") libmamba_create_target(libmamba-dyn SHARED libmamba) if(ENABLE_MAMBA_ROOT_PREFIX_FALLBACK) # Use mamba installation prefix to set root prefix (base) target_compile_definitions(libmamba-dyn PUBLIC MAMBA_USE_INSTALL_PREFIX_AS_BASE) endif() endif() if(BUILD_STATIC) message(STATUS "Adding static libmamba target") # On Windows, a static library should use a different output name to avoid the conflict with the # import library of a shared one. if(CMAKE_HOST_WIN32) libmamba_create_target(libmamba-static STATIC libmamba_static) else() libmamba_create_target(libmamba-static STATIC libmamba) endif() endif() if(BUILD_SHARED_LIBS AND BUILD_SHARED) add_library(mamba::libmamba ALIAS libmamba-dyn) elseif(BUILD_STATIC) add_library(mamba::libmamba ALIAS libmamba-static) elseif(BUILD_SHARED) add_library(mamba::libmamba ALIAS libmamba-dyn) else() message(FATAL_ERROR "Select at least a build variant for libmamba") endif() # Tests if(BUILD_LIBMAMBA_TESTS) add_subdirectory(tests) endif() # Installation # ============ include(GNUInstallDirs) include(CMakePackageConfigHelpers) set( LIBMAMBA_CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" CACHE STRING "install path for libmambaConfig.cmake" ) install( TARGETS ${libmamba_targets} EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) install( DIRECTORY "${LIBMAMBA_INCLUDE_DIR}/" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" FILES_MATCHING PATTERN "*.hpp" PATTERN "*.h" ) # Configure 'mambaConfig.cmake' for a build tree set(MAMBA_CONFIG_CODE "####### Expanded from \@MAMBA_CONFIG_CODE\@ #######\n") set( MAMBA_CONFIG_CODE "${MAMBA_CONFIG_CODE}set(CMAKE_MODULE_PATH \"${CMAKE_CURRENT_SOURCE_DIR}/cmake;\${CMAKE_MODULE_PATH}\")\n" ) set(MAMBA_CONFIG_CODE "${MAMBA_CONFIG_CODE}##################################################") configure_package_config_file( ${PROJECT_NAME}Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" INSTALL_DESTINATION ${PROJECT_BINARY_DIR} ) # Configure 'mambaConfig.cmake' for an install tree set(MAMBA_CONFIG_CODE "") configure_package_config_file( ${PROJECT_NAME}Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" INSTALL_DESTINATION ${LIBMAMBA_CMAKECONFIG_INSTALL_DIR} ) write_basic_package_version_file( ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake VERSION ${LIBMAMBA_VERSION_MAJOR}.${LIBMAMBA_VERSION_MINOR}.${LIBMAMBA_VERSION_PATCH} COMPATIBILITY AnyNewerVersion ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake DESTINATION ${LIBMAMBA_CMAKECONFIG_INSTALL_DIR} ) install( EXPORT ${PROJECT_NAME}Targets NAMESPACE mamba:: DESTINATION ${LIBMAMBA_CMAKECONFIG_INSTALL_DIR} COMPONENT Mamba_Development ) export(EXPORT ${PROJECT_NAME}Targets NAMESPACE mamba::) ================================================ FILE: libmamba/LICENSE ================================================ Copyright 2019 QuantStack and the Mamba contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================ FILE: libmamba/data/Mamba.psm1 ================================================ param([parameter(Position=0,Mandatory=$false)] [Hashtable] $MambaModuleArgs=@{}) ## AFTER PARAM ################################################################ # Defaults from before we had arguments. if (-not $MambaModuleArgs.ContainsKey('ChangePs1')) { $MambaModuleArgs.ChangePs1 = $True } ## ENVIRONMENT MANAGEMENT ###################################################### <# .SYNOPSIS Activates a conda environment, placing its commands and packages at the head of $Env:PATH. .EXAMPLE Enter-MambaEnvironment base .EXAMPLE etenv base .NOTES This command does not currently support activating environments stored in a non-standard location. #> function Enter-MambaEnvironment { begin { $activateCommand = (& $Env:MAMBA_EXE shell activate -s powershell $Args | Out-String); Write-Verbose "[mamba shell activate --shell powershell $Args]`n$activateCommand"; Invoke-Expression -Command $activateCommand; } process {} end {} } <# .SYNOPSIS Deactivates the current conda environment, if any. .EXAMPLE Exit-MambaEnvironment .EXAMPLE exenv #> function Exit-MambaEnvironment { [CmdletBinding()] param(); begin { $deactivateCommand = (& $Env:MAMBA_EXE shell deactivate -s powershell | Out-String); # If deactivate returns an empty string, we have nothing more to do, # so return early. if ($deactivateCommand.Trim().Length -eq 0) { return; } Write-Verbose "[mamba shell deactivate --shell powershell]`n$deactivateCommand"; Invoke-Expression -Command $deactivateCommand; } process {} end {} } ## MAMBA WRAPPER ############################################################### <# .SYNOPSIS conda is a tool for managing and deploying applications, environments and packages. .PARAMETER Command Subcommand to invoke. .EXAMPLE conda install toolz #> function Invoke-Mamba() { # Don't use any explicit args here, we'll use $args and tab completion # so that we can capture everything, INCLUDING short options (e.g. -n). if ($Args.Count -eq 0) { # No args, just call the underlying mamba executable. & $Env:MAMBA_EXE; } else { $Command = $Args[0]; if ($Args.Count -ge 2) { $OtherArgs = $Args[1..($Args.Count - 1)]; } else { $OtherArgs = @(); } switch ($Command) { "activate" { Enter-MambaEnvironment @OtherArgs; } "deactivate" { Exit-MambaEnvironment; } "self-update" { & $Env:MAMBA_EXE $Command @OtherArgs; $MAMBA_EXE_BKUP = $Env:MAMBA_EXE + ".bkup"; if (Test-Path $MAMBA_EXE_BKUP) { Remove-Item $MAMBA_EXE_BKUP } } default { # There may be a command we don't know want to handle # differently in the shell wrapper, pass it through # verbatim. & $Env:MAMBA_EXE $Command @OtherArgs; # reactivate environment if (@("install", "update", "remove").contains($Command)) { $activateCommand = (& $Env:MAMBA_EXE shell reactivate -s powershell | Out-String); if ($activateCommand) { Write-Verbose "[mamba shell reactivate --shell powershell]`n$activateCommand"; Invoke-Expression -Command $activateCommand; } } } } } } ## TAB COMPLETION ############################################################## $MambaAutocompleteScriptblock = { param($wordToComplete, $commandAst, $cursorPosition) $RemainingArgs = $commandAst.ToString().Split() $OneRemainingArgs = $RemainingArgs[1..$RemainingArgs.Length] if (-not $wordToComplete) { $OneRemainingArgs += '""' } $MMOUT = & $Env:MAMBA_EXE completer @OneRemainingArgs $MMLIST = $MMOUT.trim() -split '\s+' foreach ($el in $MMLIST) { [System.Management.Automation.CompletionResult]::new( $el, $el, 'ParameterValue', $el) } } ## PROMPT MANAGEMENT ########################################################### <# .SYNOPSIS Modifies the current prompt to show the currently activated conda environment, if any. #> if ($MambaModuleArgs.ChangePs1) { # We use the same procedure to nest prompts as we did for nested tab completion. if (Test-Path Function:\prompt) { Rename-Item Function:\prompt MambaPromptBackup } else { function MambaPromptBackup() { # Restore a basic prompt if the definition is missing. "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "; } } function global:prompt() { if ($Env:CONDA_PROMPT_MODIFIER -ne "False") { $Env:CONDA_PROMPT_MODIFIER | Write-Host -NoNewline } MambaPromptBackup; } } ## ALIASES ##################################################################### $__mamba_name = (Split-Path -Path $Env:MAMBA_EXE -Leaf) -replace '\.[^.]+$' New-Alias -Name $__mamba_name -Value Invoke-Mamba -Force Register-ArgumentCompleter -Native -CommandName $__mamba_name -ScriptBlock $MambaAutocompleteScriptblock ## EXPORTS ################################################################### if ($null -eq $Env:CONDA_SHLVL) { $Env:PATH = "$Env:MAMBA_ROOT_PREFIX\condabin;" + $Env:PATH } Export-ModuleMember ` -Alias * ` -Function Invoke-Mamba, Enter-MambaEnvironment, Exit-MambaEnvironment, prompt ================================================ FILE: libmamba/data/_mamba_activate.bat ================================================ @REM Copyright (C) 2012 Anaconda, Inc @REM SPDX-License-Identifier: BSD-3-Clause @REM Helper routine for activation, deactivation, and reactivation. @SETLOCAL EnableDelayedExpansion @REM This is the standard user case. This script is run in root\condabin. @REM FOR %%A IN ("%~dp0.") DO @SET _sysp=%%~dpA @REM IF NOT EXIST "!_sysp!\Scripts\mamba.exe" @SET "_sysp=!_sysp!..\" @FOR %%A in ("%TMP%") do @SET TMP=%%~sA @REM It seems that it is not possible to have "CONDA_EXE=Something With Spaces" @REM and %* to contain: activate "Something With Spaces does not exist". @REM MSDOS associates the outer "'s and is unable to run very much at all. @REM @SET CONDA_EXES="%CONDA_EXE%" %_CE_M% %_CE_CONDA% @REM @FOR /F %%i IN ('%CONDA_EXES% shell.cmd.exe %*') DO @SET _TEMP_SCRIPT_PATH=%%i not return error @REM This method will not work if %TMP% contains any spaces. @FOR /L %%I IN (1,1,100) DO @( SET UNIQUE_DIR=%TMP%\conda-!RANDOM! MKDIR !UNIQUE_DIR! > NUL 2>&1 IF NOT ERRORLEVEL 1 ( SET UNIQUE=!UNIQUE_DIR!\conda.tmp TYPE NUL 1> !UNIQUE! GOTO tmp_file_created ) ) @ECHO Failed to create temp directory "%TMP%\conda-\" & exit /b 1 :tmp_file_created @"%MAMBA_EXE%" shell %* --shell cmd.exe 1>%UNIQUE% @IF %ErrorLevel% NEQ 0 @EXIT /B %ErrorLevel% @FOR /F %%i IN (%UNIQUE%) DO @SET _TEMP_SCRIPT_PATH=%%i @RMDIR /S /Q %UNIQUE_DIR% @FOR /F "delims=" %%A in (""!_TEMP_SCRIPT_PATH!"") DO @ENDLOCAL & @SET _TEMP_SCRIPT_PATH=%%~A @IF "%_TEMP_SCRIPT_PATH%" == "" @EXIT /B 1 @IF NOT "%CONDA_PROMPT_MODIFIER%" == "" @CALL SET "PROMPT=%%PROMPT:%CONDA_PROMPT_MODIFIER%=%_empty_not_set_%%%" @CALL "%_TEMP_SCRIPT_PATH%" @IF NOT "%CONDA_TEST_SAVE_TEMPS%x"=="x" @ECHO CONDA_TEST_SAVE_TEMPS :: retaining activate_batch %_TEMP_SCRIPT_PATH% 1>&2 @IF "%CONDA_TEST_SAVE_TEMPS%x"=="x" @DEL /F /Q "%_TEMP_SCRIPT_PATH%" @SET _TEMP_SCRIPT_PATH= @SET "PROMPT=%CONDA_PROMPT_MODIFIER%%PROMPT%" ================================================ FILE: libmamba/data/activate.bat ================================================ @REM Copyright (C) 2021 QuantStack @REM SPDX-License-Identifier: BSD-3-Clause @CALL "%~dp0..\condabin\__MAMBA_INSERT_HOOK_BAT_NAME__" __MAMBA_INSERT_EXE_NAME__ activate %* ================================================ FILE: libmamba/data/bin2header.py ================================================ # Modified from bin2array, https://github.com/Jamesits/bin2array # Distributed under MIT License: # MIT License # Copyright (c) 2017 James Swineson # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. import argparse import sys from pathlib import Path def bin2header(comment, data, var_name, extern=False): yield comment yield "#include " if extern: yield f"extern const char {var_name}[];" yield f"extern const std::size_t {var_name}_len;" yield f"const char {var_name}[] = {{" indent = " " for i in range(0, len(data), 12): hex_chunk = ", ".join(f"0x{x:02x}" for x in data[i:][:12]) yield indent + hex_chunk + "," yield indent + "0x00 // Terminating null byte" yield "};" yield f"const std::size_t {var_name}_len = {len(data)};" def main(): parser = argparse.ArgumentParser(description="Generate binary header output") parser.add_argument("-i", "--input", required=True, help="Input file", type=Path) parser.add_argument("-o", "--out", required=True, help="Output file", type=Path) parser.add_argument("-v", "--var", required=True, help="Variable name to use in file") parser.add_argument("-e", "--extern", action="store_true", help="Add 'extern' declaration") args = parser.parse_args() argv_pretty = " ".join(Path(arg).name if "/" in arg or "\\" in arg else arg for arg in sys.argv) comment = f"/* This file was generated using {argv_pretty} */" out = bin2header(comment, args.input.read_bytes(), args.var, args.extern) args.out.write_text("\n".join(out)) if __name__ == "__main__": sys.exit(main()) ================================================ FILE: libmamba/data/compile_pyc.py ================================================ import os import sys from compileall import compile_file from concurrent.futures import ProcessPoolExecutor def main(): max_workers = int(os.environ.get("MAMBA_EXTRACT_THREADS", "0")) if max_workers <= 0: max_workers = None results = [] with sys.stdin: with ProcessPoolExecutor(max_workers=max_workers) as executor: while True: name = sys.stdin.readline().strip() if not name: break results.append(executor.submit(compile_file, name, quiet=1)) success = all(r.result() for r in results) return success if __name__ == "__main__": success = main() sys.exit(int(not success)) ================================================ FILE: libmamba/data/conda_exe.hpp ================================================ /* This is a conda-specific repackaged launcher.c from Python setuptools. The original source code for launcher.c can be found here: https://raw.githubusercontent.com/python/cpython/3.7/PC/launcher.c The source code for the conda.exe launcher can be found here: https://github.com/conda/conda-build/tree/master/conda_build/launcher_sources In conda-build / launcher_sources */ unsigned char conda_exe[] = { 0x4d, 0x5a, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x0e, 0x1f, 0xba, 0x0e, 0x00, 0xb4, 0x09, 0xcd, 0x21, 0xb8, 0x01, 0x4c, 0xcd, 0x21, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x44, 0x4f, 0x53, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x0d, 0x0d, 0x0a, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x1e, 0xe8, 0x0d, 0x57, 0x7f, 0x86, 0x5e, 0x57, 0x7f, 0x86, 0x5e, 0x57, 0x7f, 0x86, 0x5e, 0x70, 0xb9, 0xfd, 0x5e, 0x54, 0x7f, 0x86, 0x5e, 0x57, 0x7f, 0x87, 0x5e, 0x0a, 0x7f, 0x86, 0x5e, 0xea, 0x30, 0x10, 0x5e, 0x53, 0x7f, 0x86, 0x5e, 0x49, 0x2d, 0x02, 0x5e, 0x73, 0x7f, 0x86, 0x5e, 0x49, 0x2d, 0x13, 0x5e, 0x5d, 0x7f, 0x86, 0x5e, 0x49, 0x2d, 0x05, 0x5e, 0x3a, 0x7f, 0x86, 0x5e, 0x49, 0x2d, 0x17, 0x5e, 0x56, 0x7f, 0x86, 0x5e, 0x52, 0x69, 0x63, 0x68, 0x57, 0x7f, 0x86, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x45, 0x00, 0x00, 0x64, 0x86, 0x04, 0x00, 0x10, 0xb1, 0x8b, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x23, 0x00, 0x0b, 0x02, 0x09, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x2b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x10, 0x01, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0xfc, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x00, 0x00, 0x00, 0x1c, 0xd4, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x60, 0x2e, 0x72, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0xa0, 0x29, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0xe4, 0x35, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xc0, 0x2e, 0x70, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0xfc, 0x09, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x1a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x48, 0x83, 0xec, 0x20, 0x4c, 0x8b, 0xe1, 0x48, 0x83, 0xc9, 0xff, 0x33, 0xc0, 0x49, 0x8b, 0xfc, 0xba, 0x01, 0x00, 0x00, 0x00, 0xf2, 0xae, 0x48, 0xf7, 0xd1, 0x8d, 0x44, 0x09, 0x01, 0x48, 0x8d, 0x79, 0xff, 0x48, 0x63, 0xc8, 0xe8, 0x40, 0x0c, 0x00, 0x00, 0x33, 0xf6, 0x33, 0xed, 0x4c, 0x63, 0xef, 0xc6, 0x00, 0x22, 0x48, 0x8d, 0x58, 0x01, 0x4c, 0x8b, 0xf0, 0x85, 0xff, 0x7e, 0x65, 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x41, 0x0f, 0xb6, 0x0c, 0x2c, 0x80, 0xf9, 0x5c, 0x75, 0x04, 0xff, 0xc6, 0xeb, 0x27, 0x80, 0xf9, 0x22, 0x75, 0x20, 0x85, 0xf6, 0x7e, 0x14, 0x44, 0x8b, 0xc6, 0xb2, 0x5c, 0x48, 0x8b, 0xcb, 0x8b, 0xfe, 0xe8, 0x5a, 0x0c, 0x00, 0x00, 0x48, 0x03, 0xdf, 0x2b, 0xf6, 0xc6, 0x03, 0x5c, 0x48, 0xff, 0xc3, 0xeb, 0x02, 0x33, 0xf6, 0x41, 0x0f, 0xb6, 0x04, 0x2c, 0x48, 0xff, 0xc5, 0x48, 0xff, 0xc3, 0x49, 0x3b, 0xed, 0x88, 0x43, 0xff, 0x7c, 0xb8, 0x85, 0xf6, 0x7e, 0x12, 0x44, 0x8b, 0xc6, 0xb2, 0x5c, 0x48, 0x8b, 0xcb, 0x8b, 0xfe, 0xe8, 0x25, 0x0c, 0x00, 0x00, 0x48, 0x03, 0xdf, 0x48, 0x8b, 0x6c, 0x24, 0x48, 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x8b, 0x7c, 0x24, 0x58, 0xc6, 0x03, 0x22, 0xc6, 0x43, 0x01, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x49, 0x8b, 0xc6, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x18, 0x57, 0x48, 0x81, 0xec, 0x60, 0x04, 0x00, 0x00, 0x48, 0x8b, 0x05, 0xbc, 0x12, 0x01, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x84, 0x24, 0x50, 0x04, 0x00, 0x00, 0x48, 0x8b, 0xd9, 0x48, 0x8b, 0xc1, 0x0f, 0xb6, 0x09, 0x48, 0x8b, 0xfa, 0x84, 0xc9, 0x74, 0x13, 0x90, 0x48, 0xff, 0xc0, 0x80, 0xf9, 0x2f, 0x75, 0x04, 0xc6, 0x40, 0xff, 0x5c, 0x8a, 0x08, 0x84, 0xc9, 0x75, 0xee, 0x48, 0x8d, 0x84, 0x24, 0x40, 0x01, 0x00, 0x00, 0x4c, 0x8d, 0x8c, 0x24, 0x40, 0x02, 0x00, 0x00, 0x4c, 0x8d, 0x44, 0x24, 0x40, 0x48, 0x8d, 0x54, 0x24, 0x30, 0x48, 0x8b, 0xcb, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x3f, 0x11, 0x00, 0x00, 0x80, 0x7c, 0x24, 0x30, 0x00, 0x0f, 0x85, 0xae, 0x00, 0x00, 0x00, 0x80, 0x7c, 0x24, 0x40, 0x5c, 0x0f, 0x84, 0xa3, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x84, 0x24, 0x40, 0x01, 0x00, 0x00, 0x4c, 0x8d, 0x8c, 0x24, 0x40, 0x02, 0x00, 0x00, 0x4c, 0x8d, 0x44, 0x24, 0x40, 0x48, 0x8d, 0x54, 0x24, 0x30, 0x48, 0x8b, 0xcf, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x02, 0x11, 0x00, 0x00, 0x48, 0x83, 0xc9, 0xff, 0x33, 0xc0, 0x48, 0x8d, 0x7c, 0x24, 0x40, 0xf2, 0xae, 0x48, 0x8d, 0x44, 0x24, 0x40, 0x48, 0xf7, 0xd1, 0x48, 0xff, 0xc8, 0x48, 0xff, 0xc9, 0x48, 0x03, 0xc8, 0x80, 0x39, 0x5c, 0x75, 0x08, 0x48, 0xff, 0xc9, 0x80, 0x39, 0x5c, 0x74, 0x15, 0x48, 0x8d, 0x44, 0x24, 0x40, 0x48, 0x3b, 0xc8, 0x72, 0x0b, 0xc6, 0x01, 0x00, 0x48, 0xff, 0xc9, 0x80, 0x39, 0x5c, 0x75, 0xeb, 0x4c, 0x8d, 0x44, 0x24, 0x40, 0x48, 0x8d, 0x54, 0x24, 0x30, 0x48, 0x8d, 0x8c, 0x24, 0x40, 0x03, 0x00, 0x00, 0x4c, 0x8b, 0xcb, 0x48, 0xc7, 0x44, 0x24, 0x20, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xcf, 0x0d, 0x00, 0x00, 0xba, 0x01, 0x00, 0x00, 0x00, 0xb9, 0x04, 0x01, 0x00, 0x00, 0xe8, 0x7c, 0x0a, 0x00, 0x00, 0x48, 0x8d, 0x94, 0x24, 0x40, 0x03, 0x00, 0x00, 0xeb, 0x12, 0xba, 0x01, 0x00, 0x00, 0x00, 0xb9, 0x04, 0x01, 0x00, 0x00, 0xe8, 0x63, 0x0a, 0x00, 0x00, 0x48, 0x8b, 0xd3, 0x41, 0xb8, 0x04, 0x01, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0x48, 0x8b, 0xf8, 0xe8, 0xab, 0x0b, 0x00, 0x00, 0x48, 0x8b, 0xc7, 0x48, 0x8b, 0x8c, 0x24, 0x50, 0x04, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, 0xf8, 0x10, 0x00, 0x00, 0x48, 0x8b, 0x9c, 0x24, 0x80, 0x04, 0x00, 0x00, 0x48, 0x81, 0xc4, 0x60, 0x04, 0x00, 0x00, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x48, 0x83, 0xc9, 0xff, 0x33, 0xc0, 0x4c, 0x8b, 0xea, 0x48, 0x8b, 0xfb, 0x8d, 0x50, 0x08, 0xf2, 0xae, 0x48, 0xf7, 0xd1, 0x48, 0xff, 0xc9, 0xe8, 0xe7, 0x09, 0x00, 0x00, 0x33, 0xff, 0x48, 0x8b, 0xf3, 0x41, 0x89, 0x7d, 0x00, 0x0f, 0xbe, 0x0b, 0x4c, 0x8b, 0xf0, 0x45, 0x33, 0xe4, 0x48, 0x89, 0x18, 0xe8, 0x55, 0x11, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x15, 0x0f, 0x1f, 0x44, 0x00, 0x00, 0x0f, 0xbe, 0x4b, 0x01, 0x48, 0xff, 0xc3, 0xe8, 0x40, 0x11, 0x00, 0x00, 0x85, 0xc0, 0x75, 0xf0, 0x0f, 0xb6, 0x2b, 0x48, 0xff, 0xc3, 0x40, 0x84, 0xed, 0x74, 0x5b, 0x40, 0x0f, 0xbe, 0xcd, 0xe8, 0x28, 0x11, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x05, 0x45, 0x85, 0xe4, 0x74, 0x49, 0x40, 0x80, 0xfd, 0x5c, 0x75, 0x04, 0xff, 0xc7, 0xeb, 0xd9, 0x40, 0x80, 0xfd, 0x22, 0x75, 0x16, 0x40, 0xf6, 0xc7, 0x01, 0x75, 0x0e, 0x33, 0xc0, 0x45, 0x85, 0xe4, 0x0f, 0x94, 0xc0, 0x40, 0x32, 0xed, 0x44, 0x8b, 0xe0, 0xd1, 0xff, 0x85, 0xff, 0x74, 0x12, 0x4c, 0x8b, 0xc7, 0xb2, 0x5c, 0x48, 0x8b, 0xce, 0xe8, 0xbc, 0x09, 0x00, 0x00, 0x48, 0x03, 0xf7, 0x33, 0xff, 0x40, 0x84, 0xed, 0x74, 0xa2, 0x40, 0x88, 0x2e, 0x48, 0xff, 0xc6, 0xeb, 0x9a, 0x85, 0xff, 0x74, 0x12, 0x4c, 0x8b, 0xc7, 0xb2, 0x5c, 0x48, 0x8b, 0xce, 0xe8, 0x99, 0x09, 0x00, 0x00, 0x48, 0x03, 0xf7, 0x33, 0xff, 0xc6, 0x06, 0x00, 0x41, 0xff, 0x45, 0x00, 0x49, 0x63, 0x45, 0x00, 0x48, 0xff, 0xc6, 0x49, 0x89, 0x34, 0xc6, 0x40, 0x84, 0xed, 0x74, 0x26, 0x0f, 0xbe, 0x0b, 0xe8, 0xa1, 0x10, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x11, 0x90, 0x0f, 0xbe, 0x4b, 0x01, 0x48, 0xff, 0xc3, 0xe8, 0x90, 0x10, 0x00, 0x00, 0x85, 0xc0, 0x75, 0xf0, 0x80, 0x3b, 0x00, 0x0f, 0x85, 0x47, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x6c, 0x24, 0x48, 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x8b, 0x7c, 0x24, 0x58, 0x49, 0x8b, 0xc6, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x85, 0xc9, 0x75, 0x12, 0x8b, 0x0d, 0x82, 0x21, 0x01, 0x00, 0x85, 0xc9, 0x74, 0x08, 0x33, 0xd2, 0xff, 0x15, 0x36, 0xdc, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x57, 0x48, 0x81, 0xec, 0xe0, 0x00, 0x00, 0x00, 0x33, 0xc0, 0x33, 0xff, 0x48, 0x8b, 0xd9, 0x48, 0x8d, 0x4c, 0x24, 0x70, 0x44, 0x8d, 0x47, 0x68, 0x33, 0xd2, 0x89, 0xbc, 0x24, 0xf0, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x50, 0x48, 0x89, 0x44, 0x24, 0x58, 0x48, 0x89, 0x44, 0x24, 0x60, 0xe8, 0xc6, 0x08, 0x00, 0x00, 0x8d, 0x57, 0x01, 0x48, 0x8d, 0x0d, 0x8c, 0xff, 0xff, 0xff, 0xc7, 0x44, 0x24, 0x70, 0x68, 0x00, 0x00, 0x00, 0xff, 0x15, 0xee, 0xdb, 0x00, 0x00, 0x4c, 0x8d, 0x5c, 0x24, 0x50, 0x48, 0x8d, 0x44, 0x24, 0x70, 0x4c, 0x89, 0x5c, 0x24, 0x48, 0x48, 0x89, 0x44, 0x24, 0x40, 0x48, 0x89, 0x7c, 0x24, 0x38, 0x48, 0x89, 0x7c, 0x24, 0x30, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x48, 0x8b, 0xd3, 0x33, 0xc9, 0x89, 0x7c, 0x24, 0x28, 0xc7, 0x44, 0x24, 0x20, 0x01, 0x00, 0x00, 0x00, 0xff, 0x15, 0xab, 0xdb, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x28, 0xe8, 0xea, 0x05, 0x00, 0x00, 0x48, 0x8d, 0x15, 0xab, 0xde, 0x00, 0x00, 0x48, 0x8d, 0x48, 0x60, 0xe8, 0x62, 0x04, 0x00, 0x00, 0x33, 0xc0, 0x48, 0x8b, 0x9c, 0x24, 0xf8, 0x00, 0x00, 0x00, 0x48, 0x81, 0xc4, 0xe0, 0x00, 0x00, 0x00, 0x5f, 0xc3, 0x8b, 0x44, 0x24, 0x60, 0x48, 0x8b, 0x4c, 0x24, 0x50, 0x83, 0xca, 0xff, 0x89, 0x05, 0x95, 0x20, 0x01, 0x00, 0xff, 0x15, 0x5f, 0xdb, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x50, 0x48, 0x8d, 0x94, 0x24, 0xf0, 0x00, 0x00, 0x00, 0xff, 0x15, 0x44, 0xdb, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x28, 0xe8, 0x93, 0x05, 0x00, 0x00, 0x48, 0x8d, 0x15, 0x2c, 0xde, 0x00, 0x00, 0x48, 0x8d, 0x48, 0x60, 0xe8, 0x0b, 0x04, 0x00, 0x00, 0x33, 0xc0, 0x48, 0x8b, 0x9c, 0x24, 0xf8, 0x00, 0x00, 0x00, 0x48, 0x81, 0xc4, 0xe0, 0x00, 0x00, 0x00, 0x5f, 0xc3, 0x8b, 0x84, 0x24, 0xf0, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x9c, 0x24, 0xf8, 0x00, 0x00, 0x00, 0x48, 0x81, 0xc4, 0xe0, 0x00, 0x00, 0x00, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x41, 0x54, 0x41, 0x55, 0x48, 0x83, 0xec, 0x20, 0x4c, 0x8b, 0xe9, 0x48, 0x83, 0xc9, 0xff, 0x33, 0xc0, 0xbb, 0x01, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xfd, 0x49, 0x63, 0xe8, 0xf2, 0xae, 0x48, 0x3b, 0xdd, 0x48, 0x8b, 0xf2, 0x48, 0xf7, 0xd1, 0x4c, 0x8b, 0xcb, 0x4c, 0x8d, 0x51, 0x01, 0x7d, 0x1a, 0x4a, 0x8b, 0x3c, 0xca, 0x48, 0x83, 0xc9, 0xff, 0x33, 0xc0, 0xf2, 0xae, 0x49, 0xff, 0xc1, 0x48, 0xf7, 0xd1, 0x44, 0x03, 0xd1, 0x4c, 0x3b, 0xcd, 0x7c, 0xe6, 0x49, 0x63, 0xca, 0x48, 0x8b, 0xd3, 0xe8, 0x0f, 0x07, 0x00, 0x00, 0x48, 0x8d, 0x15, 0xcc, 0xdd, 0x00, 0x00, 0x4d, 0x8b, 0xc5, 0x48, 0x8b, 0xc8, 0x4c, 0x8b, 0xe0, 0xe8, 0x02, 0x0f, 0x00, 0x00, 0x48, 0x83, 0xc9, 0xff, 0x33, 0xc0, 0x49, 0x8b, 0xfd, 0xf2, 0xae, 0x48, 0x3b, 0xdd, 0x48, 0xf7, 0xd1, 0x4c, 0x8d, 0x69, 0xff, 0x7d, 0x30, 0x4c, 0x8b, 0x04, 0xde, 0x49, 0x63, 0xcd, 0x48, 0x8d, 0x15, 0x95, 0xdd, 0x00, 0x00, 0x49, 0x03, 0xcc, 0xe8, 0xd5, 0x0e, 0x00, 0x00, 0x48, 0x8b, 0x3c, 0xde, 0x48, 0x83, 0xc9, 0xff, 0x33, 0xc0, 0x48, 0xff, 0xc3, 0xf2, 0xae, 0x48, 0xf7, 0xd1, 0x44, 0x03, 0xe9, 0x48, 0x3b, 0xdd, 0x7c, 0xd0, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x6c, 0x24, 0x48, 0x48, 0x8b, 0x74, 0x24, 0x50, 0x49, 0x8b, 0xc4, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x57, 0x41, 0x56, 0x41, 0x57, 0x48, 0x81, 0xec, 0x58, 0x02, 0x00, 0x00, 0x48, 0x8b, 0x05, 0xbb, 0x0d, 0x01, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x84, 0x24, 0x30, 0x02, 0x00, 0x00, 0x4c, 0x8b, 0xf2, 0x44, 0x89, 0x44, 0x24, 0x20, 0x4c, 0x63, 0xf9, 0x48, 0x8d, 0x54, 0x24, 0x30, 0x41, 0xb8, 0x00, 0x01, 0x00, 0x00, 0x33, 0xc9, 0xff, 0x15, 0xfa, 0xd9, 0x00, 0x00, 0x48, 0x83, 0xc9, 0xff, 0x33, 0xc0, 0x48, 0x8d, 0x7c, 0x24, 0x30, 0xf2, 0xae, 0x48, 0xf7, 0xd1, 0x48, 0x8d, 0x44, 0x0c, 0x2f, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0x48, 0x3b, 0xc1, 0x76, 0x18, 0x0f, 0x1f, 0x00, 0x80, 0x38, 0x2e, 0x74, 0x10, 0x48, 0x8d, 0x54, 0x24, 0x30, 0xc6, 0x00, 0x00, 0x48, 0xff, 0xc8, 0x48, 0x3b, 0xc2, 0x77, 0xeb, 0xc6, 0x00, 0x00, 0x33, 0xc0, 0x48, 0x83, 0xc9, 0xff, 0x48, 0x8d, 0x7c, 0x24, 0x30, 0x33, 0xd2, 0xf2, 0xae, 0x48, 0x8b, 0x05, 0x3a, 0xdd, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0x48, 0x89, 0x47, 0xff, 0x0f, 0xb7, 0x05, 0x32, 0xdd, 0x00, 0x00, 0x66, 0x89, 0x47, 0x07, 0x0f, 0xb6, 0x05, 0x29, 0xdd, 0x00, 0x00, 0x88, 0x47, 0x09, 0xe8, 0xeb, 0xb7, 0x00, 0x00, 0x8b, 0xd8, 0x83, 0xf8, 0xff, 0x75, 0x22, 0xe8, 0xb3, 0x03, 0x00, 0x00, 0x4c, 0x8d, 0x44, 0x24, 0x30, 0x48, 0x8d, 0x15, 0xef, 0xdc, 0x00, 0x00, 0x48, 0x8d, 0x48, 0x60, 0xe8, 0x26, 0x02, 0x00, 0x00, 0x8d, 0x43, 0x03, 0xe9, 0xf3, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x94, 0x24, 0x30, 0x01, 0x00, 0x00, 0x41, 0xb8, 0x00, 0x01, 0x00, 0x00, 0x8b, 0xc8, 0x48, 0x89, 0xac, 0x24, 0x90, 0x02, 0x00, 0x00, 0xe8, 0x31, 0xae, 0x00, 0x00, 0x48, 0x63, 0xc8, 0x48, 0x8d, 0xbc, 0x0c, 0x30, 0x01, 0x00, 0x00, 0x8b, 0xcb, 0xe8, 0x5f, 0x87, 0x00, 0x00, 0x48, 0x8d, 0x94, 0x24, 0x30, 0x01, 0x00, 0x00, 0x48, 0xff, 0xca, 0x48, 0xff, 0xc2, 0x48, 0x3b, 0xd7, 0x73, 0x0f, 0x0f, 0xb6, 0x02, 0x84, 0xc0, 0x74, 0x08, 0x3c, 0x0a, 0x74, 0x04, 0x3c, 0x0d, 0x75, 0xe9, 0xc6, 0x02, 0x00, 0x48, 0x8d, 0x8c, 0x24, 0x30, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x15, 0x73, 0xdc, 0x00, 0x00, 0x41, 0xb8, 0x02, 0x00, 0x00, 0x00, 0xe8, 0x08, 0x0e, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x25, 0x48, 0x8b, 0x05, 0x4d, 0xdc, 0x00, 0x00, 0x48, 0x8d, 0x8c, 0x24, 0x30, 0x01, 0x00, 0x00, 0x48, 0x89, 0x01, 0x8b, 0x05, 0x44, 0xdc, 0x00, 0x00, 0x89, 0x41, 0x08, 0x0f, 0xb6, 0x05, 0x3e, 0xdc, 0x00, 0x00, 0x88, 0x41, 0x0c, 0x48, 0x8d, 0x54, 0x24, 0x24, 0x48, 0x8d, 0x8c, 0x24, 0x32, 0x01, 0x00, 0x00, 0xe8, 0xed, 0xfa, 0xff, 0xff, 0x48, 0x8d, 0x54, 0x24, 0x30, 0x48, 0x8b, 0x38, 0x48, 0x8b, 0xd8, 0x48, 0x8b, 0xcf, 0xe8, 0x6a, 0xf9, 0xff, 0xff, 0x48, 0x8b, 0xe8, 0x48, 0x85, 0xc0, 0x75, 0x20, 0xe8, 0xcd, 0x02, 0x00, 0x00, 0x48, 0x8d, 0x15, 0xce, 0xdb, 0x00, 0x00, 0x4c, 0x8b, 0xc7, 0x48, 0x8d, 0x48, 0x60, 0xe8, 0x42, 0x01, 0x00, 0x00, 0x8d, 0x45, 0x02, 0xe9, 0x07, 0x01, 0x00, 0x00, 0x48, 0x89, 0xb4, 0x24, 0x50, 0x02, 0x00, 0x00, 0x8b, 0x74, 0x24, 0x24, 0x4c, 0x89, 0xa4, 0x24, 0x48, 0x02, 0x00, 0x00, 0x4c, 0x89, 0xac, 0x24, 0x40, 0x02, 0x00, 0x00, 0x45, 0x8d, 0x2c, 0x37, 0xba, 0x08, 0x00, 0x00, 0x00, 0x41, 0x8d, 0x45, 0x01, 0x48, 0x63, 0xc8, 0xe8, 0xa5, 0x04, 0x00, 0x00, 0x48, 0x8b, 0xcd, 0x4c, 0x8b, 0xe0, 0xe8, 0x16, 0xf8, 0xff, 0xff, 0x83, 0xfe, 0x01, 0x49, 0x89, 0x04, 0x24, 0x49, 0x8d, 0x7c, 0x24, 0x08, 0x7e, 0x22, 0x48, 0x83, 0xc3, 0x08, 0xff, 0xce, 0x66, 0x90, 0x48, 0x8b, 0x0b, 0xe8, 0xf8, 0xf7, 0xff, 0xff, 0x48, 0x83, 0xc7, 0x08, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x83, 0xee, 0x01, 0x48, 0x89, 0x47, 0xf8, 0x75, 0xe6, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0xe8, 0xdc, 0xf7, 0xff, 0xff, 0xbb, 0x01, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc7, 0x08, 0x49, 0x3b, 0xdf, 0x48, 0x89, 0x47, 0xf8, 0x7d, 0x19, 0x49, 0x8b, 0x0c, 0xde, 0xe8, 0xc1, 0xf7, 0xff, 0xff, 0x48, 0xff, 0xc3, 0x48, 0x83, 0xc7, 0x08, 0x49, 0x3b, 0xdf, 0x48, 0x89, 0x47, 0xf8, 0x7c, 0xe7, 0x83, 0x7c, 0x24, 0x20, 0x00, 0x48, 0x8b, 0xb4, 0x24, 0x50, 0x02, 0x00, 0x00, 0x48, 0xc7, 0x07, 0x00, 0x00, 0x00, 0x00, 0x74, 0x2a, 0x49, 0x8b, 0xd4, 0x48, 0x8b, 0xcd, 0xe8, 0xd4, 0xa4, 0x00, 0x00, 0xe8, 0xeb, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x15, 0xd4, 0xda, 0x00, 0x00, 0x48, 0x8d, 0x48, 0x60, 0x4c, 0x8b, 0xc5, 0xe8, 0x60, 0x00, 0x00, 0x00, 0xb8, 0x02, 0x00, 0x00, 0x00, 0xeb, 0x16, 0x45, 0x8b, 0xc5, 0x49, 0x8b, 0xd4, 0x48, 0x8b, 0xcd, 0xe8, 0x73, 0xfc, 0xff, 0xff, 0x48, 0x8b, 0xc8, 0xe8, 0x3b, 0xfb, 0xff, 0xff, 0x4c, 0x8b, 0xa4, 0x24, 0x48, 0x02, 0x00, 0x00, 0x4c, 0x8b, 0xac, 0x24, 0x40, 0x02, 0x00, 0x00, 0x48, 0x8b, 0xac, 0x24, 0x90, 0x02, 0x00, 0x00, 0x48, 0x8b, 0x8c, 0x24, 0x30, 0x02, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, 0x73, 0x0a, 0x00, 0x00, 0x48, 0x81, 0xc4, 0x58, 0x02, 0x00, 0x00, 0x41, 0x5f, 0x41, 0x5e, 0x5f, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x45, 0x33, 0xc0, 0xe9, 0x08, 0xfd, 0xff, 0xff, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x50, 0x10, 0x48, 0x89, 0x48, 0x08, 0x4c, 0x89, 0x40, 0x18, 0x4c, 0x89, 0x48, 0x20, 0x53, 0x56, 0x57, 0x41, 0x54, 0x48, 0x83, 0xec, 0x38, 0x48, 0x8b, 0xf9, 0x33, 0xdb, 0x8b, 0xf3, 0x8b, 0xc3, 0x48, 0x3b, 0xcb, 0x0f, 0x95, 0xc0, 0x3b, 0xc3, 0x75, 0x27, 0xe8, 0x4c, 0x26, 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x62, 0x25, 0x00, 0x00, 0x83, 0xc8, 0xff, 0xe9, 0x15, 0x01, 0x00, 0x00, 0x8b, 0xc3, 0x48, 0x3b, 0xd3, 0x0f, 0x95, 0xc0, 0x3b, 0xc3, 0x75, 0x27, 0xe8, 0x19, 0x26, 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x2f, 0x25, 0x00, 0x00, 0x83, 0xc8, 0xff, 0xe9, 0xe2, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x64, 0x24, 0x70, 0xe8, 0xf9, 0x01, 0x00, 0x00, 0x90, 0xf6, 0x47, 0x18, 0x40, 0x0f, 0x85, 0x95, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcf, 0xe8, 0xa2, 0x23, 0x00, 0x00, 0x83, 0xf8, 0xff, 0x74, 0x2a, 0x83, 0xf8, 0xfe, 0x74, 0x25, 0x48, 0x63, 0xd0, 0x48, 0x8b, 0xca, 0x48, 0xc1, 0xf9, 0x05, 0x4c, 0x8d, 0x05, 0xd7, 0x29, 0x01, 0x00, 0x83, 0xe2, 0x1f, 0x48, 0x6b, 0xd2, 0x58, 0x49, 0x03, 0x14, 0xc8, 0x48, 0x8d, 0x0d, 0x35, 0x0a, 0x01, 0x00, 0xeb, 0x11, 0x48, 0x8d, 0x0d, 0x2c, 0x0a, 0x01, 0x00, 0x48, 0x8b, 0xd1, 0x4c, 0x8d, 0x05, 0xb2, 0x29, 0x01, 0x00, 0xf6, 0x42, 0x38, 0x7f, 0x75, 0x25, 0x83, 0xf8, 0xff, 0x74, 0x1a, 0x83, 0xf8, 0xfe, 0x74, 0x15, 0x48, 0x63, 0xc8, 0x48, 0x8b, 0xc1, 0x48, 0xc1, 0xf8, 0x05, 0x83, 0xe1, 0x1f, 0x48, 0x6b, 0xc9, 0x58, 0x49, 0x03, 0x0c, 0xc0, 0xf6, 0x41, 0x38, 0x80, 0x74, 0x22, 0xe8, 0x6a, 0x25, 0x00, 0x00, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x80, 0x24, 0x00, 0x00, 0x83, 0xce, 0xff, 0x3b, 0xf3, 0x75, 0x2a, 0x48, 0x8b, 0xcf, 0xe8, 0x09, 0x13, 0x00, 0x00, 0x8b, 0xd8, 0x4d, 0x8b, 0xcc, 0x45, 0x33, 0xc0, 0x48, 0x8b, 0x54, 0x24, 0x68, 0x48, 0x8b, 0xcf, 0xe8, 0x1c, 0x15, 0x00, 0x00, 0x8b, 0xf0, 0x48, 0x8b, 0xd7, 0x8b, 0xcb, 0xe8, 0xbc, 0x13, 0x00, 0x00, 0x90, 0x48, 0x8b, 0xcf, 0xe8, 0xb3, 0x01, 0x00, 0x00, 0x8b, 0xc6, 0x48, 0x83, 0xc4, 0x38, 0x41, 0x5c, 0x5f, 0x5e, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x8d, 0x05, 0x99, 0x05, 0x01, 0x00, 0xc3, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0x05, 0x6c, 0x3b, 0x01, 0x00, 0xbb, 0x14, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x07, 0xb8, 0x00, 0x02, 0x00, 0x00, 0xeb, 0x05, 0x3b, 0xc3, 0x0f, 0x4c, 0xc3, 0x48, 0x63, 0xc8, 0xba, 0x08, 0x00, 0x00, 0x00, 0x89, 0x05, 0x49, 0x3b, 0x01, 0x00, 0xe8, 0xc0, 0x25, 0x00, 0x00, 0x48, 0x89, 0x05, 0x1d, 0x2b, 0x01, 0x00, 0x48, 0x85, 0xc0, 0x75, 0x24, 0x8d, 0x50, 0x08, 0x48, 0x8b, 0xcb, 0x89, 0x1d, 0x2c, 0x3b, 0x01, 0x00, 0xe8, 0xa3, 0x25, 0x00, 0x00, 0x48, 0x89, 0x05, 0x00, 0x2b, 0x01, 0x00, 0x48, 0x85, 0xc0, 0x75, 0x07, 0xb8, 0x1a, 0x00, 0x00, 0x00, 0xeb, 0x78, 0x33, 0xc9, 0x48, 0x8d, 0x15, 0x2b, 0x05, 0x01, 0x00, 0x48, 0x89, 0x14, 0x01, 0x48, 0x83, 0xc2, 0x30, 0x48, 0x83, 0xc1, 0x08, 0x48, 0x83, 0xeb, 0x01, 0x74, 0x09, 0x48, 0x8b, 0x05, 0xd2, 0x2a, 0x01, 0x00, 0xeb, 0xe5, 0x45, 0x33, 0xc0, 0x48, 0x8d, 0x15, 0x22, 0x05, 0x01, 0x00, 0x45, 0x8d, 0x48, 0x03, 0x49, 0x8b, 0xc8, 0x4c, 0x8d, 0x15, 0x78, 0x28, 0x01, 0x00, 0x49, 0x8b, 0xc0, 0x48, 0xc1, 0xf8, 0x05, 0x83, 0xe1, 0x1f, 0x49, 0x8b, 0x04, 0xc2, 0x48, 0x6b, 0xc9, 0x58, 0x4c, 0x8b, 0x14, 0x01, 0x49, 0x83, 0xfa, 0xff, 0x74, 0x0b, 0x49, 0x83, 0xfa, 0xfe, 0x74, 0x05, 0x4d, 0x85, 0xd2, 0x75, 0x06, 0xc7, 0x02, 0xfe, 0xff, 0xff, 0xff, 0x49, 0xff, 0xc0, 0x48, 0x83, 0xc2, 0x30, 0x49, 0x83, 0xe9, 0x01, 0x75, 0xbc, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0xe8, 0x43, 0x29, 0x00, 0x00, 0x80, 0x3d, 0x34, 0x1a, 0x01, 0x00, 0x00, 0x74, 0x05, 0xe8, 0xcd, 0x26, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x56, 0x2a, 0x01, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xe9, 0x7d, 0x26, 0x00, 0x00, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x48, 0x8d, 0x0d, 0x7c, 0x04, 0x01, 0x00, 0x48, 0x3b, 0xd9, 0x72, 0x3a, 0x48, 0x8d, 0x05, 0x00, 0x08, 0x01, 0x00, 0x48, 0x3b, 0xd8, 0x77, 0x2e, 0x48, 0x8b, 0xd3, 0x48, 0xb8, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x2a, 0x48, 0x2b, 0xd1, 0x48, 0xf7, 0xea, 0x48, 0xc1, 0xfa, 0x03, 0x48, 0x8b, 0xca, 0x48, 0xc1, 0xe9, 0x3f, 0x8d, 0x4c, 0x11, 0x10, 0xe8, 0xf8, 0x2a, 0x00, 0x00, 0x0f, 0xba, 0x6b, 0x18, 0x0f, 0xeb, 0x0a, 0x48, 0x8d, 0x4b, 0x30, 0xff, 0x15, 0x63, 0xd4, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x83, 0xf9, 0x14, 0x48, 0x8b, 0xda, 0x7d, 0x0f, 0x83, 0xc1, 0x10, 0xe8, 0xca, 0x2a, 0x00, 0x00, 0x0f, 0xba, 0x6b, 0x18, 0x0f, 0xeb, 0x0a, 0x48, 0x8d, 0x4a, 0x30, 0xff, 0x15, 0x35, 0xd4, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x48, 0x8d, 0x15, 0xf1, 0x03, 0x01, 0x00, 0x48, 0x3b, 0xca, 0x72, 0x37, 0x48, 0x8d, 0x05, 0x75, 0x07, 0x01, 0x00, 0x48, 0x3b, 0xc8, 0x77, 0x2b, 0x0f, 0xba, 0x71, 0x18, 0x0f, 0x48, 0x2b, 0xca, 0x48, 0xb8, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x2a, 0x48, 0xf7, 0xe9, 0x48, 0xc1, 0xfa, 0x03, 0x48, 0x8b, 0xca, 0x48, 0xc1, 0xe9, 0x3f, 0x8d, 0x4c, 0x11, 0x10, 0xe8, 0x6b, 0x29, 0x00, 0x00, 0xeb, 0x0a, 0x48, 0x83, 0xc1, 0x30, 0xff, 0x15, 0xe3, 0xd3, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x83, 0xf9, 0x14, 0x7d, 0x0f, 0x0f, 0xba, 0x72, 0x18, 0x0f, 0x83, 0xc1, 0x10, 0xe8, 0x42, 0x29, 0x00, 0x00, 0xeb, 0x0a, 0x48, 0x8d, 0x4a, 0x30, 0xff, 0x15, 0xba, 0xd3, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x83, 0x64, 0x24, 0x40, 0x00, 0x4c, 0x8d, 0x44, 0x24, 0x40, 0xe8, 0x5f, 0x2a, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x75, 0x1b, 0x39, 0x44, 0x24, 0x40, 0x74, 0x15, 0xe8, 0xbc, 0x22, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x0b, 0xe8, 0xb2, 0x22, 0x00, 0x00, 0x8b, 0x4c, 0x24, 0x40, 0x89, 0x08, 0x48, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xc1, 0x49, 0x83, 0xf8, 0x08, 0x72, 0x53, 0x0f, 0xb6, 0xd2, 0x49, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x49, 0x0f, 0xaf, 0xd1, 0x49, 0x83, 0xf8, 0x40, 0x72, 0x1e, 0x48, 0xf7, 0xd9, 0x83, 0xe1, 0x07, 0x74, 0x06, 0x4c, 0x2b, 0xc1, 0x48, 0x89, 0x10, 0x48, 0x03, 0xc8, 0x4d, 0x8b, 0xc8, 0x49, 0x83, 0xe0, 0x3f, 0x49, 0xc1, 0xe9, 0x06, 0x75, 0x39, 0x4d, 0x8b, 0xc8, 0x49, 0x83, 0xe0, 0x07, 0x49, 0xc1, 0xe9, 0x03, 0x74, 0x11, 0x66, 0x66, 0x66, 0x90, 0x90, 0x48, 0x89, 0x11, 0x48, 0x83, 0xc1, 0x08, 0x49, 0xff, 0xc9, 0x75, 0xf4, 0x4d, 0x85, 0xc0, 0x74, 0x0a, 0x88, 0x11, 0x48, 0xff, 0xc1, 0x49, 0xff, 0xc8, 0x75, 0xf6, 0xc3, 0x0f, 0x1f, 0x40, 0x00, 0x66, 0x66, 0x66, 0x90, 0x66, 0x66, 0x90, 0x49, 0x81, 0xf9, 0x00, 0x1c, 0x00, 0x00, 0x73, 0x30, 0x48, 0x89, 0x11, 0x48, 0x89, 0x51, 0x08, 0x48, 0x89, 0x51, 0x10, 0x48, 0x83, 0xc1, 0x40, 0x48, 0x89, 0x51, 0xd8, 0x48, 0x89, 0x51, 0xe0, 0x49, 0xff, 0xc9, 0x48, 0x89, 0x51, 0xe8, 0x48, 0x89, 0x51, 0xf0, 0x48, 0x89, 0x51, 0xf8, 0x75, 0xd8, 0xeb, 0x94, 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00, 0x48, 0x0f, 0xc3, 0x11, 0x48, 0x0f, 0xc3, 0x51, 0x08, 0x48, 0x0f, 0xc3, 0x51, 0x10, 0x48, 0x83, 0xc1, 0x40, 0x48, 0x0f, 0xc3, 0x51, 0xd8, 0x48, 0x0f, 0xc3, 0x51, 0xe0, 0x49, 0xff, 0xc9, 0x48, 0x0f, 0xc3, 0x51, 0xe8, 0x48, 0x0f, 0xc3, 0x51, 0xf0, 0x48, 0x0f, 0xc3, 0x51, 0xf8, 0x75, 0xd0, 0xf0, 0x80, 0x0c, 0x24, 0x00, 0xe9, 0x54, 0xff, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xd9, 0x4d, 0x0b, 0xc0, 0x74, 0x24, 0x48, 0x2b, 0xca, 0xf6, 0xc2, 0x07, 0x74, 0x28, 0x8a, 0x02, 0x84, 0xc0, 0x88, 0x04, 0x11, 0x0f, 0x84, 0xe3, 0x00, 0x00, 0x00, 0x48, 0xff, 0xc2, 0x49, 0xff, 0xc8, 0x74, 0x07, 0xf6, 0xc2, 0x07, 0x75, 0xe6, 0xeb, 0x0c, 0x49, 0x8b, 0xc3, 0xc3, 0x48, 0x89, 0x04, 0x11, 0x48, 0x83, 0xc2, 0x08, 0x48, 0x8b, 0x02, 0x49, 0x83, 0xe8, 0x08, 0x72, 0x26, 0x49, 0xb9, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x7e, 0x4c, 0x03, 0xc8, 0x4c, 0x8b, 0xd0, 0x49, 0x83, 0xf2, 0xff, 0x4d, 0x33, 0xd1, 0x49, 0xb9, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81, 0x4d, 0x85, 0xd1, 0x74, 0xc9, 0x49, 0x83, 0xc0, 0x08, 0x0f, 0x84, 0x8b, 0x00, 0x00, 0x00, 0x84, 0xc0, 0x88, 0x04, 0x11, 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, 0x48, 0xff, 0xc2, 0x49, 0xff, 0xc8, 0x74, 0x78, 0x84, 0xe4, 0x88, 0x24, 0x11, 0x74, 0x75, 0x48, 0xff, 0xc2, 0x49, 0xff, 0xc8, 0x74, 0x69, 0x48, 0xc1, 0xe8, 0x10, 0x84, 0xc0, 0x88, 0x04, 0x11, 0x74, 0x62, 0x48, 0xff, 0xc2, 0x49, 0xff, 0xc8, 0x74, 0x56, 0x84, 0xe4, 0x88, 0x24, 0x11, 0x74, 0x53, 0x48, 0xff, 0xc2, 0x49, 0xff, 0xc8, 0x74, 0x47, 0x48, 0xc1, 0xe8, 0x10, 0x84, 0xc0, 0x88, 0x04, 0x11, 0x74, 0x40, 0x48, 0xff, 0xc2, 0x49, 0xff, 0xc8, 0x74, 0x34, 0x84, 0xe4, 0x88, 0x24, 0x11, 0x74, 0x31, 0x48, 0xff, 0xc2, 0x49, 0xff, 0xc8, 0x74, 0x25, 0xc1, 0xe8, 0x10, 0x84, 0xc0, 0x88, 0x04, 0x11, 0x74, 0x1f, 0x48, 0xff, 0xc2, 0x49, 0xff, 0xc8, 0x74, 0x13, 0x84, 0xe4, 0x88, 0x24, 0x11, 0x74, 0x10, 0x48, 0xff, 0xc2, 0x49, 0xff, 0xc8, 0x0f, 0x85, 0x3c, 0xff, 0xff, 0xff, 0x49, 0x8b, 0xc3, 0xc3, 0x48, 0x03, 0xca, 0x48, 0x33, 0xd2, 0x49, 0x83, 0xf8, 0x10, 0x72, 0x45, 0xf6, 0xc1, 0x07, 0x74, 0x0a, 0x48, 0xff, 0xc1, 0x88, 0x11, 0x49, 0xff, 0xc8, 0xeb, 0xf1, 0x49, 0x83, 0xe8, 0x20, 0x72, 0x19, 0x48, 0x89, 0x11, 0x48, 0x89, 0x51, 0x08, 0x48, 0x89, 0x51, 0x10, 0x48, 0x89, 0x51, 0x18, 0x48, 0x83, 0xc1, 0x20, 0x49, 0x83, 0xe8, 0x20, 0x73, 0xe7, 0x49, 0x83, 0xc0, 0x20, 0x49, 0x83, 0xe8, 0x08, 0x72, 0x09, 0x48, 0x89, 0x11, 0x48, 0x83, 0xc1, 0x08, 0xeb, 0xf1, 0x49, 0x83, 0xc0, 0x08, 0x49, 0x83, 0xe8, 0x01, 0x72, 0x07, 0x88, 0x11, 0x48, 0xff, 0xc1, 0xeb, 0xf3, 0x49, 0x8b, 0xc3, 0xc3, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x45, 0x8b, 0x18, 0x48, 0x8b, 0xda, 0x4c, 0x8b, 0xc9, 0x41, 0x83, 0xe3, 0xf8, 0x41, 0xf6, 0x00, 0x04, 0x4c, 0x8b, 0xd1, 0x74, 0x13, 0x41, 0x8b, 0x40, 0x08, 0x4d, 0x63, 0x50, 0x04, 0xf7, 0xd8, 0x4c, 0x03, 0xd1, 0x48, 0x63, 0xc8, 0x4c, 0x23, 0xd1, 0x49, 0x63, 0xc3, 0x4a, 0x8b, 0x14, 0x10, 0x48, 0x8b, 0x43, 0x10, 0x8b, 0x48, 0x08, 0x48, 0x03, 0x4b, 0x08, 0xf6, 0x41, 0x03, 0x0f, 0x74, 0x0c, 0x0f, 0xb6, 0x41, 0x03, 0x83, 0xe0, 0xf0, 0x48, 0x98, 0x4c, 0x03, 0xc8, 0x4c, 0x33, 0xca, 0x49, 0x8b, 0xc9, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xe9, 0x99, 0x03, 0x00, 0x00, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x4d, 0x8b, 0x41, 0x38, 0x48, 0x8b, 0xca, 0x49, 0x8b, 0xd1, 0xe8, 0x89, 0xff, 0xff, 0xff, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x38, 0x48, 0x8b, 0x44, 0x24, 0x60, 0x48, 0x89, 0x44, 0x24, 0x28, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x4d, 0x8b, 0xc8, 0x4c, 0x8b, 0xc2, 0x48, 0x83, 0xca, 0xff, 0xe8, 0xbe, 0x27, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x4c, 0x89, 0x44, 0x24, 0x18, 0x55, 0x56, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x30, 0x4c, 0x8b, 0xa4, 0x24, 0xa8, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xac, 0x24, 0x98, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xf9, 0x4c, 0x8b, 0xf2, 0x33, 0xd2, 0x4d, 0x8b, 0xf9, 0x8b, 0xca, 0x89, 0x54, 0x24, 0x70, 0x48, 0x3b, 0xfa, 0x74, 0x0a, 0x4c, 0x3b, 0xf2, 0x75, 0x0f, 0x4c, 0x3b, 0xc2, 0x74, 0x0f, 0xb9, 0x01, 0x00, 0x00, 0x00, 0xe9, 0xbc, 0x01, 0x00, 0x00, 0x4c, 0x3b, 0xc2, 0x74, 0xf1, 0x4c, 0x3b, 0xca, 0x75, 0x0c, 0x48, 0x39, 0x94, 0x24, 0x90, 0x00, 0x00, 0x00, 0x75, 0xe2, 0xeb, 0x0a, 0x48, 0x39, 0x94, 0x24, 0x90, 0x00, 0x00, 0x00, 0x74, 0xd6, 0x4c, 0x3b, 0xea, 0x75, 0x0c, 0x48, 0x39, 0x94, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x75, 0xc7, 0xeb, 0x0a, 0x48, 0x39, 0x94, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x74, 0xbb, 0x4c, 0x3b, 0xe2, 0x75, 0x0c, 0x48, 0x39, 0x94, 0x24, 0xb0, 0x00, 0x00, 0x00, 0x75, 0xac, 0xeb, 0x0a, 0x48, 0x39, 0x94, 0x24, 0xb0, 0x00, 0x00, 0x00, 0x74, 0xa0, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xdf, 0x38, 0x13, 0x74, 0x0b, 0x48, 0xff, 0xc8, 0x48, 0xff, 0xc3, 0x48, 0x3b, 0xc2, 0x77, 0xf1, 0x80, 0x3b, 0x3a, 0x75, 0x2c, 0x4c, 0x3b, 0xf2, 0x74, 0x21, 0x49, 0x83, 0xf8, 0x03, 0x0f, 0x82, 0x3b, 0x01, 0x00, 0x00, 0x41, 0xb9, 0x02, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xc7, 0x48, 0x83, 0xca, 0xff, 0x49, 0x8b, 0xce, 0xe8, 0xcf, 0x28, 0x00, 0x00, 0x33, 0xd2, 0x48, 0x8d, 0x7b, 0x01, 0xeb, 0x08, 0x4c, 0x3b, 0xf2, 0x74, 0x03, 0x41, 0x88, 0x16, 0x48, 0x8b, 0xea, 0x48, 0x8b, 0xf2, 0x48, 0x8b, 0xdf, 0x38, 0x17, 0x74, 0x65, 0x0f, 0xbe, 0x0b, 0xe8, 0x96, 0x28, 0x00, 0x00, 0x33, 0xd2, 0x3b, 0xc2, 0x74, 0x05, 0x48, 0xff, 0xc3, 0xeb, 0x17, 0x8a, 0x03, 0x3c, 0x2f, 0x74, 0x0d, 0x3c, 0x5c, 0x74, 0x09, 0x3c, 0x2e, 0x75, 0x09, 0x48, 0x8b, 0xf3, 0xeb, 0x04, 0x48, 0x8d, 0x6b, 0x01, 0x48, 0xff, 0xc3, 0x38, 0x13, 0x75, 0xcf, 0x48, 0x3b, 0xea, 0x74, 0x2f, 0x4c, 0x3b, 0xfa, 0x74, 0x25, 0x4c, 0x8b, 0xcd, 0x4c, 0x2b, 0xcf, 0x4c, 0x39, 0x8c, 0x24, 0x90, 0x00, 0x00, 0x00, 0x0f, 0x86, 0xaa, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xc7, 0x48, 0x83, 0xca, 0xff, 0x49, 0x8b, 0xcf, 0xe8, 0x54, 0x28, 0x00, 0x00, 0x33, 0xd2, 0x48, 0x8b, 0xfd, 0xeb, 0x08, 0x4c, 0x3b, 0xfa, 0x74, 0x03, 0x41, 0x88, 0x17, 0x48, 0x3b, 0xf2, 0x74, 0x51, 0x48, 0x3b, 0xf7, 0x72, 0x4c, 0x4c, 0x3b, 0xea, 0x74, 0x21, 0x4c, 0x8b, 0xce, 0x4c, 0x2b, 0xcf, 0x4c, 0x39, 0x8c, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x76, 0x71, 0x4c, 0x8b, 0xc7, 0x48, 0x83, 0xca, 0xff, 0x49, 0x8b, 0xcd, 0xe8, 0x17, 0x28, 0x00, 0x00, 0x33, 0xd2, 0x4c, 0x3b, 0xe2, 0x74, 0x50, 0x48, 0x2b, 0xde, 0x48, 0x39, 0x9c, 0x24, 0xb0, 0x00, 0x00, 0x00, 0x76, 0x4e, 0x4c, 0x8b, 0xcb, 0x4c, 0x8b, 0xc6, 0x48, 0x83, 0xca, 0xff, 0x49, 0x8b, 0xcc, 0xe8, 0xf1, 0x27, 0x00, 0x00, 0xeb, 0x2f, 0x4c, 0x3b, 0xea, 0x74, 0x21, 0x48, 0x2b, 0xdf, 0x48, 0x39, 0x9c, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x76, 0x28, 0x4c, 0x8b, 0xcb, 0x4c, 0x8b, 0xc7, 0x48, 0x83, 0xca, 0xff, 0x49, 0x8b, 0xcd, 0xe8, 0xcb, 0x27, 0x00, 0x00, 0x33, 0xd2, 0x4c, 0x3b, 0xe2, 0x74, 0x04, 0x41, 0x88, 0x14, 0x24, 0x33, 0xc0, 0xe9, 0x91, 0x00, 0x00, 0x00, 0x8b, 0xca, 0xeb, 0x04, 0x8b, 0x4c, 0x24, 0x70, 0x4c, 0x8b, 0x84, 0x24, 0x80, 0x00, 0x00, 0x00, 0x4c, 0x3b, 0xf2, 0x74, 0x08, 0x4c, 0x3b, 0xc2, 0x76, 0x03, 0x41, 0x88, 0x16, 0x4c, 0x3b, 0xfa, 0x74, 0x0d, 0x48, 0x39, 0x94, 0x24, 0x90, 0x00, 0x00, 0x00, 0x76, 0x03, 0x41, 0x88, 0x17, 0x4c, 0x3b, 0xea, 0x74, 0x0e, 0x48, 0x39, 0x94, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x76, 0x04, 0x41, 0x88, 0x55, 0x00, 0x4c, 0x3b, 0xe2, 0x74, 0x0e, 0x48, 0x39, 0x94, 0x24, 0xb0, 0x00, 0x00, 0x00, 0x76, 0x04, 0x41, 0x88, 0x14, 0x24, 0x48, 0x3b, 0xfa, 0x75, 0x25, 0xe8, 0x1a, 0x1d, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x89, 0x18, 0xe8, 0x2e, 0x1c, 0x00, 0x00, 0x8b, 0xc3, 0xeb, 0x12, 0x3b, 0xca, 0x75, 0xd7, 0xe8, 0xf1, 0x1c, 0x00, 0x00, 0xb9, 0x22, 0x00, 0x00, 0x00, 0x89, 0x08, 0x8b, 0xc1, 0x48, 0x8b, 0x5c, 0x24, 0x78, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0x5d, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x50, 0x49, 0x8b, 0xd8, 0x48, 0x8b, 0xfa, 0x41, 0xb8, 0x00, 0x01, 0x00, 0x00, 0x48, 0x8b, 0xf1, 0x48, 0x8b, 0x8c, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xc1, 0x48, 0xf7, 0xd8, 0x49, 0x8b, 0xc1, 0x4d, 0x1b, 0xdb, 0x4d, 0x23, 0xd8, 0x48, 0xf7, 0xd8, 0x48, 0x8b, 0xc3, 0x4d, 0x1b, 0xd2, 0x4c, 0x89, 0x5c, 0x24, 0x40, 0x48, 0x89, 0x4c, 0x24, 0x38, 0x4d, 0x23, 0xd0, 0x48, 0xf7, 0xd8, 0x48, 0x8b, 0xc7, 0x48, 0x1b, 0xd2, 0x4c, 0x89, 0x54, 0x24, 0x30, 0x4c, 0x89, 0x4c, 0x24, 0x28, 0x49, 0x23, 0xd0, 0x48, 0xf7, 0xd8, 0x4c, 0x8b, 0xcb, 0x4d, 0x1b, 0xc0, 0x48, 0x89, 0x54, 0x24, 0x20, 0x48, 0x8b, 0xd7, 0x41, 0x83, 0xe0, 0x03, 0x48, 0x8b, 0xce, 0xe8, 0xda, 0xfc, 0xff, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x74, 0x24, 0x68, 0x48, 0x83, 0xc4, 0x50, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x79, 0x00, 0x01, 0x00, 0x75, 0x11, 0x48, 0xc1, 0xc1, 0x10, 0x66, 0xf7, 0xc1, 0xff, 0xff, 0x75, 0x02, 0xf3, 0xc3, 0x48, 0xc1, 0xc9, 0x10, 0xe9, 0x5d, 0x26, 0x00, 0x00, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0xc6, 0x41, 0x18, 0x00, 0x48, 0x85, 0xd2, 0x0f, 0x85, 0x82, 0x00, 0x00, 0x00, 0xe8, 0xf1, 0x34, 0x00, 0x00, 0x48, 0x89, 0x43, 0x10, 0x48, 0x8b, 0x90, 0xc0, 0x00, 0x00, 0x00, 0x48, 0x89, 0x13, 0x48, 0x8b, 0x88, 0xb8, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4b, 0x08, 0x48, 0x8b, 0x0d, 0x15, 0x0b, 0x01, 0x00, 0x48, 0x3b, 0xd1, 0x74, 0x16, 0x8b, 0x80, 0xc8, 0x00, 0x00, 0x00, 0x85, 0x05, 0x8c, 0x09, 0x01, 0x00, 0x75, 0x08, 0xe8, 0xc5, 0x32, 0x00, 0x00, 0x48, 0x89, 0x03, 0x48, 0x8b, 0x05, 0x73, 0x08, 0x01, 0x00, 0x48, 0x39, 0x43, 0x08, 0x74, 0x1b, 0x48, 0x8b, 0x43, 0x10, 0x8b, 0x88, 0xc8, 0x00, 0x00, 0x00, 0x85, 0x0d, 0x65, 0x09, 0x01, 0x00, 0x75, 0x09, 0xe8, 0xa6, 0x29, 0x00, 0x00, 0x48, 0x89, 0x43, 0x08, 0x48, 0x8b, 0x43, 0x10, 0xf6, 0x80, 0xc8, 0x00, 0x00, 0x00, 0x02, 0x75, 0x15, 0x83, 0x88, 0xc8, 0x00, 0x00, 0x00, 0x02, 0xc6, 0x43, 0x18, 0x01, 0xeb, 0x08, 0xf3, 0x0f, 0x6f, 0x02, 0xf3, 0x0f, 0x7f, 0x01, 0x48, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x40, 0x83, 0x3d, 0x87, 0x19, 0x01, 0x00, 0x00, 0x48, 0x63, 0xd9, 0x75, 0x10, 0x48, 0x8b, 0x05, 0x6b, 0x0a, 0x01, 0x00, 0x0f, 0xb7, 0x04, 0x58, 0x83, 0xe0, 0x08, 0xeb, 0x56, 0x48, 0x8d, 0x4c, 0x24, 0x20, 0x33, 0xd2, 0xe8, 0x26, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x20, 0x83, 0xb8, 0x0c, 0x01, 0x00, 0x00, 0x01, 0x7e, 0x16, 0x4c, 0x8d, 0x44, 0x24, 0x20, 0xba, 0x08, 0x00, 0x00, 0x00, 0x8b, 0xcb, 0xe8, 0xf3, 0x35, 0x00, 0x00, 0x44, 0x8b, 0xd8, 0xeb, 0x10, 0x48, 0x8b, 0x80, 0x40, 0x01, 0x00, 0x00, 0x44, 0x0f, 0xb7, 0x1c, 0x58, 0x41, 0x83, 0xe3, 0x08, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x30, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x41, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x40, 0x5b, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x54, 0x24, 0x10, 0x4c, 0x89, 0x44, 0x24, 0x18, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x53, 0x48, 0x83, 0xec, 0x60, 0x48, 0x85, 0xd2, 0x75, 0x25, 0xe8, 0xbe, 0x1a, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0xd3, 0x19, 0x00, 0x00, 0x83, 0xc8, 0xff, 0xeb, 0x55, 0x48, 0x85, 0xc9, 0x74, 0xd6, 0x48, 0x89, 0x4c, 0x24, 0x40, 0x48, 0x89, 0x4c, 0x24, 0x30, 0x4c, 0x8d, 0x8c, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0x45, 0x33, 0xc0, 0xc7, 0x44, 0x24, 0x38, 0xff, 0xff, 0xff, 0x7f, 0xc7, 0x44, 0x24, 0x48, 0x42, 0x00, 0x00, 0x00, 0xe8, 0x5a, 0x0a, 0x00, 0x00, 0x83, 0x6c, 0x24, 0x38, 0x01, 0x8b, 0xd8, 0x78, 0x0a, 0x48, 0x8b, 0x4c, 0x24, 0x30, 0xc6, 0x01, 0x00, 0xeb, 0x0c, 0x48, 0x8d, 0x54, 0x24, 0x30, 0x33, 0xc9, 0xe8, 0x3b, 0x36, 0x00, 0x00, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x60, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xc0, 0x74, 0x75, 0x48, 0x2b, 0xd1, 0x4c, 0x8b, 0xca, 0x49, 0xbb, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81, 0xf6, 0xc1, 0x07, 0x74, 0x1f, 0x8a, 0x01, 0x42, 0x8a, 0x14, 0x09, 0x48, 0xff, 0xc1, 0x3a, 0xc2, 0x75, 0x57, 0x49, 0xff, 0xc8, 0x74, 0x4e, 0x84, 0xc0, 0x74, 0x4a, 0x48, 0xf7, 0xc1, 0x07, 0x00, 0x00, 0x00, 0x75, 0xe1, 0x4a, 0x8d, 0x14, 0x09, 0x66, 0x81, 0xe2, 0xff, 0x0f, 0x66, 0x81, 0xfa, 0xf8, 0x0f, 0x77, 0xd1, 0x48, 0x8b, 0x01, 0x4a, 0x8b, 0x14, 0x09, 0x48, 0x3b, 0xc2, 0x75, 0xc5, 0x48, 0x83, 0xc1, 0x08, 0x49, 0x83, 0xe8, 0x08, 0x49, 0xba, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x7e, 0x76, 0x11, 0x48, 0x83, 0xf0, 0xff, 0x4c, 0x03, 0xd2, 0x49, 0x33, 0xc2, 0x49, 0x85, 0xc3, 0x74, 0xc1, 0xeb, 0x0c, 0x48, 0x33, 0xc0, 0xc3, 0x48, 0x1b, 0xc0, 0x48, 0x83, 0xd8, 0xff, 0xc3, 0x84, 0xd2, 0x74, 0x27, 0x84, 0xf6, 0x74, 0x23, 0x48, 0xc1, 0xea, 0x10, 0x84, 0xd2, 0x74, 0x1b, 0x84, 0xf6, 0x74, 0x17, 0x48, 0xc1, 0xea, 0x10, 0x84, 0xd2, 0x74, 0x0f, 0x84, 0xf6, 0x74, 0x0b, 0xc1, 0xea, 0x10, 0x84, 0xd2, 0x74, 0x04, 0x84, 0xf6, 0x75, 0x88, 0x48, 0x33, 0xc0, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0xd9, 0xe8, 0x0b, 0x39, 0x00, 0x00, 0x8b, 0xcb, 0xe8, 0xdc, 0x36, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0xbd, 0xfd, 0x00, 0x00, 0xe8, 0xec, 0x30, 0x00, 0x00, 0xb9, 0xff, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0x48, 0xff, 0xe0, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0xd9, 0x48, 0x8d, 0x0d, 0xa1, 0xcd, 0x00, 0x00, 0xff, 0x15, 0x03, 0xca, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x19, 0x48, 0x8d, 0x15, 0x7f, 0xcd, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xff, 0x15, 0xfe, 0xc9, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x04, 0x8b, 0xcb, 0xff, 0xd0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0xd9, 0xe8, 0xb7, 0xff, 0xff, 0xff, 0x8b, 0xcb, 0xff, 0x15, 0xdf, 0xc9, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xb9, 0x08, 0x00, 0x00, 0x00, 0xe9, 0x2e, 0x20, 0x00, 0x00, 0xcc, 0xcc, 0xb9, 0x08, 0x00, 0x00, 0x00, 0xe9, 0x22, 0x1f, 0x00, 0x00, 0xcc, 0xcc, 0x48, 0x3b, 0xca, 0x73, 0x2d, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xfa, 0x48, 0x8b, 0xd9, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x74, 0x02, 0xff, 0xd0, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x3b, 0xdf, 0x72, 0xed, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x33, 0xc0, 0x48, 0x8b, 0xfa, 0x48, 0x8b, 0xd9, 0x48, 0x3b, 0xca, 0x73, 0x17, 0x85, 0xc0, 0x75, 0x13, 0x48, 0x8b, 0x0b, 0x48, 0x85, 0xc9, 0x74, 0x02, 0xff, 0xd1, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x3b, 0xdf, 0x72, 0xe9, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x83, 0x3d, 0x9a, 0x1e, 0x01, 0x00, 0x00, 0x8b, 0xd9, 0x74, 0x18, 0x48, 0x8d, 0x0d, 0x8f, 0x1e, 0x01, 0x00, 0xe8, 0xba, 0x3a, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x08, 0x8b, 0xcb, 0xff, 0x15, 0x7e, 0x1e, 0x01, 0x00, 0xe8, 0xf1, 0x39, 0x00, 0x00, 0x48, 0x8d, 0x15, 0x8a, 0xcb, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x5b, 0xcb, 0x00, 0x00, 0xe8, 0x7e, 0xff, 0xff, 0xff, 0x85, 0xc0, 0x75, 0x5a, 0x48, 0x8d, 0x0d, 0x9b, 0x39, 0x00, 0x00, 0xe8, 0x46, 0x39, 0x00, 0x00, 0x48, 0x8d, 0x1d, 0x2f, 0xcb, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x30, 0xcb, 0x00, 0x00, 0xeb, 0x0e, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x74, 0x02, 0xff, 0xd0, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x3b, 0xdf, 0x72, 0xed, 0x48, 0x83, 0x3d, 0x33, 0x1e, 0x01, 0x00, 0x00, 0x74, 0x1f, 0x48, 0x8d, 0x0d, 0x2a, 0x1e, 0x01, 0x00, 0xe8, 0x4d, 0x3a, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x0f, 0x45, 0x33, 0xc0, 0x33, 0xc9, 0x41, 0x8d, 0x50, 0x02, 0xff, 0x15, 0x12, 0x1e, 0x01, 0x00, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x44, 0x89, 0x44, 0x24, 0x18, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x40, 0x45, 0x8b, 0xe0, 0x8b, 0xda, 0x44, 0x8b, 0xf9, 0xb9, 0x08, 0x00, 0x00, 0x00, 0xe8, 0xd2, 0x1e, 0x00, 0x00, 0x90, 0x83, 0x3d, 0xae, 0x0d, 0x01, 0x00, 0x01, 0x0f, 0x84, 0xfc, 0x00, 0x00, 0x00, 0xc7, 0x05, 0x9a, 0x0d, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x44, 0x88, 0x25, 0x8f, 0x0d, 0x01, 0x00, 0x85, 0xdb, 0x0f, 0x85, 0xcf, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x90, 0x1d, 0x01, 0x00, 0xe8, 0xef, 0x2e, 0x00, 0x00, 0x48, 0x8b, 0xf0, 0x48, 0x89, 0x44, 0x24, 0x30, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x9f, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x6b, 0x1d, 0x01, 0x00, 0xe8, 0xd2, 0x2e, 0x00, 0x00, 0x48, 0x8b, 0xf8, 0x48, 0x89, 0x44, 0x24, 0x20, 0x4c, 0x8b, 0xf6, 0x48, 0x89, 0x74, 0x24, 0x28, 0x4c, 0x8b, 0xe8, 0x48, 0x89, 0x44, 0x24, 0x38, 0x48, 0x83, 0xef, 0x08, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x48, 0x3b, 0xfe, 0x72, 0x0c, 0xe8, 0x9b, 0x2e, 0x00, 0x00, 0x48, 0x39, 0x07, 0x75, 0x02, 0xeb, 0xe6, 0x48, 0x3b, 0xfe, 0x72, 0x5c, 0x48, 0x8b, 0x0f, 0xe8, 0x93, 0x2e, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0xe8, 0x7f, 0x2e, 0x00, 0x00, 0x48, 0x89, 0x07, 0xff, 0xd3, 0x48, 0x8b, 0x0d, 0x1b, 0x1d, 0x01, 0x00, 0xe8, 0x7a, 0x2e, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x8b, 0x0d, 0x04, 0x1d, 0x01, 0x00, 0xe8, 0x6b, 0x2e, 0x00, 0x00, 0x4c, 0x3b, 0xf3, 0x75, 0x05, 0x4c, 0x3b, 0xe8, 0x74, 0x20, 0x4c, 0x8b, 0xf3, 0x48, 0x89, 0x5c, 0x24, 0x28, 0x48, 0x8b, 0xf3, 0x48, 0x89, 0x5c, 0x24, 0x30, 0x4c, 0x8b, 0xe8, 0x48, 0x89, 0x44, 0x24, 0x38, 0x48, 0x8b, 0xf8, 0x48, 0x89, 0x44, 0x24, 0x20, 0xeb, 0x85, 0x48, 0x8d, 0x15, 0x1c, 0xca, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0xfd, 0xc9, 0x00, 0x00, 0xe8, 0xbc, 0xfd, 0xff, 0xff, 0x48, 0x8d, 0x15, 0x19, 0xca, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x0a, 0xca, 0x00, 0x00, 0xe8, 0xa9, 0xfd, 0xff, 0xff, 0x90, 0x45, 0x85, 0xe4, 0x74, 0x0a, 0xb9, 0x08, 0x00, 0x00, 0x00, 0xe8, 0xb9, 0x1c, 0x00, 0x00, 0x45, 0x85, 0xe4, 0x75, 0x26, 0xc7, 0x05, 0x8e, 0x0c, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x41, 0x8d, 0x4c, 0x24, 0x08, 0xe8, 0xa0, 0x1c, 0x00, 0x00, 0x41, 0x8b, 0xcf, 0xe8, 0x0c, 0xfd, 0xff, 0xff, 0x41, 0x8b, 0xcf, 0xff, 0x15, 0x33, 0xc7, 0x00, 0x00, 0xcc, 0x48, 0x8b, 0x5c, 0x24, 0x70, 0x48, 0x8b, 0x74, 0x24, 0x78, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0xc3, 0xcc, 0xcc, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0xe9, 0x6a, 0xfe, 0xff, 0xff, 0xcc, 0xcc, 0x45, 0x33, 0xc0, 0x41, 0x8d, 0x50, 0x01, 0xe9, 0x5c, 0xfe, 0xff, 0xff, 0x33, 0xd2, 0x33, 0xc9, 0x44, 0x8d, 0x42, 0x01, 0xe9, 0x4f, 0xfe, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0xba, 0x01, 0x00, 0x00, 0x00, 0x33, 0xc9, 0x44, 0x8b, 0xc2, 0xe9, 0x3d, 0xfe, 0xff, 0xff, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0xe8, 0x75, 0x2d, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0x48, 0x8b, 0xd8, 0xe8, 0x9a, 0x3d, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0x52, 0x3d, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0xca, 0x13, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0x3a, 0x3d, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0x2a, 0x3d, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0x82, 0x3a, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0xa6, 0x38, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0x82, 0x38, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x7f, 0xff, 0xff, 0xff, 0xe8, 0x1e, 0x2d, 0x00, 0x00, 0x48, 0x89, 0x05, 0xf7, 0xf9, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x30, 0xb8, 0x4d, 0x5a, 0x00, 0x00, 0x66, 0x39, 0x05, 0x0a, 0xd6, 0xff, 0xff, 0x75, 0x56, 0x48, 0x63, 0x05, 0x3d, 0xd6, 0xff, 0xff, 0x48, 0x8d, 0x0d, 0xfa, 0xd5, 0xff, 0xff, 0x48, 0x03, 0xc1, 0x81, 0x38, 0x50, 0x45, 0x00, 0x00, 0x74, 0x08, 0x33, 0xdb, 0x89, 0x5c, 0x24, 0x40, 0xeb, 0x3b, 0xb9, 0x0b, 0x02, 0x00, 0x00, 0x66, 0x39, 0x48, 0x18, 0x74, 0x08, 0x33, 0xdb, 0x89, 0x5c, 0x24, 0x40, 0xeb, 0x28, 0x83, 0xb8, 0x84, 0x00, 0x00, 0x00, 0x0e, 0x77, 0x08, 0x33, 0xdb, 0x89, 0x5c, 0x24, 0x40, 0xeb, 0x17, 0x33, 0xdb, 0x39, 0x98, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0x95, 0xc3, 0x89, 0x5c, 0x24, 0x40, 0xeb, 0x06, 0x33, 0xdb, 0x89, 0x5c, 0x24, 0x40, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x8b, 0xcf, 0xe8, 0x0c, 0x43, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x22, 0x83, 0x3d, 0x45, 0x0b, 0x01, 0x00, 0x02, 0x74, 0x05, 0xe8, 0x9e, 0x34, 0x00, 0x00, 0xb9, 0x1c, 0x00, 0x00, 0x00, 0xe8, 0x6c, 0x32, 0x00, 0x00, 0xb9, 0xff, 0x00, 0x00, 0x00, 0xe8, 0xde, 0xfb, 0xff, 0xff, 0xe8, 0x3d, 0x2f, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x22, 0x83, 0x3d, 0x1a, 0x0b, 0x01, 0x00, 0x02, 0x74, 0x05, 0xe8, 0x73, 0x34, 0x00, 0x00, 0xb9, 0x10, 0x00, 0x00, 0x00, 0xe8, 0x41, 0x32, 0x00, 0x00, 0xb9, 0xff, 0x00, 0x00, 0x00, 0xe8, 0xb3, 0xfb, 0xff, 0xff, 0xe8, 0x02, 0x36, 0x00, 0x00, 0x90, 0xe8, 0x84, 0x0f, 0x00, 0x00, 0x85, 0xc0, 0x79, 0x0a, 0xb9, 0x1b, 0x00, 0x00, 0x00, 0xe8, 0x2e, 0xfb, 0xff, 0xff, 0xff, 0x15, 0x90, 0xc5, 0x00, 0x00, 0x48, 0x89, 0x05, 0xb1, 0x1a, 0x01, 0x00, 0xe8, 0xdc, 0x40, 0x00, 0x00, 0x48, 0x89, 0x05, 0xbd, 0x0a, 0x01, 0x00, 0xe8, 0xd8, 0x3f, 0x00, 0x00, 0x85, 0xc0, 0x79, 0x0a, 0xb9, 0x08, 0x00, 0x00, 0x00, 0xe8, 0x02, 0xfb, 0xff, 0xff, 0xe8, 0xc5, 0x3c, 0x00, 0x00, 0x85, 0xc0, 0x79, 0x0a, 0xb9, 0x09, 0x00, 0x00, 0x00, 0xe8, 0xef, 0xfa, 0xff, 0xff, 0x8b, 0xcf, 0xe8, 0xf4, 0xfb, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x07, 0x8b, 0xc8, 0xe8, 0xdd, 0xfa, 0xff, 0xff, 0x4c, 0x8b, 0x05, 0x3e, 0x0a, 0x01, 0x00, 0x4c, 0x89, 0x05, 0x3f, 0x0a, 0x01, 0x00, 0x48, 0x8b, 0x15, 0x20, 0x0a, 0x01, 0x00, 0x8b, 0x0d, 0x16, 0x0a, 0x01, 0x00, 0xe8, 0xa5, 0xed, 0xff, 0xff, 0x8b, 0xf8, 0x89, 0x44, 0x24, 0x20, 0x85, 0xdb, 0x75, 0x07, 0x8b, 0xc8, 0xe8, 0xf4, 0xfd, 0xff, 0xff, 0xe8, 0x07, 0xfe, 0xff, 0xff, 0xeb, 0x17, 0x8b, 0xf8, 0x83, 0x7c, 0x24, 0x40, 0x00, 0x75, 0x08, 0x8b, 0xc8, 0xe8, 0xe9, 0xfd, 0xff, 0xff, 0xcc, 0xe8, 0xff, 0xfd, 0xff, 0xff, 0x90, 0x8b, 0xc7, 0x48, 0x8b, 0x5c, 0x24, 0x48, 0x48, 0x83, 0xc4, 0x30, 0x5f, 0xc3, 0xcc, 0x48, 0x83, 0xec, 0x28, 0xe8, 0x37, 0x42, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xe9, 0x56, 0xfe, 0xff, 0xff, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x18, 0x48, 0x89, 0x70, 0x20, 0x48, 0x89, 0x50, 0x10, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x40, 0x4d, 0x8b, 0x79, 0x08, 0x4d, 0x8b, 0x21, 0x49, 0x8b, 0x71, 0x38, 0x4d, 0x2b, 0xe7, 0xf6, 0x41, 0x04, 0x66, 0x4d, 0x8b, 0xf1, 0x48, 0x8b, 0xea, 0x4c, 0x8b, 0xe9, 0x0f, 0x85, 0xdc, 0x00, 0x00, 0x00, 0x33, 0xff, 0x48, 0x89, 0x48, 0xc8, 0x4c, 0x89, 0x40, 0xd0, 0x39, 0x3e, 0x0f, 0x86, 0x2b, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x5e, 0x0c, 0x8b, 0x43, 0xf8, 0x4c, 0x3b, 0xe0, 0x0f, 0x82, 0xa7, 0x00, 0x00, 0x00, 0x8b, 0x43, 0xfc, 0x4c, 0x3b, 0xe0, 0x0f, 0x83, 0x9b, 0x00, 0x00, 0x00, 0x83, 0x7b, 0x04, 0x00, 0x0f, 0x84, 0x91, 0x00, 0x00, 0x00, 0x83, 0x3b, 0x01, 0x74, 0x19, 0x8b, 0x03, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0x48, 0x8b, 0xd5, 0x49, 0x03, 0xc7, 0xff, 0xd0, 0x85, 0xc0, 0x0f, 0x88, 0x84, 0x00, 0x00, 0x00, 0x7e, 0x73, 0x41, 0x81, 0x7d, 0x00, 0x63, 0x73, 0x6d, 0xe0, 0x75, 0x28, 0x48, 0x83, 0x3d, 0x4b, 0x19, 0x01, 0x00, 0x00, 0x74, 0x1e, 0x48, 0x8d, 0x0d, 0x42, 0x19, 0x01, 0x00, 0xe8, 0x9d, 0x35, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x0e, 0xba, 0x01, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xcd, 0xff, 0x15, 0x2b, 0x19, 0x01, 0x00, 0x8b, 0x4b, 0x04, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd5, 0x49, 0x03, 0xcf, 0xe8, 0x47, 0x42, 0x00, 0x00, 0x49, 0x8b, 0x46, 0x40, 0x8b, 0x53, 0x04, 0x4d, 0x63, 0x4d, 0x00, 0x48, 0x89, 0x44, 0x24, 0x28, 0x49, 0x8b, 0x46, 0x28, 0x49, 0x03, 0xd7, 0x4d, 0x8b, 0xc5, 0x48, 0x8b, 0xcd, 0x48, 0x89, 0x44, 0x24, 0x20, 0xff, 0x15, 0xd7, 0xc3, 0x00, 0x00, 0xe8, 0x4a, 0x42, 0x00, 0x00, 0xff, 0xc7, 0x48, 0x83, 0xc3, 0x10, 0x3b, 0x3e, 0x73, 0x6a, 0xe9, 0x3e, 0xff, 0xff, 0xff, 0x33, 0xc0, 0xeb, 0x66, 0x49, 0x8b, 0x79, 0x20, 0x33, 0xed, 0x49, 0x2b, 0xff, 0x39, 0x2e, 0x76, 0x54, 0x48, 0x8d, 0x5e, 0x10, 0x8b, 0x4b, 0xf4, 0x4c, 0x3b, 0xe1, 0x72, 0x3e, 0x8b, 0x43, 0xf8, 0x4c, 0x3b, 0xe0, 0x73, 0x36, 0x48, 0x3b, 0xf9, 0x72, 0x0c, 0x48, 0x3b, 0xf8, 0x73, 0x07, 0x41, 0xf6, 0x45, 0x04, 0x20, 0x75, 0x2f, 0x83, 0x3b, 0x00, 0x74, 0x09, 0x8b, 0x03, 0x48, 0x3b, 0xf8, 0x74, 0x23, 0xeb, 0x17, 0x48, 0x8b, 0x54, 0x24, 0x78, 0x49, 0x03, 0xc7, 0xb1, 0x01, 0x49, 0x89, 0x06, 0x44, 0x8b, 0x43, 0xfc, 0x4d, 0x03, 0xc7, 0x41, 0xff, 0xd0, 0xff, 0xc5, 0x48, 0x83, 0xc3, 0x10, 0x3b, 0x2e, 0x72, 0xb0, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x5c, 0x24, 0x40, 0x49, 0x8b, 0x5b, 0x30, 0x49, 0x8b, 0x6b, 0x40, 0x49, 0x8b, 0x73, 0x48, 0x49, 0x8b, 0xe3, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x7c, 0x24, 0x10, 0x41, 0x54, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0xe8, 0xe8, 0x0f, 0x00, 0x00, 0x8b, 0xc8, 0xe8, 0x95, 0x41, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x84, 0x97, 0x00, 0x00, 0x00, 0xe8, 0x04, 0xed, 0xff, 0xff, 0x48, 0x83, 0xc0, 0x30, 0x48, 0x3b, 0xd8, 0x75, 0x04, 0x33, 0xc0, 0xeb, 0x13, 0xe8, 0xf2, 0xec, 0xff, 0xff, 0x48, 0x83, 0xc0, 0x60, 0x48, 0x3b, 0xd8, 0x75, 0x77, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xff, 0x05, 0xc2, 0x07, 0x01, 0x00, 0xf7, 0x43, 0x18, 0x0c, 0x01, 0x00, 0x00, 0x75, 0x63, 0x4c, 0x8d, 0x25, 0x26, 0x08, 0x01, 0x00, 0x48, 0x63, 0xf8, 0x49, 0x83, 0x3c, 0xfc, 0x00, 0x75, 0x2b, 0xb9, 0x00, 0x10, 0x00, 0x00, 0xe8, 0x4a, 0x12, 0x00, 0x00, 0x49, 0x89, 0x04, 0xfc, 0x48, 0x85, 0xc0, 0x75, 0x18, 0x48, 0x8d, 0x43, 0x20, 0x48, 0x89, 0x43, 0x10, 0x48, 0x89, 0x03, 0xb8, 0x02, 0x00, 0x00, 0x00, 0x89, 0x43, 0x24, 0x89, 0x43, 0x08, 0xeb, 0x19, 0x49, 0x8b, 0x0c, 0xfc, 0xc7, 0x43, 0x24, 0x00, 0x10, 0x00, 0x00, 0xc7, 0x43, 0x08, 0x00, 0x10, 0x00, 0x00, 0x48, 0x89, 0x4b, 0x10, 0x48, 0x89, 0x0b, 0x81, 0x4b, 0x18, 0x02, 0x11, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x02, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x7c, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5c, 0xc3, 0xcc, 0xcc, 0xcc, 0x85, 0xc9, 0x74, 0x30, 0x53, 0x48, 0x83, 0xec, 0x20, 0x0f, 0xba, 0x62, 0x18, 0x0c, 0x48, 0x8b, 0xda, 0x73, 0x1c, 0x48, 0x8b, 0xca, 0xe8, 0xc1, 0x14, 0x00, 0x00, 0x81, 0x63, 0x18, 0xff, 0xee, 0xff, 0xff, 0x83, 0x63, 0x24, 0x00, 0x48, 0x83, 0x23, 0x00, 0x48, 0x83, 0x63, 0x10, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0xf6, 0x42, 0x18, 0x40, 0x49, 0x8b, 0xd8, 0x74, 0x0c, 0x48, 0x83, 0x7a, 0x10, 0x00, 0x75, 0x05, 0x41, 0xff, 0x00, 0xeb, 0x26, 0x83, 0x42, 0x08, 0xff, 0x78, 0x0d, 0x48, 0x8b, 0x02, 0x88, 0x08, 0x48, 0xff, 0x02, 0x0f, 0xb6, 0xc1, 0xeb, 0x08, 0x0f, 0xbe, 0xc9, 0xe8, 0xe6, 0x2c, 0x00, 0x00, 0x83, 0xf8, 0xff, 0x75, 0x04, 0x09, 0x03, 0xeb, 0x02, 0xff, 0x03, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0x85, 0xd2, 0x7e, 0x4c, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xf9, 0x49, 0x8b, 0xf0, 0x8b, 0xda, 0x40, 0x8a, 0xe9, 0x4c, 0x8b, 0xc7, 0x48, 0x8b, 0xd6, 0x40, 0x8a, 0xcd, 0xff, 0xcb, 0xe8, 0x85, 0xff, 0xff, 0xff, 0x83, 0x3f, 0xff, 0x74, 0x04, 0x85, 0xdb, 0x7f, 0xe7, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, 0x41, 0xf6, 0x40, 0x18, 0x40, 0x49, 0x8b, 0xf9, 0x49, 0x8b, 0xf0, 0x8b, 0xda, 0x48, 0x8b, 0xe9, 0x74, 0x0c, 0x49, 0x83, 0x78, 0x10, 0x00, 0x75, 0x05, 0x41, 0x01, 0x11, 0xeb, 0x37, 0x85, 0xd2, 0x7e, 0x33, 0x8a, 0x4d, 0x00, 0x4c, 0x8b, 0xc7, 0x48, 0x8b, 0xd6, 0xff, 0xcb, 0xe8, 0x1e, 0xff, 0xff, 0xff, 0x48, 0xff, 0xc5, 0x83, 0x3f, 0xff, 0x75, 0x17, 0xe8, 0x3d, 0x10, 0x00, 0x00, 0x83, 0x38, 0x2a, 0x75, 0x11, 0x4c, 0x8b, 0xc7, 0x48, 0x8b, 0xd6, 0xb1, 0x3f, 0xe8, 0xff, 0xfe, 0xff, 0xff, 0x85, 0xdb, 0x7f, 0xcd, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x18, 0x55, 0x56, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x81, 0xec, 0xd0, 0x02, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x4a, 0xf4, 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x84, 0x24, 0xc8, 0x02, 0x00, 0x00, 0x33, 0xc0, 0x48, 0x8b, 0xd9, 0x48, 0x89, 0x4c, 0x24, 0x68, 0x48, 0x8b, 0xfa, 0x48, 0x8d, 0x4c, 0x24, 0x78, 0x49, 0x8b, 0xd0, 0x4d, 0x8b, 0xe9, 0x89, 0x44, 0x24, 0x60, 0x44, 0x8b, 0xe0, 0x89, 0x44, 0x24, 0x54, 0x44, 0x8b, 0xf0, 0x89, 0x44, 0x24, 0x48, 0x89, 0x44, 0x24, 0x58, 0x89, 0x44, 0x24, 0x50, 0xe8, 0xa8, 0xf3, 0xff, 0xff, 0x45, 0x33, 0xd2, 0x49, 0x3b, 0xda, 0x75, 0x41, 0xe8, 0xa3, 0x0f, 0x00, 0x00, 0x33, 0xdb, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x20, 0xe8, 0xb7, 0x0e, 0x00, 0x00, 0x38, 0x9c, 0x24, 0x90, 0x00, 0x00, 0x00, 0x74, 0x0f, 0x48, 0x8b, 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x83, 0xc8, 0xff, 0xe9, 0xfd, 0x07, 0x00, 0x00, 0x41, 0x83, 0xcf, 0xff, 0xf6, 0x43, 0x18, 0x40, 0x4c, 0x8d, 0x0d, 0xf0, 0xcf, 0xff, 0xff, 0x0f, 0x85, 0xba, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0x12, 0x0d, 0x00, 0x00, 0x48, 0x8d, 0x15, 0xcb, 0xf3, 0x00, 0x00, 0x41, 0x3b, 0xc7, 0x74, 0x28, 0x83, 0xf8, 0xfe, 0x74, 0x23, 0x4c, 0x63, 0xc0, 0x4c, 0x8d, 0x0d, 0xc7, 0xcf, 0xff, 0xff, 0x49, 0x8b, 0xc8, 0x41, 0x83, 0xe0, 0x1f, 0x48, 0xc1, 0xf9, 0x05, 0x4d, 0x6b, 0xc0, 0x58, 0x4d, 0x03, 0x84, 0xc9, 0x80, 0x43, 0x01, 0x00, 0xeb, 0x0a, 0x4c, 0x8b, 0xc2, 0x4c, 0x8d, 0x0d, 0xa4, 0xcf, 0xff, 0xff, 0x41, 0xf6, 0x40, 0x38, 0x7f, 0x75, 0x29, 0x41, 0x3b, 0xc7, 0x74, 0x1e, 0x83, 0xf8, 0xfe, 0x74, 0x19, 0x48, 0x63, 0xd0, 0x48, 0x8b, 0xc2, 0x83, 0xe2, 0x1f, 0x48, 0xc1, 0xf8, 0x05, 0x48, 0x6b, 0xd2, 0x58, 0x49, 0x03, 0x94, 0xc1, 0x80, 0x43, 0x01, 0x00, 0xf6, 0x42, 0x38, 0x80, 0x74, 0x41, 0xe8, 0xd7, 0x0e, 0x00, 0x00, 0x33, 0xdb, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x20, 0xe8, 0xeb, 0x0d, 0x00, 0x00, 0x38, 0x9c, 0x24, 0x90, 0x00, 0x00, 0x00, 0x74, 0x0f, 0x48, 0x8b, 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x41, 0x8b, 0xc7, 0xe9, 0x31, 0x07, 0x00, 0x00, 0x45, 0x33, 0xd2, 0x49, 0x3b, 0xfa, 0x74, 0xb7, 0x40, 0x8a, 0x2f, 0x41, 0x8b, 0xf2, 0x44, 0x89, 0x54, 0x24, 0x40, 0x44, 0x89, 0x54, 0x24, 0x44, 0x41, 0x8b, 0xd2, 0x4c, 0x89, 0x94, 0x24, 0x98, 0x00, 0x00, 0x00, 0x41, 0x3a, 0xea, 0x0f, 0x84, 0xea, 0x06, 0x00, 0x00, 0x48, 0x8b, 0x9c, 0x24, 0xa8, 0x00, 0x00, 0x00, 0x41, 0xbb, 0x00, 0x02, 0x00, 0x00, 0x48, 0xff, 0xc7, 0x41, 0x3b, 0xf2, 0x48, 0x89, 0xbc, 0x24, 0xb0, 0x00, 0x00, 0x00, 0x0f, 0x8c, 0xc8, 0x06, 0x00, 0x00, 0x8d, 0x45, 0xe0, 0x3c, 0x58, 0x77, 0x12, 0x48, 0x0f, 0xbe, 0xc5, 0x42, 0x0f, 0xbe, 0x8c, 0x08, 0xf0, 0xf3, 0x00, 0x00, 0x83, 0xe1, 0x0f, 0xeb, 0x03, 0x41, 0x8b, 0xca, 0x48, 0x63, 0xc2, 0x48, 0x63, 0xc9, 0x48, 0x8d, 0x14, 0xc8, 0x42, 0x0f, 0xbe, 0x94, 0x0a, 0x10, 0xf4, 0x00, 0x00, 0xc1, 0xfa, 0x04, 0x89, 0x54, 0x24, 0x5c, 0x8b, 0xca, 0x41, 0x3b, 0xd2, 0x0f, 0x84, 0x79, 0x07, 0x00, 0x00, 0x83, 0xe9, 0x01, 0x0f, 0x84, 0x88, 0x08, 0x00, 0x00, 0x83, 0xe9, 0x01, 0x0f, 0x84, 0x2f, 0x08, 0x00, 0x00, 0x83, 0xe9, 0x01, 0x0f, 0x84, 0xeb, 0x07, 0x00, 0x00, 0x83, 0xe9, 0x01, 0x0f, 0x84, 0xda, 0x07, 0x00, 0x00, 0x83, 0xe9, 0x01, 0x0f, 0x84, 0xa0, 0x07, 0x00, 0x00, 0x83, 0xe9, 0x01, 0x0f, 0x84, 0x97, 0x06, 0x00, 0x00, 0x83, 0xf9, 0x01, 0x0f, 0x85, 0x3c, 0x06, 0x00, 0x00, 0x40, 0x0f, 0xbe, 0xc5, 0x83, 0xf8, 0x64, 0x0f, 0x8f, 0x7e, 0x01, 0x00, 0x00, 0x0f, 0x84, 0x80, 0x02, 0x00, 0x00, 0x83, 0xf8, 0x41, 0x0f, 0x84, 0x40, 0x01, 0x00, 0x00, 0x83, 0xf8, 0x43, 0x0f, 0x84, 0xd0, 0x00, 0x00, 0x00, 0x83, 0xf8, 0x45, 0x0f, 0x84, 0x2e, 0x01, 0x00, 0x00, 0x83, 0xf8, 0x47, 0x0f, 0x84, 0x25, 0x01, 0x00, 0x00, 0x83, 0xf8, 0x53, 0x74, 0x6d, 0x83, 0xf8, 0x58, 0x0f, 0x84, 0xe4, 0x01, 0x00, 0x00, 0x83, 0xf8, 0x5a, 0x74, 0x17, 0x83, 0xf8, 0x61, 0x0f, 0x84, 0x15, 0x01, 0x00, 0x00, 0x83, 0xf8, 0x63, 0x0f, 0x84, 0xa7, 0x00, 0x00, 0x00, 0xe9, 0x48, 0x04, 0x00, 0x00, 0x49, 0x8b, 0x45, 0x00, 0x49, 0x83, 0xc5, 0x08, 0x49, 0x3b, 0xc2, 0x74, 0x2f, 0x48, 0x8b, 0x58, 0x08, 0x49, 0x3b, 0xda, 0x74, 0x26, 0x41, 0x0f, 0xba, 0xe4, 0x0b, 0x0f, 0xbf, 0x00, 0x73, 0x12, 0x99, 0xc7, 0x44, 0x24, 0x50, 0x01, 0x00, 0x00, 0x00, 0x2b, 0xc2, 0xd1, 0xf8, 0xe9, 0x12, 0x04, 0x00, 0x00, 0x44, 0x89, 0x54, 0x24, 0x50, 0xe9, 0x08, 0x04, 0x00, 0x00, 0x48, 0x8b, 0x1d, 0xa1, 0xf1, 0x00, 0x00, 0xe9, 0xf1, 0x03, 0x00, 0x00, 0x41, 0xf7, 0xc4, 0x30, 0x08, 0x00, 0x00, 0x75, 0x05, 0x41, 0x0f, 0xba, 0xec, 0x0b, 0x49, 0x8b, 0x5d, 0x00, 0x45, 0x3b, 0xf7, 0x41, 0x8b, 0xc6, 0xb9, 0xff, 0xff, 0xff, 0x7f, 0x0f, 0x44, 0xc1, 0x49, 0x83, 0xc5, 0x08, 0x41, 0xf7, 0xc4, 0x10, 0x08, 0x00, 0x00, 0x0f, 0x84, 0x1a, 0x01, 0x00, 0x00, 0x49, 0x3b, 0xda, 0xc7, 0x44, 0x24, 0x50, 0x01, 0x00, 0x00, 0x00, 0x48, 0x0f, 0x44, 0x1d, 0x60, 0xf1, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe9, 0xf2, 0x00, 0x00, 0x00, 0x41, 0xf7, 0xc4, 0x30, 0x08, 0x00, 0x00, 0x75, 0x05, 0x41, 0x0f, 0xba, 0xec, 0x0b, 0x49, 0x83, 0xc5, 0x08, 0x41, 0xf7, 0xc4, 0x10, 0x08, 0x00, 0x00, 0x74, 0x2c, 0x45, 0x0f, 0xb7, 0x4d, 0xf8, 0x48, 0x8d, 0x94, 0x24, 0xc0, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x44, 0x4d, 0x8b, 0xc3, 0xe8, 0x0b, 0x40, 0x00, 0x00, 0x45, 0x33, 0xd2, 0x41, 0x3b, 0xc2, 0x74, 0x1d, 0xc7, 0x44, 0x24, 0x58, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x13, 0x41, 0x8a, 0x45, 0xf8, 0xc7, 0x44, 0x24, 0x44, 0x01, 0x00, 0x00, 0x00, 0x88, 0x84, 0x24, 0xc0, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x9c, 0x24, 0xc0, 0x00, 0x00, 0x00, 0xe9, 0x4d, 0x03, 0x00, 0x00, 0xc7, 0x44, 0x24, 0x70, 0x01, 0x00, 0x00, 0x00, 0x40, 0x80, 0xc5, 0x20, 0x41, 0x83, 0xcc, 0x40, 0x45, 0x3b, 0xf2, 0x48, 0x8d, 0x9c, 0x24, 0xc0, 0x00, 0x00, 0x00, 0x41, 0x8b, 0xf3, 0x0f, 0x8d, 0x2d, 0x02, 0x00, 0x00, 0x41, 0xbe, 0x06, 0x00, 0x00, 0x00, 0xe9, 0x6b, 0x02, 0x00, 0x00, 0x83, 0xf8, 0x65, 0x0f, 0x8c, 0x15, 0x03, 0x00, 0x00, 0x83, 0xf8, 0x67, 0x7e, 0xcf, 0x83, 0xf8, 0x69, 0x0f, 0x84, 0xf1, 0x00, 0x00, 0x00, 0x83, 0xf8, 0x6e, 0x0f, 0x84, 0xb5, 0x00, 0x00, 0x00, 0x83, 0xf8, 0x6f, 0x0f, 0x84, 0x9a, 0x00, 0x00, 0x00, 0x83, 0xf8, 0x70, 0x74, 0x65, 0x83, 0xf8, 0x73, 0x0f, 0x84, 0xf5, 0xfe, 0xff, 0xff, 0x83, 0xf8, 0x75, 0x0f, 0x84, 0xcc, 0x00, 0x00, 0x00, 0x83, 0xf8, 0x78, 0x0f, 0x85, 0xd5, 0x02, 0x00, 0x00, 0xb8, 0x27, 0x00, 0x00, 0x00, 0xeb, 0x53, 0xff, 0xc8, 0x66, 0x44, 0x39, 0x11, 0x74, 0x09, 0x48, 0x83, 0xc1, 0x02, 0x41, 0x3b, 0xc2, 0x75, 0xef, 0x48, 0x2b, 0xcb, 0x48, 0xd1, 0xf9, 0xeb, 0x21, 0x49, 0x3b, 0xda, 0x48, 0x0f, 0x44, 0x1d, 0x46, 0xf0, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xeb, 0x0a, 0xff, 0xc8, 0x44, 0x38, 0x11, 0x74, 0x08, 0x48, 0xff, 0xc1, 0x41, 0x3b, 0xc2, 0x75, 0xf1, 0x2b, 0xcb, 0x89, 0x4c, 0x24, 0x44, 0xe9, 0x8b, 0x02, 0x00, 0x00, 0x41, 0xbe, 0x10, 0x00, 0x00, 0x00, 0x41, 0x0f, 0xba, 0xec, 0x0f, 0xb8, 0x07, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x60, 0x41, 0xb9, 0x10, 0x00, 0x00, 0x00, 0x45, 0x84, 0xe4, 0x79, 0x60, 0x04, 0x51, 0xc6, 0x44, 0x24, 0x4c, 0x30, 0x41, 0x8d, 0x51, 0xf2, 0x88, 0x44, 0x24, 0x4d, 0xeb, 0x53, 0x41, 0xb9, 0x08, 0x00, 0x00, 0x00, 0x45, 0x84, 0xe4, 0x79, 0x44, 0x41, 0x0f, 0xba, 0xec, 0x09, 0xeb, 0x3d, 0x49, 0x8b, 0x7d, 0x00, 0x49, 0x83, 0xc5, 0x08, 0xe8, 0xa0, 0x3c, 0x00, 0x00, 0x45, 0x33, 0xd2, 0x41, 0x3b, 0xc2, 0x0f, 0x84, 0x78, 0xfc, 0xff, 0xff, 0x41, 0xf6, 0xc4, 0x20, 0x74, 0x05, 0x66, 0x89, 0x37, 0xeb, 0x02, 0x89, 0x37, 0xc7, 0x44, 0x24, 0x58, 0x01, 0x00, 0x00, 0x00, 0xe9, 0x6c, 0x03, 0x00, 0x00, 0x41, 0x83, 0xcc, 0x40, 0x41, 0xb9, 0x0a, 0x00, 0x00, 0x00, 0x8b, 0x54, 0x24, 0x48, 0x41, 0x0f, 0xba, 0xe4, 0x0f, 0x72, 0x07, 0x41, 0x0f, 0xba, 0xe4, 0x0c, 0x73, 0x0a, 0x4d, 0x8b, 0x45, 0x00, 0x49, 0x83, 0xc5, 0x08, 0xeb, 0x2e, 0x49, 0x83, 0xc5, 0x08, 0x41, 0xf6, 0xc4, 0x20, 0x74, 0x14, 0x41, 0xf6, 0xc4, 0x40, 0x74, 0x07, 0x4d, 0x0f, 0xbf, 0x45, 0xf8, 0xeb, 0x17, 0x45, 0x0f, 0xb7, 0x45, 0xf8, 0xeb, 0x10, 0x41, 0xf6, 0xc4, 0x40, 0x74, 0x06, 0x4d, 0x63, 0x45, 0xf8, 0xeb, 0x04, 0x45, 0x8b, 0x45, 0xf8, 0x41, 0xf6, 0xc4, 0x40, 0x74, 0x0d, 0x4d, 0x3b, 0xc2, 0x7d, 0x08, 0x49, 0xf7, 0xd8, 0x41, 0x0f, 0xba, 0xec, 0x08, 0x41, 0x0f, 0xba, 0xe4, 0x0f, 0x72, 0x0a, 0x41, 0x0f, 0xba, 0xe4, 0x0c, 0x72, 0x03, 0x45, 0x8b, 0xc0, 0x45, 0x3b, 0xf2, 0x7d, 0x08, 0x41, 0xbe, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x0b, 0x41, 0x83, 0xe4, 0xf7, 0x45, 0x3b, 0xf3, 0x45, 0x0f, 0x4f, 0xf3, 0x44, 0x8b, 0x7c, 0x24, 0x60, 0x49, 0x8b, 0xc0, 0x48, 0x8d, 0x9c, 0x24, 0xbf, 0x02, 0x00, 0x00, 0x48, 0xf7, 0xd8, 0x1b, 0xc9, 0x23, 0xca, 0x89, 0x4c, 0x24, 0x48, 0x41, 0x8b, 0xce, 0x41, 0xff, 0xce, 0x41, 0x3b, 0xca, 0x7f, 0x05, 0x4d, 0x3b, 0xc2, 0x74, 0x20, 0x33, 0xd2, 0x49, 0x8b, 0xc0, 0x49, 0x63, 0xc9, 0x48, 0xf7, 0xf1, 0x4c, 0x8b, 0xc0, 0x8d, 0x42, 0x30, 0x83, 0xf8, 0x39, 0x7e, 0x03, 0x41, 0x03, 0xc7, 0x88, 0x03, 0x48, 0xff, 0xcb, 0xeb, 0xd0, 0x48, 0x8d, 0x84, 0x24, 0xbf, 0x02, 0x00, 0x00, 0x41, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x2b, 0xc3, 0x48, 0xff, 0xc3, 0x41, 0x0f, 0xba, 0xe4, 0x09, 0x89, 0x44, 0x24, 0x44, 0x0f, 0x83, 0x19, 0x01, 0x00, 0x00, 0x41, 0x3b, 0xc2, 0x74, 0x09, 0x80, 0x3b, 0x30, 0x0f, 0x84, 0x0b, 0x01, 0x00, 0x00, 0x48, 0xff, 0xcb, 0xff, 0x44, 0x24, 0x44, 0xc6, 0x03, 0x30, 0xe9, 0xfc, 0x00, 0x00, 0x00, 0x75, 0x0e, 0x40, 0x80, 0xfd, 0x67, 0x75, 0x41, 0x41, 0xbe, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x39, 0x45, 0x3b, 0xf3, 0x45, 0x0f, 0x4f, 0xf3, 0x41, 0x81, 0xfe, 0xa3, 0x00, 0x00, 0x00, 0x7e, 0x29, 0x41, 0x8d, 0xbe, 0x5d, 0x01, 0x00, 0x00, 0x48, 0x63, 0xcf, 0xe8, 0x79, 0x0a, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x07, 0x48, 0x8b, 0xd8, 0x8b, 0xf7, 0xeb, 0x06, 0x41, 0xbe, 0xa3, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x0d, 0xe4, 0xfa, 0x00, 0x00, 0x49, 0x83, 0xc5, 0x08, 0x40, 0x0f, 0xbe, 0xfd, 0x48, 0x63, 0xf6, 0x48, 0x89, 0x84, 0x24, 0xa8, 0x00, 0x00, 0x00, 0xe8, 0x50, 0x21, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x78, 0x44, 0x8b, 0xcf, 0x48, 0x89, 0x4c, 0x24, 0x30, 0x8b, 0x4c, 0x24, 0x70, 0x4c, 0x8b, 0xc6, 0x89, 0x4c, 0x24, 0x28, 0x48, 0x8d, 0x8c, 0x24, 0xa8, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd3, 0x44, 0x89, 0x74, 0x24, 0x20, 0xff, 0xd0, 0x41, 0x8b, 0xfc, 0x33, 0xc0, 0x81, 0xe7, 0x80, 0x00, 0x00, 0x00, 0x74, 0x1d, 0x44, 0x3b, 0xf0, 0x75, 0x18, 0x48, 0x8b, 0x0d, 0xa1, 0xfa, 0x00, 0x00, 0xe8, 0x08, 0x21, 0x00, 0x00, 0x48, 0x8d, 0x54, 0x24, 0x78, 0x48, 0x8b, 0xcb, 0xff, 0xd0, 0x33, 0xc0, 0x40, 0x80, 0xfd, 0x67, 0x75, 0x1a, 0x3b, 0xf8, 0x75, 0x16, 0x48, 0x8b, 0x0d, 0x77, 0xfa, 0x00, 0x00, 0xe8, 0xe6, 0x20, 0x00, 0x00, 0x48, 0x8d, 0x54, 0x24, 0x78, 0x48, 0x8b, 0xcb, 0xff, 0xd0, 0x80, 0x3b, 0x2d, 0x75, 0x08, 0x41, 0x0f, 0xba, 0xec, 0x08, 0x48, 0xff, 0xc3, 0x48, 0x8b, 0xcb, 0xe8, 0xc3, 0x39, 0x00, 0x00, 0x45, 0x33, 0xd2, 0x89, 0x44, 0x24, 0x44, 0x44, 0x39, 0x54, 0x24, 0x58, 0x0f, 0x85, 0x4b, 0x01, 0x00, 0x00, 0x41, 0xf6, 0xc4, 0x40, 0x74, 0x31, 0x41, 0x0f, 0xba, 0xe4, 0x08, 0x73, 0x07, 0xc6, 0x44, 0x24, 0x4c, 0x2d, 0xeb, 0x0b, 0x41, 0xf6, 0xc4, 0x01, 0x74, 0x10, 0xc6, 0x44, 0x24, 0x4c, 0x2b, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x89, 0x7c, 0x24, 0x48, 0xeb, 0x11, 0x41, 0xf6, 0xc4, 0x02, 0x74, 0x07, 0xc6, 0x44, 0x24, 0x4c, 0x20, 0xeb, 0xe8, 0x8b, 0x7c, 0x24, 0x48, 0x8b, 0x74, 0x24, 0x54, 0x48, 0x8b, 0x6c, 0x24, 0x68, 0x2b, 0x74, 0x24, 0x44, 0x2b, 0xf7, 0x41, 0xf6, 0xc4, 0x0c, 0x75, 0x11, 0x4c, 0x8d, 0x4c, 0x24, 0x40, 0x4c, 0x8b, 0xc5, 0x8b, 0xd6, 0xb1, 0x20, 0xe8, 0xd4, 0xf7, 0xff, 0xff, 0x4c, 0x8d, 0x4c, 0x24, 0x40, 0x48, 0x8d, 0x4c, 0x24, 0x4c, 0x4c, 0x8b, 0xc5, 0x8b, 0xd7, 0xe8, 0x14, 0xf8, 0xff, 0xff, 0x41, 0xf6, 0xc4, 0x08, 0x74, 0x17, 0x41, 0xf6, 0xc4, 0x04, 0x75, 0x11, 0x4c, 0x8d, 0x4c, 0x24, 0x40, 0x4c, 0x8b, 0xc5, 0x8b, 0xd6, 0xb1, 0x30, 0xe8, 0xa3, 0xf7, 0xff, 0xff, 0x8b, 0x7c, 0x24, 0x44, 0x33, 0xc0, 0x39, 0x44, 0x24, 0x50, 0x74, 0x75, 0x3b, 0xf8, 0x7e, 0x71, 0x48, 0x8b, 0xeb, 0x44, 0x0f, 0xb7, 0x4d, 0x00, 0x48, 0x8d, 0x94, 0x24, 0xc0, 0x02, 0x00, 0x00, 0x48, 0x8d, 0x8c, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x41, 0xb8, 0x06, 0x00, 0x00, 0x00, 0xff, 0xcf, 0x48, 0x83, 0xc5, 0x02, 0xe8, 0xb6, 0x3b, 0x00, 0x00, 0x45, 0x33, 0xd2, 0x41, 0x3b, 0xc2, 0x75, 0x32, 0x8b, 0x94, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x41, 0x3b, 0xd2, 0x74, 0x26, 0x4c, 0x8b, 0x44, 0x24, 0x68, 0x4c, 0x8d, 0x4c, 0x24, 0x40, 0x48, 0x8d, 0x8c, 0x24, 0xc0, 0x02, 0x00, 0x00, 0xe8, 0x93, 0xf7, 0xff, 0xff, 0x45, 0x33, 0xd2, 0x41, 0x3b, 0xfa, 0x75, 0xa7, 0x48, 0x8b, 0x6c, 0x24, 0x68, 0xeb, 0x23, 0x48, 0x8b, 0x6c, 0x24, 0x68, 0x41, 0x8b, 0xc7, 0x89, 0x44, 0x24, 0x40, 0xeb, 0x19, 0x4c, 0x8d, 0x4c, 0x24, 0x40, 0x4c, 0x8b, 0xc5, 0x8b, 0xd7, 0x48, 0x8b, 0xcb, 0xe8, 0x64, 0xf7, 0xff, 0xff, 0x45, 0x33, 0xd2, 0x8b, 0x44, 0x24, 0x40, 0x41, 0x3b, 0xc2, 0x7c, 0x1a, 0x41, 0xf6, 0xc4, 0x04, 0x74, 0x14, 0x4c, 0x8d, 0x4c, 0x24, 0x40, 0x4c, 0x8b, 0xc5, 0x8b, 0xd6, 0xb1, 0x20, 0xe8, 0xed, 0xf6, 0xff, 0xff, 0x45, 0x33, 0xd2, 0x48, 0x8b, 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, 0x49, 0x3b, 0xc2, 0x74, 0x13, 0x48, 0x8b, 0xc8, 0xe8, 0x41, 0x0a, 0x00, 0x00, 0x45, 0x33, 0xd2, 0x4c, 0x89, 0x94, 0x24, 0x98, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xbc, 0x24, 0xb0, 0x00, 0x00, 0x00, 0x8b, 0x74, 0x24, 0x40, 0x8b, 0x54, 0x24, 0x5c, 0x4c, 0x8d, 0x0d, 0x2f, 0xc8, 0xff, 0xff, 0x41, 0xbb, 0x00, 0x02, 0x00, 0x00, 0x40, 0x8a, 0x2f, 0x41, 0x3a, 0xea, 0x0f, 0x85, 0x24, 0xf9, 0xff, 0xff, 0x44, 0x38, 0x94, 0x24, 0x90, 0x00, 0x00, 0x00, 0x74, 0x0f, 0x48, 0x8b, 0x8c, 0x24, 0x88, 0x00, 0x00, 0x00, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x8b, 0xc6, 0x48, 0x8b, 0x8c, 0x24, 0xc8, 0x02, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, 0x32, 0xeb, 0xff, 0xff, 0x48, 0x8b, 0x9c, 0x24, 0x20, 0x03, 0x00, 0x00, 0x48, 0x81, 0xc4, 0xd0, 0x02, 0x00, 0x00, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0x5d, 0xc3, 0x40, 0x80, 0xfd, 0x49, 0x74, 0x3a, 0x40, 0x80, 0xfd, 0x68, 0x74, 0x2b, 0x40, 0x80, 0xfd, 0x6c, 0x74, 0x0d, 0x40, 0x80, 0xfd, 0x77, 0x75, 0x96, 0x41, 0x0f, 0xba, 0xec, 0x0b, 0xeb, 0x8f, 0x80, 0x3f, 0x6c, 0x75, 0x0a, 0x48, 0xff, 0xc7, 0x41, 0x0f, 0xba, 0xec, 0x0c, 0xeb, 0x80, 0x41, 0x83, 0xcc, 0x10, 0xe9, 0x77, 0xff, 0xff, 0xff, 0x41, 0x83, 0xcc, 0x20, 0xe9, 0x6e, 0xff, 0xff, 0xff, 0x8a, 0x07, 0x41, 0x0f, 0xba, 0xec, 0x0f, 0x3c, 0x36, 0x75, 0x14, 0x80, 0x7f, 0x01, 0x34, 0x75, 0x0e, 0x48, 0x83, 0xc7, 0x02, 0x41, 0x0f, 0xba, 0xec, 0x0f, 0xe9, 0x4f, 0xff, 0xff, 0xff, 0x3c, 0x33, 0x75, 0x14, 0x80, 0x7f, 0x01, 0x32, 0x75, 0x0e, 0x48, 0x83, 0xc7, 0x02, 0x41, 0x0f, 0xba, 0xf4, 0x0f, 0xe9, 0x37, 0xff, 0xff, 0xff, 0x3c, 0x64, 0x0f, 0x84, 0x2f, 0xff, 0xff, 0xff, 0x3c, 0x69, 0x0f, 0x84, 0x27, 0xff, 0xff, 0xff, 0x3c, 0x6f, 0x0f, 0x84, 0x1f, 0xff, 0xff, 0xff, 0x3c, 0x75, 0x0f, 0x84, 0x17, 0xff, 0xff, 0xff, 0x3c, 0x78, 0x0f, 0x84, 0x0f, 0xff, 0xff, 0xff, 0x3c, 0x58, 0x0f, 0x84, 0x07, 0xff, 0xff, 0xff, 0x44, 0x89, 0x54, 0x24, 0x5c, 0x48, 0x8d, 0x54, 0x24, 0x78, 0x40, 0x0f, 0xb6, 0xcd, 0x44, 0x89, 0x54, 0x24, 0x50, 0xe8, 0x6c, 0x36, 0x00, 0x00, 0x33, 0xf6, 0x3b, 0xc6, 0x74, 0x21, 0x48, 0x8b, 0x54, 0x24, 0x68, 0x4c, 0x8d, 0x44, 0x24, 0x40, 0x40, 0x8a, 0xcd, 0xe8, 0x3c, 0xf5, 0xff, 0xff, 0x40, 0x8a, 0x2f, 0x48, 0xff, 0xc7, 0x40, 0x3a, 0xee, 0x0f, 0x84, 0x02, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x54, 0x24, 0x68, 0x4c, 0x8d, 0x44, 0x24, 0x40, 0x40, 0x8a, 0xcd, 0xe8, 0x1b, 0xf5, 0xff, 0xff, 0x45, 0x33, 0xd2, 0xe9, 0x99, 0xfe, 0xff, 0xff, 0x40, 0x80, 0xfd, 0x2a, 0x75, 0x19, 0x45, 0x8b, 0x75, 0x00, 0x49, 0x83, 0xc5, 0x08, 0x45, 0x3b, 0xf2, 0x0f, 0x8d, 0x97, 0xfe, 0xff, 0xff, 0x45, 0x8b, 0xf7, 0xe9, 0x8f, 0xfe, 0xff, 0xff, 0x43, 0x8d, 0x0c, 0xb6, 0x40, 0x0f, 0xbe, 0xc5, 0x44, 0x8d, 0x74, 0x48, 0xd0, 0xe9, 0x7d, 0xfe, 0xff, 0xff, 0x45, 0x8b, 0xf2, 0xe9, 0x75, 0xfe, 0xff, 0xff, 0x40, 0x80, 0xfd, 0x2a, 0x75, 0x1d, 0x41, 0x8b, 0x45, 0x00, 0x49, 0x83, 0xc5, 0x08, 0x41, 0x3b, 0xc2, 0x89, 0x44, 0x24, 0x54, 0x0f, 0x8d, 0x5a, 0xfe, 0xff, 0xff, 0x41, 0x83, 0xcc, 0x04, 0xf7, 0xd8, 0xeb, 0x0f, 0x8b, 0x44, 0x24, 0x54, 0x8d, 0x0c, 0x80, 0x40, 0x0f, 0xbe, 0xc5, 0x8d, 0x44, 0x48, 0xd0, 0x89, 0x44, 0x24, 0x54, 0xe9, 0x3a, 0xfe, 0xff, 0xff, 0x40, 0x80, 0xfd, 0x20, 0x74, 0x41, 0x40, 0x80, 0xfd, 0x23, 0x74, 0x31, 0x40, 0x80, 0xfd, 0x2b, 0x74, 0x22, 0x40, 0x80, 0xfd, 0x2d, 0x74, 0x13, 0x40, 0x80, 0xfd, 0x30, 0x0f, 0x85, 0x18, 0xfe, 0xff, 0xff, 0x41, 0x83, 0xcc, 0x08, 0xe9, 0x0f, 0xfe, 0xff, 0xff, 0x41, 0x83, 0xcc, 0x04, 0xe9, 0x06, 0xfe, 0xff, 0xff, 0x41, 0x83, 0xcc, 0x01, 0xe9, 0xfd, 0xfd, 0xff, 0xff, 0x41, 0x0f, 0xba, 0xec, 0x07, 0xe9, 0xf3, 0xfd, 0xff, 0xff, 0x41, 0x83, 0xcc, 0x02, 0xe9, 0xea, 0xfd, 0xff, 0xff, 0x44, 0x89, 0x54, 0x24, 0x70, 0x44, 0x89, 0x54, 0x24, 0x58, 0x44, 0x89, 0x54, 0x24, 0x54, 0x44, 0x89, 0x54, 0x24, 0x48, 0x45, 0x8b, 0xe2, 0x45, 0x8b, 0xf7, 0x44, 0x89, 0x54, 0x24, 0x50, 0xe9, 0xc6, 0xfd, 0xff, 0xff, 0xe8, 0x52, 0x05, 0x00, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x48, 0x89, 0x74, 0x24, 0x20, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x68, 0x04, 0x00, 0x00, 0x40, 0x38, 0xb4, 0x24, 0x90, 0x00, 0x00, 0x00, 0xe9, 0x77, 0xf6, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x70, 0x10, 0x48, 0x89, 0x78, 0x18, 0x4c, 0x89, 0x60, 0x20, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x81, 0xec, 0x90, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x20, 0xff, 0x15, 0x1d, 0xb6, 0x00, 0x00, 0x90, 0xba, 0x58, 0x00, 0x00, 0x00, 0x44, 0x8d, 0x62, 0xc8, 0x49, 0x8b, 0xcc, 0xe8, 0xdf, 0x05, 0x00, 0x00, 0x4c, 0x8b, 0xd8, 0x45, 0x33, 0xff, 0x49, 0x3b, 0xc7, 0x75, 0x08, 0x83, 0xc8, 0xff, 0xe9, 0x7b, 0x02, 0x00, 0x00, 0x48, 0x89, 0x05, 0xe9, 0x08, 0x01, 0x00, 0x41, 0x8b, 0xcc, 0x89, 0x0d, 0xc8, 0x08, 0x01, 0x00, 0x48, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x4c, 0x3b, 0xd8, 0x73, 0x43, 0x45, 0x88, 0x7b, 0x08, 0x49, 0x83, 0x0b, 0xff, 0x41, 0xc6, 0x43, 0x09, 0x0a, 0x45, 0x89, 0x7b, 0x0c, 0x45, 0x88, 0x7b, 0x38, 0x41, 0xc6, 0x43, 0x39, 0x0a, 0x41, 0xc6, 0x43, 0x3a, 0x0a, 0x45, 0x89, 0x7b, 0x50, 0x45, 0x88, 0x7b, 0x4c, 0x49, 0x83, 0xc3, 0x58, 0x48, 0x8b, 0x05, 0xa3, 0x08, 0x01, 0x00, 0x48, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x4c, 0x3b, 0xd8, 0x72, 0xc3, 0x8b, 0x0d, 0x7a, 0x08, 0x01, 0x00, 0x66, 0x44, 0x39, 0x7c, 0x24, 0x62, 0x0f, 0x84, 0x49, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x68, 0x49, 0x3b, 0xc7, 0x0f, 0x84, 0x3b, 0x01, 0x00, 0x00, 0x4c, 0x8d, 0x68, 0x04, 0x48, 0x63, 0x30, 0x49, 0x03, 0xf5, 0xbb, 0x00, 0x08, 0x00, 0x00, 0x39, 0x18, 0x0f, 0x4c, 0x18, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x3b, 0xcb, 0x0f, 0x8d, 0x8d, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x35, 0x50, 0x08, 0x01, 0x00, 0xba, 0x58, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xcc, 0xe8, 0x1f, 0x05, 0x00, 0x00, 0x4c, 0x8b, 0xd8, 0x49, 0x3b, 0xc7, 0x74, 0x69, 0x49, 0x89, 0x04, 0xfe, 0x8b, 0x05, 0x19, 0x08, 0x01, 0x00, 0x41, 0x03, 0xc4, 0x89, 0x05, 0x10, 0x08, 0x01, 0x00, 0x49, 0x8d, 0x8b, 0x00, 0x0b, 0x00, 0x00, 0x4c, 0x3b, 0xd9, 0x73, 0x41, 0x45, 0x88, 0x7b, 0x08, 0x49, 0x83, 0x0b, 0xff, 0x41, 0xc6, 0x43, 0x09, 0x0a, 0x45, 0x89, 0x7b, 0x0c, 0x41, 0x80, 0x63, 0x38, 0x80, 0x41, 0xc6, 0x43, 0x39, 0x0a, 0x41, 0xc6, 0x43, 0x3a, 0x0a, 0x45, 0x89, 0x7b, 0x50, 0x45, 0x88, 0x7b, 0x4c, 0x49, 0x83, 0xc3, 0x58, 0x49, 0x8b, 0x04, 0xfe, 0x48, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x4c, 0x3b, 0xd8, 0x72, 0xc5, 0x8b, 0x05, 0xc3, 0x07, 0x01, 0x00, 0x48, 0xff, 0xc7, 0x3b, 0xc3, 0x7c, 0x84, 0xeb, 0x0f, 0x8b, 0x1d, 0xb4, 0x07, 0x01, 0x00, 0xeb, 0x07, 0x4c, 0x8d, 0x35, 0xc3, 0x07, 0x01, 0x00, 0x41, 0x8b, 0xff, 0x41, 0x3b, 0xdf, 0x7e, 0x7e, 0x48, 0x83, 0x3e, 0xff, 0x74, 0x6b, 0x48, 0x83, 0x3e, 0xfe, 0x74, 0x65, 0x41, 0xf6, 0x45, 0x00, 0x01, 0x74, 0x5e, 0x41, 0xf6, 0x45, 0x00, 0x08, 0x75, 0x0e, 0x48, 0x8b, 0x0e, 0xff, 0x15, 0x98, 0xb4, 0x00, 0x00, 0x41, 0x3b, 0xc7, 0x74, 0x49, 0x4c, 0x63, 0xe7, 0x49, 0x8b, 0xc4, 0x48, 0xc1, 0xf8, 0x05, 0x41, 0x83, 0xe4, 0x1f, 0x4d, 0x6b, 0xe4, 0x58, 0x4d, 0x03, 0x24, 0xc6, 0x48, 0x8b, 0x06, 0x49, 0x89, 0x04, 0x24, 0x41, 0x8a, 0x45, 0x00, 0x41, 0x88, 0x44, 0x24, 0x08, 0x49, 0x8d, 0x4c, 0x24, 0x10, 0xba, 0xa0, 0x0f, 0x00, 0x00, 0xe8, 0xce, 0x2a, 0x00, 0x00, 0x41, 0x3b, 0xc7, 0x74, 0x07, 0x41, 0xff, 0x44, 0x24, 0x0c, 0xeb, 0x08, 0x83, 0xc8, 0xff, 0xe9, 0xd5, 0x00, 0x00, 0x00, 0xff, 0xc7, 0x49, 0xff, 0xc5, 0x48, 0x83, 0xc6, 0x08, 0x3b, 0xfb, 0x7c, 0x82, 0x45, 0x8b, 0xe7, 0x49, 0x8b, 0xff, 0x48, 0x8b, 0xdf, 0x48, 0x6b, 0xdb, 0x58, 0x48, 0x03, 0x1d, 0x29, 0x07, 0x01, 0x00, 0x48, 0x83, 0x3b, 0xff, 0x74, 0x0c, 0x48, 0x83, 0x3b, 0xfe, 0x74, 0x06, 0x80, 0x4b, 0x08, 0x80, 0xeb, 0x7f, 0xc6, 0x43, 0x08, 0x81, 0x41, 0x8d, 0x44, 0x24, 0xff, 0xf7, 0xd8, 0x1b, 0xc9, 0x83, 0xc1, 0xf5, 0xb8, 0xf6, 0xff, 0xff, 0xff, 0x45, 0x3b, 0xe7, 0x0f, 0x44, 0xc8, 0xff, 0x15, 0xee, 0xb3, 0x00, 0x00, 0x48, 0x8b, 0xf0, 0x48, 0x83, 0xf8, 0xff, 0x74, 0x4a, 0x49, 0x3b, 0xc7, 0x74, 0x45, 0x48, 0x8b, 0xc8, 0xff, 0x15, 0xdf, 0xb3, 0x00, 0x00, 0x41, 0x3b, 0xc7, 0x74, 0x37, 0x48, 0x89, 0x33, 0x0f, 0xb6, 0xc0, 0x83, 0xf8, 0x02, 0x75, 0x06, 0x80, 0x4b, 0x08, 0x40, 0xeb, 0x09, 0x83, 0xf8, 0x03, 0x75, 0x04, 0x80, 0x4b, 0x08, 0x08, 0x48, 0x8d, 0x4b, 0x10, 0xba, 0xa0, 0x0f, 0x00, 0x00, 0xe8, 0x22, 0x2a, 0x00, 0x00, 0x41, 0x3b, 0xc7, 0x74, 0x05, 0xff, 0x43, 0x0c, 0xeb, 0x10, 0x83, 0xc8, 0xff, 0xeb, 0x2e, 0x80, 0x4b, 0x08, 0x40, 0x48, 0xc7, 0x03, 0xfe, 0xff, 0xff, 0xff, 0x41, 0xff, 0xc4, 0x48, 0xff, 0xc7, 0x48, 0x83, 0xff, 0x03, 0x0f, 0x8c, 0x51, 0xff, 0xff, 0xff, 0x8b, 0x0d, 0x6a, 0x06, 0x01, 0x00, 0xff, 0x15, 0x6c, 0xb3, 0x00, 0x00, 0x33, 0xc0, 0xeb, 0x03, 0x83, 0xc8, 0xff, 0x4c, 0x8d, 0x9c, 0x24, 0x90, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x5b, 0x20, 0x49, 0x8b, 0x73, 0x28, 0x49, 0x8b, 0x7b, 0x30, 0x4d, 0x8b, 0x63, 0x38, 0x49, 0x8b, 0xe3, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x38, 0x48, 0x85, 0xc9, 0x75, 0x25, 0xe8, 0x2a, 0x02, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x3f, 0x01, 0x00, 0x00, 0x83, 0xc8, 0xff, 0xeb, 0x03, 0x8b, 0x41, 0x1c, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x0d, 0x59, 0xf8, 0x00, 0x00, 0xc3, 0x40, 0x53, 0x48, 0x81, 0xec, 0xe0, 0x05, 0x00, 0x00, 0x83, 0x64, 0x24, 0x70, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x74, 0x33, 0xd2, 0x41, 0xb8, 0x94, 0x00, 0x00, 0x00, 0xe8, 0x50, 0xdf, 0xff, 0xff, 0x4c, 0x8d, 0x5c, 0x24, 0x70, 0x48, 0x8d, 0x84, 0x24, 0x10, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x8c, 0x24, 0x10, 0x01, 0x00, 0x00, 0x4c, 0x89, 0x5c, 0x24, 0x48, 0x48, 0x89, 0x44, 0x24, 0x50, 0xff, 0x15, 0x1b, 0xb3, 0x00, 0x00, 0x48, 0x8b, 0x9c, 0x24, 0x08, 0x02, 0x00, 0x00, 0x48, 0x8d, 0x54, 0x24, 0x40, 0x48, 0x8b, 0xcb, 0x45, 0x33, 0xc0, 0xe8, 0x71, 0x7f, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x3b, 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, 0x48, 0x8b, 0x54, 0x24, 0x40, 0x48, 0x8d, 0x4c, 0x24, 0x60, 0x48, 0x89, 0x4c, 0x24, 0x30, 0x48, 0x8d, 0x4c, 0x24, 0x58, 0x4c, 0x8b, 0xc8, 0x48, 0x89, 0x4c, 0x24, 0x28, 0x48, 0x8d, 0x8c, 0x24, 0x10, 0x01, 0x00, 0x00, 0x4c, 0x8b, 0xc3, 0x48, 0x89, 0x4c, 0x24, 0x20, 0x33, 0xc9, 0xe8, 0x2d, 0x7f, 0x00, 0x00, 0xeb, 0x20, 0x48, 0x8b, 0x84, 0x24, 0xe8, 0x05, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0x08, 0x02, 0x00, 0x00, 0x48, 0x8d, 0x84, 0x24, 0xe8, 0x05, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0xa8, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x84, 0x24, 0xe8, 0x05, 0x00, 0x00, 0xc7, 0x44, 0x24, 0x70, 0x17, 0x04, 0x00, 0xc0, 0xc7, 0x44, 0x24, 0x74, 0x01, 0x00, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0x80, 0x00, 0x00, 0x00, 0xff, 0x15, 0x65, 0xb2, 0x00, 0x00, 0x33, 0xc9, 0x8b, 0xd8, 0xff, 0x15, 0x53, 0xb2, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x48, 0xff, 0x15, 0x40, 0xb2, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x0c, 0x85, 0xdb, 0x75, 0x08, 0x8d, 0x48, 0x02, 0xe8, 0x6c, 0x34, 0x00, 0x00, 0xff, 0x15, 0x22, 0xb2, 0x00, 0x00, 0xba, 0x17, 0x04, 0x00, 0xc0, 0x48, 0x8b, 0xc8, 0xff, 0x15, 0x0c, 0xb2, 0x00, 0x00, 0x48, 0x81, 0xc4, 0xe0, 0x05, 0x00, 0x00, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x30, 0x48, 0x8b, 0xe9, 0x48, 0x8b, 0x0d, 0x12, 0xf7, 0x00, 0x00, 0x41, 0x8b, 0xd9, 0x49, 0x8b, 0xf8, 0x48, 0x8b, 0xf2, 0xe8, 0x40, 0x18, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x1a, 0x4c, 0x8b, 0x54, 0x24, 0x60, 0x44, 0x8b, 0xcb, 0x4c, 0x8b, 0xc7, 0x48, 0x8b, 0xd6, 0x48, 0x8b, 0xcd, 0x4c, 0x89, 0x54, 0x24, 0x20, 0xff, 0xd0, 0xeb, 0x25, 0xb9, 0x02, 0x00, 0x00, 0x00, 0xe8, 0xf7, 0x33, 0x00, 0x00, 0x4c, 0x8b, 0x5c, 0x24, 0x60, 0x44, 0x8b, 0xcb, 0x4c, 0x8b, 0xc7, 0x48, 0x8b, 0xd6, 0x48, 0x8b, 0xcd, 0x4c, 0x89, 0x5c, 0x24, 0x20, 0xe8, 0x68, 0xfe, 0xff, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x6c, 0x24, 0x48, 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x83, 0xc4, 0x30, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x4c, 0x8d, 0x0d, 0x29, 0xe5, 0x00, 0x00, 0x33, 0xc0, 0x49, 0x8b, 0xd1, 0x44, 0x8d, 0x40, 0x08, 0x3b, 0x0a, 0x74, 0x2b, 0xff, 0xc0, 0x49, 0x03, 0xd0, 0x83, 0xf8, 0x2d, 0x72, 0xf2, 0x8d, 0x41, 0xed, 0x83, 0xf8, 0x11, 0x77, 0x06, 0xb8, 0x0d, 0x00, 0x00, 0x00, 0xc3, 0x81, 0xc1, 0x44, 0xff, 0xff, 0xff, 0xb8, 0x16, 0x00, 0x00, 0x00, 0x83, 0xf9, 0x0e, 0x41, 0x0f, 0x46, 0xc0, 0xc3, 0x48, 0x98, 0x41, 0x8b, 0x44, 0xc1, 0x04, 0xc3, 0xcc, 0x48, 0x83, 0xec, 0x28, 0xe8, 0x77, 0x18, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x75, 0x09, 0x48, 0x8d, 0x05, 0x3b, 0xe6, 0x00, 0x00, 0xeb, 0x04, 0x48, 0x83, 0xc0, 0x10, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x83, 0xec, 0x28, 0xe8, 0x57, 0x18, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x75, 0x09, 0x48, 0x8d, 0x05, 0x1f, 0xe6, 0x00, 0x00, 0xeb, 0x04, 0x48, 0x83, 0xc0, 0x14, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x8b, 0xd9, 0xe8, 0x33, 0x18, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x75, 0x09, 0x48, 0x8d, 0x05, 0xfb, 0xe5, 0x00, 0x00, 0xeb, 0x04, 0x48, 0x83, 0xc0, 0x14, 0x89, 0x18, 0xe8, 0x1a, 0x18, 0x00, 0x00, 0x4c, 0x8d, 0x15, 0xe3, 0xe5, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x04, 0x4c, 0x8d, 0x50, 0x10, 0x8b, 0xcb, 0xe8, 0x3b, 0xff, 0xff, 0xff, 0x41, 0x89, 0x02, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, 0x33, 0xff, 0x48, 0x8b, 0xf1, 0x83, 0xcd, 0xff, 0x48, 0x8b, 0xce, 0xe8, 0xd8, 0x32, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x75, 0x28, 0x39, 0x05, 0xae, 0xf5, 0x00, 0x00, 0x76, 0x20, 0x8b, 0xcf, 0xff, 0x15, 0x1c, 0xb0, 0x00, 0x00, 0x44, 0x8d, 0x9f, 0xe8, 0x03, 0x00, 0x00, 0x44, 0x3b, 0x1d, 0x96, 0xf5, 0x00, 0x00, 0x41, 0x8b, 0xfb, 0x0f, 0x47, 0xfd, 0x3b, 0xfd, 0x75, 0xc8, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, 0x54, 0x48, 0x83, 0xec, 0x20, 0x33, 0xff, 0x48, 0x8b, 0xf2, 0x48, 0x8b, 0xe9, 0x41, 0x83, 0xcc, 0xff, 0x45, 0x33, 0xc0, 0x48, 0x8b, 0xd6, 0x48, 0x8b, 0xcd, 0xe8, 0x69, 0x06, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x75, 0x2a, 0x39, 0x05, 0x33, 0xf5, 0x00, 0x00, 0x76, 0x22, 0x8b, 0xcf, 0xff, 0x15, 0xa1, 0xaf, 0x00, 0x00, 0x44, 0x8d, 0x9f, 0xe8, 0x03, 0x00, 0x00, 0x44, 0x3b, 0x1d, 0x1b, 0xf5, 0x00, 0x00, 0x41, 0x8b, 0xfb, 0x41, 0x0f, 0x47, 0xfc, 0x41, 0x3b, 0xfc, 0x75, 0xc0, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x8b, 0x7c, 0x24, 0x48, 0x48, 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5c, 0xc3, 0xcc, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, 0x54, 0x48, 0x83, 0xec, 0x20, 0x33, 0xf6, 0x48, 0x8b, 0xfa, 0x48, 0x8b, 0xe9, 0x41, 0x83, 0xcc, 0xff, 0x48, 0x8b, 0xd7, 0x48, 0x8b, 0xcd, 0xe8, 0x94, 0x32, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x75, 0x2f, 0x48, 0x85, 0xff, 0x74, 0x2a, 0x39, 0x05, 0xad, 0xf4, 0x00, 0x00, 0x76, 0x22, 0x8b, 0xce, 0xff, 0x15, 0x1b, 0xaf, 0x00, 0x00, 0x44, 0x8d, 0x9e, 0xe8, 0x03, 0x00, 0x00, 0x44, 0x3b, 0x1d, 0x95, 0xf4, 0x00, 0x00, 0x41, 0x8b, 0xf3, 0x41, 0x0f, 0x47, 0xf4, 0x41, 0x3b, 0xf4, 0x75, 0xbe, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x8b, 0x7c, 0x24, 0x48, 0x48, 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5c, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x41, 0x54, 0x41, 0x55, 0x48, 0x83, 0xec, 0x20, 0x33, 0xf6, 0x49, 0x8b, 0xf8, 0x48, 0x8b, 0xea, 0x41, 0x83, 0xcd, 0xff, 0x4c, 0x8b, 0xe1, 0x4c, 0x8b, 0xc7, 0x48, 0x8b, 0xd5, 0x49, 0x8b, 0xcc, 0xe8, 0xdb, 0x32, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x75, 0x2f, 0x48, 0x85, 0xff, 0x74, 0x2a, 0x39, 0x05, 0x20, 0xf4, 0x00, 0x00, 0x76, 0x22, 0x8b, 0xce, 0xff, 0x15, 0x8e, 0xae, 0x00, 0x00, 0x44, 0x8d, 0x9e, 0xe8, 0x03, 0x00, 0x00, 0x44, 0x3b, 0x1d, 0x08, 0xf4, 0x00, 0x00, 0x41, 0x8b, 0xf3, 0x41, 0x0f, 0x47, 0xf5, 0x41, 0x3b, 0xf5, 0x75, 0xbb, 0x48, 0x8b, 0x6c, 0x24, 0x48, 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0xc3, 0x48, 0x85, 0xc9, 0x74, 0x37, 0x53, 0x48, 0x83, 0xec, 0x20, 0x4c, 0x8b, 0xc1, 0x48, 0x8b, 0x0d, 0x4c, 0x00, 0x01, 0x00, 0x33, 0xd2, 0xff, 0x15, 0xd4, 0xae, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x17, 0xe8, 0x53, 0xfd, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0xff, 0x15, 0xba, 0xae, 0x00, 0x00, 0x8b, 0xc8, 0xe8, 0xfb, 0xfc, 0xff, 0xff, 0x89, 0x03, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x41, 0x54, 0x48, 0x83, 0xec, 0x30, 0x33, 0xf6, 0x8d, 0x4e, 0x01, 0xe8, 0x6a, 0x04, 0x00, 0x00, 0x90, 0x8d, 0x5e, 0x03, 0x89, 0x5c, 0x24, 0x20, 0x3b, 0x1d, 0x88, 0x13, 0x01, 0x00, 0x7d, 0x69, 0x4c, 0x63, 0xe3, 0x48, 0x8b, 0x05, 0x5c, 0x03, 0x01, 0x00, 0x4a, 0x83, 0x3c, 0xe0, 0x00, 0x74, 0x50, 0x4a, 0x8b, 0x0c, 0xe0, 0xf6, 0x41, 0x18, 0x83, 0x74, 0x10, 0xe8, 0x26, 0x33, 0x00, 0x00, 0x83, 0xf8, 0xff, 0x74, 0x06, 0xff, 0xc6, 0x89, 0x74, 0x24, 0x24, 0x83, 0xfb, 0x14, 0x7c, 0x31, 0x48, 0x8b, 0x05, 0x2f, 0x03, 0x01, 0x00, 0x4a, 0x8b, 0x0c, 0xe0, 0x48, 0x83, 0xc1, 0x30, 0xff, 0x15, 0xf1, 0xad, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x1a, 0x03, 0x01, 0x00, 0x4a, 0x8b, 0x0c, 0xe1, 0xe8, 0x41, 0xff, 0xff, 0xff, 0x4c, 0x8b, 0x1d, 0x0a, 0x03, 0x01, 0x00, 0x4b, 0x83, 0x24, 0xe3, 0x00, 0xff, 0xc3, 0x89, 0x5c, 0x24, 0x20, 0xeb, 0x8f, 0xb9, 0x01, 0x00, 0x00, 0x00, 0xe8, 0xe7, 0x02, 0x00, 0x00, 0x8b, 0xc6, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x74, 0x24, 0x48, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5c, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x8b, 0x41, 0x18, 0x33, 0xf6, 0x48, 0x8b, 0xd9, 0x24, 0x03, 0x3c, 0x02, 0x75, 0x3f, 0xf7, 0x41, 0x18, 0x08, 0x01, 0x00, 0x00, 0x74, 0x36, 0x8b, 0x39, 0x2b, 0x79, 0x10, 0x85, 0xff, 0x7e, 0x2d, 0xe8, 0x1c, 0xfa, 0xff, 0xff, 0x48, 0x8b, 0x53, 0x10, 0x44, 0x8b, 0xc7, 0x8b, 0xc8, 0xe8, 0x56, 0x3a, 0x00, 0x00, 0x3b, 0xc7, 0x75, 0x0f, 0x8b, 0x43, 0x18, 0x84, 0xc0, 0x79, 0x0f, 0x83, 0xe0, 0xfd, 0x89, 0x43, 0x18, 0xeb, 0x07, 0x83, 0x4b, 0x18, 0x20, 0x83, 0xce, 0xff, 0x48, 0x8b, 0x4b, 0x10, 0x83, 0x63, 0x08, 0x00, 0x8b, 0xc6, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x89, 0x0b, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x48, 0x85, 0xc9, 0x75, 0x07, 0xe8, 0x35, 0x00, 0x00, 0x00, 0xeb, 0x2c, 0xe8, 0x6a, 0xff, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x05, 0x83, 0xc8, 0xff, 0xeb, 0x1e, 0x0f, 0xba, 0x63, 0x18, 0x0e, 0x73, 0x15, 0x48, 0x8b, 0xcb, 0xe8, 0xa2, 0xf9, 0xff, 0xff, 0x8b, 0xc8, 0xe8, 0x17, 0x3b, 0x00, 0x00, 0xf7, 0xd8, 0x1b, 0xc0, 0xeb, 0x02, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0x48, 0x89, 0x74, 0x24, 0x08, 0x48, 0x89, 0x7c, 0x24, 0x10, 0x4c, 0x89, 0x64, 0x24, 0x18, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x30, 0x44, 0x8b, 0xf1, 0x45, 0x33, 0xe4, 0x33, 0xf6, 0x8d, 0x4e, 0x01, 0xe8, 0xe7, 0x02, 0x00, 0x00, 0x90, 0x33, 0xff, 0x89, 0x7c, 0x24, 0x20, 0x41, 0x83, 0xcf, 0xff, 0x3b, 0x3d, 0x02, 0x12, 0x01, 0x00, 0x0f, 0x8d, 0x86, 0x00, 0x00, 0x00, 0x4c, 0x63, 0xef, 0x48, 0x8b, 0x05, 0xd2, 0x01, 0x01, 0x00, 0x4a, 0x83, 0x3c, 0xe8, 0x00, 0x74, 0x6a, 0x4a, 0x8b, 0x14, 0xe8, 0xf6, 0x42, 0x18, 0x83, 0x74, 0x60, 0x8b, 0xcf, 0xe8, 0xce, 0xd7, 0xff, 0xff, 0x90, 0x48, 0x8b, 0x05, 0xb2, 0x01, 0x01, 0x00, 0x4a, 0x8b, 0x0c, 0xe8, 0xf6, 0x41, 0x18, 0x83, 0x74, 0x35, 0x41, 0x83, 0xfe, 0x01, 0x75, 0x14, 0xe8, 0x39, 0xff, 0xff, 0xff, 0x41, 0x3b, 0xc7, 0x74, 0x25, 0x41, 0xff, 0xc4, 0x44, 0x89, 0x64, 0x24, 0x24, 0xeb, 0x1b, 0x45, 0x85, 0xf6, 0x75, 0x16, 0xf6, 0x41, 0x18, 0x02, 0x74, 0x10, 0xe8, 0x1a, 0xff, 0xff, 0xff, 0x41, 0x3b, 0xc7, 0x41, 0x0f, 0x44, 0xf7, 0x89, 0x74, 0x24, 0x28, 0x48, 0x8b, 0x15, 0x6c, 0x01, 0x01, 0x00, 0x4a, 0x8b, 0x14, 0xea, 0x8b, 0xcf, 0xe8, 0xfd, 0xd7, 0xff, 0xff, 0xff, 0xc7, 0x89, 0x7c, 0x24, 0x20, 0xe9, 0x6e, 0xff, 0xff, 0xff, 0xb9, 0x01, 0x00, 0x00, 0x00, 0xe8, 0x40, 0x01, 0x00, 0x00, 0x41, 0x83, 0xfe, 0x01, 0x41, 0x0f, 0x44, 0xf4, 0x8b, 0xc6, 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x8b, 0x7c, 0x24, 0x58, 0x4c, 0x8b, 0x64, 0x24, 0x60, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0xc3, 0xb9, 0x01, 0x00, 0x00, 0x00, 0xe9, 0x02, 0xff, 0xff, 0xff, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x48, 0x89, 0x7c, 0x24, 0x18, 0x41, 0x54, 0x48, 0x83, 0xec, 0x20, 0x4c, 0x8d, 0x25, 0x00, 0xe1, 0x00, 0x00, 0x33, 0xf6, 0x33, 0xff, 0x49, 0x8b, 0xdc, 0x83, 0x7b, 0x08, 0x01, 0x75, 0x25, 0x48, 0x63, 0xc6, 0xba, 0xa0, 0x0f, 0x00, 0x00, 0xff, 0xc6, 0x48, 0x8d, 0x0c, 0x80, 0x48, 0x8d, 0x05, 0xfe, 0xf0, 0x00, 0x00, 0x48, 0x8d, 0x0c, 0xc8, 0x48, 0x89, 0x0b, 0xe8, 0x02, 0x22, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x2d, 0x48, 0x8d, 0x05, 0x07, 0xe3, 0x00, 0x00, 0x48, 0x83, 0xc3, 0x10, 0xff, 0xc7, 0x48, 0x3b, 0xd8, 0x7c, 0xc3, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x8b, 0x7c, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5c, 0xc3, 0x48, 0x63, 0xc7, 0x48, 0x03, 0xc0, 0x49, 0x83, 0x24, 0xc4, 0x00, 0x33, 0xc0, 0xeb, 0xdb, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8d, 0x1d, 0x75, 0xe0, 0x00, 0x00, 0x48, 0x8d, 0x2d, 0xae, 0xe2, 0x00, 0x00, 0x48, 0x8b, 0xfb, 0x48, 0x8b, 0x37, 0x48, 0x85, 0xf6, 0x74, 0x1b, 0x83, 0x7f, 0x08, 0x01, 0x74, 0x15, 0x48, 0x8b, 0xce, 0xff, 0x15, 0x24, 0xab, 0x00, 0x00, 0x48, 0x8b, 0xce, 0xe8, 0x7c, 0xfc, 0xff, 0xff, 0x48, 0x83, 0x27, 0x00, 0x48, 0x83, 0xc7, 0x10, 0x48, 0x3b, 0xfd, 0x7c, 0xd4, 0x48, 0x8b, 0x0b, 0x48, 0x85, 0xc9, 0x74, 0x0c, 0x83, 0x7b, 0x08, 0x01, 0x75, 0x06, 0xff, 0x15, 0xfb, 0xaa, 0x00, 0x00, 0x48, 0x83, 0xc3, 0x10, 0x48, 0x3b, 0xdd, 0x7c, 0xe3, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0x48, 0x63, 0xc9, 0x48, 0x8d, 0x05, 0x02, 0xe0, 0x00, 0x00, 0x48, 0x03, 0xc9, 0x48, 0x8b, 0x0c, 0xc8, 0x48, 0xff, 0x25, 0x6c, 0xaa, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x48, 0x89, 0x7c, 0x24, 0x18, 0x41, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x63, 0xd9, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x48, 0x83, 0x3d, 0x5f, 0xfc, 0x00, 0x00, 0x00, 0x75, 0x17, 0xe8, 0x18, 0x19, 0x00, 0x00, 0x8d, 0x4e, 0x1d, 0xe8, 0xe8, 0x16, 0x00, 0x00, 0xb9, 0xff, 0x00, 0x00, 0x00, 0xe8, 0x5a, 0xe0, 0xff, 0xff, 0x48, 0x8b, 0xfb, 0x48, 0x03, 0xff, 0x4c, 0x8d, 0x2d, 0xa9, 0xdf, 0x00, 0x00, 0x49, 0x83, 0x7c, 0xfd, 0x00, 0x00, 0x74, 0x04, 0x8b, 0xc6, 0xeb, 0x7b, 0xb9, 0x28, 0x00, 0x00, 0x00, 0xe8, 0xc3, 0xf9, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x75, 0x0f, 0xe8, 0x2e, 0xf9, 0xff, 0xff, 0xc7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x33, 0xc0, 0xeb, 0x5a, 0xb9, 0x0a, 0x00, 0x00, 0x00, 0xe8, 0x66, 0x00, 0x00, 0x00, 0x90, 0x49, 0x83, 0x7c, 0xfd, 0x00, 0x00, 0x75, 0x2f, 0xba, 0xa0, 0x0f, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0x8c, 0x20, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x17, 0x48, 0x8b, 0xcb, 0xe8, 0x80, 0xfb, 0xff, 0xff, 0xe8, 0xf3, 0xf8, 0xff, 0xff, 0xc7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x33, 0xf6, 0xeb, 0x10, 0x49, 0x89, 0x5c, 0xfd, 0x00, 0xeb, 0x09, 0x48, 0x8b, 0xcb, 0xe8, 0x62, 0xfb, 0xff, 0xff, 0x90, 0x48, 0x8b, 0x0d, 0xca, 0xdf, 0x00, 0x00, 0xff, 0x15, 0x9c, 0xa9, 0x00, 0x00, 0x8b, 0xc6, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x8b, 0x7c, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5d, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x63, 0xd9, 0x48, 0x8d, 0x3d, 0xf8, 0xde, 0x00, 0x00, 0x48, 0x03, 0xdb, 0x48, 0x83, 0x3c, 0xdf, 0x00, 0x75, 0x11, 0xe8, 0xf5, 0xfe, 0xff, 0xff, 0x85, 0xc0, 0x75, 0x08, 0x8d, 0x48, 0x11, 0xe8, 0x15, 0xdf, 0xff, 0xff, 0x48, 0x8b, 0x0c, 0xdf, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0x48, 0xff, 0x25, 0x38, 0xa9, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x30, 0x49, 0x8b, 0xd8, 0x48, 0x8b, 0xfa, 0x48, 0x85, 0xc9, 0x74, 0x32, 0x33, 0xd2, 0x48, 0x8d, 0x42, 0xe0, 0x48, 0xf7, 0xf1, 0x48, 0x3b, 0xc7, 0x73, 0x24, 0xe8, 0x48, 0xf8, 0xff, 0xff, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xe8, 0x5d, 0xf7, 0xff, 0xff, 0x33, 0xc0, 0xeb, 0x5d, 0x48, 0x0f, 0xaf, 0xf9, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x85, 0xff, 0x48, 0x0f, 0x44, 0xf8, 0x33, 0xc0, 0x48, 0x83, 0xff, 0xe0, 0x77, 0x18, 0x48, 0x8b, 0x0d, 0xf2, 0xfa, 0x00, 0x00, 0x8d, 0x50, 0x08, 0x4c, 0x8b, 0xc7, 0xff, 0x15, 0x7e, 0xa9, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x75, 0x2d, 0x83, 0x3d, 0xea, 0xfa, 0x00, 0x00, 0x00, 0x74, 0x19, 0x48, 0x8b, 0xcf, 0xe8, 0xb0, 0x1f, 0x00, 0x00, 0x85, 0xc0, 0x75, 0xcb, 0x48, 0x85, 0xdb, 0x74, 0xb2, 0xc7, 0x03, 0x0c, 0x00, 0x00, 0x00, 0xeb, 0xaa, 0x48, 0x85, 0xdb, 0x74, 0x06, 0xc7, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x30, 0x5f, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x30, 0x48, 0x8b, 0xf2, 0x48, 0x8b, 0xe9, 0x48, 0x85, 0xc9, 0x0f, 0x84, 0xfb, 0x00, 0x00, 0x00, 0x48, 0x85, 0xd2, 0x0f, 0x84, 0xf2, 0x00, 0x00, 0x00, 0x33, 0xff, 0x48, 0x8b, 0xd9, 0x4d, 0x85, 0xc0, 0x74, 0x21, 0x41, 0x8a, 0x00, 0x84, 0xc0, 0x74, 0x1a, 0xbf, 0x02, 0x00, 0x00, 0x00, 0x48, 0x3b, 0xd7, 0x0f, 0x86, 0xbc, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x59, 0x01, 0x88, 0x01, 0xc6, 0x03, 0x3a, 0x48, 0xff, 0xc3, 0x49, 0x8b, 0xd1, 0x4d, 0x85, 0xc9, 0x74, 0x41, 0x41, 0x80, 0x39, 0x00, 0x74, 0x3b, 0x48, 0xff, 0xc7, 0x48, 0x3b, 0xfe, 0x0f, 0x83, 0x96, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x48, 0xff, 0xc2, 0x88, 0x03, 0x48, 0xff, 0xc3, 0x80, 0x3a, 0x00, 0x75, 0xe5, 0x49, 0x8b, 0xc9, 0xe8, 0x4c, 0x38, 0x00, 0x00, 0x80, 0x38, 0x2f, 0x74, 0x13, 0x80, 0x38, 0x5c, 0x74, 0x0e, 0x48, 0xff, 0xc7, 0x48, 0x3b, 0xfe, 0x73, 0x6d, 0xc6, 0x03, 0x5c, 0x48, 0xff, 0xc3, 0x48, 0x8b, 0x4c, 0x24, 0x60, 0x48, 0x85, 0xc9, 0x74, 0x19, 0xeb, 0x12, 0x48, 0xff, 0xc7, 0x48, 0x3b, 0xfe, 0x73, 0x53, 0x8a, 0x01, 0x88, 0x03, 0x48, 0xff, 0xc3, 0x48, 0xff, 0xc1, 0x80, 0x39, 0x00, 0x75, 0xe9, 0x48, 0x8b, 0x4c, 0x24, 0x68, 0x48, 0x85, 0xc9, 0x74, 0x31, 0x8a, 0x01, 0x84, 0xc0, 0x74, 0x2b, 0x3c, 0x2e, 0x74, 0x22, 0x48, 0xff, 0xc7, 0x48, 0x3b, 0xfe, 0x73, 0x28, 0xc6, 0x03, 0x2e, 0x48, 0xff, 0xc3, 0xeb, 0x12, 0x48, 0xff, 0xc7, 0x48, 0x3b, 0xfe, 0x73, 0x18, 0x8a, 0x01, 0x88, 0x03, 0x48, 0xff, 0xc3, 0x48, 0xff, 0xc1, 0x80, 0x39, 0x00, 0x75, 0xe9, 0x48, 0x8d, 0x47, 0x01, 0x48, 0x3b, 0xc6, 0x76, 0x10, 0xc6, 0x45, 0x00, 0x00, 0xe8, 0xb0, 0xf6, 0xff, 0xff, 0xbb, 0x22, 0x00, 0x00, 0x00, 0xeb, 0x11, 0xc6, 0x03, 0x00, 0x33, 0xc0, 0xeb, 0x23, 0xe8, 0x9d, 0xf6, 0xff, 0xff, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x89, 0x18, 0xe8, 0xb1, 0xf5, 0xff, 0xff, 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x6c, 0x24, 0x48, 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x83, 0xc4, 0x30, 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x40, 0x8b, 0xda, 0x48, 0x8b, 0xd1, 0x48, 0x8d, 0x4c, 0x24, 0x20, 0x41, 0x8b, 0xf9, 0x41, 0x8b, 0xf0, 0xe8, 0x3c, 0xda, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x28, 0x44, 0x0f, 0xb6, 0xdb, 0x41, 0x84, 0x7c, 0x03, 0x1d, 0x75, 0x1f, 0x85, 0xf6, 0x74, 0x15, 0x48, 0x8b, 0x44, 0x24, 0x20, 0x48, 0x8b, 0x88, 0x40, 0x01, 0x00, 0x00, 0x42, 0x0f, 0xb7, 0x04, 0x59, 0x23, 0xc6, 0xeb, 0x02, 0x33, 0xc0, 0x85, 0xc0, 0x74, 0x05, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x30, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0x5c, 0x24, 0x50, 0x48, 0x8b, 0x74, 0x24, 0x58, 0x48, 0x83, 0xc4, 0x40, 0x5f, 0xc3, 0xcc, 0x48, 0x8b, 0xc2, 0x8b, 0xd1, 0x41, 0xb9, 0x04, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0x45, 0x33, 0xc0, 0xe9, 0x6e, 0xff, 0xff, 0xff, 0xcc, 0xcc, 0x8b, 0xd1, 0x41, 0xb9, 0x04, 0x00, 0x00, 0x00, 0x45, 0x33, 0xc0, 0x33, 0xc9, 0xe9, 0x5a, 0xff, 0xff, 0xff, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x38, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0xe8, 0xcd, 0x36, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0x48, 0x89, 0x4c, 0x24, 0x08, 0x48, 0x81, 0xec, 0x88, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0xe1, 0xee, 0x00, 0x00, 0xff, 0x15, 0xfb, 0xa6, 0x00, 0x00, 0x4c, 0x8b, 0x1d, 0xcc, 0xef, 0x00, 0x00, 0x4c, 0x89, 0x5c, 0x24, 0x58, 0x45, 0x33, 0xc0, 0x48, 0x8d, 0x54, 0x24, 0x60, 0x48, 0x8b, 0x4c, 0x24, 0x58, 0xe8, 0x4b, 0x73, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x50, 0x48, 0x83, 0x7c, 0x24, 0x50, 0x00, 0x74, 0x41, 0x48, 0xc7, 0x44, 0x24, 0x38, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x44, 0x24, 0x48, 0x48, 0x89, 0x44, 0x24, 0x30, 0x48, 0x8d, 0x44, 0x24, 0x40, 0x48, 0x89, 0x44, 0x24, 0x28, 0x48, 0x8d, 0x05, 0x8c, 0xee, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x20, 0x4c, 0x8b, 0x4c, 0x24, 0x50, 0x4c, 0x8b, 0x44, 0x24, 0x58, 0x48, 0x8b, 0x54, 0x24, 0x60, 0x33, 0xc9, 0xe8, 0xf9, 0x72, 0x00, 0x00, 0xeb, 0x22, 0x48, 0x8b, 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, 0x48, 0x89, 0x05, 0x58, 0xef, 0x00, 0x00, 0x48, 0x8d, 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc0, 0x08, 0x48, 0x89, 0x05, 0xe5, 0xee, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x3e, 0xef, 0x00, 0x00, 0x48, 0x89, 0x05, 0xaf, 0xed, 0x00, 0x00, 0x48, 0x8b, 0x84, 0x24, 0x90, 0x00, 0x00, 0x00, 0x48, 0x89, 0x05, 0xb0, 0xee, 0x00, 0x00, 0xc7, 0x05, 0x86, 0xed, 0x00, 0x00, 0x09, 0x04, 0x00, 0xc0, 0xc7, 0x05, 0x80, 0xed, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x25, 0xd9, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x68, 0x48, 0x8b, 0x05, 0x21, 0xd9, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x70, 0xff, 0x15, 0x06, 0xa6, 0x00, 0x00, 0x89, 0x05, 0xf0, 0xed, 0x00, 0x00, 0xb9, 0x01, 0x00, 0x00, 0x00, 0xe8, 0x22, 0x28, 0x00, 0x00, 0x33, 0xc9, 0xff, 0x15, 0xe6, 0xa5, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x9f, 0xa9, 0x00, 0x00, 0xff, 0x15, 0xd1, 0xa5, 0x00, 0x00, 0x83, 0x3d, 0xca, 0xed, 0x00, 0x00, 0x00, 0x75, 0x0a, 0xb9, 0x01, 0x00, 0x00, 0x00, 0xe8, 0xfa, 0x27, 0x00, 0x00, 0xff, 0x15, 0xb0, 0xa5, 0x00, 0x00, 0xba, 0x09, 0x04, 0x00, 0xc0, 0x48, 0x8b, 0xc8, 0xff, 0x15, 0x9a, 0xa5, 0x00, 0x00, 0x48, 0x81, 0xc4, 0x88, 0x00, 0x00, 0x00, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8d, 0x59, 0x1c, 0x48, 0x8b, 0xe9, 0xbe, 0x01, 0x01, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0x4c, 0x8b, 0xc6, 0x33, 0xd2, 0xe8, 0xab, 0xd1, 0xff, 0xff, 0x45, 0x33, 0xdb, 0x48, 0x8d, 0x7d, 0x10, 0x41, 0x8d, 0x4b, 0x06, 0x41, 0x0f, 0xb7, 0xc3, 0x44, 0x89, 0x5d, 0x04, 0x44, 0x89, 0x5d, 0x08, 0x44, 0x89, 0x5d, 0x0c, 0x66, 0xf3, 0xab, 0x48, 0x8d, 0x3d, 0xa6, 0xdc, 0x00, 0x00, 0x48, 0x2b, 0xfd, 0x8a, 0x04, 0x1f, 0x88, 0x03, 0x48, 0xff, 0xc3, 0x48, 0x83, 0xee, 0x01, 0x75, 0xf2, 0x48, 0x8d, 0x8d, 0x1d, 0x01, 0x00, 0x00, 0xba, 0x00, 0x01, 0x00, 0x00, 0x8a, 0x04, 0x39, 0x88, 0x01, 0x48, 0xff, 0xc1, 0x48, 0x83, 0xea, 0x01, 0x75, 0xf2, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x81, 0xec, 0x80, 0x05, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x0b, 0xd8, 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x84, 0x24, 0x70, 0x05, 0x00, 0x00, 0x48, 0x8b, 0xf1, 0x8b, 0x49, 0x04, 0x48, 0x8d, 0x54, 0x24, 0x50, 0xff, 0x15, 0x1f, 0xa5, 0x00, 0x00, 0xbb, 0x00, 0x01, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x84, 0x3d, 0x01, 0x00, 0x00, 0x33, 0xc0, 0x48, 0x8d, 0x54, 0x24, 0x70, 0x88, 0x02, 0xff, 0xc0, 0x48, 0xff, 0xc2, 0x3b, 0xc3, 0x72, 0xf5, 0x8a, 0x44, 0x24, 0x56, 0xc6, 0x44, 0x24, 0x70, 0x20, 0x48, 0x8d, 0x7c, 0x24, 0x56, 0xeb, 0x29, 0x0f, 0xb6, 0x57, 0x01, 0x44, 0x0f, 0xb6, 0xc0, 0x44, 0x3b, 0xc2, 0x77, 0x16, 0x41, 0x2b, 0xd0, 0x49, 0x8b, 0xc0, 0x4a, 0x8d, 0x4c, 0x04, 0x70, 0x44, 0x8d, 0x42, 0x01, 0xb2, 0x20, 0xe8, 0xbd, 0xd0, 0xff, 0xff, 0x48, 0x83, 0xc7, 0x02, 0x8a, 0x07, 0x84, 0xc0, 0x75, 0xd3, 0x8b, 0x46, 0x0c, 0x83, 0x64, 0x24, 0x38, 0x00, 0x4c, 0x8d, 0x44, 0x24, 0x70, 0x89, 0x44, 0x24, 0x30, 0x8b, 0x46, 0x04, 0x44, 0x8b, 0xcb, 0x89, 0x44, 0x24, 0x28, 0x48, 0x8d, 0x84, 0x24, 0x70, 0x03, 0x00, 0x00, 0xba, 0x01, 0x00, 0x00, 0x00, 0x33, 0xc9, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x0f, 0x3f, 0x00, 0x00, 0x83, 0x64, 0x24, 0x40, 0x00, 0x8b, 0x46, 0x04, 0x8b, 0x56, 0x0c, 0x89, 0x44, 0x24, 0x38, 0x48, 0x8d, 0x84, 0x24, 0x70, 0x01, 0x00, 0x00, 0x89, 0x5c, 0x24, 0x30, 0x48, 0x89, 0x44, 0x24, 0x28, 0x4c, 0x8d, 0x4c, 0x24, 0x70, 0x44, 0x8b, 0xc3, 0x33, 0xc9, 0x89, 0x5c, 0x24, 0x20, 0xe8, 0xd8, 0x3b, 0x00, 0x00, 0x83, 0x64, 0x24, 0x40, 0x00, 0x8b, 0x46, 0x04, 0x8b, 0x56, 0x0c, 0x89, 0x44, 0x24, 0x38, 0x48, 0x8d, 0x84, 0x24, 0x70, 0x02, 0x00, 0x00, 0x89, 0x5c, 0x24, 0x30, 0x48, 0x89, 0x44, 0x24, 0x28, 0x4c, 0x8d, 0x4c, 0x24, 0x70, 0x41, 0xb8, 0x00, 0x02, 0x00, 0x00, 0x33, 0xc9, 0x89, 0x5c, 0x24, 0x20, 0xe8, 0xa2, 0x3b, 0x00, 0x00, 0x4c, 0x8d, 0x9c, 0x24, 0x70, 0x03, 0x00, 0x00, 0x48, 0x8d, 0x4e, 0x1d, 0x33, 0xd2, 0x41, 0xf6, 0x03, 0x01, 0x74, 0x0c, 0x80, 0x09, 0x10, 0x8a, 0x84, 0x14, 0x70, 0x01, 0x00, 0x00, 0xeb, 0x10, 0x41, 0xf6, 0x03, 0x02, 0x74, 0x12, 0x80, 0x09, 0x20, 0x8a, 0x84, 0x14, 0x70, 0x02, 0x00, 0x00, 0x88, 0x81, 0x00, 0x01, 0x00, 0x00, 0xeb, 0x07, 0xc6, 0x81, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0xff, 0xc1, 0x48, 0xff, 0xc2, 0x49, 0x83, 0xc3, 0x02, 0x48, 0x83, 0xeb, 0x01, 0x75, 0xbf, 0xeb, 0x3f, 0x33, 0xd2, 0x48, 0x8d, 0x4e, 0x1d, 0x44, 0x8d, 0x42, 0x9f, 0x41, 0x8d, 0x40, 0x20, 0x83, 0xf8, 0x19, 0x77, 0x08, 0x80, 0x09, 0x10, 0x8d, 0x42, 0x20, 0xeb, 0x0c, 0x41, 0x83, 0xf8, 0x19, 0x77, 0x0e, 0x80, 0x09, 0x20, 0x8d, 0x42, 0xe0, 0x88, 0x81, 0x00, 0x01, 0x00, 0x00, 0xeb, 0x07, 0xc6, 0x81, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xc2, 0x48, 0xff, 0xc1, 0x3b, 0xd3, 0x72, 0xc7, 0x48, 0x8b, 0x8c, 0x24, 0x70, 0x05, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, 0xd6, 0xd5, 0xff, 0xff, 0x4c, 0x8d, 0x9c, 0x24, 0x80, 0x05, 0x00, 0x00, 0x49, 0x8b, 0x5b, 0x18, 0x49, 0x8b, 0x73, 0x20, 0x49, 0x8b, 0xe3, 0x5f, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0xe8, 0xdd, 0x0a, 0x00, 0x00, 0x48, 0x8b, 0xf8, 0x8b, 0x88, 0xc8, 0x00, 0x00, 0x00, 0x85, 0x0d, 0x9a, 0xdf, 0x00, 0x00, 0x74, 0x13, 0x48, 0x83, 0xb8, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x74, 0x09, 0x48, 0x8b, 0x98, 0xb8, 0x00, 0x00, 0x00, 0xeb, 0x6e, 0xb9, 0x0d, 0x00, 0x00, 0x00, 0xe8, 0xf7, 0xf8, 0xff, 0xff, 0x90, 0x48, 0x8b, 0x9f, 0xb8, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x30, 0x48, 0x3b, 0x1d, 0x5f, 0xde, 0x00, 0x00, 0x74, 0x44, 0x48, 0x85, 0xdb, 0x74, 0x1c, 0xf0, 0x83, 0x03, 0xff, 0x75, 0x16, 0x48, 0x8d, 0x05, 0x1b, 0xda, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x30, 0x48, 0x3b, 0xc8, 0x74, 0x05, 0xe8, 0xfc, 0xf3, 0xff, 0xff, 0x48, 0x8b, 0x05, 0x35, 0xde, 0x00, 0x00, 0x48, 0x89, 0x87, 0xb8, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x27, 0xde, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x30, 0xf0, 0x83, 0x00, 0x01, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0xb9, 0x0d, 0x00, 0x00, 0x00, 0xe8, 0x93, 0xf7, 0xff, 0xff, 0x48, 0x85, 0xdb, 0x75, 0x08, 0x8d, 0x4b, 0x20, 0xe8, 0xca, 0xd7, 0xff, 0xff, 0x48, 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0x40, 0x53, 0x48, 0x83, 0xec, 0x40, 0x8b, 0xd9, 0x48, 0x8d, 0x4c, 0x24, 0x20, 0x33, 0xd2, 0xe8, 0x10, 0xd5, 0xff, 0xff, 0x83, 0x25, 0x29, 0xef, 0x00, 0x00, 0x00, 0x83, 0xfb, 0xfe, 0x75, 0x25, 0xc7, 0x05, 0x1a, 0xef, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x15, 0x94, 0xa2, 0x00, 0x00, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, 0x53, 0x48, 0x8b, 0x4c, 0x24, 0x30, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xeb, 0x45, 0x83, 0xfb, 0xfd, 0x75, 0x12, 0xc7, 0x05, 0xf0, 0xee, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x15, 0x62, 0xa2, 0x00, 0x00, 0xeb, 0xd4, 0x83, 0xfb, 0xfc, 0x75, 0x14, 0x48, 0x8b, 0x44, 0x24, 0x20, 0xc7, 0x05, 0xd4, 0xee, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8b, 0x40, 0x04, 0xeb, 0xbb, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x30, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x40, 0x5b, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x18, 0x55, 0x56, 0x57, 0x41, 0x54, 0x41, 0x55, 0x48, 0x83, 0xec, 0x40, 0x48, 0x8b, 0x05, 0xdd, 0xd4, 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x44, 0x24, 0x38, 0x48, 0x8b, 0xf2, 0xe8, 0x49, 0xff, 0xff, 0xff, 0x33, 0xdb, 0x8b, 0xf8, 0x3b, 0xc3, 0x75, 0x0d, 0x48, 0x8b, 0xce, 0xe8, 0x05, 0xfc, 0xff, 0xff, 0xe9, 0x18, 0x02, 0x00, 0x00, 0x4c, 0x8d, 0x2d, 0x31, 0xdd, 0x00, 0x00, 0x8b, 0xcb, 0x48, 0x8b, 0xeb, 0x49, 0x8b, 0xc5, 0x41, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x39, 0x38, 0x0f, 0x84, 0x27, 0x01, 0x00, 0x00, 0x41, 0x03, 0xcc, 0x49, 0x03, 0xec, 0x48, 0x83, 0xc0, 0x30, 0x83, 0xf9, 0x05, 0x72, 0xe9, 0x81, 0xff, 0xe8, 0xfd, 0x00, 0x00, 0x0f, 0x84, 0x04, 0x01, 0x00, 0x00, 0x81, 0xff, 0xe9, 0xfd, 0x00, 0x00, 0x0f, 0x84, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0xcf, 0xff, 0x15, 0xb3, 0xa1, 0x00, 0x00, 0x3b, 0xc3, 0x0f, 0x84, 0xe7, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x54, 0x24, 0x20, 0x8b, 0xcf, 0xff, 0x15, 0x86, 0xa1, 0x00, 0x00, 0x3b, 0xc3, 0x0f, 0x84, 0xc6, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4e, 0x1c, 0x33, 0xd2, 0x41, 0xb8, 0x01, 0x01, 0x00, 0x00, 0xe8, 0x5d, 0xcd, 0xff, 0xff, 0x89, 0x7e, 0x04, 0x89, 0x5e, 0x0c, 0x44, 0x39, 0x64, 0x24, 0x20, 0x0f, 0x86, 0x8d, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x44, 0x24, 0x26, 0x38, 0x5c, 0x24, 0x26, 0x74, 0x2d, 0x38, 0x58, 0x01, 0x74, 0x28, 0x0f, 0xb6, 0x38, 0x0f, 0xb6, 0x48, 0x01, 0x3b, 0xf9, 0x77, 0x15, 0x2b, 0xcf, 0x48, 0x8d, 0x54, 0x37, 0x1d, 0x41, 0x03, 0xcc, 0x80, 0x0a, 0x04, 0x49, 0x03, 0xd4, 0x49, 0x2b, 0xcc, 0x75, 0xf5, 0x48, 0x83, 0xc0, 0x02, 0x38, 0x18, 0x75, 0xd3, 0x48, 0x8d, 0x46, 0x1e, 0xb9, 0xfe, 0x00, 0x00, 0x00, 0x80, 0x08, 0x08, 0x49, 0x03, 0xc4, 0x49, 0x2b, 0xcc, 0x75, 0xf5, 0x8b, 0x4e, 0x04, 0x81, 0xe9, 0xa4, 0x03, 0x00, 0x00, 0x74, 0x28, 0x83, 0xe9, 0x04, 0x74, 0x1c, 0x83, 0xe9, 0x0d, 0x74, 0x10, 0x41, 0x3b, 0xcc, 0x74, 0x04, 0x8b, 0xc3, 0xeb, 0x1a, 0xb8, 0x04, 0x04, 0x00, 0x00, 0xeb, 0x13, 0xb8, 0x12, 0x04, 0x00, 0x00, 0xeb, 0x0c, 0xb8, 0x04, 0x08, 0x00, 0x00, 0xeb, 0x05, 0xb8, 0x11, 0x04, 0x00, 0x00, 0x89, 0x46, 0x0c, 0x44, 0x89, 0x66, 0x08, 0xeb, 0x03, 0x89, 0x5e, 0x08, 0x48, 0x8d, 0x7e, 0x10, 0x0f, 0xb7, 0xc3, 0xb9, 0x06, 0x00, 0x00, 0x00, 0x66, 0xf3, 0xab, 0xe9, 0xe0, 0x00, 0x00, 0x00, 0x39, 0x1d, 0x42, 0xed, 0x00, 0x00, 0x0f, 0x85, 0xb7, 0xfe, 0xff, 0xff, 0x83, 0xc8, 0xff, 0xe9, 0xd6, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4e, 0x1c, 0x33, 0xd2, 0x41, 0xb8, 0x01, 0x01, 0x00, 0x00, 0xe8, 0x83, 0xcc, 0xff, 0xff, 0x48, 0x8d, 0x6c, 0x6d, 0x00, 0x4c, 0x8d, 0x1d, 0xcf, 0xdb, 0x00, 0x00, 0x48, 0x03, 0xed, 0x41, 0xba, 0x04, 0x00, 0x00, 0x00, 0x4d, 0x8d, 0x44, 0xed, 0x10, 0x49, 0x8b, 0xc8, 0x41, 0x38, 0x18, 0x74, 0x31, 0x38, 0x59, 0x01, 0x74, 0x2c, 0x0f, 0xb6, 0x11, 0x0f, 0xb6, 0x41, 0x01, 0x3b, 0xd0, 0x77, 0x19, 0x4c, 0x8d, 0x4c, 0x32, 0x1d, 0x41, 0x8a, 0x03, 0x41, 0x03, 0xd4, 0x41, 0x08, 0x01, 0x0f, 0xb6, 0x41, 0x01, 0x4d, 0x03, 0xcc, 0x3b, 0xd0, 0x76, 0xec, 0x48, 0x83, 0xc1, 0x02, 0x38, 0x19, 0x75, 0xcf, 0x49, 0x83, 0xc0, 0x08, 0x4d, 0x03, 0xdc, 0x4d, 0x2b, 0xd4, 0x75, 0xbb, 0x89, 0x7e, 0x04, 0x81, 0xef, 0xa4, 0x03, 0x00, 0x00, 0x44, 0x89, 0x66, 0x08, 0x74, 0x24, 0x83, 0xef, 0x04, 0x74, 0x18, 0x83, 0xef, 0x0d, 0x74, 0x0c, 0x41, 0x3b, 0xfc, 0x75, 0x1a, 0xbb, 0x04, 0x04, 0x00, 0x00, 0xeb, 0x13, 0xbb, 0x12, 0x04, 0x00, 0x00, 0xeb, 0x0c, 0xbb, 0x04, 0x08, 0x00, 0x00, 0xeb, 0x05, 0xbb, 0x11, 0x04, 0x00, 0x00, 0x89, 0x5e, 0x0c, 0x48, 0x8d, 0x56, 0x10, 0x49, 0x8d, 0x7c, 0xed, 0x04, 0xb9, 0x06, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0x07, 0x48, 0x83, 0xc7, 0x02, 0x66, 0x89, 0x02, 0x48, 0x83, 0xc2, 0x02, 0x49, 0x2b, 0xcc, 0x75, 0xed, 0x48, 0x8b, 0xce, 0xe8, 0x7c, 0xfa, 0xff, 0xff, 0x33, 0xc0, 0x48, 0x8b, 0x4c, 0x24, 0x38, 0x48, 0x33, 0xcc, 0xe8, 0x11, 0xd2, 0xff, 0xff, 0x48, 0x8b, 0x9c, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0x5d, 0xc3, 0xcc, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x70, 0x10, 0x48, 0x89, 0x78, 0x18, 0x4c, 0x89, 0x60, 0x20, 0x41, 0x55, 0x48, 0x83, 0xec, 0x30, 0x8b, 0xf9, 0x41, 0x83, 0xcd, 0xff, 0xe8, 0x04, 0x07, 0x00, 0x00, 0x48, 0x8b, 0xf0, 0xe8, 0x10, 0xfc, 0xff, 0xff, 0x48, 0x8b, 0x9e, 0xb8, 0x00, 0x00, 0x00, 0x8b, 0xcf, 0xe8, 0xbe, 0xfc, 0xff, 0xff, 0x44, 0x8b, 0xe0, 0x3b, 0x43, 0x04, 0x0f, 0x84, 0x8f, 0x01, 0x00, 0x00, 0xb9, 0x20, 0x02, 0x00, 0x00, 0xe8, 0x5c, 0xee, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x33, 0xff, 0x48, 0x3b, 0xc7, 0x0f, 0x84, 0x7c, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x96, 0xb8, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0x41, 0xb8, 0x20, 0x02, 0x00, 0x00, 0xe8, 0x59, 0x3a, 0x00, 0x00, 0x89, 0x3b, 0x48, 0x8b, 0xd3, 0x41, 0x8b, 0xcc, 0xe8, 0x08, 0xfd, 0xff, 0xff, 0x44, 0x8b, 0xe8, 0x3b, 0xc7, 0x0f, 0x85, 0x24, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x8e, 0xb8, 0x00, 0x00, 0x00, 0xf0, 0x83, 0x01, 0xff, 0x75, 0x1a, 0x48, 0x8b, 0x8e, 0xb8, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x25, 0x16, 0xd6, 0x00, 0x00, 0x49, 0x3b, 0xcc, 0x74, 0x0e, 0xe8, 0xfc, 0xef, 0xff, 0xff, 0xeb, 0x07, 0x4c, 0x8d, 0x25, 0x03, 0xd6, 0x00, 0x00, 0x48, 0x89, 0x9e, 0xb8, 0x00, 0x00, 0x00, 0xf0, 0x83, 0x03, 0x01, 0xf6, 0x86, 0xc8, 0x00, 0x00, 0x00, 0x02, 0x0f, 0x85, 0x09, 0x01, 0x00, 0x00, 0xf6, 0x05, 0x1c, 0xdb, 0x00, 0x00, 0x01, 0x0f, 0x85, 0xfc, 0x00, 0x00, 0x00, 0xb9, 0x0d, 0x00, 0x00, 0x00, 0xe8, 0x88, 0xf4, 0xff, 0xff, 0x90, 0x8b, 0x43, 0x04, 0x89, 0x05, 0x5e, 0xeb, 0x00, 0x00, 0x8b, 0x43, 0x08, 0x89, 0x05, 0x59, 0xeb, 0x00, 0x00, 0x8b, 0x43, 0x0c, 0x89, 0x05, 0x54, 0xeb, 0x00, 0x00, 0x8b, 0xd7, 0x89, 0x54, 0x24, 0x20, 0x4c, 0x8d, 0x05, 0xab, 0xad, 0xff, 0xff, 0x83, 0xfa, 0x05, 0x7d, 0x19, 0x48, 0x63, 0xca, 0x0f, 0xb7, 0x44, 0x4b, 0x10, 0x66, 0x41, 0x89, 0x84, 0x48, 0x88, 0x3d, 0x01, 0x00, 0xff, 0xc2, 0x89, 0x54, 0x24, 0x20, 0xeb, 0xe2, 0x8b, 0xd7, 0x89, 0x54, 0x24, 0x20, 0x81, 0xfa, 0x01, 0x01, 0x00, 0x00, 0x7d, 0x17, 0x48, 0x63, 0xca, 0x8a, 0x44, 0x19, 0x1c, 0x42, 0x88, 0x84, 0x01, 0x20, 0x2a, 0x01, 0x00, 0xff, 0xc2, 0x89, 0x54, 0x24, 0x20, 0xeb, 0xe1, 0x89, 0x7c, 0x24, 0x20, 0x81, 0xff, 0x00, 0x01, 0x00, 0x00, 0x7d, 0x1a, 0x48, 0x63, 0xcf, 0x8a, 0x84, 0x19, 0x1d, 0x01, 0x00, 0x00, 0x42, 0x88, 0x84, 0x01, 0x30, 0x2b, 0x01, 0x00, 0xff, 0xc7, 0x89, 0x7c, 0x24, 0x20, 0xeb, 0xde, 0x48, 0x8b, 0x05, 0x6b, 0xd9, 0x00, 0x00, 0xf0, 0x83, 0x00, 0xff, 0x75, 0x11, 0x48, 0x8b, 0x0d, 0x5e, 0xd9, 0x00, 0x00, 0x49, 0x3b, 0xcc, 0x74, 0x05, 0xe8, 0x14, 0xef, 0xff, 0xff, 0x48, 0x89, 0x1d, 0x4d, 0xd9, 0x00, 0x00, 0xf0, 0x83, 0x03, 0x01, 0xb9, 0x0d, 0x00, 0x00, 0x00, 0xe8, 0xc3, 0xf2, 0xff, 0xff, 0xeb, 0x2b, 0x83, 0xf8, 0xff, 0x75, 0x26, 0x4c, 0x8d, 0x25, 0x01, 0xd5, 0x00, 0x00, 0x49, 0x3b, 0xdc, 0x74, 0x08, 0x48, 0x8b, 0xcb, 0xe8, 0xe4, 0xee, 0xff, 0xff, 0xe8, 0x57, 0xec, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xeb, 0x05, 0x33, 0xff, 0x44, 0x8b, 0xef, 0x41, 0x8b, 0xc5, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x74, 0x24, 0x48, 0x48, 0x8b, 0x7c, 0x24, 0x50, 0x4c, 0x8b, 0x64, 0x24, 0x58, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5d, 0xc3, 0x48, 0x83, 0xec, 0x28, 0x83, 0x3d, 0x61, 0xf2, 0x00, 0x00, 0x00, 0x75, 0x14, 0xb9, 0xfd, 0xff, 0xff, 0xff, 0xe8, 0xf1, 0xfd, 0xff, 0xff, 0xc7, 0x05, 0x4b, 0xf2, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0x81, 0x28, 0x01, 0x00, 0x00, 0x48, 0x8b, 0xd9, 0x48, 0x85, 0xc0, 0x74, 0x79, 0x48, 0x8d, 0x0d, 0xc7, 0xde, 0x00, 0x00, 0x48, 0x3b, 0xc1, 0x74, 0x6d, 0x48, 0x8b, 0x83, 0x10, 0x01, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x61, 0x83, 0x38, 0x00, 0x75, 0x5c, 0x48, 0x8b, 0x8b, 0x20, 0x01, 0x00, 0x00, 0x48, 0x85, 0xc9, 0x74, 0x16, 0x83, 0x39, 0x00, 0x75, 0x11, 0xe8, 0x3b, 0xee, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x28, 0x01, 0x00, 0x00, 0xe8, 0xb7, 0x3d, 0x00, 0x00, 0x48, 0x8b, 0x8b, 0x18, 0x01, 0x00, 0x00, 0x48, 0x85, 0xc9, 0x74, 0x16, 0x83, 0x39, 0x00, 0x75, 0x11, 0xe8, 0x19, 0xee, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x28, 0x01, 0x00, 0x00, 0xe8, 0x4d, 0x3d, 0x00, 0x00, 0x48, 0x8b, 0x8b, 0x10, 0x01, 0x00, 0x00, 0xe8, 0x01, 0xee, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x28, 0x01, 0x00, 0x00, 0xe8, 0xf5, 0xed, 0xff, 0xff, 0x48, 0x8b, 0x83, 0x30, 0x01, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x47, 0x83, 0x38, 0x00, 0x75, 0x42, 0x48, 0x8b, 0x8b, 0x38, 0x01, 0x00, 0x00, 0x48, 0x81, 0xe9, 0xfe, 0x00, 0x00, 0x00, 0xe8, 0xd1, 0xed, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x48, 0x01, 0x00, 0x00, 0xbf, 0x80, 0x00, 0x00, 0x00, 0x48, 0x2b, 0xcf, 0xe8, 0xbd, 0xed, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x50, 0x01, 0x00, 0x00, 0x48, 0x2b, 0xcf, 0xe8, 0xae, 0xed, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x30, 0x01, 0x00, 0x00, 0xe8, 0xa2, 0xed, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x58, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x05, 0x74, 0xdc, 0x00, 0x00, 0x48, 0x3b, 0xc8, 0x74, 0x1a, 0x83, 0xb9, 0x60, 0x01, 0x00, 0x00, 0x00, 0x75, 0x11, 0xe8, 0xd5, 0x3a, 0x00, 0x00, 0x48, 0x8b, 0x8b, 0x58, 0x01, 0x00, 0x00, 0xe8, 0x75, 0xed, 0xff, 0xff, 0x48, 0x8d, 0x7b, 0x58, 0xbe, 0x06, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x05, 0xb5, 0xd8, 0x00, 0x00, 0x48, 0x39, 0x47, 0xf0, 0x74, 0x12, 0x48, 0x8b, 0x0f, 0x48, 0x85, 0xc9, 0x74, 0x0a, 0x83, 0x39, 0x00, 0x75, 0x05, 0xe8, 0x4d, 0xed, 0xff, 0xff, 0x48, 0x83, 0x7f, 0xf8, 0x00, 0x74, 0x13, 0x48, 0x8b, 0x4f, 0x08, 0x48, 0x85, 0xc9, 0x74, 0x0a, 0x83, 0x39, 0x00, 0x75, 0x05, 0xe8, 0x33, 0xed, 0xff, 0xff, 0x48, 0x83, 0xc7, 0x20, 0x48, 0x83, 0xee, 0x01, 0x75, 0xbd, 0x48, 0x8b, 0xcb, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xe9, 0x12, 0xed, 0xff, 0xff, 0xcc, 0xcc, 0xf0, 0x83, 0x01, 0x01, 0x48, 0x8b, 0x81, 0x10, 0x01, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x04, 0xf0, 0x83, 0x00, 0x01, 0x48, 0x8b, 0x81, 0x20, 0x01, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x04, 0xf0, 0x83, 0x00, 0x01, 0x48, 0x8b, 0x81, 0x18, 0x01, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x04, 0xf0, 0x83, 0x00, 0x01, 0x48, 0x8b, 0x81, 0x30, 0x01, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x04, 0xf0, 0x83, 0x00, 0x01, 0x48, 0x8d, 0x41, 0x58, 0x41, 0xb8, 0x06, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x15, 0x0b, 0xd8, 0x00, 0x00, 0x48, 0x39, 0x50, 0xf0, 0x74, 0x0c, 0x48, 0x8b, 0x10, 0x48, 0x85, 0xd2, 0x74, 0x04, 0xf0, 0x83, 0x02, 0x01, 0x48, 0x83, 0x78, 0xf8, 0x00, 0x74, 0x0d, 0x48, 0x8b, 0x50, 0x08, 0x48, 0x85, 0xd2, 0x74, 0x04, 0xf0, 0x83, 0x02, 0x01, 0x48, 0x83, 0xc0, 0x20, 0x49, 0x83, 0xe8, 0x01, 0x75, 0xc9, 0x48, 0x8b, 0x81, 0x58, 0x01, 0x00, 0x00, 0xf0, 0x83, 0x80, 0x60, 0x01, 0x00, 0x00, 0x01, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x85, 0xc9, 0x0f, 0x84, 0x98, 0x00, 0x00, 0x00, 0x41, 0x83, 0xc9, 0xff, 0xf0, 0x44, 0x01, 0x09, 0x48, 0x8b, 0x81, 0x10, 0x01, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x04, 0xf0, 0x44, 0x01, 0x08, 0x48, 0x8b, 0x81, 0x20, 0x01, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x04, 0xf0, 0x44, 0x01, 0x08, 0x48, 0x8b, 0x81, 0x18, 0x01, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x04, 0xf0, 0x44, 0x01, 0x08, 0x48, 0x8b, 0x81, 0x30, 0x01, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x04, 0xf0, 0x44, 0x01, 0x08, 0x48, 0x8d, 0x41, 0x58, 0x41, 0xb8, 0x06, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x15, 0x66, 0xd7, 0x00, 0x00, 0x48, 0x39, 0x50, 0xf0, 0x74, 0x0c, 0x48, 0x8b, 0x10, 0x48, 0x85, 0xd2, 0x74, 0x04, 0xf0, 0x44, 0x01, 0x0a, 0x48, 0x83, 0x78, 0xf8, 0x00, 0x74, 0x0d, 0x48, 0x8b, 0x50, 0x08, 0x48, 0x85, 0xd2, 0x74, 0x04, 0xf0, 0x44, 0x01, 0x0a, 0x48, 0x83, 0xc0, 0x20, 0x49, 0x83, 0xe8, 0x01, 0x75, 0xc9, 0x48, 0x8b, 0x81, 0x58, 0x01, 0x00, 0x00, 0xf0, 0x44, 0x01, 0x88, 0x60, 0x01, 0x00, 0x00, 0x48, 0x8b, 0xc1, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xda, 0x48, 0x85, 0xd2, 0x74, 0x41, 0x48, 0x85, 0xc9, 0x74, 0x3c, 0x4c, 0x8b, 0x11, 0x4c, 0x3b, 0xd2, 0x74, 0x2f, 0x48, 0x89, 0x11, 0x48, 0x8b, 0xca, 0xe8, 0x9a, 0xfe, 0xff, 0xff, 0x4d, 0x85, 0xd2, 0x74, 0x1f, 0x49, 0x8b, 0xca, 0xe8, 0x25, 0xff, 0xff, 0xff, 0x41, 0x83, 0x3a, 0x00, 0x75, 0x11, 0x48, 0x8d, 0x05, 0xf0, 0xd6, 0x00, 0x00, 0x4c, 0x3b, 0xd0, 0x74, 0x05, 0xe8, 0xfa, 0xfc, 0xff, 0xff, 0x48, 0x8b, 0xc3, 0xeb, 0x02, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0xe8, 0xe9, 0x01, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x8b, 0x88, 0xc8, 0x00, 0x00, 0x00, 0x85, 0x0d, 0xa6, 0xd6, 0x00, 0x00, 0x74, 0x18, 0x48, 0x83, 0xb8, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x74, 0x0e, 0xe8, 0xc9, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x98, 0xc0, 0x00, 0x00, 0x00, 0xeb, 0x2b, 0xb9, 0x0c, 0x00, 0x00, 0x00, 0xe8, 0xfe, 0xef, 0xff, 0xff, 0x90, 0x48, 0x8d, 0x8b, 0xc0, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x15, 0xeb, 0xd7, 0x00, 0x00, 0xe8, 0x56, 0xff, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0xb9, 0x0c, 0x00, 0x00, 0x00, 0xe8, 0xdd, 0xee, 0xff, 0xff, 0x48, 0x85, 0xdb, 0x75, 0x08, 0x8d, 0x4b, 0x20, 0xe8, 0x14, 0xcf, 0xff, 0xff, 0x48, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0xff, 0x25, 0x19, 0x9a, 0x00, 0x00, 0xcc, 0x33, 0xc9, 0x48, 0xff, 0x25, 0x0f, 0x9a, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x48, 0xff, 0x25, 0x0d, 0x9a, 0x00, 0x00, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x8b, 0x0d, 0xba, 0xd7, 0x00, 0x00, 0x83, 0xf9, 0xff, 0x74, 0x0d, 0xff, 0x15, 0x0f, 0x9a, 0x00, 0x00, 0x83, 0x0d, 0xa8, 0xd7, 0x00, 0x00, 0xff, 0x48, 0x83, 0xc4, 0x28, 0xe9, 0xff, 0xed, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xfa, 0x48, 0x8b, 0xd9, 0x48, 0x8d, 0x05, 0xa5, 0xa3, 0x00, 0x00, 0x48, 0x89, 0x81, 0xa0, 0x00, 0x00, 0x00, 0xc7, 0x41, 0x1c, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x81, 0xc8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc6, 0x81, 0x74, 0x01, 0x00, 0x00, 0x43, 0xc6, 0x81, 0xf7, 0x01, 0x00, 0x00, 0x43, 0x48, 0x8d, 0x05, 0x88, 0xd0, 0x00, 0x00, 0x48, 0x89, 0x81, 0xb8, 0x00, 0x00, 0x00, 0xb9, 0x0d, 0x00, 0x00, 0x00, 0xe8, 0x2b, 0xef, 0xff, 0xff, 0x90, 0x48, 0x8b, 0x83, 0xb8, 0x00, 0x00, 0x00, 0xf0, 0x83, 0x00, 0x01, 0xb9, 0x0d, 0x00, 0x00, 0x00, 0xe8, 0x15, 0xee, 0xff, 0xff, 0xb9, 0x0c, 0x00, 0x00, 0x00, 0xe8, 0x0b, 0xef, 0xff, 0xff, 0x90, 0x48, 0x89, 0xbb, 0xc0, 0x00, 0x00, 0x00, 0x48, 0x85, 0xff, 0x75, 0x0e, 0x48, 0x8b, 0x05, 0xf3, 0xd6, 0x00, 0x00, 0x48, 0x89, 0x83, 0xc0, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x8b, 0xc0, 0x00, 0x00, 0x00, 0xe8, 0x10, 0xfd, 0xff, 0xff, 0x90, 0xb9, 0x0c, 0x00, 0x00, 0x00, 0xe8, 0xd9, 0xed, 0xff, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0xff, 0x15, 0xe0, 0x98, 0x00, 0x00, 0x8b, 0x0d, 0xd2, 0xd6, 0x00, 0x00, 0x8b, 0xf8, 0xff, 0x15, 0x1a, 0x99, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x75, 0x48, 0x8d, 0x48, 0x01, 0xba, 0xc8, 0x02, 0x00, 0x00, 0xe8, 0x41, 0xe8, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x74, 0x33, 0x8b, 0x0d, 0xa7, 0xd6, 0x00, 0x00, 0x48, 0x8b, 0xd0, 0xff, 0x15, 0xf6, 0x98, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0x85, 0xc0, 0x74, 0x16, 0x33, 0xd2, 0xe8, 0xf4, 0xfe, 0xff, 0xff, 0xff, 0x15, 0xfa, 0x98, 0x00, 0x00, 0x48, 0x83, 0x4b, 0x08, 0xff, 0x89, 0x03, 0xeb, 0x07, 0xe8, 0x9c, 0xe9, 0xff, 0xff, 0x33, 0xdb, 0x8b, 0xcf, 0xff, 0x15, 0xda, 0x98, 0x00, 0x00, 0x48, 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0xe8, 0x71, 0xff, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x75, 0x08, 0x8d, 0x48, 0x10, 0xe8, 0x71, 0xcd, 0xff, 0xff, 0x48, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0x48, 0x85, 0xc9, 0x0f, 0x84, 0x2b, 0x01, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x48, 0x8b, 0x49, 0x38, 0x48, 0x85, 0xc9, 0x74, 0x05, 0xe8, 0x3c, 0xe9, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x48, 0x48, 0x85, 0xc9, 0x74, 0x05, 0xe8, 0x2e, 0xe9, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x58, 0x48, 0x85, 0xc9, 0x74, 0x05, 0xe8, 0x20, 0xe9, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x68, 0x48, 0x85, 0xc9, 0x74, 0x05, 0xe8, 0x12, 0xe9, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x70, 0x48, 0x85, 0xc9, 0x74, 0x05, 0xe8, 0x04, 0xe9, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x78, 0x48, 0x85, 0xc9, 0x74, 0x05, 0xe8, 0xf6, 0xe8, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x80, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc9, 0x74, 0x05, 0xe8, 0xe5, 0xe8, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x05, 0xd7, 0xa1, 0x00, 0x00, 0x48, 0x3b, 0xc8, 0x74, 0x05, 0xe8, 0xcd, 0xe8, 0xff, 0xff, 0xb9, 0x0d, 0x00, 0x00, 0x00, 0xe8, 0x87, 0xed, 0xff, 0xff, 0x90, 0x48, 0x8b, 0x8b, 0xb8, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4c, 0x24, 0x30, 0x48, 0x85, 0xc9, 0x74, 0x1d, 0xf0, 0x83, 0x01, 0xff, 0x75, 0x17, 0x48, 0x8d, 0x05, 0xb4, 0xce, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x30, 0x48, 0x3b, 0xc8, 0x74, 0x06, 0xe8, 0x95, 0xe8, 0xff, 0xff, 0x90, 0xb9, 0x0d, 0x00, 0x00, 0x00, 0xe8, 0x4e, 0xec, 0xff, 0xff, 0xb9, 0x0c, 0x00, 0x00, 0x00, 0xe8, 0x44, 0xed, 0xff, 0xff, 0x90, 0x48, 0x8b, 0xbb, 0xc0, 0x00, 0x00, 0x00, 0x48, 0x85, 0xff, 0x74, 0x2b, 0x48, 0x8b, 0xcf, 0xe8, 0xf3, 0xfb, 0xff, 0xff, 0x48, 0x3b, 0x3d, 0x24, 0xd5, 0x00, 0x00, 0x74, 0x1a, 0x48, 0x8d, 0x05, 0xbb, 0xd3, 0x00, 0x00, 0x48, 0x3b, 0xf8, 0x74, 0x0e, 0x83, 0x3f, 0x00, 0x75, 0x09, 0x48, 0x8b, 0xcf, 0xe8, 0xbd, 0xf9, 0xff, 0xff, 0x90, 0xb9, 0x0c, 0x00, 0x00, 0x00, 0xe8, 0x02, 0xec, 0xff, 0xff, 0x48, 0x8b, 0xcb, 0xe8, 0x36, 0xe8, 0xff, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0xe8, 0xa5, 0xcf, 0xff, 0xff, 0xe8, 0xcc, 0xea, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x60, 0x48, 0x8d, 0x0d, 0xad, 0xfe, 0xff, 0xff, 0xff, 0x15, 0x5f, 0x97, 0x00, 0x00, 0x89, 0x05, 0xe1, 0xd4, 0x00, 0x00, 0x83, 0xf8, 0xff, 0x74, 0x48, 0xba, 0xc8, 0x02, 0x00, 0x00, 0xb9, 0x01, 0x00, 0x00, 0x00, 0xe8, 0x59, 0xe6, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x74, 0x31, 0x8b, 0x0d, 0xbf, 0xd4, 0x00, 0x00, 0x48, 0x8b, 0xd0, 0xff, 0x15, 0x0e, 0x97, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x1e, 0x33, 0xd2, 0x48, 0x8b, 0xcb, 0xe8, 0x0c, 0xfd, 0xff, 0xff, 0xff, 0x15, 0x12, 0x97, 0x00, 0x00, 0x48, 0x83, 0x4b, 0x08, 0xff, 0x89, 0x03, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x07, 0xe8, 0xcb, 0xfc, 0xff, 0xff, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x60, 0x48, 0x63, 0xf9, 0x8b, 0xea, 0x48, 0x8d, 0x4c, 0x24, 0x40, 0x49, 0x8b, 0xd0, 0xe8, 0xf3, 0xc8, 0xff, 0xff, 0x44, 0x8d, 0x5f, 0x01, 0x41, 0x81, 0xfb, 0x00, 0x01, 0x00, 0x00, 0x77, 0x15, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x48, 0x8b, 0x88, 0x40, 0x01, 0x00, 0x00, 0x0f, 0xb7, 0x04, 0x79, 0xe9, 0x9f, 0x00, 0x00, 0x00, 0x8b, 0xf7, 0x48, 0x8d, 0x54, 0x24, 0x40, 0xc1, 0xfe, 0x08, 0x40, 0x0f, 0xb6, 0xce, 0xe8, 0xb2, 0x14, 0x00, 0x00, 0xba, 0x01, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x1e, 0x40, 0x88, 0xb4, 0x24, 0x88, 0x00, 0x00, 0x00, 0x40, 0x88, 0xbc, 0x24, 0x89, 0x00, 0x00, 0x00, 0xc6, 0x84, 0x24, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x44, 0x8d, 0x4a, 0x01, 0xeb, 0x13, 0x40, 0x88, 0xbc, 0x24, 0x88, 0x00, 0x00, 0x00, 0xc6, 0x84, 0x24, 0x89, 0x00, 0x00, 0x00, 0x00, 0x44, 0x8b, 0xca, 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x89, 0x54, 0x24, 0x38, 0x4c, 0x8d, 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, 0x8b, 0x41, 0x14, 0x89, 0x44, 0x24, 0x30, 0x8b, 0x41, 0x04, 0x48, 0x8d, 0x4c, 0x24, 0x40, 0x89, 0x44, 0x24, 0x28, 0x48, 0x8d, 0x44, 0x24, 0x70, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x61, 0x30, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x16, 0x38, 0x44, 0x24, 0x58, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x50, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x33, 0xc0, 0xeb, 0x1a, 0x0f, 0xb7, 0x44, 0x24, 0x70, 0x23, 0xc5, 0x80, 0x7c, 0x24, 0x58, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x50, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x4c, 0x8d, 0x5c, 0x24, 0x60, 0x49, 0x8b, 0x6b, 0x18, 0x49, 0x8b, 0x73, 0x20, 0x49, 0x8b, 0xe3, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x10, 0x48, 0x89, 0x68, 0x18, 0x48, 0x89, 0x70, 0x20, 0x89, 0x48, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xca, 0x48, 0x8b, 0xda, 0xe8, 0xb6, 0xe1, 0xff, 0xff, 0x8b, 0x4b, 0x18, 0x48, 0x63, 0xf0, 0xf6, 0xc1, 0x82, 0x75, 0x17, 0xe8, 0xde, 0xe3, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x83, 0x4b, 0x18, 0x20, 0x83, 0xc8, 0xff, 0xe9, 0x34, 0x01, 0x00, 0x00, 0xf6, 0xc1, 0x40, 0x74, 0x0d, 0xe8, 0xc2, 0xe3, 0xff, 0xff, 0xc7, 0x00, 0x22, 0x00, 0x00, 0x00, 0xeb, 0xe2, 0x33, 0xff, 0xf6, 0xc1, 0x01, 0x74, 0x19, 0x89, 0x7b, 0x08, 0xf6, 0xc1, 0x10, 0x0f, 0x84, 0x89, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x43, 0x10, 0x83, 0xe1, 0xfe, 0x48, 0x89, 0x03, 0x89, 0x4b, 0x18, 0x8b, 0x43, 0x18, 0x89, 0x7b, 0x08, 0x83, 0xe0, 0xef, 0x83, 0xc8, 0x02, 0x89, 0x43, 0x18, 0xa9, 0x0c, 0x01, 0x00, 0x00, 0x75, 0x2f, 0xe8, 0x77, 0xbe, 0xff, 0xff, 0x48, 0x83, 0xc0, 0x30, 0x48, 0x3b, 0xd8, 0x74, 0x0e, 0xe8, 0x69, 0xbe, 0xff, 0xff, 0x48, 0x83, 0xc0, 0x60, 0x48, 0x3b, 0xd8, 0x75, 0x0b, 0x8b, 0xce, 0xe8, 0xdd, 0x12, 0x00, 0x00, 0x3b, 0xc7, 0x75, 0x08, 0x48, 0x8b, 0xcb, 0xe8, 0x45, 0x3b, 0x00, 0x00, 0xf7, 0x43, 0x18, 0x08, 0x01, 0x00, 0x00, 0x0f, 0x84, 0x8d, 0x00, 0x00, 0x00, 0x8b, 0x2b, 0x48, 0x8b, 0x53, 0x10, 0x2b, 0x6b, 0x10, 0x48, 0x8d, 0x42, 0x01, 0x48, 0x89, 0x03, 0x8b, 0x43, 0x24, 0xff, 0xc8, 0x3b, 0xef, 0x89, 0x43, 0x08, 0x7e, 0x19, 0x44, 0x8b, 0xc5, 0x8b, 0xce, 0xe8, 0x32, 0x21, 0x00, 0x00, 0x8b, 0xf8, 0xeb, 0x57, 0x83, 0xc9, 0x20, 0x89, 0x4b, 0x18, 0xe9, 0x3f, 0xff, 0xff, 0xff, 0x83, 0xfe, 0xff, 0x74, 0x23, 0x83, 0xfe, 0xfe, 0x74, 0x1e, 0x48, 0x8b, 0xce, 0x48, 0x8b, 0xc6, 0x48, 0x8d, 0x15, 0x14, 0xe7, 0x00, 0x00, 0x83, 0xe1, 0x1f, 0x48, 0xc1, 0xf8, 0x05, 0x48, 0x6b, 0xc9, 0x58, 0x48, 0x03, 0x0c, 0xc2, 0xeb, 0x07, 0x48, 0x8d, 0x0d, 0x6c, 0xc7, 0x00, 0x00, 0xf6, 0x41, 0x08, 0x20, 0x74, 0x17, 0x33, 0xd2, 0x8b, 0xce, 0x44, 0x8d, 0x42, 0x02, 0xe8, 0x89, 0x39, 0x00, 0x00, 0x48, 0x83, 0xf8, 0xff, 0x0f, 0x84, 0xef, 0xfe, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x10, 0x8a, 0x44, 0x24, 0x30, 0x88, 0x01, 0xeb, 0x16, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x54, 0x24, 0x30, 0x8b, 0xce, 0x44, 0x8b, 0xc5, 0xe8, 0xb7, 0x20, 0x00, 0x00, 0x8b, 0xf8, 0x3b, 0xfd, 0x0f, 0x85, 0xc5, 0xfe, 0xff, 0xff, 0x0f, 0xb6, 0x44, 0x24, 0x30, 0x48, 0x8b, 0x5c, 0x24, 0x38, 0x48, 0x8b, 0x6c, 0x24, 0x40, 0x48, 0x8b, 0x74, 0x24, 0x48, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x7c, 0x24, 0x18, 0x4c, 0x89, 0x6c, 0x24, 0x20, 0x41, 0x56, 0x48, 0x83, 0xec, 0x30, 0x4c, 0x8d, 0x35, 0xdc, 0xd1, 0x00, 0x00, 0x8b, 0xf9, 0x33, 0xdb, 0x49, 0x8b, 0xc6, 0x3b, 0x08, 0x74, 0x0b, 0xff, 0xc3, 0x48, 0x83, 0xc0, 0x10, 0x83, 0xfb, 0x17, 0x72, 0xf1, 0x83, 0xfb, 0x17, 0x0f, 0x83, 0xd4, 0x01, 0x00, 0x00, 0xb9, 0x03, 0x00, 0x00, 0x00, 0xe8, 0x73, 0x3c, 0x00, 0x00, 0x83, 0xf8, 0x01, 0x0f, 0x84, 0x7c, 0x01, 0x00, 0x00, 0xb9, 0x03, 0x00, 0x00, 0x00, 0xe8, 0x60, 0x3c, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x0d, 0x83, 0x3d, 0x8d, 0xc6, 0x00, 0x00, 0x01, 0x0f, 0x84, 0x61, 0x01, 0x00, 0x00, 0x81, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x0f, 0x84, 0x9a, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x6c, 0xe0, 0x00, 0x00, 0x41, 0xbd, 0x14, 0x03, 0x00, 0x00, 0x4c, 0x8d, 0x05, 0x5f, 0x9d, 0x00, 0x00, 0x48, 0x8b, 0xcf, 0x49, 0x8b, 0xd5, 0xe8, 0xf8, 0x35, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x15, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0xdb, 0xdf, 0xff, 0xff, 0x48, 0x8d, 0x15, 0x4d, 0xe0, 0x00, 0x00, 0x41, 0xb8, 0x04, 0x01, 0x00, 0x00, 0x33, 0xc9, 0xc6, 0x05, 0x42, 0xe1, 0x00, 0x00, 0x00, 0xff, 0x15, 0x77, 0x92, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x31, 0x4c, 0x8d, 0x05, 0xfc, 0x9c, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x26, 0xe0, 0x00, 0x00, 0xba, 0xfb, 0x02, 0x00, 0x00, 0xe8, 0xa7, 0x35, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x15, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x8a, 0xdf, 0xff, 0xff, 0x48, 0x8d, 0x0d, 0xfc, 0xdf, 0x00, 0x00, 0xe8, 0x0e, 0x12, 0x00, 0x00, 0x48, 0xff, 0xc0, 0x48, 0x83, 0xf8, 0x3c, 0x76, 0x46, 0x48, 0x8d, 0x0d, 0xe7, 0xdf, 0x00, 0x00, 0xe8, 0xf9, 0x11, 0x00, 0x00, 0x48, 0x8d, 0x15, 0xd6, 0xe2, 0x00, 0x00, 0x4c, 0x8d, 0x05, 0x9f, 0x9c, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x38, 0xde, 0x41, 0xb9, 0x03, 0x00, 0x00, 0x00, 0x48, 0x2b, 0xd1, 0xe8, 0x74, 0x34, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x15, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x2f, 0xdf, 0xff, 0xff, 0x4c, 0x8d, 0x05, 0x68, 0x9c, 0x00, 0x00, 0x49, 0x8b, 0xd5, 0x48, 0x8b, 0xcf, 0xe8, 0xbd, 0x33, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x15, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x04, 0xdf, 0xff, 0xff, 0x4c, 0x63, 0xc3, 0x49, 0x8b, 0xd5, 0x48, 0x8b, 0xcf, 0x4d, 0x03, 0xc0, 0x4f, 0x8b, 0x44, 0xc6, 0x08, 0xe8, 0x8e, 0x33, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x15, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0xd5, 0xde, 0xff, 0xff, 0x48, 0x8d, 0x15, 0xe6, 0x9b, 0x00, 0x00, 0x41, 0xb8, 0x10, 0x20, 0x01, 0x00, 0x48, 0x8b, 0xcf, 0xe8, 0xfc, 0x38, 0x00, 0x00, 0xeb, 0x45, 0xb9, 0xf4, 0xff, 0xff, 0xff, 0xff, 0x15, 0xbb, 0x91, 0x00, 0x00, 0x48, 0x8b, 0xf8, 0x48, 0x85, 0xc0, 0x74, 0x32, 0x48, 0x83, 0xf8, 0xff, 0x74, 0x2c, 0x48, 0x63, 0xdb, 0x48, 0x03, 0xdb, 0x49, 0x8b, 0x4c, 0xde, 0x08, 0xe8, 0x25, 0x11, 0x00, 0x00, 0x49, 0x8b, 0x54, 0xde, 0x08, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x4c, 0x8d, 0x4c, 0x24, 0x48, 0x4c, 0x8b, 0xc0, 0x48, 0x8b, 0xcf, 0xff, 0x15, 0x59, 0x92, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x7c, 0x24, 0x50, 0x4c, 0x8b, 0x6c, 0x24, 0x58, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5e, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0xb9, 0x03, 0x00, 0x00, 0x00, 0xe8, 0x82, 0x3a, 0x00, 0x00, 0x83, 0xf8, 0x01, 0x74, 0x17, 0xb9, 0x03, 0x00, 0x00, 0x00, 0xe8, 0x73, 0x3a, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x1d, 0x83, 0x3d, 0xa0, 0xc4, 0x00, 0x00, 0x01, 0x75, 0x14, 0xb9, 0xfc, 0x00, 0x00, 0x00, 0xe8, 0xa4, 0xfd, 0xff, 0xff, 0xb9, 0xff, 0x00, 0x00, 0x00, 0xe8, 0x9a, 0xfd, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0xba, 0x08, 0x00, 0x00, 0x00, 0x8d, 0x4a, 0x18, 0xe8, 0xf5, 0xe0, 0xff, 0xff, 0x48, 0x8b, 0xc8, 0x48, 0x8b, 0xd8, 0xe8, 0x7e, 0xf7, 0xff, 0xff, 0x48, 0x89, 0x05, 0x27, 0xe6, 0x00, 0x00, 0x48, 0x89, 0x05, 0x18, 0xe6, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x75, 0x05, 0x8d, 0x43, 0x18, 0xeb, 0x06, 0x48, 0x83, 0x23, 0x00, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x48, 0x89, 0x7c, 0x24, 0x18, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x48, 0x83, 0xec, 0x20, 0x4c, 0x8b, 0xf1, 0xe8, 0xc3, 0xc6, 0xff, 0xff, 0x90, 0x48, 0x8b, 0x0d, 0xdf, 0xe5, 0x00, 0x00, 0xe8, 0x3e, 0xf7, 0xff, 0xff, 0x4c, 0x8b, 0xe0, 0x48, 0x8b, 0x0d, 0xc8, 0xe5, 0x00, 0x00, 0xe8, 0x2f, 0xf7, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x49, 0x3b, 0xc4, 0x0f, 0x82, 0x98, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xf8, 0x49, 0x2b, 0xfc, 0x4c, 0x8d, 0x6f, 0x08, 0x49, 0x83, 0xfd, 0x08, 0x0f, 0x82, 0x84, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xcc, 0xe8, 0xf3, 0x39, 0x00, 0x00, 0x48, 0x8b, 0xf0, 0x49, 0x3b, 0xc5, 0x73, 0x54, 0xba, 0x00, 0x10, 0x00, 0x00, 0x48, 0x3b, 0xc2, 0x48, 0x0f, 0x42, 0xd0, 0x48, 0x03, 0xd0, 0x48, 0x3b, 0xd0, 0x72, 0x11, 0x49, 0x8b, 0xcc, 0xe8, 0xbf, 0xe0, 0xff, 0xff, 0x33, 0xdb, 0x48, 0x3b, 0xc3, 0x75, 0x1a, 0xeb, 0x02, 0x33, 0xdb, 0x48, 0x8d, 0x56, 0x20, 0x48, 0x3b, 0xd6, 0x72, 0x46, 0x49, 0x8b, 0xcc, 0xe8, 0xa3, 0xe0, 0xff, 0xff, 0x48, 0x3b, 0xc3, 0x74, 0x39, 0x48, 0xc1, 0xff, 0x03, 0x48, 0x8d, 0x1c, 0xf8, 0x48, 0x8b, 0xc8, 0xe8, 0x9e, 0xf6, 0xff, 0xff, 0x48, 0x89, 0x05, 0x47, 0xe5, 0x00, 0x00, 0x49, 0x8b, 0xce, 0xe8, 0x8f, 0xf6, 0xff, 0xff, 0x48, 0x89, 0x03, 0x48, 0x8d, 0x4b, 0x08, 0xe8, 0x83, 0xf6, 0xff, 0xff, 0x48, 0x89, 0x05, 0x24, 0xe5, 0x00, 0x00, 0x49, 0x8b, 0xde, 0xeb, 0x02, 0x33, 0xdb, 0xe8, 0x08, 0xc6, 0xff, 0xff, 0x48, 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x74, 0x24, 0x48, 0x48, 0x8b, 0x7c, 0x24, 0x50, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0xe8, 0xef, 0xfe, 0xff, 0xff, 0x48, 0xf7, 0xd8, 0x1b, 0xc0, 0xf7, 0xd8, 0xff, 0xc8, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8d, 0x1d, 0x97, 0xa5, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x90, 0xa5, 0x00, 0x00, 0xeb, 0x0e, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x74, 0x02, 0xff, 0xd0, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x3b, 0xdf, 0x72, 0xed, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8d, 0x1d, 0x6f, 0xa5, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x68, 0xa5, 0x00, 0x00, 0xeb, 0x0e, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x74, 0x02, 0xff, 0xd0, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x3b, 0xdf, 0x72, 0xed, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8d, 0x1d, 0x17, 0xcf, 0x00, 0x00, 0xbf, 0x0a, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0b, 0xe8, 0xaa, 0xf5, 0xff, 0xff, 0x48, 0x89, 0x03, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x83, 0xef, 0x01, 0x75, 0xeb, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x8b, 0xc1, 0xb9, 0x4d, 0x5a, 0x00, 0x00, 0x66, 0x39, 0x08, 0x74, 0x03, 0x33, 0xc0, 0xc3, 0x48, 0x63, 0x48, 0x3c, 0x48, 0x03, 0xc8, 0x33, 0xc0, 0x81, 0x39, 0x50, 0x45, 0x00, 0x00, 0x75, 0x0c, 0xba, 0x0b, 0x02, 0x00, 0x00, 0x66, 0x39, 0x51, 0x18, 0x0f, 0x94, 0xc0, 0xf3, 0xc3, 0xcc, 0x4c, 0x63, 0x41, 0x3c, 0x45, 0x33, 0xc9, 0x4c, 0x8b, 0xd2, 0x4c, 0x03, 0xc1, 0x41, 0x0f, 0xb7, 0x40, 0x14, 0x45, 0x0f, 0xb7, 0x58, 0x06, 0x4a, 0x8d, 0x4c, 0x00, 0x18, 0x45, 0x85, 0xdb, 0x74, 0x1e, 0x8b, 0x51, 0x0c, 0x4c, 0x3b, 0xd2, 0x72, 0x0a, 0x8b, 0x41, 0x08, 0x03, 0xc2, 0x4c, 0x3b, 0xd0, 0x72, 0x0f, 0x41, 0xff, 0xc1, 0x48, 0x83, 0xc1, 0x28, 0x45, 0x3b, 0xcb, 0x72, 0xe2, 0x33, 0xc0, 0xc3, 0x48, 0x8b, 0xc1, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x4c, 0x8b, 0xc1, 0x4c, 0x8d, 0x0d, 0x12, 0x9e, 0xff, 0xff, 0x49, 0x8b, 0xc9, 0xe8, 0x6a, 0xff, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x22, 0x4d, 0x2b, 0xc1, 0x49, 0x8b, 0xd0, 0x49, 0x8b, 0xc9, 0xe8, 0x88, 0xff, 0xff, 0xff, 0x48, 0x85, 0xc0, 0x74, 0x0f, 0x8b, 0x40, 0x24, 0xc1, 0xe8, 0x1f, 0xf7, 0xd0, 0x83, 0xe0, 0x01, 0xeb, 0x02, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0xe8, 0x3f, 0xf6, 0xff, 0xff, 0x48, 0x8b, 0x88, 0xd0, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc9, 0x74, 0x04, 0xff, 0xd1, 0xeb, 0x00, 0xe8, 0x02, 0x38, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x48, 0x8d, 0x0d, 0xd1, 0xff, 0xff, 0xff, 0xe8, 0x98, 0xf4, 0xff, 0xff, 0x48, 0x89, 0x05, 0x89, 0xde, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xc2, 0x00, 0x00, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xf2, 0x8b, 0xf9, 0xe8, 0x62, 0xf5, 0xff, 0xff, 0x45, 0x33, 0xdb, 0x48, 0x8b, 0xd8, 0x49, 0x3b, 0xc3, 0x0f, 0x84, 0x8a, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x88, 0xa0, 0x00, 0x00, 0x00, 0x4c, 0x63, 0x05, 0x09, 0xce, 0x00, 0x00, 0x48, 0x8b, 0xd1, 0x39, 0x3a, 0x74, 0x13, 0x49, 0x8b, 0xc0, 0x48, 0x83, 0xc2, 0x10, 0x48, 0xc1, 0xe0, 0x04, 0x48, 0x03, 0xc1, 0x48, 0x3b, 0xd0, 0x72, 0xe9, 0x49, 0x8b, 0xc0, 0x48, 0xc1, 0xe0, 0x04, 0x48, 0x03, 0xc1, 0x48, 0x3b, 0xd0, 0x73, 0x04, 0x39, 0x3a, 0x74, 0x03, 0x49, 0x8b, 0xd3, 0x49, 0x3b, 0xd3, 0x0f, 0x84, 0x43, 0x01, 0x00, 0x00, 0x4c, 0x8b, 0x42, 0x08, 0x4d, 0x3b, 0xc3, 0x0f, 0x84, 0x36, 0x01, 0x00, 0x00, 0x49, 0x83, 0xf8, 0x05, 0x75, 0x0d, 0x4c, 0x89, 0x5a, 0x08, 0x41, 0x8d, 0x40, 0xfc, 0xe9, 0x25, 0x01, 0x00, 0x00, 0x49, 0x83, 0xf8, 0x01, 0x75, 0x08, 0x83, 0xc8, 0xff, 0xe9, 0x17, 0x01, 0x00, 0x00, 0x48, 0x8b, 0xab, 0xa8, 0x00, 0x00, 0x00, 0x48, 0x89, 0xb3, 0xa8, 0x00, 0x00, 0x00, 0x8b, 0x4a, 0x04, 0x83, 0xf9, 0x08, 0x0f, 0x85, 0xe8, 0x00, 0x00, 0x00, 0x4c, 0x63, 0x15, 0x75, 0xcd, 0x00, 0x00, 0x8b, 0x0d, 0x73, 0xcd, 0x00, 0x00, 0x41, 0x03, 0xca, 0x4d, 0x8b, 0xca, 0x44, 0x3b, 0xd1, 0x7d, 0x2a, 0x49, 0xc1, 0xe1, 0x04, 0x48, 0x8b, 0x83, 0xa0, 0x00, 0x00, 0x00, 0x41, 0xff, 0xc2, 0x49, 0x83, 0xc1, 0x10, 0x4d, 0x89, 0x5c, 0x01, 0xf8, 0x8b, 0x0d, 0x47, 0xcd, 0x00, 0x00, 0x8b, 0x05, 0x45, 0xcd, 0x00, 0x00, 0x03, 0xc8, 0x44, 0x3b, 0xd1, 0x7c, 0xda, 0x81, 0x3a, 0x8e, 0x00, 0x00, 0xc0, 0x8b, 0xbb, 0xb0, 0x00, 0x00, 0x00, 0x75, 0x0c, 0xc7, 0x83, 0xb0, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0xeb, 0x76, 0x81, 0x3a, 0x90, 0x00, 0x00, 0xc0, 0x75, 0x0c, 0xc7, 0x83, 0xb0, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0xeb, 0x62, 0x81, 0x3a, 0x91, 0x00, 0x00, 0xc0, 0x75, 0x0c, 0xc7, 0x83, 0xb0, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0xeb, 0x4e, 0x81, 0x3a, 0x93, 0x00, 0x00, 0xc0, 0x75, 0x0c, 0xc7, 0x83, 0xb0, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0xeb, 0x3a, 0x81, 0x3a, 0x8d, 0x00, 0x00, 0xc0, 0x75, 0x0c, 0xc7, 0x83, 0xb0, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0xeb, 0x26, 0x81, 0x3a, 0x8f, 0x00, 0x00, 0xc0, 0x75, 0x0c, 0xc7, 0x83, 0xb0, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0xeb, 0x12, 0x81, 0x3a, 0x92, 0x00, 0x00, 0xc0, 0x75, 0x0a, 0xc7, 0x83, 0xb0, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x8b, 0x93, 0xb0, 0x00, 0x00, 0x00, 0xb9, 0x08, 0x00, 0x00, 0x00, 0x41, 0xff, 0xd0, 0x89, 0xbb, 0xb0, 0x00, 0x00, 0x00, 0xeb, 0x07, 0x4c, 0x89, 0x5a, 0x08, 0x41, 0xff, 0xd0, 0x48, 0x89, 0xab, 0xa8, 0x00, 0x00, 0x00, 0xe9, 0xe3, 0xfe, 0xff, 0xff, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x0d, 0xb1, 0xdc, 0x00, 0x00, 0x48, 0x89, 0x0d, 0xb2, 0xdc, 0x00, 0x00, 0x48, 0x89, 0x0d, 0xb3, 0xdc, 0x00, 0x00, 0x48, 0x89, 0x0d, 0xb4, 0xdc, 0x00, 0x00, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x8b, 0x0d, 0xa1, 0xdc, 0x00, 0x00, 0xe9, 0xa0, 0xf2, 0xff, 0xff, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x40, 0x8b, 0xd9, 0x33, 0xff, 0x89, 0x7c, 0x24, 0x70, 0x33, 0xf6, 0x8b, 0xd1, 0x83, 0xea, 0x02, 0x0f, 0x84, 0x09, 0x01, 0x00, 0x00, 0x83, 0xea, 0x02, 0x0f, 0x84, 0xa2, 0x00, 0x00, 0x00, 0x83, 0xea, 0x02, 0x0f, 0x84, 0x80, 0x00, 0x00, 0x00, 0x83, 0xea, 0x02, 0x0f, 0x84, 0x90, 0x00, 0x00, 0x00, 0x83, 0xea, 0x03, 0x0f, 0x84, 0x87, 0x00, 0x00, 0x00, 0x83, 0xea, 0x04, 0x74, 0x4d, 0x83, 0xea, 0x06, 0x74, 0x2c, 0x83, 0xfa, 0x01, 0x74, 0x5f, 0xe8, 0xa0, 0xda, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0x48, 0x21, 0x74, 0x24, 0x20, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0xb6, 0xd9, 0xff, 0xff, 0x83, 0xc8, 0xff, 0xe9, 0xd1, 0x01, 0x00, 0x00, 0x4c, 0x8d, 0x25, 0x07, 0xdc, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x00, 0xdc, 0x00, 0x00, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x89, 0x7c, 0x24, 0x70, 0xe9, 0xaa, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x25, 0xfb, 0xdb, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0xf4, 0xdb, 0x00, 0x00, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x89, 0x7c, 0x24, 0x70, 0xe9, 0x8e, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x25, 0xd7, 0xdb, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0xd0, 0xdb, 0x00, 0x00, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x89, 0x7c, 0x24, 0x70, 0xeb, 0x75, 0xe8, 0xa8, 0xf2, 0xff, 0xff, 0x48, 0x8b, 0xf0, 0x48, 0x85, 0xc0, 0x75, 0x08, 0x83, 0xc8, 0xff, 0xe9, 0x6b, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x90, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xca, 0x4c, 0x63, 0x05, 0x4b, 0xcb, 0x00, 0x00, 0x39, 0x59, 0x04, 0x74, 0x13, 0x48, 0x83, 0xc1, 0x10, 0x49, 0x8b, 0xc0, 0x48, 0xc1, 0xe0, 0x04, 0x48, 0x03, 0xc2, 0x48, 0x3b, 0xc8, 0x72, 0xe8, 0x49, 0x8b, 0xc0, 0x48, 0xc1, 0xe0, 0x04, 0x48, 0x03, 0xc2, 0x48, 0x3b, 0xc8, 0x73, 0x05, 0x39, 0x59, 0x04, 0x74, 0x02, 0x33, 0xc9, 0x4c, 0x8d, 0x61, 0x08, 0x4d, 0x8b, 0x2c, 0x24, 0xeb, 0x1f, 0x4c, 0x8d, 0x25, 0x50, 0xdb, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x49, 0xdb, 0x00, 0x00, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x89, 0x7c, 0x24, 0x70, 0xe8, 0x4f, 0xf1, 0xff, 0xff, 0x4c, 0x8b, 0xe8, 0x49, 0x83, 0xfd, 0x01, 0x75, 0x07, 0x33, 0xc0, 0xe9, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xed, 0x75, 0x0a, 0x41, 0x8d, 0x4d, 0x03, 0xe8, 0x79, 0xc3, 0xff, 0xff, 0xcc, 0x85, 0xff, 0x74, 0x08, 0x33, 0xc9, 0xe8, 0xd5, 0xe0, 0xff, 0xff, 0x90, 0x83, 0xfb, 0x08, 0x74, 0x16, 0x83, 0xfb, 0x0b, 0x74, 0x11, 0x83, 0xfb, 0x04, 0x74, 0x0c, 0x4c, 0x8b, 0x7c, 0x24, 0x38, 0x44, 0x8b, 0x74, 0x24, 0x70, 0xeb, 0x31, 0x4c, 0x8b, 0xbe, 0xa8, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x7c, 0x24, 0x38, 0x48, 0x83, 0xa6, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x83, 0xfb, 0x08, 0x75, 0x13, 0x44, 0x8b, 0xb6, 0xb0, 0x00, 0x00, 0x00, 0xc7, 0x86, 0xb0, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0xeb, 0x05, 0x44, 0x8b, 0x74, 0x24, 0x70, 0x83, 0xfb, 0x08, 0x75, 0x39, 0x8b, 0x0d, 0x69, 0xca, 0x00, 0x00, 0x8b, 0xd1, 0x89, 0x4c, 0x24, 0x30, 0x8b, 0x05, 0x61, 0xca, 0x00, 0x00, 0x03, 0xc8, 0x3b, 0xd1, 0x7d, 0x2a, 0x48, 0x63, 0xca, 0x48, 0x03, 0xc9, 0x48, 0x8b, 0x86, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x83, 0x64, 0xc8, 0x08, 0x00, 0xff, 0xc2, 0x89, 0x54, 0x24, 0x30, 0x8b, 0x0d, 0x38, 0xca, 0x00, 0x00, 0xeb, 0xd3, 0xe8, 0x89, 0xf0, 0xff, 0xff, 0x49, 0x89, 0x04, 0x24, 0x85, 0xff, 0x74, 0x07, 0x33, 0xc9, 0xe8, 0x36, 0xdf, 0xff, 0xff, 0xbf, 0x08, 0x00, 0x00, 0x00, 0x3b, 0xdf, 0x75, 0x0d, 0x8b, 0x96, 0xb0, 0x00, 0x00, 0x00, 0x8b, 0xcf, 0x41, 0xff, 0xd5, 0xeb, 0x05, 0x8b, 0xcb, 0x41, 0xff, 0xd5, 0x3b, 0xdf, 0x74, 0x0a, 0x83, 0xfb, 0x0b, 0x74, 0x05, 0x83, 0xfb, 0x04, 0x75, 0x12, 0x4c, 0x89, 0xbe, 0xa8, 0x00, 0x00, 0x00, 0x3b, 0xdf, 0x75, 0x07, 0x44, 0x89, 0xb6, 0xb0, 0x00, 0x00, 0x00, 0x33, 0xc0, 0x4c, 0x8d, 0x5c, 0x24, 0x40, 0x49, 0x8b, 0x5b, 0x38, 0x49, 0x8b, 0x73, 0x40, 0x49, 0x8b, 0xe3, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x0d, 0x39, 0xda, 0x00, 0x00, 0xc3, 0x48, 0x89, 0x0d, 0x41, 0xda, 0x00, 0x00, 0xc3, 0x48, 0x89, 0x0d, 0x41, 0xda, 0x00, 0x00, 0xc3, 0x48, 0x83, 0xec, 0x38, 0xff, 0x15, 0x66, 0x8a, 0x00, 0x00, 0x44, 0x8b, 0xd8, 0x89, 0x44, 0x24, 0x20, 0xeb, 0x1a, 0x3d, 0x17, 0x00, 0x00, 0xc0, 0x75, 0x0b, 0xb9, 0x08, 0x00, 0x00, 0x00, 0xff, 0x15, 0x23, 0x8a, 0x00, 0x00, 0x45, 0x33, 0xdb, 0x44, 0x89, 0x5c, 0x24, 0x20, 0x41, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x0d, 0x09, 0xda, 0x00, 0x00, 0xc3, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x48, 0x8b, 0x0d, 0xf8, 0xd9, 0x00, 0x00, 0xe8, 0xbf, 0xef, 0xff, 0xff, 0x48, 0x85, 0xc0, 0x74, 0x10, 0x48, 0x8b, 0xcb, 0xff, 0xd0, 0x85, 0xc0, 0x74, 0x07, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x02, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x48, 0x8b, 0x01, 0x81, 0x38, 0x63, 0x73, 0x6d, 0xe0, 0x75, 0x2b, 0x83, 0x78, 0x18, 0x04, 0x75, 0x25, 0x8b, 0x40, 0x20, 0x3d, 0x20, 0x05, 0x93, 0x19, 0x74, 0x15, 0x3d, 0x21, 0x05, 0x93, 0x19, 0x74, 0x0e, 0x3d, 0x22, 0x05, 0x93, 0x19, 0x74, 0x07, 0x3d, 0x00, 0x40, 0x99, 0x01, 0x75, 0x06, 0xe8, 0x87, 0xfa, 0xff, 0xff, 0xcc, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x48, 0x8d, 0x0d, 0xb1, 0xff, 0xff, 0xff, 0xff, 0x15, 0xf7, 0x88, 0x00, 0x00, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x30, 0x83, 0x3d, 0xcd, 0xdd, 0x00, 0x00, 0x00, 0x75, 0x05, 0xe8, 0x5a, 0xeb, 0xff, 0xff, 0x48, 0x8b, 0x1d, 0xb7, 0xcd, 0x00, 0x00, 0x33, 0xff, 0x48, 0x85, 0xdb, 0x75, 0x1b, 0x83, 0xc8, 0xff, 0xe9, 0xc9, 0x00, 0x00, 0x00, 0x3c, 0x3d, 0x74, 0x02, 0xff, 0xc7, 0x48, 0x8b, 0xcb, 0xe8, 0xfa, 0x07, 0x00, 0x00, 0x48, 0x8d, 0x5c, 0x03, 0x01, 0x8a, 0x03, 0x84, 0xc0, 0x75, 0xe7, 0x8d, 0x47, 0x01, 0xba, 0x08, 0x00, 0x00, 0x00, 0x48, 0x63, 0xc8, 0xe8, 0x3b, 0xd8, 0xff, 0xff, 0x48, 0x8b, 0xf8, 0x48, 0x89, 0x05, 0x35, 0xcd, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0xc0, 0x48, 0x8b, 0x1d, 0x69, 0xcd, 0x00, 0x00, 0x80, 0x3b, 0x00, 0x74, 0x65, 0x48, 0x8b, 0xcb, 0xe8, 0xbc, 0x07, 0x00, 0x00, 0x80, 0x3b, 0x3d, 0x8d, 0x70, 0x01, 0x74, 0x43, 0x48, 0x63, 0xee, 0xba, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcd, 0xe8, 0x00, 0xd8, 0xff, 0xff, 0x48, 0x89, 0x07, 0x48, 0x85, 0xc0, 0x74, 0x72, 0x4c, 0x8b, 0xc3, 0x48, 0x8b, 0xd5, 0x48, 0x8b, 0xc8, 0xe8, 0x02, 0x2b, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x15, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0xe5, 0xd4, 0xff, 0xff, 0x48, 0x83, 0xc7, 0x08, 0x48, 0x63, 0xc6, 0x48, 0x03, 0xd8, 0x80, 0x3b, 0x00, 0x75, 0xa2, 0x48, 0x8b, 0x1d, 0xff, 0xcc, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0x47, 0xd9, 0xff, 0xff, 0x48, 0x83, 0x25, 0xef, 0xcc, 0x00, 0x00, 0x00, 0x48, 0x83, 0x27, 0x00, 0xc7, 0x05, 0xd1, 0xdc, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x6c, 0x24, 0x48, 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x83, 0xc4, 0x30, 0x5f, 0xc3, 0x48, 0x8b, 0x0d, 0x83, 0xcc, 0x00, 0x00, 0xe8, 0x0e, 0xd9, 0xff, 0xff, 0x48, 0x83, 0x25, 0x76, 0xcc, 0x00, 0x00, 0x00, 0xe9, 0x01, 0xff, 0xff, 0xff, 0xcc, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x48, 0x83, 0xec, 0x20, 0x4c, 0x8b, 0x6c, 0x24, 0x60, 0x4d, 0x8b, 0xf1, 0x49, 0x8b, 0xf8, 0x41, 0x83, 0x65, 0x00, 0x00, 0x4c, 0x8b, 0xe2, 0x48, 0x8b, 0xd9, 0x41, 0xc7, 0x01, 0x01, 0x00, 0x00, 0x00, 0x48, 0x85, 0xd2, 0x74, 0x07, 0x4c, 0x89, 0x02, 0x49, 0x83, 0xc4, 0x08, 0x33, 0xed, 0x80, 0x3b, 0x22, 0x75, 0x11, 0x33, 0xc0, 0x85, 0xed, 0x40, 0xb6, 0x22, 0x0f, 0x94, 0xc0, 0x48, 0xff, 0xc3, 0x8b, 0xe8, 0xeb, 0x39, 0x41, 0xff, 0x45, 0x00, 0x48, 0x85, 0xff, 0x74, 0x07, 0x8a, 0x03, 0x88, 0x07, 0x48, 0xff, 0xc7, 0x0f, 0xb6, 0x33, 0x48, 0xff, 0xc3, 0x8b, 0xce, 0xe8, 0x29, 0xe0, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x13, 0x41, 0xff, 0x45, 0x00, 0x48, 0x85, 0xff, 0x74, 0x07, 0x8a, 0x03, 0x88, 0x07, 0x48, 0xff, 0xc7, 0x48, 0xff, 0xc3, 0x40, 0x84, 0xf6, 0x74, 0x1b, 0x85, 0xed, 0x75, 0xad, 0x40, 0x80, 0xfe, 0x20, 0x74, 0x06, 0x40, 0x80, 0xfe, 0x09, 0x75, 0xa1, 0x48, 0x85, 0xff, 0x74, 0x09, 0xc6, 0x47, 0xff, 0x00, 0xeb, 0x03, 0x48, 0xff, 0xcb, 0x33, 0xf6, 0x80, 0x3b, 0x00, 0x0f, 0x84, 0xe3, 0x00, 0x00, 0x00, 0x80, 0x3b, 0x20, 0x74, 0x05, 0x80, 0x3b, 0x09, 0x75, 0x05, 0x48, 0xff, 0xc3, 0xeb, 0xf1, 0x80, 0x3b, 0x00, 0x0f, 0x84, 0xcb, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xe4, 0x74, 0x08, 0x49, 0x89, 0x3c, 0x24, 0x49, 0x83, 0xc4, 0x08, 0x41, 0xff, 0x06, 0xba, 0x01, 0x00, 0x00, 0x00, 0x33, 0xc9, 0xeb, 0x05, 0x48, 0xff, 0xc3, 0xff, 0xc1, 0x80, 0x3b, 0x5c, 0x74, 0xf6, 0x80, 0x3b, 0x22, 0x75, 0x36, 0x84, 0xca, 0x75, 0x1d, 0x85, 0xf6, 0x74, 0x0e, 0x48, 0x8d, 0x43, 0x01, 0x80, 0x38, 0x22, 0x75, 0x05, 0x48, 0x8b, 0xd8, 0xeb, 0x0b, 0x33, 0xc0, 0x33, 0xd2, 0x85, 0xf6, 0x0f, 0x94, 0xc0, 0x8b, 0xf0, 0xd1, 0xe9, 0xeb, 0x11, 0xff, 0xc9, 0x48, 0x85, 0xff, 0x74, 0x06, 0xc6, 0x07, 0x5c, 0x48, 0xff, 0xc7, 0x41, 0xff, 0x45, 0x00, 0x85, 0xc9, 0x75, 0xeb, 0x8a, 0x03, 0x84, 0xc0, 0x74, 0x4f, 0x85, 0xf6, 0x75, 0x08, 0x3c, 0x20, 0x74, 0x47, 0x3c, 0x09, 0x74, 0x43, 0x85, 0xd2, 0x74, 0x37, 0x0f, 0xbe, 0xc8, 0xe8, 0x4c, 0xdf, 0xff, 0xff, 0x48, 0x85, 0xff, 0x74, 0x1b, 0x85, 0xc0, 0x74, 0x0e, 0x8a, 0x03, 0x48, 0xff, 0xc3, 0x88, 0x07, 0x48, 0xff, 0xc7, 0x41, 0xff, 0x45, 0x00, 0x8a, 0x03, 0x88, 0x07, 0x48, 0xff, 0xc7, 0xeb, 0x0b, 0x85, 0xc0, 0x74, 0x07, 0x48, 0xff, 0xc3, 0x41, 0xff, 0x45, 0x00, 0x41, 0xff, 0x45, 0x00, 0x48, 0xff, 0xc3, 0xe9, 0x59, 0xff, 0xff, 0xff, 0x48, 0x85, 0xff, 0x74, 0x06, 0xc6, 0x07, 0x00, 0x48, 0xff, 0xc7, 0x41, 0xff, 0x45, 0x00, 0xe9, 0x14, 0xff, 0xff, 0xff, 0x4d, 0x85, 0xe4, 0x74, 0x05, 0x49, 0x83, 0x24, 0x24, 0x00, 0x41, 0xff, 0x06, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x6c, 0x24, 0x48, 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x8b, 0x7c, 0x24, 0x58, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x18, 0x48, 0x89, 0x74, 0x24, 0x20, 0x57, 0x48, 0x83, 0xec, 0x30, 0x83, 0x3d, 0xd2, 0xda, 0x00, 0x00, 0x00, 0x75, 0x05, 0xe8, 0x5f, 0xe8, 0xff, 0xff, 0x48, 0x8d, 0x3d, 0x5c, 0xd6, 0x00, 0x00, 0x41, 0xb8, 0x04, 0x01, 0x00, 0x00, 0x33, 0xc9, 0x48, 0x8b, 0xd7, 0xc6, 0x05, 0x4e, 0xd7, 0x00, 0x00, 0x00, 0xff, 0x15, 0x2c, 0x85, 0x00, 0x00, 0x48, 0x8b, 0x1d, 0x85, 0xda, 0x00, 0x00, 0x48, 0x89, 0x3d, 0x76, 0xca, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x74, 0x05, 0x80, 0x3b, 0x00, 0x75, 0x03, 0x48, 0x8b, 0xdf, 0x48, 0x8d, 0x44, 0x24, 0x48, 0x4c, 0x8d, 0x4c, 0x24, 0x40, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x48, 0x8b, 0xcb, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0xbd, 0xfd, 0xff, 0xff, 0x48, 0x63, 0x74, 0x24, 0x40, 0x48, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x48, 0x3b, 0xf1, 0x73, 0x5c, 0x48, 0x63, 0x4c, 0x24, 0x48, 0x48, 0x83, 0xf9, 0xff, 0x73, 0x51, 0x48, 0x8d, 0x14, 0xf1, 0x48, 0x3b, 0xd1, 0x72, 0x48, 0x48, 0x8b, 0xca, 0xe8, 0x8d, 0xd4, 0xff, 0xff, 0x48, 0x8b, 0xf8, 0x48, 0x85, 0xc0, 0x74, 0x38, 0x4c, 0x8d, 0x04, 0xf0, 0x48, 0x8d, 0x44, 0x24, 0x48, 0x4c, 0x8d, 0x4c, 0x24, 0x40, 0x48, 0x8b, 0xd7, 0x48, 0x8b, 0xcb, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x67, 0xfd, 0xff, 0xff, 0x44, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x89, 0x3d, 0xbb, 0xc9, 0x00, 0x00, 0x41, 0xff, 0xcb, 0x33, 0xc0, 0x44, 0x89, 0x1d, 0xab, 0xc9, 0x00, 0x00, 0xeb, 0x03, 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x50, 0x48, 0x8b, 0x74, 0x24, 0x58, 0x48, 0x83, 0xc4, 0x30, 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, 0x54, 0x48, 0x83, 0xec, 0x40, 0x8b, 0x0d, 0x71, 0xd6, 0x00, 0x00, 0x45, 0x33, 0xe4, 0x49, 0x8b, 0xdc, 0x41, 0x8d, 0x74, 0x24, 0x02, 0x41, 0x3b, 0xcc, 0x75, 0x32, 0xff, 0x15, 0x9b, 0x85, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x49, 0x3b, 0xc4, 0x74, 0x0c, 0xc7, 0x05, 0x49, 0xd6, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x21, 0xff, 0x15, 0xd1, 0x84, 0x00, 0x00, 0x8b, 0x0d, 0x3b, 0xd6, 0x00, 0x00, 0x83, 0xf8, 0x78, 0x0f, 0x44, 0xce, 0x89, 0x0d, 0x2f, 0xd6, 0x00, 0x00, 0x83, 0xf9, 0x01, 0x0f, 0x85, 0xba, 0x00, 0x00, 0x00, 0x49, 0x3b, 0xdc, 0x75, 0x15, 0xff, 0x15, 0x5b, 0x85, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x49, 0x3b, 0xc4, 0x75, 0x07, 0x33, 0xc0, 0xe9, 0x13, 0x01, 0x00, 0x00, 0x48, 0x8b, 0xfb, 0x66, 0x44, 0x39, 0x23, 0x74, 0x12, 0x48, 0x03, 0xfe, 0x66, 0x44, 0x39, 0x27, 0x75, 0xf7, 0x48, 0x03, 0xfe, 0x66, 0x44, 0x39, 0x27, 0x75, 0xee, 0x4c, 0x89, 0x64, 0x24, 0x38, 0x4c, 0x89, 0x64, 0x24, 0x30, 0x48, 0x2b, 0xfb, 0x48, 0xd1, 0xff, 0x4c, 0x8b, 0xc3, 0x33, 0xd2, 0x44, 0x8d, 0x4f, 0x01, 0x33, 0xc9, 0x44, 0x89, 0x64, 0x24, 0x28, 0x4c, 0x89, 0x64, 0x24, 0x20, 0xff, 0x15, 0xfe, 0x84, 0x00, 0x00, 0x48, 0x63, 0xe8, 0x41, 0x3b, 0xec, 0x74, 0x41, 0x48, 0x8b, 0xcd, 0xe8, 0x5e, 0xd3, 0xff, 0xff, 0x48, 0x8b, 0xf0, 0x49, 0x3b, 0xc4, 0x74, 0x31, 0x4c, 0x89, 0x64, 0x24, 0x38, 0x4c, 0x89, 0x64, 0x24, 0x30, 0x44, 0x8d, 0x4f, 0x01, 0x4c, 0x8b, 0xc3, 0x33, 0xd2, 0x33, 0xc9, 0x89, 0x6c, 0x24, 0x28, 0x48, 0x89, 0x44, 0x24, 0x20, 0xff, 0x15, 0xc2, 0x84, 0x00, 0x00, 0x41, 0x3b, 0xc4, 0x75, 0x0b, 0x48, 0x8b, 0xce, 0xe8, 0x25, 0xd5, 0xff, 0xff, 0x49, 0x8b, 0xf4, 0x48, 0x8b, 0xcb, 0xff, 0x15, 0xa1, 0x84, 0x00, 0x00, 0x48, 0x8b, 0xc6, 0xeb, 0x73, 0x3b, 0xce, 0x74, 0x09, 0x41, 0x3b, 0xcc, 0x0f, 0x85, 0x4c, 0xff, 0xff, 0xff, 0xff, 0x15, 0x81, 0x84, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0x49, 0x3b, 0xc4, 0x0f, 0x84, 0x3a, 0xff, 0xff, 0xff, 0x44, 0x38, 0x20, 0x74, 0x10, 0x48, 0xff, 0xc0, 0x44, 0x38, 0x20, 0x75, 0xf8, 0x48, 0xff, 0xc0, 0x44, 0x38, 0x20, 0x75, 0xf0, 0x2b, 0xc3, 0xff, 0xc0, 0x48, 0x63, 0xf0, 0x48, 0x8b, 0xce, 0xe8, 0xd1, 0xd2, 0xff, 0xff, 0x48, 0x8b, 0xf8, 0x49, 0x3b, 0xc4, 0x75, 0x0e, 0x48, 0x8b, 0xcb, 0xff, 0x15, 0x38, 0x84, 0x00, 0x00, 0xe9, 0x00, 0xff, 0xff, 0xff, 0x4c, 0x8b, 0xc6, 0x48, 0x8b, 0xd3, 0x48, 0x8b, 0xc8, 0xe8, 0xcd, 0x1e, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xff, 0x15, 0x1c, 0x84, 0x00, 0x00, 0x48, 0x8b, 0xc7, 0x48, 0x8b, 0x5c, 0x24, 0x50, 0x48, 0x8b, 0x6c, 0x24, 0x58, 0x48, 0x8b, 0x74, 0x24, 0x60, 0x48, 0x8b, 0x7c, 0x24, 0x68, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5c, 0xc3, 0xcc, 0xcc, 0x89, 0x4c, 0x24, 0x08, 0x48, 0x83, 0xec, 0x28, 0x45, 0x33, 0xc0, 0xba, 0x00, 0x10, 0x00, 0x00, 0x33, 0xc9, 0xff, 0x15, 0x14, 0x84, 0x00, 0x00, 0x48, 0x89, 0x05, 0xc5, 0xd4, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x23, 0x4c, 0x8d, 0x44, 0x24, 0x30, 0x41, 0xb9, 0x04, 0x00, 0x00, 0x00, 0x33, 0xd2, 0x48, 0x8b, 0xc8, 0xc7, 0x44, 0x24, 0x30, 0x02, 0x00, 0x00, 0x00, 0xff, 0x15, 0xe2, 0x83, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0x05, 0xf7, 0xb5, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, 0x48, 0xbf, 0x32, 0xa2, 0xdf, 0x2d, 0x99, 0x2b, 0x00, 0x00, 0x48, 0x3b, 0xc7, 0x74, 0x0c, 0x48, 0xf7, 0xd0, 0x48, 0x89, 0x05, 0xe0, 0xb5, 0x00, 0x00, 0xeb, 0x76, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0xff, 0x15, 0xc3, 0x83, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0xff, 0x15, 0xb0, 0x83, 0x00, 0x00, 0x44, 0x8b, 0xd8, 0x49, 0x33, 0xdb, 0xff, 0x15, 0x34, 0x83, 0x00, 0x00, 0x44, 0x8b, 0xd8, 0x49, 0x33, 0xdb, 0xff, 0x15, 0x90, 0x83, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x38, 0x44, 0x8b, 0xd8, 0x49, 0x33, 0xdb, 0xff, 0x15, 0x77, 0x83, 0x00, 0x00, 0x4c, 0x8b, 0x5c, 0x24, 0x38, 0x4c, 0x33, 0xdb, 0x48, 0xb8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x23, 0xd8, 0x48, 0xb8, 0x33, 0xa2, 0xdf, 0x2d, 0x99, 0x2b, 0x00, 0x00, 0x4c, 0x3b, 0xdf, 0x4c, 0x0f, 0x44, 0xd8, 0x4c, 0x89, 0x1d, 0x6a, 0xb5, 0x00, 0x00, 0x49, 0xf7, 0xd3, 0x4c, 0x89, 0x1d, 0x68, 0xb5, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x81, 0xec, 0xd8, 0x04, 0x00, 0x00, 0x4d, 0x33, 0xc0, 0x4d, 0x33, 0xc9, 0x48, 0x89, 0x64, 0x24, 0x20, 0x4c, 0x89, 0x44, 0x24, 0x28, 0xe8, 0x96, 0x4e, 0x00, 0x00, 0x48, 0x81, 0xc4, 0xd8, 0x04, 0x00, 0x00, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00, 0x48, 0x89, 0x4c, 0x24, 0x08, 0x48, 0x89, 0x54, 0x24, 0x18, 0x44, 0x89, 0x44, 0x24, 0x10, 0x49, 0xc7, 0xc1, 0x20, 0x05, 0x93, 0x19, 0xeb, 0x08, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x90, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x38, 0x83, 0xf9, 0xfe, 0x75, 0x0d, 0xe8, 0x76, 0xd0, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xeb, 0x52, 0x85, 0xc9, 0x78, 0x2e, 0x3b, 0x0d, 0x64, 0xd4, 0x00, 0x00, 0x73, 0x26, 0x48, 0x63, 0xc9, 0x48, 0x8d, 0x15, 0x70, 0xd4, 0x00, 0x00, 0x48, 0x8b, 0xc1, 0x83, 0xe1, 0x1f, 0x48, 0xc1, 0xf8, 0x05, 0x48, 0x6b, 0xc9, 0x58, 0x48, 0x8b, 0x04, 0xc2, 0x0f, 0xbe, 0x44, 0x08, 0x08, 0x83, 0xe0, 0x40, 0xeb, 0x22, 0xe8, 0x37, 0xd0, 0xff, 0xff, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe8, 0x4c, 0xcf, 0xff, 0xff, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x40, 0x8b, 0xd9, 0x48, 0x8d, 0x4c, 0x24, 0x20, 0xe8, 0xfa, 0xb3, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x20, 0x44, 0x0f, 0xb6, 0xdb, 0x48, 0x8b, 0x88, 0x40, 0x01, 0x00, 0x00, 0x42, 0x0f, 0xb7, 0x04, 0x59, 0x25, 0x00, 0x80, 0x00, 0x00, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x30, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x48, 0x83, 0xc4, 0x40, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x40, 0x8b, 0xd9, 0x48, 0x8d, 0x4c, 0x24, 0x20, 0x33, 0xd2, 0xe8, 0xb0, 0xb3, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x20, 0x44, 0x0f, 0xb6, 0xdb, 0x48, 0x8b, 0x88, 0x40, 0x01, 0x00, 0x00, 0x42, 0x0f, 0xb7, 0x04, 0x59, 0x25, 0x00, 0x80, 0x00, 0x00, 0x80, 0x7c, 0x24, 0x38, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x30, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x48, 0x83, 0xc4, 0x40, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xc1, 0x48, 0xf7, 0xd9, 0x48, 0xa9, 0x07, 0x00, 0x00, 0x00, 0x74, 0x0f, 0x66, 0x90, 0x8a, 0x10, 0x48, 0xff, 0xc0, 0x84, 0xd2, 0x74, 0x5f, 0xa8, 0x07, 0x75, 0xf3, 0x49, 0xb8, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x7e, 0x49, 0xbb, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81, 0x48, 0x8b, 0x10, 0x4d, 0x8b, 0xc8, 0x48, 0x83, 0xc0, 0x08, 0x4c, 0x03, 0xca, 0x48, 0xf7, 0xd2, 0x49, 0x33, 0xd1, 0x49, 0x23, 0xd3, 0x74, 0xe8, 0x48, 0x8b, 0x50, 0xf8, 0x84, 0xd2, 0x74, 0x51, 0x84, 0xf6, 0x74, 0x47, 0x48, 0xc1, 0xea, 0x10, 0x84, 0xd2, 0x74, 0x39, 0x84, 0xf6, 0x74, 0x2f, 0x48, 0xc1, 0xea, 0x10, 0x84, 0xd2, 0x74, 0x21, 0x84, 0xf6, 0x74, 0x17, 0xc1, 0xea, 0x10, 0x84, 0xd2, 0x74, 0x0a, 0x84, 0xf6, 0x75, 0xb9, 0x48, 0x8d, 0x44, 0x01, 0xff, 0xc3, 0x48, 0x8d, 0x44, 0x01, 0xfe, 0xc3, 0x48, 0x8d, 0x44, 0x01, 0xfd, 0xc3, 0x48, 0x8d, 0x44, 0x01, 0xfc, 0xc3, 0x48, 0x8d, 0x44, 0x01, 0xfb, 0xc3, 0x48, 0x8d, 0x44, 0x01, 0xfa, 0xc3, 0x48, 0x8d, 0x44, 0x01, 0xf9, 0xc3, 0x48, 0x8d, 0x44, 0x01, 0xf8, 0xc3, 0x48, 0x8b, 0x0d, 0x11, 0xb3, 0x00, 0x00, 0x33, 0xc0, 0x48, 0x83, 0xc9, 0x01, 0x48, 0x39, 0x0d, 0x9c, 0xd1, 0x00, 0x00, 0x0f, 0x94, 0xc0, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x66, 0x44, 0x89, 0x4c, 0x24, 0x20, 0x55, 0x56, 0x57, 0x48, 0x83, 0xec, 0x60, 0x33, 0xed, 0x49, 0x8b, 0xf8, 0x48, 0x8b, 0xf2, 0x48, 0x8b, 0xd9, 0x48, 0x3b, 0xd5, 0x75, 0x13, 0x4c, 0x3b, 0xc5, 0x76, 0x0e, 0x48, 0x3b, 0xcd, 0x74, 0x02, 0x89, 0x29, 0x33, 0xc0, 0xe9, 0xa4, 0x00, 0x00, 0x00, 0x48, 0x3b, 0xcd, 0x74, 0x03, 0x83, 0x09, 0xff, 0x49, 0x81, 0xf8, 0xff, 0xff, 0xff, 0x7f, 0x76, 0x24, 0xe8, 0x5d, 0xce, 0xff, 0xff, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x89, 0x18, 0x48, 0x89, 0x6c, 0x24, 0x20, 0xe8, 0x72, 0xcd, 0xff, 0xff, 0x8b, 0xc3, 0xeb, 0x6f, 0x48, 0x8b, 0x94, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x40, 0xe8, 0x24, 0xb2, 0xff, 0xff, 0x4c, 0x8b, 0x5c, 0x24, 0x40, 0x41, 0x39, 0x6b, 0x14, 0x0f, 0x85, 0xcd, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, 0xb9, 0xff, 0x00, 0x00, 0x00, 0x66, 0x3b, 0xc1, 0x76, 0x4c, 0x48, 0x3b, 0xf5, 0x74, 0x12, 0x48, 0x3b, 0xfd, 0x76, 0x0d, 0x4c, 0x8b, 0xc7, 0x33, 0xd2, 0x48, 0x8b, 0xce, 0xe8, 0x6c, 0xab, 0xff, 0xff, 0xe8, 0xef, 0xcd, 0xff, 0xff, 0xc7, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xe8, 0xe4, 0xcd, 0xff, 0xff, 0x8b, 0x00, 0x40, 0x38, 0x6c, 0x24, 0x58, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x50, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0x9c, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x60, 0x5f, 0x5e, 0x5d, 0xc3, 0x48, 0x3b, 0xf5, 0x74, 0x43, 0x48, 0x3b, 0xfd, 0x77, 0x3c, 0xe8, 0xb0, 0xcd, 0xff, 0xff, 0xbb, 0x22, 0x00, 0x00, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x89, 0x18, 0x48, 0x89, 0x6c, 0x24, 0x20, 0xe8, 0xc5, 0xcc, 0xff, 0xff, 0x40, 0x38, 0x6c, 0x24, 0x58, 0x0f, 0x84, 0x48, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x4c, 0x24, 0x50, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xe9, 0x37, 0xff, 0xff, 0xff, 0x88, 0x06, 0x48, 0x3b, 0xdd, 0x74, 0x06, 0xc7, 0x03, 0x01, 0x00, 0x00, 0x00, 0x40, 0x38, 0x6c, 0x24, 0x58, 0x0f, 0x84, 0xe7, 0xfe, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x50, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xe9, 0xd6, 0xfe, 0xff, 0xff, 0x48, 0x8d, 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, 0x89, 0xac, 0x24, 0x88, 0x00, 0x00, 0x00, 0x41, 0x8b, 0x4b, 0x04, 0x48, 0x89, 0x44, 0x24, 0x38, 0x48, 0x89, 0x6c, 0x24, 0x30, 0x4c, 0x8d, 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x33, 0xd2, 0x89, 0x7c, 0x24, 0x28, 0x48, 0x89, 0x74, 0x24, 0x20, 0xff, 0x15, 0x2c, 0x7f, 0x00, 0x00, 0x3b, 0xc5, 0x74, 0x16, 0x39, 0xac, 0x24, 0x88, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x0f, 0xff, 0xff, 0xff, 0x48, 0x3b, 0xdd, 0x74, 0x92, 0x89, 0x03, 0xeb, 0x8e, 0xff, 0x15, 0x64, 0x7e, 0x00, 0x00, 0x83, 0xf8, 0x7a, 0x0f, 0x85, 0xf7, 0xfe, 0xff, 0xff, 0x48, 0x3b, 0xf5, 0x74, 0x12, 0x48, 0x3b, 0xfd, 0x76, 0x0d, 0x4c, 0x8b, 0xc7, 0x33, 0xd2, 0x48, 0x8b, 0xce, 0xe8, 0x4c, 0xaa, 0xff, 0xff, 0xe8, 0xcf, 0xcc, 0xff, 0xff, 0xbb, 0x22, 0x00, 0x00, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x89, 0x18, 0x48, 0x89, 0x6c, 0x24, 0x20, 0xe8, 0xe4, 0xcb, 0xff, 0xff, 0x40, 0x38, 0x6c, 0x24, 0x58, 0x0f, 0x84, 0x67, 0xfe, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x50, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xe9, 0x56, 0xfe, 0xff, 0xff, 0x48, 0x83, 0xec, 0x38, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0xe8, 0xe1, 0xfd, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0x83, 0x25, 0x79, 0xd0, 0x00, 0x00, 0x00, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x48, 0x83, 0xf9, 0xe0, 0x77, 0x7c, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc9, 0x48, 0x0f, 0x45, 0xf9, 0x48, 0x8b, 0x0d, 0x39, 0xcf, 0x00, 0x00, 0x48, 0x85, 0xc9, 0x75, 0x20, 0xe8, 0xef, 0xeb, 0xff, 0xff, 0xb9, 0x1e, 0x00, 0x00, 0x00, 0xe8, 0xbd, 0xe9, 0xff, 0xff, 0xb9, 0xff, 0x00, 0x00, 0x00, 0xe8, 0x2f, 0xb3, 0xff, 0xff, 0x48, 0x8b, 0x0d, 0x14, 0xcf, 0x00, 0x00, 0x4c, 0x8b, 0xc7, 0x33, 0xd2, 0xff, 0x15, 0xa1, 0x7d, 0x00, 0x00, 0x48, 0x8b, 0xf0, 0x48, 0x85, 0xc0, 0x75, 0x2c, 0x39, 0x05, 0x0b, 0xcf, 0x00, 0x00, 0x74, 0x0e, 0x48, 0x8b, 0xcb, 0xe8, 0xd1, 0xf3, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x0d, 0xeb, 0xab, 0xe8, 0xfe, 0xcb, 0xff, 0xff, 0xc7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xe8, 0xf3, 0xcb, 0xff, 0xff, 0xc7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xc6, 0xeb, 0x12, 0xe8, 0xab, 0xf3, 0xff, 0xff, 0xe8, 0xde, 0xcb, 0xff, 0xff, 0xc7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xda, 0x48, 0x8b, 0xf9, 0x48, 0x85, 0xc9, 0x75, 0x0a, 0x48, 0x8b, 0xca, 0xe8, 0x26, 0xff, 0xff, 0xff, 0xeb, 0x6a, 0x48, 0x85, 0xd2, 0x75, 0x07, 0xe8, 0x1e, 0xce, 0xff, 0xff, 0xeb, 0x5c, 0x48, 0x83, 0xfa, 0xe0, 0x77, 0x43, 0x48, 0x8b, 0x0d, 0x6f, 0xce, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x48, 0x0f, 0x44, 0xd8, 0x4c, 0x8b, 0xc7, 0x33, 0xd2, 0x4c, 0x8b, 0xcb, 0xff, 0x15, 0xc5, 0x7d, 0x00, 0x00, 0x48, 0x8b, 0xf0, 0x48, 0x85, 0xc0, 0x75, 0x6f, 0x39, 0x05, 0x57, 0xce, 0x00, 0x00, 0x74, 0x50, 0x48, 0x8b, 0xcb, 0xe8, 0x1d, 0xf3, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x2b, 0x48, 0x83, 0xfb, 0xe0, 0x76, 0xbd, 0x48, 0x8b, 0xcb, 0xe8, 0x0b, 0xf3, 0xff, 0xff, 0xe8, 0x3e, 0xcb, 0xff, 0xff, 0xc7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xe8, 0x21, 0xcb, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0xff, 0x15, 0x88, 0x7c, 0x00, 0x00, 0x8b, 0xc8, 0xe8, 0xc9, 0xca, 0xff, 0xff, 0x89, 0x03, 0xeb, 0xd5, 0xe8, 0x08, 0xcb, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0xff, 0x15, 0x6f, 0x7c, 0x00, 0x00, 0x8b, 0xc8, 0xe8, 0xb0, 0xca, 0xff, 0xff, 0x89, 0x03, 0x48, 0x8b, 0xc6, 0xeb, 0xbb, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x30, 0x33, 0xff, 0x48, 0x8b, 0xda, 0x48, 0x8b, 0xf1, 0x48, 0x85, 0xd2, 0x74, 0x31, 0x33, 0xd2, 0x48, 0x8d, 0x47, 0xe0, 0x48, 0xf7, 0xf3, 0x49, 0x3b, 0xc0, 0x73, 0x23, 0xe8, 0xc1, 0xca, 0xff, 0xff, 0x48, 0x21, 0x7c, 0x24, 0x20, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xe8, 0xd7, 0xc9, 0xff, 0xff, 0x33, 0xc0, 0xeb, 0x3d, 0x49, 0x0f, 0xaf, 0xd8, 0x48, 0x85, 0xc9, 0x74, 0x08, 0xe8, 0x1d, 0x25, 0x00, 0x00, 0x48, 0x8b, 0xf8, 0x48, 0x8b, 0xd3, 0x48, 0x8b, 0xce, 0xe8, 0xc3, 0xfe, 0xff, 0xff, 0x48, 0x8b, 0xf0, 0x48, 0x85, 0xc0, 0x74, 0x16, 0x48, 0x3b, 0xfb, 0x73, 0x11, 0x48, 0x2b, 0xdf, 0x48, 0x8d, 0x0c, 0x07, 0x33, 0xd2, 0x4c, 0x8b, 0xc3, 0xe8, 0xe1, 0xa7, 0xff, 0xff, 0x48, 0x8b, 0xc6, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x74, 0x24, 0x48, 0x48, 0x83, 0xc4, 0x30, 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x30, 0x83, 0xcf, 0xff, 0x48, 0x8b, 0xd9, 0x48, 0x85, 0xc9, 0x75, 0x23, 0xe8, 0x3a, 0xca, 0xff, 0xff, 0x48, 0x21, 0x5c, 0x24, 0x20, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x50, 0xc9, 0xff, 0xff, 0x0b, 0xc7, 0xeb, 0x46, 0xf6, 0x41, 0x18, 0x83, 0x74, 0x3a, 0xe8, 0x89, 0xcd, 0xff, 0xff, 0x48, 0x8b, 0xcb, 0x8b, 0xf8, 0xe8, 0x0f, 0x2a, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xe8, 0xc7, 0xc7, 0xff, 0xff, 0x8b, 0xc8, 0xe8, 0xe8, 0x28, 0x00, 0x00, 0x85, 0xc0, 0x79, 0x05, 0x83, 0xcf, 0xff, 0xeb, 0x13, 0x48, 0x8b, 0x4b, 0x28, 0x48, 0x85, 0xc9, 0x74, 0x0a, 0xe8, 0x69, 0xcc, 0xff, 0xff, 0x48, 0x83, 0x63, 0x28, 0x00, 0x83, 0x63, 0x18, 0x00, 0x8b, 0xc7, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x30, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x4c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x30, 0x48, 0x8b, 0xd9, 0x83, 0xcf, 0xff, 0x33, 0xc0, 0x48, 0x85, 0xc9, 0x0f, 0x95, 0xc0, 0x85, 0xc0, 0x75, 0x24, 0xe8, 0xa2, 0xc9, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0xb7, 0xc8, 0xff, 0xff, 0x8b, 0xc7, 0xeb, 0x26, 0xf6, 0x41, 0x18, 0x40, 0x74, 0x06, 0x83, 0x61, 0x18, 0x00, 0xeb, 0x18, 0xe8, 0x7e, 0xa5, 0xff, 0xff, 0x90, 0x48, 0x8b, 0xcb, 0xe8, 0x15, 0xff, 0xff, 0xff, 0x8b, 0xf8, 0x48, 0x8b, 0xcb, 0xe8, 0xfb, 0xa5, 0xff, 0xff, 0x8b, 0xc7, 0x48, 0x8b, 0x5c, 0x24, 0x48, 0x48, 0x83, 0xc4, 0x30, 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x55, 0x56, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0xb8, 0x30, 0x1b, 0x00, 0x00, 0xe8, 0xde, 0x6a, 0x00, 0x00, 0x48, 0x2b, 0xe0, 0x48, 0x8b, 0x05, 0x84, 0xad, 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x84, 0x24, 0x20, 0x1b, 0x00, 0x00, 0x33, 0xed, 0x33, 0xff, 0x45, 0x8b, 0xe8, 0x4c, 0x8b, 0xe2, 0x48, 0x63, 0xd9, 0x89, 0x6c, 0x24, 0x40, 0x45, 0x85, 0xc0, 0x75, 0x07, 0x33, 0xc0, 0xe9, 0xe7, 0x06, 0x00, 0x00, 0x48, 0x85, 0xd2, 0x75, 0x2e, 0xe8, 0x1a, 0xc9, 0xff, 0xff, 0x21, 0x38, 0xe8, 0xf3, 0xc8, 0xff, 0xff, 0x48, 0x21, 0x7c, 0x24, 0x20, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x09, 0xc8, 0xff, 0xff, 0x83, 0xc8, 0xff, 0xe9, 0xb4, 0x06, 0x00, 0x00, 0x4c, 0x8b, 0xfb, 0x4c, 0x8b, 0xf3, 0x48, 0x8d, 0x05, 0xdc, 0xcc, 0x00, 0x00, 0x49, 0xc1, 0xfe, 0x05, 0x41, 0x83, 0xe7, 0x1f, 0x4a, 0x8b, 0x0c, 0xf0, 0x4c, 0x89, 0x74, 0x24, 0x50, 0x4d, 0x6b, 0xff, 0x58, 0x41, 0x8a, 0x74, 0x0f, 0x38, 0x40, 0x02, 0xf6, 0x40, 0xd0, 0xfe, 0x40, 0x80, 0xfe, 0x02, 0x74, 0x06, 0x40, 0x80, 0xfe, 0x01, 0x75, 0x09, 0x41, 0x8b, 0xc5, 0xf7, 0xd0, 0xa8, 0x01, 0x74, 0x90, 0x41, 0xf6, 0x44, 0x0f, 0x08, 0x20, 0x74, 0x0d, 0x33, 0xd2, 0x8b, 0xcb, 0x44, 0x8d, 0x42, 0x02, 0xe8, 0x9a, 0x1e, 0x00, 0x00, 0x8b, 0xcb, 0xe8, 0xef, 0xf7, 0xff, 0xff, 0x85, 0xc0, 0x0f, 0x84, 0xf1, 0x02, 0x00, 0x00, 0x48, 0x8d, 0x05, 0x7c, 0xcc, 0x00, 0x00, 0x4a, 0x8b, 0x04, 0xf0, 0x41, 0xf6, 0x44, 0x07, 0x08, 0x80, 0x0f, 0x84, 0xda, 0x02, 0x00, 0x00, 0xe8, 0x53, 0xe1, 0xff, 0xff, 0x33, 0xdb, 0x48, 0x8d, 0x54, 0x24, 0x58, 0x48, 0x8b, 0x88, 0xc0, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x05, 0x52, 0xcc, 0x00, 0x00, 0x39, 0x59, 0x14, 0x4a, 0x8b, 0x0c, 0xf0, 0x49, 0x8b, 0x0c, 0x0f, 0x0f, 0x94, 0xc3, 0xff, 0x15, 0x8e, 0x7a, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x84, 0xa4, 0x02, 0x00, 0x00, 0x85, 0xdb, 0x74, 0x09, 0x40, 0x84, 0xf6, 0x0f, 0x84, 0x97, 0x02, 0x00, 0x00, 0xff, 0x15, 0x6b, 0x7a, 0x00, 0x00, 0x21, 0x7c, 0x24, 0x4c, 0x49, 0x8b, 0xdc, 0x89, 0x44, 0x24, 0x58, 0x45, 0x85, 0xed, 0x0f, 0x84, 0x77, 0x02, 0x00, 0x00, 0x44, 0x8b, 0x74, 0x24, 0x58, 0xbd, 0x0d, 0x00, 0x00, 0x00, 0x40, 0x84, 0xf6, 0x0f, 0x85, 0x83, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x54, 0x24, 0x50, 0x8a, 0x0b, 0x45, 0x33, 0xf6, 0x80, 0xf9, 0x0a, 0x48, 0x8d, 0x2d, 0xe8, 0xcb, 0x00, 0x00, 0x48, 0x8b, 0x54, 0xd5, 0x00, 0x41, 0x0f, 0x94, 0xc6, 0x41, 0x83, 0x7c, 0x17, 0x50, 0x00, 0x74, 0x20, 0x41, 0x8a, 0x44, 0x17, 0x4c, 0x88, 0x4c, 0x24, 0x5d, 0x41, 0xb8, 0x02, 0x00, 0x00, 0x00, 0x88, 0x44, 0x24, 0x5c, 0x41, 0x83, 0x64, 0x17, 0x50, 0x00, 0x48, 0x8d, 0x54, 0x24, 0x5c, 0xeb, 0x49, 0x0f, 0xbe, 0xc9, 0xe8, 0xcb, 0xf7, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x34, 0x49, 0x8b, 0xc5, 0x48, 0x2b, 0xc3, 0x49, 0x03, 0xc4, 0x48, 0x83, 0xf8, 0x01, 0x0f, 0x8e, 0xcf, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x44, 0x41, 0xb8, 0x02, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd3, 0xe8, 0x35, 0x2a, 0x00, 0x00, 0x83, 0xf8, 0xff, 0x0f, 0x84, 0x76, 0x01, 0x00, 0x00, 0x48, 0xff, 0xc3, 0xeb, 0x1c, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd3, 0x48, 0x8d, 0x4c, 0x24, 0x44, 0xe8, 0x14, 0x2a, 0x00, 0x00, 0x83, 0xf8, 0xff, 0x0f, 0x84, 0x55, 0x01, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, 0x8b, 0x4c, 0x24, 0x58, 0x48, 0x8d, 0x44, 0x24, 0x5c, 0x4c, 0x8d, 0x44, 0x24, 0x44, 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x33, 0xd2, 0xc7, 0x44, 0x24, 0x28, 0x05, 0x00, 0x00, 0x00, 0x48, 0xff, 0xc3, 0x48, 0x89, 0x44, 0x24, 0x20, 0xff, 0x15, 0x23, 0x79, 0x00, 0x00, 0x8b, 0xe8, 0x85, 0xc0, 0x0f, 0x84, 0x13, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x50, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x48, 0x8d, 0x0d, 0x07, 0xcb, 0x00, 0x00, 0x48, 0x8b, 0x0c, 0xc1, 0x4c, 0x8d, 0x4c, 0x24, 0x4c, 0x48, 0x8d, 0x54, 0x24, 0x5c, 0x49, 0x8b, 0x0c, 0x0f, 0x44, 0x8b, 0xc5, 0xff, 0x15, 0xbc, 0x78, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x84, 0x42, 0x01, 0x00, 0x00, 0x8b, 0xfb, 0x41, 0x2b, 0xfc, 0x03, 0x7c, 0x24, 0x40, 0x39, 0x6c, 0x24, 0x4c, 0x0f, 0x8c, 0xcb, 0x00, 0x00, 0x00, 0xbd, 0x0d, 0x00, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x0f, 0x84, 0xaf, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x50, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x40, 0x88, 0x6c, 0x24, 0x5c, 0x48, 0x8d, 0x0d, 0xac, 0xca, 0x00, 0x00, 0x4c, 0x8d, 0x4c, 0x24, 0x4c, 0x44, 0x8d, 0x45, 0xf4, 0x48, 0x8b, 0x0c, 0xc1, 0x48, 0x8d, 0x54, 0x24, 0x5c, 0x49, 0x8b, 0x0c, 0x0f, 0xff, 0x15, 0x60, 0x78, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x84, 0xe6, 0x00, 0x00, 0x00, 0x83, 0x7c, 0x24, 0x4c, 0x01, 0x7c, 0x7b, 0xff, 0x44, 0x24, 0x40, 0xff, 0xc7, 0xeb, 0x65, 0x40, 0x80, 0xfe, 0x01, 0x74, 0x06, 0x40, 0x80, 0xfe, 0x02, 0x75, 0x17, 0x0f, 0xb7, 0x03, 0x45, 0x33, 0xf6, 0x66, 0x83, 0xf8, 0x0a, 0x66, 0x89, 0x44, 0x24, 0x44, 0x41, 0x0f, 0x94, 0xc6, 0x48, 0x83, 0xc3, 0x02, 0x40, 0x80, 0xfe, 0x01, 0x74, 0x06, 0x40, 0x80, 0xfe, 0x02, 0x75, 0x36, 0x0f, 0xb7, 0x4c, 0x24, 0x44, 0xe8, 0x68, 0x26, 0x00, 0x00, 0x66, 0x3b, 0x44, 0x24, 0x44, 0x0f, 0x85, 0x93, 0x00, 0x00, 0x00, 0x83, 0xc7, 0x02, 0x45, 0x85, 0xf6, 0x74, 0x19, 0x8b, 0xcd, 0x66, 0x89, 0x6c, 0x24, 0x44, 0xe8, 0x49, 0x26, 0x00, 0x00, 0x66, 0x3b, 0x44, 0x24, 0x44, 0x75, 0x78, 0xff, 0xc7, 0xff, 0x44, 0x24, 0x40, 0x8b, 0xc3, 0x41, 0x2b, 0xc4, 0x41, 0x3b, 0xc5, 0x0f, 0x82, 0x01, 0xfe, 0xff, 0xff, 0x8b, 0x5c, 0x24, 0x4c, 0x4c, 0x8b, 0x74, 0x24, 0x50, 0x8b, 0x6c, 0x24, 0x40, 0x85, 0xff, 0x0f, 0x85, 0xb8, 0x03, 0x00, 0x00, 0x85, 0xdb, 0x0f, 0x84, 0x7a, 0x03, 0x00, 0x00, 0x83, 0xfb, 0x05, 0x0f, 0x85, 0x65, 0x03, 0x00, 0x00, 0xe8, 0xc3, 0xc5, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe8, 0xd8, 0xc5, 0xff, 0xff, 0x89, 0x18, 0xe9, 0xd8, 0xfc, 0xff, 0xff, 0x8a, 0x03, 0x4c, 0x8b, 0x74, 0x24, 0x50, 0xff, 0xc7, 0x4a, 0x8b, 0x4c, 0xf5, 0x00, 0x41, 0x88, 0x44, 0x0f, 0x4c, 0x4a, 0x8b, 0x44, 0xf5, 0x00, 0x41, 0xc7, 0x44, 0x07, 0x50, 0x01, 0x00, 0x00, 0x00, 0x8b, 0x5c, 0x24, 0x4c, 0xeb, 0xa5, 0xff, 0x15, 0xf4, 0x76, 0x00, 0x00, 0x8b, 0xd8, 0xeb, 0x96, 0x8b, 0x5c, 0x24, 0x4c, 0xeb, 0xa1, 0x48, 0x8d, 0x05, 0x8b, 0xc9, 0x00, 0x00, 0x4a, 0x8b, 0x0c, 0xf0, 0x41, 0xf6, 0x44, 0x0f, 0x08, 0x80, 0x0f, 0x84, 0xca, 0x02, 0x00, 0x00, 0x33, 0xdb, 0x49, 0x8b, 0xec, 0x40, 0x84, 0xf6, 0x0f, 0x85, 0xd0, 0x00, 0x00, 0x00, 0x45, 0x85, 0xed, 0x0f, 0x84, 0xfc, 0x02, 0x00, 0x00, 0x8d, 0x53, 0x0d, 0x44, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x8d, 0xb4, 0x24, 0x20, 0x07, 0x00, 0x00, 0x33, 0xc9, 0x8b, 0xc5, 0x41, 0x2b, 0xc4, 0x41, 0x3b, 0xc5, 0x73, 0x26, 0x8a, 0x45, 0x00, 0x48, 0xff, 0xc5, 0x3c, 0x0a, 0x75, 0x0b, 0x88, 0x16, 0x41, 0xff, 0xc6, 0x48, 0xff, 0xc6, 0x48, 0xff, 0xc1, 0x48, 0xff, 0xc1, 0x88, 0x06, 0x48, 0xff, 0xc6, 0x48, 0x81, 0xf9, 0xff, 0x13, 0x00, 0x00, 0x72, 0xd0, 0x48, 0x21, 0x5c, 0x24, 0x20, 0x48, 0x8d, 0x84, 0x24, 0x20, 0x07, 0x00, 0x00, 0x44, 0x8b, 0xc6, 0x44, 0x2b, 0xc0, 0x48, 0x8d, 0x05, 0x08, 0xc9, 0x00, 0x00, 0x44, 0x89, 0x74, 0x24, 0x40, 0x4c, 0x8b, 0x74, 0x24, 0x50, 0x4c, 0x8d, 0x4c, 0x24, 0x48, 0x48, 0x8d, 0x94, 0x24, 0x20, 0x07, 0x00, 0x00, 0x4a, 0x8b, 0x0c, 0xf0, 0x49, 0x8b, 0x0c, 0x0f, 0xff, 0x15, 0xb3, 0x76, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x35, 0x03, 0x7c, 0x24, 0x48, 0x48, 0x8d, 0x84, 0x24, 0x20, 0x07, 0x00, 0x00, 0x48, 0x2b, 0xf0, 0x48, 0x63, 0x44, 0x24, 0x48, 0x48, 0x3b, 0xc6, 0x0f, 0x8c, 0xc5, 0xfe, 0xff, 0xff, 0x8b, 0xc5, 0xba, 0x0d, 0x00, 0x00, 0x00, 0x41, 0x2b, 0xc4, 0x41, 0x3b, 0xc5, 0x0f, 0x82, 0x4e, 0xff, 0xff, 0xff, 0xe9, 0xad, 0xfe, 0xff, 0xff, 0xff, 0x15, 0xfc, 0x75, 0x00, 0x00, 0x8b, 0xd8, 0xe9, 0xa0, 0xfe, 0xff, 0xff, 0x40, 0x80, 0xfe, 0x02, 0x0f, 0x85, 0xd4, 0x00, 0x00, 0x00, 0x45, 0x85, 0xed, 0x0f, 0x84, 0x22, 0x02, 0x00, 0x00, 0xba, 0x0d, 0x00, 0x00, 0x00, 0x44, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x8d, 0xb4, 0x24, 0x20, 0x07, 0x00, 0x00, 0x33, 0xc9, 0x8b, 0xc5, 0x41, 0x2b, 0xc4, 0x41, 0x3b, 0xc5, 0x73, 0x31, 0x0f, 0xb7, 0x45, 0x00, 0x48, 0x83, 0xc5, 0x02, 0x66, 0x83, 0xf8, 0x0a, 0x75, 0x0f, 0x66, 0x89, 0x16, 0x41, 0x83, 0xc6, 0x02, 0x48, 0x83, 0xc6, 0x02, 0x48, 0x83, 0xc1, 0x02, 0x48, 0x83, 0xc1, 0x02, 0x66, 0x89, 0x06, 0x48, 0x83, 0xc6, 0x02, 0x48, 0x81, 0xf9, 0xfe, 0x13, 0x00, 0x00, 0x72, 0xc5, 0x48, 0x21, 0x5c, 0x24, 0x20, 0x48, 0x8d, 0x84, 0x24, 0x20, 0x07, 0x00, 0x00, 0x44, 0x8b, 0xc6, 0x44, 0x2b, 0xc0, 0x48, 0x8d, 0x05, 0x21, 0xc8, 0x00, 0x00, 0x44, 0x89, 0x74, 0x24, 0x40, 0x4c, 0x8b, 0x74, 0x24, 0x50, 0x4c, 0x8d, 0x4c, 0x24, 0x48, 0x48, 0x8d, 0x94, 0x24, 0x20, 0x07, 0x00, 0x00, 0x4a, 0x8b, 0x0c, 0xf0, 0x49, 0x8b, 0x0c, 0x0f, 0xff, 0x15, 0xcc, 0x75, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x84, 0x4a, 0xff, 0xff, 0xff, 0x03, 0x7c, 0x24, 0x48, 0x48, 0x8d, 0x84, 0x24, 0x20, 0x07, 0x00, 0x00, 0x48, 0x2b, 0xf0, 0x48, 0x63, 0x44, 0x24, 0x48, 0x48, 0x3b, 0xc6, 0x0f, 0x8c, 0xda, 0xfd, 0xff, 0xff, 0x8b, 0xc5, 0xba, 0x0d, 0x00, 0x00, 0x00, 0x41, 0x2b, 0xc4, 0x41, 0x3b, 0xc5, 0x0f, 0x82, 0x3f, 0xff, 0xff, 0xff, 0xe9, 0xc2, 0xfd, 0xff, 0xff, 0x45, 0x85, 0xed, 0x0f, 0x84, 0x4e, 0x01, 0x00, 0x00, 0x41, 0xb8, 0x0d, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x70, 0x33, 0xd2, 0x8b, 0xc5, 0x41, 0x2b, 0xc4, 0x41, 0x3b, 0xc5, 0x73, 0x2e, 0x0f, 0xb7, 0x45, 0x00, 0x48, 0x83, 0xc5, 0x02, 0x66, 0x83, 0xf8, 0x0a, 0x75, 0x0c, 0x66, 0x44, 0x89, 0x01, 0x48, 0x83, 0xc1, 0x02, 0x48, 0x83, 0xc2, 0x02, 0x48, 0x83, 0xc2, 0x02, 0x66, 0x89, 0x01, 0x48, 0x83, 0xc1, 0x02, 0x48, 0x81, 0xfa, 0xa8, 0x06, 0x00, 0x00, 0x72, 0xc8, 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, 0x48, 0x8d, 0x44, 0x24, 0x70, 0x2b, 0xc8, 0x4c, 0x8d, 0x44, 0x24, 0x70, 0xc7, 0x44, 0x24, 0x28, 0x55, 0x0d, 0x00, 0x00, 0x8b, 0xc1, 0xb9, 0xe9, 0xfd, 0x00, 0x00, 0x99, 0x2b, 0xc2, 0x33, 0xd2, 0xd1, 0xf8, 0x44, 0x8b, 0xc8, 0x48, 0x8d, 0x84, 0x24, 0x20, 0x07, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x20, 0xff, 0x15, 0x2d, 0x75, 0x00, 0x00, 0x44, 0x8b, 0xf0, 0x85, 0xc0, 0x0f, 0x84, 0x80, 0xfd, 0xff, 0xff, 0x33, 0xf6, 0x48, 0x8b, 0x44, 0x24, 0x50, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x48, 0x63, 0xce, 0x48, 0x8d, 0x94, 0x0c, 0x20, 0x07, 0x00, 0x00, 0x45, 0x8b, 0xc6, 0x48, 0x8d, 0x0d, 0x00, 0xc7, 0x00, 0x00, 0x48, 0x8b, 0x0c, 0xc1, 0x4c, 0x8d, 0x4c, 0x24, 0x48, 0x44, 0x2b, 0xc6, 0x49, 0x8b, 0x0c, 0x0f, 0xff, 0x15, 0xba, 0x74, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x0b, 0x03, 0x74, 0x24, 0x48, 0x44, 0x3b, 0xf6, 0x7f, 0xbd, 0xeb, 0x08, 0xff, 0x15, 0x2d, 0x74, 0x00, 0x00, 0x8b, 0xd8, 0x44, 0x3b, 0xf6, 0x0f, 0x8f, 0xc8, 0xfc, 0xff, 0xff, 0x8b, 0xfd, 0x41, 0xb8, 0x0d, 0x00, 0x00, 0x00, 0x41, 0x2b, 0xfc, 0x41, 0x3b, 0xfd, 0x0f, 0x82, 0x06, 0xff, 0xff, 0xff, 0xe9, 0xaf, 0xfc, 0xff, 0xff, 0x49, 0x8b, 0x0c, 0x0f, 0x48, 0x21, 0x7c, 0x24, 0x20, 0x4c, 0x8d, 0x4c, 0x24, 0x48, 0x45, 0x8b, 0xc5, 0x49, 0x8b, 0xd4, 0xff, 0x15, 0x67, 0x74, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x0b, 0x8b, 0x7c, 0x24, 0x48, 0x33, 0xdb, 0xe9, 0x8f, 0xfc, 0xff, 0xff, 0xff, 0x15, 0xda, 0x73, 0x00, 0x00, 0x8b, 0xd8, 0xe9, 0x82, 0xfc, 0xff, 0xff, 0x8b, 0xcb, 0xe8, 0x9c, 0xc2, 0xff, 0xff, 0xe9, 0x7e, 0xf9, 0xff, 0xff, 0x48, 0x8d, 0x05, 0x68, 0xc6, 0x00, 0x00, 0x4a, 0x8b, 0x04, 0xf0, 0x41, 0xf6, 0x44, 0x07, 0x08, 0x40, 0x74, 0x0b, 0x41, 0x80, 0x3c, 0x24, 0x1a, 0x0f, 0x84, 0x2e, 0xf9, 0xff, 0xff, 0xe8, 0x34, 0xc2, 0xff, 0xff, 0xc7, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xe8, 0x49, 0xc2, 0xff, 0xff, 0x83, 0x20, 0x00, 0xe9, 0x48, 0xf9, 0xff, 0xff, 0x2b, 0xfd, 0x8b, 0xc7, 0x48, 0x8b, 0x8c, 0x24, 0x20, 0x1b, 0x00, 0x00, 0x48, 0x33, 0xcc, 0xe8, 0xe5, 0xa5, 0xff, 0xff, 0x48, 0x8b, 0x9c, 0x24, 0x88, 0x1b, 0x00, 0x00, 0x48, 0x81, 0xc4, 0x30, 0x1b, 0x00, 0x00, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0x5d, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x89, 0x4c, 0x24, 0x08, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x30, 0x45, 0x8b, 0xe0, 0x4c, 0x8b, 0xea, 0x48, 0x63, 0xd9, 0x83, 0xfb, 0xfe, 0x75, 0x1c, 0xe8, 0xe2, 0xc1, 0xff, 0xff, 0x33, 0xff, 0x89, 0x38, 0xe8, 0xb9, 0xc1, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x83, 0xc8, 0xff, 0xe9, 0xd4, 0x00, 0x00, 0x00, 0x33, 0xff, 0x3b, 0xdf, 0x0f, 0x8c, 0xa1, 0x00, 0x00, 0x00, 0x3b, 0x1d, 0x9b, 0xc5, 0x00, 0x00, 0x0f, 0x83, 0x95, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xf3, 0x4c, 0x8b, 0xf3, 0x49, 0xc1, 0xfe, 0x05, 0x4c, 0x8d, 0x3d, 0x9c, 0xc5, 0x00, 0x00, 0x83, 0xe6, 0x1f, 0x48, 0x6b, 0xf6, 0x58, 0x4b, 0x8b, 0x04, 0xf7, 0x0f, 0xbe, 0x4c, 0x30, 0x08, 0x83, 0xe1, 0x01, 0x75, 0x2b, 0xe8, 0x8a, 0xc1, 0xff, 0xff, 0x89, 0x38, 0xe8, 0x63, 0xc1, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x79, 0xc0, 0xff, 0xff, 0x83, 0xc8, 0xff, 0xeb, 0x6d, 0x8b, 0xcb, 0xe8, 0xf5, 0x25, 0x00, 0x00, 0x90, 0x4b, 0x8b, 0x04, 0xf7, 0xf6, 0x44, 0x30, 0x08, 0x01, 0x74, 0x11, 0x45, 0x8b, 0xc4, 0x49, 0x8b, 0xd5, 0x8b, 0xcb, 0xe8, 0xd4, 0xf7, 0xff, 0xff, 0x8b, 0xf8, 0xeb, 0x15, 0xe8, 0x1b, 0xc1, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe8, 0x30, 0xc1, 0xff, 0xff, 0x89, 0x38, 0x83, 0xcf, 0xff, 0x8b, 0xcb, 0xe8, 0x64, 0x26, 0x00, 0x00, 0x8b, 0xc7, 0xeb, 0x29, 0xe8, 0x1b, 0xc1, 0xff, 0xff, 0x89, 0x38, 0xe8, 0xf4, 0xc0, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x0a, 0xc0, 0xff, 0xff, 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x68, 0x48, 0x8b, 0x74, 0x24, 0x70, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x18, 0x89, 0x4c, 0x24, 0x08, 0x56, 0x57, 0x41, 0x54, 0x48, 0x83, 0xec, 0x30, 0x48, 0x63, 0xf9, 0x83, 0xff, 0xfe, 0x75, 0x13, 0xe8, 0x9e, 0xc0, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x83, 0xc8, 0xff, 0xe9, 0xd9, 0x00, 0x00, 0x00, 0x85, 0xc9, 0x0f, 0x88, 0xae, 0x00, 0x00, 0x00, 0x3b, 0x3d, 0x82, 0xc4, 0x00, 0x00, 0x0f, 0x83, 0xa2, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xdf, 0x48, 0x8b, 0xf7, 0x48, 0xc1, 0xfe, 0x05, 0x4c, 0x8d, 0x25, 0x83, 0xc4, 0x00, 0x00, 0x83, 0xe3, 0x1f, 0x48, 0x6b, 0xdb, 0x58, 0x49, 0x8b, 0x04, 0xf4, 0x0f, 0xbe, 0x4c, 0x18, 0x08, 0x83, 0xe1, 0x01, 0x75, 0x25, 0xe8, 0x51, 0xc0, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x66, 0xbf, 0xff, 0xff, 0x83, 0xc8, 0xff, 0xeb, 0x7a, 0x8b, 0xcf, 0xe8, 0xe2, 0x24, 0x00, 0x00, 0x90, 0x49, 0x8b, 0x04, 0xf4, 0xf6, 0x44, 0x18, 0x08, 0x01, 0x74, 0x2b, 0x8b, 0xcf, 0xe8, 0x4b, 0x24, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xff, 0x15, 0x7e, 0x72, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x0a, 0xff, 0x15, 0x74, 0x71, 0x00, 0x00, 0x8b, 0xd8, 0xeb, 0x02, 0x33, 0xdb, 0x85, 0xdb, 0x74, 0x15, 0xe8, 0x15, 0xc0, 0xff, 0xff, 0x89, 0x18, 0xe8, 0xee, 0xbf, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x83, 0xcb, 0xff, 0x8b, 0xcf, 0xe8, 0x3e, 0x25, 0x00, 0x00, 0x8b, 0xc3, 0xeb, 0x23, 0xe8, 0xd5, 0xbf, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0xea, 0xbe, 0xff, 0xff, 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5c, 0x5f, 0x5e, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x50, 0x48, 0x8b, 0xda, 0x48, 0x8b, 0xf9, 0x48, 0x85, 0xc9, 0x75, 0x24, 0xe8, 0x8e, 0xbf, 0xff, 0xff, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0xa3, 0xbe, 0xff, 0xff, 0x33, 0xc0, 0xeb, 0x76, 0x48, 0x85, 0xd2, 0x74, 0xd7, 0x48, 0x3b, 0xca, 0x73, 0xf2, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0x49, 0x8b, 0xd0, 0xe8, 0x50, 0xa3, 0xff, 0xff, 0x4c, 0x8b, 0x5c, 0x24, 0x38, 0x41, 0x83, 0x7b, 0x08, 0x00, 0x75, 0x19, 0x80, 0x7c, 0x24, 0x48, 0x00, 0x48, 0x8d, 0x43, 0xff, 0x74, 0x48, 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xeb, 0x3a, 0x48, 0x8d, 0x53, 0xff, 0x48, 0xff, 0xca, 0x48, 0x3b, 0xfa, 0x77, 0x0b, 0x0f, 0xb6, 0x02, 0x42, 0xf6, 0x44, 0x18, 0x1d, 0x04, 0x75, 0xed, 0x48, 0x8b, 0xcb, 0x48, 0x2b, 0xca, 0x83, 0xe1, 0x01, 0x48, 0x2b, 0xd9, 0x80, 0x7c, 0x24, 0x48, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x48, 0x8d, 0x43, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x83, 0xc4, 0x50, 0x5f, 0xc3, 0xcc, 0xcc, 0x45, 0x33, 0xc0, 0xe9, 0x3c, 0xff, 0xff, 0xff, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x41, 0x54, 0x41, 0x55, 0x48, 0x83, 0xec, 0x50, 0x45, 0x33, 0xed, 0x49, 0x8b, 0xf9, 0x49, 0x8b, 0xf0, 0x48, 0x8b, 0xea, 0x48, 0x8b, 0xd9, 0x4d, 0x3b, 0xcd, 0x75, 0x0e, 0x49, 0x3b, 0xcd, 0x75, 0x0e, 0x49, 0x3b, 0xd5, 0x75, 0x20, 0x33, 0xc0, 0xeb, 0x3e, 0x49, 0x3b, 0xcd, 0x74, 0x17, 0x49, 0x3b, 0xd5, 0x76, 0x12, 0x4d, 0x3b, 0xcd, 0x75, 0x05, 0x44, 0x88, 0x29, 0xeb, 0xe8, 0x4d, 0x3b, 0xc5, 0x75, 0x3f, 0x44, 0x88, 0x29, 0xe8, 0x89, 0xbe, 0xff, 0xff, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x89, 0x18, 0x4c, 0x89, 0x6c, 0x24, 0x20, 0xe8, 0x9e, 0xbd, 0xff, 0xff, 0x8b, 0xc3, 0x4c, 0x8d, 0x5c, 0x24, 0x50, 0x49, 0x8b, 0x5b, 0x20, 0x49, 0x8b, 0x6b, 0x28, 0x49, 0x8b, 0x73, 0x30, 0x49, 0x8b, 0xe3, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0xc3, 0x48, 0x8b, 0x94, 0x24, 0x90, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0xe8, 0x38, 0xa2, 0xff, 0xff, 0x4c, 0x8b, 0x5c, 0x24, 0x38, 0x48, 0x8b, 0xd5, 0x48, 0x8b, 0xcb, 0x45, 0x39, 0x6b, 0x08, 0x75, 0x20, 0x4c, 0x8b, 0xcf, 0x4c, 0x8b, 0xc6, 0xe8, 0x58, 0x11, 0x00, 0x00, 0x44, 0x38, 0x6c, 0x24, 0x48, 0x74, 0xb1, 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xeb, 0xa3, 0x48, 0x83, 0xff, 0xff, 0x75, 0x17, 0x8a, 0x06, 0x48, 0xff, 0xc6, 0x88, 0x01, 0x48, 0xff, 0xc1, 0x41, 0x3a, 0xc5, 0x74, 0x2e, 0x48, 0x83, 0xea, 0x01, 0x75, 0xeb, 0xeb, 0x26, 0x8a, 0x06, 0x48, 0xff, 0xc6, 0x88, 0x01, 0x48, 0xff, 0xc1, 0x41, 0x3a, 0xc5, 0x74, 0x0c, 0x48, 0x83, 0xea, 0x01, 0x74, 0x06, 0x48, 0x83, 0xef, 0x01, 0x75, 0xe5, 0x49, 0x3b, 0xfd, 0x75, 0x06, 0x44, 0x88, 0x29, 0x48, 0xff, 0xc1, 0x49, 0x3b, 0xd5, 0x0f, 0x85, 0x05, 0x01, 0x00, 0x00, 0x44, 0x38, 0x2e, 0x74, 0x06, 0x48, 0x83, 0xff, 0x01, 0x75, 0x59, 0x4c, 0x8d, 0x61, 0xff, 0x49, 0x8b, 0xf4, 0x4c, 0x3b, 0xe3, 0x72, 0x1a, 0x0f, 0xb6, 0x0e, 0x48, 0x8d, 0x54, 0x24, 0x30, 0xe8, 0xb3, 0xc7, 0xff, 0xff, 0x41, 0x3b, 0xc5, 0x74, 0x08, 0x48, 0xff, 0xce, 0x48, 0x3b, 0xf3, 0x73, 0xe6, 0x41, 0x8b, 0xc4, 0x2b, 0xc6, 0xa8, 0x01, 0x74, 0x2a, 0x45, 0x88, 0x2c, 0x24, 0xe8, 0x80, 0xbd, 0xff, 0xff, 0xba, 0x2a, 0x00, 0x00, 0x00, 0x89, 0x10, 0x44, 0x38, 0x6c, 0x24, 0x48, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x8b, 0xc2, 0xe9, 0xf3, 0xfe, 0xff, 0xff, 0x48, 0x83, 0xff, 0xff, 0x75, 0x5c, 0x48, 0x83, 0xfd, 0x01, 0x76, 0x4f, 0x48, 0x8d, 0x74, 0x2b, 0xfe, 0x48, 0x8b, 0xfe, 0x48, 0x3b, 0xf3, 0x72, 0x1a, 0x0f, 0xb6, 0x0f, 0x48, 0x8d, 0x54, 0x24, 0x30, 0xe8, 0x4d, 0xc7, 0xff, 0xff, 0x41, 0x3b, 0xc5, 0x74, 0x08, 0x48, 0xff, 0xcf, 0x48, 0x3b, 0xfb, 0x73, 0xe6, 0x8b, 0xc6, 0x2b, 0xc7, 0xa8, 0x01, 0x74, 0x20, 0x44, 0x88, 0x2e, 0x44, 0x38, 0x6c, 0x24, 0x48, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xb8, 0x50, 0x00, 0x00, 0x00, 0xe9, 0x98, 0xfe, 0xff, 0xff, 0x44, 0x88, 0x6c, 0x2b, 0xff, 0xeb, 0xdc, 0x44, 0x88, 0x2b, 0xe8, 0xf5, 0xbc, 0xff, 0xff, 0xbb, 0x22, 0x00, 0x00, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x89, 0x18, 0x4c, 0x89, 0x6c, 0x24, 0x20, 0xe8, 0x0a, 0xbc, 0xff, 0xff, 0x44, 0x38, 0x6c, 0x24, 0x48, 0x0f, 0x84, 0x61, 0xfe, 0xff, 0xff, 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xe9, 0x50, 0xfe, 0xff, 0xff, 0x48, 0x8b, 0xc1, 0x48, 0x2b, 0xc3, 0x48, 0x83, 0xf8, 0x02, 0x7c, 0x59, 0x48, 0x8d, 0x71, 0xfe, 0x48, 0x8b, 0xfe, 0x48, 0x3b, 0xf3, 0x72, 0x1a, 0x0f, 0xb6, 0x0f, 0x48, 0x8d, 0x54, 0x24, 0x30, 0xe8, 0xad, 0xc6, 0xff, 0xff, 0x41, 0x3b, 0xc5, 0x74, 0x08, 0x48, 0xff, 0xcf, 0x48, 0x3b, 0xfb, 0x73, 0xe6, 0x8b, 0xc6, 0x2b, 0xc7, 0xa8, 0x01, 0x74, 0x2b, 0x44, 0x88, 0x2e, 0xe8, 0x7c, 0xbc, 0xff, 0xff, 0xba, 0x2a, 0x00, 0x00, 0x00, 0x89, 0x10, 0x44, 0x38, 0x6c, 0x24, 0x48, 0x0f, 0x84, 0x04, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xe9, 0xf3, 0xfe, 0xff, 0xff, 0x44, 0x38, 0x6c, 0x24, 0x48, 0x0f, 0x84, 0xa0, 0xfd, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xe9, 0x8f, 0xfd, 0xff, 0xff, 0xcc, 0x40, 0x55, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x60, 0x48, 0x8d, 0x6c, 0x24, 0x40, 0x48, 0x89, 0x5d, 0x50, 0x48, 0x89, 0x75, 0x58, 0x48, 0x89, 0x7d, 0x60, 0x48, 0x8b, 0x05, 0x6e, 0xa0, 0x00, 0x00, 0x48, 0x33, 0xc5, 0x48, 0x89, 0x45, 0x18, 0x44, 0x8b, 0x15, 0x04, 0xbf, 0x00, 0x00, 0xbe, 0x02, 0x00, 0x00, 0x00, 0x33, 0xff, 0x4d, 0x8b, 0xd9, 0x4c, 0x89, 0x4d, 0x10, 0x44, 0x89, 0x45, 0x00, 0x44, 0x8b, 0xf2, 0x89, 0x55, 0x08, 0x48, 0x8b, 0xd9, 0x44, 0x8d, 0x6e, 0xff, 0x44, 0x3b, 0xd7, 0x75, 0x4f, 0x4c, 0x8d, 0x05, 0x61, 0x78, 0x00, 0x00, 0x45, 0x8b, 0xcd, 0xba, 0x00, 0x01, 0x00, 0x00, 0x33, 0xc9, 0x89, 0x7c, 0x24, 0x28, 0x48, 0x89, 0x7c, 0x24, 0x20, 0xff, 0x15, 0x4c, 0x6e, 0x00, 0x00, 0x3b, 0xc7, 0x74, 0x0c, 0x45, 0x8b, 0xd5, 0x44, 0x89, 0x2d, 0xb2, 0xbe, 0x00, 0x00, 0xeb, 0x1b, 0xff, 0x15, 0x1e, 0x6d, 0x00, 0x00, 0x44, 0x8b, 0x15, 0xa3, 0xbe, 0x00, 0x00, 0x83, 0xf8, 0x78, 0x44, 0x0f, 0x44, 0xd6, 0x44, 0x89, 0x15, 0x95, 0xbe, 0x00, 0x00, 0x4c, 0x8b, 0x5d, 0x10, 0x44, 0x8b, 0x4d, 0x70, 0x44, 0x3b, 0xcf, 0x7e, 0x35, 0x41, 0x8b, 0xc9, 0x49, 0x8b, 0xc3, 0x41, 0x2b, 0xcd, 0x40, 0x38, 0x38, 0x74, 0x0a, 0x49, 0x03, 0xc5, 0x3b, 0xcf, 0x75, 0xf1, 0x83, 0xc9, 0xff, 0x41, 0x8b, 0xc1, 0x2b, 0xc1, 0x41, 0x2b, 0xc5, 0x41, 0x3b, 0xc1, 0x7d, 0x0a, 0x44, 0x8d, 0x48, 0x01, 0x44, 0x89, 0x4d, 0x70, 0xeb, 0x06, 0x44, 0x8b, 0xc8, 0x89, 0x45, 0x70, 0x44, 0x3b, 0xd6, 0x0f, 0x84, 0x5c, 0x02, 0x00, 0x00, 0x44, 0x3b, 0xd7, 0x0f, 0x84, 0x53, 0x02, 0x00, 0x00, 0x45, 0x3b, 0xd5, 0x0f, 0x85, 0x80, 0x02, 0x00, 0x00, 0x44, 0x8b, 0xa5, 0x88, 0x00, 0x00, 0x00, 0x8b, 0xf7, 0x44, 0x3b, 0xe7, 0x75, 0x07, 0x48, 0x8b, 0x03, 0x44, 0x8b, 0x60, 0x04, 0xf7, 0x9d, 0x90, 0x00, 0x00, 0x00, 0x4d, 0x8b, 0xc3, 0x41, 0x8b, 0xcc, 0x1b, 0xd2, 0x89, 0x7c, 0x24, 0x28, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x83, 0xe2, 0x08, 0x41, 0x03, 0xd5, 0xff, 0x15, 0x84, 0x6d, 0x00, 0x00, 0x4c, 0x63, 0xf8, 0x44, 0x3b, 0xff, 0x0f, 0x84, 0x3c, 0x02, 0x00, 0x00, 0x48, 0xbb, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x41, 0xbe, 0xdd, 0xdd, 0x00, 0x00, 0x41, 0xbd, 0x00, 0x04, 0x00, 0x00, 0x7e, 0x5b, 0x33, 0xd2, 0x48, 0x8d, 0x42, 0xe0, 0x49, 0xf7, 0xf7, 0x48, 0x83, 0xf8, 0x02, 0x72, 0x4c, 0x4b, 0x8d, 0x4c, 0x3f, 0x10, 0x49, 0x3b, 0xcd, 0x77, 0x2e, 0x48, 0x8d, 0x41, 0x0f, 0x48, 0x3b, 0xc1, 0x77, 0x03, 0x48, 0x8b, 0xc3, 0x48, 0x83, 0xe0, 0xf0, 0xe8, 0x5a, 0x5c, 0x00, 0x00, 0x48, 0x2b, 0xe0, 0x48, 0x8d, 0x7c, 0x24, 0x40, 0x48, 0x85, 0xff, 0x0f, 0x84, 0xe5, 0x01, 0x00, 0x00, 0xc7, 0x07, 0xcc, 0xcc, 0x00, 0x00, 0xeb, 0x10, 0xe8, 0x18, 0xee, 0xff, 0xff, 0x48, 0x8b, 0xf8, 0x48, 0x85, 0xc0, 0x74, 0x07, 0x44, 0x89, 0x30, 0x48, 0x83, 0xc7, 0x10, 0x48, 0x85, 0xff, 0x0f, 0x84, 0xc0, 0x01, 0x00, 0x00, 0x44, 0x8b, 0x4d, 0x70, 0x4c, 0x8b, 0x45, 0x10, 0xba, 0x01, 0x00, 0x00, 0x00, 0x41, 0x8b, 0xcc, 0x44, 0x89, 0x7c, 0x24, 0x28, 0x48, 0x89, 0x7c, 0x24, 0x20, 0xff, 0x15, 0xdc, 0x6c, 0x00, 0x00, 0x33, 0xc9, 0x3b, 0xc1, 0x0f, 0x84, 0x4b, 0x01, 0x00, 0x00, 0x8b, 0x55, 0x00, 0x89, 0x4c, 0x24, 0x28, 0x48, 0x89, 0x4c, 0x24, 0x20, 0x8b, 0x4d, 0x08, 0x45, 0x8b, 0xcf, 0x4c, 0x8b, 0xc7, 0xff, 0x15, 0xbf, 0x6c, 0x00, 0x00, 0x45, 0x33, 0xc0, 0x48, 0x63, 0xf0, 0x41, 0x3b, 0xf0, 0x0f, 0x84, 0x21, 0x01, 0x00, 0x00, 0x44, 0x8b, 0x55, 0x00, 0x41, 0x0f, 0xba, 0xe2, 0x0a, 0x73, 0x3b, 0x8b, 0x85, 0x80, 0x00, 0x00, 0x00, 0x41, 0x3b, 0xc0, 0x0f, 0x84, 0x07, 0x01, 0x00, 0x00, 0x3b, 0xf0, 0x0f, 0x8f, 0xff, 0x00, 0x00, 0x00, 0x8b, 0x4d, 0x08, 0x89, 0x44, 0x24, 0x28, 0x48, 0x8b, 0x45, 0x78, 0x45, 0x8b, 0xcf, 0x4c, 0x8b, 0xc7, 0x41, 0x8b, 0xd2, 0x48, 0x89, 0x44, 0x24, 0x20, 0xff, 0x15, 0x6f, 0x6c, 0x00, 0x00, 0xe9, 0xdb, 0x00, 0x00, 0x00, 0x41, 0x3b, 0xf0, 0x7e, 0x60, 0x33, 0xd2, 0x48, 0x8d, 0x42, 0xe0, 0x48, 0xf7, 0xf6, 0x48, 0x83, 0xf8, 0x02, 0x72, 0x51, 0x48, 0x8d, 0x4c, 0x36, 0x10, 0x49, 0x3b, 0xcd, 0x77, 0x2a, 0x48, 0x8d, 0x41, 0x0f, 0x48, 0x3b, 0xc1, 0x77, 0x03, 0x48, 0x8b, 0xc3, 0x48, 0x83, 0xe0, 0xf0, 0xe8, 0x57, 0x5b, 0x00, 0x00, 0x48, 0x2b, 0xe0, 0x48, 0x8d, 0x5c, 0x24, 0x40, 0x49, 0x3b, 0xd8, 0x74, 0x1f, 0xc7, 0x03, 0xcc, 0xcc, 0x00, 0x00, 0xeb, 0x13, 0xe8, 0x19, 0xed, 0xff, 0xff, 0x45, 0x33, 0xc0, 0x48, 0x8b, 0xd8, 0x49, 0x3b, 0xc0, 0x74, 0x07, 0x44, 0x89, 0x30, 0x48, 0x83, 0xc3, 0x10, 0x44, 0x8b, 0x55, 0x00, 0xeb, 0x03, 0x49, 0x8b, 0xd8, 0x49, 0x3b, 0xd8, 0x74, 0x6e, 0x8b, 0x4d, 0x08, 0x45, 0x8b, 0xcf, 0x4c, 0x8b, 0xc7, 0x41, 0x8b, 0xd2, 0x89, 0x74, 0x24, 0x28, 0x48, 0x89, 0x5c, 0x24, 0x20, 0xff, 0x15, 0xe2, 0x6b, 0x00, 0x00, 0x33, 0xc9, 0x3b, 0xc1, 0x74, 0x3f, 0x8b, 0x85, 0x80, 0x00, 0x00, 0x00, 0x33, 0xd2, 0x48, 0x89, 0x4c, 0x24, 0x38, 0x44, 0x8b, 0xce, 0x4c, 0x8b, 0xc3, 0x48, 0x89, 0x4c, 0x24, 0x30, 0x3b, 0xc1, 0x75, 0x0b, 0x89, 0x4c, 0x24, 0x28, 0x48, 0x89, 0x4c, 0x24, 0x20, 0xeb, 0x0d, 0x89, 0x44, 0x24, 0x28, 0x48, 0x8b, 0x45, 0x78, 0x48, 0x89, 0x44, 0x24, 0x20, 0x41, 0x8b, 0xcc, 0xff, 0x15, 0x2f, 0x6b, 0x00, 0x00, 0x8b, 0xf0, 0x48, 0x8d, 0x4b, 0xf0, 0x44, 0x39, 0x31, 0x75, 0x05, 0xe8, 0x8f, 0xbb, 0xff, 0xff, 0x48, 0x8d, 0x4f, 0xf0, 0x44, 0x39, 0x31, 0x75, 0x05, 0xe8, 0x81, 0xbb, 0xff, 0xff, 0x8b, 0xc6, 0xe9, 0xcd, 0x01, 0x00, 0x00, 0x48, 0x8b, 0xf7, 0x4c, 0x8b, 0xe7, 0x44, 0x3b, 0xf7, 0x75, 0x0b, 0x48, 0x8b, 0x03, 0x44, 0x8b, 0x70, 0x14, 0x44, 0x89, 0x75, 0x08, 0x8b, 0xbd, 0x88, 0x00, 0x00, 0x00, 0x85, 0xff, 0x75, 0x06, 0x48, 0x8b, 0x03, 0x8b, 0x78, 0x04, 0x41, 0x8b, 0xce, 0xe8, 0x68, 0x20, 0x00, 0x00, 0x44, 0x8b, 0xe8, 0x83, 0xf8, 0xff, 0x75, 0x07, 0x33, 0xc0, 0xe9, 0x90, 0x01, 0x00, 0x00, 0x4c, 0x8b, 0x7d, 0x78, 0x4c, 0x8b, 0x45, 0x10, 0x3b, 0xc7, 0x0f, 0x84, 0x3c, 0x01, 0x00, 0x00, 0x33, 0xdb, 0x4c, 0x8d, 0x4d, 0x70, 0x8b, 0xd0, 0x8b, 0xcf, 0x89, 0x5c, 0x24, 0x28, 0x48, 0x89, 0x5c, 0x24, 0x20, 0xe8, 0x85, 0x20, 0x00, 0x00, 0x48, 0x8b, 0xf0, 0x48, 0x3b, 0xc3, 0x74, 0xc9, 0x44, 0x8b, 0x4d, 0x70, 0x8b, 0x55, 0x00, 0x4c, 0x8b, 0xc0, 0x41, 0x8b, 0xce, 0x89, 0x5c, 0x24, 0x28, 0x48, 0x89, 0x5c, 0x24, 0x20, 0xff, 0x15, 0xe1, 0x6a, 0x00, 0x00, 0x4c, 0x63, 0xc8, 0x44, 0x89, 0x4d, 0x04, 0x44, 0x3b, 0xcb, 0x75, 0x07, 0x8b, 0xfb, 0xe9, 0x10, 0x01, 0x00, 0x00, 0x44, 0x3b, 0xcb, 0x41, 0xbe, 0xdd, 0xdd, 0x00, 0x00, 0x7e, 0x62, 0x49, 0x8b, 0xc9, 0x49, 0x83, 0xf9, 0xe0, 0x77, 0x59, 0x48, 0x83, 0xc1, 0x10, 0x48, 0x81, 0xf9, 0x00, 0x04, 0x00, 0x00, 0x77, 0x34, 0x48, 0x8d, 0x59, 0x0f, 0x48, 0x3b, 0xd9, 0x77, 0x0a, 0x48, 0xbb, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x48, 0x83, 0xe3, 0xf0, 0x48, 0x8b, 0xc3, 0xe8, 0xbe, 0x59, 0x00, 0x00, 0x48, 0x2b, 0xe3, 0x48, 0x8d, 0x5c, 0x24, 0x40, 0x48, 0x85, 0xdb, 0x74, 0x25, 0xc7, 0x03, 0xcc, 0xcc, 0x00, 0x00, 0xeb, 0x10, 0xe8, 0x80, 0xeb, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x74, 0x07, 0x44, 0x89, 0x30, 0x48, 0x83, 0xc3, 0x10, 0x44, 0x8b, 0x4d, 0x04, 0x48, 0x85, 0xdb, 0x75, 0x04, 0x33, 0xdb, 0xeb, 0x83, 0x4d, 0x63, 0xc1, 0x33, 0xd2, 0x48, 0x8b, 0xcb, 0xe8, 0x4b, 0x95, 0xff, 0xff, 0x44, 0x8b, 0x5d, 0x04, 0x44, 0x8b, 0x4d, 0x70, 0x8b, 0x55, 0x00, 0x8b, 0x4d, 0x08, 0x44, 0x89, 0x5c, 0x24, 0x28, 0x4c, 0x8b, 0xc6, 0x48, 0x89, 0x5c, 0x24, 0x20, 0xff, 0x15, 0x2a, 0x6a, 0x00, 0x00, 0x89, 0x45, 0x04, 0x85, 0xc0, 0x75, 0x04, 0x33, 0xff, 0xeb, 0x2e, 0x8b, 0x85, 0x80, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x4d, 0x04, 0x4c, 0x8b, 0xc3, 0x89, 0x44, 0x24, 0x28, 0x8b, 0xd7, 0x41, 0x8b, 0xcd, 0x4c, 0x89, 0x7c, 0x24, 0x20, 0xe8, 0x7f, 0x1f, 0x00, 0x00, 0x8b, 0x7d, 0x04, 0x4c, 0x8b, 0xe0, 0x33, 0xc0, 0x4c, 0x3b, 0xe0, 0x0f, 0x44, 0xf8, 0x48, 0x8d, 0x4b, 0xf0, 0x44, 0x39, 0x31, 0x75, 0x28, 0xe8, 0xf3, 0xb9, 0xff, 0xff, 0xeb, 0x21, 0x8b, 0x85, 0x80, 0x00, 0x00, 0x00, 0x44, 0x8b, 0x4d, 0x70, 0x8b, 0x55, 0x00, 0x89, 0x44, 0x24, 0x28, 0x41, 0x8b, 0xce, 0x4c, 0x89, 0x7c, 0x24, 0x20, 0xff, 0x15, 0xc2, 0x69, 0x00, 0x00, 0x8b, 0xf8, 0x33, 0xdb, 0x48, 0x3b, 0xf3, 0x74, 0x08, 0x48, 0x8b, 0xce, 0xe8, 0xc1, 0xb9, 0xff, 0xff, 0x4c, 0x3b, 0xe3, 0x74, 0x0d, 0x4d, 0x3b, 0xfc, 0x74, 0x08, 0x49, 0x8b, 0xcc, 0xe8, 0xaf, 0xb9, 0xff, 0xff, 0x8b, 0xc7, 0x48, 0x8b, 0x4d, 0x18, 0x48, 0x33, 0xcd, 0xe8, 0xf1, 0x9a, 0xff, 0xff, 0x48, 0x8b, 0x5d, 0x50, 0x48, 0x8b, 0x75, 0x58, 0x48, 0x8b, 0x7d, 0x60, 0x48, 0x8d, 0x65, 0x20, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5d, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x70, 0x8b, 0xf2, 0x48, 0x8b, 0xd1, 0x48, 0x8d, 0x4c, 0x24, 0x50, 0x49, 0x8b, 0xd9, 0x41, 0x8b, 0xf8, 0xe8, 0xd0, 0x9a, 0xff, 0xff, 0x8b, 0x84, 0x24, 0xb8, 0x00, 0x00, 0x00, 0x44, 0x8b, 0x9c, 0x24, 0xc0, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x50, 0x44, 0x89, 0x5c, 0x24, 0x40, 0x89, 0x44, 0x24, 0x38, 0x8b, 0x84, 0x24, 0xb0, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x30, 0x48, 0x8b, 0x84, 0x24, 0xa8, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xcb, 0x48, 0x89, 0x44, 0x24, 0x28, 0x8b, 0x84, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x44, 0x8b, 0xc7, 0x8b, 0xd6, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x4f, 0xfa, 0xff, 0xff, 0x80, 0x7c, 0x24, 0x68, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x60, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x4c, 0x8d, 0x5c, 0x24, 0x70, 0x49, 0x8b, 0x5b, 0x10, 0x49, 0x8b, 0x73, 0x18, 0x49, 0x8b, 0xe3, 0x5f, 0xc3, 0xcc, 0xcc, 0x44, 0x89, 0x4c, 0x24, 0x20, 0x55, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x40, 0x48, 0x8d, 0x6c, 0x24, 0x30, 0x48, 0x89, 0x5d, 0x40, 0x48, 0x89, 0x75, 0x48, 0x48, 0x89, 0x7d, 0x50, 0x48, 0x8b, 0x05, 0x92, 0x9a, 0x00, 0x00, 0x48, 0x33, 0xc5, 0x48, 0x89, 0x45, 0x08, 0x44, 0x8b, 0x0d, 0x2c, 0xb9, 0x00, 0x00, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x33, 0xdb, 0x4d, 0x8b, 0xf0, 0x44, 0x8b, 0xfa, 0x4c, 0x8b, 0xe9, 0x8d, 0x77, 0x01, 0x44, 0x3b, 0xcb, 0x75, 0x3d, 0x4c, 0x8d, 0x4d, 0x00, 0x48, 0x8d, 0x15, 0x8d, 0x72, 0x00, 0x00, 0x44, 0x8b, 0xc7, 0x8b, 0xcf, 0xff, 0x15, 0x96, 0x68, 0x00, 0x00, 0x3b, 0xc3, 0x74, 0x08, 0x89, 0x3d, 0xf4, 0xb8, 0x00, 0x00, 0xeb, 0x36, 0xff, 0x15, 0x5c, 0x67, 0x00, 0x00, 0x44, 0x8b, 0x0d, 0xe5, 0xb8, 0x00, 0x00, 0x83, 0xf8, 0x78, 0x44, 0x0f, 0x44, 0xce, 0x44, 0x89, 0x0d, 0xd7, 0xb8, 0x00, 0x00, 0x44, 0x3b, 0xce, 0x0f, 0x84, 0x26, 0x01, 0x00, 0x00, 0x44, 0x3b, 0xcb, 0x0f, 0x84, 0x1d, 0x01, 0x00, 0x00, 0x44, 0x3b, 0xcf, 0x0f, 0x85, 0x43, 0x01, 0x00, 0x00, 0x8b, 0x75, 0x68, 0x3b, 0xf3, 0x75, 0x07, 0x49, 0x8b, 0x45, 0x00, 0x8b, 0x70, 0x04, 0xf7, 0x5d, 0x78, 0x44, 0x8b, 0x4d, 0x58, 0x4d, 0x8b, 0xc6, 0x1b, 0xd2, 0x8b, 0xce, 0x89, 0x5c, 0x24, 0x28, 0x83, 0xe2, 0x08, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x03, 0xd7, 0xff, 0x15, 0x0c, 0x68, 0x00, 0x00, 0x4c, 0x63, 0xe0, 0x44, 0x3b, 0xe3, 0x0f, 0x84, 0x07, 0x01, 0x00, 0x00, 0x41, 0xbd, 0xdd, 0xdd, 0x00, 0x00, 0x7e, 0x68, 0x48, 0xb8, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x4c, 0x3b, 0xe0, 0x77, 0x59, 0x4b, 0x8d, 0x4c, 0x24, 0x10, 0x48, 0x81, 0xf9, 0x00, 0x04, 0x00, 0x00, 0x77, 0x35, 0x48, 0x8d, 0x41, 0x0f, 0x48, 0x3b, 0xc1, 0x77, 0x0a, 0x48, 0xb8, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x48, 0x83, 0xe0, 0xf0, 0xe8, 0xe7, 0x56, 0x00, 0x00, 0x48, 0x2b, 0xe0, 0x48, 0x8d, 0x7c, 0x24, 0x30, 0x48, 0x3b, 0xfb, 0x0f, 0x84, 0xb5, 0x00, 0x00, 0x00, 0xc7, 0x07, 0xcc, 0xcc, 0x00, 0x00, 0xeb, 0x10, 0xe8, 0xa5, 0xe8, 0xff, 0xff, 0x48, 0x8b, 0xf8, 0x48, 0x3b, 0xc3, 0x74, 0x0c, 0x44, 0x89, 0x28, 0x48, 0x83, 0xc7, 0x10, 0xeb, 0x03, 0x48, 0x8b, 0xfb, 0x48, 0x3b, 0xfb, 0x0f, 0x84, 0x8b, 0x00, 0x00, 0x00, 0x4d, 0x8b, 0xc4, 0x33, 0xd2, 0x48, 0x8b, 0xcf, 0x4d, 0x03, 0xc0, 0xe8, 0x6c, 0x92, 0xff, 0xff, 0x44, 0x8b, 0x4d, 0x58, 0x4d, 0x8b, 0xc6, 0xba, 0x01, 0x00, 0x00, 0x00, 0x8b, 0xce, 0x44, 0x89, 0x64, 0x24, 0x28, 0x48, 0x89, 0x7c, 0x24, 0x20, 0xff, 0x15, 0x56, 0x67, 0x00, 0x00, 0x3b, 0xc3, 0x74, 0x15, 0x4c, 0x8b, 0x4d, 0x60, 0x44, 0x8b, 0xc0, 0x48, 0x8b, 0xd7, 0x41, 0x8b, 0xcf, 0xff, 0x15, 0x57, 0x67, 0x00, 0x00, 0x8b, 0xd8, 0x48, 0x8d, 0x4f, 0xf0, 0x44, 0x39, 0x29, 0x75, 0x05, 0xe8, 0x37, 0xb7, 0xff, 0xff, 0x8b, 0xc3, 0xe9, 0x88, 0x00, 0x00, 0x00, 0x44, 0x8b, 0x65, 0x70, 0x48, 0x8b, 0xfb, 0x44, 0x3b, 0xe3, 0x75, 0x08, 0x49, 0x8b, 0x45, 0x00, 0x44, 0x8b, 0x60, 0x14, 0x8b, 0x75, 0x68, 0x3b, 0xf3, 0x75, 0x07, 0x49, 0x8b, 0x45, 0x00, 0x8b, 0x70, 0x04, 0x41, 0x8b, 0xcc, 0xe8, 0x22, 0x1c, 0x00, 0x00, 0x83, 0xf8, 0xff, 0x75, 0x04, 0x33, 0xc0, 0xeb, 0x55, 0x3b, 0xc6, 0x74, 0x24, 0x4c, 0x8d, 0x4d, 0x58, 0x4d, 0x8b, 0xc6, 0x8b, 0xd0, 0x8b, 0xce, 0x89, 0x5c, 0x24, 0x28, 0x48, 0x89, 0x5c, 0x24, 0x20, 0xe8, 0x50, 0x1c, 0x00, 0x00, 0x48, 0x8b, 0xf8, 0x48, 0x3b, 0xc3, 0x74, 0xd7, 0x4c, 0x8b, 0xf0, 0x48, 0x8b, 0x45, 0x60, 0x44, 0x8b, 0x4d, 0x58, 0x4d, 0x8b, 0xc6, 0x41, 0x8b, 0xd7, 0x41, 0x8b, 0xcc, 0x48, 0x89, 0x44, 0x24, 0x20, 0xff, 0x15, 0xc1, 0x66, 0x00, 0x00, 0x8b, 0xf0, 0x48, 0x3b, 0xfb, 0x74, 0x08, 0x48, 0x8b, 0xcf, 0xe8, 0xaa, 0xb6, 0xff, 0xff, 0x8b, 0xc6, 0x48, 0x8b, 0x4d, 0x08, 0x48, 0x33, 0xcd, 0xe8, 0xec, 0x97, 0xff, 0xff, 0x48, 0x8b, 0x5d, 0x40, 0x48, 0x8b, 0x75, 0x48, 0x48, 0x8b, 0x7d, 0x50, 0x48, 0x8d, 0x65, 0x10, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5d, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x60, 0x8b, 0xf2, 0x48, 0x8b, 0xd1, 0x48, 0x8d, 0x4c, 0x24, 0x40, 0x41, 0x8b, 0xd9, 0x49, 0x8b, 0xf8, 0xe8, 0xcc, 0x97, 0xff, 0xff, 0x8b, 0x84, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x44, 0x8b, 0x9c, 0x24, 0xa8, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x40, 0x44, 0x89, 0x5c, 0x24, 0x38, 0x89, 0x44, 0x24, 0x30, 0x8b, 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x28, 0x48, 0x8b, 0x84, 0x24, 0x90, 0x00, 0x00, 0x00, 0x44, 0x8b, 0xcb, 0x4c, 0x8b, 0xc7, 0x8b, 0xd6, 0x48, 0x89, 0x44, 0x24, 0x20, 0xe8, 0x2e, 0xfd, 0xff, 0xff, 0x80, 0x7c, 0x24, 0x58, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x50, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0x5c, 0x24, 0x70, 0x48, 0x8b, 0x74, 0x24, 0x78, 0x48, 0x83, 0xc4, 0x60, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xd9, 0x48, 0x2b, 0xd1, 0x0f, 0x82, 0x9e, 0x01, 0x00, 0x00, 0x49, 0x83, 0xf8, 0x08, 0x72, 0x61, 0xf6, 0xc1, 0x07, 0x74, 0x36, 0xf6, 0xc1, 0x01, 0x74, 0x0b, 0x8a, 0x04, 0x0a, 0x49, 0xff, 0xc8, 0x88, 0x01, 0x48, 0xff, 0xc1, 0xf6, 0xc1, 0x02, 0x74, 0x0f, 0x66, 0x8b, 0x04, 0x0a, 0x49, 0x83, 0xe8, 0x02, 0x66, 0x89, 0x01, 0x48, 0x83, 0xc1, 0x02, 0xf6, 0xc1, 0x04, 0x74, 0x0d, 0x8b, 0x04, 0x0a, 0x49, 0x83, 0xe8, 0x04, 0x89, 0x01, 0x48, 0x83, 0xc1, 0x04, 0x4d, 0x8b, 0xc8, 0x49, 0xc1, 0xe9, 0x05, 0x75, 0x51, 0x4d, 0x8b, 0xc8, 0x49, 0xc1, 0xe9, 0x03, 0x74, 0x14, 0x48, 0x8b, 0x04, 0x0a, 0x48, 0x89, 0x01, 0x48, 0x83, 0xc1, 0x08, 0x49, 0xff, 0xc9, 0x75, 0xf0, 0x49, 0x83, 0xe0, 0x07, 0x4d, 0x85, 0xc0, 0x75, 0x08, 0x49, 0x8b, 0xc3, 0xc3, 0x0f, 0x1f, 0x40, 0x00, 0x8a, 0x04, 0x0a, 0x88, 0x01, 0x48, 0xff, 0xc1, 0x49, 0xff, 0xc8, 0x75, 0xf3, 0x49, 0x8b, 0xc3, 0xc3, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x90, 0x66, 0x66, 0x90, 0x49, 0x81, 0xf9, 0x00, 0x20, 0x00, 0x00, 0x73, 0x42, 0x48, 0x8b, 0x04, 0x0a, 0x4c, 0x8b, 0x54, 0x0a, 0x08, 0x48, 0x83, 0xc1, 0x20, 0x48, 0x89, 0x41, 0xe0, 0x4c, 0x89, 0x51, 0xe8, 0x48, 0x8b, 0x44, 0x0a, 0xf0, 0x4c, 0x8b, 0x54, 0x0a, 0xf8, 0x49, 0xff, 0xc9, 0x48, 0x89, 0x41, 0xf0, 0x4c, 0x89, 0x51, 0xf8, 0x75, 0xd4, 0x49, 0x83, 0xe0, 0x1f, 0xe9, 0x71, 0xff, 0xff, 0xff, 0x66, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x90, 0x48, 0x81, 0xfa, 0x00, 0x10, 0x00, 0x00, 0x72, 0xb5, 0xb8, 0x20, 0x00, 0x00, 0x00, 0x0f, 0x18, 0x04, 0x0a, 0x0f, 0x18, 0x44, 0x0a, 0x40, 0x48, 0x81, 0xc1, 0x80, 0x00, 0x00, 0x00, 0xff, 0xc8, 0x75, 0xec, 0x48, 0x81, 0xe9, 0x00, 0x10, 0x00, 0x00, 0xb8, 0x40, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x0c, 0x0a, 0x4c, 0x8b, 0x54, 0x0a, 0x08, 0x4c, 0x0f, 0xc3, 0x09, 0x4c, 0x0f, 0xc3, 0x51, 0x08, 0x4c, 0x8b, 0x4c, 0x0a, 0x10, 0x4c, 0x8b, 0x54, 0x0a, 0x18, 0x4c, 0x0f, 0xc3, 0x49, 0x10, 0x4c, 0x0f, 0xc3, 0x51, 0x18, 0x4c, 0x8b, 0x4c, 0x0a, 0x20, 0x4c, 0x8b, 0x54, 0x0a, 0x28, 0x48, 0x83, 0xc1, 0x40, 0x4c, 0x0f, 0xc3, 0x49, 0xe0, 0x4c, 0x0f, 0xc3, 0x51, 0xe8, 0x4c, 0x8b, 0x4c, 0x0a, 0xf0, 0x4c, 0x8b, 0x54, 0x0a, 0xf8, 0xff, 0xc8, 0x4c, 0x0f, 0xc3, 0x49, 0xf0, 0x4c, 0x0f, 0xc3, 0x51, 0xf8, 0x75, 0xaa, 0x49, 0x81, 0xe8, 0x00, 0x10, 0x00, 0x00, 0x49, 0x81, 0xf8, 0x00, 0x10, 0x00, 0x00, 0x0f, 0x83, 0x71, 0xff, 0xff, 0xff, 0xf0, 0x80, 0x0c, 0x24, 0x00, 0xe9, 0xb9, 0xfe, 0xff, 0xff, 0x66, 0x66, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x90, 0x66, 0x66, 0x66, 0x90, 0x66, 0x90, 0x49, 0x03, 0xc8, 0x49, 0x83, 0xf8, 0x08, 0x72, 0x61, 0xf6, 0xc1, 0x07, 0x74, 0x36, 0xf6, 0xc1, 0x01, 0x74, 0x0b, 0x48, 0xff, 0xc9, 0x8a, 0x04, 0x0a, 0x49, 0xff, 0xc8, 0x88, 0x01, 0xf6, 0xc1, 0x02, 0x74, 0x0f, 0x48, 0x83, 0xe9, 0x02, 0x66, 0x8b, 0x04, 0x0a, 0x49, 0x83, 0xe8, 0x02, 0x66, 0x89, 0x01, 0xf6, 0xc1, 0x04, 0x74, 0x0d, 0x48, 0x83, 0xe9, 0x04, 0x8b, 0x04, 0x0a, 0x49, 0x83, 0xe8, 0x04, 0x89, 0x01, 0x4d, 0x8b, 0xc8, 0x49, 0xc1, 0xe9, 0x05, 0x75, 0x50, 0x4d, 0x8b, 0xc8, 0x49, 0xc1, 0xe9, 0x03, 0x74, 0x14, 0x48, 0x83, 0xe9, 0x08, 0x48, 0x8b, 0x04, 0x0a, 0x49, 0xff, 0xc9, 0x48, 0x89, 0x01, 0x75, 0xf0, 0x49, 0x83, 0xe0, 0x07, 0x4d, 0x85, 0xc0, 0x75, 0x07, 0x49, 0x8b, 0xc3, 0xc3, 0x0f, 0x1f, 0x00, 0x48, 0xff, 0xc9, 0x8a, 0x04, 0x0a, 0x49, 0xff, 0xc8, 0x88, 0x01, 0x75, 0xf3, 0x49, 0x8b, 0xc3, 0xc3, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x90, 0x66, 0x66, 0x90, 0x49, 0x81, 0xf9, 0x00, 0x20, 0x00, 0x00, 0x73, 0x42, 0x48, 0x8b, 0x44, 0x0a, 0xf8, 0x4c, 0x8b, 0x54, 0x0a, 0xf0, 0x48, 0x83, 0xe9, 0x20, 0x48, 0x89, 0x41, 0x18, 0x4c, 0x89, 0x51, 0x10, 0x48, 0x8b, 0x44, 0x0a, 0x08, 0x4c, 0x8b, 0x14, 0x0a, 0x49, 0xff, 0xc9, 0x48, 0x89, 0x41, 0x08, 0x4c, 0x89, 0x11, 0x75, 0xd5, 0x49, 0x83, 0xe0, 0x1f, 0xe9, 0x73, 0xff, 0xff, 0xff, 0x66, 0x66, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x90, 0x48, 0x81, 0xfa, 0x00, 0xf0, 0xff, 0xff, 0x77, 0xb5, 0xb8, 0x20, 0x00, 0x00, 0x00, 0x48, 0x81, 0xe9, 0x80, 0x00, 0x00, 0x00, 0x0f, 0x18, 0x04, 0x0a, 0x0f, 0x18, 0x44, 0x0a, 0x40, 0xff, 0xc8, 0x75, 0xec, 0x48, 0x81, 0xc1, 0x00, 0x10, 0x00, 0x00, 0xb8, 0x40, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x4c, 0x0a, 0xf8, 0x4c, 0x8b, 0x54, 0x0a, 0xf0, 0x4c, 0x0f, 0xc3, 0x49, 0xf8, 0x4c, 0x0f, 0xc3, 0x51, 0xf0, 0x4c, 0x8b, 0x4c, 0x0a, 0xe8, 0x4c, 0x8b, 0x54, 0x0a, 0xe0, 0x4c, 0x0f, 0xc3, 0x49, 0xe8, 0x4c, 0x0f, 0xc3, 0x51, 0xe0, 0x4c, 0x8b, 0x4c, 0x0a, 0xd8, 0x4c, 0x8b, 0x54, 0x0a, 0xd0, 0x48, 0x83, 0xe9, 0x40, 0x4c, 0x0f, 0xc3, 0x49, 0x18, 0x4c, 0x0f, 0xc3, 0x51, 0x10, 0x4c, 0x8b, 0x4c, 0x0a, 0x08, 0x4c, 0x8b, 0x14, 0x0a, 0xff, 0xc8, 0x4c, 0x0f, 0xc3, 0x49, 0x08, 0x4c, 0x0f, 0xc3, 0x11, 0x75, 0xaa, 0x49, 0x81, 0xe8, 0x00, 0x10, 0x00, 0x00, 0x49, 0x81, 0xf8, 0x00, 0x10, 0x00, 0x00, 0x0f, 0x83, 0x71, 0xff, 0xff, 0xff, 0xf0, 0x80, 0x0c, 0x24, 0x00, 0xe9, 0xba, 0xfe, 0xff, 0xff, 0x48, 0x85, 0xc9, 0x0f, 0x84, 0xe0, 0x01, 0x00, 0x00, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x48, 0x8b, 0x49, 0x08, 0xe8, 0x92, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x10, 0xe8, 0x89, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x18, 0xe8, 0x80, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x20, 0xe8, 0x77, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x28, 0xe8, 0x6e, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x30, 0xe8, 0x65, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x0b, 0xe8, 0x5d, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x40, 0xe8, 0x54, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x48, 0xe8, 0x4b, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x50, 0xe8, 0x42, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x58, 0xe8, 0x39, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x60, 0xe8, 0x30, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x68, 0xe8, 0x27, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x38, 0xe8, 0x1e, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x70, 0xe8, 0x15, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x78, 0xe8, 0x0c, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x80, 0x00, 0x00, 0x00, 0xe8, 0x00, 0xb2, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x88, 0x00, 0x00, 0x00, 0xe8, 0xf4, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x90, 0x00, 0x00, 0x00, 0xe8, 0xe8, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x98, 0x00, 0x00, 0x00, 0xe8, 0xdc, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0xa0, 0x00, 0x00, 0x00, 0xe8, 0xd0, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0xa8, 0x00, 0x00, 0x00, 0xe8, 0xc4, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0xb0, 0x00, 0x00, 0x00, 0xe8, 0xb8, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0xb8, 0x00, 0x00, 0x00, 0xe8, 0xac, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0xc0, 0x00, 0x00, 0x00, 0xe8, 0xa0, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0xc8, 0x00, 0x00, 0x00, 0xe8, 0x94, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0xd0, 0x00, 0x00, 0x00, 0xe8, 0x88, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0xd8, 0x00, 0x00, 0x00, 0xe8, 0x7c, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0xe0, 0x00, 0x00, 0x00, 0xe8, 0x70, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0xe8, 0x00, 0x00, 0x00, 0xe8, 0x64, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0xf0, 0x00, 0x00, 0x00, 0xe8, 0x58, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0xf8, 0x00, 0x00, 0x00, 0xe8, 0x4c, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x00, 0x01, 0x00, 0x00, 0xe8, 0x40, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x08, 0x01, 0x00, 0x00, 0xe8, 0x34, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x10, 0x01, 0x00, 0x00, 0xe8, 0x28, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x18, 0x01, 0x00, 0x00, 0xe8, 0x1c, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x20, 0x01, 0x00, 0x00, 0xe8, 0x10, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x28, 0x01, 0x00, 0x00, 0xe8, 0x04, 0xb1, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x30, 0x01, 0x00, 0x00, 0xe8, 0xf8, 0xb0, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x38, 0x01, 0x00, 0x00, 0xe8, 0xec, 0xb0, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x40, 0x01, 0x00, 0x00, 0xe8, 0xe0, 0xb0, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x48, 0x01, 0x00, 0x00, 0xe8, 0xd4, 0xb0, 0xff, 0xff, 0x48, 0x8b, 0x8b, 0x50, 0x01, 0x00, 0x00, 0xe8, 0xc8, 0xb0, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0x48, 0x85, 0xc9, 0x74, 0x42, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x48, 0x8b, 0x09, 0x48, 0x3b, 0x0d, 0x09, 0xa1, 0x00, 0x00, 0x74, 0x05, 0xe8, 0xa2, 0xb0, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x08, 0x48, 0x3b, 0x0d, 0xff, 0xa0, 0x00, 0x00, 0x74, 0x05, 0xe8, 0x90, 0xb0, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x10, 0x48, 0x3b, 0x0d, 0xf5, 0xa0, 0x00, 0x00, 0x74, 0x05, 0xe8, 0x7e, 0xb0, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0x48, 0x85, 0xc9, 0x0f, 0x84, 0x8b, 0x00, 0x00, 0x00, 0x53, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x48, 0x8b, 0x49, 0x18, 0x48, 0x3b, 0x0d, 0xd4, 0xa0, 0x00, 0x00, 0x74, 0x05, 0xe8, 0x55, 0xb0, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x20, 0x48, 0x3b, 0x0d, 0xca, 0xa0, 0x00, 0x00, 0x74, 0x05, 0xe8, 0x43, 0xb0, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x28, 0x48, 0x3b, 0x0d, 0xc0, 0xa0, 0x00, 0x00, 0x74, 0x05, 0xe8, 0x31, 0xb0, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x30, 0x48, 0x3b, 0x0d, 0xb6, 0xa0, 0x00, 0x00, 0x74, 0x05, 0xe8, 0x1f, 0xb0, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x38, 0x48, 0x3b, 0x0d, 0xac, 0xa0, 0x00, 0x00, 0x74, 0x05, 0xe8, 0x0d, 0xb0, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x40, 0x48, 0x3b, 0x0d, 0xa2, 0xa0, 0x00, 0x00, 0x74, 0x05, 0xe8, 0xfb, 0xaf, 0xff, 0xff, 0x48, 0x8b, 0x4b, 0x48, 0x48, 0x3b, 0x0d, 0x98, 0xa0, 0x00, 0x00, 0x74, 0x05, 0xe8, 0xe9, 0xaf, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x30, 0x4c, 0x8b, 0xc9, 0x48, 0x85, 0xc9, 0x74, 0x0d, 0x48, 0x85, 0xd2, 0x74, 0x08, 0x4d, 0x85, 0xc0, 0x75, 0x2c, 0x44, 0x88, 0x01, 0xe8, 0x38, 0xad, 0xff, 0xff, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x89, 0x18, 0xe8, 0x4c, 0xac, 0xff, 0xff, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x30, 0x5b, 0xc3, 0x80, 0x39, 0x00, 0x74, 0x09, 0x48, 0xff, 0xc1, 0x48, 0x83, 0xea, 0x01, 0x75, 0xf2, 0x48, 0x85, 0xd2, 0x75, 0x05, 0x41, 0x88, 0x11, 0xeb, 0xbf, 0x41, 0x8a, 0x00, 0x49, 0xff, 0xc0, 0x88, 0x01, 0x48, 0xff, 0xc1, 0x84, 0xc0, 0x74, 0x06, 0x48, 0x83, 0xea, 0x01, 0x75, 0xeb, 0x48, 0x85, 0xd2, 0x75, 0x0f, 0x41, 0x88, 0x11, 0xe8, 0xda, 0xac, 0xff, 0xff, 0xbb, 0x22, 0x00, 0x00, 0x00, 0xeb, 0xa0, 0x33, 0xc0, 0xeb, 0xb5, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x30, 0x4d, 0x8b, 0xd8, 0x4d, 0x85, 0xc9, 0x75, 0x0e, 0x48, 0x85, 0xc9, 0x75, 0x0e, 0x48, 0x85, 0xd2, 0x75, 0x20, 0x33, 0xc0, 0xeb, 0x3f, 0x48, 0x85, 0xc9, 0x74, 0x17, 0x48, 0x85, 0xd2, 0x74, 0x12, 0x4d, 0x85, 0xc9, 0x75, 0x05, 0x44, 0x88, 0x09, 0xeb, 0xe8, 0x4d, 0x85, 0xc0, 0x75, 0x2c, 0x44, 0x88, 0x01, 0xe8, 0x8f, 0xac, 0xff, 0xff, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x89, 0x18, 0xe8, 0xa3, 0xab, 0xff, 0xff, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x30, 0x5b, 0xc3, 0x4c, 0x8b, 0xd1, 0x4c, 0x8b, 0xc2, 0x49, 0x83, 0xf9, 0xff, 0x75, 0x18, 0x41, 0x8a, 0x03, 0x49, 0xff, 0xc3, 0x41, 0x88, 0x02, 0x49, 0xff, 0xc2, 0x84, 0xc0, 0x74, 0x2c, 0x49, 0x83, 0xe8, 0x01, 0x75, 0xea, 0xeb, 0x24, 0x41, 0x8a, 0x03, 0x49, 0xff, 0xc3, 0x41, 0x88, 0x02, 0x49, 0xff, 0xc2, 0x84, 0xc0, 0x74, 0x0c, 0x49, 0x83, 0xe8, 0x01, 0x74, 0x06, 0x49, 0x83, 0xe9, 0x01, 0x75, 0xe4, 0x4d, 0x85, 0xc9, 0x75, 0x03, 0x45, 0x88, 0x0a, 0x4d, 0x85, 0xc0, 0x0f, 0x85, 0x66, 0xff, 0xff, 0xff, 0x49, 0x83, 0xf9, 0xff, 0x75, 0x0b, 0x44, 0x88, 0x44, 0x11, 0xff, 0x41, 0x8d, 0x40, 0x50, 0xeb, 0x98, 0xc6, 0x01, 0x00, 0xe8, 0x01, 0xac, 0xff, 0xff, 0xbb, 0x22, 0x00, 0x00, 0x00, 0xe9, 0x6d, 0xff, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x30, 0x48, 0x85, 0xc9, 0x74, 0x0d, 0x48, 0x85, 0xd2, 0x74, 0x08, 0x4d, 0x85, 0xc0, 0x75, 0x2c, 0x44, 0x88, 0x01, 0xe8, 0xd7, 0xab, 0xff, 0xff, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x89, 0x18, 0xe8, 0xeb, 0xaa, 0xff, 0xff, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x30, 0x5b, 0xc3, 0x4c, 0x8b, 0xc9, 0x41, 0x8a, 0x00, 0x49, 0xff, 0xc0, 0x41, 0x88, 0x01, 0x49, 0xff, 0xc1, 0x84, 0xc0, 0x74, 0x06, 0x48, 0x83, 0xea, 0x01, 0x75, 0xea, 0x48, 0x85, 0xd2, 0x75, 0x0e, 0x88, 0x11, 0xe8, 0x8e, 0xab, 0xff, 0xff, 0xbb, 0x22, 0x00, 0x00, 0x00, 0xeb, 0xb5, 0x33, 0xc0, 0xeb, 0xca, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x2b, 0xd1, 0x4c, 0x8b, 0xca, 0xf6, 0xc1, 0x07, 0x74, 0x1b, 0x8a, 0x01, 0x42, 0x8a, 0x14, 0x09, 0x3a, 0xc2, 0x75, 0x56, 0x48, 0xff, 0xc1, 0x84, 0xc0, 0x74, 0x57, 0x48, 0xf7, 0xc1, 0x07, 0x00, 0x00, 0x00, 0x75, 0xe6, 0x90, 0x49, 0xbb, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81, 0x4a, 0x8d, 0x14, 0x09, 0x66, 0x81, 0xe2, 0xff, 0x0f, 0x66, 0x81, 0xfa, 0xf8, 0x0f, 0x77, 0xcb, 0x48, 0x8b, 0x01, 0x4a, 0x8b, 0x14, 0x09, 0x48, 0x3b, 0xc2, 0x75, 0xbf, 0x49, 0xba, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x7e, 0x4c, 0x03, 0xd2, 0x48, 0x83, 0xf0, 0xff, 0x48, 0x83, 0xc1, 0x08, 0x49, 0x33, 0xc2, 0x49, 0x85, 0xc3, 0x74, 0xc7, 0xeb, 0x0f, 0x48, 0x1b, 0xc0, 0x48, 0x83, 0xd8, 0xff, 0xc3, 0x33, 0xc0, 0xc3, 0x66, 0x66, 0x66, 0x90, 0x84, 0xd2, 0x74, 0x27, 0x84, 0xf6, 0x74, 0x23, 0x48, 0xc1, 0xea, 0x10, 0x84, 0xd2, 0x74, 0x1b, 0x84, 0xf6, 0x74, 0x17, 0x48, 0xc1, 0xea, 0x10, 0x84, 0xd2, 0x74, 0x0f, 0x84, 0xf6, 0x74, 0x0b, 0xc1, 0xea, 0x10, 0x84, 0xd2, 0x74, 0x04, 0x84, 0xf6, 0x75, 0x8b, 0x33, 0xc0, 0xc3, 0x48, 0x1b, 0xc0, 0x48, 0x83, 0xd8, 0xff, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x2b, 0xd1, 0x49, 0x83, 0xf8, 0x08, 0x72, 0x22, 0xf6, 0xc1, 0x07, 0x74, 0x14, 0x66, 0x90, 0x8a, 0x01, 0x3a, 0x04, 0x0a, 0x75, 0x2c, 0x48, 0xff, 0xc1, 0x49, 0xff, 0xc8, 0xf6, 0xc1, 0x07, 0x75, 0xee, 0x4d, 0x8b, 0xc8, 0x49, 0xc1, 0xe9, 0x03, 0x75, 0x1f, 0x4d, 0x85, 0xc0, 0x74, 0x0f, 0x8a, 0x01, 0x3a, 0x04, 0x0a, 0x75, 0x0c, 0x48, 0xff, 0xc1, 0x49, 0xff, 0xc8, 0x75, 0xf1, 0x48, 0x33, 0xc0, 0xc3, 0x1b, 0xc0, 0x83, 0xd8, 0xff, 0xc3, 0x90, 0x49, 0xc1, 0xe9, 0x02, 0x74, 0x37, 0x48, 0x8b, 0x01, 0x48, 0x3b, 0x04, 0x0a, 0x75, 0x5b, 0x48, 0x8b, 0x41, 0x08, 0x48, 0x3b, 0x44, 0x0a, 0x08, 0x75, 0x4c, 0x48, 0x8b, 0x41, 0x10, 0x48, 0x3b, 0x44, 0x0a, 0x10, 0x75, 0x3d, 0x48, 0x8b, 0x41, 0x18, 0x48, 0x3b, 0x44, 0x0a, 0x18, 0x75, 0x2e, 0x48, 0x83, 0xc1, 0x20, 0x49, 0xff, 0xc9, 0x75, 0xcd, 0x49, 0x83, 0xe0, 0x1f, 0x4d, 0x8b, 0xc8, 0x49, 0xc1, 0xe9, 0x03, 0x74, 0x9b, 0x48, 0x8b, 0x01, 0x48, 0x3b, 0x04, 0x0a, 0x75, 0x1b, 0x48, 0x83, 0xc1, 0x08, 0x49, 0xff, 0xc9, 0x75, 0xee, 0x49, 0x83, 0xe0, 0x07, 0xeb, 0x83, 0x48, 0x83, 0xc1, 0x08, 0x48, 0x83, 0xc1, 0x08, 0x48, 0x83, 0xc1, 0x08, 0x48, 0x8b, 0x0c, 0x11, 0x48, 0x0f, 0xc8, 0x48, 0x0f, 0xc9, 0x48, 0x3b, 0xc1, 0x1b, 0xc0, 0x83, 0xd8, 0xff, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x63, 0xd9, 0x41, 0x8b, 0xf8, 0x48, 0x89, 0x54, 0x24, 0x38, 0x8b, 0xcb, 0xe8, 0xf8, 0x0d, 0x00, 0x00, 0x48, 0x83, 0xf8, 0xff, 0x75, 0x11, 0xe8, 0xb9, 0xa9, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc8, 0xff, 0xeb, 0x57, 0x8b, 0x54, 0x24, 0x38, 0x4c, 0x8d, 0x44, 0x24, 0x3c, 0x44, 0x8b, 0xcf, 0x48, 0x8b, 0xc8, 0xff, 0x15, 0x40, 0x5c, 0x00, 0x00, 0x89, 0x44, 0x24, 0x38, 0x83, 0xf8, 0xff, 0x75, 0x13, 0xff, 0x15, 0xf9, 0x5a, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x09, 0x8b, 0xc8, 0xe8, 0xbe, 0xa9, 0xff, 0xff, 0xeb, 0xc9, 0x48, 0x8b, 0xcb, 0x48, 0x8b, 0xc3, 0x48, 0x8d, 0x15, 0x87, 0xad, 0x00, 0x00, 0x48, 0xc1, 0xf8, 0x05, 0x83, 0xe1, 0x1f, 0x48, 0x8b, 0x04, 0xc2, 0x48, 0x6b, 0xc9, 0x58, 0x80, 0x64, 0x08, 0x08, 0xfd, 0x48, 0x8b, 0x44, 0x24, 0x38, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x89, 0x4c, 0x24, 0x08, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x30, 0x45, 0x8b, 0xe0, 0x4c, 0x8b, 0xea, 0x48, 0x63, 0xd9, 0x83, 0xfb, 0xfe, 0x75, 0x1d, 0xe8, 0x3a, 0xa9, 0xff, 0xff, 0x33, 0xff, 0x89, 0x38, 0xe8, 0x11, 0xa9, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc8, 0xff, 0xe9, 0xd9, 0x00, 0x00, 0x00, 0x33, 0xff, 0x3b, 0xdf, 0x0f, 0x8c, 0xa5, 0x00, 0x00, 0x00, 0x3b, 0x1d, 0xf2, 0xac, 0x00, 0x00, 0x0f, 0x83, 0x99, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xf3, 0x4c, 0x8b, 0xf3, 0x49, 0xc1, 0xfe, 0x05, 0x4c, 0x8d, 0x3d, 0xf3, 0xac, 0x00, 0x00, 0x83, 0xe6, 0x1f, 0x48, 0x6b, 0xf6, 0x58, 0x4b, 0x8b, 0x04, 0xf7, 0x0f, 0xbe, 0x4c, 0x30, 0x08, 0x83, 0xe1, 0x01, 0x75, 0x2c, 0xe8, 0xe1, 0xa8, 0xff, 0xff, 0x89, 0x38, 0xe8, 0xba, 0xa8, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0xd0, 0xa7, 0xff, 0xff, 0x48, 0x83, 0xc8, 0xff, 0xeb, 0x71, 0x8b, 0xcb, 0xe8, 0x4b, 0x0d, 0x00, 0x00, 0x90, 0x4b, 0x8b, 0x04, 0xf7, 0xf6, 0x44, 0x30, 0x08, 0x01, 0x74, 0x12, 0x45, 0x8b, 0xc4, 0x49, 0x8b, 0xd5, 0x8b, 0xcb, 0xe8, 0x9a, 0xfe, 0xff, 0xff, 0x48, 0x8b, 0xf8, 0xeb, 0x16, 0xe8, 0x70, 0xa8, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe8, 0x85, 0xa8, 0xff, 0xff, 0x89, 0x38, 0x48, 0x83, 0xcf, 0xff, 0x8b, 0xcb, 0xe8, 0xb8, 0x0d, 0x00, 0x00, 0x48, 0x8b, 0xc7, 0xeb, 0x2a, 0xe8, 0x6e, 0xa8, 0xff, 0xff, 0x89, 0x38, 0xe8, 0x47, 0xa8, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x5d, 0xa7, 0xff, 0xff, 0x48, 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x68, 0x48, 0x8b, 0x74, 0x24, 0x70, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0xff, 0x05, 0xe0, 0x9d, 0x00, 0x00, 0x48, 0x8b, 0xd9, 0xb9, 0x00, 0x10, 0x00, 0x00, 0xe8, 0x7f, 0xa8, 0xff, 0xff, 0x48, 0x89, 0x43, 0x10, 0x48, 0x85, 0xc0, 0x74, 0x0d, 0x83, 0x4b, 0x18, 0x08, 0xc7, 0x43, 0x24, 0x00, 0x10, 0x00, 0x00, 0xeb, 0x13, 0x83, 0x4b, 0x18, 0x04, 0x48, 0x8d, 0x43, 0x20, 0xc7, 0x43, 0x24, 0x02, 0x00, 0x00, 0x00, 0x48, 0x89, 0x43, 0x10, 0x48, 0x8b, 0x43, 0x10, 0x83, 0x63, 0x08, 0x00, 0x48, 0x89, 0x03, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x56, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x48, 0x83, 0xec, 0x40, 0x41, 0x8b, 0xe8, 0x4c, 0x8b, 0xea, 0x4c, 0x8b, 0xf1, 0xe8, 0x28, 0xbf, 0xff, 0xff, 0x33, 0xdb, 0x48, 0x8b, 0xf8, 0x48, 0x39, 0x1d, 0x94, 0xaa, 0x00, 0x00, 0x0f, 0x85, 0xd0, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0xdf, 0x6d, 0x00, 0x00, 0xff, 0x15, 0x69, 0x59, 0x00, 0x00, 0x48, 0x8b, 0xf0, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x8c, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x15, 0xb6, 0x6d, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xff, 0x15, 0x45, 0x58, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x73, 0x01, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xe8, 0xd4, 0xbe, 0xff, 0xff, 0x48, 0x8d, 0x15, 0x85, 0x6d, 0x00, 0x00, 0x48, 0x8b, 0xce, 0x48, 0x89, 0x05, 0x43, 0xaa, 0x00, 0x00, 0xff, 0x15, 0x1d, 0x58, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xe8, 0xb5, 0xbe, 0xff, 0xff, 0x48, 0x8d, 0x15, 0x4e, 0x6d, 0x00, 0x00, 0x48, 0x8b, 0xce, 0x48, 0x89, 0x05, 0x2c, 0xaa, 0x00, 0x00, 0xff, 0x15, 0xfe, 0x57, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xe8, 0x96, 0xbe, 0xff, 0xff, 0x48, 0x8d, 0x15, 0x0f, 0x6d, 0x00, 0x00, 0x48, 0x8b, 0xce, 0x48, 0x89, 0x05, 0x15, 0xaa, 0x00, 0x00, 0xff, 0x15, 0xdf, 0x57, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xe8, 0x77, 0xbe, 0xff, 0xff, 0x4c, 0x8b, 0xd8, 0x48, 0x89, 0x05, 0x0d, 0xaa, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x21, 0x48, 0x8d, 0x15, 0xc9, 0x6c, 0x00, 0x00, 0x48, 0x8b, 0xce, 0xff, 0x15, 0xb8, 0x57, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xe8, 0x50, 0xbe, 0xff, 0xff, 0x48, 0x89, 0x05, 0xe1, 0xa9, 0x00, 0x00, 0xeb, 0x10, 0x48, 0x8b, 0x05, 0xd8, 0xa9, 0x00, 0x00, 0xeb, 0x0e, 0x48, 0x8b, 0x05, 0xcf, 0xa9, 0x00, 0x00, 0x4c, 0x8b, 0x1d, 0xd0, 0xa9, 0x00, 0x00, 0x48, 0x3b, 0xc7, 0x74, 0x63, 0x4c, 0x3b, 0xdf, 0x74, 0x5e, 0x48, 0x8b, 0xc8, 0xe8, 0x32, 0xbe, 0xff, 0xff, 0x48, 0x8b, 0x0d, 0xb7, 0xa9, 0x00, 0x00, 0x48, 0x8b, 0xf0, 0xe8, 0x23, 0xbe, 0xff, 0xff, 0x4c, 0x8b, 0xe0, 0x48, 0x85, 0xf6, 0x74, 0x3f, 0x48, 0x85, 0xc0, 0x74, 0x3a, 0xff, 0xd6, 0x48, 0x85, 0xc0, 0x74, 0x2d, 0x48, 0x8d, 0x8c, 0x24, 0x88, 0x00, 0x00, 0x00, 0x41, 0xb9, 0x0c, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x44, 0x24, 0x30, 0x48, 0x89, 0x4c, 0x24, 0x20, 0x41, 0x8d, 0x51, 0xf5, 0x48, 0x8b, 0xc8, 0x41, 0xff, 0xd4, 0x85, 0xc0, 0x74, 0x07, 0xf6, 0x44, 0x24, 0x38, 0x01, 0x75, 0x06, 0x0f, 0xba, 0xed, 0x15, 0xeb, 0x3e, 0x48, 0x8b, 0x0d, 0x49, 0xa9, 0x00, 0x00, 0x48, 0x3b, 0xcf, 0x74, 0x32, 0xe8, 0xcb, 0xbd, 0xff, 0xff, 0x48, 0x85, 0xc0, 0x74, 0x28, 0xff, 0xd0, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x74, 0x1e, 0x48, 0x8b, 0x0d, 0x31, 0xa9, 0x00, 0x00, 0x48, 0x3b, 0xcf, 0x74, 0x12, 0xe8, 0xab, 0xbd, 0xff, 0xff, 0x48, 0x85, 0xc0, 0x74, 0x08, 0x48, 0x8b, 0xcb, 0xff, 0xd0, 0x48, 0x8b, 0xd8, 0x48, 0x8b, 0x0d, 0x03, 0xa9, 0x00, 0x00, 0xe8, 0x92, 0xbd, 0xff, 0xff, 0x48, 0x85, 0xc0, 0x74, 0x10, 0x44, 0x8b, 0xcd, 0x4d, 0x8b, 0xc5, 0x49, 0x8b, 0xd6, 0x48, 0x8b, 0xcb, 0xff, 0xd0, 0xeb, 0x02, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x70, 0x48, 0x8b, 0x6c, 0x24, 0x78, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0xc3, 0x48, 0x83, 0xec, 0x38, 0x85, 0xc9, 0x78, 0x20, 0x83, 0xf9, 0x02, 0x7e, 0x0d, 0x83, 0xf9, 0x03, 0x75, 0x16, 0x8b, 0x05, 0xf8, 0x9b, 0x00, 0x00, 0xeb, 0x31, 0x8b, 0x05, 0xf0, 0x9b, 0x00, 0x00, 0x89, 0x0d, 0xea, 0x9b, 0x00, 0x00, 0xeb, 0x23, 0xe8, 0x9b, 0xa5, 0xff, 0xff, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0xb0, 0xa4, 0xff, 0xff, 0x83, 0xc8, 0xff, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0x48, 0x83, 0xec, 0x38, 0x48, 0x85, 0xc9, 0x75, 0x26, 0xe8, 0x6a, 0xa5, 0xff, 0xff, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x7f, 0xa4, 0xff, 0xff, 0x48, 0x83, 0xc8, 0xff, 0xeb, 0x12, 0x4c, 0x8b, 0xc1, 0x48, 0x8b, 0x0d, 0x27, 0xa8, 0x00, 0x00, 0x33, 0xd2, 0xff, 0x15, 0xe7, 0x57, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0xcc, 0xb9, 0x02, 0x00, 0x00, 0x00, 0xe9, 0xb6, 0x8b, 0xff, 0xff, 0xcc, 0xcc, 0x48, 0x81, 0xec, 0xa8, 0x05, 0x00, 0x00, 0xf6, 0x05, 0x6e, 0x98, 0x00, 0x00, 0x01, 0x74, 0x0a, 0xb9, 0x0a, 0x00, 0x00, 0x00, 0xe8, 0x8a, 0xc2, 0xff, 0xff, 0xe8, 0xf5, 0xc9, 0xff, 0xff, 0x48, 0x85, 0xc0, 0x74, 0x0a, 0xb9, 0x16, 0x00, 0x00, 0x00, 0xe8, 0xf2, 0xc9, 0xff, 0xff, 0xf6, 0x05, 0x47, 0x98, 0x00, 0x00, 0x02, 0x74, 0x5f, 0x48, 0x8d, 0x8c, 0x24, 0xd0, 0x00, 0x00, 0x00, 0xff, 0x15, 0x47, 0x56, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0x33, 0xd2, 0x41, 0xb8, 0x98, 0x00, 0x00, 0x00, 0xe8, 0x45, 0x82, 0xff, 0xff, 0x48, 0x8b, 0x84, 0x24, 0xa8, 0x05, 0x00, 0x00, 0x33, 0xc9, 0x48, 0x89, 0x44, 0x24, 0x40, 0x48, 0x8d, 0x44, 0x24, 0x30, 0xc7, 0x44, 0x24, 0x30, 0x15, 0x00, 0x00, 0x40, 0x48, 0x89, 0x44, 0x24, 0x20, 0x48, 0x8d, 0x84, 0x24, 0xd0, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x28, 0xff, 0x15, 0xe1, 0x55, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x20, 0xff, 0x15, 0xce, 0x55, 0x00, 0x00, 0xb9, 0x03, 0x00, 0x00, 0x00, 0xe8, 0x68, 0x8e, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x48, 0x83, 0xec, 0x50, 0x4c, 0x8b, 0xf2, 0x48, 0x8b, 0xd1, 0x48, 0x8d, 0x48, 0xc8, 0x45, 0x8b, 0xe1, 0x4d, 0x8b, 0xe8, 0xe8, 0x46, 0x88, 0xff, 0xff, 0x4d, 0x85, 0xed, 0x74, 0x04, 0x4d, 0x89, 0x75, 0x00, 0x4d, 0x85, 0xf6, 0x75, 0x2a, 0xe8, 0x3b, 0xa4, 0xff, 0xff, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x50, 0xa3, 0xff, 0xff, 0x80, 0x7c, 0x24, 0x48, 0x00, 0xe9, 0xe9, 0x01, 0x00, 0x00, 0x45, 0x85, 0xe4, 0x74, 0x0c, 0x41, 0x83, 0xfc, 0x02, 0x7c, 0xcb, 0x41, 0x83, 0xfc, 0x24, 0x7f, 0xc5, 0x41, 0x8a, 0x2e, 0x4c, 0x8b, 0x44, 0x24, 0x30, 0x33, 0xff, 0x49, 0x8d, 0x5e, 0x01, 0x41, 0x83, 0xb8, 0x0c, 0x01, 0x00, 0x00, 0x01, 0x7e, 0x1a, 0x4c, 0x8d, 0x44, 0x24, 0x30, 0x40, 0x0f, 0xb6, 0xcd, 0xba, 0x08, 0x00, 0x00, 0x00, 0xe8, 0xbe, 0xbe, 0xff, 0xff, 0x4c, 0x8b, 0x44, 0x24, 0x30, 0xeb, 0x12, 0x49, 0x8b, 0x80, 0x40, 0x01, 0x00, 0x00, 0x40, 0x0f, 0xb6, 0xcd, 0x0f, 0xb7, 0x04, 0x48, 0x83, 0xe0, 0x08, 0x85, 0xc0, 0x74, 0x08, 0x40, 0x8a, 0x2b, 0x48, 0xff, 0xc3, 0xeb, 0xbe, 0x8b, 0xb4, 0x24, 0x90, 0x00, 0x00, 0x00, 0x40, 0x80, 0xfd, 0x2d, 0x75, 0x05, 0x83, 0xce, 0x02, 0xeb, 0x06, 0x40, 0x80, 0xfd, 0x2b, 0x75, 0x06, 0x40, 0x8a, 0x2b, 0x48, 0xff, 0xc3, 0x45, 0x85, 0xe4, 0x0f, 0x88, 0x53, 0x01, 0x00, 0x00, 0x41, 0x83, 0xfc, 0x01, 0x0f, 0x84, 0x49, 0x01, 0x00, 0x00, 0x41, 0x83, 0xfc, 0x24, 0x0f, 0x8f, 0x3f, 0x01, 0x00, 0x00, 0x45, 0x85, 0xe4, 0x75, 0x28, 0x40, 0x80, 0xfd, 0x30, 0x74, 0x08, 0x41, 0xbc, 0x0a, 0x00, 0x00, 0x00, 0xeb, 0x38, 0x80, 0x3b, 0x78, 0x74, 0x0d, 0x80, 0x3b, 0x58, 0x74, 0x08, 0x41, 0xbc, 0x08, 0x00, 0x00, 0x00, 0xeb, 0x26, 0x41, 0xbc, 0x10, 0x00, 0x00, 0x00, 0xeb, 0x0c, 0x41, 0x83, 0xfc, 0x10, 0x75, 0x18, 0x40, 0x80, 0xfd, 0x30, 0x75, 0x12, 0x80, 0x3b, 0x78, 0x74, 0x05, 0x80, 0x3b, 0x58, 0x75, 0x08, 0x40, 0x8a, 0x6b, 0x01, 0x48, 0x83, 0xc3, 0x02, 0x4d, 0x8b, 0x90, 0x40, 0x01, 0x00, 0x00, 0x33, 0xd2, 0x83, 0xc8, 0xff, 0x41, 0xf7, 0xf4, 0x44, 0x8b, 0xc8, 0x40, 0x0f, 0xb6, 0xcd, 0x45, 0x0f, 0xb7, 0x04, 0x4a, 0x41, 0xf6, 0xc0, 0x04, 0x74, 0x09, 0x40, 0x0f, 0xbe, 0xcd, 0x83, 0xe9, 0x30, 0xeb, 0x1a, 0x41, 0xf7, 0xc0, 0x03, 0x01, 0x00, 0x00, 0x74, 0x2c, 0x8d, 0x45, 0x9f, 0x40, 0x0f, 0xbe, 0xcd, 0x3c, 0x19, 0x77, 0x03, 0x83, 0xe9, 0x20, 0x83, 0xc1, 0xc9, 0x41, 0x3b, 0xcc, 0x73, 0x16, 0x83, 0xce, 0x08, 0x41, 0x3b, 0xf9, 0x72, 0x22, 0x75, 0x04, 0x3b, 0xca, 0x76, 0x1c, 0x83, 0xce, 0x04, 0x4d, 0x85, 0xed, 0x75, 0x1a, 0x48, 0xff, 0xcb, 0x40, 0xf6, 0xc6, 0x08, 0x75, 0x19, 0x4d, 0x85, 0xed, 0x49, 0x0f, 0x45, 0xde, 0x33, 0xff, 0xeb, 0x59, 0x41, 0x0f, 0xaf, 0xfc, 0x03, 0xf9, 0x40, 0x8a, 0x2b, 0x48, 0xff, 0xc3, 0xeb, 0x91, 0xbd, 0xff, 0xff, 0xff, 0x7f, 0x40, 0xf6, 0xc6, 0x04, 0x75, 0x1d, 0x40, 0xf6, 0xc6, 0x01, 0x75, 0x3a, 0x8b, 0xc6, 0x83, 0xe0, 0x02, 0x74, 0x08, 0x81, 0xff, 0x00, 0x00, 0x00, 0x80, 0x77, 0x08, 0x85, 0xc0, 0x75, 0x27, 0x3b, 0xfd, 0x76, 0x23, 0xe8, 0x81, 0xa2, 0xff, 0xff, 0xc7, 0x00, 0x22, 0x00, 0x00, 0x00, 0x40, 0xf6, 0xc6, 0x01, 0x74, 0x05, 0x83, 0xcf, 0xff, 0xeb, 0x0d, 0x40, 0x8a, 0xc6, 0x24, 0x02, 0xf6, 0xd8, 0x1b, 0xff, 0xf7, 0xdf, 0x03, 0xfd, 0x4d, 0x85, 0xed, 0x74, 0x04, 0x49, 0x89, 0x5d, 0x00, 0x40, 0xf6, 0xc6, 0x02, 0x74, 0x02, 0xf7, 0xdf, 0x80, 0x7c, 0x24, 0x48, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x8b, 0xc7, 0xeb, 0x1e, 0x4d, 0x85, 0xed, 0x74, 0x04, 0x4d, 0x89, 0x75, 0x00, 0x40, 0x38, 0x7c, 0x24, 0x48, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x33, 0xc0, 0x4c, 0x8d, 0x5c, 0x24, 0x50, 0x49, 0x8b, 0x5b, 0x20, 0x49, 0x8b, 0x6b, 0x28, 0x49, 0x8b, 0x73, 0x30, 0x49, 0x8b, 0x7b, 0x38, 0x49, 0x8b, 0xe3, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x38, 0x33, 0xc0, 0x45, 0x8b, 0xc8, 0x4c, 0x8b, 0xc2, 0x89, 0x44, 0x24, 0x20, 0x48, 0x8b, 0xd1, 0x39, 0x05, 0x1b, 0xa0, 0x00, 0x00, 0x75, 0x09, 0x48, 0x8d, 0x0d, 0x32, 0x91, 0x00, 0x00, 0xeb, 0x02, 0x33, 0xc9, 0xe8, 0x51, 0xfd, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x63, 0xf9, 0x8b, 0xcf, 0xe8, 0xec, 0x05, 0x00, 0x00, 0x48, 0x83, 0xf8, 0xff, 0x74, 0x59, 0x48, 0x8b, 0x05, 0xc3, 0xa5, 0x00, 0x00, 0xb9, 0x02, 0x00, 0x00, 0x00, 0x83, 0xff, 0x01, 0x75, 0x09, 0x40, 0x84, 0xb8, 0xb8, 0x00, 0x00, 0x00, 0x75, 0x0a, 0x3b, 0xf9, 0x75, 0x1d, 0xf6, 0x40, 0x60, 0x01, 0x74, 0x17, 0xe8, 0xbd, 0x05, 0x00, 0x00, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xd8, 0xe8, 0xb0, 0x05, 0x00, 0x00, 0x48, 0x3b, 0xc3, 0x74, 0x1e, 0x8b, 0xcf, 0xe8, 0xa4, 0x05, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xff, 0x15, 0x1f, 0x54, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x0a, 0xff, 0x15, 0xcd, 0x52, 0x00, 0x00, 0x8b, 0xd8, 0xeb, 0x02, 0x33, 0xdb, 0x8b, 0xcf, 0xe8, 0xd8, 0x04, 0x00, 0x00, 0x4c, 0x8b, 0xdf, 0x48, 0x8b, 0xcf, 0x48, 0xc1, 0xf9, 0x05, 0x41, 0x83, 0xe3, 0x1f, 0x48, 0x8d, 0x15, 0x53, 0xa5, 0x00, 0x00, 0x48, 0x8b, 0x0c, 0xca, 0x4d, 0x6b, 0xdb, 0x58, 0x42, 0xc6, 0x44, 0x19, 0x08, 0x00, 0x85, 0xdb, 0x74, 0x0c, 0x8b, 0xcb, 0xe8, 0x62, 0xa1, 0xff, 0xff, 0x83, 0xc8, 0xff, 0xeb, 0x02, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x18, 0x48, 0x89, 0x74, 0x24, 0x20, 0x89, 0x4c, 0x24, 0x08, 0x57, 0x41, 0x54, 0x41, 0x55, 0x48, 0x83, 0xec, 0x30, 0x48, 0x63, 0xd9, 0x83, 0xfb, 0xfe, 0x75, 0x1c, 0xe8, 0x0c, 0xa1, 0xff, 0xff, 0x33, 0xff, 0x89, 0x38, 0xe8, 0xe3, 0xa0, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x83, 0xc8, 0xff, 0xe9, 0xc9, 0x00, 0x00, 0x00, 0x33, 0xff, 0x3b, 0xdf, 0x0f, 0x8c, 0x96, 0x00, 0x00, 0x00, 0x3b, 0x1d, 0xc5, 0xa4, 0x00, 0x00, 0x0f, 0x83, 0x8a, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xf3, 0x4c, 0x8b, 0xe3, 0x49, 0xc1, 0xfc, 0x05, 0x4c, 0x8d, 0x2d, 0xc6, 0xa4, 0x00, 0x00, 0x83, 0xe6, 0x1f, 0x48, 0x6b, 0xf6, 0x58, 0x4b, 0x8b, 0x44, 0xe5, 0x00, 0x0f, 0xbe, 0x4c, 0x30, 0x08, 0x83, 0xe1, 0x01, 0x75, 0x2b, 0xe8, 0xb3, 0xa0, 0xff, 0xff, 0x89, 0x38, 0xe8, 0x8c, 0xa0, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0xa2, 0x9f, 0xff, 0xff, 0x83, 0xc8, 0xff, 0xeb, 0x61, 0x8b, 0xcb, 0xe8, 0x1e, 0x05, 0x00, 0x00, 0x90, 0x4b, 0x8b, 0x44, 0xe5, 0x00, 0xf6, 0x44, 0x30, 0x08, 0x01, 0x74, 0x0b, 0x8b, 0xcb, 0xe8, 0x86, 0xfe, 0xff, 0xff, 0x8b, 0xf8, 0xeb, 0x0e, 0xe8, 0x49, 0xa0, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x83, 0xcf, 0xff, 0x8b, 0xcb, 0xe8, 0x99, 0x05, 0x00, 0x00, 0x8b, 0xc7, 0xeb, 0x29, 0xe8, 0x50, 0xa0, 0xff, 0xff, 0x89, 0x38, 0xe8, 0x29, 0xa0, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x3f, 0x9f, 0xff, 0xff, 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x74, 0x24, 0x68, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0xc3, 0x40, 0x53, 0x48, 0x83, 0xec, 0x20, 0xf6, 0x41, 0x18, 0x83, 0x48, 0x8b, 0xd9, 0x74, 0x22, 0xf6, 0x41, 0x18, 0x08, 0x74, 0x1c, 0x48, 0x8b, 0x49, 0x10, 0xe8, 0x62, 0xa2, 0xff, 0xff, 0x81, 0x63, 0x18, 0xf7, 0xfb, 0xff, 0xff, 0x33, 0xc0, 0x48, 0x89, 0x03, 0x48, 0x89, 0x43, 0x10, 0x89, 0x43, 0x08, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0x48, 0x83, 0xec, 0x68, 0x48, 0x8b, 0x05, 0x0d, 0x84, 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x44, 0x24, 0x50, 0x83, 0x3d, 0x02, 0x93, 0x00, 0x00, 0x00, 0x66, 0x89, 0x4c, 0x24, 0x40, 0x74, 0x66, 0x48, 0x8b, 0x0d, 0xc8, 0x93, 0x00, 0x00, 0x48, 0x83, 0xf9, 0xfe, 0x75, 0x0c, 0xe8, 0xd1, 0x0b, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0xb6, 0x93, 0x00, 0x00, 0x48, 0x83, 0xf9, 0xff, 0x0f, 0x84, 0xb9, 0x00, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x4c, 0x8d, 0x4c, 0x24, 0x44, 0x48, 0x8d, 0x54, 0x24, 0x40, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xff, 0x15, 0x30, 0x52, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x85, 0x89, 0x00, 0x00, 0x00, 0x83, 0x3d, 0xad, 0x92, 0x00, 0x00, 0x02, 0x0f, 0x85, 0x88, 0x00, 0x00, 0x00, 0xff, 0x15, 0xb5, 0x50, 0x00, 0x00, 0x83, 0xf8, 0x78, 0x75, 0x7d, 0x83, 0x25, 0x95, 0x92, 0x00, 0x00, 0x00, 0xff, 0x15, 0xfb, 0x51, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, 0x8b, 0xc8, 0x48, 0x8d, 0x44, 0x24, 0x48, 0x4c, 0x8d, 0x44, 0x24, 0x40, 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x33, 0xd2, 0xc7, 0x44, 0x24, 0x28, 0x05, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x20, 0xff, 0x15, 0x18, 0x51, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x29, 0x93, 0x00, 0x00, 0x48, 0x83, 0xf9, 0xff, 0x74, 0x30, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x4c, 0x8d, 0x4c, 0x24, 0x44, 0x48, 0x8d, 0x54, 0x24, 0x48, 0x44, 0x8b, 0xc0, 0xff, 0x15, 0x9a, 0x51, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x13, 0x66, 0x8b, 0x44, 0x24, 0x40, 0xeb, 0x11, 0xc7, 0x05, 0x21, 0x92, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xeb, 0xed, 0xb8, 0xff, 0xff, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x50, 0x48, 0x33, 0xcc, 0xe8, 0x89, 0x82, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x68, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x50, 0x33, 0xed, 0x49, 0x8b, 0xf0, 0x48, 0x8b, 0xfa, 0x48, 0x8b, 0xd9, 0x48, 0x3b, 0xd5, 0x74, 0x12, 0x4c, 0x3b, 0xc5, 0x74, 0x0d, 0x40, 0x38, 0x2a, 0x75, 0x1f, 0x48, 0x3b, 0xcd, 0x74, 0x03, 0x66, 0x89, 0x29, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x6c, 0x24, 0x68, 0x48, 0x8b, 0x74, 0x24, 0x70, 0x48, 0x83, 0xc4, 0x50, 0x5f, 0xc3, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0x49, 0x8b, 0xd1, 0xe8, 0x4a, 0x82, 0xff, 0xff, 0x4c, 0x8b, 0x5c, 0x24, 0x30, 0x41, 0x39, 0x6b, 0x14, 0x75, 0x25, 0x48, 0x3b, 0xdd, 0x74, 0x06, 0x0f, 0xb6, 0x07, 0x66, 0x89, 0x03, 0x40, 0x38, 0x6c, 0x24, 0x48, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xeb, 0xae, 0x0f, 0xb6, 0x0f, 0x48, 0x8d, 0x54, 0x24, 0x30, 0xe8, 0x01, 0xce, 0xff, 0xff, 0x3b, 0xc5, 0x0f, 0x84, 0x9c, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x30, 0x44, 0x8b, 0x89, 0x0c, 0x01, 0x00, 0x00, 0x41, 0x83, 0xf9, 0x01, 0x7e, 0x30, 0x41, 0x3b, 0xf1, 0x7c, 0x2b, 0x8b, 0x49, 0x04, 0x8b, 0xc5, 0x48, 0x3b, 0xdd, 0x0f, 0x95, 0xc0, 0x4c, 0x8b, 0xc7, 0xba, 0x09, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x28, 0x48, 0x89, 0x5c, 0x24, 0x20, 0xff, 0x15, 0x54, 0x50, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x30, 0x3b, 0xc5, 0x75, 0x12, 0x48, 0x63, 0x81, 0x0c, 0x01, 0x00, 0x00, 0x48, 0x3b, 0xf0, 0x72, 0x28, 0x40, 0x38, 0x6f, 0x01, 0x74, 0x22, 0x8b, 0x81, 0x0c, 0x01, 0x00, 0x00, 0x40, 0x38, 0x6c, 0x24, 0x48, 0x0f, 0x84, 0x34, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xe9, 0x23, 0xff, 0xff, 0xff, 0xe8, 0x92, 0x9d, 0xff, 0xff, 0xc7, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x40, 0x38, 0x6c, 0x24, 0x48, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x83, 0xc8, 0xff, 0xe9, 0xfd, 0xfe, 0xff, 0xff, 0x8b, 0xc5, 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x3b, 0xdd, 0x0f, 0x95, 0xc0, 0x41, 0x8d, 0x51, 0x08, 0x4c, 0x8b, 0xc7, 0x89, 0x44, 0x24, 0x28, 0x48, 0x8b, 0x44, 0x24, 0x30, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x8b, 0x48, 0x04, 0xff, 0x15, 0xc5, 0x4f, 0x00, 0x00, 0x3b, 0xc5, 0x0f, 0x85, 0x01, 0xff, 0xff, 0xff, 0xeb, 0xa4, 0xcc, 0xcc, 0xcc, 0x45, 0x33, 0xc9, 0xe9, 0x84, 0xfe, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xda, 0x85, 0xc9, 0x78, 0x69, 0x3b, 0x0d, 0x07, 0xa1, 0x00, 0x00, 0x73, 0x61, 0x48, 0x63, 0xf9, 0x48, 0x8d, 0x2d, 0x13, 0xa1, 0x00, 0x00, 0x48, 0x8b, 0xf7, 0x83, 0xe7, 0x1f, 0x48, 0xc1, 0xfe, 0x05, 0x48, 0x6b, 0xff, 0x58, 0x48, 0x8b, 0x44, 0xf5, 0x00, 0x48, 0x83, 0x3c, 0x07, 0xff, 0x75, 0x3d, 0x83, 0x3d, 0x4a, 0x81, 0x00, 0x00, 0x01, 0x75, 0x27, 0x85, 0xc9, 0x74, 0x18, 0x83, 0xe9, 0x01, 0x74, 0x0c, 0x83, 0xf9, 0x01, 0x75, 0x19, 0xb9, 0xf4, 0xff, 0xff, 0xff, 0xeb, 0x0c, 0xb9, 0xf5, 0xff, 0xff, 0xff, 0xeb, 0x05, 0xb9, 0xf6, 0xff, 0xff, 0xff, 0xff, 0x15, 0x89, 0x4f, 0x00, 0x00, 0x48, 0x8b, 0x44, 0xf5, 0x00, 0x48, 0x89, 0x1c, 0x07, 0x33, 0xc0, 0xeb, 0x16, 0xe8, 0x9f, 0x9c, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe8, 0xb4, 0x9c, 0xff, 0xff, 0x83, 0x20, 0x00, 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x85, 0xc9, 0x78, 0x73, 0x3b, 0x0d, 0x5f, 0xa0, 0x00, 0x00, 0x73, 0x6b, 0x48, 0x63, 0xd9, 0x48, 0x8d, 0x2d, 0x6b, 0xa0, 0x00, 0x00, 0x48, 0x8b, 0xfb, 0x83, 0xe3, 0x1f, 0x48, 0xc1, 0xff, 0x05, 0x48, 0x6b, 0xdb, 0x58, 0x48, 0x8b, 0x44, 0xfd, 0x00, 0xf6, 0x44, 0x18, 0x08, 0x01, 0x74, 0x47, 0x48, 0x83, 0x3c, 0x18, 0xff, 0x74, 0x40, 0x83, 0x3d, 0x9b, 0x80, 0x00, 0x00, 0x01, 0x75, 0x29, 0x85, 0xc9, 0x74, 0x18, 0x83, 0xe9, 0x01, 0x74, 0x0c, 0x83, 0xf9, 0x01, 0x75, 0x1b, 0xb9, 0xf4, 0xff, 0xff, 0xff, 0xeb, 0x0c, 0xb9, 0xf5, 0xff, 0xff, 0xff, 0xeb, 0x05, 0xb9, 0xf6, 0xff, 0xff, 0xff, 0x33, 0xd2, 0xff, 0x15, 0xd8, 0x4e, 0x00, 0x00, 0x48, 0x8b, 0x44, 0xfd, 0x00, 0x48, 0x83, 0x0c, 0x03, 0xff, 0x33, 0xc0, 0xeb, 0x16, 0xe8, 0xed, 0x9b, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe8, 0x02, 0x9c, 0xff, 0xff, 0x83, 0x20, 0x00, 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0x48, 0x83, 0xec, 0x38, 0x83, 0xf9, 0xfe, 0x75, 0x15, 0xe8, 0xde, 0x9b, 0xff, 0xff, 0x83, 0x20, 0x00, 0xe8, 0xb6, 0x9b, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xeb, 0x5d, 0x85, 0xc9, 0x78, 0x31, 0x3b, 0x0d, 0xa4, 0x9f, 0x00, 0x00, 0x73, 0x29, 0x48, 0x63, 0xd1, 0x48, 0x8d, 0x0d, 0xb0, 0x9f, 0x00, 0x00, 0x48, 0x8b, 0xc2, 0x83, 0xe2, 0x1f, 0x48, 0xc1, 0xf8, 0x05, 0x48, 0x6b, 0xd2, 0x58, 0x48, 0x8b, 0x04, 0xc1, 0xf6, 0x44, 0x10, 0x08, 0x01, 0x74, 0x06, 0x48, 0x8b, 0x04, 0x10, 0xeb, 0x2c, 0xe8, 0x94, 0x9b, 0xff, 0xff, 0x83, 0x20, 0x00, 0xe8, 0x6c, 0x9b, 0xff, 0xff, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe8, 0x81, 0x9a, 0xff, 0xff, 0x48, 0x83, 0xc8, 0xff, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x70, 0x10, 0x48, 0x89, 0x78, 0x18, 0x4c, 0x89, 0x60, 0x20, 0x41, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x63, 0xd9, 0x4c, 0x8b, 0xe3, 0x49, 0xc1, 0xfc, 0x05, 0x4c, 0x8d, 0x2d, 0x36, 0x9f, 0x00, 0x00, 0x83, 0xe3, 0x1f, 0x48, 0x6b, 0xdb, 0x58, 0x4b, 0x8b, 0x74, 0xe5, 0x00, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x83, 0x7c, 0x33, 0x0c, 0x00, 0x75, 0x33, 0x8d, 0x4f, 0x09, 0xe8, 0x4a, 0xa2, 0xff, 0xff, 0x90, 0x83, 0x7c, 0x33, 0x0c, 0x00, 0x75, 0x19, 0x48, 0x8d, 0x4c, 0x33, 0x10, 0xba, 0xa0, 0x0f, 0x00, 0x00, 0xe8, 0x6f, 0xc2, 0xff, 0xff, 0xf7, 0xd8, 0x1b, 0xd2, 0x23, 0xfa, 0xff, 0x44, 0x33, 0x0c, 0xb9, 0x0a, 0x00, 0x00, 0x00, 0xe8, 0x1f, 0xa1, 0xff, 0xff, 0x85, 0xff, 0x74, 0x10, 0x4b, 0x8b, 0x4c, 0xe5, 0x00, 0x48, 0x8d, 0x4c, 0x19, 0x10, 0xff, 0x15, 0x87, 0x4b, 0x00, 0x00, 0x8b, 0xc7, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x8b, 0x7c, 0x24, 0x40, 0x4c, 0x8b, 0x64, 0x24, 0x48, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5d, 0xc3, 0xcc, 0xcc, 0x48, 0x63, 0xd1, 0x48, 0x8d, 0x0d, 0xae, 0x9e, 0x00, 0x00, 0x48, 0x8b, 0xc2, 0x83, 0xe2, 0x1f, 0x48, 0xc1, 0xf8, 0x05, 0x48, 0x6b, 0xd2, 0x58, 0x48, 0x8b, 0x04, 0xc1, 0x48, 0x8d, 0x4c, 0x10, 0x10, 0x48, 0xff, 0x25, 0x48, 0x4b, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x7c, 0x24, 0x10, 0x4c, 0x89, 0x64, 0x24, 0x18, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x40, 0x49, 0x83, 0xcc, 0xff, 0x45, 0x8b, 0xec, 0x45, 0x33, 0xf6, 0x41, 0x8d, 0x4c, 0x24, 0x0c, 0xe8, 0xaf, 0xa0, 0xff, 0xff, 0x85, 0xc0, 0x75, 0x08, 0x41, 0x8b, 0xc4, 0xe9, 0xc9, 0x01, 0x00, 0x00, 0xb9, 0x0b, 0x00, 0x00, 0x00, 0xe8, 0x81, 0xa1, 0xff, 0xff, 0x90, 0x33, 0xff, 0x89, 0x7c, 0x24, 0x24, 0x48, 0x8d, 0x05, 0x3f, 0x9e, 0x00, 0x00, 0x83, 0xff, 0x40, 0x0f, 0x8d, 0x9b, 0x01, 0x00, 0x00, 0x4c, 0x63, 0xff, 0x4a, 0x8b, 0x1c, 0xf8, 0x48, 0x85, 0xdb, 0x0f, 0x84, 0x00, 0x01, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x30, 0x4a, 0x8b, 0x04, 0xf8, 0x48, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x48, 0x3b, 0xd8, 0x0f, 0x83, 0xcd, 0x00, 0x00, 0x00, 0xf6, 0x43, 0x08, 0x01, 0x0f, 0x85, 0xaa, 0x00, 0x00, 0x00, 0x83, 0x7b, 0x0c, 0x00, 0x75, 0x3b, 0xb9, 0x0a, 0x00, 0x00, 0x00, 0xe8, 0x28, 0xa1, 0xff, 0xff, 0x90, 0x83, 0x7b, 0x0c, 0x00, 0x75, 0x20, 0x48, 0x8d, 0x4b, 0x10, 0xba, 0xa0, 0x0f, 0x00, 0x00, 0xe8, 0x4f, 0xc1, 0xff, 0xff, 0x85, 0xc0, 0x75, 0x0b, 0x44, 0x8d, 0x70, 0x01, 0x44, 0x89, 0x74, 0x24, 0x28, 0xeb, 0x03, 0xff, 0x43, 0x0c, 0xb9, 0x0a, 0x00, 0x00, 0x00, 0xe8, 0xf7, 0x9f, 0xff, 0xff, 0x45, 0x85, 0xf6, 0x75, 0x20, 0x48, 0x8d, 0x4b, 0x10, 0xff, 0x15, 0x64, 0x4a, 0x00, 0x00, 0xf6, 0x43, 0x08, 0x01, 0x74, 0x0c, 0x48, 0x8d, 0x4b, 0x10, 0xff, 0x15, 0x5c, 0x4a, 0x00, 0x00, 0xeb, 0x48, 0x49, 0x83, 0xcc, 0xff, 0x45, 0x85, 0xf6, 0x75, 0x3f, 0xc6, 0x43, 0x08, 0x01, 0x4c, 0x89, 0x23, 0x4c, 0x8d, 0x05, 0x8b, 0x9d, 0x00, 0x00, 0x4b, 0x2b, 0x1c, 0xf8, 0x48, 0xb8, 0xa3, 0x8b, 0x2e, 0xba, 0xe8, 0xa2, 0x8b, 0x2e, 0x48, 0xf7, 0xeb, 0x4c, 0x8b, 0xea, 0x49, 0xc1, 0xfd, 0x04, 0x49, 0x8b, 0xc5, 0x48, 0xc1, 0xe8, 0x3f, 0x4c, 0x03, 0xe8, 0x8b, 0xc7, 0xc1, 0xe0, 0x05, 0x44, 0x03, 0xe8, 0x44, 0x89, 0x6c, 0x24, 0x20, 0xeb, 0x19, 0x48, 0x83, 0xc3, 0x58, 0x48, 0x89, 0x5c, 0x24, 0x30, 0x49, 0x83, 0xcc, 0xff, 0x48, 0x8d, 0x05, 0x46, 0x9d, 0x00, 0x00, 0xe9, 0x20, 0xff, 0xff, 0xff, 0x45, 0x3b, 0xec, 0x0f, 0x85, 0x9d, 0x00, 0x00, 0x00, 0xff, 0xc7, 0x89, 0x7c, 0x24, 0x24, 0x48, 0x8d, 0x05, 0x2b, 0x9d, 0x00, 0x00, 0xe9, 0xe7, 0xfe, 0xff, 0xff, 0xba, 0x58, 0x00, 0x00, 0x00, 0x8d, 0x4a, 0xc8, 0xe8, 0xf5, 0x99, 0xff, 0xff, 0x48, 0x89, 0x44, 0x24, 0x30, 0x48, 0x85, 0xc0, 0x74, 0x74, 0x48, 0x63, 0xd7, 0x4c, 0x8d, 0x05, 0x05, 0x9d, 0x00, 0x00, 0x49, 0x89, 0x04, 0xd0, 0x83, 0x05, 0xe2, 0x9c, 0x00, 0x00, 0x20, 0x49, 0x8b, 0x0c, 0xd0, 0x48, 0x81, 0xc1, 0x00, 0x0b, 0x00, 0x00, 0x48, 0x3b, 0xc1, 0x73, 0x1a, 0xc6, 0x40, 0x08, 0x00, 0x4c, 0x89, 0x20, 0xc6, 0x40, 0x09, 0x0a, 0x83, 0x60, 0x0c, 0x00, 0x48, 0x83, 0xc0, 0x58, 0x48, 0x89, 0x44, 0x24, 0x30, 0xeb, 0xd6, 0xc1, 0xe7, 0x05, 0x89, 0x7c, 0x24, 0x20, 0x48, 0x63, 0xcf, 0x48, 0x8b, 0xc1, 0x48, 0xc1, 0xf8, 0x05, 0x83, 0xe1, 0x1f, 0x48, 0x6b, 0xc9, 0x58, 0x49, 0x8b, 0x04, 0xc0, 0xc6, 0x44, 0x08, 0x08, 0x01, 0x8b, 0xcf, 0xe8, 0x48, 0xfd, 0xff, 0xff, 0x85, 0xc0, 0x41, 0x0f, 0x44, 0xfc, 0x44, 0x8b, 0xef, 0x89, 0x7c, 0x24, 0x20, 0xb9, 0x0b, 0x00, 0x00, 0x00, 0xe8, 0xc5, 0x9e, 0xff, 0xff, 0x41, 0x8b, 0xc5, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x7c, 0x24, 0x68, 0x4c, 0x8b, 0x64, 0x24, 0x70, 0x48, 0x83, 0xc4, 0x40, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0xc3, 0x48, 0x83, 0xec, 0x38, 0x48, 0x8b, 0x05, 0xa9, 0x7c, 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x44, 0x24, 0x28, 0x4c, 0x8d, 0x44, 0x24, 0x20, 0x41, 0xb9, 0x06, 0x00, 0x00, 0x00, 0xba, 0x04, 0x10, 0x00, 0x00, 0xc6, 0x44, 0x24, 0x26, 0x00, 0xff, 0x15, 0xce, 0x4a, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x05, 0x83, 0xc8, 0xff, 0xeb, 0x0a, 0x48, 0x8d, 0x4c, 0x24, 0x20, 0xe8, 0x9b, 0x02, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x28, 0x48, 0x33, 0xcc, 0xe8, 0xe6, 0x7b, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0x40, 0x55, 0x53, 0x56, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x81, 0xec, 0x88, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x6c, 0x24, 0x40, 0x48, 0x8b, 0x05, 0x40, 0x7c, 0x00, 0x00, 0x48, 0x33, 0xc5, 0x48, 0x89, 0x45, 0x30, 0x4c, 0x8b, 0xb5, 0xb0, 0x00, 0x00, 0x00, 0x45, 0x8b, 0x21, 0x33, 0xff, 0x49, 0x8b, 0xd8, 0x48, 0x8b, 0xf7, 0x89, 0x7d, 0x00, 0x4c, 0x89, 0x4d, 0x10, 0x44, 0x8b, 0xea, 0x44, 0x8b, 0xf9, 0x48, 0x89, 0x5d, 0x08, 0x3b, 0xca, 0x0f, 0x84, 0x13, 0x02, 0x00, 0x00, 0x48, 0x8d, 0x55, 0x18, 0xff, 0x15, 0x34, 0x49, 0x00, 0x00, 0x3b, 0xc7, 0x0f, 0x84, 0x9f, 0x00, 0x00, 0x00, 0x83, 0x7d, 0x18, 0x01, 0x0f, 0x85, 0x95, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x55, 0x18, 0x41, 0x8b, 0xcd, 0xff, 0x15, 0x15, 0x49, 0x00, 0x00, 0x3b, 0xc7, 0x0f, 0x84, 0x80, 0x00, 0x00, 0x00, 0x83, 0x7d, 0x18, 0x01, 0x75, 0x7a, 0xc7, 0x45, 0x00, 0x01, 0x00, 0x00, 0x00, 0x41, 0x83, 0xfc, 0xff, 0x74, 0x60, 0x41, 0x8b, 0xfc, 0x85, 0xff, 0x0f, 0x8e, 0xa9, 0x00, 0x00, 0x00, 0x48, 0x63, 0xcf, 0x48, 0xb8, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x48, 0x3b, 0xc8, 0x0f, 0x87, 0x93, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x09, 0x10, 0x48, 0x81, 0xf9, 0x00, 0x04, 0x00, 0x00, 0x77, 0x6c, 0x48, 0x8d, 0x41, 0x0f, 0x48, 0x3b, 0xc1, 0x77, 0x0a, 0x48, 0xb8, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x48, 0x83, 0xe0, 0xf0, 0xe8, 0xcf, 0x38, 0x00, 0x00, 0x48, 0x2b, 0xe0, 0x48, 0x8d, 0x5c, 0x24, 0x40, 0x48, 0x85, 0xdb, 0x74, 0x3c, 0xc7, 0x03, 0xcc, 0xcc, 0x00, 0x00, 0xeb, 0x4e, 0x48, 0x8b, 0xcb, 0xe8, 0xa2, 0xc7, 0xff, 0xff, 0x8d, 0x78, 0x01, 0xeb, 0x96, 0x45, 0x8b, 0xcc, 0x4c, 0x8b, 0xc3, 0xba, 0x01, 0x00, 0x00, 0x00, 0x41, 0x8b, 0xcf, 0x89, 0x7c, 0x24, 0x28, 0x48, 0x89, 0x7c, 0x24, 0x20, 0xff, 0x15, 0x68, 0x49, 0x00, 0x00, 0x8b, 0xf8, 0x85, 0xc0, 0x0f, 0x85, 0x6f, 0xff, 0xff, 0xff, 0x33, 0xc0, 0xe9, 0x37, 0x01, 0x00, 0x00, 0xe8, 0x56, 0xca, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x74, 0x0e, 0xc7, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0x48, 0x83, 0xc3, 0x10, 0xeb, 0x02, 0x33, 0xdb, 0x48, 0x85, 0xdb, 0x74, 0xd9, 0x4c, 0x63, 0xc7, 0x33, 0xd2, 0x48, 0x8b, 0xcb, 0x4d, 0x03, 0xc0, 0xe8, 0x1f, 0x74, 0xff, 0xff, 0x4c, 0x8b, 0x45, 0x08, 0x45, 0x8b, 0xcc, 0xba, 0x01, 0x00, 0x00, 0x00, 0x41, 0x8b, 0xcf, 0x89, 0x7c, 0x24, 0x28, 0x48, 0x89, 0x5c, 0x24, 0x20, 0xff, 0x15, 0x09, 0x49, 0x00, 0x00, 0x45, 0x33, 0xff, 0x41, 0x3b, 0xc7, 0x0f, 0x84, 0xc9, 0x00, 0x00, 0x00, 0x4d, 0x3b, 0xf7, 0x74, 0x3b, 0x8b, 0x85, 0xb8, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x7c, 0x24, 0x38, 0x4c, 0x89, 0x7c, 0x24, 0x30, 0x89, 0x44, 0x24, 0x28, 0x44, 0x8b, 0xcf, 0x4c, 0x8b, 0xc3, 0x33, 0xd2, 0x41, 0x8b, 0xcd, 0x4c, 0x89, 0x74, 0x24, 0x20, 0xff, 0x15, 0x66, 0x48, 0x00, 0x00, 0x41, 0x3b, 0xc7, 0x0f, 0x84, 0x91, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xf6, 0xe9, 0x89, 0x00, 0x00, 0x00, 0x44, 0x39, 0x7d, 0x00, 0x75, 0x2c, 0x4c, 0x89, 0x7c, 0x24, 0x38, 0x4c, 0x89, 0x7c, 0x24, 0x30, 0x44, 0x8b, 0xcf, 0x4c, 0x8b, 0xc3, 0x33, 0xd2, 0x41, 0x8b, 0xcd, 0x44, 0x89, 0x7c, 0x24, 0x28, 0x4c, 0x89, 0x7c, 0x24, 0x20, 0xff, 0x15, 0x2a, 0x48, 0x00, 0x00, 0x8b, 0xf8, 0x41, 0x3b, 0xc7, 0x74, 0x57, 0x48, 0x63, 0xd7, 0xb9, 0x01, 0x00, 0x00, 0x00, 0xe8, 0xf2, 0x96, 0xff, 0xff, 0x48, 0x8b, 0xf0, 0x49, 0x3b, 0xc7, 0x74, 0x42, 0x4c, 0x89, 0x7c, 0x24, 0x38, 0x4c, 0x89, 0x7c, 0x24, 0x30, 0x44, 0x8b, 0xcf, 0x4c, 0x8b, 0xc3, 0x33, 0xd2, 0x41, 0x8b, 0xcd, 0x89, 0x7c, 0x24, 0x28, 0x48, 0x89, 0x44, 0x24, 0x20, 0xff, 0x15, 0xea, 0x47, 0x00, 0x00, 0x41, 0x3b, 0xc7, 0x75, 0x0d, 0x48, 0x8b, 0xce, 0xe8, 0x4d, 0x98, 0xff, 0xff, 0x49, 0x8b, 0xf7, 0xeb, 0x0c, 0x41, 0x83, 0xfc, 0xff, 0x74, 0x06, 0x48, 0x8b, 0x4d, 0x10, 0x89, 0x01, 0x48, 0x8d, 0x4b, 0xf0, 0x81, 0x39, 0xdd, 0xdd, 0x00, 0x00, 0x75, 0x05, 0xe8, 0x2b, 0x98, 0xff, 0xff, 0x48, 0x8b, 0xc6, 0x48, 0x8b, 0x4d, 0x30, 0x48, 0x33, 0xcd, 0xe8, 0x6c, 0x79, 0xff, 0xff, 0x48, 0x8d, 0x65, 0x48, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0x5b, 0x5d, 0xc3, 0xcc, 0xcc, 0xcc, 0x33, 0xd2, 0x44, 0x8d, 0x42, 0x0a, 0xe9, 0x79, 0xf3, 0xff, 0xff, 0xcc, 0x4c, 0x8b, 0xd1, 0x4d, 0x85, 0xc0, 0x74, 0x3c, 0x45, 0x0f, 0xb6, 0x0a, 0x49, 0xff, 0xc2, 0x41, 0x8d, 0x41, 0xbf, 0x83, 0xf8, 0x19, 0x77, 0x04, 0x41, 0x83, 0xc1, 0x20, 0x0f, 0xb6, 0x0a, 0x48, 0xff, 0xc2, 0x8d, 0x41, 0xbf, 0x83, 0xf8, 0x19, 0x77, 0x03, 0x83, 0xc1, 0x20, 0x49, 0x83, 0xe8, 0x01, 0x74, 0x0a, 0x45, 0x85, 0xc9, 0x74, 0x05, 0x44, 0x3b, 0xc9, 0x74, 0xcb, 0x44, 0x2b, 0xc9, 0x41, 0x8b, 0xc1, 0xc3, 0x33, 0xc0, 0xc3, 0xcc, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x57, 0x48, 0x83, 0xec, 0x50, 0x49, 0x8b, 0xf8, 0x48, 0x8b, 0xf2, 0x48, 0x8b, 0xe9, 0x4d, 0x85, 0xc0, 0x0f, 0x84, 0xd4, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x48, 0xd8, 0x49, 0x8b, 0xd1, 0xe8, 0xf2, 0x78, 0xff, 0xff, 0x48, 0x85, 0xed, 0x75, 0x3d, 0xe8, 0xf0, 0x94, 0xff, 0xff, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x05, 0x94, 0xff, 0xff, 0x80, 0x7c, 0x24, 0x48, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xb8, 0xff, 0xff, 0xff, 0x7f, 0xe9, 0x88, 0x00, 0x00, 0x00, 0x48, 0x85, 0xf6, 0x74, 0xbe, 0x48, 0x81, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xb5, 0x48, 0x8b, 0x44, 0x24, 0x30, 0x83, 0x78, 0x14, 0x00, 0x75, 0x23, 0x4c, 0x8b, 0xc7, 0x48, 0x8b, 0xd6, 0x48, 0x8b, 0xcd, 0xe8, 0x1d, 0xff, 0xff, 0xff, 0x80, 0x7c, 0x24, 0x48, 0x00, 0x74, 0x5a, 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xeb, 0x4c, 0x0f, 0xb6, 0x4d, 0x00, 0x48, 0x8d, 0x54, 0x24, 0x30, 0xe8, 0x02, 0x03, 0x00, 0x00, 0x0f, 0xb6, 0x0e, 0x48, 0x8d, 0x54, 0x24, 0x30, 0x8b, 0xd8, 0x48, 0xff, 0xc5, 0xe8, 0xf0, 0x02, 0x00, 0x00, 0x48, 0xff, 0xc6, 0x48, 0x83, 0xef, 0x01, 0x74, 0x08, 0x85, 0xdb, 0x74, 0x04, 0x3b, 0xd8, 0x74, 0xcf, 0x2b, 0xd8, 0x80, 0x7c, 0x24, 0x48, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x8b, 0xc3, 0xeb, 0x02, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x6c, 0x24, 0x68, 0x48, 0x8b, 0x74, 0x24, 0x70, 0x48, 0x83, 0xc4, 0x50, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x38, 0x83, 0x3d, 0x45, 0x92, 0x00, 0x00, 0x00, 0x75, 0x41, 0x48, 0x85, 0xc9, 0x75, 0x27, 0xe8, 0x01, 0x94, 0xff, 0xff, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x16, 0x93, 0xff, 0xff, 0xb8, 0xff, 0xff, 0xff, 0x7f, 0xeb, 0x1d, 0x48, 0x85, 0xd2, 0x74, 0xd4, 0x49, 0x81, 0xf8, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xcb, 0xe8, 0x58, 0xfe, 0xff, 0xff, 0xeb, 0x08, 0x45, 0x33, 0xc9, 0xe8, 0x96, 0xfe, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0x48, 0x83, 0xec, 0x48, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, 0x83, 0x64, 0x24, 0x28, 0x00, 0x41, 0xb8, 0x03, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x50, 0x5a, 0x00, 0x00, 0x45, 0x33, 0xc9, 0xba, 0x00, 0x00, 0x00, 0x40, 0x44, 0x89, 0x44, 0x24, 0x20, 0xff, 0x15, 0x6d, 0x46, 0x00, 0x00, 0x48, 0x89, 0x05, 0xb6, 0x87, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x48, 0xc3, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x48, 0x8b, 0x0d, 0xa5, 0x87, 0x00, 0x00, 0x48, 0x83, 0xf9, 0xff, 0x74, 0x0c, 0x48, 0x83, 0xf9, 0xfe, 0x74, 0x06, 0xff, 0x15, 0x1b, 0x46, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x84, 0x87, 0x00, 0x00, 0x48, 0x83, 0xf9, 0xff, 0x74, 0x0c, 0x48, 0x83, 0xf9, 0xfe, 0x74, 0x06, 0xff, 0x15, 0x02, 0x46, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x83, 0x3d, 0x56, 0x99, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x1d, 0x1f, 0x89, 0x00, 0x00, 0x48, 0x8b, 0xf1, 0x74, 0x6d, 0x48, 0x85, 0xdb, 0x75, 0x1e, 0x48, 0x39, 0x1d, 0x1e, 0x89, 0x00, 0x00, 0x74, 0x5f, 0xe8, 0x2b, 0x04, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x56, 0x48, 0x8b, 0x1d, 0xfc, 0x88, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x74, 0x4a, 0x48, 0x85, 0xf6, 0x74, 0x45, 0x48, 0x8b, 0xce, 0xe8, 0x8a, 0xc3, 0xff, 0xff, 0x48, 0x8b, 0xf8, 0x48, 0x8b, 0x0b, 0x48, 0x85, 0xc9, 0x74, 0x32, 0xe8, 0x7a, 0xc3, 0xff, 0xff, 0x48, 0x3b, 0xc7, 0x76, 0x18, 0x48, 0x8b, 0x0b, 0x80, 0x3c, 0x39, 0x3d, 0x75, 0x0f, 0x4c, 0x8b, 0xc7, 0x48, 0x8b, 0xd6, 0xe8, 0xdd, 0x03, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x06, 0x48, 0x83, 0xc3, 0x08, 0xeb, 0xd0, 0x48, 0x8b, 0x03, 0x48, 0x8d, 0x44, 0x38, 0x01, 0xeb, 0x02, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x48, 0x89, 0x7c, 0x24, 0x18, 0x41, 0x54, 0x48, 0x83, 0xec, 0x30, 0x49, 0x8b, 0xf0, 0x48, 0x8b, 0xda, 0x48, 0x8b, 0xf9, 0xb9, 0x07, 0x00, 0x00, 0x00, 0xe8, 0xc4, 0x99, 0xff, 0xff, 0x90, 0x33, 0xc0, 0x48, 0x85, 0xff, 0x0f, 0x95, 0xc0, 0x85, 0xc0, 0x75, 0x26, 0xe8, 0x66, 0x92, 0xff, 0xff, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x89, 0x18, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x7a, 0x91, 0xff, 0xff, 0xe9, 0xb6, 0x00, 0x00, 0x00, 0x48, 0x83, 0x27, 0x00, 0x48, 0x85, 0xdb, 0x74, 0x04, 0x48, 0x83, 0x23, 0x00, 0x33, 0xc0, 0x48, 0x85, 0xf6, 0x0f, 0x95, 0xc0, 0x85, 0xc0, 0x75, 0x23, 0xe8, 0x27, 0x92, 0xff, 0xff, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x89, 0x18, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x3b, 0x91, 0xff, 0xff, 0xeb, 0x7a, 0x48, 0x8b, 0xce, 0xe8, 0xbd, 0xfe, 0xff, 0xff, 0x48, 0x8b, 0xf0, 0x48, 0x85, 0xc0, 0x75, 0x04, 0x33, 0xdb, 0xeb, 0x66, 0x48, 0x8b, 0xc8, 0xe8, 0x85, 0xc2, 0xff, 0xff, 0xba, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x24, 0x02, 0x49, 0x8b, 0xcc, 0xe8, 0xf8, 0x6e, 0xff, 0xff, 0x48, 0x89, 0x07, 0x48, 0x85, 0xc0, 0x75, 0x14, 0xe8, 0xcf, 0x91, 0xff, 0xff, 0xc7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xe8, 0xc4, 0x91, 0xff, 0xff, 0x8b, 0x18, 0xeb, 0x31, 0x4c, 0x8b, 0xc6, 0x49, 0x8b, 0xd4, 0x48, 0x8b, 0xc8, 0xe8, 0xbe, 0xe5, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x15, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0xa1, 0x8f, 0xff, 0xff, 0x48, 0x85, 0xdb, 0x74, 0x03, 0x4c, 0x89, 0x23, 0x33, 0xdb, 0xb9, 0x07, 0x00, 0x00, 0x00, 0xe8, 0xd1, 0x97, 0xff, 0xff, 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x74, 0x24, 0x48, 0x48, 0x8b, 0x7c, 0x24, 0x50, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5c, 0xc3, 0xcc, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x70, 0x48, 0x63, 0xf9, 0x48, 0x8d, 0x4c, 0x24, 0x50, 0xe8, 0x4d, 0x75, 0xff, 0xff, 0x81, 0xff, 0x00, 0x01, 0x00, 0x00, 0x73, 0x62, 0x48, 0x8b, 0x54, 0x24, 0x50, 0x83, 0xba, 0x0c, 0x01, 0x00, 0x00, 0x01, 0x7e, 0x18, 0x4c, 0x8d, 0x44, 0x24, 0x50, 0xba, 0x01, 0x00, 0x00, 0x00, 0x8b, 0xcf, 0xe8, 0x12, 0xac, 0xff, 0xff, 0x48, 0x8b, 0x54, 0x24, 0x50, 0xeb, 0x0e, 0x48, 0x8b, 0x82, 0x40, 0x01, 0x00, 0x00, 0x0f, 0xb7, 0x04, 0x78, 0x83, 0xe0, 0x01, 0x85, 0xc0, 0x74, 0x10, 0x48, 0x8b, 0x82, 0x48, 0x01, 0x00, 0x00, 0x0f, 0xb6, 0x04, 0x38, 0xe9, 0xe8, 0x00, 0x00, 0x00, 0x80, 0x7c, 0x24, 0x68, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x60, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x8b, 0xc7, 0xe9, 0xe1, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x50, 0x83, 0xb8, 0x0c, 0x01, 0x00, 0x00, 0x01, 0x7e, 0x36, 0x8b, 0xef, 0x48, 0x8d, 0x54, 0x24, 0x50, 0xc1, 0xfd, 0x08, 0x40, 0x0f, 0xb6, 0xcd, 0xe8, 0xb6, 0xc0, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x1f, 0x40, 0x88, 0xac, 0x24, 0x80, 0x00, 0x00, 0x00, 0x40, 0x88, 0xbc, 0x24, 0x81, 0x00, 0x00, 0x00, 0xc6, 0x84, 0x24, 0x82, 0x00, 0x00, 0x00, 0x00, 0xba, 0x02, 0x00, 0x00, 0x00, 0xeb, 0x20, 0xe8, 0xa2, 0x90, 0xff, 0xff, 0xba, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x40, 0x88, 0xbc, 0x24, 0x80, 0x00, 0x00, 0x00, 0xc6, 0x84, 0x24, 0x81, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x50, 0xc7, 0x44, 0x24, 0x40, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x8c, 0x24, 0x80, 0x00, 0x00, 0x00, 0x8b, 0x41, 0x04, 0x41, 0xb8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x44, 0x24, 0x38, 0x48, 0x8d, 0x84, 0x24, 0x90, 0x00, 0x00, 0x00, 0xc7, 0x44, 0x24, 0x30, 0x03, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x28, 0x89, 0x54, 0x24, 0x20, 0x8b, 0x51, 0x14, 0x48, 0x8d, 0x4c, 0x24, 0x50, 0xe8, 0x43, 0xd9, 0xff, 0xff, 0x85, 0xc0, 0x0f, 0x84, 0x32, 0xff, 0xff, 0xff, 0x83, 0xf8, 0x01, 0x0f, 0xb6, 0x84, 0x24, 0x90, 0x00, 0x00, 0x00, 0x74, 0x0d, 0x0f, 0xb6, 0x8c, 0x24, 0x91, 0x00, 0x00, 0x00, 0xc1, 0xe0, 0x08, 0x0b, 0xc1, 0x80, 0x7c, 0x24, 0x68, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x60, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0xac, 0x24, 0x88, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x70, 0x5f, 0xc3, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x57, 0x48, 0x83, 0xec, 0x60, 0x48, 0x8b, 0xf1, 0x48, 0x8b, 0xfa, 0x48, 0x8d, 0x48, 0xd8, 0x49, 0x8b, 0xd1, 0x49, 0x8b, 0xe9, 0x49, 0x8b, 0xd8, 0xe8, 0xc8, 0x73, 0xff, 0xff, 0x48, 0x85, 0xdb, 0x75, 0x19, 0x38, 0x5c, 0x24, 0x58, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x50, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x33, 0xc0, 0xe9, 0xaf, 0x00, 0x00, 0x00, 0x48, 0x85, 0xf6, 0x75, 0x3a, 0xe8, 0xa8, 0x8f, 0xff, 0xff, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0xbd, 0x8e, 0xff, 0xff, 0x80, 0x7c, 0x24, 0x58, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x50, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xb8, 0xff, 0xff, 0xff, 0x7f, 0xeb, 0x70, 0x48, 0x85, 0xff, 0x74, 0xc1, 0x48, 0x81, 0xfb, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xb8, 0x48, 0x8b, 0x4c, 0x24, 0x48, 0x83, 0x79, 0x08, 0x00, 0x75, 0x13, 0x4c, 0x8b, 0xcd, 0x4c, 0x8b, 0xc3, 0x48, 0x8b, 0xd7, 0x48, 0x8b, 0xce, 0xe8, 0xc1, 0x06, 0x00, 0x00, 0xeb, 0x31, 0x8b, 0x41, 0x04, 0x8b, 0x51, 0x0c, 0x48, 0x8d, 0x4c, 0x24, 0x40, 0x89, 0x44, 0x24, 0x38, 0x89, 0x5c, 0x24, 0x30, 0x4c, 0x8b, 0xce, 0x41, 0xb8, 0x01, 0x10, 0x00, 0x00, 0x48, 0x89, 0x7c, 0x24, 0x28, 0x89, 0x5c, 0x24, 0x20, 0xe8, 0x09, 0x06, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x8c, 0x83, 0xc0, 0xfe, 0x80, 0x7c, 0x24, 0x58, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x50, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x4c, 0x8d, 0x5c, 0x24, 0x60, 0x49, 0x8b, 0x5b, 0x10, 0x49, 0x8b, 0x6b, 0x18, 0x49, 0x8b, 0x73, 0x20, 0x49, 0x8b, 0xe3, 0x5f, 0xc3, 0xcc, 0x45, 0x33, 0xc9, 0xe9, 0xe8, 0xfe, 0xff, 0xff, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x6c, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x40, 0x48, 0x83, 0x64, 0x24, 0x50, 0x00, 0x48, 0x8b, 0x1d, 0xd0, 0x84, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0xaa, 0x00, 0x00, 0x00, 0x83, 0xcd, 0xff, 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, 0x83, 0x64, 0x24, 0x28, 0x00, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x44, 0x8b, 0xcd, 0x4c, 0x8b, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xff, 0x15, 0xaa, 0x40, 0x00, 0x00, 0x48, 0x63, 0xf8, 0x85, 0xc0, 0x0f, 0x84, 0x91, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcf, 0xba, 0x01, 0x00, 0x00, 0x00, 0xe8, 0x6e, 0x8f, 0xff, 0xff, 0x48, 0x89, 0x44, 0x24, 0x50, 0x48, 0x85, 0xc0, 0x74, 0x7a, 0x48, 0x83, 0x64, 0x24, 0x38, 0x00, 0x48, 0x83, 0x64, 0x24, 0x30, 0x00, 0x4c, 0x8b, 0x03, 0x44, 0x8b, 0xcd, 0x33, 0xd2, 0x33, 0xc9, 0x89, 0x7c, 0x24, 0x28, 0x48, 0x89, 0x44, 0x24, 0x20, 0xff, 0x15, 0x63, 0x40, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x47, 0x48, 0x8d, 0x4c, 0x24, 0x50, 0x33, 0xd2, 0xe8, 0xcb, 0x06, 0x00, 0x00, 0x85, 0xc0, 0x79, 0x15, 0x48, 0x8b, 0x4c, 0x24, 0x50, 0x48, 0x85, 0xc9, 0x74, 0x0b, 0xe8, 0xb0, 0x90, 0xff, 0xff, 0x48, 0x83, 0x64, 0x24, 0x50, 0x00, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x0f, 0x85, 0x59, 0xff, 0xff, 0xff, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x58, 0x48, 0x8b, 0x6c, 0x24, 0x60, 0x48, 0x83, 0xc4, 0x40, 0x5f, 0xc3, 0x48, 0x8b, 0x4c, 0x24, 0x50, 0xe8, 0x7e, 0x90, 0xff, 0xff, 0x8b, 0xc5, 0xeb, 0xe2, 0xcc, 0xcc, 0x40, 0x55, 0x53, 0x56, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x68, 0x48, 0x8d, 0x6c, 0x24, 0x30, 0x48, 0x8b, 0x05, 0x2b, 0x72, 0x00, 0x00, 0x48, 0x33, 0xc5, 0x48, 0x89, 0x45, 0x28, 0x48, 0x8b, 0xbd, 0xa8, 0x00, 0x00, 0x00, 0x44, 0x8b, 0xd2, 0x89, 0x55, 0x00, 0x8b, 0x15, 0xad, 0x91, 0x00, 0x00, 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, 0x33, 0xdb, 0x4d, 0x8b, 0xf9, 0x44, 0x89, 0x45, 0x04, 0x4c, 0x8b, 0xf1, 0x48, 0x89, 0x7d, 0x08, 0x45, 0x8d, 0x63, 0xff, 0x3b, 0xd3, 0x75, 0x4f, 0x4c, 0x8d, 0x05, 0x18, 0x4a, 0x00, 0x00, 0x45, 0x8b, 0xcc, 0x33, 0xd2, 0x33, 0xc9, 0x44, 0x89, 0x64, 0x24, 0x28, 0x4c, 0x89, 0x44, 0x24, 0x20, 0xff, 0x15, 0x6d, 0x40, 0x00, 0x00, 0x3b, 0xc3, 0x74, 0x0a, 0x41, 0x8b, 0xd4, 0x45, 0x8d, 0x5c, 0x24, 0x01, 0xeb, 0x19, 0xff, 0x15, 0xd9, 0x3e, 0x00, 0x00, 0x8b, 0x15, 0x57, 0x91, 0x00, 0x00, 0x41, 0xbb, 0x02, 0x00, 0x00, 0x00, 0x83, 0xf8, 0x78, 0x41, 0x0f, 0x44, 0xd3, 0x44, 0x8b, 0x55, 0x00, 0x89, 0x15, 0x40, 0x91, 0x00, 0x00, 0x44, 0x8b, 0x8d, 0xa0, 0x00, 0x00, 0x00, 0x44, 0x3b, 0xcb, 0x7e, 0x59, 0x41, 0x8b, 0xc9, 0x49, 0x8b, 0xc7, 0x41, 0x2b, 0xcc, 0x83, 0xce, 0xff, 0x38, 0x18, 0x74, 0x09, 0x49, 0x03, 0xc4, 0x3b, 0xcb, 0x75, 0xef, 0x8b, 0xce, 0x8b, 0xc6, 0x2b, 0xc1, 0x44, 0x03, 0xc8, 0x44, 0x89, 0x8d, 0xa0, 0x00, 0x00, 0x00, 0x44, 0x8b, 0x85, 0xb0, 0x00, 0x00, 0x00, 0x44, 0x3b, 0xc3, 0x7e, 0x35, 0x41, 0x8b, 0xc8, 0x48, 0x8b, 0xc7, 0x41, 0x2b, 0xcc, 0x38, 0x18, 0x74, 0x09, 0x49, 0x03, 0xc4, 0x3b, 0xcb, 0x75, 0xf2, 0x8b, 0xce, 0x8b, 0xc6, 0x2b, 0xc1, 0x44, 0x03, 0xc0, 0x44, 0x89, 0x85, 0xb0, 0x00, 0x00, 0x00, 0xeb, 0x14, 0x83, 0xce, 0xff, 0x44, 0x3b, 0xce, 0x7d, 0xc6, 0x33, 0xc0, 0xe9, 0xa5, 0x03, 0x00, 0x00, 0x44, 0x3b, 0xc6, 0x7c, 0xf4, 0x41, 0x3b, 0xd3, 0x0f, 0x84, 0xaf, 0x02, 0x00, 0x00, 0x3b, 0xd3, 0x0f, 0x84, 0xa7, 0x02, 0x00, 0x00, 0x41, 0x3b, 0xd4, 0x75, 0xde, 0x44, 0x8b, 0xad, 0xb8, 0x00, 0x00, 0x00, 0x44, 0x3b, 0xeb, 0x75, 0x07, 0x49, 0x8b, 0x0e, 0x44, 0x8b, 0x69, 0x04, 0x44, 0x3b, 0xcb, 0x74, 0x09, 0x44, 0x3b, 0xc3, 0x0f, 0x85, 0xab, 0x00, 0x00, 0x00, 0x45, 0x3b, 0xc8, 0x75, 0x08, 0x41, 0x8b, 0xc3, 0xe9, 0x5c, 0x03, 0x00, 0x00, 0x45, 0x3b, 0xc4, 0x7e, 0x08, 0x41, 0x8b, 0xc4, 0xe9, 0x4f, 0x03, 0x00, 0x00, 0x45, 0x3b, 0xcc, 0x7e, 0x0a, 0xb8, 0x03, 0x00, 0x00, 0x00, 0xe9, 0x40, 0x03, 0x00, 0x00, 0x48, 0x8d, 0x55, 0x10, 0x41, 0x8b, 0xcd, 0xff, 0x15, 0xee, 0x3d, 0x00, 0x00, 0x3b, 0xc3, 0x74, 0x83, 0x44, 0x8b, 0x8d, 0xa0, 0x00, 0x00, 0x00, 0x44, 0x3b, 0xcb, 0x7e, 0x32, 0x83, 0x7d, 0x10, 0x02, 0x72, 0xd3, 0x38, 0x5d, 0x16, 0x48, 0x8d, 0x45, 0x16, 0x74, 0xca, 0x38, 0x58, 0x01, 0x74, 0xc5, 0x41, 0x8a, 0x0f, 0x3a, 0x08, 0x72, 0x05, 0x3a, 0x48, 0x01, 0x76, 0x08, 0x48, 0x83, 0xc0, 0x02, 0x38, 0x18, 0xeb, 0xe5, 0xb8, 0x02, 0x00, 0x00, 0x00, 0xe9, 0xf1, 0x02, 0x00, 0x00, 0x39, 0x9d, 0xb0, 0x00, 0x00, 0x00, 0x7e, 0x2b, 0x83, 0x7d, 0x10, 0x02, 0x72, 0x8c, 0x38, 0x5d, 0x16, 0x48, 0x8d, 0x45, 0x16, 0x74, 0x83, 0x38, 0x58, 0x01, 0x0f, 0x84, 0x7a, 0xff, 0xff, 0xff, 0x8a, 0x0f, 0x3a, 0x08, 0x72, 0x05, 0x3a, 0x48, 0x01, 0x76, 0xcb, 0x48, 0x83, 0xc0, 0x02, 0x38, 0x18, 0xeb, 0xe2, 0x4d, 0x8b, 0xc7, 0xba, 0x09, 0x00, 0x00, 0x00, 0x41, 0x8b, 0xcd, 0x89, 0x5c, 0x24, 0x28, 0x48, 0x89, 0x5c, 0x24, 0x20, 0xff, 0x15, 0x57, 0x3e, 0x00, 0x00, 0x4c, 0x63, 0xf0, 0x44, 0x3b, 0xf3, 0x0f, 0x84, 0xec, 0xfe, 0xff, 0xff, 0x49, 0xb8, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x7e, 0x64, 0x33, 0xd2, 0x48, 0x8d, 0x42, 0xe0, 0x49, 0xf7, 0xf6, 0x48, 0x83, 0xf8, 0x02, 0x72, 0x55, 0x4b, 0x8d, 0x4c, 0x36, 0x10, 0x48, 0x81, 0xf9, 0x00, 0x04, 0x00, 0x00, 0x77, 0x2e, 0x48, 0x8d, 0x41, 0x0f, 0x48, 0x3b, 0xc1, 0x77, 0x03, 0x49, 0x8b, 0xc0, 0x48, 0x83, 0xe0, 0xf0, 0xe8, 0x35, 0x2d, 0x00, 0x00, 0x48, 0x2b, 0xe0, 0x48, 0x8d, 0x74, 0x24, 0x30, 0x48, 0x3b, 0xf3, 0x0f, 0x84, 0x9d, 0xfe, 0xff, 0xff, 0xc7, 0x06, 0xcc, 0xcc, 0x00, 0x00, 0xeb, 0x13, 0xe8, 0xf3, 0xbe, 0xff, 0xff, 0x48, 0x8b, 0xf0, 0x48, 0x3b, 0xc3, 0x74, 0x0f, 0xc7, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0x48, 0x83, 0xc6, 0x10, 0xeb, 0x03, 0x48, 0x8b, 0xf3, 0x48, 0x3b, 0xf3, 0x0f, 0x84, 0x70, 0xfe, 0xff, 0xff, 0x44, 0x8b, 0x8d, 0xa0, 0x00, 0x00, 0x00, 0x4d, 0x8b, 0xc7, 0x41, 0x8b, 0xd4, 0x41, 0x8b, 0xcd, 0x44, 0x89, 0x74, 0x24, 0x28, 0x48, 0x89, 0x74, 0x24, 0x20, 0xff, 0x15, 0xaf, 0x3d, 0x00, 0x00, 0x3b, 0xc3, 0x0f, 0x84, 0xf4, 0x00, 0x00, 0x00, 0x44, 0x8b, 0x8d, 0xb0, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xc7, 0xba, 0x09, 0x00, 0x00, 0x00, 0x41, 0x8b, 0xcd, 0x89, 0x5c, 0x24, 0x28, 0x48, 0x89, 0x5c, 0x24, 0x20, 0xff, 0x15, 0x86, 0x3d, 0x00, 0x00, 0x4c, 0x63, 0xe0, 0x44, 0x3b, 0xe3, 0x0f, 0x84, 0xc7, 0x00, 0x00, 0x00, 0x7e, 0x67, 0x33, 0xd2, 0x48, 0x8d, 0x42, 0xe0, 0x49, 0xf7, 0xf4, 0x48, 0x83, 0xf8, 0x02, 0x72, 0x58, 0x4b, 0x8d, 0x4c, 0x24, 0x10, 0x48, 0x81, 0xf9, 0x00, 0x04, 0x00, 0x00, 0x77, 0x31, 0x48, 0x8d, 0x41, 0x0f, 0x48, 0x3b, 0xc1, 0x77, 0x0a, 0x48, 0xb8, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x48, 0x83, 0xe0, 0xf0, 0xe8, 0x67, 0x2c, 0x00, 0x00, 0x48, 0x2b, 0xe0, 0x48, 0x8d, 0x7c, 0x24, 0x30, 0x48, 0x3b, 0xfb, 0x74, 0x7f, 0xc7, 0x07, 0xcc, 0xcc, 0x00, 0x00, 0xeb, 0x13, 0xe8, 0x29, 0xbe, 0xff, 0xff, 0x48, 0x8b, 0xf8, 0x48, 0x3b, 0xc3, 0x74, 0x0f, 0xc7, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0x48, 0x83, 0xc7, 0x10, 0xeb, 0x03, 0x48, 0x8b, 0xfb, 0x48, 0x3b, 0xfb, 0x74, 0x56, 0x44, 0x8b, 0x8d, 0xb0, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x45, 0x08, 0xba, 0x01, 0x00, 0x00, 0x00, 0x41, 0x8b, 0xcd, 0x44, 0x89, 0x64, 0x24, 0x28, 0x48, 0x89, 0x7c, 0x24, 0x20, 0xff, 0x15, 0xe6, 0x3c, 0x00, 0x00, 0x3b, 0xc3, 0x74, 0x1e, 0x8b, 0x55, 0x04, 0x8b, 0x4d, 0x00, 0x45, 0x8b, 0xce, 0x4c, 0x8b, 0xc6, 0x44, 0x89, 0x64, 0x24, 0x28, 0x48, 0x89, 0x7c, 0x24, 0x20, 0xff, 0x15, 0x36, 0x3d, 0x00, 0x00, 0x8b, 0xd8, 0x48, 0x8d, 0x4f, 0xf0, 0x81, 0x39, 0xdd, 0xdd, 0x00, 0x00, 0x75, 0x05, 0xe8, 0xbb, 0x8c, 0xff, 0xff, 0x48, 0x8d, 0x4e, 0xf0, 0x81, 0x39, 0xdd, 0xdd, 0x00, 0x00, 0x75, 0x05, 0xe8, 0xaa, 0x8c, 0xff, 0xff, 0x8b, 0xc3, 0xe9, 0xe8, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xfb, 0x4c, 0x8b, 0xeb, 0x44, 0x3b, 0xd3, 0x75, 0x0b, 0x49, 0x8b, 0x06, 0x44, 0x8b, 0x50, 0x14, 0x44, 0x89, 0x55, 0x00, 0x44, 0x8b, 0xa5, 0xb8, 0x00, 0x00, 0x00, 0x44, 0x3b, 0xe3, 0x75, 0x07, 0x49, 0x8b, 0x06, 0x44, 0x8b, 0x60, 0x04, 0x41, 0x8b, 0xca, 0xe8, 0x8e, 0xf1, 0xff, 0xff, 0x44, 0x8b, 0xf0, 0x3b, 0xc6, 0x0f, 0x84, 0x00, 0xfd, 0xff, 0xff, 0x41, 0x3b, 0xc4, 0x74, 0x65, 0x4c, 0x8d, 0x8d, 0xa0, 0x00, 0x00, 0x00, 0x4d, 0x8b, 0xc7, 0x8b, 0xd0, 0x41, 0x8b, 0xcc, 0x89, 0x5c, 0x24, 0x28, 0x48, 0x89, 0x5c, 0x24, 0x20, 0xe8, 0xb5, 0xf1, 0xff, 0xff, 0x48, 0x8b, 0xf8, 0x48, 0x3b, 0xc3, 0x0f, 0x84, 0xd2, 0xfc, 0xff, 0xff, 0x4c, 0x8b, 0x45, 0x08, 0x4c, 0x8d, 0x8d, 0xb0, 0x00, 0x00, 0x00, 0x41, 0x8b, 0xd6, 0x41, 0x8b, 0xcc, 0x89, 0x5c, 0x24, 0x28, 0x48, 0x89, 0x5c, 0x24, 0x20, 0xe8, 0x8a, 0xf1, 0xff, 0xff, 0x4c, 0x8b, 0xe8, 0x48, 0x3b, 0xc3, 0x75, 0x0d, 0x48, 0x8b, 0xcf, 0xe8, 0x0a, 0x8c, 0xff, 0xff, 0xe9, 0x9e, 0xfc, 0xff, 0xff, 0x4c, 0x8b, 0xff, 0x4c, 0x8b, 0xc0, 0xeb, 0x04, 0x4c, 0x8b, 0x45, 0x08, 0x8b, 0x85, 0xb0, 0x00, 0x00, 0x00, 0x44, 0x8b, 0x8d, 0xa0, 0x00, 0x00, 0x00, 0x8b, 0x55, 0x04, 0x8b, 0x4d, 0x00, 0x89, 0x44, 0x24, 0x28, 0x4c, 0x89, 0x44, 0x24, 0x20, 0x4d, 0x8b, 0xc7, 0xff, 0x15, 0x34, 0x3c, 0x00, 0x00, 0x8b, 0xf0, 0x48, 0x3b, 0xfb, 0x74, 0x10, 0x48, 0x8b, 0xcf, 0xe8, 0xc5, 0x8b, 0xff, 0xff, 0x49, 0x8b, 0xcd, 0xe8, 0xbd, 0x8b, 0xff, 0xff, 0x8b, 0xc6, 0x48, 0x8b, 0x4d, 0x28, 0x48, 0x33, 0xcd, 0xe8, 0xff, 0x6c, 0xff, 0xff, 0x48, 0x8d, 0x65, 0x38, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0x5b, 0x5d, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x60, 0x8b, 0xf2, 0x48, 0x8b, 0xd1, 0x48, 0x8d, 0x4c, 0x24, 0x40, 0x49, 0x8b, 0xd9, 0x41, 0x8b, 0xf8, 0xe8, 0xe8, 0x6c, 0xff, 0xff, 0x44, 0x8b, 0x9c, 0x24, 0xa8, 0x00, 0x00, 0x00, 0x8b, 0x84, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x40, 0x44, 0x89, 0x5c, 0x24, 0x38, 0x89, 0x44, 0x24, 0x30, 0x48, 0x8b, 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x28, 0x8b, 0x84, 0x24, 0x90, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xcb, 0x44, 0x8b, 0xc7, 0x8b, 0xd6, 0x89, 0x44, 0x24, 0x20, 0xe8, 0xbe, 0xfa, 0xff, 0xff, 0x80, 0x7c, 0x24, 0x58, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x50, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0x5c, 0x24, 0x70, 0x48, 0x8b, 0x74, 0x24, 0x78, 0x48, 0x83, 0xc4, 0x60, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x60, 0x48, 0x8b, 0xf1, 0x48, 0x8b, 0xfa, 0x48, 0x8d, 0x4c, 0x24, 0x40, 0x49, 0x8b, 0xd1, 0x49, 0x8b, 0xd8, 0xe8, 0x5b, 0x6c, 0xff, 0xff, 0x48, 0x85, 0xdb, 0x75, 0x19, 0x38, 0x5c, 0x24, 0x58, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x50, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x33, 0xc0, 0xe9, 0xc2, 0x00, 0x00, 0x00, 0x48, 0x85, 0xf6, 0x75, 0x3d, 0xe8, 0x3b, 0x88, 0xff, 0xff, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x50, 0x87, 0xff, 0xff, 0x80, 0x7c, 0x24, 0x58, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x50, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xb8, 0xff, 0xff, 0xff, 0x7f, 0xe9, 0x80, 0x00, 0x00, 0x00, 0x48, 0x85, 0xff, 0x74, 0xbe, 0x48, 0x81, 0xfb, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xb5, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x8b, 0x50, 0x10, 0x85, 0xd2, 0x75, 0x15, 0x4c, 0x8d, 0x4c, 0x24, 0x40, 0x4c, 0x8b, 0xc3, 0x48, 0x8b, 0xd7, 0x48, 0x8b, 0xce, 0xe8, 0xaa, 0xf2, 0xff, 0xff, 0xeb, 0x3e, 0x8b, 0x40, 0x08, 0x48, 0x8d, 0x4c, 0x24, 0x40, 0x4c, 0x8b, 0xce, 0x89, 0x44, 0x24, 0x38, 0x89, 0x5c, 0x24, 0x30, 0x41, 0xb8, 0x01, 0x10, 0x00, 0x00, 0x48, 0x89, 0x7c, 0x24, 0x28, 0x89, 0x5c, 0x24, 0x20, 0xe8, 0x99, 0xfe, 0xff, 0xff, 0x85, 0xc0, 0x75, 0x10, 0xe8, 0xa4, 0x87, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe9, 0x79, 0xff, 0xff, 0xff, 0x83, 0xc0, 0xfe, 0x80, 0x7c, 0x24, 0x58, 0x00, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x50, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0x5c, 0x24, 0x70, 0x48, 0x8b, 0x74, 0x24, 0x78, 0x48, 0x83, 0xc4, 0x60, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x18, 0x89, 0x54, 0x24, 0x10, 0x55, 0x56, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x30, 0x45, 0x33, 0xed, 0x8b, 0xea, 0x4c, 0x8b, 0xf1, 0x41, 0x8b, 0xdd, 0x49, 0x3b, 0xcd, 0x75, 0x24, 0xe8, 0x43, 0x87, 0xff, 0xff, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x4c, 0x89, 0x6c, 0x24, 0x20, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x59, 0x86, 0xff, 0xff, 0xe9, 0xea, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x21, 0x4d, 0x3b, 0xe5, 0x0f, 0x84, 0xd3, 0x00, 0x00, 0x00, 0xba, 0x3d, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xcc, 0xe8, 0xb3, 0x04, 0x00, 0x00, 0x48, 0x8b, 0xf8, 0x48, 0x89, 0x44, 0x24, 0x70, 0x49, 0x3b, 0xc5, 0x0f, 0x84, 0xb5, 0x00, 0x00, 0x00, 0x4c, 0x3b, 0xe0, 0x0f, 0x84, 0xac, 0x00, 0x00, 0x00, 0x44, 0x38, 0x68, 0x01, 0x48, 0x8b, 0x35, 0xde, 0x7c, 0x00, 0x00, 0x45, 0x8b, 0xfd, 0x41, 0x0f, 0x94, 0xc7, 0x48, 0x3b, 0x35, 0xd8, 0x7c, 0x00, 0x00, 0x75, 0x70, 0x48, 0x8b, 0xee, 0x41, 0x8b, 0xc5, 0x49, 0x3b, 0xf5, 0x75, 0x0b, 0x49, 0x8b, 0xf5, 0xeb, 0x55, 0x48, 0x83, 0xc6, 0x08, 0xff, 0xc0, 0x4c, 0x39, 0x2e, 0x75, 0xf5, 0xff, 0xc0, 0xba, 0x08, 0x00, 0x00, 0x00, 0x48, 0x63, 0xc8, 0xe8, 0xa0, 0x87, 0xff, 0xff, 0x48, 0x8b, 0xf8, 0x48, 0x8b, 0xf0, 0x49, 0x3b, 0xc5, 0x75, 0x1f, 0xb9, 0x09, 0x00, 0x00, 0x00, 0xe8, 0x27, 0x6d, 0xff, 0xff, 0xeb, 0x13, 0x48, 0x8b, 0xc8, 0xe8, 0xcd, 0x02, 0x00, 0x00, 0x48, 0x89, 0x07, 0x48, 0x83, 0xc7, 0x08, 0x48, 0x83, 0xc5, 0x08, 0x48, 0x8b, 0x45, 0x00, 0x49, 0x3b, 0xc5, 0x75, 0xe4, 0x4c, 0x89, 0x2f, 0x48, 0x8b, 0x7c, 0x24, 0x70, 0x8b, 0x6c, 0x24, 0x78, 0x48, 0x89, 0x35, 0x5e, 0x7c, 0x00, 0x00, 0x49, 0x3b, 0xf5, 0x0f, 0x85, 0x89, 0x00, 0x00, 0x00, 0x41, 0x3b, 0xed, 0x74, 0x39, 0x4c, 0x39, 0x2d, 0x59, 0x7c, 0x00, 0x00, 0x74, 0x30, 0xe8, 0x66, 0xf7, 0xff, 0xff, 0x41, 0x3b, 0xc5, 0x74, 0x6a, 0xe8, 0x40, 0x86, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x9c, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0x5d, 0xc3, 0x45, 0x3b, 0xfd, 0x74, 0x04, 0x33, 0xc0, 0xeb, 0xdf, 0xb9, 0x08, 0x00, 0x00, 0x00, 0xe8, 0x94, 0x86, 0xff, 0xff, 0x48, 0x89, 0x05, 0xfd, 0x7b, 0x00, 0x00, 0x49, 0x3b, 0xc5, 0x74, 0xc6, 0x4c, 0x89, 0x28, 0x4c, 0x39, 0x2d, 0xfe, 0x7b, 0x00, 0x00, 0x75, 0x19, 0xb9, 0x08, 0x00, 0x00, 0x00, 0xe8, 0x72, 0x86, 0xff, 0xff, 0x48, 0x89, 0x05, 0xeb, 0x7b, 0x00, 0x00, 0x49, 0x3b, 0xc5, 0x74, 0xa4, 0x4c, 0x89, 0x28, 0x48, 0x8b, 0x35, 0xcc, 0x7b, 0x00, 0x00, 0x48, 0x8b, 0xee, 0x49, 0x3b, 0xf5, 0x74, 0x92, 0x48, 0x8b, 0x0e, 0x8b, 0xc7, 0x48, 0x8b, 0xfe, 0x41, 0x2b, 0xc4, 0x4c, 0x63, 0xe8, 0x48, 0x85, 0xc9, 0x74, 0x3f, 0x48, 0x8b, 0xd1, 0x4d, 0x8b, 0xc5, 0x49, 0x8b, 0xcc, 0xe8, 0xbf, 0xf6, 0xff, 0xff, 0x85, 0xc0, 0x75, 0x1a, 0x48, 0x8b, 0x07, 0x41, 0x80, 0x7c, 0x05, 0x00, 0x3d, 0x0f, 0x84, 0xa2, 0x00, 0x00, 0x00, 0x41, 0x38, 0x5c, 0x05, 0x00, 0x0f, 0x84, 0x97, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc7, 0x08, 0x48, 0x8b, 0x0f, 0x48, 0x85, 0xc9, 0x75, 0xc8, 0x48, 0x8b, 0x35, 0x72, 0x7b, 0x00, 0x00, 0x48, 0x2b, 0xfe, 0x48, 0xc1, 0xff, 0x03, 0xf7, 0xdf, 0x45, 0x33, 0xed, 0x41, 0x3b, 0xfd, 0x0f, 0x8c, 0x8c, 0x00, 0x00, 0x00, 0x4c, 0x39, 0x6d, 0x00, 0x0f, 0x84, 0x82, 0x00, 0x00, 0x00, 0x48, 0x63, 0xf7, 0x48, 0x8b, 0x4c, 0xf5, 0x00, 0xe8, 0xd6, 0x87, 0xff, 0xff, 0x45, 0x3b, 0xfd, 0x74, 0x66, 0x4c, 0x39, 0x6c, 0xf5, 0x00, 0x74, 0x1d, 0x48, 0x8d, 0x4c, 0xf5, 0x08, 0x48, 0x8b, 0x01, 0xff, 0xc7, 0x48, 0x83, 0xc1, 0x08, 0x48, 0x89, 0x44, 0xf5, 0x00, 0x48, 0xff, 0xc6, 0x4c, 0x39, 0x6c, 0xf5, 0x00, 0x75, 0xe8, 0x48, 0x63, 0xd7, 0x48, 0xb8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x48, 0x3b, 0xd0, 0x0f, 0x83, 0x93, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x00, 0x7b, 0x00, 0x00, 0x41, 0xb8, 0x08, 0x00, 0x00, 0x00, 0xe8, 0xfd, 0x86, 0xff, 0xff, 0x49, 0x3b, 0xc5, 0x74, 0x7c, 0xeb, 0x73, 0x48, 0x8b, 0x35, 0xe7, 0x7a, 0x00, 0x00, 0x48, 0x2b, 0xfe, 0x48, 0xc1, 0xff, 0x03, 0xe9, 0x72, 0xff, 0xff, 0xff, 0x4c, 0x89, 0x64, 0xf5, 0x00, 0x4d, 0x89, 0x2e, 0xeb, 0x5d, 0x45, 0x3b, 0xfd, 0x0f, 0x85, 0x00, 0x01, 0x00, 0x00, 0x41, 0x3b, 0xfd, 0x7d, 0x02, 0xf7, 0xdf, 0x8d, 0x47, 0x02, 0x3b, 0xc7, 0x0f, 0x8c, 0x84, 0xfe, 0xff, 0xff, 0x4c, 0x63, 0xc0, 0x48, 0xb8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x4c, 0x3b, 0xc0, 0x0f, 0x83, 0x6e, 0xfe, 0xff, 0xff, 0xba, 0x08, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xce, 0xe8, 0x9b, 0x86, 0xff, 0xff, 0x49, 0x3b, 0xc5, 0x0f, 0x84, 0x58, 0xfe, 0xff, 0xff, 0x48, 0x63, 0xcf, 0x4c, 0x89, 0x24, 0xc8, 0x4c, 0x89, 0x6c, 0xc8, 0x08, 0x4d, 0x89, 0x2e, 0x48, 0x89, 0x05, 0x74, 0x7a, 0x00, 0x00, 0x44, 0x39, 0x6c, 0x24, 0x78, 0x0f, 0x84, 0x8a, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xcc, 0xe8, 0x01, 0xb5, 0xff, 0xff, 0xba, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x48, 0x02, 0xe8, 0x4f, 0x85, 0xff, 0xff, 0x48, 0x8b, 0xf8, 0x49, 0x3b, 0xc5, 0x74, 0x6c, 0x49, 0x8b, 0xcc, 0xe8, 0xe3, 0xb4, 0xff, 0xff, 0x4d, 0x8b, 0xc4, 0x48, 0x8b, 0xcf, 0x48, 0x8d, 0x50, 0x02, 0xe8, 0x48, 0xd8, 0xff, 0xff, 0x41, 0x3b, 0xc5, 0x74, 0x14, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x4c, 0x89, 0x6c, 0x24, 0x20, 0xe8, 0x2b, 0x82, 0xff, 0xff, 0x48, 0x8b, 0xd7, 0x48, 0x8b, 0xcf, 0x49, 0x2b, 0xd4, 0x48, 0x03, 0x54, 0x24, 0x70, 0x44, 0x88, 0x2a, 0x48, 0xff, 0xc2, 0x45, 0x3b, 0xfd, 0x49, 0x0f, 0x45, 0xd5, 0xff, 0x15, 0xfa, 0x36, 0x00, 0x00, 0x41, 0x3b, 0xc5, 0x75, 0x0e, 0x83, 0xcb, 0xff, 0xe8, 0xf5, 0x83, 0xff, 0xff, 0xc7, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcf, 0xe8, 0x6f, 0x86, 0xff, 0xff, 0x45, 0x3b, 0xfd, 0x74, 0x0b, 0x49, 0x8b, 0xcc, 0xe8, 0x62, 0x86, 0xff, 0xff, 0x4d, 0x89, 0x2e, 0x8b, 0xc3, 0xe9, 0x99, 0xfd, 0xff, 0xff, 0x49, 0x8b, 0xcc, 0xe8, 0x50, 0x86, 0xff, 0xff, 0x4d, 0x89, 0x2e, 0xe9, 0xa6, 0xfd, 0xff, 0xff, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x30, 0x48, 0x8b, 0xd9, 0x48, 0x85, 0xc9, 0x74, 0x46, 0xe8, 0x3c, 0xb4, 0xff, 0xff, 0x48, 0x8b, 0xf0, 0x48, 0x8d, 0x48, 0x01, 0xe8, 0x1c, 0xb7, 0xff, 0xff, 0x48, 0x8b, 0xf8, 0x48, 0x85, 0xc0, 0x74, 0x2d, 0x48, 0x8d, 0x56, 0x01, 0x4c, 0x8b, 0xc3, 0x48, 0x8b, 0xc8, 0xe8, 0x8d, 0xd7, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x15, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x70, 0x81, 0xff, 0xff, 0x48, 0x8b, 0xc7, 0xeb, 0x02, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x74, 0x24, 0x48, 0x48, 0x83, 0xc4, 0x30, 0x5f, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x50, 0x48, 0x8b, 0xd9, 0x8b, 0xfa, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0x49, 0x8b, 0xd0, 0xe8, 0x27, 0x67, 0xff, 0xff, 0x33, 0xf6, 0x48, 0x3b, 0xde, 0x75, 0x44, 0xe8, 0x23, 0x83, 0xff, 0xff, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x48, 0x89, 0x74, 0x24, 0x20, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x39, 0x82, 0xff, 0xff, 0x40, 0x38, 0x74, 0x24, 0x48, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x33, 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x74, 0x24, 0x68, 0x48, 0x83, 0xc4, 0x50, 0x5f, 0xc3, 0x48, 0x8b, 0x54, 0x24, 0x38, 0x39, 0x72, 0x08, 0x75, 0x1f, 0x8b, 0xd7, 0x48, 0x8b, 0xcb, 0xe8, 0x80, 0x00, 0x00, 0x00, 0x40, 0x38, 0x74, 0x24, 0x48, 0x74, 0xd5, 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xeb, 0xc7, 0x0f, 0xb6, 0x0b, 0x66, 0x3b, 0xce, 0x74, 0x33, 0x0f, 0xb6, 0xc1, 0xf6, 0x44, 0x10, 0x1d, 0x04, 0x74, 0x1d, 0x48, 0xff, 0xc3, 0x40, 0x38, 0x33, 0x74, 0x98, 0x0f, 0xb6, 0x03, 0x0f, 0xb7, 0xc9, 0xc1, 0xe1, 0x08, 0x0b, 0xc8, 0x3b, 0xf9, 0x75, 0x0d, 0x48, 0x8d, 0x43, 0xff, 0xeb, 0xbc, 0x0f, 0xb7, 0xc1, 0x3b, 0xf8, 0x74, 0x05, 0x48, 0xff, 0xc3, 0xeb, 0xc5, 0x0f, 0xb7, 0xc1, 0x3b, 0xf8, 0x0f, 0x85, 0x6c, 0xff, 0xff, 0xff, 0x40, 0x38, 0x74, 0x24, 0x48, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0xc3, 0xe9, 0x66, 0xff, 0xff, 0xff, 0xcc, 0xcc, 0x45, 0x33, 0xc0, 0xe9, 0x00, 0xff, 0xff, 0xff, 0xeb, 0x07, 0x3a, 0xc2, 0x74, 0x0d, 0x48, 0xff, 0xc1, 0x8a, 0x01, 0x84, 0xc0, 0x75, 0xf3, 0x3a, 0xc2, 0x75, 0x04, 0x48, 0x8b, 0xc1, 0xc3, 0x33, 0xc0, 0xc3, 0xff, 0x25, 0x30, 0x33, 0x00, 0x00, 0xff, 0x25, 0x82, 0x33, 0x00, 0x00, 0xff, 0x25, 0x84, 0x33, 0x00, 0x00, 0x48, 0x83, 0xec, 0x38, 0x48, 0x85, 0xc9, 0x75, 0x26, 0xe8, 0x16, 0x82, 0xff, 0xff, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x2b, 0x81, 0xff, 0xff, 0x48, 0x83, 0xc8, 0xff, 0xeb, 0x1f, 0x80, 0x39, 0x00, 0x74, 0xd5, 0x48, 0x85, 0xd2, 0x74, 0xd0, 0x48, 0x8b, 0x02, 0x48, 0x85, 0xc0, 0x74, 0xc8, 0x80, 0x38, 0x00, 0x74, 0xc3, 0x45, 0x33, 0xc0, 0xe8, 0x82, 0x12, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0x48, 0x89, 0x54, 0x24, 0x10, 0x89, 0x4c, 0x24, 0x08, 0x53, 0x55, 0x56, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x58, 0x41, 0xbc, 0xfe, 0xff, 0xff, 0xff, 0x48, 0x63, 0xc1, 0x41, 0x8b, 0xd8, 0x44, 0x89, 0x64, 0x24, 0x34, 0x89, 0x5c, 0x24, 0x38, 0x41, 0x3b, 0xc4, 0x75, 0x19, 0xe8, 0xb8, 0x81, 0xff, 0xff, 0x33, 0xff, 0x89, 0x38, 0xe8, 0x8f, 0x81, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe9, 0x1f, 0x07, 0x00, 0x00, 0x33, 0xff, 0x3b, 0xc7, 0x0f, 0x8c, 0xef, 0x06, 0x00, 0x00, 0x3b, 0x05, 0x74, 0x85, 0x00, 0x00, 0x0f, 0x83, 0xe3, 0x06, 0x00, 0x00, 0x48, 0x8b, 0xf0, 0x4c, 0x8b, 0xf0, 0x4c, 0x8d, 0x0d, 0xf9, 0x41, 0xff, 0xff, 0x49, 0xc1, 0xfe, 0x05, 0x83, 0xe6, 0x1f, 0x4b, 0x8b, 0x8c, 0xf1, 0x80, 0x43, 0x01, 0x00, 0x48, 0x6b, 0xf6, 0x58, 0x8a, 0x44, 0x31, 0x08, 0xa8, 0x01, 0x0f, 0x84, 0xb7, 0x06, 0x00, 0x00, 0x81, 0xfb, 0xff, 0xff, 0xff, 0x7f, 0x76, 0x17, 0xe8, 0x55, 0x81, 0xff, 0xff, 0x89, 0x38, 0xe8, 0x2e, 0x81, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe9, 0xaa, 0x06, 0x00, 0x00, 0x8b, 0xef, 0x3b, 0xdf, 0x0f, 0x84, 0x8a, 0x06, 0x00, 0x00, 0xa8, 0x02, 0x0f, 0x85, 0x82, 0x06, 0x00, 0x00, 0x48, 0x3b, 0xd7, 0x74, 0xd2, 0x44, 0x8a, 0x7c, 0x31, 0x38, 0x41, 0xb8, 0x04, 0x00, 0x00, 0x00, 0x45, 0x02, 0xff, 0x41, 0xd0, 0xff, 0x41, 0x0f, 0xbe, 0xcf, 0x83, 0xe9, 0x01, 0x74, 0x15, 0x83, 0xe9, 0x01, 0x75, 0x0b, 0x8b, 0xc3, 0xf7, 0xd0, 0xa8, 0x01, 0x74, 0xab, 0x83, 0xe3, 0xfe, 0x4c, 0x8b, 0xea, 0xeb, 0x64, 0x8b, 0xc3, 0xf7, 0xd0, 0xa8, 0x01, 0x74, 0x9b, 0xd1, 0xeb, 0x41, 0x3b, 0xd8, 0x41, 0x0f, 0x42, 0xd8, 0x8b, 0xcb, 0xe8, 0x4d, 0x81, 0xff, 0xff, 0x4c, 0x8b, 0xe8, 0x48, 0x3b, 0xc7, 0x75, 0x1b, 0xe8, 0xb8, 0x80, 0xff, 0xff, 0xc7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xe8, 0xcd, 0x80, 0xff, 0xff, 0xc7, 0x00, 0x08, 0x00, 0x00, 0x00, 0xe9, 0x3d, 0x06, 0x00, 0x00, 0x8b, 0x8c, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x33, 0xd2, 0x44, 0x8d, 0x42, 0x01, 0xe8, 0xb0, 0xd6, 0xff, 0xff, 0x4c, 0x8d, 0x0d, 0x21, 0x41, 0xff, 0xff, 0x4c, 0x8b, 0xd8, 0x4b, 0x8b, 0x84, 0xf1, 0x80, 0x43, 0x01, 0x00, 0x4c, 0x89, 0x5c, 0x30, 0x40, 0x4b, 0x8b, 0x84, 0xf1, 0x80, 0x43, 0x01, 0x00, 0x49, 0x8b, 0xd5, 0x41, 0xb8, 0x0a, 0x00, 0x00, 0x00, 0xf6, 0x44, 0x30, 0x08, 0x48, 0x0f, 0x84, 0x9c, 0x00, 0x00, 0x00, 0x8a, 0x4c, 0x30, 0x09, 0x41, 0x3a, 0xc8, 0x0f, 0x84, 0x8f, 0x00, 0x00, 0x00, 0x3b, 0xdf, 0x0f, 0x84, 0x87, 0x00, 0x00, 0x00, 0x41, 0x88, 0x4d, 0x00, 0x4b, 0x8b, 0x84, 0xf1, 0x80, 0x43, 0x01, 0x00, 0x41, 0x83, 0xca, 0xff, 0x41, 0x03, 0xda, 0x49, 0x8d, 0x55, 0x01, 0x41, 0x8d, 0x68, 0xf7, 0x44, 0x88, 0x44, 0x30, 0x09, 0x44, 0x3a, 0xff, 0x74, 0x62, 0x4b, 0x8b, 0x84, 0xf1, 0x80, 0x43, 0x01, 0x00, 0x8a, 0x4c, 0x30, 0x39, 0x41, 0x3a, 0xc8, 0x74, 0x51, 0x3b, 0xdf, 0x74, 0x4d, 0x88, 0x0a, 0x4b, 0x8b, 0x84, 0xf1, 0x80, 0x43, 0x01, 0x00, 0x41, 0x03, 0xda, 0x48, 0xff, 0xc2, 0x41, 0x8d, 0x68, 0xf8, 0x44, 0x88, 0x44, 0x30, 0x39, 0x41, 0x80, 0xff, 0x01, 0x75, 0x2e, 0x4b, 0x8b, 0x84, 0xf1, 0x80, 0x43, 0x01, 0x00, 0x8a, 0x4c, 0x30, 0x3a, 0x41, 0x3a, 0xc8, 0x74, 0x1d, 0x3b, 0xdf, 0x74, 0x19, 0x88, 0x0a, 0x4b, 0x8b, 0x84, 0xf1, 0x80, 0x43, 0x01, 0x00, 0x48, 0xff, 0xc2, 0x41, 0x8d, 0x68, 0xf9, 0x41, 0x03, 0xda, 0x44, 0x88, 0x44, 0x30, 0x3a, 0x4b, 0x8b, 0x8c, 0xf1, 0x80, 0x43, 0x01, 0x00, 0x4c, 0x8d, 0x4c, 0x24, 0x30, 0x44, 0x8b, 0xc3, 0x48, 0x8b, 0x0c, 0x31, 0x48, 0x89, 0x7c, 0x24, 0x20, 0xff, 0x15, 0xa2, 0x32, 0x00, 0x00, 0x3b, 0xc7, 0x0f, 0x84, 0xcf, 0x04, 0x00, 0x00, 0x48, 0x63, 0x54, 0x24, 0x30, 0x3b, 0xd7, 0x0f, 0x8c, 0xc2, 0x04, 0x00, 0x00, 0x8b, 0xc3, 0x48, 0x3b, 0xd0, 0x0f, 0x87, 0xb7, 0x04, 0x00, 0x00, 0x4c, 0x8d, 0x05, 0x13, 0x40, 0xff, 0xff, 0x03, 0xea, 0x4b, 0x8b, 0x84, 0xf0, 0x80, 0x43, 0x01, 0x00, 0xf6, 0x44, 0x30, 0x08, 0x80, 0x0f, 0x84, 0x79, 0x04, 0x00, 0x00, 0x41, 0x80, 0xff, 0x02, 0x0f, 0x84, 0xb8, 0x02, 0x00, 0x00, 0x3b, 0xd7, 0x74, 0x0e, 0x41, 0x80, 0x7d, 0x00, 0x0a, 0x75, 0x07, 0x80, 0x4c, 0x30, 0x08, 0x04, 0xeb, 0x05, 0x80, 0x64, 0x30, 0x08, 0xfb, 0x48, 0x63, 0xc5, 0x49, 0x8b, 0xdd, 0x4d, 0x8b, 0xe5, 0x49, 0x03, 0xc5, 0x48, 0x89, 0x44, 0x24, 0x40, 0x4c, 0x3b, 0xe8, 0x0f, 0x83, 0x3a, 0x01, 0x00, 0x00, 0xbd, 0x0d, 0x00, 0x00, 0x00, 0x41, 0x8a, 0x04, 0x24, 0x3c, 0x1a, 0x0f, 0x84, 0x0a, 0x01, 0x00, 0x00, 0x40, 0x3a, 0xc5, 0x74, 0x0d, 0x88, 0x03, 0x48, 0xff, 0xc3, 0x49, 0xff, 0xc4, 0xe9, 0xeb, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x48, 0xff, 0xc8, 0x4c, 0x3b, 0xe0, 0x73, 0x1b, 0x49, 0x8d, 0x44, 0x24, 0x01, 0x80, 0x38, 0x0a, 0x75, 0x09, 0x49, 0x83, 0xc4, 0x02, 0xe9, 0x90, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xe0, 0xe9, 0xbd, 0x00, 0x00, 0x00, 0x4b, 0x8b, 0x8c, 0xf0, 0x80, 0x43, 0x01, 0x00, 0x4c, 0x8d, 0x4c, 0x24, 0x30, 0x48, 0x8d, 0x94, 0x24, 0xb0, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0c, 0x31, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x49, 0xff, 0xc4, 0x48, 0x89, 0x7c, 0x24, 0x20, 0xff, 0x15, 0xb3, 0x31, 0x00, 0x00, 0x3b, 0xc7, 0x75, 0x0a, 0xff, 0x15, 0x19, 0x30, 0x00, 0x00, 0x3b, 0xc7, 0x75, 0x7b, 0x39, 0x7c, 0x24, 0x30, 0x74, 0x75, 0x4c, 0x8d, 0x05, 0x30, 0x3f, 0xff, 0xff, 0x4b, 0x8b, 0x84, 0xf0, 0x80, 0x43, 0x01, 0x00, 0xf6, 0x44, 0x30, 0x08, 0x48, 0x74, 0x22, 0x80, 0xbc, 0x24, 0xb0, 0x00, 0x00, 0x00, 0x0a, 0x74, 0x27, 0x40, 0x88, 0x2b, 0x4b, 0x8b, 0x8c, 0xf0, 0x80, 0x43, 0x01, 0x00, 0x8a, 0x84, 0x24, 0xb0, 0x00, 0x00, 0x00, 0x88, 0x44, 0x31, 0x09, 0xeb, 0x47, 0x49, 0x3b, 0xdd, 0x75, 0x0f, 0x80, 0xbc, 0x24, 0xb0, 0x00, 0x00, 0x00, 0x0a, 0x75, 0x05, 0xc6, 0x03, 0x0a, 0xeb, 0x33, 0x8b, 0x8c, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x83, 0xca, 0xff, 0xe8, 0x5d, 0xd4, 0xff, 0xff, 0x80, 0xbc, 0x24, 0xb0, 0x00, 0x00, 0x00, 0x0a, 0x4c, 0x8d, 0x05, 0xc6, 0x3e, 0xff, 0xff, 0x74, 0x0f, 0xeb, 0x07, 0x4c, 0x8d, 0x05, 0xbb, 0x3e, 0xff, 0xff, 0x40, 0x88, 0x2b, 0x48, 0xff, 0xc3, 0x4c, 0x3b, 0x64, 0x24, 0x40, 0x0f, 0x82, 0xec, 0xfe, 0xff, 0xff, 0xeb, 0x1f, 0x4b, 0x8b, 0x84, 0xf0, 0x80, 0x43, 0x01, 0x00, 0xf6, 0x44, 0x30, 0x08, 0x40, 0x75, 0x07, 0x80, 0x4c, 0x30, 0x08, 0x02, 0xeb, 0x09, 0x41, 0x8a, 0x04, 0x24, 0x88, 0x03, 0x48, 0xff, 0xc3, 0x8b, 0xeb, 0x41, 0x2b, 0xed, 0x41, 0x80, 0xff, 0x01, 0x0f, 0x85, 0xf0, 0x02, 0x00, 0x00, 0x3b, 0xef, 0x0f, 0x84, 0xe8, 0x02, 0x00, 0x00, 0x41, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x49, 0x2b, 0xdf, 0xf6, 0x03, 0x80, 0x75, 0x08, 0x49, 0x03, 0xdf, 0xe9, 0xb2, 0x00, 0x00, 0x00, 0x41, 0x8b, 0xd7, 0xeb, 0x10, 0x83, 0xfa, 0x04, 0x7f, 0x18, 0x49, 0x3b, 0xdd, 0x72, 0x13, 0x49, 0x2b, 0xdf, 0x41, 0x03, 0xd7, 0x0f, 0xb6, 0x03, 0x42, 0x38, 0xbc, 0x00, 0x10, 0x34, 0x01, 0x00, 0x74, 0xe3, 0x0f, 0xb6, 0x0b, 0x42, 0x0f, 0xbe, 0x84, 0x01, 0x10, 0x34, 0x01, 0x00, 0x3b, 0xc7, 0x75, 0x14, 0xe8, 0x8d, 0x7d, 0xff, 0xff, 0xc7, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x41, 0x83, 0xcc, 0xff, 0xe9, 0x91, 0x02, 0x00, 0x00, 0xff, 0xc0, 0x3b, 0xc2, 0x75, 0x08, 0x48, 0x63, 0xc2, 0x48, 0x03, 0xd8, 0xeb, 0x5e, 0x4b, 0x8b, 0x84, 0xf0, 0x80, 0x43, 0x01, 0x00, 0xf6, 0x44, 0x30, 0x08, 0x48, 0x74, 0x3b, 0x49, 0x03, 0xdf, 0x83, 0xfa, 0x02, 0x88, 0x4c, 0x30, 0x09, 0x7c, 0x11, 0x8a, 0x03, 0x4b, 0x8b, 0x8c, 0xf0, 0x80, 0x43, 0x01, 0x00, 0x49, 0x03, 0xdf, 0x88, 0x44, 0x31, 0x39, 0x83, 0xfa, 0x03, 0x75, 0x11, 0x8a, 0x03, 0x4b, 0x8b, 0x8c, 0xf0, 0x80, 0x43, 0x01, 0x00, 0x49, 0x03, 0xdf, 0x88, 0x44, 0x31, 0x3a, 0x48, 0x63, 0xc2, 0x48, 0x2b, 0xd8, 0xeb, 0x14, 0x8b, 0x8c, 0x24, 0xa0, 0x00, 0x00, 0x00, 0xf7, 0xda, 0x45, 0x8b, 0xc7, 0x48, 0x63, 0xd2, 0xe8, 0x32, 0xd3, 0xff, 0xff, 0x8b, 0x44, 0x24, 0x38, 0x4c, 0x8b, 0xbc, 0x24, 0xa8, 0x00, 0x00, 0x00, 0x41, 0x2b, 0xdd, 0xd1, 0xe8, 0x44, 0x8b, 0xcb, 0x4d, 0x8b, 0xc5, 0x89, 0x44, 0x24, 0x28, 0x33, 0xd2, 0xb9, 0xe9, 0xfd, 0x00, 0x00, 0x4c, 0x89, 0x7c, 0x24, 0x20, 0xff, 0x15, 0x65, 0x2f, 0x00, 0x00, 0x8b, 0xe8, 0x3b, 0xc7, 0x75, 0x16, 0xff, 0x15, 0x49, 0x2e, 0x00, 0x00, 0x8b, 0xc8, 0xe8, 0x12, 0x7d, 0xff, 0xff, 0x41, 0x83, 0xcc, 0xff, 0xe9, 0xe4, 0x01, 0x00, 0x00, 0x44, 0x8b, 0x64, 0x24, 0x34, 0x3b, 0xc3, 0x48, 0x8d, 0x05, 0x53, 0x3d, 0xff, 0xff, 0x4a, 0x8b, 0x84, 0xf0, 0x80, 0x43, 0x01, 0x00, 0x40, 0x0f, 0x95, 0xc7, 0x03, 0xed, 0x89, 0x7c, 0x30, 0x48, 0xe9, 0xbf, 0x01, 0x00, 0x00, 0x3b, 0xd7, 0xba, 0x0a, 0x00, 0x00, 0x00, 0x74, 0x0e, 0x66, 0x41, 0x39, 0x55, 0x00, 0x75, 0x07, 0x80, 0x4c, 0x30, 0x08, 0x04, 0xeb, 0x05, 0x80, 0x64, 0x30, 0x08, 0xfb, 0x48, 0x63, 0xc5, 0x49, 0x8b, 0xdd, 0x4d, 0x8b, 0xe5, 0x4e, 0x8d, 0x3c, 0x28, 0x4d, 0x3b, 0xef, 0x0f, 0x83, 0x7b, 0x01, 0x00, 0x00, 0xbd, 0x0d, 0x00, 0x00, 0x00, 0x41, 0x0f, 0xb7, 0x04, 0x24, 0x66, 0x83, 0xf8, 0x1a, 0x0f, 0x84, 0x45, 0x01, 0x00, 0x00, 0x66, 0x3b, 0xc5, 0x74, 0x10, 0x66, 0x89, 0x03, 0x48, 0x83, 0xc3, 0x02, 0x49, 0x83, 0xc4, 0x02, 0xe9, 0x25, 0x01, 0x00, 0x00, 0x49, 0x8d, 0x47, 0xfe, 0x4c, 0x3b, 0xe0, 0x73, 0x1b, 0x49, 0x8d, 0x44, 0x24, 0x02, 0x66, 0x39, 0x10, 0x75, 0x09, 0x49, 0x83, 0xc4, 0x04, 0xe9, 0xc2, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xe0, 0xe9, 0xfa, 0x00, 0x00, 0x00, 0x4b, 0x8b, 0x8c, 0xf0, 0x80, 0x43, 0x01, 0x00, 0x4c, 0x8d, 0x4c, 0x24, 0x30, 0x48, 0x8d, 0x94, 0x24, 0xb8, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0c, 0x31, 0x41, 0xb8, 0x02, 0x00, 0x00, 0x00, 0x49, 0x83, 0xc4, 0x02, 0x48, 0x89, 0x7c, 0x24, 0x20, 0xff, 0x15, 0xf7, 0x2e, 0x00, 0x00, 0x3b, 0xc7, 0x75, 0x0e, 0xff, 0x15, 0x5d, 0x2d, 0x00, 0x00, 0x3b, 0xc7, 0x0f, 0x85, 0xae, 0x00, 0x00, 0x00, 0x39, 0x7c, 0x24, 0x30, 0x0f, 0x84, 0xa4, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x05, 0x6c, 0x3c, 0xff, 0xff, 0x4b, 0x8b, 0x84, 0xf0, 0x80, 0x43, 0x01, 0x00, 0xf6, 0x44, 0x30, 0x08, 0x48, 0x74, 0x46, 0xba, 0x0a, 0x00, 0x00, 0x00, 0x66, 0x39, 0x94, 0x24, 0xb8, 0x00, 0x00, 0x00, 0x74, 0x4b, 0x66, 0x89, 0x2b, 0x8a, 0x84, 0x24, 0xb8, 0x00, 0x00, 0x00, 0x4b, 0x8b, 0x8c, 0xf0, 0x80, 0x43, 0x01, 0x00, 0x88, 0x44, 0x31, 0x09, 0x8a, 0x84, 0x24, 0xb9, 0x00, 0x00, 0x00, 0x4b, 0x8b, 0x8c, 0xf0, 0x80, 0x43, 0x01, 0x00, 0x88, 0x44, 0x31, 0x39, 0x4b, 0x8b, 0x84, 0xf0, 0x80, 0x43, 0x01, 0x00, 0x88, 0x54, 0x30, 0x3a, 0xeb, 0x57, 0x49, 0x3b, 0xdd, 0x75, 0x14, 0xba, 0x0a, 0x00, 0x00, 0x00, 0x66, 0x39, 0x94, 0x24, 0xb8, 0x00, 0x00, 0x00, 0x75, 0x05, 0x66, 0x89, 0x13, 0xeb, 0x3e, 0x8b, 0x8c, 0x24, 0xa0, 0x00, 0x00, 0x00, 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, 0x44, 0x8d, 0x42, 0x03, 0xe8, 0x6f, 0xd1, 0xff, 0xff, 0xba, 0x0a, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x05, 0xdb, 0x3b, 0xff, 0xff, 0x66, 0x39, 0x94, 0x24, 0xb8, 0x00, 0x00, 0x00, 0x74, 0x15, 0xeb, 0x0c, 0xba, 0x0a, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x05, 0xc3, 0x3b, 0xff, 0xff, 0x66, 0x89, 0x2b, 0x48, 0x83, 0xc3, 0x02, 0x4d, 0x3b, 0xe7, 0x0f, 0x82, 0xae, 0xfe, 0xff, 0xff, 0xeb, 0x22, 0x4b, 0x8b, 0x84, 0xf0, 0x80, 0x43, 0x01, 0x00, 0xf6, 0x44, 0x30, 0x08, 0x40, 0x75, 0x07, 0x80, 0x4c, 0x30, 0x08, 0x02, 0xeb, 0x0c, 0x41, 0x0f, 0xb7, 0x04, 0x24, 0x66, 0x89, 0x03, 0x48, 0x83, 0xc3, 0x02, 0x8b, 0xeb, 0x41, 0x2b, 0xed, 0x44, 0x8b, 0x64, 0x24, 0x34, 0x4c, 0x8b, 0xbc, 0x24, 0xa8, 0x00, 0x00, 0x00, 0x4d, 0x3b, 0xef, 0x74, 0x08, 0x49, 0x8b, 0xcd, 0xe8, 0x60, 0x7d, 0xff, 0xff, 0x41, 0x83, 0xfc, 0xfe, 0x44, 0x0f, 0x44, 0xe5, 0x41, 0x8b, 0xc4, 0xeb, 0x69, 0xff, 0x15, 0x35, 0x2c, 0x00, 0x00, 0x83, 0xf8, 0x05, 0x75, 0x1b, 0xe8, 0xbb, 0x7a, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe8, 0xd0, 0x7a, 0xff, 0xff, 0xc7, 0x00, 0x05, 0x00, 0x00, 0x00, 0xe9, 0x1e, 0xfd, 0xff, 0xff, 0x83, 0xf8, 0x6d, 0x75, 0x05, 0x44, 0x8b, 0xe7, 0xeb, 0xae, 0x8b, 0xc8, 0xe8, 0xd4, 0x7a, 0xff, 0xff, 0xe9, 0x08, 0xfd, 0xff, 0xff, 0x33, 0xc0, 0xeb, 0x29, 0xe8, 0xa6, 0x7a, 0xff, 0xff, 0x89, 0x38, 0xe8, 0x7f, 0x7a, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x48, 0x89, 0x7c, 0x24, 0x20, 0xe8, 0x95, 0x79, 0xff, 0xff, 0x83, 0xc8, 0xff, 0x48, 0x83, 0xc4, 0x58, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0x5d, 0x5b, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x89, 0x4c, 0x24, 0x08, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x30, 0x41, 0x8b, 0xf0, 0x4c, 0x8b, 0xea, 0x48, 0x63, 0xf9, 0x83, 0xff, 0xfe, 0x75, 0x1c, 0xe8, 0x42, 0x7a, 0xff, 0xff, 0x33, 0xdb, 0x89, 0x18, 0xe8, 0x19, 0x7a, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x83, 0xc8, 0xff, 0xe9, 0x15, 0x01, 0x00, 0x00, 0x33, 0xdb, 0x3b, 0xfb, 0x0f, 0x8c, 0xe2, 0x00, 0x00, 0x00, 0x3b, 0x3d, 0xfb, 0x7d, 0x00, 0x00, 0x0f, 0x83, 0xd6, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xe7, 0x4c, 0x8b, 0xf7, 0x49, 0xc1, 0xfe, 0x05, 0x4c, 0x8d, 0x3d, 0xfc, 0x7d, 0x00, 0x00, 0x41, 0x83, 0xe4, 0x1f, 0x4d, 0x6b, 0xe4, 0x58, 0x4b, 0x8b, 0x04, 0xf7, 0x42, 0x0f, 0xbe, 0x4c, 0x20, 0x08, 0x83, 0xe1, 0x01, 0x75, 0x2e, 0xe8, 0xe8, 0x79, 0xff, 0xff, 0x89, 0x18, 0xe8, 0xc1, 0x79, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0xd7, 0x78, 0xff, 0xff, 0x83, 0xc8, 0xff, 0xe9, 0xa9, 0x00, 0x00, 0x00, 0x8b, 0xc3, 0x41, 0x81, 0xf8, 0xff, 0xff, 0xff, 0x7f, 0x0f, 0x96, 0xc0, 0x3b, 0xc3, 0x75, 0x2b, 0xe8, 0xaa, 0x79, 0xff, 0xff, 0x89, 0x18, 0xe8, 0x83, 0x79, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x99, 0x78, 0xff, 0xff, 0x83, 0xc8, 0xff, 0xeb, 0x6e, 0x8b, 0xcf, 0xe8, 0x15, 0xde, 0xff, 0xff, 0x90, 0x4b, 0x8b, 0x04, 0xf7, 0x42, 0xf6, 0x44, 0x20, 0x08, 0x01, 0x74, 0x11, 0x44, 0x8b, 0xc6, 0x49, 0x8b, 0xd5, 0x8b, 0xcf, 0xe8, 0x73, 0xf7, 0xff, 0xff, 0x8b, 0xd8, 0xeb, 0x15, 0xe8, 0x3a, 0x79, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe8, 0x4f, 0x79, 0xff, 0xff, 0x89, 0x18, 0x83, 0xcb, 0xff, 0x8b, 0xcf, 0xe8, 0x83, 0xde, 0xff, 0xff, 0x8b, 0xc3, 0xeb, 0x29, 0xe8, 0x3a, 0x79, 0xff, 0xff, 0x89, 0x18, 0xe8, 0x13, 0x79, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x29, 0x78, 0xff, 0xff, 0x83, 0xc8, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x68, 0x48, 0x8b, 0x74, 0x24, 0x70, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x10, 0x4c, 0x89, 0x40, 0x18, 0x48, 0x89, 0x48, 0x08, 0x55, 0x56, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x81, 0xec, 0x80, 0x00, 0x00, 0x00, 0x33, 0xff, 0x41, 0xb4, 0x80, 0x41, 0x8b, 0xf1, 0x48, 0x8b, 0xda, 0xc7, 0x40, 0xa8, 0x18, 0x00, 0x00, 0x00, 0x8d, 0x6f, 0x01, 0x89, 0x78, 0x9c, 0x40, 0x88, 0xbc, 0x24, 0xd8, 0x00, 0x00, 0x00, 0x48, 0x89, 0x78, 0xb0, 0x45, 0x84, 0xcc, 0x74, 0x08, 0x89, 0x78, 0xb8, 0x41, 0xb6, 0x10, 0xeb, 0x07, 0x89, 0x6c, 0x24, 0x70, 0x44, 0x8a, 0xf7, 0x48, 0x8d, 0x4c, 0x24, 0x54, 0xe8, 0xa9, 0x0e, 0x00, 0x00, 0x3b, 0xc7, 0x74, 0x14, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x48, 0x89, 0x7c, 0x24, 0x20, 0xe8, 0x69, 0x76, 0xff, 0xff, 0x0f, 0xba, 0xe6, 0x0f, 0x72, 0x15, 0xf7, 0xc6, 0x00, 0x40, 0x07, 0x00, 0x75, 0x0a, 0x81, 0x7c, 0x24, 0x54, 0x00, 0x80, 0x00, 0x00, 0x74, 0x03, 0x45, 0x0a, 0xf4, 0x8b, 0xce, 0x41, 0xb8, 0x03, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0xc0, 0x41, 0x23, 0xc8, 0xba, 0x00, 0x00, 0x00, 0x80, 0x3b, 0xcf, 0x74, 0x54, 0x2b, 0xcd, 0x74, 0x3a, 0x3b, 0xcd, 0x74, 0x31, 0xe8, 0x40, 0x78, 0xff, 0xff, 0x89, 0x38, 0x83, 0x0b, 0xff, 0xe8, 0x16, 0x78, 0xff, 0xff, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x89, 0x18, 0xe8, 0x2b, 0x77, 0xff, 0xff, 0x8b, 0xc3, 0xe9, 0xfb, 0x06, 0x00, 0x00, 0x44, 0x8b, 0xf8, 0xeb, 0x19, 0x40, 0xf6, 0xc6, 0x08, 0x74, 0x08, 0xf7, 0xc6, 0x00, 0x00, 0x07, 0x00, 0x75, 0xed, 0x41, 0xbf, 0x00, 0x00, 0x00, 0x40, 0xeb, 0x03, 0x44, 0x8b, 0xfa, 0x8b, 0x8c, 0x24, 0xe0, 0x00, 0x00, 0x00, 0x41, 0xbc, 0x02, 0x00, 0x00, 0x00, 0x83, 0xe9, 0x10, 0x74, 0x2c, 0x83, 0xe9, 0x10, 0x74, 0x23, 0x83, 0xe9, 0x10, 0x74, 0x19, 0x83, 0xe9, 0x10, 0x74, 0x0f, 0x83, 0xf9, 0x40, 0x75, 0x8b, 0x44, 0x3b, 0xfa, 0x8b, 0xcf, 0x0f, 0x94, 0xc1, 0xeb, 0x10, 0x41, 0x8b, 0xc8, 0xeb, 0x0b, 0x41, 0x8b, 0xcc, 0xeb, 0x06, 0x8b, 0xcd, 0xeb, 0x02, 0x8b, 0xcf, 0x8b, 0xc6, 0xba, 0x00, 0x07, 0x00, 0x00, 0x89, 0x4c, 0x24, 0x48, 0x23, 0xc2, 0x74, 0x46, 0x3d, 0x00, 0x01, 0x00, 0x00, 0x74, 0x38, 0x3d, 0x00, 0x02, 0x00, 0x00, 0x74, 0x2a, 0x3d, 0x00, 0x03, 0x00, 0x00, 0x74, 0x1e, 0x3d, 0x00, 0x04, 0x00, 0x00, 0x74, 0x2a, 0x3d, 0x00, 0x05, 0x00, 0x00, 0x74, 0x26, 0x3d, 0x00, 0x06, 0x00, 0x00, 0x74, 0x0e, 0x3b, 0xc2, 0x74, 0x1b, 0xe9, 0x2f, 0xff, 0xff, 0xff, 0x41, 0x8b, 0xec, 0xeb, 0x11, 0xbd, 0x05, 0x00, 0x00, 0x00, 0xeb, 0x0a, 0xbd, 0x04, 0x00, 0x00, 0x00, 0xeb, 0x03, 0x41, 0x8b, 0xe8, 0x0f, 0xba, 0xe6, 0x08, 0x41, 0xbd, 0x80, 0x00, 0x00, 0x00, 0x44, 0x89, 0x6c, 0x24, 0x50, 0x73, 0x1e, 0x8a, 0x05, 0x07, 0x6d, 0x00, 0x00, 0xf6, 0xd0, 0x22, 0x84, 0x24, 0xe8, 0x00, 0x00, 0x00, 0xa8, 0x80, 0x41, 0x8d, 0x45, 0x81, 0x44, 0x0f, 0x44, 0xe8, 0x44, 0x89, 0x6c, 0x24, 0x50, 0x40, 0xf6, 0xc6, 0x40, 0x74, 0x16, 0x41, 0x0f, 0xba, 0xed, 0x1a, 0x41, 0x0f, 0xba, 0xef, 0x10, 0x83, 0xc9, 0x04, 0x44, 0x89, 0x6c, 0x24, 0x50, 0x89, 0x4c, 0x24, 0x48, 0x0f, 0xba, 0xe6, 0x0c, 0x73, 0x0a, 0x41, 0x0f, 0xba, 0xed, 0x08, 0x44, 0x89, 0x6c, 0x24, 0x50, 0x40, 0xf6, 0xc6, 0x20, 0x74, 0x07, 0x41, 0x0f, 0xba, 0xed, 0x1b, 0xeb, 0x0b, 0x40, 0xf6, 0xc6, 0x10, 0x74, 0x0a, 0x41, 0x0f, 0xba, 0xed, 0x1c, 0x44, 0x89, 0x6c, 0x24, 0x50, 0xe8, 0x49, 0xdc, 0xff, 0xff, 0x89, 0x03, 0x83, 0xf8, 0xff, 0x75, 0x21, 0xe8, 0xd5, 0x76, 0xff, 0xff, 0x89, 0x38, 0x83, 0x0b, 0xff, 0xe8, 0xab, 0x76, 0xff, 0xff, 0xc7, 0x00, 0x18, 0x00, 0x00, 0x00, 0xe8, 0xa0, 0x76, 0xff, 0xff, 0x8b, 0x00, 0xe9, 0xa0, 0x05, 0x00, 0x00, 0x48, 0x8b, 0x84, 0x24, 0xc0, 0x00, 0x00, 0x00, 0x44, 0x8b, 0x44, 0x24, 0x48, 0x48, 0x8b, 0x8c, 0x24, 0xd0, 0x00, 0x00, 0x00, 0x48, 0x89, 0x7c, 0x24, 0x30, 0x4c, 0x8d, 0x4c, 0x24, 0x60, 0x41, 0x8b, 0xd7, 0x44, 0x89, 0x6c, 0x24, 0x28, 0xc7, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89, 0x6c, 0x24, 0x20, 0xff, 0x15, 0x42, 0x29, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x58, 0x48, 0x83, 0xf8, 0xff, 0x0f, 0x85, 0x8c, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00, 0xc0, 0x41, 0x8b, 0xc7, 0x23, 0xc1, 0x3b, 0xc1, 0x75, 0x43, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x40, 0x84, 0xf0, 0x74, 0x39, 0x44, 0x8b, 0x44, 0x24, 0x48, 0x48, 0x8b, 0x8c, 0x24, 0xd0, 0x00, 0x00, 0x00, 0x48, 0x89, 0x7c, 0x24, 0x30, 0x41, 0x0f, 0xba, 0xf7, 0x1f, 0x4c, 0x8d, 0x4c, 0x24, 0x60, 0x44, 0x89, 0x6c, 0x24, 0x28, 0x41, 0x8b, 0xd7, 0x89, 0x6c, 0x24, 0x20, 0xff, 0x15, 0xed, 0x28, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x58, 0x48, 0x83, 0xf8, 0xff, 0x75, 0x3b, 0x48, 0x63, 0x0b, 0x4c, 0x8d, 0x2d, 0x10, 0x7a, 0x00, 0x00, 0x48, 0x8b, 0xc1, 0x83, 0xe1, 0x1f, 0x48, 0xc1, 0xf8, 0x05, 0x48, 0x6b, 0xc9, 0x58, 0x49, 0x8b, 0x44, 0xc5, 0x00, 0x80, 0x64, 0x08, 0x08, 0xfe, 0xff, 0x15, 0x4a, 0x27, 0x00, 0x00, 0x8b, 0xc8, 0xe8, 0x13, 0x76, 0xff, 0xff, 0xe8, 0xce, 0x75, 0xff, 0xff, 0x8b, 0x38, 0xe9, 0xcc, 0x04, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xff, 0x15, 0xd6, 0x26, 0x00, 0x00, 0x3b, 0xc7, 0x75, 0x4d, 0x48, 0x63, 0x0b, 0x4c, 0x8d, 0x2d, 0xc8, 0x79, 0x00, 0x00, 0x48, 0x8b, 0xc1, 0x83, 0xe1, 0x1f, 0x48, 0xc1, 0xf8, 0x05, 0x48, 0x6b, 0xc9, 0x58, 0x49, 0x8b, 0x44, 0xc5, 0x00, 0x80, 0x64, 0x08, 0x08, 0xfe, 0xff, 0x15, 0x02, 0x27, 0x00, 0x00, 0x8b, 0xc8, 0x8b, 0xd8, 0xe8, 0xc9, 0x75, 0xff, 0xff, 0x48, 0x8b, 0x4c, 0x24, 0x58, 0xff, 0x15, 0x36, 0x28, 0x00, 0x00, 0x3b, 0xdf, 0x75, 0xa7, 0xe8, 0x75, 0x75, 0xff, 0xff, 0xc7, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xeb, 0x9a, 0x41, 0x3b, 0xc4, 0x75, 0x06, 0x41, 0x80, 0xce, 0x40, 0xeb, 0x09, 0x83, 0xf8, 0x03, 0x75, 0x04, 0x41, 0x80, 0xce, 0x08, 0x48, 0x8b, 0x54, 0x24, 0x58, 0x8b, 0x0b, 0xe8, 0x25, 0xd8, 0xff, 0xff, 0x48, 0x63, 0x0b, 0x4c, 0x8d, 0x2d, 0x5b, 0x79, 0x00, 0x00, 0x48, 0x8b, 0xc1, 0x83, 0xe1, 0x1f, 0xba, 0x01, 0x00, 0x00, 0x00, 0x48, 0xc1, 0xf8, 0x05, 0x44, 0x0a, 0xf2, 0x49, 0x8b, 0x44, 0xc5, 0x00, 0x48, 0x6b, 0xc9, 0x58, 0x44, 0x88, 0x74, 0x08, 0x08, 0x48, 0x63, 0x0b, 0x48, 0x8b, 0xc1, 0x83, 0xe1, 0x1f, 0x48, 0xc1, 0xf8, 0x05, 0x48, 0x6b, 0xc9, 0x58, 0x49, 0x8b, 0x44, 0xc5, 0x00, 0x80, 0x64, 0x08, 0x38, 0x80, 0x41, 0x8a, 0xc6, 0x24, 0x48, 0x88, 0x44, 0x24, 0x4c, 0x0f, 0x85, 0x86, 0x00, 0x00, 0x00, 0x45, 0x84, 0xf6, 0x0f, 0x89, 0xc2, 0x02, 0x00, 0x00, 0x41, 0x84, 0xf4, 0x74, 0x78, 0x8b, 0x0b, 0x45, 0x8b, 0xc4, 0x83, 0xca, 0xff, 0xe8, 0xa6, 0x09, 0x00, 0x00, 0x89, 0x44, 0x24, 0x44, 0x83, 0xf8, 0xff, 0x75, 0x19, 0xe8, 0xf0, 0x74, 0xff, 0xff, 0x81, 0x38, 0x83, 0x00, 0x00, 0x00, 0x74, 0x50, 0x8b, 0x0b, 0xe8, 0xf5, 0xd2, 0xff, 0xff, 0xe9, 0xe9, 0xfe, 0xff, 0xff, 0x8b, 0x0b, 0x48, 0x8d, 0x54, 0x24, 0x40, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x40, 0x88, 0x7c, 0x24, 0x40, 0xe8, 0xd5, 0xf2, 0xff, 0xff, 0x3b, 0xc7, 0x75, 0x18, 0x80, 0x7c, 0x24, 0x40, 0x1a, 0x75, 0x11, 0x48, 0x63, 0x54, 0x24, 0x44, 0x8b, 0x0b, 0xe8, 0xbe, 0x07, 0x00, 0x00, 0x83, 0xf8, 0xff, 0x74, 0xc1, 0x8b, 0x0b, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0xe8, 0x45, 0x09, 0x00, 0x00, 0x83, 0xf8, 0xff, 0x74, 0xb0, 0xba, 0x01, 0x00, 0x00, 0x00, 0x45, 0x84, 0xf6, 0x0f, 0x89, 0x3c, 0x02, 0x00, 0x00, 0xb9, 0x00, 0x40, 0x07, 0x00, 0x85, 0xf1, 0x75, 0x10, 0x8b, 0x44, 0x24, 0x54, 0x23, 0xc1, 0x75, 0x06, 0x0f, 0xba, 0xee, 0x0e, 0xeb, 0x02, 0x0b, 0xf0, 0x8b, 0xc6, 0x23, 0xc1, 0x3d, 0x00, 0x40, 0x00, 0x00, 0x74, 0x4a, 0x3d, 0x00, 0x00, 0x01, 0x00, 0x74, 0x2c, 0x3d, 0x00, 0x40, 0x01, 0x00, 0x74, 0x25, 0x3d, 0x00, 0x00, 0x02, 0x00, 0x74, 0x2b, 0x3d, 0x00, 0x40, 0x02, 0x00, 0x74, 0x24, 0x3d, 0x00, 0x00, 0x04, 0x00, 0x74, 0x07, 0x3d, 0x00, 0x40, 0x04, 0x00, 0x75, 0x28, 0x88, 0x94, 0x24, 0xd8, 0x00, 0x00, 0x00, 0xeb, 0x1f, 0xb9, 0x01, 0x03, 0x00, 0x00, 0x8b, 0xc6, 0x23, 0xc1, 0x3b, 0xc1, 0x75, 0x12, 0x44, 0x88, 0xa4, 0x24, 0xd8, 0x00, 0x00, 0x00, 0xeb, 0x08, 0x40, 0x88, 0xbc, 0x24, 0xd8, 0x00, 0x00, 0x00, 0xf7, 0xc6, 0x00, 0x00, 0x07, 0x00, 0x0f, 0x84, 0xba, 0x01, 0x00, 0x00, 0x89, 0x7c, 0x24, 0x44, 0x41, 0xf6, 0xc6, 0x40, 0x0f, 0x85, 0xac, 0x01, 0x00, 0x00, 0x41, 0x8b, 0xc7, 0x25, 0x00, 0x00, 0x00, 0xc0, 0x3d, 0x00, 0x00, 0x00, 0x40, 0x0f, 0x84, 0x24, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x80, 0x74, 0x7c, 0x3d, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x85, 0x87, 0x01, 0x00, 0x00, 0x3b, 0xef, 0x0f, 0x86, 0x7f, 0x01, 0x00, 0x00, 0x41, 0x3b, 0xec, 0x76, 0x0e, 0x83, 0xfd, 0x04, 0x76, 0x38, 0x83, 0xfd, 0x05, 0x0f, 0x85, 0x6c, 0x01, 0x00, 0x00, 0x0f, 0xbe, 0x8c, 0x24, 0xd8, 0x00, 0x00, 0x00, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x8b, 0xef, 0x41, 0x2b, 0xc8, 0x0f, 0x84, 0x20, 0x01, 0x00, 0x00, 0x41, 0x3b, 0xc8, 0x0f, 0x85, 0x50, 0x01, 0x00, 0x00, 0xc7, 0x44, 0x24, 0x44, 0xff, 0xfe, 0x00, 0x00, 0xe9, 0x18, 0x01, 0x00, 0x00, 0x8b, 0x0b, 0x45, 0x8b, 0xc4, 0x33, 0xd2, 0xe8, 0x7f, 0xc9, 0xff, 0xff, 0x48, 0x3b, 0xc7, 0x74, 0xc0, 0x8b, 0x0b, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0xe8, 0x6e, 0xc9, 0xff, 0xff, 0x48, 0x83, 0xf8, 0xff, 0x0f, 0x84, 0x7c, 0xfe, 0xff, 0xff, 0x8b, 0x0b, 0x48, 0x8d, 0x54, 0x24, 0x44, 0x41, 0xb8, 0x03, 0x00, 0x00, 0x00, 0xe8, 0x62, 0xf1, 0xff, 0xff, 0x83, 0xf8, 0xff, 0x0f, 0x84, 0x61, 0xfe, 0xff, 0xff, 0x41, 0x3b, 0xc4, 0x74, 0x20, 0x83, 0xf8, 0x03, 0x75, 0x6b, 0x81, 0x7c, 0x24, 0x44, 0xef, 0xbb, 0xbf, 0x00, 0x75, 0x11, 0x44, 0x8d, 0x40, 0xfe, 0x44, 0x88, 0x84, 0x24, 0xd8, 0x00, 0x00, 0x00, 0xe9, 0xdc, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0x44, 0x24, 0x44, 0x3d, 0xfe, 0xff, 0x00, 0x00, 0x75, 0x1a, 0x8b, 0x0b, 0xe8, 0x25, 0xd1, 0xff, 0xff, 0xe8, 0xec, 0x72, 0xff, 0xff, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x89, 0x18, 0x8b, 0xfb, 0xe9, 0xe3, 0x01, 0x00, 0x00, 0x3d, 0xff, 0xfe, 0x00, 0x00, 0x75, 0x23, 0x8b, 0x0b, 0x45, 0x33, 0xc0, 0x41, 0x8b, 0xd4, 0xe8, 0x92, 0x07, 0x00, 0x00, 0x83, 0xf8, 0xff, 0x0f, 0x84, 0xf9, 0xfd, 0xff, 0xff, 0x44, 0x88, 0xa4, 0x24, 0xd8, 0x00, 0x00, 0x00, 0xe9, 0x86, 0x00, 0x00, 0x00, 0x8b, 0x0b, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0xe8, 0x70, 0x07, 0x00, 0x00, 0x83, 0xf8, 0xff, 0xeb, 0x3b, 0x3b, 0xef, 0x76, 0x71, 0x41, 0x3b, 0xec, 0x0f, 0x86, 0xfc, 0xfe, 0xff, 0xff, 0x83, 0xfd, 0x04, 0x0f, 0x87, 0xea, 0xfe, 0xff, 0xff, 0x8b, 0x0b, 0x45, 0x8b, 0xc4, 0x33, 0xd2, 0xe8, 0xa1, 0xc8, 0xff, 0xff, 0x48, 0x3b, 0xc7, 0x0f, 0x84, 0xde, 0xfe, 0xff, 0xff, 0x8b, 0x0b, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0xe8, 0x8c, 0xc8, 0xff, 0xff, 0x48, 0x83, 0xf8, 0xff, 0x75, 0x38, 0xe9, 0x99, 0xfd, 0xff, 0xff, 0xc7, 0x44, 0x24, 0x44, 0xef, 0xbb, 0xbf, 0x00, 0x41, 0xbc, 0x03, 0x00, 0x00, 0x00, 0x8b, 0x0b, 0x48, 0x63, 0xc5, 0x45, 0x8b, 0xc4, 0x48, 0x8d, 0x54, 0x04, 0x44, 0x44, 0x2b, 0xc5, 0xe8, 0x4e, 0xb0, 0xff, 0xff, 0x83, 0xf8, 0xff, 0x0f, 0x84, 0x6d, 0xfd, 0xff, 0xff, 0x03, 0xe8, 0x44, 0x3b, 0xe5, 0x7f, 0xdb, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x48, 0x63, 0x0b, 0x40, 0x8a, 0xac, 0x24, 0xd8, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xc1, 0x83, 0xe1, 0x1f, 0x40, 0x80, 0xe5, 0x7f, 0x48, 0xc1, 0xf8, 0x05, 0x48, 0x6b, 0xc9, 0x58, 0x49, 0x8b, 0x44, 0xc5, 0x00, 0x80, 0x64, 0x08, 0x38, 0x80, 0x40, 0x08, 0x6c, 0x08, 0x38, 0x48, 0x63, 0x13, 0x48, 0x8b, 0xc2, 0x83, 0xe2, 0x1f, 0x48, 0xc1, 0xf8, 0x05, 0x48, 0x6b, 0xd2, 0x58, 0x49, 0x8b, 0x4c, 0xc5, 0x00, 0x8b, 0xc6, 0x80, 0x64, 0x11, 0x38, 0x7f, 0xc1, 0xe8, 0x10, 0xc0, 0xe0, 0x07, 0x08, 0x44, 0x11, 0x38, 0x40, 0x38, 0x7c, 0x24, 0x4c, 0x75, 0x21, 0x40, 0xf6, 0xc6, 0x08, 0x74, 0x1b, 0x48, 0x63, 0x0b, 0x48, 0x8b, 0xc1, 0x83, 0xe1, 0x1f, 0x48, 0xc1, 0xf8, 0x05, 0x48, 0x6b, 0xc9, 0x58, 0x49, 0x8b, 0x44, 0xc5, 0x00, 0x80, 0x4c, 0x08, 0x08, 0x20, 0x41, 0x8b, 0xc7, 0x25, 0x00, 0x00, 0x00, 0xc0, 0x3d, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x85, 0x9f, 0x00, 0x00, 0x00, 0x41, 0x84, 0xf0, 0x0f, 0x84, 0x96, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x58, 0xff, 0x15, 0x3e, 0x24, 0x00, 0x00, 0x8b, 0x44, 0x24, 0x50, 0x44, 0x8b, 0x44, 0x24, 0x48, 0x48, 0x8b, 0x8c, 0x24, 0xd0, 0x00, 0x00, 0x00, 0x48, 0x89, 0x7c, 0x24, 0x30, 0x89, 0x44, 0x24, 0x28, 0x41, 0x0f, 0xba, 0xf7, 0x1f, 0x4c, 0x8d, 0x4c, 0x24, 0x60, 0xc7, 0x44, 0x24, 0x20, 0x03, 0x00, 0x00, 0x00, 0x41, 0x8b, 0xd7, 0xff, 0x15, 0x31, 0x24, 0x00, 0x00, 0x48, 0x83, 0xf8, 0xff, 0x75, 0x36, 0xff, 0x15, 0xb5, 0x22, 0x00, 0x00, 0x8b, 0xc8, 0xe8, 0x7e, 0x71, 0xff, 0xff, 0x4c, 0x63, 0x1b, 0x49, 0x8b, 0xc3, 0x41, 0x83, 0xe3, 0x1f, 0x48, 0xc1, 0xf8, 0x05, 0x4d, 0x6b, 0xdb, 0x58, 0x49, 0x8b, 0x44, 0xc5, 0x00, 0x42, 0x80, 0x64, 0x18, 0x08, 0xfe, 0x8b, 0x0b, 0xe8, 0xa2, 0xd4, 0xff, 0xff, 0xe9, 0x42, 0xfb, 0xff, 0xff, 0x48, 0x63, 0x13, 0x48, 0x8b, 0xca, 0x83, 0xe2, 0x1f, 0x48, 0xc1, 0xf9, 0x05, 0x48, 0x6b, 0xd2, 0x58, 0x49, 0x8b, 0x4c, 0xcd, 0x00, 0x48, 0x89, 0x04, 0x0a, 0x8b, 0xc7, 0x48, 0x8b, 0x9c, 0x24, 0xc8, 0x00, 0x00, 0x00, 0x48, 0x81, 0xc4, 0x80, 0x00, 0x00, 0x00, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0x5d, 0xc3, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x89, 0x50, 0x10, 0x4c, 0x89, 0x40, 0x18, 0x4c, 0x89, 0x48, 0x20, 0x56, 0x57, 0x48, 0x83, 0xec, 0x58, 0x83, 0x48, 0xd8, 0xff, 0x83, 0x60, 0xdc, 0x00, 0x45, 0x33, 0xc0, 0x48, 0x85, 0xc9, 0x41, 0x0f, 0x95, 0xc0, 0x45, 0x85, 0xc0, 0x75, 0x28, 0xe8, 0xac, 0x70, 0xff, 0xff, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0xc1, 0x6f, 0xff, 0xff, 0x83, 0xc8, 0xff, 0xe9, 0x93, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x84, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc0, 0x08, 0x44, 0x8b, 0x40, 0xf8, 0x83, 0x64, 0x24, 0x30, 0x00, 0x44, 0x89, 0x44, 0x24, 0x28, 0xc7, 0x44, 0x24, 0x20, 0x40, 0x00, 0x00, 0x00, 0x44, 0x8b, 0xca, 0x4c, 0x8b, 0xc1, 0x48, 0x8d, 0x54, 0x24, 0x40, 0x48, 0x8d, 0x4c, 0x24, 0x44, 0xe8, 0x76, 0xf7, 0xff, 0xff, 0x8b, 0xf0, 0x89, 0x44, 0x24, 0x48, 0x83, 0x7c, 0x24, 0x44, 0x00, 0x74, 0x39, 0x85, 0xc0, 0x74, 0x28, 0x48, 0x63, 0x7c, 0x24, 0x40, 0x48, 0x8b, 0xcf, 0x48, 0x8b, 0xc7, 0x48, 0xc1, 0xf8, 0x05, 0x4c, 0x8d, 0x05, 0x43, 0x74, 0x00, 0x00, 0x83, 0xe1, 0x1f, 0x48, 0x6b, 0xc9, 0x58, 0x49, 0x8b, 0x04, 0xc0, 0x80, 0x64, 0x08, 0x08, 0xfe, 0xeb, 0x04, 0x8b, 0x7c, 0x24, 0x40, 0x8b, 0xcf, 0xe8, 0x6e, 0xd5, 0xff, 0xff, 0xeb, 0x04, 0x8b, 0x7c, 0x24, 0x40, 0x85, 0xf6, 0x74, 0x0c, 0xe8, 0xff, 0x6f, 0xff, 0xff, 0x89, 0x30, 0x83, 0xc8, 0xff, 0xeb, 0x02, 0x8b, 0xc7, 0x48, 0x83, 0xc4, 0x58, 0x5f, 0x5e, 0xc3, 0xcc, 0xcc, 0xcc, 0x40, 0x53, 0x48, 0x83, 0xec, 0x30, 0x4d, 0x8b, 0xd0, 0x48, 0x8b, 0xc2, 0x48, 0x8b, 0xd9, 0x48, 0x85, 0xc9, 0x75, 0x26, 0xe8, 0xd3, 0x6f, 0xff, 0xff, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0xe8, 0x6e, 0xff, 0xff, 0x48, 0x83, 0xc8, 0xff, 0xeb, 0x55, 0x48, 0x85, 0xc0, 0x74, 0xd5, 0x48, 0x89, 0x4c, 0x24, 0x20, 0x4c, 0x8d, 0x4c, 0x24, 0x58, 0x4c, 0x8d, 0x44, 0x24, 0x40, 0x49, 0x8b, 0xd2, 0x48, 0x8b, 0xc8, 0xe8, 0xcf, 0x08, 0x00, 0x00, 0x83, 0xf8, 0xff, 0x74, 0xd6, 0x4c, 0x8b, 0x4c, 0x24, 0x58, 0x4c, 0x8b, 0x44, 0x24, 0x40, 0x48, 0x8b, 0xd3, 0xb9, 0x02, 0x00, 0x00, 0x00, 0xe8, 0xe7, 0x05, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x48, 0x8b, 0xd8, 0xe8, 0xf2, 0x71, 0xff, 0xff, 0x48, 0x8b, 0x4c, 0x24, 0x58, 0xe8, 0xe8, 0x71, 0xff, 0xff, 0x48, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x30, 0x5b, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x10, 0x4c, 0x89, 0x44, 0x24, 0x18, 0x55, 0x56, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x30, 0x45, 0x33, 0xf6, 0x4d, 0x8b, 0xe0, 0x4c, 0x8b, 0xea, 0x48, 0x8b, 0xe9, 0x48, 0x8b, 0xf1, 0x49, 0x3b, 0xce, 0x75, 0x28, 0xe8, 0x22, 0x6f, 0xff, 0xff, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x4c, 0x89, 0x74, 0x24, 0x20, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x38, 0x6e, 0xff, 0xff, 0x48, 0x83, 0xc8, 0xff, 0xe9, 0x17, 0x02, 0x00, 0x00, 0x44, 0x38, 0x31, 0x74, 0xd3, 0x49, 0x3b, 0xd6, 0x74, 0xce, 0x48, 0x8b, 0x02, 0x49, 0x3b, 0xc6, 0x74, 0xc6, 0x44, 0x38, 0x30, 0x74, 0xc1, 0xba, 0x5c, 0x00, 0x00, 0x00, 0xe8, 0x76, 0x0e, 0x00, 0x00, 0xba, 0x2f, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcd, 0x48, 0x8b, 0xf8, 0xe8, 0x66, 0x0e, 0x00, 0x00, 0x41, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x49, 0x3b, 0xc6, 0x0f, 0x85, 0x9c, 0x00, 0x00, 0x00, 0x49, 0x3b, 0xfe, 0x0f, 0x85, 0xa0, 0x00, 0x00, 0x00, 0x41, 0x8d, 0x57, 0x39, 0x48, 0x8b, 0xcd, 0xe8, 0x52, 0xec, 0xff, 0xff, 0x48, 0x8b, 0xf8, 0x49, 0x3b, 0xc6, 0x0f, 0x85, 0x88, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcd, 0xe8, 0x2e, 0x9f, 0xff, 0xff, 0x49, 0x8b, 0xd7, 0x48, 0x8d, 0x58, 0x03, 0x48, 0x8b, 0xcb, 0xe8, 0x7b, 0x6f, 0xff, 0xff, 0x48, 0x8b, 0xf0, 0x49, 0x3b, 0xc6, 0x0f, 0x84, 0x73, 0xff, 0xff, 0xff, 0x4c, 0x8d, 0x05, 0x4c, 0x35, 0x00, 0x00, 0x48, 0x8b, 0xd3, 0x48, 0x8b, 0xc8, 0xe8, 0x75, 0xc2, 0xff, 0xff, 0x41, 0x3b, 0xc6, 0x74, 0x14, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x4c, 0x89, 0x74, 0x24, 0x20, 0xe8, 0x58, 0x6c, 0xff, 0xff, 0x4c, 0x8b, 0xc5, 0x48, 0x8b, 0xd3, 0x48, 0x8b, 0xce, 0xe8, 0xea, 0xc0, 0xff, 0xff, 0x41, 0x3b, 0xc6, 0x74, 0x14, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x4c, 0x89, 0x74, 0x24, 0x20, 0xe8, 0x31, 0x6c, 0xff, 0xff, 0x48, 0x8d, 0x7e, 0x02, 0xeb, 0x0d, 0x49, 0x3b, 0xfe, 0x74, 0x05, 0x48, 0x3b, 0xc7, 0x76, 0x03, 0x48, 0x8b, 0xf8, 0x48, 0x83, 0xcb, 0xff, 0x48, 0x8b, 0xcf, 0x8d, 0x53, 0x2f, 0xe8, 0x9f, 0x0d, 0x00, 0x00, 0x48, 0x8b, 0xce, 0x49, 0x3b, 0xc6, 0x74, 0x26, 0x33, 0xd2, 0xe8, 0x10, 0x0c, 0x00, 0x00, 0x41, 0x3b, 0xc6, 0x0f, 0x85, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0x8b, 0xc4, 0x49, 0x8b, 0xd5, 0x48, 0x8b, 0xce, 0xe8, 0xf5, 0xfd, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0xe9, 0xe1, 0x00, 0x00, 0x00, 0xe8, 0x6c, 0x9e, 0xff, 0xff, 0x49, 0x8b, 0xd7, 0x4c, 0x8d, 0x60, 0x05, 0x49, 0x8b, 0xcc, 0xe8, 0xb9, 0x6e, 0xff, 0xff, 0x48, 0x8b, 0xf8, 0x49, 0x3b, 0xc6, 0x0f, 0x84, 0xce, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xc6, 0x49, 0x8b, 0xd4, 0x48, 0x8b, 0xc8, 0xe8, 0xb7, 0xc1, 0xff, 0xff, 0x41, 0x3b, 0xc6, 0x74, 0x14, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x4c, 0x89, 0x74, 0x24, 0x20, 0xe8, 0x9a, 0x6b, 0xff, 0xff, 0x48, 0x8b, 0xce, 0xe8, 0x22, 0x9e, 0xff, 0xff, 0x4c, 0x8d, 0x34, 0x07, 0xe8, 0x81, 0x6d, 0xff, 0xff, 0x4d, 0x2b, 0xe6, 0x44, 0x8b, 0x38, 0x49, 0x8d, 0x04, 0x3c, 0x4c, 0x8d, 0x25, 0x30, 0x63, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x70, 0x4d, 0x8b, 0x04, 0x24, 0x48, 0x8b, 0xd0, 0x49, 0x8b, 0xce, 0xe8, 0x68, 0xc1, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x15, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x4b, 0x6b, 0xff, 0xff, 0x33, 0xd2, 0x48, 0x8b, 0xcf, 0xe8, 0x51, 0x0b, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x17, 0x48, 0x8d, 0x05, 0xd6, 0x62, 0x00, 0x00, 0x49, 0x83, 0xec, 0x08, 0x4c, 0x3b, 0xe0, 0x48, 0x8b, 0x44, 0x24, 0x70, 0x7d, 0xb5, 0xeb, 0x1e, 0xe8, 0x19, 0x6d, 0xff, 0xff, 0x4c, 0x8b, 0x84, 0x24, 0x80, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xd5, 0x48, 0x8b, 0xcf, 0x44, 0x89, 0x38, 0xe8, 0x17, 0xfd, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0x48, 0x8b, 0xcf, 0xe8, 0x80, 0x6f, 0xff, 0xff, 0x48, 0x3b, 0xf5, 0x74, 0x08, 0x48, 0x8b, 0xce, 0xe8, 0x73, 0x6f, 0xff, 0xff, 0x48, 0x8b, 0xc3, 0x48, 0x8b, 0x5c, 0x24, 0x78, 0x48, 0x83, 0xc4, 0x30, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0x5d, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, 0x54, 0x41, 0x55, 0x41, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0x33, 0xff, 0x33, 0xd2, 0x44, 0x8d, 0x47, 0x01, 0x8b, 0xf1, 0xe8, 0xc1, 0xc2, 0xff, 0xff, 0x4c, 0x8b, 0xe8, 0x48, 0x83, 0xf8, 0xff, 0x74, 0x50, 0x44, 0x8d, 0x47, 0x02, 0x33, 0xd2, 0x8b, 0xce, 0xe8, 0xab, 0xc2, 0xff, 0xff, 0x48, 0x83, 0xf8, 0xff, 0x74, 0x3d, 0x48, 0x8b, 0xdd, 0x48, 0x2b, 0xd8, 0x48, 0x3b, 0xdf, 0x0f, 0x8e, 0xc1, 0x00, 0x00, 0x00, 0xff, 0x15, 0x80, 0x1f, 0x00, 0x00, 0x41, 0xbf, 0x00, 0x10, 0x00, 0x00, 0x8d, 0x57, 0x08, 0x48, 0x8b, 0xc8, 0x4d, 0x8b, 0xc7, 0xff, 0x15, 0xdb, 0x1d, 0x00, 0x00, 0x48, 0x8b, 0xe8, 0x48, 0x3b, 0xc7, 0x75, 0x31, 0xe8, 0x4e, 0x6c, 0xff, 0xff, 0xc7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xe8, 0x43, 0x6c, 0xff, 0xff, 0x8b, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x40, 0x48, 0x8b, 0x6c, 0x24, 0x48, 0x48, 0x8b, 0x74, 0x24, 0x50, 0x48, 0x8b, 0x7c, 0x24, 0x58, 0x48, 0x83, 0xc4, 0x20, 0x41, 0x5f, 0x41, 0x5d, 0x41, 0x5c, 0xc3, 0xba, 0x00, 0x80, 0x00, 0x00, 0x8b, 0xce, 0xe8, 0x76, 0x01, 0x00, 0x00, 0x44, 0x8b, 0xe0, 0x44, 0x8b, 0xc3, 0x49, 0x3b, 0xdf, 0x48, 0x8b, 0xd5, 0x45, 0x0f, 0x4d, 0xc7, 0x8b, 0xce, 0xe8, 0xaf, 0xa2, 0xff, 0xff, 0x83, 0xf8, 0xff, 0x74, 0x0c, 0x48, 0x98, 0x48, 0x2b, 0xd8, 0x48, 0x3b, 0xdf, 0x7e, 0x1b, 0xeb, 0xdb, 0xe8, 0x09, 0x6c, 0xff, 0xff, 0x83, 0x38, 0x05, 0x75, 0x0b, 0xe8, 0xdf, 0x6b, 0xff, 0xff, 0xc7, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x48, 0x83, 0xcf, 0xff, 0x41, 0x8b, 0xd4, 0x8b, 0xce, 0xe8, 0x2b, 0x01, 0x00, 0x00, 0xff, 0x15, 0xd5, 0x1e, 0x00, 0x00, 0x4c, 0x8b, 0xc5, 0x48, 0x8b, 0xc8, 0x33, 0xd2, 0xff, 0x15, 0x2f, 0x1d, 0x00, 0x00, 0xeb, 0x55, 0x7d, 0x5d, 0x45, 0x33, 0xc0, 0x48, 0x8b, 0xd5, 0x8b, 0xce, 0xe8, 0xc6, 0xc1, 0xff, 0xff, 0x48, 0x83, 0xf8, 0xff, 0x0f, 0x84, 0x54, 0xff, 0xff, 0xff, 0x8b, 0xce, 0xe8, 0xc9, 0xcf, 0xff, 0xff, 0x48, 0x8b, 0xc8, 0xff, 0x15, 0x94, 0x1e, 0x00, 0x00, 0xf7, 0xd8, 0x48, 0x1b, 0xff, 0x48, 0xf7, 0xdf, 0x48, 0xff, 0xcf, 0x48, 0x83, 0xff, 0xff, 0x75, 0x25, 0xe8, 0x76, 0x6b, 0xff, 0xff, 0xc7, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe8, 0x8b, 0x6b, 0xff, 0xff, 0x48, 0x8b, 0xd8, 0xff, 0x15, 0xd2, 0x1c, 0x00, 0x00, 0x89, 0x03, 0x48, 0x83, 0xff, 0xff, 0x0f, 0x84, 0x0e, 0xff, 0xff, 0xff, 0x45, 0x33, 0xc0, 0x49, 0x8b, 0xd5, 0x8b, 0xce, 0xe8, 0x69, 0xc1, 0xff, 0xff, 0x48, 0x83, 0xf8, 0xff, 0x0f, 0x84, 0xf7, 0xfe, 0xff, 0xff, 0x33, 0xc0, 0xe9, 0xf7, 0xfe, 0xff, 0xff, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, 0x63, 0xd9, 0x41, 0x8b, 0xf8, 0x8b, 0xf2, 0x8b, 0xcb, 0xe8, 0x4e, 0xcf, 0xff, 0xff, 0x48, 0x83, 0xf8, 0xff, 0x75, 0x10, 0xe8, 0x0f, 0x6b, 0xff, 0xff, 0xc7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x83, 0xc8, 0xff, 0xeb, 0x52, 0x44, 0x8b, 0xcf, 0x45, 0x33, 0xc0, 0x8b, 0xd6, 0x48, 0x8b, 0xc8, 0xff, 0x15, 0x9b, 0x1d, 0x00, 0x00, 0x8b, 0xf8, 0x83, 0xf8, 0xff, 0x75, 0x08, 0xff, 0x15, 0x56, 0x1c, 0x00, 0x00, 0xeb, 0x02, 0x33, 0xc0, 0x85, 0xc0, 0x74, 0x09, 0x8b, 0xc8, 0xe8, 0x17, 0x6b, 0xff, 0xff, 0xeb, 0xcc, 0x48, 0x8b, 0xcb, 0x48, 0x8b, 0xc3, 0x48, 0x8d, 0x15, 0xe0, 0x6e, 0x00, 0x00, 0x48, 0xc1, 0xf8, 0x05, 0x83, 0xe1, 0x1f, 0x48, 0x8b, 0x04, 0xc2, 0x48, 0x6b, 0xc9, 0x58, 0x80, 0x64, 0x08, 0x08, 0xfd, 0x8b, 0xc7, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x4c, 0x63, 0xc1, 0x48, 0x8d, 0x1d, 0xa9, 0x6e, 0x00, 0x00, 0x4d, 0x8b, 0xc8, 0x41, 0x83, 0xe0, 0x1f, 0x49, 0xc1, 0xf9, 0x05, 0x4d, 0x6b, 0xc0, 0x58, 0x4a, 0x8b, 0x0c, 0xcb, 0x42, 0x8a, 0x44, 0x01, 0x38, 0x46, 0x0f, 0xb6, 0x5c, 0x01, 0x08, 0x02, 0xc0, 0x41, 0x81, 0xe3, 0x80, 0x00, 0x00, 0x00, 0x44, 0x0f, 0xbe, 0xd0, 0x41, 0xd1, 0xfa, 0x81, 0xfa, 0x00, 0x40, 0x00, 0x00, 0x74, 0x58, 0x81, 0xfa, 0x00, 0x80, 0x00, 0x00, 0x74, 0x48, 0x81, 0xfa, 0x00, 0x00, 0x01, 0x00, 0x74, 0x28, 0x81, 0xfa, 0x00, 0x00, 0x02, 0x00, 0x74, 0x20, 0x81, 0xfa, 0x00, 0x00, 0x04, 0x00, 0x75, 0x48, 0x42, 0x80, 0x4c, 0x01, 0x08, 0x80, 0x4a, 0x8b, 0x04, 0xcb, 0x42, 0x80, 0x64, 0x00, 0x38, 0x81, 0x42, 0x80, 0x4c, 0x00, 0x38, 0x01, 0xeb, 0x30, 0x42, 0x80, 0x4c, 0x01, 0x08, 0x80, 0x4a, 0x8b, 0x04, 0xcb, 0x42, 0x80, 0x64, 0x00, 0x38, 0x82, 0x42, 0x80, 0x4c, 0x00, 0x38, 0x02, 0xeb, 0x18, 0x42, 0x80, 0x64, 0x01, 0x08, 0x7f, 0xeb, 0x10, 0x42, 0x80, 0x4c, 0x01, 0x08, 0x80, 0x4a, 0x8b, 0x0c, 0xcb, 0x42, 0x80, 0x64, 0x01, 0x38, 0x80, 0x45, 0x85, 0xdb, 0x75, 0x07, 0xb8, 0x00, 0x80, 0x00, 0x00, 0xeb, 0x0f, 0x41, 0xf7, 0xda, 0x1b, 0xc0, 0x25, 0x00, 0xc0, 0x00, 0x00, 0x05, 0x00, 0x40, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x08, 0xc3, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x38, 0x48, 0x85, 0xc9, 0x75, 0x27, 0xe8, 0xc2, 0x69, 0xff, 0xff, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0xd7, 0x68, 0xff, 0xff, 0xb8, 0x16, 0x00, 0x00, 0x00, 0xeb, 0x0a, 0x8b, 0x05, 0x92, 0x6d, 0x00, 0x00, 0x89, 0x01, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x38, 0xc3, 0xcc, 0x4c, 0x89, 0x4c, 0x24, 0x20, 0x48, 0x89, 0x54, 0x24, 0x10, 0x53, 0x55, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x81, 0xec, 0xe0, 0x00, 0x00, 0x00, 0x33, 0xff, 0x8b, 0xe9, 0x8d, 0x47, 0x04, 0x44, 0x8d, 0x67, 0x03, 0x44, 0x8b, 0xf7, 0x44, 0x8a, 0xef, 0x3b, 0xcf, 0x74, 0x13, 0x83, 0xf9, 0x01, 0x74, 0x0e, 0x7e, 0x11, 0x41, 0x3b, 0xcc, 0x7e, 0x07, 0x3b, 0xc8, 0x75, 0x08, 0x41, 0xb5, 0x01, 0x4d, 0x8b, 0xf8, 0xeb, 0x40, 0xe8, 0x62, 0x69, 0xff, 0xff, 0x89, 0x38, 0xe8, 0x3b, 0x69, 0xff, 0xff, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0x48, 0x89, 0x7c, 0x24, 0x20, 0xe8, 0x51, 0x68, 0xff, 0xff, 0xe9, 0x40, 0x02, 0x00, 0x00, 0x49, 0xff, 0xc0, 0x41, 0x38, 0x38, 0x75, 0xf8, 0x41, 0x38, 0x78, 0x01, 0x74, 0x07, 0x41, 0xc6, 0x00, 0x20, 0x49, 0xff, 0xc0, 0x41, 0x38, 0x38, 0x75, 0xe6, 0xbb, 0x68, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x70, 0x33, 0xd2, 0x4c, 0x8b, 0xc3, 0xe8, 0x66, 0x46, 0xff, 0xff, 0x89, 0x5c, 0x24, 0x70, 0x8b, 0x1d, 0xe4, 0x6c, 0x00, 0x00, 0x4c, 0x8d, 0x05, 0xf5, 0x6c, 0x00, 0x00, 0x3b, 0xdf, 0x74, 0x2f, 0x8d, 0x53, 0xff, 0x48, 0x63, 0xca, 0x48, 0x8b, 0xc1, 0x83, 0xe1, 0x1f, 0x48, 0xc1, 0xf8, 0x05, 0x48, 0x6b, 0xc9, 0x58, 0x49, 0x8b, 0x04, 0xc0, 0x40, 0x38, 0x7c, 0x08, 0x08, 0x75, 0x08, 0xff, 0xcb, 0xff, 0xca, 0x3b, 0xdf, 0x75, 0xdc, 0x3b, 0xdf, 0x0f, 0x8c, 0xc3, 0x01, 0x00, 0x00, 0x81, 0xfb, 0x71, 0x1c, 0x00, 0x00, 0x0f, 0x83, 0xb7, 0x01, 0x00, 0x00, 0x0f, 0xb7, 0xc3, 0xba, 0x01, 0x00, 0x00, 0x00, 0x66, 0xc1, 0xe0, 0x03, 0x8d, 0x4c, 0x18, 0x04, 0x66, 0x89, 0x8c, 0x24, 0xb2, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0xc9, 0xe8, 0x72, 0x69, 0xff, 0xff, 0x48, 0x89, 0x84, 0x24, 0xb8, 0x00, 0x00, 0x00, 0x48, 0x3b, 0xc7, 0x0f, 0x84, 0x86, 0x01, 0x00, 0x00, 0x3b, 0xdf, 0x89, 0x18, 0x48, 0x8b, 0x84, 0x24, 0xb8, 0x00, 0x00, 0x00, 0x4c, 0x63, 0xdb, 0x48, 0x8d, 0x48, 0x04, 0x49, 0x8d, 0x54, 0x03, 0x04, 0x7e, 0x57, 0x4c, 0x8b, 0xc7, 0x44, 0x8b, 0xcb, 0x4c, 0x8d, 0x1d, 0x5e, 0x6c, 0x00, 0x00, 0x4d, 0x8b, 0xd0, 0x49, 0x8b, 0xc0, 0x41, 0x83, 0xe2, 0x1f, 0x48, 0xc1, 0xf8, 0x05, 0x4d, 0x6b, 0xd2, 0x58, 0x4d, 0x03, 0x14, 0xc3, 0x41, 0x8a, 0x42, 0x08, 0xa8, 0x10, 0x75, 0x0a, 0x88, 0x01, 0x49, 0x8b, 0x02, 0x48, 0x89, 0x02, 0xeb, 0x07, 0x40, 0x88, 0x39, 0x48, 0x83, 0x0a, 0xff, 0x49, 0xff, 0xc0, 0x48, 0xff, 0xc1, 0x48, 0x83, 0xc2, 0x08, 0x49, 0x83, 0xe9, 0x01, 0x75, 0xc1, 0x48, 0x8b, 0x84, 0x24, 0xb8, 0x00, 0x00, 0x00, 0x4c, 0x63, 0xdb, 0x44, 0x3a, 0xef, 0x74, 0x32, 0x41, 0x3b, 0xdc, 0x48, 0x8d, 0x48, 0x04, 0x49, 0x8d, 0x54, 0x03, 0x04, 0x44, 0x0f, 0x4c, 0xe3, 0x44, 0x3b, 0xe7, 0x7e, 0x17, 0x41, 0x8b, 0xc4, 0x40, 0x88, 0x39, 0x48, 0x83, 0x0a, 0xff, 0x48, 0x83, 0xc2, 0x08, 0x48, 0xff, 0xc1, 0x48, 0x83, 0xe8, 0x01, 0x75, 0xec, 0x41, 0xbe, 0x08, 0x00, 0x00, 0x00, 0xe8, 0xe0, 0x67, 0xff, 0xff, 0x48, 0x8b, 0x8c, 0x24, 0x28, 0x01, 0x00, 0x00, 0x45, 0x33, 0xc9, 0x89, 0x38, 0x48, 0x8d, 0x44, 0x24, 0x50, 0x45, 0x33, 0xc0, 0x48, 0x89, 0x44, 0x24, 0x48, 0x48, 0x8d, 0x44, 0x24, 0x70, 0x49, 0x8b, 0xd7, 0x48, 0x89, 0x44, 0x24, 0x40, 0x48, 0x8b, 0x84, 0x24, 0x38, 0x01, 0x00, 0x00, 0x48, 0x89, 0x7c, 0x24, 0x38, 0x48, 0x89, 0x44, 0x24, 0x30, 0x44, 0x89, 0x74, 0x24, 0x28, 0xc7, 0x44, 0x24, 0x20, 0x01, 0x00, 0x00, 0x00, 0xff, 0x15, 0x24, 0x18, 0x00, 0x00, 0x8b, 0xd8, 0xff, 0x15, 0xdc, 0x18, 0x00, 0x00, 0x48, 0x8b, 0x8c, 0x24, 0xb8, 0x00, 0x00, 0x00, 0x44, 0x8b, 0xe0, 0xe8, 0xe4, 0x69, 0xff, 0xff, 0x3b, 0xdf, 0x75, 0x0a, 0x41, 0x8b, 0xcc, 0xe8, 0x90, 0x67, 0xff, 0xff, 0xeb, 0x72, 0x83, 0xfd, 0x02, 0x75, 0x08, 0x33, 0xc9, 0xe8, 0x26, 0x51, 0xff, 0xff, 0xcc, 0x3b, 0xef, 0x75, 0x2b, 0x48, 0x8b, 0x4c, 0x24, 0x50, 0x83, 0xca, 0xff, 0xff, 0x15, 0xd7, 0x17, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x50, 0x48, 0x8d, 0x94, 0x24, 0x20, 0x01, 0x00, 0x00, 0xff, 0x15, 0xbc, 0x17, 0x00, 0x00, 0x48, 0x63, 0xbc, 0x24, 0x20, 0x01, 0x00, 0x00, 0xeb, 0x09, 0xb8, 0x04, 0x00, 0x00, 0x00, 0x3b, 0xe8, 0x75, 0x0d, 0x48, 0x8b, 0x4c, 0x24, 0x50, 0xff, 0x15, 0xb6, 0x19, 0x00, 0x00, 0xeb, 0x05, 0x48, 0x8b, 0x7c, 0x24, 0x50, 0x48, 0x8b, 0x4c, 0x24, 0x58, 0xff, 0x15, 0xa4, 0x19, 0x00, 0x00, 0x48, 0x8b, 0xc7, 0xeb, 0x0f, 0xe8, 0xe2, 0x66, 0xff, 0xff, 0xc7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc8, 0xff, 0x48, 0x81, 0xc4, 0xe0, 0x00, 0x00, 0x00, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5d, 0x5b, 0xc3, 0xcc, 0x40, 0x53, 0x55, 0x56, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x81, 0xec, 0x88, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x01, 0x4b, 0x00, 0x00, 0x48, 0x33, 0xc4, 0x48, 0x89, 0x44, 0x24, 0x78, 0x48, 0x8b, 0x05, 0x7a, 0x2d, 0x00, 0x00, 0x45, 0x33, 0xf6, 0x48, 0x8b, 0xea, 0x48, 0x8d, 0x54, 0x24, 0x68, 0x45, 0x8d, 0x66, 0x02, 0x4d, 0x8b, 0xe9, 0x48, 0x89, 0x02, 0x0f, 0xb7, 0x05, 0x66, 0x2d, 0x00, 0x00, 0x4c, 0x89, 0x4c, 0x24, 0x58, 0x66, 0x89, 0x42, 0x08, 0x8a, 0x05, 0x59, 0x2d, 0x00, 0x00, 0x4d, 0x8b, 0xf8, 0x88, 0x42, 0x0a, 0x48, 0x8b, 0x01, 0x48, 0x89, 0x4c, 0x24, 0x60, 0x41, 0x8b, 0xf6, 0x44, 0x89, 0x74, 0x24, 0x30, 0x4c, 0x89, 0x74, 0x24, 0x38, 0x44, 0x89, 0x74, 0x24, 0x34, 0x48, 0x8b, 0xd9, 0x41, 0x8b, 0xfc, 0xeb, 0x13, 0x48, 0x8b, 0xc8, 0xe8, 0xd7, 0x96, 0xff, 0xff, 0x48, 0x83, 0xc3, 0x08, 0x8d, 0x7c, 0x07, 0x01, 0x48, 0x8b, 0x03, 0x49, 0x3b, 0xc6, 0x75, 0xe8, 0x8b, 0xc7, 0xba, 0x01, 0x00, 0x00, 0x00, 0x8b, 0xcf, 0x48, 0x89, 0x44, 0x24, 0x48, 0xe8, 0x10, 0x67, 0xff, 0xff, 0x49, 0x89, 0x07, 0x49, 0x3b, 0xc6, 0x75, 0x22, 0x4d, 0x89, 0x75, 0x00, 0xe8, 0x0b, 0x66, 0xff, 0xff, 0xc7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xe8, 0x20, 0x66, 0xff, 0xff, 0xc7, 0x00, 0x08, 0x00, 0x00, 0x00, 0x83, 0xc8, 0xff, 0xe9, 0xe9, 0x03, 0x00, 0x00, 0x4c, 0x8d, 0x44, 0x24, 0x68, 0x48, 0x8d, 0x4c, 0x24, 0x38, 0x33, 0xd2, 0xe8, 0x41, 0xd3, 0xff, 0xff, 0x41, 0x3b, 0xc6, 0x74, 0x1f, 0x83, 0xf8, 0x16, 0x0f, 0x85, 0x8a, 0x00, 0x00, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x4c, 0x89, 0x74, 0x24, 0x20, 0xe8, 0xc7, 0x63, 0xff, 0xff, 0xeb, 0x74, 0x48, 0x8d, 0x4c, 0x24, 0x68, 0xe8, 0x4b, 0x96, 0xff, 0xff, 0x48, 0x8b, 0x4c, 0x24, 0x38, 0x41, 0x8d, 0x3c, 0x04, 0x48, 0x89, 0x7c, 0x24, 0x50, 0x49, 0x3b, 0xce, 0x74, 0x0c, 0xe8, 0x33, 0x96, 0xff, 0xff, 0x03, 0xf8, 0x48, 0x89, 0x7c, 0x24, 0x50, 0x49, 0x3b, 0xee, 0x0f, 0x84, 0x5a, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0xdd, 0xeb, 0x14, 0x48, 0x8b, 0xc8, 0xe8, 0x12, 0x96, 0xff, 0xff, 0x48, 0x83, 0xc3, 0x08, 0x45, 0x8d, 0x64, 0x04, 0x01, 0x48, 0x8b, 0x03, 0x49, 0x3b, 0xc6, 0x75, 0xe7, 0x48, 0x8b, 0x15, 0x9a, 0x5b, 0x00, 0x00, 0x49, 0x3b, 0xd6, 0x75, 0x2b, 0xe8, 0xa8, 0x91, 0xff, 0xff, 0x48, 0x8b, 0xd0, 0x48, 0x89, 0x05, 0x86, 0x5b, 0x00, 0x00, 0x49, 0x3b, 0xc6, 0x75, 0x17, 0x49, 0x8b, 0x0f, 0x83, 0xce, 0xff, 0xe8, 0xc6, 0x67, 0xff, 0xff, 0x4d, 0x89, 0x37, 0x4d, 0x89, 0x75, 0x00, 0xe9, 0x00, 0x03, 0x00, 0x00, 0x45, 0x8b, 0xee, 0xb3, 0x3d, 0x44, 0x38, 0x32, 0x74, 0x28, 0x8a, 0x02, 0x48, 0x8b, 0xca, 0x3a, 0xc3, 0x74, 0x1f, 0xe8, 0xb2, 0x95, 0xff, 0xff, 0x48, 0x8b, 0x15, 0x4b, 0x5b, 0x00, 0x00, 0x45, 0x8d, 0x6c, 0x05, 0x01, 0x49, 0x63, 0xc5, 0x48, 0x8d, 0x0c, 0x10, 0x8a, 0x01, 0x41, 0x3a, 0xc6, 0x75, 0xdd, 0x45, 0x8b, 0xf5, 0x49, 0x63, 0xcd, 0xeb, 0x2f, 0x40, 0x38, 0x71, 0x01, 0x74, 0x30, 0x80, 0x79, 0x02, 0x3a, 0x75, 0x2a, 0x38, 0x59, 0x03, 0x75, 0x25, 0x41, 0x8d, 0x46, 0x04, 0x48, 0x63, 0xc8, 0x48, 0x03, 0xca, 0xe8, 0x70, 0x95, 0xff, 0xff, 0x48, 0x8b, 0x15, 0x09, 0x5b, 0x00, 0x00, 0x45, 0x8d, 0x74, 0x06, 0x05, 0x49, 0x63, 0xce, 0x48, 0x03, 0xca, 0x38, 0x19, 0x74, 0xca, 0x41, 0x8b, 0xc6, 0x48, 0x8b, 0xdd, 0x41, 0x2b, 0xc5, 0x44, 0x03, 0xe0, 0x44, 0x89, 0x64, 0x24, 0x40, 0x48, 0x39, 0x75, 0x00, 0x74, 0x27, 0x48, 0x8d, 0x4c, 0x24, 0x68, 0xe8, 0x39, 0x95, 0xff, 0xff, 0x48, 0x8b, 0x0b, 0x48, 0x8d, 0x54, 0x24, 0x68, 0x4c, 0x8b, 0xc0, 0xe8, 0xf5, 0x05, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x52, 0x48, 0x83, 0xc3, 0x08, 0x48, 0x39, 0x33, 0x75, 0xd9, 0x44, 0x03, 0xe7, 0x41, 0x8b, 0xcc, 0xba, 0x01, 0x00, 0x00, 0x00, 0xe8, 0x68, 0x65, 0xff, 0xff, 0x48, 0x8b, 0x4c, 0x24, 0x58, 0x48, 0x89, 0x01, 0x48, 0x85, 0xc0, 0x75, 0x4b, 0x49, 0x8b, 0x0f, 0xe8, 0xe7, 0x66, 0xff, 0xff, 0x45, 0x33, 0xf6, 0x4d, 0x89, 0x37, 0xe8, 0x54, 0x64, 0xff, 0xff, 0xc7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xe8, 0x69, 0x64, 0xff, 0xff, 0x83, 0xce, 0xff, 0xc7, 0x00, 0x08, 0x00, 0x00, 0x00, 0xe9, 0x09, 0x02, 0x00, 0x00, 0xc7, 0x44, 0x24, 0x34, 0x01, 0x00, 0x00, 0x00, 0xeb, 0xb0, 0x44, 0x8b, 0x64, 0x24, 0x30, 0x4d, 0x89, 0x75, 0x00, 0x44, 0x8b, 0x6c, 0x24, 0x30, 0x44, 0x8b, 0x74, 0x24, 0x30, 0xeb, 0x05, 0x44, 0x8b, 0x64, 0x24, 0x40, 0x48, 0x8b, 0x7c, 0x24, 0x60, 0x49, 0x8b, 0x1f, 0x4c, 0x8b, 0x07, 0x4d, 0x85, 0xc0, 0x75, 0x05, 0x48, 0xff, 0xc3, 0xeb, 0x38, 0x48, 0x8b, 0x54, 0x24, 0x48, 0x48, 0x8b, 0xcb, 0xe8, 0x01, 0xb8, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x14, 0x48, 0x21, 0x74, 0x24, 0x20, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0xe5, 0x61, 0xff, 0xff, 0x48, 0x8b, 0x0f, 0xe8, 0x6d, 0x94, 0xff, 0xff, 0xff, 0xc0, 0x48, 0x98, 0x48, 0x03, 0xd8, 0x48, 0x83, 0xc7, 0x08, 0x48, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x74, 0x56, 0x48, 0x8b, 0x74, 0x24, 0x48, 0x49, 0x8b, 0x17, 0x4c, 0x8b, 0xc0, 0x48, 0x8b, 0xcb, 0x48, 0x2b, 0xd3, 0x48, 0x03, 0xd6, 0xe8, 0xb5, 0xb7, 0xff, 0xff, 0x85, 0xc0, 0x74, 0x15, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xe8, 0x98, 0x61, 0xff, 0xff, 0x48, 0x8b, 0x0f, 0xe8, 0x20, 0x94, 0xff, 0xff, 0x48, 0x83, 0xc7, 0x08, 0x48, 0x63, 0xc8, 0x48, 0x03, 0xd9, 0xc6, 0x03, 0x20, 0x48, 0x8b, 0x07, 0x48, 0xff, 0xc3, 0x48, 0x85, 0xc0, 0x75, 0xb3, 0x8b, 0x74, 0x24, 0x30, 0x4c, 0x8b, 0x7c, 0x24, 0x58, 0xc6, 0x43, 0xff, 0x00, 0xc6, 0x03, 0x00, 0x49, 0x8b, 0x3f, 0x48, 0x85, 0xed, 0x0f, 0x84, 0x0c, 0x01, 0x00, 0x00, 0x45, 0x2b, 0xf5, 0x49, 0x63, 0xd5, 0x48, 0x8b, 0xcf, 0x48, 0x03, 0x15, 0x7c, 0x59, 0x00, 0x00, 0x49, 0x63, 0xde, 0x4c, 0x8b, 0xc3, 0xe8, 0xe1, 0xaf, 0xff, 0xff, 0x45, 0x33, 0xf6, 0x48, 0x03, 0xfb, 0x4c, 0x39, 0x75, 0x00, 0x74, 0x4b, 0x41, 0x8b, 0xdc, 0x4c, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0xd3, 0x48, 0x8b, 0xcf, 0x48, 0x2b, 0xd7, 0x49, 0x03, 0x17, 0xe8, 0x21, 0xb7, 0xff, 0xff, 0x41, 0x3b, 0xc6, 0x74, 0x14, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x4c, 0x89, 0x74, 0x24, 0x20, 0xe8, 0x04, 0x61, 0xff, 0xff, 0x48, 0x8b, 0x4d, 0x00, 0xe8, 0x8b, 0x93, 0xff, 0xff, 0x48, 0x83, 0xc5, 0x08, 0xff, 0xc0, 0x48, 0x98, 0x48, 0x03, 0xf8, 0x4c, 0x39, 0x75, 0x00, 0x75, 0xb8, 0x44, 0x39, 0x74, 0x24, 0x34, 0x0f, 0x85, 0x92, 0x00, 0x00, 0x00, 0x48, 0x63, 0x5c, 0x24, 0x50, 0x4c, 0x8d, 0x44, 0x24, 0x68, 0x48, 0x8b, 0xcf, 0x48, 0x8b, 0xd3, 0xe8, 0xce, 0xb6, 0xff, 0xff, 0x41, 0x3b, 0xc6, 0x74, 0x14, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x4c, 0x89, 0x74, 0x24, 0x20, 0xe8, 0xb1, 0x60, 0xff, 0xff, 0x4c, 0x8d, 0x05, 0x3a, 0x18, 0x00, 0x00, 0x48, 0x8b, 0xd3, 0x48, 0x8b, 0xcf, 0xe8, 0x3f, 0xb5, 0xff, 0xff, 0x41, 0x3b, 0xc6, 0x74, 0x14, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x4c, 0x89, 0x74, 0x24, 0x20, 0xe8, 0x86, 0x60, 0xff, 0xff, 0x48, 0x8b, 0x4c, 0x24, 0x38, 0x49, 0x3b, 0xce, 0x74, 0x27, 0x4c, 0x8b, 0xc1, 0x48, 0x8b, 0xd3, 0x48, 0x8b, 0xcf, 0xe8, 0x0e, 0xb5, 0xff, 0xff, 0x41, 0x3b, 0xc6, 0x74, 0x14, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x4c, 0x89, 0x74, 0x24, 0x20, 0xe8, 0x55, 0x60, 0xff, 0xff, 0x48, 0x03, 0xfb, 0xeb, 0x03, 0x45, 0x33, 0xf6, 0x49, 0x3b, 0xfe, 0x74, 0x0e, 0x49, 0x3b, 0x3f, 0x75, 0x06, 0x44, 0x88, 0x37, 0x48, 0xff, 0xc7, 0x44, 0x88, 0x37, 0x48, 0x8b, 0x0d, 0x63, 0x58, 0x00, 0x00, 0x49, 0x3b, 0xce, 0x74, 0x05, 0xe8, 0xa9, 0x64, 0xff, 0xff, 0x48, 0x8b, 0x4c, 0x24, 0x38, 0x4c, 0x89, 0x35, 0x4d, 0x58, 0x00, 0x00, 0x49, 0x3b, 0xce, 0x74, 0x05, 0xe8, 0x93, 0x64, 0xff, 0xff, 0x8b, 0xc6, 0x48, 0x8b, 0x4c, 0x24, 0x78, 0x48, 0x33, 0xcc, 0xe8, 0xd4, 0x45, 0xff, 0xff, 0x48, 0x81, 0xc4, 0x88, 0x00, 0x00, 0x00, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0x5d, 0x5b, 0xc3, 0x40, 0x53, 0x48, 0x83, 0xec, 0x30, 0x8b, 0xda, 0x48, 0x85, 0xc9, 0x75, 0x2d, 0xe8, 0xf6, 0x61, 0xff, 0xff, 0x83, 0x20, 0x00, 0xe8, 0xce, 0x61, 0xff, 0xff, 0x48, 0x83, 0x64, 0x24, 0x20, 0x00, 0xbb, 0x16, 0x00, 0x00, 0x00, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x89, 0x18, 0xe8, 0xe2, 0x60, 0xff, 0xff, 0x8b, 0xc3, 0xeb, 0x50, 0xf7, 0xc2, 0xf9, 0xff, 0xff, 0xff, 0x75, 0xcb, 0xff, 0x15, 0xb8, 0x14, 0x00, 0x00, 0x83, 0xf8, 0xff, 0x75, 0x16, 0xff, 0x15, 0x05, 0x13, 0x00, 0x00, 0x8b, 0xc8, 0xe8, 0xce, 0x61, 0xff, 0xff, 0xe8, 0x89, 0x61, 0xff, 0xff, 0x8b, 0x00, 0xeb, 0x27, 0xa8, 0x10, 0x75, 0x21, 0xa8, 0x01, 0x74, 0x1d, 0xf6, 0xc3, 0x02, 0x74, 0x18, 0xe8, 0x93, 0x61, 0xff, 0xff, 0xc7, 0x00, 0x05, 0x00, 0x00, 0x00, 0xe8, 0x68, 0x61, 0xff, 0xff, 0xc7, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xeb, 0xd2, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x30, 0x5b, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x50, 0x48, 0x8b, 0xd9, 0x8b, 0xf2, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0x49, 0x8b, 0xd0, 0x33, 0xff, 0xe8, 0x2d, 0x45, 0xff, 0xff, 0x48, 0x85, 0xdb, 0x75, 0x36, 0xe8, 0x2b, 0x61, 0xff, 0xff, 0x48, 0x21, 0x7c, 0x24, 0x20, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x41, 0x60, 0xff, 0xff, 0x40, 0x38, 0x7c, 0x24, 0x48, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x33, 0xc0, 0xeb, 0x7f, 0x4c, 0x8b, 0x44, 0x24, 0x38, 0x41, 0x39, 0x78, 0x08, 0x75, 0x1f, 0x8b, 0xd6, 0x48, 0x8b, 0xcb, 0xe8, 0x51, 0x02, 0x00, 0x00, 0x40, 0x38, 0x7c, 0x24, 0x48, 0x74, 0x63, 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xeb, 0x55, 0x0f, 0xb6, 0x0b, 0x48, 0x8b, 0xd1, 0x42, 0xf6, 0x44, 0x01, 0x1d, 0x04, 0x74, 0x25, 0x48, 0xff, 0xc3, 0x8a, 0x0b, 0x84, 0xc9, 0x74, 0x12, 0xc1, 0xe2, 0x08, 0x0f, 0xb6, 0xc1, 0x0b, 0xd0, 0x3b, 0xf2, 0x75, 0x16, 0x48, 0x8d, 0x7b, 0xff, 0xeb, 0x10, 0x48, 0x85, 0xff, 0x75, 0x0b, 0x48, 0x8b, 0xfb, 0xeb, 0x06, 0x3b, 0xf1, 0x48, 0x0f, 0x44, 0xfb, 0x48, 0xff, 0xc3, 0x84, 0xc9, 0x75, 0xc0, 0x38, 0x4c, 0x24, 0x48, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0xc7, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x74, 0x24, 0x68, 0x48, 0x83, 0xc4, 0x50, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x45, 0x33, 0xc0, 0xe9, 0x08, 0xff, 0xff, 0xff, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x50, 0x33, 0xed, 0x49, 0x8b, 0xf0, 0x48, 0x8b, 0xfa, 0x48, 0x8b, 0xd9, 0x4c, 0x3b, 0xc5, 0x75, 0x07, 0x33, 0xc0, 0xe9, 0x83, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x30, 0x49, 0x8b, 0xd1, 0xe8, 0x20, 0x44, 0xff, 0xff, 0x4c, 0x8b, 0x5c, 0x24, 0x38, 0x41, 0x39, 0x6b, 0x08, 0x75, 0x13, 0x4c, 0x8b, 0xc6, 0x48, 0x8b, 0xd7, 0x48, 0x8b, 0xcb, 0xe8, 0xf7, 0xcb, 0xff, 0xff, 0xe9, 0x45, 0x01, 0x00, 0x00, 0x48, 0x3b, 0xdd, 0x75, 0x3c, 0xe8, 0x00, 0x60, 0xff, 0xff, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0x48, 0x89, 0x6c, 0x24, 0x20, 0xc7, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe8, 0x16, 0x5f, 0xff, 0xff, 0x40, 0x38, 0x6c, 0x24, 0x48, 0x74, 0x0c, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xb8, 0xff, 0xff, 0xff, 0x7f, 0xe9, 0x17, 0x01, 0x00, 0x00, 0x48, 0x3b, 0xfd, 0x74, 0xbf, 0x0f, 0xb6, 0x0b, 0x48, 0xff, 0xce, 0x48, 0xff, 0xc3, 0x42, 0xf6, 0x44, 0x19, 0x1d, 0x04, 0x74, 0x41, 0x40, 0x38, 0x2b, 0x75, 0x05, 0x66, 0x8b, 0xcd, 0xeb, 0x4b, 0x0f, 0xb6, 0x03, 0x66, 0xc1, 0xe1, 0x08, 0x48, 0xff, 0xc3, 0x66, 0x0b, 0xc8, 0x66, 0x41, 0x3b, 0x4b, 0x10, 0x72, 0x0e, 0x66, 0x41, 0x3b, 0x4b, 0x12, 0x77, 0x07, 0x66, 0x41, 0x03, 0x4b, 0x14, 0xeb, 0x29, 0x66, 0x41, 0x3b, 0x4b, 0x16, 0x72, 0x22, 0x66, 0x41, 0x3b, 0x4b, 0x18, 0x77, 0x1b, 0x66, 0x41, 0x03, 0x4b, 0x1a, 0xeb, 0x14, 0x0f, 0xb7, 0xc1, 0x42, 0xf6, 0x44, 0x18, 0x1d, 0x10, 0x74, 0x09, 0x42, 0x0f, 0xb6, 0x8c, 0x18, 0x1d, 0x01, 0x00, 0x00, 0x0f, 0xb6, 0x17, 0x48, 0xff, 0xc7, 0x42, 0xf6, 0x44, 0x1a, 0x1d, 0x04, 0x74, 0x41, 0x40, 0x38, 0x2f, 0x75, 0x05, 0x66, 0x8b, 0xd5, 0xeb, 0x4b, 0x0f, 0xb6, 0x07, 0x66, 0xc1, 0xe2, 0x08, 0x48, 0xff, 0xc7, 0x66, 0x0b, 0xd0, 0x66, 0x41, 0x3b, 0x53, 0x10, 0x72, 0x0e, 0x66, 0x41, 0x3b, 0x53, 0x12, 0x77, 0x07, 0x66, 0x41, 0x03, 0x53, 0x14, 0xeb, 0x29, 0x66, 0x41, 0x3b, 0x53, 0x16, 0x72, 0x22, 0x66, 0x41, 0x3b, 0x53, 0x18, 0x77, 0x1b, 0x66, 0x41, 0x03, 0x53, 0x1a, 0xeb, 0x14, 0x0f, 0xb7, 0xc2, 0x42, 0xf6, 0x44, 0x18, 0x1d, 0x10, 0x74, 0x09, 0x42, 0x0f, 0xb6, 0x94, 0x18, 0x1d, 0x01, 0x00, 0x00, 0x66, 0x3b, 0xd1, 0x75, 0x2a, 0x66, 0x3b, 0xcd, 0x74, 0x09, 0x48, 0x3b, 0xf5, 0x0f, 0x85, 0x24, 0xff, 0xff, 0xff, 0x40, 0x38, 0x6c, 0x24, 0x48, 0x0f, 0x84, 0xa1, 0xfe, 0xff, 0xff, 0x48, 0x8b, 0x44, 0x24, 0x40, 0x83, 0xa0, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0xe9, 0x90, 0xfe, 0xff, 0xff, 0x1b, 0xc0, 0x83, 0xe0, 0x02, 0xff, 0xc8, 0x40, 0x38, 0x6c, 0x24, 0x48, 0x74, 0x0c, 0x48, 0x8b, 0x4c, 0x24, 0x40, 0x83, 0xa1, 0xc8, 0x00, 0x00, 0x00, 0xfd, 0x48, 0x8b, 0x5c, 0x24, 0x60, 0x48, 0x8b, 0x6c, 0x24, 0x68, 0x48, 0x8b, 0x74, 0x24, 0x70, 0x48, 0x83, 0xc4, 0x50, 0x5f, 0xc3, 0xcc, 0x45, 0x33, 0xc9, 0xe9, 0x34, 0xfe, 0xff, 0xff, 0x4c, 0x8b, 0xc9, 0x45, 0x33, 0xc0, 0x8a, 0x01, 0x48, 0xff, 0xc1, 0x41, 0x3a, 0xc0, 0x75, 0xf6, 0x48, 0xff, 0xc9, 0x49, 0x3b, 0xc9, 0x74, 0x04, 0x38, 0x11, 0x75, 0xf4, 0x38, 0x11, 0x4c, 0x0f, 0x44, 0xc1, 0x49, 0x8b, 0xc0, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xec, 0x10, 0x4c, 0x89, 0x14, 0x24, 0x4c, 0x89, 0x5c, 0x24, 0x08, 0x4d, 0x33, 0xdb, 0x4c, 0x8d, 0x54, 0x24, 0x18, 0x4c, 0x2b, 0xd0, 0x4d, 0x0f, 0x42, 0xd3, 0x65, 0x4c, 0x8b, 0x1c, 0x25, 0x10, 0x00, 0x00, 0x00, 0x4d, 0x3b, 0xd3, 0x73, 0x16, 0x66, 0x41, 0x81, 0xe2, 0x00, 0xf0, 0x4d, 0x8d, 0x9b, 0x00, 0xf0, 0xff, 0xff, 0x41, 0xc6, 0x03, 0x00, 0x4d, 0x3b, 0xd3, 0x75, 0xf0, 0x4c, 0x8b, 0x14, 0x24, 0x4c, 0x8b, 0x5c, 0x24, 0x08, 0x48, 0x83, 0xc4, 0x10, 0xc3, 0xcc, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x30, 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x4d, 0x60, 0xe8, 0x92, 0x3a, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x30, 0x5d, 0xc3, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0x83, 0xbd, 0x80, 0x00, 0x00, 0x00, 0x00, 0x74, 0x0a, 0xb9, 0x08, 0x00, 0x00, 0x00, 0xe8, 0x20, 0x64, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x01, 0x48, 0x8b, 0xd1, 0x8b, 0x08, 0xe8, 0xb8, 0x80, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0xb9, 0x01, 0x00, 0x00, 0x00, 0xe8, 0xeb, 0x63, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0x48, 0x63, 0x4d, 0x20, 0x48, 0x8b, 0xc1, 0x48, 0x8b, 0x15, 0xda, 0x63, 0x00, 0x00, 0x48, 0x8b, 0x14, 0xca, 0xe8, 0x6d, 0x3a, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0xb9, 0x01, 0x00, 0x00, 0x00, 0xe8, 0xa2, 0x63, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x0d, 0x38, 0x44, 0x00, 0x00, 0xff, 0x15, 0x0a, 0x0e, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0xb9, 0x0d, 0x00, 0x00, 0x00, 0xe8, 0x6d, 0x63, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0xb9, 0x0c, 0x00, 0x00, 0x00, 0xe8, 0x54, 0x63, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0xb9, 0x0d, 0x00, 0x00, 0x00, 0xe8, 0x3b, 0x63, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0xb9, 0x0c, 0x00, 0x00, 0x00, 0xe8, 0x1b, 0x63, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0xe8, 0xdb, 0x43, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x01, 0x33, 0xc9, 0x81, 0x38, 0x05, 0x00, 0x00, 0xc0, 0x0f, 0x94, 0xc1, 0x8b, 0xc1, 0x8b, 0xc1, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0x40, 0x55, 0x48, 0x83, 0xec, 0x30, 0x48, 0x8b, 0xea, 0x83, 0x7d, 0x70, 0x00, 0x74, 0x07, 0x33, 0xc9, 0xe8, 0xbd, 0x62, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x30, 0x5d, 0xc3, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x01, 0x45, 0x33, 0xdb, 0x81, 0x38, 0x17, 0x00, 0x00, 0xc0, 0x41, 0x0f, 0x94, 0xc3, 0x41, 0x8b, 0xc3, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0x40, 0x55, 0x48, 0x83, 0xec, 0x30, 0x48, 0x8b, 0xea, 0x48, 0x8b, 0x4d, 0x40, 0xe8, 0xd3, 0x38, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x30, 0x5d, 0xc3, 0x40, 0x55, 0x48, 0x83, 0xec, 0x30, 0x48, 0x8b, 0xea, 0x8b, 0x4d, 0x50, 0xe8, 0x80, 0xc1, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x30, 0x5d, 0xc3, 0x40, 0x55, 0x48, 0x83, 0xec, 0x30, 0x48, 0x8b, 0xea, 0x8b, 0x4d, 0x60, 0xe8, 0x69, 0xc1, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x30, 0x5d, 0xc3, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0xb9, 0x0a, 0x00, 0x00, 0x00, 0xe8, 0x3c, 0x62, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0xb9, 0x0a, 0x00, 0x00, 0x00, 0xe8, 0x23, 0x62, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x40, 0x55, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xea, 0xb9, 0x0b, 0x00, 0x00, 0x00, 0xe8, 0x03, 0x62, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x20, 0x5d, 0xc3, 0x40, 0x55, 0x48, 0x83, 0xec, 0x30, 0x48, 0x8b, 0xea, 0xb9, 0x07, 0x00, 0x00, 0x00, 0xe8, 0xea, 0x61, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x30, 0x5d, 0xc3, 0x40, 0x55, 0x48, 0x83, 0xec, 0x40, 0x48, 0x8b, 0xea, 0x83, 0x7d, 0x44, 0x00, 0x74, 0x37, 0x83, 0x7d, 0x48, 0x00, 0x74, 0x27, 0x48, 0x63, 0x55, 0x40, 0x48, 0x8b, 0xca, 0x48, 0x8b, 0xc2, 0x48, 0xc1, 0xf8, 0x05, 0x4c, 0x8d, 0x05, 0x86, 0x5f, 0x00, 0x00, 0x83, 0xe1, 0x1f, 0x48, 0x6b, 0xc9, 0x58, 0x49, 0x8b, 0x04, 0xc0, 0x80, 0x64, 0x08, 0x08, 0xfe, 0xeb, 0x03, 0x8b, 0x55, 0x40, 0x8b, 0xca, 0xe8, 0xb2, 0xc0, 0xff, 0xff, 0x48, 0x83, 0xc4, 0x40, 0x5d, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x13, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc4, 0x13, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda, 0x13, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x13, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe2, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x1a, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x53, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x54, 0x5f, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0xa8, 0x67, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xab, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x1b, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x65, 0x74, 0x20, 0x65, 0x78, 0x69, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x2e, 0x0a, 0x00, 0x00, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x2e, 0x0a, 0x00, 0x00, 0x20, 0x25, 0x73, 0x00, 0x25, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x65, 0x63, 0x20, 0x25, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x20, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x25, 0x73, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x21, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2e, 0x65, 0x78, 0x65, 0x00, 0x00, 0x00, 0x00, 0x23, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x25, 0x73, 0x0a, 0x00, 0x2d, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x70, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x6f, 0x72, 0x45, 0x78, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x00, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00, 0x65, 0x00, 0x2e, 0x00, 0x64, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x28, 0x00, 0x6e, 0x00, 0x75, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x03, 0x06, 0x00, 0x06, 0x02, 0x10, 0x04, 0x45, 0x45, 0x45, 0x05, 0x05, 0x05, 0x05, 0x05, 0x35, 0x30, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x28, 0x20, 0x38, 0x50, 0x58, 0x07, 0x08, 0x00, 0x37, 0x30, 0x30, 0x57, 0x50, 0x07, 0x00, 0x00, 0x20, 0x20, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x60, 0x68, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x78, 0x70, 0x78, 0x78, 0x78, 0x78, 0x08, 0x07, 0x08, 0x00, 0x00, 0x07, 0x00, 0x08, 0x08, 0x08, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xb0, 0x38, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x4c, 0x4f, 0x53, 0x53, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x53, 0x49, 0x4e, 0x47, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0d, 0x0a, 0x00, 0x00, 0x52, 0x36, 0x30, 0x33, 0x34, 0x0d, 0x0a, 0x41, 0x6e, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x61, 0x73, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x2e, 0x0a, 0x50, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x73, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x65, 0x61, 0x6d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x36, 0x30, 0x33, 0x33, 0x0d, 0x0a, 0x2d, 0x20, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x20, 0x4d, 0x53, 0x49, 0x4c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x61, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x79, 0x20, 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x62, 0x75, 0x67, 0x20, 0x69, 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x4d, 0x53, 0x49, 0x4c, 0x2d, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x28, 0x2f, 0x63, 0x6c, 0x72, 0x29, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x6f, 0x72, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x44, 0x6c, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x2e, 0x0d, 0x0a, 0x00, 0x00, 0x52, 0x36, 0x30, 0x33, 0x32, 0x0d, 0x0a, 0x2d, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x36, 0x30, 0x33, 0x31, 0x0d, 0x0a, 0x2d, 0x20, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x52, 0x54, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x6e, 0x63, 0x65, 0x2e, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x62, 0x75, 0x67, 0x20, 0x69, 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x36, 0x30, 0x33, 0x30, 0x0d, 0x0a, 0x2d, 0x20, 0x43, 0x52, 0x54, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x0d, 0x0a, 0x00, 0x00, 0x52, 0x36, 0x30, 0x32, 0x38, 0x0d, 0x0a, 0x2d, 0x20, 0x75, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x20, 0x68, 0x65, 0x61, 0x70, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x52, 0x36, 0x30, 0x32, 0x37, 0x0d, 0x0a, 0x2d, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x6f, 0x77, 0x69, 0x6f, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x52, 0x36, 0x30, 0x32, 0x36, 0x0d, 0x0a, 0x2d, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x74, 0x64, 0x69, 0x6f, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x52, 0x36, 0x30, 0x32, 0x35, 0x0d, 0x0a, 0x2d, 0x20, 0x70, 0x75, 0x72, 0x65, 0x20, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x52, 0x36, 0x30, 0x32, 0x34, 0x0d, 0x0a, 0x2d, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x5f, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x74, 0x2f, 0x61, 0x74, 0x65, 0x78, 0x69, 0x74, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x52, 0x36, 0x30, 0x31, 0x39, 0x0d, 0x0a, 0x2d, 0x20, 0x75, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x20, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x36, 0x30, 0x31, 0x38, 0x0d, 0x0a, 0x2d, 0x20, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x68, 0x65, 0x61, 0x70, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x36, 0x30, 0x31, 0x37, 0x0d, 0x0a, 0x2d, 0x20, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x52, 0x36, 0x30, 0x31, 0x36, 0x0d, 0x0a, 0x2d, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x61, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x69, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x75, 0x6e, 0x75, 0x73, 0x75, 0x61, 0x6c, 0x20, 0x77, 0x61, 0x79, 0x2e, 0x0a, 0x50, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x73, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x65, 0x61, 0x6d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x52, 0x36, 0x30, 0x30, 0x39, 0x0d, 0x0a, 0x2d, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x36, 0x30, 0x30, 0x38, 0x0d, 0x0a, 0x2d, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x36, 0x30, 0x30, 0x32, 0x0d, 0x0a, 0x2d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x56, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x2e, 0x2e, 0x2e, 0x00, 0x3c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x3e, 0x00, 0x00, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x21, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x3a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xc0, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0xc0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0xc0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x80, 0x86, 0x80, 0x81, 0x80, 0x00, 0x00, 0x10, 0x03, 0x86, 0x80, 0x86, 0x82, 0x80, 0x14, 0x05, 0x05, 0x45, 0x45, 0x45, 0x85, 0x85, 0x85, 0x05, 0x00, 0x00, 0x30, 0x30, 0x80, 0x50, 0x80, 0x88, 0x00, 0x08, 0x00, 0x28, 0x27, 0x38, 0x50, 0x57, 0x80, 0x00, 0x07, 0x00, 0x37, 0x30, 0x30, 0x50, 0x50, 0x88, 0x00, 0x00, 0x00, 0x20, 0x28, 0x80, 0x88, 0x80, 0x80, 0x00, 0x00, 0x00, 0x60, 0x68, 0x60, 0x68, 0x68, 0x68, 0x08, 0x08, 0x07, 0x78, 0x70, 0x70, 0x77, 0x70, 0x70, 0x08, 0x08, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x48, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x81, 0x00, 0x81, 0x00, 0x81, 0x00, 0x81, 0x00, 0x81, 0x00, 0x81, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x68, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x48, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x81, 0x01, 0x81, 0x01, 0x81, 0x01, 0x81, 0x01, 0x81, 0x01, 0x81, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x82, 0x01, 0x82, 0x01, 0x82, 0x01, 0x82, 0x01, 0x82, 0x01, 0x82, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x48, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x14, 0x00, 0x14, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x14, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x10, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x64, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x4d, 0x2f, 0x64, 0x64, 0x2f, 0x79, 0x79, 0x00, 0x00, 0x00, 0x00, 0x50, 0x4d, 0x00, 0x00, 0x41, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x65, 0x63, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x6f, 0x76, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x63, 0x74, 0x6f, 0x62, 0x65, 0x72, 0x00, 0x53, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x00, 0x00, 0x00, 0x41, 0x75, 0x67, 0x75, 0x73, 0x74, 0x00, 0x00, 0x4a, 0x75, 0x6c, 0x79, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x75, 0x6e, 0x65, 0x00, 0x00, 0x00, 0x00, 0x41, 0x70, 0x72, 0x69, 0x6c, 0x00, 0x00, 0x00, 0x4d, 0x61, 0x72, 0x63, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x79, 0x00, 0x44, 0x65, 0x63, 0x00, 0x4e, 0x6f, 0x76, 0x00, 0x4f, 0x63, 0x74, 0x00, 0x53, 0x65, 0x70, 0x00, 0x41, 0x75, 0x67, 0x00, 0x4a, 0x75, 0x6c, 0x00, 0x4a, 0x75, 0x6e, 0x00, 0x4d, 0x61, 0x79, 0x00, 0x41, 0x70, 0x72, 0x00, 0x4d, 0x61, 0x72, 0x00, 0x46, 0x65, 0x62, 0x00, 0x4a, 0x61, 0x6e, 0x00, 0x53, 0x61, 0x74, 0x75, 0x72, 0x64, 0x61, 0x79, 0x00, 0x00, 0x00, 0x00, 0x46, 0x72, 0x69, 0x64, 0x61, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x68, 0x75, 0x72, 0x73, 0x64, 0x61, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x65, 0x64, 0x6e, 0x65, 0x73, 0x64, 0x61, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x75, 0x65, 0x73, 0x64, 0x61, 0x79, 0x00, 0x4d, 0x6f, 0x6e, 0x64, 0x61, 0x79, 0x00, 0x00, 0x53, 0x75, 0x6e, 0x64, 0x61, 0x79, 0x00, 0x00, 0x53, 0x61, 0x74, 0x00, 0x46, 0x72, 0x69, 0x00, 0x54, 0x68, 0x75, 0x00, 0x57, 0x65, 0x64, 0x00, 0x54, 0x75, 0x65, 0x00, 0x4d, 0x6f, 0x6e, 0x00, 0x53, 0x75, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x6f, 0x70, 0x75, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x00, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x6f, 0x78, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x53, 0x45, 0x52, 0x33, 0x32, 0x2e, 0x44, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x75, 0x6e, 0x4d, 0x6f, 0x6e, 0x54, 0x75, 0x65, 0x57, 0x65, 0x64, 0x54, 0x68, 0x75, 0x46, 0x72, 0x69, 0x53, 0x61, 0x74, 0x00, 0x00, 0x00, 0x4a, 0x61, 0x6e, 0x46, 0x65, 0x62, 0x4d, 0x61, 0x72, 0x41, 0x70, 0x72, 0x4d, 0x61, 0x79, 0x4a, 0x75, 0x6e, 0x4a, 0x75, 0x6c, 0x41, 0x75, 0x67, 0x53, 0x65, 0x70, 0x4f, 0x63, 0x74, 0x4e, 0x6f, 0x76, 0x44, 0x65, 0x63, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4f, 0x4e, 0x4f, 0x55, 0x54, 0x24, 0x00, 0x2e, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x65, 0x78, 0x65, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x62, 0x61, 0x74, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x63, 0x6d, 0x64, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x6f, 0x6f, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x0c, 0x00, 0x1e, 0x74, 0x0b, 0x00, 0x1e, 0x64, 0x0a, 0x00, 0x1e, 0x54, 0x09, 0x00, 0x1e, 0x34, 0x08, 0x00, 0x1e, 0x32, 0x1a, 0xe0, 0x18, 0xd0, 0x16, 0xc0, 0x19, 0x1f, 0x05, 0x00, 0x0d, 0x34, 0x90, 0x00, 0x0d, 0x01, 0x8c, 0x00, 0x06, 0x70, 0x00, 0x00, 0xa8, 0x1f, 0x00, 0x00, 0x50, 0x04, 0x00, 0x00, 0x01, 0x0d, 0x05, 0x00, 0x0d, 0x34, 0x1f, 0x00, 0x0d, 0x01, 0x1c, 0x00, 0x06, 0x70, 0x00, 0x00, 0x01, 0x18, 0x0a, 0x00, 0x18, 0x64, 0x0a, 0x00, 0x18, 0x54, 0x09, 0x00, 0x18, 0x34, 0x08, 0x00, 0x18, 0x32, 0x14, 0xd0, 0x12, 0xc0, 0x10, 0x70, 0x21, 0x00, 0x00, 0x00, 0xf0, 0x15, 0x00, 0x00, 0xda, 0x16, 0x00, 0x00, 0x3c, 0x07, 0x01, 0x00, 0x21, 0x00, 0x00, 0x00, 0xda, 0x16, 0x00, 0x00, 0xae, 0x17, 0x00, 0x00, 0x28, 0x07, 0x01, 0x00, 0x21, 0x00, 0x04, 0x00, 0x00, 0xd4, 0x48, 0x00, 0x00, 0xc4, 0x49, 0x00, 0xda, 0x16, 0x00, 0x00, 0xae, 0x17, 0x00, 0x00, 0x28, 0x07, 0x01, 0x00, 0x21, 0x1c, 0x06, 0x00, 0x1c, 0xd4, 0x48, 0x00, 0x14, 0xc4, 0x49, 0x00, 0x08, 0x64, 0x4a, 0x00, 0xda, 0x16, 0x00, 0x00, 0xae, 0x17, 0x00, 0x00, 0x28, 0x07, 0x01, 0x00, 0x21, 0x08, 0x02, 0x00, 0x08, 0x54, 0x52, 0x00, 0xf0, 0x15, 0x00, 0x00, 0xda, 0x16, 0x00, 0x00, 0x3c, 0x07, 0x01, 0x00, 0x19, 0x20, 0x06, 0x00, 0x0e, 0x01, 0x4b, 0x00, 0x07, 0xf0, 0x05, 0xe0, 0x03, 0x70, 0x02, 0x30, 0xa8, 0x1f, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x11, 0x1c, 0x05, 0x00, 0x1c, 0x62, 0x18, 0xc0, 0x16, 0x70, 0x15, 0x60, 0x14, 0x30, 0x00, 0x00, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x7c, 0x19, 0x00, 0x00, 0x49, 0x1a, 0x00, 0x00, 0x60, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x19, 0x0a, 0x00, 0x19, 0x34, 0x0f, 0x00, 0x19, 0x52, 0x15, 0xf0, 0x13, 0xe0, 0x11, 0xd0, 0x0f, 0xc0, 0x0d, 0x70, 0x0c, 0x60, 0x0b, 0x50, 0x01, 0x06, 0x02, 0x00, 0x06, 0x72, 0x02, 0x30, 0x01, 0x14, 0x02, 0x00, 0x14, 0xb2, 0x10, 0x30, 0x01, 0x06, 0x02, 0x00, 0x06, 0x32, 0x02, 0x30, 0x01, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x06, 0x00, 0x0f, 0x32, 0x0b, 0x70, 0x11, 0x1c, 0x0a, 0x00, 0x1c, 0x64, 0x0f, 0x00, 0x1c, 0x34, 0x0e, 0x00, 0x1c, 0x72, 0x18, 0xf0, 0x16, 0xe0, 0x14, 0xd0, 0x12, 0xc0, 0x10, 0x70, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe3, 0x27, 0x00, 0x00, 0xec, 0x28, 0x00, 0x00, 0x78, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x0a, 0x04, 0x00, 0x0a, 0x34, 0x09, 0x00, 0x0a, 0x52, 0x06, 0x70, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb7, 0x2a, 0x00, 0x00, 0x53, 0x2b, 0x00, 0x00, 0x9a, 0xe1, 0x00, 0x00, 0x53, 0x2b, 0x00, 0x00, 0x01, 0x04, 0x01, 0x00, 0x04, 0x42, 0x00, 0x00, 0x01, 0x20, 0x0c, 0x00, 0x20, 0x64, 0x11, 0x00, 0x20, 0x54, 0x10, 0x00, 0x20, 0x34, 0x0e, 0x00, 0x20, 0x72, 0x1c, 0xf0, 0x1a, 0xe0, 0x18, 0xd0, 0x16, 0xc0, 0x14, 0x70, 0x01, 0x10, 0x06, 0x00, 0x10, 0x74, 0x07, 0x00, 0x10, 0x34, 0x06, 0x00, 0x10, 0x32, 0x0c, 0xc0, 0x01, 0x09, 0x02, 0x00, 0x09, 0x32, 0x05, 0x30, 0x01, 0x18, 0x08, 0x00, 0x18, 0x64, 0x08, 0x00, 0x18, 0x54, 0x07, 0x00, 0x18, 0x34, 0x06, 0x00, 0x18, 0x32, 0x14, 0x70, 0x19, 0x29, 0x0b, 0x00, 0x17, 0x34, 0x64, 0x00, 0x17, 0x01, 0x5a, 0x00, 0x10, 0xf0, 0x0e, 0xe0, 0x0c, 0xd0, 0x0a, 0xc0, 0x08, 0x70, 0x07, 0x60, 0x06, 0x50, 0x00, 0x00, 0xa8, 0x1f, 0x00, 0x00, 0xc8, 0x02, 0x00, 0x00, 0x09, 0x20, 0x0d, 0x00, 0x20, 0xc4, 0x19, 0x00, 0x20, 0x74, 0x18, 0x00, 0x20, 0x64, 0x17, 0x00, 0x20, 0x34, 0x16, 0x00, 0x20, 0x01, 0x12, 0x00, 0x19, 0xf0, 0x17, 0xe0, 0x15, 0xd0, 0x00, 0x00, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x60, 0x3a, 0x00, 0x00, 0x6c, 0x3a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x3d, 0x00, 0x00, 0x01, 0x09, 0x03, 0x00, 0x09, 0x01, 0xbc, 0x00, 0x02, 0x30, 0x00, 0x00, 0x01, 0x19, 0x0a, 0x00, 0x19, 0x74, 0x09, 0x00, 0x19, 0x64, 0x08, 0x00, 0x19, 0x54, 0x07, 0x00, 0x19, 0x34, 0x06, 0x00, 0x19, 0x32, 0x15, 0xc0, 0x01, 0x0a, 0x02, 0x00, 0x0a, 0x32, 0x06, 0x30, 0x11, 0x10, 0x06, 0x00, 0x10, 0x64, 0x09, 0x00, 0x10, 0x34, 0x08, 0x00, 0x10, 0x52, 0x0c, 0xc0, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4b, 0x42, 0x00, 0x00, 0xc3, 0x42, 0x00, 0x00, 0xb6, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x19, 0x0a, 0x00, 0x19, 0xc4, 0x0c, 0x00, 0x19, 0x74, 0x0b, 0x00, 0x19, 0x64, 0x0a, 0x00, 0x19, 0x52, 0x15, 0xf0, 0x13, 0xe0, 0x11, 0xd0, 0x8c, 0x2b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x44, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0xcf, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0x43, 0x00, 0x00, 0x6a, 0x44, 0x00, 0x00, 0xff, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x15, 0x08, 0x00, 0x15, 0x74, 0x08, 0x00, 0x15, 0x64, 0x07, 0x00, 0x15, 0x34, 0x06, 0x00, 0x15, 0x32, 0x11, 0xc0, 0x01, 0x14, 0x08, 0x00, 0x14, 0x64, 0x08, 0x00, 0x14, 0x54, 0x07, 0x00, 0x14, 0x34, 0x06, 0x00, 0x14, 0x32, 0x10, 0x70, 0x11, 0x15, 0x08, 0x00, 0x15, 0x74, 0x08, 0x00, 0x15, 0x64, 0x07, 0x00, 0x15, 0x34, 0x06, 0x00, 0x15, 0x32, 0x11, 0xd0, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4f, 0x46, 0x00, 0x00, 0x8f, 0x46, 0x00, 0x00, 0x18, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x04, 0x00, 0x0a, 0x34, 0x08, 0x00, 0x0a, 0x52, 0x06, 0x70, 0x01, 0x14, 0x08, 0x00, 0x14, 0x64, 0x0a, 0x00, 0x14, 0x54, 0x09, 0x00, 0x14, 0x34, 0x08, 0x00, 0x14, 0x52, 0x10, 0x70, 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x0b, 0x00, 0x0f, 0x34, 0x0a, 0x00, 0x0f, 0x72, 0x0b, 0x70, 0x01, 0x0c, 0x02, 0x00, 0x0c, 0x01, 0x11, 0x00, 0x19, 0x24, 0x07, 0x00, 0x12, 0x64, 0xb4, 0x00, 0x12, 0x34, 0xb3, 0x00, 0x12, 0x01, 0xb0, 0x00, 0x0b, 0x70, 0x00, 0x00, 0xa8, 0x1f, 0x00, 0x00, 0x70, 0x05, 0x00, 0x00, 0x11, 0x0a, 0x04, 0x00, 0x0a, 0x34, 0x07, 0x00, 0x0a, 0x32, 0x06, 0x70, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xbe, 0x4d, 0x00, 0x00, 0x17, 0x4e, 0x00, 0x00, 0x34, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x1f, 0x08, 0x00, 0x10, 0x34, 0x10, 0x00, 0x10, 0x72, 0x0c, 0xd0, 0x0a, 0xc0, 0x08, 0x70, 0x07, 0x60, 0x06, 0x50, 0xa8, 0x1f, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x11, 0x19, 0x0a, 0x00, 0x19, 0xc4, 0x0b, 0x00, 0x19, 0x74, 0x0a, 0x00, 0x19, 0x64, 0x09, 0x00, 0x19, 0x34, 0x08, 0x00, 0x19, 0x52, 0x15, 0xd0, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2d, 0x52, 0x00, 0x00, 0xe7, 0x52, 0x00, 0x00, 0x34, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x06, 0x02, 0x00, 0x06, 0x32, 0x02, 0x30, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb7, 0x56, 0x00, 0x00, 0xcd, 0x56, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x04, 0x00, 0x0a, 0x34, 0x06, 0x00, 0x0a, 0x32, 0x06, 0x70, 0x8c, 0x2b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8a, 0x57, 0x00, 0x00, 0x95, 0x57, 0x00, 0x00, 0x66, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x57, 0x00, 0x00, 0xd1, 0x57, 0x00, 0x00, 0x86, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x13, 0x04, 0x00, 0x13, 0x34, 0x07, 0x00, 0x13, 0x32, 0x0f, 0x70, 0x8c, 0x2b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2e, 0x59, 0x00, 0x00, 0x5c, 0x59, 0x00, 0x00, 0x66, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x59, 0x00, 0x00, 0xa8, 0x59, 0x00, 0x00, 0x86, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x10, 0x00, 0x0f, 0x54, 0x0f, 0x00, 0x0f, 0xb2, 0x0b, 0x70, 0x01, 0x17, 0x08, 0x00, 0x17, 0x64, 0x09, 0x00, 0x17, 0x54, 0x08, 0x00, 0x17, 0x34, 0x07, 0x00, 0x17, 0x32, 0x13, 0x70, 0x01, 0x15, 0x08, 0x00, 0x15, 0xd4, 0x0b, 0x00, 0x15, 0x74, 0x0a, 0x00, 0x15, 0x34, 0x08, 0x00, 0x15, 0x52, 0x11, 0xe0, 0x11, 0x19, 0x0a, 0x00, 0x19, 0x74, 0x0a, 0x00, 0x19, 0x64, 0x09, 0x00, 0x19, 0x34, 0x08, 0x00, 0x19, 0x32, 0x15, 0xe0, 0x13, 0xd0, 0x11, 0xc0, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xba, 0x5f, 0x00, 0x00, 0x7b, 0x60, 0x00, 0x00, 0x9f, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x02, 0x00, 0x06, 0x32, 0x02, 0x50, 0x09, 0x04, 0x01, 0x00, 0x04, 0x42, 0x00, 0x00, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe7, 0x61, 0x00, 0x00, 0x1a, 0x62, 0x00, 0x00, 0xc0, 0xe2, 0x00, 0x00, 0x1a, 0x62, 0x00, 0x00, 0x09, 0x04, 0x01, 0x00, 0x04, 0x42, 0x00, 0x00, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x39, 0x62, 0x00, 0x00, 0x3d, 0x62, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3d, 0x62, 0x00, 0x00, 0x11, 0x17, 0x0a, 0x00, 0x17, 0x64, 0x10, 0x00, 0x17, 0x34, 0x0f, 0x00, 0x17, 0x72, 0x13, 0xf0, 0x11, 0xe0, 0x0f, 0xd0, 0x0d, 0xc0, 0x0b, 0x70, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x65, 0x00, 0x00, 0x73, 0x66, 0x00, 0x00, 0xe1, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x04, 0x01, 0x00, 0x04, 0x62, 0x00, 0x00, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf4, 0x66, 0x00, 0x00, 0x03, 0x67, 0x00, 0x00, 0xfd, 0xe2, 0x00, 0x00, 0x03, 0x67, 0x00, 0x00, 0x01, 0x1d, 0x0c, 0x00, 0x1d, 0x74, 0x0b, 0x00, 0x1d, 0x64, 0x0a, 0x00, 0x1d, 0x54, 0x09, 0x00, 0x1d, 0x34, 0x08, 0x00, 0x1d, 0x32, 0x19, 0xe0, 0x17, 0xd0, 0x15, 0xc0, 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x0b, 0x00, 0x0f, 0x34, 0x0a, 0x00, 0x0f, 0x52, 0x0b, 0x70, 0x01, 0x19, 0x0a, 0x00, 0x19, 0x74, 0x0d, 0x00, 0x19, 0x64, 0x0c, 0x00, 0x19, 0x54, 0x0b, 0x00, 0x19, 0x34, 0x0a, 0x00, 0x19, 0x72, 0x15, 0xc0, 0x01, 0x08, 0x01, 0x00, 0x08, 0x42, 0x00, 0x00, 0x01, 0x0a, 0x04, 0x00, 0x0a, 0x34, 0x08, 0x00, 0x0a, 0x32, 0x06, 0x70, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x02, 0x00, 0x07, 0x01, 0x9b, 0x00, 0x01, 0x04, 0x01, 0x00, 0x04, 0x62, 0x00, 0x00, 0x01, 0x12, 0x06, 0x00, 0x12, 0x34, 0x10, 0x00, 0x12, 0xb2, 0x0e, 0x70, 0x0d, 0x60, 0x0c, 0x50, 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x09, 0x00, 0x0f, 0x34, 0x08, 0x00, 0x0f, 0x52, 0x0b, 0x70, 0x11, 0x0f, 0x04, 0x00, 0x0f, 0x34, 0x09, 0x00, 0x0f, 0x52, 0x0b, 0x70, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x75, 0x00, 0x00, 0x01, 0x76, 0x00, 0x00, 0x1f, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x2f, 0x0b, 0x00, 0x1d, 0x34, 0x71, 0x03, 0x1d, 0x01, 0x66, 0x03, 0x10, 0xf0, 0x0e, 0xe0, 0x0c, 0xd0, 0x0a, 0xc0, 0x08, 0x70, 0x07, 0x60, 0x06, 0x50, 0x00, 0x00, 0xa8, 0x1f, 0x00, 0x00, 0x20, 0x1b, 0x00, 0x00, 0x11, 0x1b, 0x0a, 0x00, 0x1b, 0x64, 0x0e, 0x00, 0x1b, 0x34, 0x0d, 0x00, 0x1b, 0x52, 0x17, 0xf0, 0x15, 0xe0, 0x13, 0xd0, 0x11, 0xc0, 0x0f, 0x70, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x7e, 0x00, 0x00, 0x5d, 0x7e, 0x00, 0x00, 0x4e, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x06, 0x00, 0x11, 0x34, 0x0c, 0x00, 0x11, 0x52, 0x0d, 0xc0, 0x0b, 0x70, 0x0a, 0x60, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3f, 0x7f, 0x00, 0x00, 0x83, 0x7f, 0x00, 0x00, 0x37, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x04, 0x00, 0x0a, 0x34, 0x0c, 0x00, 0x0a, 0x92, 0x06, 0x70, 0x01, 0x18, 0x0a, 0x00, 0x18, 0x64, 0x10, 0x00, 0x18, 0x54, 0x0f, 0x00, 0x18, 0x34, 0x0e, 0x00, 0x18, 0x92, 0x14, 0xd0, 0x12, 0xc0, 0x10, 0x70, 0x19, 0x2d, 0x0d, 0x45, 0x1f, 0x74, 0x14, 0x00, 0x1b, 0x64, 0x13, 0x00, 0x17, 0x34, 0x12, 0x00, 0x13, 0x43, 0x0e, 0xb2, 0x0a, 0xf0, 0x08, 0xe0, 0x06, 0xd0, 0x04, 0xc0, 0x02, 0x50, 0x00, 0x00, 0xa8, 0x1f, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x11, 0x00, 0x0f, 0x34, 0x10, 0x00, 0x0f, 0xd2, 0x0b, 0x70, 0x19, 0x31, 0x0d, 0x35, 0x23, 0x74, 0x10, 0x00, 0x1f, 0x64, 0x0f, 0x00, 0x1b, 0x34, 0x0e, 0x00, 0x17, 0x33, 0x12, 0x72, 0x0e, 0xf0, 0x0c, 0xe0, 0x0a, 0xd0, 0x08, 0xc0, 0x06, 0x50, 0x00, 0x00, 0xa8, 0x1f, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x0f, 0x00, 0x0f, 0x34, 0x0e, 0x00, 0x0f, 0xb2, 0x0b, 0x70, 0x01, 0x0e, 0x02, 0x00, 0x0e, 0x32, 0x0a, 0x30, 0x01, 0x06, 0x02, 0x00, 0x06, 0x52, 0x02, 0x30, 0x11, 0x1b, 0x0a, 0x00, 0x1b, 0x64, 0x0e, 0x00, 0x1b, 0x34, 0x0d, 0x00, 0x1b, 0x52, 0x17, 0xf0, 0x15, 0xe0, 0x13, 0xd0, 0x11, 0xc0, 0x0f, 0x70, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd6, 0x96, 0x00, 0x00, 0x09, 0x97, 0x00, 0x00, 0x4e, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x16, 0x0a, 0x00, 0x16, 0x54, 0x0f, 0x00, 0x16, 0x34, 0x0e, 0x00, 0x16, 0x72, 0x12, 0xe0, 0x10, 0xd0, 0x0e, 0xc0, 0x0c, 0x70, 0x0b, 0x60, 0x01, 0x07, 0x02, 0x00, 0x07, 0x01, 0xb5, 0x00, 0x01, 0x1d, 0x0c, 0x00, 0x1d, 0x74, 0x11, 0x00, 0x1d, 0x64, 0x10, 0x00, 0x1d, 0x54, 0x0f, 0x00, 0x1d, 0x34, 0x0e, 0x00, 0x1d, 0x92, 0x19, 0xe0, 0x17, 0xd0, 0x15, 0xc0, 0x01, 0x0a, 0x04, 0x00, 0x0a, 0x34, 0x06, 0x00, 0x0a, 0x32, 0x06, 0x70, 0x11, 0x17, 0x08, 0x00, 0x17, 0x64, 0x0d, 0x00, 0x17, 0x34, 0x0c, 0x00, 0x17, 0x52, 0x13, 0xd0, 0x11, 0xc0, 0x0f, 0x70, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x9f, 0x00, 0x00, 0x28, 0x9f, 0x00, 0x00, 0x37, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x13, 0x01, 0x00, 0x04, 0xc2, 0x00, 0x00, 0xa8, 0x1f, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x04, 0x01, 0x00, 0x04, 0x12, 0x00, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x54, 0x07, 0x00, 0x0f, 0x34, 0x06, 0x00, 0x0f, 0x32, 0x0b, 0x70, 0x11, 0x19, 0x0a, 0x00, 0x19, 0xc4, 0x09, 0x00, 0x19, 0x74, 0x08, 0x00, 0x19, 0x64, 0x07, 0x00, 0x19, 0x34, 0x06, 0x00, 0x19, 0x32, 0x15, 0xd0, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6b, 0xa4, 0x00, 0x00, 0x8b, 0xa4, 0x00, 0x00, 0x65, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x19, 0x0a, 0x00, 0x19, 0xc4, 0x0e, 0x00, 0x19, 0x74, 0x0d, 0x00, 0x19, 0x34, 0x0c, 0x00, 0x19, 0x72, 0x15, 0xf0, 0x13, 0xe0, 0x11, 0xd0, 0x8c, 0x2b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8d, 0xa5, 0x00, 0x00, 0xb3, 0xa5, 0x00, 0x00, 0x7e, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0xa5, 0x00, 0x00, 0xe5, 0xa6, 0x00, 0x00, 0x9e, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x13, 0x01, 0x00, 0x04, 0x62, 0x00, 0x00, 0xa8, 0x1f, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x19, 0x27, 0x0b, 0x45, 0x19, 0x43, 0x14, 0x01, 0x11, 0x00, 0x0d, 0xf0, 0x0b, 0xe0, 0x09, 0xd0, 0x07, 0xc0, 0x05, 0x70, 0x04, 0x60, 0x03, 0x30, 0x02, 0x50, 0x00, 0x00, 0xa8, 0x1f, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x01, 0x04, 0x01, 0x00, 0x04, 0x82, 0x00, 0x00, 0x01, 0x06, 0x02, 0x00, 0x06, 0x52, 0x02, 0x50, 0x11, 0x15, 0x08, 0x00, 0x15, 0x74, 0x0a, 0x00, 0x15, 0x64, 0x09, 0x00, 0x15, 0x34, 0x08, 0x00, 0x15, 0x52, 0x11, 0xc0, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf1, 0xac, 0x00, 0x00, 0xd9, 0xad, 0x00, 0x00, 0xb7, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x04, 0x00, 0x0a, 0x54, 0x11, 0x00, 0x0a, 0xd2, 0x06, 0x70, 0x01, 0x14, 0x08, 0x00, 0x14, 0x64, 0x10, 0x00, 0x14, 0x54, 0x0f, 0x00, 0x14, 0x34, 0x0e, 0x00, 0x14, 0xb2, 0x10, 0x70, 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x54, 0x0c, 0x00, 0x0f, 0x34, 0x0b, 0x00, 0x0f, 0x72, 0x0b, 0x70, 0x19, 0x24, 0x0a, 0x35, 0x16, 0x33, 0x11, 0xc2, 0x0d, 0xf0, 0x0b, 0xe0, 0x09, 0xd0, 0x07, 0xc0, 0x05, 0x70, 0x04, 0x60, 0x03, 0x30, 0x02, 0x50, 0xa8, 0x1f, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x01, 0x18, 0x0a, 0x00, 0x18, 0x34, 0x10, 0x00, 0x18, 0x52, 0x14, 0xf0, 0x12, 0xe0, 0x10, 0xd0, 0x0e, 0xc0, 0x0c, 0x70, 0x0b, 0x60, 0x0a, 0x50, 0x01, 0x19, 0x09, 0x00, 0x19, 0xa2, 0x15, 0xf0, 0x13, 0xe0, 0x11, 0xd0, 0x0f, 0xc0, 0x0d, 0x70, 0x0c, 0x60, 0x0b, 0x50, 0x0a, 0x30, 0x00, 0x00, 0x11, 0x1b, 0x0a, 0x00, 0x1b, 0x64, 0x0e, 0x00, 0x1b, 0x34, 0x0d, 0x00, 0x1b, 0x52, 0x17, 0xf0, 0x15, 0xe0, 0x13, 0xd0, 0x11, 0xc0, 0x0f, 0x70, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0xc6, 0x00, 0x00, 0x3e, 0xc6, 0x00, 0x00, 0x4e, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x21, 0x0a, 0x00, 0x21, 0x34, 0x19, 0x00, 0x21, 0xf2, 0x1a, 0xf0, 0x18, 0xe0, 0x16, 0xd0, 0x14, 0xc0, 0x12, 0x70, 0x11, 0x60, 0x10, 0x50, 0x01, 0x06, 0x02, 0x00, 0x06, 0x72, 0x02, 0x50, 0x11, 0x14, 0x03, 0x00, 0x14, 0xa2, 0x10, 0x70, 0x0f, 0x60, 0x00, 0x00, 0x8c, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xef, 0xce, 0x00, 0x00, 0x1c, 0xcf, 0x00, 0x00, 0xd0, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1d, 0x0c, 0x00, 0x1d, 0x74, 0x0b, 0x00, 0x1d, 0x64, 0x0a, 0x00, 0x1d, 0x54, 0x09, 0x00, 0x1d, 0x34, 0x08, 0x00, 0x1d, 0x32, 0x19, 0xf0, 0x17, 0xd0, 0x15, 0xc0, 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x07, 0x00, 0x0f, 0x34, 0x06, 0x00, 0x0f, 0x32, 0x0b, 0x70, 0x01, 0x05, 0x02, 0x00, 0x05, 0x34, 0x01, 0x00, 0x01, 0x1c, 0x09, 0x00, 0x1c, 0x01, 0x1c, 0x00, 0x15, 0xf0, 0x13, 0xe0, 0x11, 0xd0, 0x0f, 0xc0, 0x0d, 0x70, 0x0c, 0x50, 0x0b, 0x30, 0x00, 0x00, 0x19, 0x23, 0x0a, 0x00, 0x14, 0x01, 0x11, 0x00, 0x0d, 0xf0, 0x0b, 0xe0, 0x09, 0xd0, 0x07, 0xc0, 0x05, 0x70, 0x04, 0x60, 0x03, 0x50, 0x02, 0x30, 0xa8, 0x1f, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x0f, 0x64, 0x0d, 0x00, 0x0f, 0x34, 0x0c, 0x00, 0x0f, 0x92, 0x0b, 0x70, 0x01, 0x14, 0x08, 0x00, 0x14, 0x64, 0x0e, 0x00, 0x14, 0x54, 0x0d, 0x00, 0x14, 0x34, 0x0c, 0x00, 0x14, 0x92, 0x10, 0x70, 0x18, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x19, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x13, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc4, 0x13, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda, 0x13, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x13, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe2, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x01, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x43, 0x74, 0x72, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x00, 0x00, 0xc7, 0x01, 0x47, 0x65, 0x74, 0x45, 0x78, 0x69, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x00, 0x00, 0x72, 0x04, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x00, 0x96, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x41, 0x00, 0x00, 0xb4, 0x03, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x43, 0x74, 0x72, 0x6c, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00, 0xf5, 0x01, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x00, 0x00, 0xdb, 0x00, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0xee, 0x02, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0xfa, 0x01, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x57, 0x00, 0x00, 0x2f, 0x04, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x00, 0x22, 0x02, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x00, 0x00, 0x06, 0x01, 0x45, 0x78, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x00, 0x71, 0x01, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4c, 0x69, 0x6e, 0x65, 0x41, 0x00, 0x9e, 0x03, 0x52, 0x74, 0x6c, 0x55, 0x6e, 0x77, 0x69, 0x6e, 0x64, 0x45, 0x78, 0x00, 0xf4, 0x03, 0x53, 0x65, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x00, 0x00, 0x3e, 0x02, 0x47, 0x65, 0x74, 0x53, 0x74, 0x64, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x00, 0x00, 0xd9, 0x01, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x00, 0x3c, 0x02, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x00, 0xc0, 0x00, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x3b, 0x04, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x00, 0x00, 0xab, 0x01, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x00, 0x4c, 0x04, 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x00, 0x00, 0x23, 0x04, 0x53, 0x65, 0x74, 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x00, 0xd0, 0x02, 0x49, 0x73, 0x44, 0x65, 0x62, 0x75, 0x67, 0x67, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x00, 0x9f, 0x03, 0x52, 0x74, 0x6c, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x55, 0x6e, 0x77, 0x69, 0x6e, 0x64, 0x00, 0x00, 0x98, 0x03, 0x52, 0x74, 0x6c, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x00, 0x00, 0x91, 0x03, 0x52, 0x74, 0x6c, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x00, 0xe7, 0x01, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x00, 0x00, 0xa6, 0x02, 0x48, 0x65, 0x61, 0x70, 0x46, 0x72, 0x65, 0x65, 0x00, 0x00, 0xa2, 0x02, 0x48, 0x65, 0x61, 0x70, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x5d, 0x01, 0x47, 0x65, 0x74, 0x43, 0x50, 0x49, 0x6e, 0x66, 0x6f, 0x00, 0x54, 0x01, 0x47, 0x65, 0x74, 0x41, 0x43, 0x50, 0x00, 0x00, 0x14, 0x02, 0x47, 0x65, 0x74, 0x4f, 0x45, 0x4d, 0x43, 0x50, 0x00, 0x00, 0xda, 0x02, 0x49, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x61, 0x67, 0x65, 0x00, 0xd7, 0x00, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x00, 0xb9, 0x00, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x00, 0x40, 0x01, 0x46, 0x6c, 0x73, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x00, 0x41, 0x01, 0x46, 0x6c, 0x73, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x00, 0x3f, 0x01, 0x46, 0x6c, 0x73, 0x46, 0x72, 0x65, 0x65, 0x00, 0xf8, 0x03, 0x53, 0x65, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x00, 0x00, 0xaf, 0x01, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x49, 0x64, 0x00, 0x00, 0x3e, 0x01, 0x46, 0x6c, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x00, 0x9b, 0x04, 0x57, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x00, 0xf0, 0x02, 0x4c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x41, 0x00, 0x00, 0xba, 0x02, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x53, 0x70, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x00, 0x4c, 0x01, 0x46, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x41, 0x00, 0xc1, 0x01, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x00, 0x4d, 0x01, 0x46, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x00, 0x88, 0x04, 0x57, 0x69, 0x64, 0x65, 0x43, 0x68, 0x61, 0x72, 0x54, 0x6f, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x42, 0x79, 0x74, 0x65, 0x00, 0xc3, 0x01, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x00, 0x00, 0xaa, 0x02, 0x48, 0x65, 0x61, 0x70, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0xa4, 0x02, 0x48, 0x65, 0x61, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x00, 0x00, 0x53, 0x03, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x00, 0x6a, 0x02, 0x47, 0x65, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x00, 0x00, 0xac, 0x01, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x49, 0x64, 0x00, 0x53, 0x02, 0x47, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x41, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x00, 0xa9, 0x02, 0x48, 0x65, 0x61, 0x70, 0x52, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x85, 0x01, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x43, 0x50, 0x00, 0x00, 0x97, 0x01, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x00, 0x00, 0x43, 0x01, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x00, 0x00, 0xe0, 0x02, 0x4c, 0x43, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x00, 0x00, 0x19, 0x03, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x42, 0x79, 0x74, 0x65, 0x54, 0x6f, 0x57, 0x69, 0x64, 0x65, 0x43, 0x68, 0x61, 0x72, 0x00, 0xe2, 0x02, 0x4c, 0x43, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x00, 0x00, 0x40, 0x02, 0x47, 0x65, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x41, 0x00, 0x00, 0x43, 0x02, 0x47, 0x65, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x57, 0x00, 0x00, 0xe9, 0x01, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x00, 0x00, 0xec, 0x03, 0x53, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x00, 0x00, 0xab, 0x02, 0x48, 0x65, 0x61, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x00, 0x00, 0x44, 0x00, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x00, 0x90, 0x04, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x41, 0x00, 0x9b, 0x01, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x50, 0x00, 0x00, 0x9a, 0x04, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x57, 0x00, 0x0a, 0x04, 0x53, 0x65, 0x74, 0x53, 0x74, 0x64, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x00, 0x00, 0x7a, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x00, 0x53, 0x00, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x00, 0x00, 0x56, 0x00, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x00, 0x00, 0xdd, 0x03, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x00, 0x4b, 0x45, 0x52, 0x4e, 0x45, 0x4c, 0x33, 0x32, 0x2e, 0x64, 0x6c, 0x6c, 0x00, 0x00, 0x68, 0x03, 0x52, 0x65, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x00, 0x00, 0xda, 0x03, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x64, 0x4f, 0x66, 0x46, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x26, 0x02, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x48, 0x65, 0x61, 0x70, 0x00, 0x00, 0xcb, 0x01, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x45, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x45, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0xa2, 0xdf, 0x2d, 0x99, 0x2b, 0x00, 0x00, 0xcd, 0x5d, 0x20, 0xd2, 0x66, 0xd4, 0xff, 0xff, 0x4c, 0x29, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0xf0, 0xf3, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x18, 0x07, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x60, 0x82, 0x79, 0x82, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x9f, 0xe0, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7e, 0x80, 0xfc, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x03, 0x00, 0x00, 0xc1, 0xa3, 0xda, 0xa3, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x03, 0x00, 0x00, 0xc1, 0xa3, 0xda, 0xa3, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x03, 0x00, 0x00, 0xcf, 0xa2, 0xe4, 0xa2, 0x1a, 0x00, 0xe5, 0xa2, 0xe8, 0xa2, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7e, 0xa1, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x51, 0x05, 0x00, 0x00, 0x51, 0xda, 0x5e, 0xda, 0x20, 0x00, 0x5f, 0xda, 0x6a, 0xda, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xd3, 0xd8, 0xde, 0xe0, 0xf9, 0x00, 0x00, 0x31, 0x7e, 0x81, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xf4, 0xfe, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x2d, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x2d, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x2d, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x2d, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x2d, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x32, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xfc, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x80, 0x01, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x30, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x50, 0x2d, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x2d, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x28, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0xfa, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xfa, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf9, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xf9, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xf9, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf8, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xf8, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xf8, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xf8, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf8, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf7, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0xf7, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xf7, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xf7, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xf6, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf5, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xf5, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xf5, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xf5, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xf5, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf5, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf5, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x38, 0x9a, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x38, 0x9a, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x38, 0x9a, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x38, 0x9a, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x38, 0x9a, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x38, 0x9a, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x38, 0x9a, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x38, 0x9a, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x38, 0x9a, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x38, 0x9a, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xfc, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0xf2, 0xfe, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x50, 0x05, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x05, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x48, 0x05, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x44, 0x05, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x40, 0x05, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x05, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x38, 0x05, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x30, 0x05, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x28, 0x05, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x20, 0x05, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x10, 0x05, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xf4, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xe8, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xdc, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xd8, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xd4, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xcc, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xc8, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xc4, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xc0, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xbc, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xb8, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xb0, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xa0, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x94, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x8c, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xd4, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x84, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x7c, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x74, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x68, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x60, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x50, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x40, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x38, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x34, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x28, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x10, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x30, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x32, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x42, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x42, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x42, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x42, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x42, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x42, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x42, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x42, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x42, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x50, 0x32, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x70, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf0, 0xf1, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x50, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x32, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x20, 0x33, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1e, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x4e, 0x01, 0x00, 0x00, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1e, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x6c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x06, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x30, 0x06, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x28, 0x06, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x20, 0x06, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0xe7, 0x10, 0x00, 0x00, 0x78, 0x06, 0x01, 0x00, 0xf0, 0x10, 0x00, 0x00, 0x59, 0x12, 0x00, 0x00, 0x94, 0x06, 0x01, 0x00, 0x60, 0x12, 0x00, 0x00, 0xab, 0x13, 0x00, 0x00, 0x78, 0x06, 0x01, 0x00, 0xb0, 0x13, 0x00, 0x00, 0xd4, 0x13, 0x00, 0x00, 0x0c, 0x08, 0x01, 0x00, 0xe0, 0x13, 0x00, 0x00, 0x08, 0x15, 0x00, 0x00, 0xac, 0x06, 0x01, 0x00, 0x10, 0x15, 0x00, 0x00, 0xed, 0x15, 0x00, 0x00, 0xbc, 0x06, 0x01, 0x00, 0xf0, 0x15, 0x00, 0x00, 0xda, 0x16, 0x00, 0x00, 0x3c, 0x07, 0x01, 0x00, 0xda, 0x16, 0x00, 0x00, 0xae, 0x17, 0x00, 0x00, 0x28, 0x07, 0x01, 0x00, 0xae, 0x17, 0x00, 0x00, 0x65, 0x18, 0x00, 0x00, 0x0c, 0x07, 0x01, 0x00, 0x65, 0x18, 0x00, 0x00, 0xb5, 0x18, 0x00, 0x00, 0xf4, 0x06, 0x01, 0x00, 0xb5, 0x18, 0x00, 0x00, 0xbd, 0x18, 0x00, 0x00, 0xe4, 0x06, 0x01, 0x00, 0xbd, 0x18, 0x00, 0x00, 0xdb, 0x18, 0x00, 0x00, 0xd4, 0x06, 0x01, 0x00, 0xe8, 0x18, 0x00, 0x00, 0x5d, 0x1a, 0x00, 0x00, 0x54, 0x07, 0x01, 0x00, 0x68, 0x1a, 0x00, 0x00, 0x4a, 0x1b, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0x4c, 0x1b, 0x00, 0x00, 0x73, 0x1b, 0x00, 0x00, 0x0c, 0x08, 0x01, 0x00, 0x74, 0x1b, 0x00, 0x00, 0xd3, 0x1b, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0xd4, 0x1b, 0x00, 0x00, 0x01, 0x1c, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0x04, 0x1c, 0x00, 0x00, 0x5a, 0x1c, 0x00, 0x00, 0x0c, 0x08, 0x01, 0x00, 0x5c, 0x1c, 0x00, 0x00, 0x83, 0x1c, 0x00, 0x00, 0x0c, 0x08, 0x01, 0x00, 0x84, 0x1c, 0x00, 0x00, 0xc5, 0x1c, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0x44, 0x1f, 0x00, 0x00, 0xa7, 0x1f, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0xa8, 0x1f, 0x00, 0x00, 0xc5, 0x1f, 0x00, 0x00, 0x0c, 0x08, 0x01, 0x00, 0xc8, 0x1f, 0x00, 0x00, 0xef, 0x1f, 0x00, 0x00, 0x50, 0x0c, 0x01, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x95, 0x22, 0x00, 0x00, 0x7c, 0x07, 0x01, 0x00, 0x98, 0x22, 0x00, 0x00, 0x26, 0x23, 0x00, 0x00, 0xc8, 0x10, 0x01, 0x00, 0x60, 0x23, 0x00, 0x00, 0x09, 0x24, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0x0c, 0x24, 0x00, 0x00, 0x8a, 0x24, 0x00, 0x00, 0x94, 0x07, 0x01, 0x00, 0x8c, 0x24, 0x00, 0x00, 0x25, 0x25, 0x00, 0x00, 0x9c, 0x07, 0x01, 0x00, 0xf8, 0x25, 0x00, 0x00, 0x25, 0x26, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0x28, 0x26, 0x00, 0x00, 0x61, 0x26, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0x64, 0x26, 0x00, 0x00, 0x7a, 0x26, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0x94, 0x26, 0x00, 0x00, 0xc7, 0x26, 0x00, 0x00, 0xac, 0x07, 0x01, 0x00, 0xc8, 0x26, 0x00, 0x00, 0x01, 0x27, 0x00, 0x00, 0x28, 0x0e, 0x01, 0x00, 0x04, 0x27, 0x00, 0x00, 0xb3, 0x27, 0x00, 0x00, 0x28, 0x0e, 0x01, 0x00, 0xb4, 0x27, 0x00, 0x00, 0x3e, 0x29, 0x00, 0x00, 0xb8, 0x07, 0x01, 0x00, 0x78, 0x29, 0x00, 0x00, 0xdf, 0x29, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0xe0, 0x29, 0x00, 0x00, 0x77, 0x2b, 0x00, 0x00, 0xe8, 0x07, 0x01, 0x00, 0x78, 0x2b, 0x00, 0x00, 0x8a, 0x2b, 0x00, 0x00, 0x0c, 0x08, 0x01, 0x00, 0x8c, 0x2b, 0x00, 0x00, 0x2d, 0x2d, 0x00, 0x00, 0x14, 0x08, 0x01, 0x00, 0x30, 0x2d, 0x00, 0x00, 0x01, 0x2e, 0x00, 0x00, 0x30, 0x08, 0x01, 0x00, 0x04, 0x2e, 0x00, 0x00, 0x39, 0x2e, 0x00, 0x00, 0x40, 0x08, 0x01, 0x00, 0x3c, 0x2e, 0x00, 0x00, 0x83, 0x2e, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0x84, 0x2e, 0x00, 0x00, 0xd5, 0x2e, 0x00, 0x00, 0x48, 0x08, 0x01, 0x00, 0xd8, 0x2e, 0x00, 0x00, 0x56, 0x2f, 0x00, 0x00, 0x60, 0x09, 0x01, 0x00, 0x58, 0x2f, 0x00, 0x00, 0x3d, 0x3a, 0x00, 0x00, 0x5c, 0x08, 0x01, 0x00, 0x40, 0x3a, 0x00, 0x00, 0x2d, 0x3d, 0x00, 0x00, 0x80, 0x08, 0x01, 0x00, 0x30, 0x3d, 0x00, 0x00, 0x66, 0x3d, 0x00, 0x00, 0x50, 0x0c, 0x01, 0x00, 0x70, 0x3d, 0x00, 0x00, 0x95, 0x3e, 0x00, 0x00, 0xb8, 0x08, 0x01, 0x00, 0x98, 0x3e, 0x00, 0x00, 0x1d, 0x3f, 0x00, 0x00, 0xac, 0x09, 0x01, 0x00, 0x68, 0x3f, 0x00, 0x00, 0x88, 0x3f, 0x00, 0x00, 0x0c, 0x08, 0x01, 0x00, 0x88, 0x3f, 0x00, 0x00, 0xa8, 0x3f, 0x00, 0x00, 0x0c, 0x08, 0x01, 0x00, 0xa8, 0x3f, 0x00, 0x00, 0xee, 0x3f, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0x5c, 0x40, 0x00, 0x00, 0x60, 0x09, 0x01, 0x00, 0x5c, 0x40, 0x00, 0x00, 0xdf, 0x40, 0x00, 0x00, 0xc4, 0x08, 0x01, 0x00, 0xe0, 0x40, 0x00, 0x00, 0x65, 0x41, 0x00, 0x00, 0xc4, 0x08, 0x01, 0x00, 0x68, 0x41, 0x00, 0x00, 0xf0, 0x41, 0x00, 0x00, 0xbc, 0x06, 0x01, 0x00, 0xf0, 0x41, 0x00, 0x00, 0x2d, 0x42, 0x00, 0x00, 0xdc, 0x08, 0x01, 0x00, 0x30, 0x42, 0x00, 0x00, 0xe0, 0x42, 0x00, 0x00, 0xe4, 0x08, 0x01, 0x00, 0xe0, 0x42, 0x00, 0x00, 0x59, 0x43, 0x00, 0x00, 0x78, 0x10, 0x01, 0x00, 0x5c, 0x43, 0x00, 0x00, 0xa3, 0x43, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0xa4, 0x43, 0x00, 0x00, 0x98, 0x44, 0x00, 0x00, 0x0c, 0x09, 0x01, 0x00, 0xa4, 0x44, 0x00, 0x00, 0x2e, 0x45, 0x00, 0x00, 0x4c, 0x09, 0x01, 0x00, 0x30, 0x45, 0x00, 0x00, 0xb3, 0x45, 0x00, 0x00, 0x60, 0x09, 0x01, 0x00, 0xcc, 0x45, 0x00, 0x00, 0xb4, 0x46, 0x00, 0x00, 0x74, 0x09, 0x01, 0x00, 0xb4, 0x46, 0x00, 0x00, 0xf8, 0x46, 0x00, 0x00, 0x28, 0x0e, 0x01, 0x00, 0xf8, 0x46, 0x00, 0x00, 0xa7, 0x47, 0x00, 0x00, 0xa0, 0x09, 0x01, 0x00, 0xa8, 0x47, 0x00, 0x00, 0xfe, 0x48, 0x00, 0x00, 0xac, 0x09, 0x01, 0x00, 0x00, 0x49, 0x00, 0x00, 0x7b, 0x49, 0x00, 0x00, 0xc0, 0x09, 0x01, 0x00, 0xa8, 0x49, 0x00, 0x00, 0xbc, 0x49, 0x00, 0x00, 0x50, 0x0c, 0x01, 0x00, 0xbc, 0x49, 0x00, 0x00, 0x06, 0x4b, 0x00, 0x00, 0xd0, 0x09, 0x01, 0x00, 0x08, 0x4b, 0x00, 0x00, 0x9a, 0x4b, 0x00, 0x00, 0x60, 0x09, 0x01, 0x00, 0x9c, 0x4b, 0x00, 0x00, 0x7f, 0x4d, 0x00, 0x00, 0xd8, 0x09, 0x01, 0x00, 0x80, 0x4d, 0x00, 0x00, 0x3c, 0x4e, 0x00, 0x00, 0xf4, 0x09, 0x01, 0x00, 0x3c, 0x4e, 0x00, 0x00, 0xcc, 0x4e, 0x00, 0x00, 0x94, 0x07, 0x01, 0x00, 0xcc, 0x4e, 0x00, 0x00, 0x43, 0x51, 0x00, 0x00, 0x18, 0x0a, 0x01, 0x00, 0x44, 0x51, 0x00, 0x00, 0x3c, 0x53, 0x00, 0x00, 0x34, 0x0a, 0x01, 0x00, 0x3c, 0x53, 0x00, 0x00, 0x64, 0x53, 0x00, 0x00, 0x0c, 0x08, 0x01, 0x00, 0x64, 0x53, 0x00, 0x00, 0xde, 0x54, 0x00, 0x00, 0x78, 0x10, 0x01, 0x00, 0x20, 0x56, 0x00, 0x00, 0x77, 0x56, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0x78, 0x56, 0x00, 0x00, 0xed, 0x56, 0x00, 0x00, 0x64, 0x0a, 0x01, 0x00, 0x0c, 0x57, 0x00, 0x00, 0x31, 0x57, 0x00, 0x00, 0x0c, 0x08, 0x01, 0x00, 0x34, 0x57, 0x00, 0x00, 0xe6, 0x57, 0x00, 0x00, 0x84, 0x0a, 0x01, 0x00, 0xe8, 0x57, 0x00, 0x00, 0x6c, 0x58, 0x00, 0x00, 0x28, 0x0e, 0x01, 0x00, 0x6c, 0x58, 0x00, 0x00, 0x90, 0x58, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0x90, 0x58, 0x00, 0x00, 0xc5, 0x59, 0x00, 0x00, 0xb8, 0x0a, 0x01, 0x00, 0xc8, 0x59, 0x00, 0x00, 0x49, 0x5a, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0x4c, 0x5a, 0x00, 0x00, 0x55, 0x5b, 0x00, 0x00, 0xec, 0x0a, 0x01, 0x00, 0x58, 0x5b, 0x00, 0x00, 0xe5, 0x5c, 0x00, 0x00, 0xfc, 0x0a, 0x01, 0x00, 0xe8, 0x5c, 0x00, 0x00, 0x0d, 0x5f, 0x00, 0x00, 0x10, 0x0b, 0x01, 0x00, 0x10, 0x5f, 0x00, 0x00, 0x53, 0x5f, 0x00, 0x00, 0x0c, 0x08, 0x01, 0x00, 0x54, 0x5f, 0x00, 0x00, 0x96, 0x5f, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0x98, 0x5f, 0x00, 0x00, 0x9d, 0x60, 0x00, 0x00, 0x24, 0x0b, 0x01, 0x00, 0xa0, 0x60, 0x00, 0x00, 0xb7, 0x60, 0x00, 0x00, 0x0c, 0x08, 0x01, 0x00, 0xb8, 0x60, 0x00, 0x00, 0xf0, 0x60, 0x00, 0x00, 0x28, 0x0e, 0x01, 0x00, 0xf0, 0x60, 0x00, 0x00, 0x28, 0x61, 0x00, 0x00, 0x28, 0x0e, 0x01, 0x00, 0x28, 0x61, 0x00, 0x00, 0x5e, 0x61, 0x00, 0x00, 0x28, 0x0e, 0x01, 0x00, 0xe0, 0x61, 0x00, 0x00, 0x21, 0x62, 0x00, 0x00, 0x5c, 0x0b, 0x01, 0x00, 0x24, 0x62, 0x00, 0x00, 0x47, 0x62, 0x00, 0x00, 0x7c, 0x0b, 0x01, 0x00, 0x48, 0x62, 0x00, 0x00, 0x64, 0x62, 0x00, 0x00, 0x0c, 0x08, 0x01, 0x00, 0x68, 0x62, 0x00, 0x00, 0x36, 0x64, 0x00, 0x00, 0x60, 0x09, 0x01, 0x00, 0x64, 0x64, 0x00, 0x00, 0xd5, 0x66, 0x00, 0x00, 0x9c, 0x0b, 0x01, 0x00, 0xf0, 0x66, 0x00, 0x00, 0x25, 0x67, 0x00, 0x00, 0xcc, 0x0b, 0x01, 0x00, 0x30, 0x67, 0x00, 0x00, 0x62, 0x67, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0x64, 0x67, 0x00, 0x00, 0xa5, 0x67, 0x00, 0x00, 0x0c, 0x08, 0x01, 0x00, 0xa8, 0x67, 0x00, 0x00, 0xc0, 0x67, 0x00, 0x00, 0x0c, 0x08, 0x01, 0x00, 0xc0, 0x67, 0x00, 0x00, 0xef, 0x68, 0x00, 0x00, 0xac, 0x09, 0x01, 0x00, 0xf0, 0x68, 0x00, 0x00, 0xbf, 0x6a, 0x00, 0x00, 0xec, 0x0b, 0x01, 0x00, 0xc0, 0x6a, 0x00, 0x00, 0xb6, 0x6b, 0x00, 0x00, 0x08, 0x0c, 0x01, 0x00, 0xb8, 0x6b, 0x00, 0x00, 0x6a, 0x6d, 0x00, 0x00, 0x18, 0x0c, 0x01, 0x00, 0x6c, 0x6d, 0x00, 0x00, 0xb8, 0x6d, 0x00, 0x00, 0x30, 0x0c, 0x01, 0x00, 0xb8, 0x6d, 0x00, 0x00, 0x6b, 0x6e, 0x00, 0x00, 0x38, 0x0c, 0x01, 0x00, 0x80, 0x6e, 0x00, 0x00, 0xa4, 0x6e, 0x00, 0x00, 0x48, 0x0c, 0x01, 0x00, 0xe4, 0x6e, 0x00, 0x00, 0x53, 0x6f, 0x00, 0x00, 0x50, 0x0c, 0x01, 0x00, 0x54, 0x6f, 0x00, 0x00, 0x99, 0x6f, 0x00, 0x00, 0x94, 0x07, 0x01, 0x00, 0x9c, 0x6f, 0x00, 0x00, 0xe3, 0x6f, 0x00, 0x00, 0x94, 0x07, 0x01, 0x00, 0xc0, 0x70, 0x00, 0x00, 0xd0, 0x72, 0x00, 0x00, 0x58, 0x0c, 0x01, 0x00, 0xd0, 0x72, 0x00, 0x00, 0xe4, 0x72, 0x00, 0x00, 0x50, 0x0c, 0x01, 0x00, 0xec, 0x72, 0x00, 0x00, 0xa2, 0x73, 0x00, 0x00, 0x78, 0x10, 0x01, 0x00, 0xa4, 0x73, 0x00, 0x00, 0x77, 0x74, 0x00, 0x00, 0x78, 0x10, 0x01, 0x00, 0x78, 0x74, 0x00, 0x00, 0x12, 0x75, 0x00, 0x00, 0x68, 0x0c, 0x01, 0x00, 0x14, 0x75, 0x00, 0x00, 0x9d, 0x75, 0x00, 0x00, 0xa0, 0x09, 0x01, 0x00, 0xa0, 0x75, 0x00, 0x00, 0x16, 0x76, 0x00, 0x00, 0x78, 0x0c, 0x01, 0x00, 0x18, 0x76, 0x00, 0x00, 0x76, 0x7d, 0x00, 0x00, 0x9c, 0x0c, 0x01, 0x00, 0x78, 0x7d, 0x00, 0x00, 0xa9, 0x7e, 0x00, 0x00, 0xc0, 0x0c, 0x01, 0x00, 0xac, 0x7e, 0x00, 0x00, 0xbf, 0x7f, 0x00, 0x00, 0xf0, 0x0c, 0x01, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x7a, 0x80, 0x00, 0x00, 0x18, 0x0d, 0x01, 0x00, 0x84, 0x80, 0x00, 0x00, 0x2b, 0x83, 0x00, 0x00, 0x24, 0x0d, 0x01, 0x00, 0x2c, 0x83, 0x00, 0x00, 0x69, 0x88, 0x00, 0x00, 0x3c, 0x0d, 0x01, 0x00, 0x6c, 0x88, 0x00, 0x00, 0x02, 0x89, 0x00, 0x00, 0x64, 0x0d, 0x01, 0x00, 0x04, 0x89, 0x00, 0x00, 0x6e, 0x8b, 0x00, 0x00, 0x74, 0x0d, 0x01, 0x00, 0x70, 0x8b, 0x00, 0x00, 0xf9, 0x8b, 0x00, 0x00, 0x9c, 0x0d, 0x01, 0x00, 0x44, 0x8f, 0x00, 0x00, 0x2e, 0x91, 0x00, 0x00, 0xac, 0x0d, 0x01, 0x00, 0x30, 0x91, 0x00, 0x00, 0x78, 0x91, 0x00, 0x00, 0xdc, 0x08, 0x01, 0x00, 0x78, 0x91, 0x00, 0x00, 0x0d, 0x92, 0x00, 0x00, 0xac, 0x0d, 0x01, 0x00, 0x10, 0x92, 0x00, 0x00, 0x99, 0x92, 0x00, 0x00, 0xb4, 0x0d, 0x01, 0x00, 0x9c, 0x92, 0x00, 0x00, 0x71, 0x93, 0x00, 0x00, 0xb4, 0x0d, 0x01, 0x00, 0x74, 0x93, 0x00, 0x00, 0xe5, 0x93, 0x00, 0x00, 0xb4, 0x0d, 0x01, 0x00, 0x88, 0x95, 0x00, 0x00, 0x1d, 0x96, 0x00, 0x00, 0x28, 0x0e, 0x01, 0x00, 0x20, 0x96, 0x00, 0x00, 0x57, 0x97, 0x00, 0x00, 0xbc, 0x0d, 0x01, 0x00, 0x58, 0x97, 0x00, 0x00, 0xab, 0x97, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0xac, 0x97, 0x00, 0x00, 0xa0, 0x99, 0x00, 0x00, 0xec, 0x0d, 0x01, 0x00, 0xa0, 0x99, 0x00, 0x00, 0xf0, 0x99, 0x00, 0x00, 0x50, 0x0c, 0x01, 0x00, 0xf0, 0x99, 0x00, 0x00, 0x36, 0x9a, 0x00, 0x00, 0x50, 0x0c, 0x01, 0x00, 0x44, 0x9a, 0x00, 0x00, 0xe5, 0x9a, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0xe8, 0x9a, 0x00, 0x00, 0x6a, 0x9d, 0x00, 0x00, 0x0c, 0x0e, 0x01, 0x00, 0x6c, 0x9d, 0x00, 0x00, 0x9c, 0x9d, 0x00, 0x00, 0x50, 0x0c, 0x01, 0x00, 0x9c, 0x9d, 0x00, 0x00, 0x58, 0x9e, 0x00, 0x00, 0x28, 0x0e, 0x01, 0x00, 0x58, 0x9e, 0x00, 0x00, 0x70, 0x9f, 0x00, 0x00, 0x34, 0x0e, 0x01, 0x00, 0x70, 0x9f, 0x00, 0x00, 0xa7, 0x9f, 0x00, 0x00, 0xa4, 0x07, 0x01, 0x00, 0xa8, 0x9f, 0x00, 0x00, 0xbc, 0xa0, 0x00, 0x00, 0x60, 0x0e, 0x01, 0x00, 0xbc, 0xa0, 0x00, 0x00, 0x2d, 0xa2, 0x00, 0x00, 0xd8, 0x10, 0x01, 0x00, 0x40, 0xa2, 0x00, 0x00, 0xef, 0xa2, 0x00, 0x00, 0x60, 0x09, 0x01, 0x00, 0xf0, 0xa2, 0x00, 0x00, 0x9c, 0xa3, 0x00, 0x00, 0x78, 0x0e, 0x01, 0x00, 0x9c, 0xa3, 0x00, 0x00, 0x20, 0xa4, 0x00, 0x00, 0x50, 0x0c, 0x01, 0x00, 0x20, 0xa4, 0x00, 0x00, 0xc6, 0xa4, 0x00, 0x00, 0x88, 0x0e, 0x01, 0x00, 0xf0, 0xa4, 0x00, 0x00, 0x0c, 0xa7, 0x00, 0x00, 0xb8, 0x0e, 0x01, 0x00, 0x0c, 0xa7, 0x00, 0x00, 0x5f, 0xa7, 0x00, 0x00, 0xf8, 0x0e, 0x01, 0x00, 0x60, 0xa7, 0x00, 0x00, 0xe5, 0xa9, 0x00, 0x00, 0x08, 0x0f, 0x01, 0x00, 0x3c, 0xaa, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0xd8, 0x10, 0x01, 0x00, 0x50, 0xab, 0x00, 0x00, 0xab, 0xab, 0x00, 0x00, 0x50, 0x0c, 0x01, 0x00, 0xac, 0xab, 0x00, 0x00, 0xe7, 0xab, 0x00, 0x00, 0x2c, 0x0f, 0x01, 0x00, 0xe8, 0xab, 0x00, 0x00, 0x23, 0xac, 0x00, 0x00, 0x0c, 0x08, 0x01, 0x00, 0x24, 0xac, 0x00, 0x00, 0xc5, 0xac, 0x00, 0x00, 0x78, 0x10, 0x01, 0x00, 0xc8, 0xac, 0x00, 0x00, 0xfb, 0xad, 0x00, 0x00, 0x3c, 0x0f, 0x01, 0x00, 0xfc, 0xad, 0x00, 0x00, 0x6c, 0xaf, 0x00, 0x00, 0x68, 0x0f, 0x01, 0x00, 0x6c, 0xaf, 0x00, 0x00, 0x7b, 0xb0, 0x00, 0x00, 0x74, 0x0f, 0x01, 0x00, 0x84, 0xb0, 0x00, 0x00, 0x76, 0xb1, 0x00, 0x00, 0x88, 0x0f, 0x01, 0x00, 0x78, 0xb1, 0x00, 0x00, 0x52, 0xb6, 0x00, 0x00, 0x98, 0x0f, 0x01, 0x00, 0x54, 0xb6, 0x00, 0x00, 0xdd, 0xb6, 0x00, 0x00, 0x9c, 0x0d, 0x01, 0x00, 0xe0, 0xb6, 0x00, 0x00, 0xf5, 0xb7, 0x00, 0x00, 0x9c, 0x0d, 0x01, 0x00, 0xf8, 0xb7, 0x00, 0x00, 0xa8, 0xbb, 0x00, 0x00, 0xb8, 0x0f, 0x01, 0x00, 0xa8, 0xbb, 0x00, 0x00, 0x17, 0xbc, 0x00, 0x00, 0x68, 0x0c, 0x01, 0x00, 0x18, 0xbc, 0x00, 0x00, 0x0e, 0xbd, 0x00, 0x00, 0xc8, 0x10, 0x01, 0x00, 0x44, 0xbd, 0x00, 0x00, 0x97, 0xbd, 0x00, 0x00, 0x50, 0x0c, 0x01, 0x00, 0x98, 0xbd, 0x00, 0x00, 0x17, 0xc5, 0x00, 0x00, 0xd0, 0x0f, 0x01, 0x00, 0x18, 0xc5, 0x00, 0x00, 0x8a, 0xc6, 0x00, 0x00, 0xe8, 0x0f, 0x01, 0x00, 0x8c, 0xc6, 0x00, 0x00, 0x8a, 0xce, 0x00, 0x00, 0x18, 0x10, 0x01, 0x00, 0x8c, 0xce, 0x00, 0x00, 0x79, 0xcf, 0x00, 0x00, 0x38, 0x10, 0x01, 0x00, 0x7c, 0xcf, 0x00, 0x00, 0x11, 0xd0, 0x00, 0x00, 0xb4, 0x0d, 0x01, 0x00, 0x14, 0xd0, 0x00, 0x00, 0x95, 0xd2, 0x00, 0x00, 0x7c, 0x07, 0x01, 0x00, 0x98, 0xd2, 0x00, 0x00, 0x30, 0xd4, 0x00, 0x00, 0x5c, 0x10, 0x01, 0x00, 0x30, 0xd4, 0x00, 0x00, 0xc6, 0xd4, 0x00, 0x00, 0x78, 0x10, 0x01, 0x00, 0xc8, 0xd4, 0x00, 0x00, 0x96, 0xd5, 0x00, 0x00, 0x88, 0x10, 0x01, 0x00, 0x98, 0xd5, 0x00, 0x00, 0xd7, 0xd5, 0x00, 0x00, 0x50, 0x0c, 0x01, 0x00, 0xd8, 0xd5, 0x00, 0x00, 0xa3, 0xd8, 0x00, 0x00, 0x90, 0x10, 0x01, 0x00, 0xa4, 0xd8, 0x00, 0x00, 0x80, 0xdd, 0x00, 0x00, 0xa8, 0x10, 0x01, 0x00, 0x80, 0xdd, 0x00, 0x00, 0x10, 0xde, 0x00, 0x00, 0xb4, 0x0d, 0x01, 0x00, 0x10, 0xde, 0x00, 0x00, 0xfd, 0xde, 0x00, 0x00, 0xc8, 0x10, 0x01, 0x00, 0x08, 0xdf, 0x00, 0x00, 0xcb, 0xe0, 0x00, 0x00, 0xd8, 0x10, 0x01, 0x00, 0x10, 0xe1, 0x00, 0x00, 0x5e, 0xe1, 0x00, 0x00, 0x70, 0x0e, 0x01, 0x00, 0x60, 0xe1, 0x00, 0x00, 0x78, 0xe1, 0x00, 0x00, 0x34, 0x0f, 0x01, 0x00, 0x78, 0xe1, 0x00, 0x00, 0x9a, 0xe1, 0x00, 0x00, 0x54, 0x0b, 0x01, 0x00, 0x9a, 0xe1, 0x00, 0x00, 0xb6, 0xe1, 0x00, 0x00, 0x54, 0x0b, 0x01, 0x00, 0xb6, 0xe1, 0x00, 0x00, 0xcf, 0xe1, 0x00, 0x00, 0x54, 0x0b, 0x01, 0x00, 0xcf, 0xe1, 0x00, 0x00, 0xf5, 0xe1, 0x00, 0x00, 0x54, 0x0b, 0x01, 0x00, 0xff, 0xe1, 0x00, 0x00, 0x18, 0xe2, 0x00, 0x00, 0x54, 0x0b, 0x01, 0x00, 0x18, 0xe2, 0x00, 0x00, 0x34, 0xe2, 0x00, 0x00, 0x54, 0x0b, 0x01, 0x00, 0x34, 0xe2, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x54, 0x0b, 0x01, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x66, 0xe2, 0x00, 0x00, 0x54, 0x0b, 0x01, 0x00, 0x66, 0xe2, 0x00, 0x00, 0x7f, 0xe2, 0x00, 0x00, 0x54, 0x0b, 0x01, 0x00, 0x86, 0xe2, 0x00, 0x00, 0x9f, 0xe2, 0x00, 0x00, 0x54, 0x0b, 0x01, 0x00, 0x9f, 0xe2, 0x00, 0x00, 0xb3, 0xe2, 0x00, 0x00, 0x54, 0x0b, 0x01, 0x00, 0xc0, 0xe2, 0x00, 0x00, 0xe1, 0xe2, 0x00, 0x00, 0x54, 0x0b, 0x01, 0x00, 0xe1, 0xe2, 0x00, 0x00, 0xfd, 0xe2, 0x00, 0x00, 0x34, 0x0f, 0x01, 0x00, 0xfd, 0xe2, 0x00, 0x00, 0x1f, 0xe3, 0x00, 0x00, 0x54, 0x0b, 0x01, 0x00, 0x1f, 0xe3, 0x00, 0x00, 0x37, 0xe3, 0x00, 0x00, 0x34, 0x0f, 0x01, 0x00, 0x37, 0xe3, 0x00, 0x00, 0x4e, 0xe3, 0x00, 0x00, 0x34, 0x0f, 0x01, 0x00, 0x4e, 0xe3, 0x00, 0x00, 0x65, 0xe3, 0x00, 0x00, 0x34, 0x0f, 0x01, 0x00, 0x65, 0xe3, 0x00, 0x00, 0x7e, 0xe3, 0x00, 0x00, 0x54, 0x0b, 0x01, 0x00, 0x7e, 0xe3, 0x00, 0x00, 0x97, 0xe3, 0x00, 0x00, 0x54, 0x0b, 0x01, 0x00, 0x9e, 0xe3, 0x00, 0x00, 0xb7, 0xe3, 0x00, 0x00, 0x54, 0x0b, 0x01, 0x00, 0xb7, 0xe3, 0x00, 0x00, 0xd0, 0xe3, 0x00, 0x00, 0x34, 0x0f, 0x01, 0x00, 0xd0, 0xe3, 0x00, 0x00, 0x1c, 0xe4, 0x00, 0x00, 0x30, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }; std::size_t conda_exe_len = 74752; ================================================ FILE: libmamba/data/mamba.bat ================================================ @REM Copyright (C) 2012 Anaconda, Inc @REM SPDX-License-Identifier: BSD-3-Clause @REM Replaced by mamba executable with the MAMBA_EXE and MAMBA_ROOT_PREFIX variable pointing @REM to the correct locations. __MAMBA_DEFINE_MAMBA_EXE__ __MAMBA_DEFINE_ROOT_PREFIX__ @IF [%1]==[activate] "%~dp0__MAMBA_INSERT_ACTIVATE_BAT_NAME__" %* @IF [%1]==[deactivate] "%~dp0__MAMBA_INSERT_ACTIVATE_BAT_NAME__" %* @CALL "%MAMBA_EXE%" %* @IF %errorlevel% NEQ 0 EXIT /B %errorlevel% @IF [%1]==[install] "%~dp0__MAMBA_INSERT_ACTIVATE_BAT_NAME__" reactivate @IF [%1]==[update] "%~dp0__MAMBA_INSERT_ACTIVATE_BAT_NAME__" reactivate @IF [%1]==[upgrade] "%~dp0__MAMBA_INSERT_ACTIVATE_BAT_NAME__" reactivate @IF [%1]==[remove] "%~dp0__MAMBA_INSERT_ACTIVATE_BAT_NAME__" reactivate @IF [%1]==[uninstall] "%~dp0__MAMBA_INSERT_ACTIVATE_BAT_NAME__" reactivate @IF [%1]==[self-update] @CALL DEL /f %MAMBA_EXE%.bkup @EXIT /B %errorlevel% ================================================ FILE: libmamba/data/mamba.csh ================================================ # Copyright (C) 2012 Anaconda, Inc # SPDX-License-Identifier: BSD-3-Clause alias __mamba_exe '"$MAMBA_EXE" "\!*"' alias __mamba_hashr 'rehash' alias __mamba_xctivate '\\ set ask_conda="`(setenv prompt "${prompt}"; __mamba_exe shell "\!*" --shell csh)`"\\ if ("${status}" != 0) then\\ return\\ endif\\ eval "${ask_conda}"\\ __mamba_hashr\\ ' alias __mamba_wrap '\\ switch ("${1}")\\ case activate | reactivate | deactivate:\\ __mamba_xctivate "\!*"\\ breaksw\\ case install | update | upgrade | remove | uninstall:\\ __mamba_exe "\!*"\\ if ("${status}" != 0) then\\ return\\ endif\\ __mamba_xctivate reactivate\\ breaksw\\ case self-update:\\ __mamba_exe "\!*"\\ if ("${status}" != 0) then\\ return\\ endif\\ if (-f "$MAMBA_EXE.bkup") then\\ rm -f "$MAMBA_EXE.bkup"\\ endif\\ breaksw\\ default:\\ __mamba_exe "\!*"\\ breaksw\\ endsw\\ ' set __exe_name=(`basename $MAMBA_EXE`) set __exe_name = (${__exe_name}:q.) if ("$__exe_name" == "micromamba") then alias mamba __mamba_wrap else if ("$__exe_name" == "mamba") then alias micromamba __mamba_wrap else echo "Error unknown MAMBA_EXE: \"$MAMBA_EXE\", filename must be mamba or micromamba" >&2 endif if (! $?CONDA_SHLVL) then setenv CONDA_SHLVL 0 # In dev-mode MAMBA_EXE is python.exe and on Windows # it is in a different relative location to condabin. if ($?_CE_CONDA && $?WINDIR) then setenv PATH "${MAMBA_ROOT_PREFIX}/condabin:${PATH}" else setenv PATH "${MAMBA_ROOT_PREFIX}/condabin:${PATH}" endif # We're not allowing PS1 to be unbound. It must at least be set. # However, we're not exporting it, which can cause problems when starting a second shell # via a first shell (i.e. starting zsh from bash). if (! $?PS1) then setenv PS1 '' endif endif ================================================ FILE: libmamba/data/mamba.fish ================================================ if not set -q MAMBA_SHLVL set -gx MAMBA_SHLVL "0" fish_add_path --move $MAMBA_ROOT_PREFIX/condabin end if not set -q MAMBA_NO_PROMPT function __mamba_add_prompt if set -q CONDA_PROMPT_MODIFIER set_color -o green echo -n $CONDA_PROMPT_MODIFIER set_color normal end end if functions -q fish_prompt if not functions -q __fish_prompt_orig functions -c fish_prompt __fish_prompt_orig end functions -e fish_prompt else function __fish_prompt_orig end end function return_last_status return $argv end function fish_prompt set -l last_status $status if set -q MAMBA_LEFT_PROMPT __mamba_add_prompt end return_last_status $last_status __fish_prompt_orig end if functions -q fish_right_prompt if not functions -q __fish_right_prompt_orig functions -c fish_right_prompt __fish_right_prompt_orig end functions -e fish_right_prompt else function __fish_right_prompt_orig end end function fish_right_prompt if not set -q MAMBA_LEFT_PROMPT __mamba_add_prompt end __fish_right_prompt_orig end end function __fish_mamba_wrapper --inherit-variable MAMBA_EXE if test (count $argv) -lt 1 || contains -- --help $argv $MAMBA_EXE $argv else set -l cmd $argv[1] set -e argv[1] switch $cmd case activate deactivate $MAMBA_EXE shell $cmd --shell fish $argv | source || return $status case install update upgrade remove uninstall $MAMBA_EXE $cmd $argv || return $status $MAMBA_EXE shell reactivate --shell fish | source || return $status case '*' $MAMBA_EXE $cmd $argv end end end function mamba --inherit-variable MAMBA_EXE __fish_mamba_wrapper $argv end function micromamba --inherit-variable MAMBA_EXE __fish_mamba_wrapper $argv end # Autocompletions below function __fish_mamba_envs micromamba env list | tail -n +3 | cut -d' ' -f3 end function __fish_mamba_packages micromamba list | awk 'NR > 3 {print $1}' end function __fish_mamba_universal_optspecs string join \n 'h/help' 'a-version' 'b-rc-file=+' \ 'c-no-rc' 'd-no-env' 'v/verbose' \ 'o/-log-level=+' 'q/quiet' 'y/yes' \ 'e-json' 'f-offline' \ 'g-dry-run' 'i-experimental' 'r/root-prefix=+' \ 'p/prefix=+' 'n/name=+' end function __fish_mamba_has_command set -l want_prefix $argv set -l argv (commandline -opc) # Remove MAMBA_EXE set -e argv[1] # Parse common options argparse -i (__fish_mamba_universal_optspecs) -- $argv 2>/dev/null; or return 1 # Parse other options. This only works for boolean --flags so far. set -l argv (string replace -r -- " ?-[^ ]+" "" "$argv") # Normalize whitespace set -l argv (string replace -r "\s+" " " "$argv") test "$want_prefix" = "$argv" end function __fish_mamba_complete_subcmds for line in (string split \n (string trim $argv[2])) set tmp (string replace -r '\s{4,}+' ___ (string trim $line)) set cmd (string split ___ $tmp -f 1) set description (string split ___ $tmp -f 2) if test -z $description complete -x -c micromamba -n $argv[1] -a $cmd else complete -x -c micromamba -n $argv[1] -a $cmd -d $description end end end function __fish_mamba_needs_env set -l cmd (commandline -opc) test $cmd[-1] = "-n" end # Top level commands # Generated by "micromamba --help" __fish_mamba_complete_subcmds '__fish_mamba_has_command' ' shell Generate shell init scripts create Create new environment install Install packages in active environment update Update packages in active environment self-update Update micromamba repoquery Find and analyze packages in active environment or channels remove Remove packages from active environment list List packages in active environment package Extract a package or bundle files into an archive clean Clean package cache config Configuration of micromamba info Information about micromamba constructor Commands to support using micromamba in constructor env See `mamba/micromamba env --help` activate Activate an environment run Run an executable in an environment ps Show, inspect or kill running processes auth Login or logout of a given host search Find packages in active environment or channels deactivate Deactivate the current environment ' # TODO: run # env subcommand # Generated by "micromamba env --help" __fish_mamba_complete_subcmds '__fish_mamba_has_command env' ' list List known environments export Export environment remove Remove an environment ' # env subcommand # Generated by "micromamba config --help" __fish_mamba_complete_subcmds '__fish_mamba_has_command config' ' list List configuration values sources Show configuration sources describe Describe given configuration parameters prepend Add one configuration value to the beginning of a list key append Add one configuration value to the end of a list key remove-key Remove a configuration key and its values remove Remove a configuration value from a list key. This removes all instances of the value. set Set a configuration value get Get a configuration value ' # repoquery __fish_mamba_complete_subcmds '__fish_mamba_has_command repoquery' ' search depends whoneeds ' # shell __fish_mamba_complete_subcmds '__fish_mamba_has_command shell' ' init Add initialization in script to rc files deinit Remove activation script from rc files reinit Restore activation script from rc files hook Micromamba hook scripts activate Output activation code for the given shell reactivate Output reactivation code for the given shell deactivate Output deactivation code for the given shell enable_long_path_support Output deactivation code for the given shell ' # Commands that need environment as parameter complete -x -c micromamba -n '__fish_mamba_has_command activate' -a '(__fish_mamba_envs)' complete -x -c micromamba -n '__fish_mamba_has_command shell activate' -a '(__fish_mamba_envs)' # Commands that need package as parameter complete -x -c micromamba -n '__fish_mamba_has_command remove' -a '(__fish_mamba_packages)' complete -x -c micromamba -n '__fish_mamba_has_command uninstall' -a '(__fish_mamba_packages)' complete -x -c micromamba -n '__fish_mamba_has_command upgrade' -a '(__fish_mamba_packages)' complete -x -c micromamba -n '__fish_mamba_has_command update' -a '(__fish_mamba_packages)' # Environment name complete -x -c micromamba -n '__fish_mamba_needs_env' -a '(__fish_mamba_envs)' ================================================ FILE: libmamba/data/mamba.sh ================================================ # Copyright (C) 2012 Anaconda, Inc # SPDX-License-Identifier: BSD-3-Clause __mamba_exe() ( "${MAMBA_EXE}" "${@}" ) __mamba_hashr() { if [ -n "${ZSH_VERSION:+x}" ]; then \rehash elif [ -n "${POSH_VERSION:+x}" ]; then : # pass else \hash -r fi } __mamba_xctivate() { \local ask_mamba ask_mamba="$(PS1="${PS1:-}" __mamba_exe shell "${@}" --shell bash)" || \return \eval "${ask_mamba}" __mamba_hashr } __mamba_wrap() { \local cmd="${1-__missing__}" case "${cmd}" in activate|reactivate|deactivate) __mamba_xctivate "${@}" ;; install|update|upgrade|remove|uninstall) __mamba_exe "${@}" || \return __mamba_xctivate reactivate ;; self-update) __mamba_exe "${@}" || \return # remove leftover backup file on Windows if [ -f "${MAMBA_EXE}.bkup" ]; then rm -f "${MAMBA_EXE}.bkup" fi ;; *) __mamba_exe "${@}" ;; esac } # We need to define a function with the same name as the executable to be called by the user. # There is no way to register it dynamically without relying on hacks or eval. __exe_name="$(basename "${MAMBA_EXE}")" __exe_name="${__exe_name%.*}" case "${__exe_name}" in micromamba) micromamba() { __mamba_wrap "$@" } ;; mamba) mamba() { __mamba_wrap "$@" } ;; *) echo "Error unknown MAMBA_EXE: \"${MAMBA_EXE}\", filename must be mamba or micromamba" 1>&2 ;; esac if [ -z "${CONDA_SHLVL+x}" ]; then \export CONDA_SHLVL=0 \export PATH="${MAMBA_ROOT_PREFIX}/condabin:${PATH}" # We're not allowing PS1 to be unbound. It must at least be set. # However, we're not exporting it, which can cause problems when starting a second shell # via a first shell (i.e. starting zsh from bash). if [ -z "${PS1+x}" ]; then PS1= fi fi ================================================ FILE: libmamba/data/mamba.xsh ================================================ # Copyright (C) 2012 Anaconda, Inc # SPDX-License-Identifier: BSD-3-Clause # Much of this forked from https://github.com/gforsyth/xonda # Copyright (c) 2016, Gil Forsyth, All rights reserved. # Original code licensed under BSD-3-Clause. try: # xonsh >= 0.18.0 from xonsh.lib.lazyasd import lazyobject except: # xonsh < 0.18.0 from xonsh.lazyasd import lazyobject from xonsh.completers import completer from xonsh.completers.tools import complete_from_sub_proc, contextual_command_completer _REACTIVATE_COMMANDS = ('install', 'update', 'upgrade', 'remove', 'uninstall') def _parse_args(args=None): from argparse import ArgumentParser p = ArgumentParser(add_help=False) p.add_argument('command') ns, _ = p.parse_known_args(args) if ns.command == 'activate': p.add_argument('env_name_or_prefix', default='base') elif ns.command in _REACTIVATE_COMMANDS: p.add_argument('-n', '--name') p.add_argument('-p', '--prefix') parsed_args, _ = p.parse_known_args(args) return parsed_args def _raise_pipeline_error(pipeline): stdout = pipeline.out stderr = pipeline.err if pipeline.returncode != 0: message = ("exited with %s\nstdout: %s\nstderr: %s\n" "" % (pipeline.returncode, stdout, stderr)) raise RuntimeError(message) return stdout.strip() def _mamba_activate_handler(env_name_or_prefix=None): if env_name_or_prefix == 'base' or not env_name_or_prefix: env_name_or_prefix = $MAMBA_ROOT_PREFIX __xonsh__.execer.exec($($MAMBA_EXE shell activate -s xonsh -p @(env_name_or_prefix)), glbs=__xonsh__.ctx, filename="$($MAMBA_EXE shell activate -s xonsh -p " + env_name_or_prefix + ")") def _mamba_deactivate_handler(): __xonsh__.execer.exec($($MAMBA_EXE shell deactivate -s xonsh), glbs=__xonsh__.ctx, filename="$($MAMBA_EXE shell deactivate -s xonsh)") def _mamba_passthrough_handler(args): pipeline = ![$MAMBA_EXE @(args)] _raise_pipeline_error(pipeline) def _mamba_reactivate_handler(args, name_or_prefix_given): pipeline = ![$MAMBA_EXE @(args)] _raise_pipeline_error(pipeline) if not name_or_prefix_given: __xonsh__.execer.exec($($MAMBA_EXE shell reactivate -s xonsh), glbs=__xonsh__.ctx, filename="$($MAMBA_EXE shell -s xonsh reactivate)") def _micromamba_main(args=None): parsed_args = _parse_args(args) if parsed_args.command == 'activate': _mamba_activate_handler(parsed_args.env_name_or_prefix) elif parsed_args.command == 'deactivate': _mamba_deactivate_handler() elif parsed_args.command in _REACTIVATE_COMMANDS: name_or_prefix_given = bool(parsed_args.name or parsed_args.prefix) _mamba_reactivate_handler(args, name_or_prefix_given) else: _mamba_passthrough_handler(args) if 'CONDA_SHLVL' not in ${...}: $CONDA_SHLVL = '0' import os as _os import sys as _sys _sys.path.insert(0, _os.path.join($MAMBA_ROOT_PREFIX, "condabin")) del _os, _sys aliases['micromamba'] = _micromamba_main @contextual_command_completer def _micromamba_proc_completer(ctx): if not ctx.args: return return ( complete_from_sub_proc( "micromamba", "completer", *[a.value for a in ctx.args[1:]], ctx.prefix, sep=lambda x: x.split() ), False, ) completer.add_one_completer("micromamba", _micromamba_proc_completer, " /dev/null; then autoload -U +X compinit && if [[ "${ZSH_DISABLE_COMPFIX-}" = true ]]; then compinit -u else compinit fi fi autoload -U +X bashcompinit && bashcompinit _umamba_zsh_completions() { COMPREPLY=($(__mamba_exe completer "${(@s: :)${(@s: :)COMP_LINE}:1}")) } complete -o default -F _umamba_zsh_completions micromamba fi if [ -n "${BASH_VERSION:+x}" ]; then _umamba_bash_completions() { COMPREPLY=($(__mamba_exe completer "${COMP_WORDS[@]:1}")) } complete -o default -F _umamba_bash_completions micromamba fi ================================================ FILE: libmamba/data/mamba_hook.bat ================================================ @REM Copyright (C) 2021 QuantStack @REM SPDX-License-Identifier: BSD-3-Clause @REM This file is derived from conda_hook.bat @IF DEFINED CONDA_SHLVL GOTO :EOF @FOR %%F in ("%~dp0") do @SET "__mambabin_dir=%%~dpF" @SET "__mambabin_dir=%__mambabin_dir:~0,-1%" @SET "PATH=%__mambabin_dir%;%PATH%" @SET "MAMBA_BAT=%__mambabin_dir%\__MAMBA_INSERT_BAT_NAME__" @FOR %%F in ("%__mambabin_dir%") do @SET "__mamba_root=%%~dpF" __MAMBA_DEFINE_MAMBA_EXE__ @SET __mambabin_dir= @SET __mamba_root= @REM @DOSKEY does not work with delayed evaluation @REM @DOSKEY after the first usage of a macro whose name is defined with a variable @REM Therefore no magic here, just grep and replace when generating the final file @DOSKEY __MAMBA_INSERT_EXE_NAME__="%MAMBA_BAT%" $* @SET CONDA_SHLVL=0 ================================================ FILE: libmamba/data/mamba_hook.ps1 ================================================ Import-Module "$Env:MAMBA_ROOT_PREFIX\condabin\Mamba.psm1" -ArgumentList $MambaModuleArgs ================================================ FILE: libmamba/ext/solv-cpp/CMakeLists.txt ================================================ # Copyright (c) 2024, QuantStack and Mamba Contributors # # Distributed under the terms of the BSD 3-Clause License. # # The full license is in the file LICENSE, distributed with this software. cmake_minimum_required(VERSION 3.16) add_library( solv-cpp OBJECT src/pool.cpp src/queue.cpp src/repo.cpp src/solvable.cpp src/solver.cpp src/transaction.cpp src/dependency.cpp ) target_include_directories( solv-cpp PUBLIC $ $ ) # Avoids `libsolv`'s usage of `requires` which became a keyword in C++20. See: # https://github.com/openSUSE/libsolv/blob/master/src/solvable.h#L38 target_compile_definitions(solv-cpp PUBLIC LIBSOLV_SOLVABLE_PREPEND_DEP) find_package(tl-expected REQUIRED) find_package(Libsolv REQUIRED) if(BUILD_SHARED) set(LIBSOLV_DEPS solv::libsolv solv::libsolvext) set_target_properties(solv-cpp PROPERTIES POSITION_INDEPENDENT_CODE ON) else() set(LIBSOLV_DEPS solv::libsolv_static solv::libsolvext_static) endif() target_link_libraries(solv-cpp PUBLIC tl::expected ${LIBSOLV_DEPS}) target_compile_features(solv-cpp PUBLIC cxx_std_20) set_target_properties( solv-cpp PROPERTIES CXX_STANDARD 20 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO ) mamba_target_add_compile_warnings(solv-cpp WARNING_AS_ERROR ${MAMBA_WARNING_AS_ERROR}) mamba_target_set_lto(solv-cpp MODE ${MAMBA_LTO}) add_library(solv::cpp ALIAS solv-cpp) if(BUILD_LIBMAMBA_TESTS) add_subdirectory(tests) endif() # Object libraries are installed as an interface library (in libmambaTargets) but do not install any # objects (.o files) or headers without the ``OBJECTS DESTINATION`` property. install( TARGETS solv-cpp EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) ================================================ FILE: libmamba/ext/solv-cpp/include/solv-cpp/dependency.hpp ================================================ // Copyright (c) 2025, QuantStack and Mamba Contributors // // Distributed under the terms of the BSD 3-Clause License. // // The full license is in the file LICENSE, distributed with this software. #ifndef MAMBA_SOLV_DEPENDENCY_HPP #define MAMBA_SOLV_DEPENDENCY_HPP #include #include "solv-cpp/ids.hpp" namespace solv { class ObjDependencyViewConst { public: explicit ObjDependencyViewConst(const ::Reldep& reldep) noexcept; ~ObjDependencyViewConst() noexcept; [[nodiscard]] auto raw() const -> const ::Reldep*; /** * The name field of the dependency. * * Can be a string id for simple dependencies, or another dependency id for * complex depndencies with boolean expressions. */ [[nodiscard]] auto name() const -> StringId /* OR DependencyId */; /** * The version range field of the dependency. * * Can be a string id for simple dependencies, or another dependency id for * complex depndencies with boolean expressions. */ [[nodiscard]] auto version_range() const -> StringId /* OR DependencyId */; /** The flags of the dependency, such as types. */ [[nodiscard]] auto flags() const -> RelationFlag; private: const ::Reldep* m_reldep = nullptr; }; } #endif ================================================ FILE: libmamba/ext/solv-cpp/include/solv-cpp/ids.hpp ================================================ // Copyright (c) 2023, QuantStack and Mamba Contributors // // Distributed under the terms of the BSD 3-Clause License. // // The full license is in the file LICENSE, distributed with this software. #ifndef MAMBA_SOLV_IDS_HPP #define MAMBA_SOLV_IDS_HPP #include namespace solv { using StringId = ::Id; using DependencyId = ::Id; using RepoId = ::Id; using SolvableId = ::Id; using OffsetId = ::Id; using RuleId = ::Id; using ProblemId = ::Id; using DependencyMarker = ::Id; using KeyNameId = ::Id; using RelationFlag = int; using DistType = int; using SolverFlag = int; using TransactionOrderFlag = int; using TransactionStepType = int; using TransactionMode = int; enum struct LoopControl { Continue, Break }; } #endif ================================================ FILE: libmamba/ext/solv-cpp/include/solv-cpp/pool.hpp ================================================ // Copyright (c) 2023, QuantStack and Mamba Contributors // // Distributed under the terms of the BSD 3-Clause License. // // The full license is in the file LICENSE, distributed with this software. #ifndef MAMBA_SOLV_POOL_HPP #define MAMBA_SOLV_POOL_HPP #include #include #include #include #include #include #include #include #include #include "solv-cpp/dependency.hpp" #include "solv-cpp/ids.hpp" #include "solv-cpp/queue.hpp" #include "solv-cpp/repo.hpp" #include "solv-cpp/solvable.hpp" namespace solv { class ObjPool; /** * Pool of solvable involved in resolving en environment. * * The pool contains the solvable (packages) information required from the ``::Solver``. * The pool can be reused by multiple solvers to solve different requirements with the same * ecosystem. */ class ObjPoolView { public: using raw_str_view = const char*; using raw_ptr = ::Pool*; using const_raw_ptr = const ::Pool*; auto raw() -> raw_ptr; auto raw() const -> const_raw_ptr; auto current_error() const -> std::string_view; void set_current_error(raw_str_view msg); void set_current_error(const std::string& msg); /** * Get the current distribution type of the pool. * * @see ObjPoolView::set_disttype */ auto disttype() const -> DistType; /** * Set the distribution type of the pool. * * The distribution type has subtle implications. * For instance the distribution must be of type conda for ``track_feature``, * ``constrains`` and ``build_number`` to be taken into account. */ void set_disttype(DistType dt); /** * Find a string id in the pool if it exists. * * @see ObjPoolView::add_string */ auto find_string(std::string_view str) const -> std::optional; /** * Add a string to the pool. * * The pool hold a set of strings, indexed with an id, to avoid duplicating entries. * It is safe to call this function regardless of whether the string was already added. */ auto add_string(std::string_view str) -> StringId; /** * Get the string associated with an id. * * @see ObjPoolView::add_string */ auto get_string(StringId id) const -> std::string_view; /** * Find a dependency in the pool, if it exists. * * @see ObjPoolView::add_dependency */ auto find_dependency(StringId name_id, RelationFlag flag, StringId version_id) const -> std::optional; /** * Add a dependency in the pool. * * A dependency represents a set of packages. * The flag can be used to create complex dependencies. In that case, for instance with * the "or" operator, the name and version ids are (ab)used with other dependency ids. * Handling of complex dependencies in libsolv is quite complex and not used in mamba. */ auto add_dependency(StringId name_id, RelationFlag flag, StringId version_id) -> DependencyId; /** * Parse a conda dependency from string and add it to the pool. * * This is currently the most efficient and stable way of adding dependencies. * We do not control the MatchSpec parser with this method so it may not be complete. */ auto add_legacy_conda_dependency(raw_str_view dep) -> DependencyId; auto add_legacy_conda_dependency(const std::string& dep) -> DependencyId; /** * Get the dependency object associated with the dependency id. * * Return nothing if not given a dependency id, which can be the case when string * ids are used as dependencies. * Can also be used to check if an id is a dependency id or not. */ auto get_dependency(DependencyId /* OR StringId */ id) const -> std::optional; /** Get the registered name of a dependency. */ auto get_dependency_name(DependencyId id) const -> std::string_view; /** Get the registered version of a dependency. */ auto get_dependency_version(DependencyId id) const -> std::string_view; /** Get the registered relation between a dependency name and version. */ auto get_dependency_relation(DependencyId id) const -> std::string_view; /** Compute the string representation of a dependency. */ auto dependency_to_string(DependencyId id) const -> std::string; /** * Create an indexed lookup of dependencies. * * Create an index to retrieve the list of solvables satisfying a given dependency. * This is an expensive operation. * The index is also computed over regular ``StringId``, in which case they represent * all packages that provide that name (without restriction on version). */ void create_whatprovides(); /** * Call @ref create_whatprovides if it does not exists. * * This does not update the whatprovides index if it was outdated. */ void ensure_whatprovides(); /** * Add an entry on the ``whatprovides_data``. * * This works in as an input to @ref add_to_whatprovides or @ref set_namespace_callback. * * @see add_to_whatprovides * @see add_to_whatprovides */ auto add_to_whatprovides_data(const ObjQueue& solvables) -> OffsetId; auto add_to_whatprovdies_data(const SolvableId* ptr, std::size_t count) -> OffsetId; /** * Add an entry to ``whatprovides``. * * This is the table that is looked up to know which solvables satistfy a given dependency. * Entries set with this function get overridden by @ref create_whatprovides. */ void add_to_whatprovides(DependencyId dep, OffsetId solvables); /** * Execute function for each solvable id that provides the given dependency. * * @pre ObjPoolView::create_whatprovides must have been called before. */ template void for_each_whatprovides_id(DependencyId dep, UnaryFunc&& func) const; /** * Execute function for each solvable that provides the given dependency. * * @pre ObjPoolView::create_whatprovides must have been called before. */ template void for_each_whatprovides(DependencyId dep, UnaryFunc&& func) const; template void for_each_whatprovides(DependencyId dep, UnaryFunc&& func); /** * General purpose query of solvables with given attributes. * * @return A Queue of SolvableId */ auto select_solvables(const ObjQueue& job) const -> ObjQueue; /** * Find solvables whose dependency in keyname match the dependency. * * For instance, with ``key=SOLVABLE_REQUIRES``, find solvables for which @p dep satisfies * a dependency. */ auto what_matches_dep(KeyNameId key, DependencyId dep, DependencyMarker marker = -1) const -> ObjQueue; /** * Add a repository with a given name. * * Solvable belong to a repository, although they are stored in the pool. */ auto add_repo(std::string_view name) -> std::pair; /** Check if a given repoitory id exists. */ auto has_repo(RepoId id) const -> bool; /** Get the repository associated with the given id, if it exists. */ auto get_repo(RepoId id) -> std::optional; /** Get the repository associated with the given id, if it exists. */ auto get_repo(RepoId id) const -> std::optional; /** Return the number of repository in the pool. */ auto repo_count() const -> std::size_t; /** * Remove a repository. * * Repo ids are not invalidated. * If @p reuse_ids is true, the solvable ids used in the pool can be reused for future * solvables. */ auto remove_repo(RepoId id, bool reuse_ids) -> bool; /** Execute function for each repository id in the pool. */ template void for_each_repo_id(UnaryFunc&& func) const; /** Execute function for each repository in the pool. */ template void for_each_repo(UnaryFunc&& func); /** Execute function for each repository in the pool. */ template void for_each_repo(UnaryFunc&& func) const; /** * Get the repository of installed packages, if it exists. * * @see ObjPoolView::set_installed_repository */ auto installed_repo() const -> std::optional; /** * Get the repository of installed packages, if it exists. * * @see ObjPoolView::set_installed_repository */ auto installed_repo() -> std::optional; /** * Set the installed repository. * * The installed repository represents package already installed. * For instance, it is used to filter out the solvable that are already available after * a solve. */ void set_installed_repo(RepoId id); /** Get the number of solvable in the pool, all repo combined. */ auto solvable_count() const -> std::size_t; /** Get a solvable from its id, if it exisists and regardless of its repository. */ auto get_solvable(SolvableId id) const -> std::optional; /** Get a solvable from its id, if it exisists and regardless of its repository. */ auto get_solvable(SolvableId id) -> std::optional; /** Execute function for each solvable id in the pool (in all repositories). */ template void for_each_solvable_id(UnaryFunc&& func) const; /** Execute function for each solvable in the pool (in all repositories). */ template void for_each_solvable(UnaryFunc&& func) const; /** Execute function for each solvable in the pool (in all repositories). */ template void for_each_solvable(UnaryFunc&& func); /** Execute function for each solvable id in the installed repository (if it exists). */ template void for_each_installed_solvable_id(UnaryFunc&& func) const; /** Execute function for each solvable id in the installed repository (if it exists). */ template void for_each_installed_solvable(UnaryFunc&& func) const; /** Execute function for each solvable id in the installed repository (if it exists). */ template void for_each_installed_solvable(UnaryFunc&& func); /** Rethrow exception thrown in callback. */ void rethrow_potential_callback_exception() const; protected: using UserCallback = std::function; /** * A wrapper around user callback to handle exceptions. * * This cannot be set in this class since this is only a view type but can be checked * for errors. */ struct NamespaceCallbackWrapper; private: raw_ptr m_pool; ObjPoolView(raw_ptr ptr); friend class ObjPool; }; class ObjPool : private ObjPoolView { public: ObjPool(); ~ObjPool(); [[nodiscard]] auto view() const -> ObjPoolView; using ObjPoolView::raw; using ObjPoolView::current_error; using ObjPoolView::set_current_error; using ObjPoolView::disttype; using ObjPoolView::set_disttype; using ObjPoolView::find_string; using ObjPoolView::add_string; using ObjPoolView::get_string; using ObjPoolView::find_dependency; using ObjPoolView::add_dependency; using ObjPoolView::add_legacy_conda_dependency; using ObjPoolView::get_dependency_name; using ObjPoolView::get_dependency_version; using ObjPoolView::get_dependency_relation; using ObjPoolView::dependency_to_string; using ObjPoolView::create_whatprovides; using ObjPoolView::ensure_whatprovides; using ObjPoolView::add_to_whatprovides_data; using ObjPoolView::add_to_whatprovides; using ObjPoolView::for_each_whatprovides_id; using ObjPoolView::for_each_whatprovides; using ObjPoolView::select_solvables; using ObjPoolView::what_matches_dep; using ObjPoolView::add_repo; using ObjPoolView::has_repo; using ObjPoolView::get_repo; using ObjPoolView::repo_count; using ObjPoolView::remove_repo; using ObjPoolView::for_each_repo_id; using ObjPoolView::for_each_repo; using ObjPoolView::installed_repo; using ObjPoolView::set_installed_repo; using ObjPoolView::solvable_count; using ObjPoolView::get_solvable; using ObjPoolView::for_each_solvable_id; using ObjPoolView::for_each_solvable; using ObjPoolView::for_each_installed_solvable_id; using ObjPoolView::for_each_installed_solvable; using ObjPoolView::rethrow_potential_callback_exception; /** Set the callback to handle libsolv messages. * * The callback takes a ``Pool*``, the type of message as ``int``, and the message * as a ``std::string_view``. * The callback must be marked ``noexcept``. */ template void set_debug_callback(Func&& callback); using UserCallback = ObjPoolView::UserCallback; void set_namespace_callback(UserCallback&& callback); private: struct PoolDeleter { void operator()(::Pool* ptr); }; std::unique_ptr m_user_debug_callback; std::unique_ptr m_user_namespace_callback; // Must be deleted before the debug callback std::unique_ptr<::Pool, ObjPool::PoolDeleter> m_pool = nullptr; }; /******************************* * Implementation of ObjPoolView * *******************************/ template void ObjPoolView::for_each_repo_id(UnaryFunc&& func) const { const ::Pool* const pool = raw(); const ::Repo* repo = nullptr; RepoId repo_id = 0; FOR_REPOS(repo_id, repo) { if constexpr (std::is_same_v) { if (func(repo_id) == LoopControl::Break) { break; } } else { func(repo_id); } } } template void ObjPoolView::for_each_repo(UnaryFunc&& func) const { // Safe optional unchecked because we iterate over available values return for_each_repo_id([this, func](RepoId id) { func(get_repo(id).value()); }); } template void ObjPoolView::for_each_repo(UnaryFunc&& func) { // Safe optional unchecked because we iterate over available values return for_each_repo_id([this, func](RepoId id) { func(get_repo(id).value()); }); } template void ObjPoolView::for_each_whatprovides_id(DependencyId dep, UnaryFunc&& func) const { if (raw()->whatprovides == nullptr) { throw std::runtime_error("Whatprovides index is not created"); } auto* const pool = const_cast<::Pool*>(raw()); SolvableId id = 0; ::Id offset = 0; // Not really an Id FOR_PROVIDES(id, offset, dep) { if constexpr (std::is_same_v) { if (func(id) == LoopControl::Break) { break; } } else { func(id); } } } template void ObjPoolView::for_each_whatprovides(DependencyId dep, UnaryFunc&& func) const { // Safe optional unchecked because we iterate over available values return for_each_whatprovides_id( dep, [this, func](SolvableId id) { func(get_solvable(id).value()); } ); } template void ObjPoolView::for_each_whatprovides(DependencyId dep, UnaryFunc&& func) { // Safe optional unchecked because we iterate over available values return for_each_whatprovides_id( dep, [this, func](SolvableId id) { func(get_solvable(id).value()); } ); } template void ObjPoolView::for_each_solvable_id(UnaryFunc&& func) const { const ::Pool* const pool = raw(); SolvableId id = 0; FOR_POOL_SOLVABLES(id) { if constexpr (std::is_same_v) { if (func(id) == LoopControl::Break) { break; } } else { func(id); } } } template void ObjPoolView::for_each_solvable(UnaryFunc&& func) const { // Safe optional unchecked because we iterate over available values return for_each_solvable_id([this, func](SolvableId id) { func(get_solvable(id).value()); }); } template void ObjPoolView::for_each_solvable(UnaryFunc&& func) { // Safe optional unchecked because we iterate over available values return for_each_solvable_id([this, func](SolvableId id) { func(get_solvable(id).value()); }); } template void ObjPoolView::for_each_installed_solvable_id(UnaryFunc&& func) const { if (auto installed = installed_repo(); installed.has_value()) { installed->for_each_solvable_id(std::forward(func)); } } template void ObjPoolView::for_each_installed_solvable(UnaryFunc&& func) const { if (auto installed = installed_repo(); installed.has_value()) { installed->for_each_solvable(std::forward(func)); } } template void ObjPoolView::for_each_installed_solvable(UnaryFunc&& func) { if (auto installed = installed_repo(); installed.has_value()) { installed->for_each_solvable(std::forward(func)); } } template void ObjPool::set_debug_callback(Func&& callback) { static_assert( std::is_nothrow_invocable_v, "User callback must be marked noexcept." ); m_user_debug_callback.reset(new Func(std::forward(callback))); m_user_debug_callback.get_deleter() = [](void* ptr) { delete reinterpret_cast(ptr); }; // Wrap the user callback in the libsolv function type that must cast the callback ptr auto debug_callback = [](Pool* pool, void* user_data, int type, const char* msg) noexcept { auto* user_debug_callback = reinterpret_cast(user_data); (*user_debug_callback)(ObjPoolView(pool), type, std::string_view(msg)); // noexcept }; ::pool_setdebugcallback(raw(), debug_callback, m_user_debug_callback.get()); } } #endif ================================================ FILE: libmamba/ext/solv-cpp/include/solv-cpp/queue.hpp ================================================ // Copyright (c) 2023, QuantStack and Mamba Contributors // // Distributed under the terms of the BSD 3-Clause License. // // The full license is in the file LICENSE, distributed with this software. #ifndef MAMBA_SOLV_QUEUE_HPP #define MAMBA_SOLV_QUEUE_HPP #include #include namespace solv { /** * A ``std::vector`` like structure used in libsolv. * * This is used privately within libsolv, hence the direct use of ``Queue`` as an attribute * (for performances). */ class ObjQueue { public: using value_type = ::Id; using reference = value_type&; using const_reference = const value_type&; using pointer = ::Id*; using const_pointer = const ::Id*; using size_type = std::size_t; using difference_type = std::ptrdiff_t; using iterator = pointer; using const_iterator = const_pointer; using reverse_iterator = std::reverse_iterator; using const_reverse_iterator = std::reverse_iterator; ObjQueue(); template ObjQueue(InputIt first, InputIt last); ObjQueue(std::initializer_list elems); ObjQueue(ObjQueue&& other); ObjQueue(const ObjQueue& other); ~ObjQueue(); auto operator=(ObjQueue&& other) -> ObjQueue&; auto operator=(const ObjQueue& other) -> ObjQueue&; [[nodiscard]] auto size() const -> size_type; [[nodiscard]] auto capacity() const -> size_type; [[nodiscard]] auto empty() const -> bool; auto insert(const_iterator pos, value_type id) -> iterator; template auto insert(const_iterator pos, InputIt first, InputIt last) -> iterator; void push_back(value_type id); void push_back(value_type id1, value_type id2); auto erase(const_iterator pos) -> iterator; void reserve(size_type new_cap); void clear(); [[nodiscard]] auto front() -> reference; [[nodiscard]] auto front() const -> const_reference; [[nodiscard]] auto back() -> reference; [[nodiscard]] auto back() const -> const_reference; [[nodiscard]] auto operator[](size_type pos) -> reference; [[nodiscard]] auto operator[](size_type pos) const -> const_reference; [[nodiscard]] auto at(size_type pos) -> reference; [[nodiscard]] auto at(size_type pos) const -> const_reference; [[nodiscard]] auto begin() -> iterator; [[nodiscard]] auto begin() const -> const_iterator; [[nodiscard]] auto cbegin() const -> const_iterator; [[nodiscard]] auto end() -> iterator; [[nodiscard]] auto end() const -> const_iterator; [[nodiscard]] auto cend() const -> const_iterator; [[nodiscard]] auto rbegin() -> reverse_iterator; [[nodiscard]] auto rbegin() const -> const_reverse_iterator; [[nodiscard]] auto crbegin() const -> const_reverse_iterator; [[nodiscard]] auto rend() -> reverse_iterator; [[nodiscard]] auto rend() const -> const_reverse_iterator; [[nodiscard]] auto crend() const -> const_reverse_iterator; [[nodiscard]] auto data() -> pointer; [[nodiscard]] auto data() const -> const_pointer; [[nodiscard]] auto contains(value_type id) const -> bool; template