Snap for 8216814 from f6c30c1d40fd14734832b7929474867fa189b1a5 to ndk-r25-release

Change-Id: I6e3c6dfb9b03910f68b710f98d251a6c9455c38c
diff --git a/lib/libpython3.9.so.1.0 b/lib/libpython3.9.so.1.0
index 5185b74..48fd34e 100755
--- a/lib/libpython3.9.so.1.0
+++ b/lib/libpython3.9.so.1.0
Binary files differ
diff --git a/lib/python3.9/_sysconfigdata__linux_x86_64-linux-gnu.py b/lib/python3.9/_sysconfigdata__linux_x86_64-linux-gnu.py
index ce8d5a9..cd36326 100644
--- a/lib/python3.9/_sysconfigdata__linux_x86_64-linux-gnu.py
+++ b/lib/python3.9/_sysconfigdata__linux_x86_64-linux-gnu.py
@@ -96,9 +96,12 @@
  'FLOAT_WORDS_BIGENDIAN': 0,
  'FLOCK_NEEDS_LIBBSD': 0,
  'GETPGRP_HAVE_ARG': 0,
- 'GITBRANCH': '',
- 'GITTAG': '',
- 'GITVERSION': '',
+ 'GITBRANCH': 'git --git-dir /tmpfs/src/git/external/python/cpython3/.git '
+              'name-rev --name-only HEAD',
+ 'GITTAG': 'git --git-dir /tmpfs/src/git/external/python/cpython3/.git '
+           'describe --all --always --dirty',
+ 'GITVERSION': 'git --git-dir /tmpfs/src/git/external/python/cpython3/.git '
+               'rev-parse --short HEAD',
  'GNULD': 'yes',
  'HAVE_ACCEPT4': 1,
  'HAVE_ACOSH': 1,
diff --git a/lib/python3.9/lib-dynload/_sqlite3.cpython-39-x86_64-linux-gnu.so b/lib/python3.9/lib-dynload/_sqlite3.cpython-39-x86_64-linux-gnu.so
deleted file mode 100755
index c866f99..0000000
--- a/lib/python3.9/lib-dynload/_sqlite3.cpython-39-x86_64-linux-gnu.so
+++ /dev/null
Binary files differ
diff --git a/lib/python3.9/venv/__init__.py b/lib/python3.9/venv/__init__.py
new file mode 100644
index 0000000..8009deb
--- /dev/null
+++ b/lib/python3.9/venv/__init__.py
@@ -0,0 +1,499 @@
+"""
+Virtual environment (venv) package for Python. Based on PEP 405.
+
+Copyright (C) 2011-2014 Vinay Sajip.
+Licensed to the PSF under a contributor agreement.
+"""
+import logging
+import os
+import shutil
+import subprocess
+import sys
+import sysconfig
+import types
+
+
+CORE_VENV_DEPS = ('pip', 'setuptools')
+logger = logging.getLogger(__name__)
+
+
+class EnvBuilder:
+    """
+    This class exists to allow virtual environment creation to be
+    customized. The constructor parameters determine the builder's
+    behaviour when called upon to create a virtual environment.
+
+    By default, the builder makes the system (global) site-packages dir
+    *un*available to the created environment.
+
+    If invoked using the Python -m option, the default is to use copying
+    on Windows platforms but symlinks elsewhere. If instantiated some
+    other way, the default is to *not* use symlinks.
+
+    :param system_site_packages: If True, the system (global) site-packages
+                                 dir is available to created environments.
+    :param clear: If True, delete the contents of the environment directory if
+                  it already exists, before environment creation.
+    :param symlinks: If True, attempt to symlink rather than copy files into
+                     virtual environment.
+    :param upgrade: If True, upgrade an existing virtual environment.
+    :param with_pip: If True, ensure pip is installed in the virtual
+                     environment
+    :param prompt: Alternative terminal prefix for the environment.
+    :param upgrade_deps: Update the base venv modules to the latest on PyPI
+    """
+
+    def __init__(self, system_site_packages=False, clear=False,
+                 symlinks=False, upgrade=False, with_pip=False, prompt=None,
+                 upgrade_deps=False):
+        self.system_site_packages = system_site_packages
+        self.clear = clear
+        self.symlinks = symlinks
+        self.upgrade = upgrade
+        self.with_pip = with_pip
+        if prompt == '.':  # see bpo-38901
+            prompt = os.path.basename(os.getcwd())
+        self.prompt = prompt
+        self.upgrade_deps = upgrade_deps
+
+    def create(self, env_dir):
+        """
+        Create a virtual environment in a directory.
+
+        :param env_dir: The target directory to create an environment in.
+
+        """
+        env_dir = os.path.abspath(env_dir)
+        context = self.ensure_directories(env_dir)
+        # See issue 24875. We need system_site_packages to be False
+        # until after pip is installed.
+        true_system_site_packages = self.system_site_packages
+        self.system_site_packages = False
+        self.create_configuration(context)
+        self.setup_python(context)
+        if self.with_pip:
+            self._setup_pip(context)
+        if not self.upgrade:
+            self.setup_scripts(context)
+            self.post_setup(context)
+        if true_system_site_packages:
+            # We had set it to False before, now
+            # restore it and rewrite the configuration
+            self.system_site_packages = True
+            self.create_configuration(context)
+        if self.upgrade_deps:
+            self.upgrade_dependencies(context)
+
+    def clear_directory(self, path):
+        for fn in os.listdir(path):
+            fn = os.path.join(path, fn)
+            if os.path.islink(fn) or os.path.isfile(fn):
+                os.remove(fn)
+            elif os.path.isdir(fn):
+                shutil.rmtree(fn)
+
+    def ensure_directories(self, env_dir):
+        """
+        Create the directories for the environment.
+
+        Returns a context object which holds paths in the environment,
+        for use by subsequent logic.
+        """
+
+        def create_if_needed(d):
+            if not os.path.exists(d):
+                os.makedirs(d)
+            elif os.path.islink(d) or os.path.isfile(d):
+                raise ValueError('Unable to create directory %r' % d)
+
+        if os.path.exists(env_dir) and self.clear:
+            self.clear_directory(env_dir)
+        context = types.SimpleNamespace()
+        context.env_dir = env_dir
+        context.env_name = os.path.split(env_dir)[1]
+        prompt = self.prompt if self.prompt is not None else context.env_name
+        context.prompt = '(%s) ' % prompt
+        create_if_needed(env_dir)
+        executable = sys._base_executable
+        dirname, exename = os.path.split(os.path.abspath(executable))
+        context.executable = executable
+        context.python_dir = dirname
+        context.python_exe = exename
+        if sys.platform == 'win32':
+            binname = 'Scripts'
+            incpath = 'Include'
+            libpath = os.path.join(env_dir, 'Lib', 'site-packages')
+        else:
+            binname = 'bin'
+            incpath = 'include'
+            libpath = os.path.join(env_dir, 'lib',
+                                   'python%d.%d' % sys.version_info[:2],
+                                   'site-packages')
+        context.inc_path = path = os.path.join(env_dir, incpath)
+        create_if_needed(path)
+        create_if_needed(libpath)
+        # Issue 21197: create lib64 as a symlink to lib on 64-bit non-OS X POSIX
+        if ((sys.maxsize > 2**32) and (os.name == 'posix') and
+            (sys.platform != 'darwin')):
+            link_path = os.path.join(env_dir, 'lib64')
+            if not os.path.exists(link_path):   # Issue #21643
+                os.symlink('lib', link_path)
+        context.bin_path = binpath = os.path.join(env_dir, binname)
+        context.bin_name = binname
+        context.env_exe = os.path.join(binpath, exename)
+        create_if_needed(binpath)
+        return context
+
+    def create_configuration(self, context):
+        """
+        Create a configuration file indicating where the environment's Python
+        was copied from, and whether the system site-packages should be made
+        available in the environment.
+
+        :param context: The information for the environment creation request
+                        being processed.
+        """
+        context.cfg_path = path = os.path.join(context.env_dir, 'pyvenv.cfg')
+        with open(path, 'w', encoding='utf-8') as f:
+            f.write('home = %s\n' % context.python_dir)
+            if self.system_site_packages:
+                incl = 'true'
+            else:
+                incl = 'false'
+            f.write('include-system-site-packages = %s\n' % incl)
+            f.write('version = %d.%d.%d\n' % sys.version_info[:3])
+            if self.prompt is not None:
+                f.write(f'prompt = {self.prompt!r}\n')
+
+    if os.name != 'nt':
+        def symlink_or_copy(self, src, dst, relative_symlinks_ok=False):
+            """
+            Try symlinking a file, and if that fails, fall back to copying.
+            """
+            force_copy = not self.symlinks
+            if not force_copy:
+                try:
+                    if not os.path.islink(dst): # can't link to itself!
+                        if relative_symlinks_ok:
+                            assert os.path.dirname(src) == os.path.dirname(dst)
+                            os.symlink(os.path.basename(src), dst)
+                        else:
+                            os.symlink(src, dst)
+                except Exception:   # may need to use a more specific exception
+                    logger.warning('Unable to symlink %r to %r', src, dst)
+                    force_copy = True
+            if force_copy:
+                shutil.copyfile(src, dst)
+    else:
+        def symlink_or_copy(self, src, dst, relative_symlinks_ok=False):
+            """
+            Try symlinking a file, and if that fails, fall back to copying.
+            """
+            bad_src = os.path.lexists(src) and not os.path.exists(src)
+            if self.symlinks and not bad_src and not os.path.islink(dst):
+                try:
+                    if relative_symlinks_ok:
+                        assert os.path.dirname(src) == os.path.dirname(dst)
+                        os.symlink(os.path.basename(src), dst)
+                    else:
+                        os.symlink(src, dst)
+                    return
+                except Exception:   # may need to use a more specific exception
+                    logger.warning('Unable to symlink %r to %r', src, dst)
+
+            # On Windows, we rewrite symlinks to our base python.exe into
+            # copies of venvlauncher.exe
+            basename, ext = os.path.splitext(os.path.basename(src))
+            srcfn = os.path.join(os.path.dirname(__file__),
+                                 "scripts",
+                                 "nt",
+                                 basename + ext)
+            # Builds or venv's from builds need to remap source file
+            # locations, as we do not put them into Lib/venv/scripts
+            if sysconfig.is_python_build(True) or not os.path.isfile(srcfn):
+                if basename.endswith('_d'):
+                    ext = '_d' + ext
+                    basename = basename[:-2]
+                if basename == 'python':
+                    basename = 'venvlauncher'
+                elif basename == 'pythonw':
+                    basename = 'venvwlauncher'
+                src = os.path.join(os.path.dirname(src), basename + ext)
+            else:
+                src = srcfn
+            if not os.path.exists(src):
+                if not bad_src:
+                    logger.warning('Unable to copy %r', src)
+                return
+
+            shutil.copyfile(src, dst)
+
+    def setup_python(self, context):
+        """
+        Set up a Python executable in the environment.
+
+        :param context: The information for the environment creation request
+                        being processed.
+        """
+        binpath = context.bin_path
+        path = context.env_exe
+        copier = self.symlink_or_copy
+        dirname = context.python_dir
+        if os.name != 'nt':
+            copier(context.executable, path)
+            if not os.path.islink(path):
+                os.chmod(path, 0o755)
+            for suffix in ('python', 'python3', f'python3.{sys.version_info[1]}'):
+                path = os.path.join(binpath, suffix)
+                if not os.path.exists(path):
+                    # Issue 18807: make copies if
+                    # symlinks are not wanted
+                    copier(context.env_exe, path, relative_symlinks_ok=True)
+                    if not os.path.islink(path):
+                        os.chmod(path, 0o755)
+        else:
+            if self.symlinks:
+                # For symlinking, we need a complete copy of the root directory
+                # If symlinks fail, you'll get unnecessary copies of files, but
+                # we assume that if you've opted into symlinks on Windows then
+                # you know what you're doing.
+                suffixes = [
+                    f for f in os.listdir(dirname) if
+                    os.path.normcase(os.path.splitext(f)[1]) in ('.exe', '.dll')
+                ]
+                if sysconfig.is_python_build(True):
+                    suffixes = [
+                        f for f in suffixes if
+                        os.path.normcase(f).startswith(('python', 'vcruntime'))
+                    ]
+            else:
+                suffixes = ['python.exe', 'python_d.exe', 'pythonw.exe',
+                            'pythonw_d.exe']
+
+            for suffix in suffixes:
+                src = os.path.join(dirname, suffix)
+                if os.path.lexists(src):
+                    copier(src, os.path.join(binpath, suffix))
+
+            if sysconfig.is_python_build(True):
+                # copy init.tcl
+                for root, dirs, files in os.walk(context.python_dir):
+                    if 'init.tcl' in files:
+                        tcldir = os.path.basename(root)
+                        tcldir = os.path.join(context.env_dir, 'Lib', tcldir)
+                        if not os.path.exists(tcldir):
+                            os.makedirs(tcldir)
+                        src = os.path.join(root, 'init.tcl')
+                        dst = os.path.join(tcldir, 'init.tcl')
+                        shutil.copyfile(src, dst)
+                        break
+
+    def _setup_pip(self, context):
+        """Installs or upgrades pip in a virtual environment"""
+        # We run ensurepip in isolated mode to avoid side effects from
+        # environment vars, the current directory and anything else
+        # intended for the global Python environment
+        cmd = [context.env_exe, '-Im', 'ensurepip', '--upgrade',
+                                                    '--default-pip']
+        subprocess.check_output(cmd, stderr=subprocess.STDOUT)
+
+    def setup_scripts(self, context):
+        """
+        Set up scripts into the created environment from a directory.
+
+        This method installs the default scripts into the environment
+        being created. You can prevent the default installation by overriding
+        this method if you really need to, or if you need to specify
+        a different location for the scripts to install. By default, the
+        'scripts' directory in the venv package is used as the source of
+        scripts to install.
+        """
+        path = os.path.abspath(os.path.dirname(__file__))
+        path = os.path.join(path, 'scripts')
+        self.install_scripts(context, path)
+
+    def post_setup(self, context):
+        """
+        Hook for post-setup modification of the venv. Subclasses may install
+        additional packages or scripts here, add activation shell scripts, etc.
+
+        :param context: The information for the environment creation request
+                        being processed.
+        """
+        pass
+
+    def replace_variables(self, text, context):
+        """
+        Replace variable placeholders in script text with context-specific
+        variables.
+
+        Return the text passed in , but with variables replaced.
+
+        :param text: The text in which to replace placeholder variables.
+        :param context: The information for the environment creation request
+                        being processed.
+        """
+        text = text.replace('__VENV_DIR__', context.env_dir)
+        text = text.replace('__VENV_NAME__', context.env_name)
+        text = text.replace('__VENV_PROMPT__', context.prompt)
+        text = text.replace('__VENV_BIN_NAME__', context.bin_name)
+        text = text.replace('__VENV_PYTHON__', context.env_exe)
+        return text
+
+    def install_scripts(self, context, path):
+        """
+        Install scripts into the created environment from a directory.
+
+        :param context: The information for the environment creation request
+                        being processed.
+        :param path:    Absolute pathname of a directory containing script.
+                        Scripts in the 'common' subdirectory of this directory,
+                        and those in the directory named for the platform
+                        being run on, are installed in the created environment.
+                        Placeholder variables are replaced with environment-
+                        specific values.
+        """
+        binpath = context.bin_path
+        plen = len(path)
+        for root, dirs, files in os.walk(path):
+            if root == path: # at top-level, remove irrelevant dirs
+                for d in dirs[:]:
+                    if d not in ('common', os.name):
+                        dirs.remove(d)
+                continue # ignore files in top level
+            for f in files:
+                if (os.name == 'nt' and f.startswith('python')
+                        and f.endswith(('.exe', '.pdb'))):
+                    continue
+                srcfile = os.path.join(root, f)
+                suffix = root[plen:].split(os.sep)[2:]
+                if not suffix:
+                    dstdir = binpath
+                else:
+                    dstdir = os.path.join(binpath, *suffix)
+                if not os.path.exists(dstdir):
+                    os.makedirs(dstdir)
+                dstfile = os.path.join(dstdir, f)
+                with open(srcfile, 'rb') as f:
+                    data = f.read()
+                if not srcfile.endswith(('.exe', '.pdb')):
+                    try:
+                        data = data.decode('utf-8')
+                        data = self.replace_variables(data, context)
+                        data = data.encode('utf-8')
+                    except UnicodeError as e:
+                        data = None
+                        logger.warning('unable to copy script %r, '
+                                       'may be binary: %s', srcfile, e)
+                if data is not None:
+                    with open(dstfile, 'wb') as f:
+                        f.write(data)
+                    shutil.copymode(srcfile, dstfile)
+
+    def upgrade_dependencies(self, context):
+        logger.debug(
+            f'Upgrading {CORE_VENV_DEPS} packages in {context.bin_path}'
+        )
+        if sys.platform == 'win32':
+            python_exe = os.path.join(context.bin_path, 'python.exe')
+        else:
+            python_exe = os.path.join(context.bin_path, 'python')
+        cmd = [python_exe, '-m', 'pip', 'install', '--upgrade']
+        cmd.extend(CORE_VENV_DEPS)
+        subprocess.check_call(cmd)
+
+
+def create(env_dir, system_site_packages=False, clear=False,
+           symlinks=False, with_pip=False, prompt=None, upgrade_deps=False):
+    """Create a virtual environment in a directory."""
+    builder = EnvBuilder(system_site_packages=system_site_packages,
+                         clear=clear, symlinks=symlinks, with_pip=with_pip,
+                         prompt=prompt, upgrade_deps=upgrade_deps)
+    builder.create(env_dir)
+
+def main(args=None):
+    compatible = True
+    if sys.version_info < (3, 3):
+        compatible = False
+    elif not hasattr(sys, 'base_prefix'):
+        compatible = False
+    if not compatible:
+        raise ValueError('This script is only for use with Python >= 3.3')
+    else:
+        import argparse
+
+        parser = argparse.ArgumentParser(prog=__name__,
+                                         description='Creates virtual Python '
+                                                     'environments in one or '
+                                                     'more target '
+                                                     'directories.',
+                                         epilog='Once an environment has been '
+                                                'created, you may wish to '
+                                                'activate it, e.g. by '
+                                                'sourcing an activate script '
+                                                'in its bin directory.')
+        parser.add_argument('dirs', metavar='ENV_DIR', nargs='+',
+                            help='A directory to create the environment in.')
+        parser.add_argument('--system-site-packages', default=False,
+                            action='store_true', dest='system_site',
+                            help='Give the virtual environment access to the '
+                                 'system site-packages dir.')
+        if os.name == 'nt':
+            use_symlinks = False
+        else:
+            use_symlinks = True
+        group = parser.add_mutually_exclusive_group()
+        group.add_argument('--symlinks', default=use_symlinks,
+                           action='store_true', dest='symlinks',
+                           help='Try to use symlinks rather than copies, '
+                                'when symlinks are not the default for '
+                                'the platform.')
+        group.add_argument('--copies', default=not use_symlinks,
+                           action='store_false', dest='symlinks',
+                           help='Try to use copies rather than symlinks, '
+                                'even when symlinks are the default for '
+                                'the platform.')
+        parser.add_argument('--clear', default=False, action='store_true',
+                            dest='clear', help='Delete the contents of the '
+                                               'environment directory if it '
+                                               'already exists, before '
+                                               'environment creation.')
+        parser.add_argument('--upgrade', default=False, action='store_true',
+                            dest='upgrade', help='Upgrade the environment '
+                                               'directory to use this version '
+                                               'of Python, assuming Python '
+                                               'has been upgraded in-place.')
+        parser.add_argument('--without-pip', dest='with_pip',
+                            default=True, action='store_false',
+                            help='Skips installing or upgrading pip in the '
+                                 'virtual environment (pip is bootstrapped '
+                                 'by default)')
+        parser.add_argument('--prompt',
+                            help='Provides an alternative prompt prefix for '
+                                 'this environment.')
+        parser.add_argument('--upgrade-deps', default=False, action='store_true',
+                            dest='upgrade_deps',
+                            help='Upgrade core dependencies: {} to the latest '
+                                 'version in PyPI'.format(
+                                 ' '.join(CORE_VENV_DEPS)))
+        options = parser.parse_args(args)
+        if options.upgrade and options.clear:
+            raise ValueError('you cannot supply --upgrade and --clear together.')
+        builder = EnvBuilder(system_site_packages=options.system_site,
+                             clear=options.clear,
+                             symlinks=options.symlinks,
+                             upgrade=options.upgrade,
+                             with_pip=options.with_pip,
+                             prompt=options.prompt,
+                             upgrade_deps=options.upgrade_deps)
+        for d in options.dirs:
+            builder.create(d)
+
+if __name__ == '__main__':
+    rc = 1
+    try:
+        main()
+        rc = 0
+    except Exception as e:
+        print('Error: %s' % e, file=sys.stderr)
+    sys.exit(rc)
diff --git a/lib/python3.9/venv/__main__.py b/lib/python3.9/venv/__main__.py
new file mode 100644
index 0000000..912423e
--- /dev/null
+++ b/lib/python3.9/venv/__main__.py
@@ -0,0 +1,10 @@
+import sys
+from . import main
+
+rc = 1
+try:
+    main()
+    rc = 0
+except Exception as e:
+    print('Error: %s' % e, file=sys.stderr)
+sys.exit(rc)
diff --git a/lib/python3.9/venv/scripts/common/Activate.ps1 b/lib/python3.9/venv/scripts/common/Activate.ps1
new file mode 100644
index 0000000..2fb3852
--- /dev/null
+++ b/lib/python3.9/venv/scripts/common/Activate.ps1
@@ -0,0 +1,241 @@
+<#

+.Synopsis

+Activate a Python virtual environment for the current PowerShell session.

+

+.Description

+Pushes the python executable for a virtual environment to the front of the

+$Env:PATH environment variable and sets the prompt to signify that you are

+in a Python virtual environment. Makes use of the command line switches as

+well as the `pyvenv.cfg` file values present in the virtual environment.

+

+.Parameter VenvDir

+Path to the directory that contains the virtual environment to activate. The

+default value for this is the parent of the directory that the Activate.ps1

+script is located within.

+

+.Parameter Prompt

+The prompt prefix to display when this virtual environment is activated. By

+default, this prompt is the name of the virtual environment folder (VenvDir)

+surrounded by parentheses and followed by a single space (ie. '(.venv) ').

+

+.Example

+Activate.ps1

+Activates the Python virtual environment that contains the Activate.ps1 script.

+

+.Example

+Activate.ps1 -Verbose

+Activates the Python virtual environment that contains the Activate.ps1 script,

+and shows extra information about the activation as it executes.

+

+.Example

+Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv

+Activates the Python virtual environment located in the specified location.

+

+.Example

+Activate.ps1 -Prompt "MyPython"

+Activates the Python virtual environment that contains the Activate.ps1 script,

+and prefixes the current prompt with the specified string (surrounded in

+parentheses) while the virtual environment is active.

+

+.Notes

+On Windows, it may be required to enable this Activate.ps1 script by setting the

+execution policy for the user. You can do this by issuing the following PowerShell

+command:

+

+PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

+

+For more information on Execution Policies: 

+https://go.microsoft.com/fwlink/?LinkID=135170

+

+#>

+Param(

+    [Parameter(Mandatory = $false)]

+    [String]

+    $VenvDir,

+    [Parameter(Mandatory = $false)]

+    [String]

+    $Prompt

+)

+

+<# Function declarations --------------------------------------------------- #>

+

+<#

+.Synopsis

+Remove all shell session elements added by the Activate script, including the

+addition of the virtual environment's Python executable from the beginning of

+the PATH variable.

+

+.Parameter NonDestructive

+If present, do not remove this function from the global namespace for the

+session.

+

+#>

+function global:deactivate ([switch]$NonDestructive) {

+    # Revert to original values

+

+    # The prior prompt:

+    if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) {

+        Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt

+        Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT

+    }

+

+    # The prior PYTHONHOME:

+    if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) {

+        Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME

+        Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME

+    }

+

+    # The prior PATH:

+    if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) {

+        Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH

+        Remove-Item -Path Env:_OLD_VIRTUAL_PATH

+    }

+

+    # Just remove the VIRTUAL_ENV altogether:

+    if (Test-Path -Path Env:VIRTUAL_ENV) {

+        Remove-Item -Path env:VIRTUAL_ENV

+    }

+

+    # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether:

+    if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) {

+        Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force

+    }

+

+    # Leave deactivate function in the global namespace if requested:

+    if (-not $NonDestructive) {

+        Remove-Item -Path function:deactivate

+    }

+}

+

+<#

+.Description

+Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the

+given folder, and returns them in a map.

+

+For each line in the pyvenv.cfg file, if that line can be parsed into exactly

+two strings separated by `=` (with any amount of whitespace surrounding the =)

+then it is considered a `key = value` line. The left hand string is the key,

+the right hand is the value.

+

+If the value starts with a `'` or a `"` then the first and last character is

+stripped from the value before being captured.

+

+.Parameter ConfigDir

+Path to the directory that contains the `pyvenv.cfg` file.

+#>

+function Get-PyVenvConfig(

+    [String]

+    $ConfigDir

+) {

+    Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg"

+

+    # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue).

+    $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue

+

+    # An empty map will be returned if no config file is found.

+    $pyvenvConfig = @{ }

+

+    if ($pyvenvConfigPath) {

+

+        Write-Verbose "File exists, parse `key = value` lines"

+        $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath

+

+        $pyvenvConfigContent | ForEach-Object {

+            $keyval = $PSItem -split "\s*=\s*", 2

+            if ($keyval[0] -and $keyval[1]) {

+                $val = $keyval[1]

+

+                # Remove extraneous quotations around a string value.

+                if ("'""".Contains($val.Substring(0, 1))) {

+                    $val = $val.Substring(1, $val.Length - 2)

+                }

+

+                $pyvenvConfig[$keyval[0]] = $val

+                Write-Verbose "Adding Key: '$($keyval[0])'='$val'"

+            }

+        }

+    }

+    return $pyvenvConfig

+}

+

+

+<# Begin Activate script --------------------------------------------------- #>

+

+# Determine the containing directory of this script

+$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition

+$VenvExecDir = Get-Item -Path $VenvExecPath

+

+Write-Verbose "Activation script is located in path: '$VenvExecPath'"

+Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)"

+Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)"

+

+# Set values required in priority: CmdLine, ConfigFile, Default

+# First, get the location of the virtual environment, it might not be

+# VenvExecDir if specified on the command line.

+if ($VenvDir) {

+    Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values"

+}

+else {

+    Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."

+    $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")

+    Write-Verbose "VenvDir=$VenvDir"

+}

+

+# Next, read the `pyvenv.cfg` file to determine any required value such

+# as `prompt`.

+$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir

+

+# Next, set the prompt from the command line, or the config file, or

+# just use the name of the virtual environment folder.

+if ($Prompt) {

+    Write-Verbose "Prompt specified as argument, using '$Prompt'"

+}

+else {

+    Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value"

+    if ($pyvenvCfg -and $pyvenvCfg['prompt']) {

+        Write-Verbose "  Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'"

+        $Prompt = $pyvenvCfg['prompt'];

+    }

+    else {

+        Write-Verbose "  Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virutal environment)"

+        Write-Verbose "  Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'"

+        $Prompt = Split-Path -Path $venvDir -Leaf

+    }

+}

+

+Write-Verbose "Prompt = '$Prompt'"

+Write-Verbose "VenvDir='$VenvDir'"

+

+# Deactivate any currently active virtual environment, but leave the

+# deactivate function in place.

+deactivate -nondestructive

+

+# Now set the environment variable VIRTUAL_ENV, used by many tools to determine

+# that there is an activated venv.

+$env:VIRTUAL_ENV = $VenvDir

+

+if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {

+

+    Write-Verbose "Setting prompt to '$Prompt'"

+

+    # Set the prompt to include the env name

+    # Make sure _OLD_VIRTUAL_PROMPT is global

+    function global:_OLD_VIRTUAL_PROMPT { "" }

+    Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT

+    New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt

+

+    function global:prompt {

+        Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "

+        _OLD_VIRTUAL_PROMPT

+    }

+}

+

+# Clear PYTHONHOME

+if (Test-Path -Path Env:PYTHONHOME) {

+    Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME

+    Remove-Item -Path Env:PYTHONHOME

+}

+

+# Add the venv to the PATH

+Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH

+$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH"

diff --git a/lib/python3.9/venv/scripts/common/activate b/lib/python3.9/venv/scripts/common/activate
new file mode 100644
index 0000000..45af353
--- /dev/null
+++ b/lib/python3.9/venv/scripts/common/activate
@@ -0,0 +1,66 @@
+# This file must be used with "source bin/activate" *from bash*
+# you cannot run it directly
+
+deactivate () {
+    # reset old environment variables
+    if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
+        PATH="${_OLD_VIRTUAL_PATH:-}"
+        export PATH
+        unset _OLD_VIRTUAL_PATH
+    fi
+    if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
+        PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
+        export PYTHONHOME
+        unset _OLD_VIRTUAL_PYTHONHOME
+    fi
+
+    # This should detect bash and zsh, which have a hash command that must
+    # be called to get it to forget past commands.  Without forgetting
+    # past commands the $PATH changes we made may not be respected
+    if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
+        hash -r 2> /dev/null
+    fi
+
+    if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
+        PS1="${_OLD_VIRTUAL_PS1:-}"
+        export PS1
+        unset _OLD_VIRTUAL_PS1
+    fi
+
+    unset VIRTUAL_ENV
+    if [ ! "${1:-}" = "nondestructive" ] ; then
+    # Self destruct!
+        unset -f deactivate
+    fi
+}
+
+# unset irrelevant variables
+deactivate nondestructive
+
+VIRTUAL_ENV="__VENV_DIR__"
+export VIRTUAL_ENV
+
+_OLD_VIRTUAL_PATH="$PATH"
+PATH="$VIRTUAL_ENV/__VENV_BIN_NAME__:$PATH"
+export PATH
+
+# unset PYTHONHOME if set
+# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
+# could use `if (set -u; : $PYTHONHOME) ;` in bash
+if [ -n "${PYTHONHOME:-}" ] ; then
+    _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
+    unset PYTHONHOME
+fi
+
+if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
+    _OLD_VIRTUAL_PS1="${PS1:-}"
+    PS1="__VENV_PROMPT__${PS1:-}"
+    export PS1
+fi
+
+# This should detect bash and zsh, which have a hash command that must
+# be called to get it to forget past commands.  Without forgetting
+# past commands the $PATH changes we made may not be respected
+if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
+    hash -r 2> /dev/null
+fi
diff --git a/lib/python3.9/venv/scripts/posix/activate.csh b/lib/python3.9/venv/scripts/posix/activate.csh
new file mode 100644
index 0000000..68a0dc7
--- /dev/null
+++ b/lib/python3.9/venv/scripts/posix/activate.csh
@@ -0,0 +1,25 @@
+# This file must be used with "source bin/activate.csh" *from csh*.
+# You cannot run it directly.
+# Created by Davide Di Blasi <davidedb@gmail.com>.
+# Ported to Python 3.3 venv by Andrew Svetlov <andrew.svetlov@gmail.com>
+
+alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate'
+
+# Unset irrelevant variables.
+deactivate nondestructive
+
+setenv VIRTUAL_ENV "__VENV_DIR__"
+
+set _OLD_VIRTUAL_PATH="$PATH"
+setenv PATH "$VIRTUAL_ENV/__VENV_BIN_NAME__:$PATH"
+
+
+set _OLD_VIRTUAL_PROMPT="$prompt"
+
+if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then
+    set prompt = "__VENV_PROMPT__$prompt"
+endif
+
+alias pydoc python -m pydoc
+
+rehash
diff --git a/lib/python3.9/venv/scripts/posix/activate.fish b/lib/python3.9/venv/scripts/posix/activate.fish
new file mode 100644
index 0000000..54b9ea5
--- /dev/null
+++ b/lib/python3.9/venv/scripts/posix/activate.fish
@@ -0,0 +1,64 @@
+# This file must be used with "source <venv>/bin/activate.fish" *from fish*
+# (https://fishshell.com/); you cannot run it directly.
+
+function deactivate  -d "Exit virtual environment and return to normal shell environment"
+    # reset old environment variables
+    if test -n "$_OLD_VIRTUAL_PATH"
+        set -gx PATH $_OLD_VIRTUAL_PATH
+        set -e _OLD_VIRTUAL_PATH
+    end
+    if test -n "$_OLD_VIRTUAL_PYTHONHOME"
+        set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
+        set -e _OLD_VIRTUAL_PYTHONHOME
+    end
+
+    if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
+        functions -e fish_prompt
+        set -e _OLD_FISH_PROMPT_OVERRIDE
+        functions -c _old_fish_prompt fish_prompt
+        functions -e _old_fish_prompt
+    end
+
+    set -e VIRTUAL_ENV
+    if test "$argv[1]" != "nondestructive"
+        # Self-destruct!
+        functions -e deactivate
+    end
+end
+
+# Unset irrelevant variables.
+deactivate nondestructive
+
+set -gx VIRTUAL_ENV "__VENV_DIR__"
+
+set -gx _OLD_VIRTUAL_PATH $PATH
+set -gx PATH "$VIRTUAL_ENV/__VENV_BIN_NAME__" $PATH
+
+# Unset PYTHONHOME if set.
+if set -q PYTHONHOME
+    set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
+    set -e PYTHONHOME
+end
+
+if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
+    # fish uses a function instead of an env var to generate the prompt.
+
+    # Save the current fish_prompt function as the function _old_fish_prompt.
+    functions -c fish_prompt _old_fish_prompt
+
+    # With the original prompt function renamed, we can override with our own.
+    function fish_prompt
+        # Save the return status of the last command.
+        set -l old_status $status
+
+        # Output the venv prompt; color taken from the blue of the Python logo.
+        printf "%s%s%s" (set_color 4B8BBE) "__VENV_PROMPT__" (set_color normal)
+
+        # Restore the return status of the previous command.
+        echo "exit $old_status" | .
+        # Output the original/"old" prompt.
+        _old_fish_prompt
+    end
+
+    set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
+end