scmrepo 3.3.1__tar.gz → 3.3.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {scmrepo-3.3.1 → scmrepo-3.3.3}/.pre-commit-config.yaml +2 -2
- {scmrepo-3.3.1/src/scmrepo.egg-info → scmrepo-3.3.3}/PKG-INFO +3 -3
- {scmrepo-3.3.1 → scmrepo-3.3.3}/pyproject.toml +2 -2
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/backend/dulwich/__init__.py +5 -5
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/lfs/fetch.py +23 -1
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/lfs/storage.py +1 -1
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/stash.py +1 -1
- {scmrepo-3.3.1 → scmrepo-3.3.3/src/scmrepo.egg-info}/PKG-INFO +3 -3
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo.egg-info/SOURCES.txt +3 -1
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo.egg-info/requires.txt +2 -2
- {scmrepo-3.3.1 → scmrepo-3.3.3}/tests/test_dulwich.py +7 -1
- scmrepo-3.3.3/tests/vendor/__init__.py +0 -0
- scmrepo-3.3.3/tests/vendor/test_paramiko_vendor.py +119 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/.coveragerc +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/.cruft.json +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/.gitattributes +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/.github/dependabot.yml +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/.github/workflows/release.yaml +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/.github/workflows/tests.yaml +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/.github/workflows/update-template.yaml +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/.gitignore +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/CODE_OF_CONDUCT.rst +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/CONTRIBUTING.rst +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/LICENSE +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/README.rst +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/noxfile.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/setup.cfg +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/__init__.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/asyn.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/base.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/exceptions.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/fs.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/__init__.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/backend/__init__.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/backend/base.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/backend/dulwich/asyncssh_vendor.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/backend/dulwich/client.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/backend/gitpython.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/backend/pygit2/__init__.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/backend/pygit2/callbacks.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/backend/pygit2/filter.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/config.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/credentials.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/lfs/__init__.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/lfs/client.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/lfs/exceptions.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/lfs/object.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/lfs/pointer.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/lfs/progress.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/lfs/smudge.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/git/objects.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/noscm.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/progress.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/py.typed +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/urls.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo/utils.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo.egg-info/dependency_links.txt +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/src/scmrepo.egg-info/top_level.txt +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/tests/__init__.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/tests/conftest.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/tests/docker-compose.yml +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/tests/git-init/git.sh +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/tests/test_credentials.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/tests/test_fs.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/tests/test_git.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/tests/test_lfs.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/tests/test_noscm.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/tests/test_pygit2.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/tests/test_scmrepo.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/tests/test_stash.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/tests/test_urls.py +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/tests/user.key +0 -0
- {scmrepo-3.3.1 → scmrepo-3.3.3}/tests/user.key.pub +0 -0
|
@@ -2,7 +2,7 @@ default_language_version:
|
|
|
2
2
|
python: python3
|
|
3
3
|
repos:
|
|
4
4
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
5
|
-
rev: v4.
|
|
5
|
+
rev: v4.6.0
|
|
6
6
|
hooks:
|
|
7
7
|
- id: check-added-large-files
|
|
8
8
|
- id: check-case-conflict
|
|
@@ -20,7 +20,7 @@ repos:
|
|
|
20
20
|
- id: sort-simple-yaml
|
|
21
21
|
- id: trailing-whitespace
|
|
22
22
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
23
|
-
rev: 'v0.
|
|
23
|
+
rev: 'v0.4.3'
|
|
24
24
|
hooks:
|
|
25
25
|
- id: ruff
|
|
26
26
|
args: [--fix, --exit-non-zero-on-fix]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: scmrepo
|
|
3
|
-
Version: 3.3.
|
|
3
|
+
Version: 3.3.3
|
|
4
4
|
Summary: scmrepo
|
|
5
5
|
Author-email: Iterative <support@dvc.org>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -16,7 +16,7 @@ Requires-Python: >=3.9
|
|
|
16
16
|
Description-Content-Type: text/x-rst
|
|
17
17
|
License-File: LICENSE
|
|
18
18
|
Requires-Dist: gitpython>3
|
|
19
|
-
Requires-Dist: dulwich>=0.
|
|
19
|
+
Requires-Dist: dulwich>=0.22.1
|
|
20
20
|
Requires-Dist: pygit2>=1.14.0
|
|
21
21
|
Requires-Dist: pygtrie>=2.3.2
|
|
22
22
|
Requires-Dist: fsspec[tqdm]>=2024.2.0
|
|
@@ -36,7 +36,7 @@ Requires-Dist: pytest-mock; extra == "tests"
|
|
|
36
36
|
Requires-Dist: pytest-sugar; extra == "tests"
|
|
37
37
|
Requires-Dist: pytest-test-utils<0.2,>=0.1.0; extra == "tests"
|
|
38
38
|
Provides-Extra: dev
|
|
39
|
-
Requires-Dist: mypy==1.
|
|
39
|
+
Requires-Dist: mypy==1.10.0; extra == "dev"
|
|
40
40
|
Requires-Dist: scmrepo[tests]; extra == "dev"
|
|
41
41
|
Requires-Dist: types-certifi; extra == "dev"
|
|
42
42
|
Requires-Dist: types-mock; extra == "dev"
|
|
@@ -22,7 +22,7 @@ requires-python = ">=3.9"
|
|
|
22
22
|
dynamic = ["version"]
|
|
23
23
|
dependencies = [
|
|
24
24
|
"gitpython>3",
|
|
25
|
-
"dulwich>=0.
|
|
25
|
+
"dulwich>=0.22.1",
|
|
26
26
|
"pygit2>=1.14.0",
|
|
27
27
|
"pygtrie>=2.3.2",
|
|
28
28
|
"fsspec[tqdm]>=2024.2.0",
|
|
@@ -50,7 +50,7 @@ tests = [
|
|
|
50
50
|
"pytest-test-utils>=0.1.0,<0.2",
|
|
51
51
|
]
|
|
52
52
|
dev = [
|
|
53
|
-
"mypy==1.
|
|
53
|
+
"mypy==1.10.0",
|
|
54
54
|
"scmrepo[tests]",
|
|
55
55
|
"types-certifi",
|
|
56
56
|
"types-mock",
|
|
@@ -264,7 +264,7 @@ class DulwichBackend(BaseGitBackend): # pylint:disable=abstract-method
|
|
|
264
264
|
cls._set_mirror(repo, progress=progress)
|
|
265
265
|
else:
|
|
266
266
|
cls._set_default_tracking_branch(repo)
|
|
267
|
-
except Exception as exc:
|
|
267
|
+
except Exception as exc:
|
|
268
268
|
raise CloneError(url, os.fsdecode(to_path)) from exc
|
|
269
269
|
|
|
270
270
|
@staticmethod
|
|
@@ -580,7 +580,7 @@ class DulwichBackend(BaseGitBackend): # pylint:disable=abstract-method
|
|
|
580
580
|
try:
|
|
581
581
|
_remote, location = get_remote_repo(self.repo, url)
|
|
582
582
|
client, path = get_transport_and_path(location, **kwargs)
|
|
583
|
-
except Exception as exc:
|
|
583
|
+
except Exception as exc:
|
|
584
584
|
raise InvalidRemote(url) from exc
|
|
585
585
|
|
|
586
586
|
try:
|
|
@@ -617,7 +617,7 @@ class DulwichBackend(BaseGitBackend): # pylint:disable=abstract-method
|
|
|
617
617
|
try:
|
|
618
618
|
_remote, location = get_remote_repo(self.repo, url)
|
|
619
619
|
client, path = get_transport_and_path(location, **kwargs)
|
|
620
|
-
except Exception as exc:
|
|
620
|
+
except Exception as exc:
|
|
621
621
|
raise SCMError(f"'{url}' is not a valid Git remote or URL") from exc
|
|
622
622
|
|
|
623
623
|
change_result = {}
|
|
@@ -910,7 +910,7 @@ class DulwichBackend(BaseGitBackend): # pylint:disable=abstract-method
|
|
|
910
910
|
try:
|
|
911
911
|
_, location = get_remote_repo(self.repo, url)
|
|
912
912
|
client, path = get_transport_and_path(location, **kwargs)
|
|
913
|
-
except Exception as exc:
|
|
913
|
+
except Exception as exc:
|
|
914
914
|
raise InvalidRemote(url) from exc
|
|
915
915
|
if isinstance(client, LocalGitClient) and not os.path.exists(
|
|
916
916
|
os.path.join("", path)
|
|
@@ -989,5 +989,5 @@ def ls_remote(url: str) -> dict[str, str]:
|
|
|
989
989
|
return {os.fsdecode(ref): sha.decode("ascii") for ref, sha in refs.items()}
|
|
990
990
|
except HTTPUnauthorized as exc:
|
|
991
991
|
raise AuthError(url) from exc
|
|
992
|
-
except Exception as exc:
|
|
992
|
+
except Exception as exc:
|
|
993
993
|
raise InvalidRemote(url) from exc
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fnmatch
|
|
2
2
|
import io
|
|
3
3
|
import os
|
|
4
|
+
import re
|
|
4
5
|
from collections.abc import Iterable, Iterator
|
|
5
6
|
from typing import TYPE_CHECKING, Callable, Optional
|
|
6
7
|
|
|
@@ -98,6 +99,9 @@ def get_fetch_url(scm: "Git", remote: Optional[str] = None): # noqa: C901,PLR09
|
|
|
98
99
|
return scm.get_remote_url(remote)
|
|
99
100
|
|
|
100
101
|
|
|
102
|
+
_ROOT_PATH_PREFIX_REGEX = re.compile(r"^(?P<prefix>[^*?\[]*(?:/|$))")
|
|
103
|
+
|
|
104
|
+
|
|
101
105
|
def _collect_objects(
|
|
102
106
|
scm: "Git",
|
|
103
107
|
rev: str,
|
|
@@ -105,7 +109,25 @@ def _collect_objects(
|
|
|
105
109
|
exclude: Optional[list[str]],
|
|
106
110
|
) -> Iterator[Pointer]:
|
|
107
111
|
fs = scm.get_fs(rev)
|
|
108
|
-
|
|
112
|
+
# Optimize path filtering if the `include` list contains exactly one path.
|
|
113
|
+
# First, determine the root directory wherein to initiate the file search.
|
|
114
|
+
# If the `include` path is a Unix filename pattern, determine the static
|
|
115
|
+
# path prefix and set it as the root directory. Second, if the path and the
|
|
116
|
+
# root are identical or the Unix filename pattern matches *any* (i.e., `**`)
|
|
117
|
+
# file under the root directory, unset `include` to avoid unnecessary
|
|
118
|
+
# filtering work.
|
|
119
|
+
if (
|
|
120
|
+
include
|
|
121
|
+
and len(include) == 1
|
|
122
|
+
and (result := _ROOT_PATH_PREFIX_REGEX.match(path := include[0]))
|
|
123
|
+
):
|
|
124
|
+
root = result.group("prefix")
|
|
125
|
+
if path in {root, f'{root.rstrip("/")}/**'}:
|
|
126
|
+
include = []
|
|
127
|
+
else:
|
|
128
|
+
root = "/"
|
|
129
|
+
|
|
130
|
+
for path in _filter_paths(fs.find(root), include, exclude):
|
|
109
131
|
check_path = path.lstrip("/")
|
|
110
132
|
if scm.check_attr(check_path, "filter", source=rev) == "lfs":
|
|
111
133
|
try:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: scmrepo
|
|
3
|
-
Version: 3.3.
|
|
3
|
+
Version: 3.3.3
|
|
4
4
|
Summary: scmrepo
|
|
5
5
|
Author-email: Iterative <support@dvc.org>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -16,7 +16,7 @@ Requires-Python: >=3.9
|
|
|
16
16
|
Description-Content-Type: text/x-rst
|
|
17
17
|
License-File: LICENSE
|
|
18
18
|
Requires-Dist: gitpython>3
|
|
19
|
-
Requires-Dist: dulwich>=0.
|
|
19
|
+
Requires-Dist: dulwich>=0.22.1
|
|
20
20
|
Requires-Dist: pygit2>=1.14.0
|
|
21
21
|
Requires-Dist: pygtrie>=2.3.2
|
|
22
22
|
Requires-Dist: fsspec[tqdm]>=2024.2.0
|
|
@@ -36,7 +36,7 @@ Requires-Dist: pytest-mock; extra == "tests"
|
|
|
36
36
|
Requires-Dist: pytest-sugar; extra == "tests"
|
|
37
37
|
Requires-Dist: pytest-test-utils<0.2,>=0.1.0; extra == "tests"
|
|
38
38
|
Provides-Extra: dev
|
|
39
|
-
Requires-Dist: mypy==1.
|
|
39
|
+
Requires-Dist: mypy==1.10.0; extra == "dev"
|
|
40
40
|
Requires-Dist: scmrepo[tests]; extra == "dev"
|
|
41
41
|
Requires-Dist: types-certifi; extra == "dev"
|
|
42
42
|
Requires-Dist: types-mock; extra == "dev"
|
|
@@ -8,12 +8,18 @@ from unittest.mock import AsyncMock
|
|
|
8
8
|
import asyncssh
|
|
9
9
|
import paramiko
|
|
10
10
|
import pytest
|
|
11
|
-
from dulwich.contrib.test_paramiko_vendor import CLIENT_KEY, PASSWORD, USER, Server
|
|
12
11
|
from pytest_mock import MockerFixture
|
|
13
12
|
from pytest_test_utils.waiters import wait_until
|
|
14
13
|
|
|
15
14
|
from scmrepo.git.backend.dulwich.asyncssh_vendor import AsyncSSHVendor
|
|
16
15
|
|
|
16
|
+
from .vendor.test_paramiko_vendor import (
|
|
17
|
+
CLIENT_KEY,
|
|
18
|
+
PASSWORD,
|
|
19
|
+
USER,
|
|
20
|
+
Server,
|
|
21
|
+
)
|
|
22
|
+
|
|
17
23
|
# pylint: disable=redefined-outer-name
|
|
18
24
|
|
|
19
25
|
|
|
File without changes
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# test_paramiko_vendor.py
|
|
2
|
+
#
|
|
3
|
+
# Dulwich is dual-licensed under the Apache License, Version 2.0 and the GNU
|
|
4
|
+
# General Public License as public by the Free Software Foundation; version 2.0
|
|
5
|
+
# or (at your option) any later version. You can redistribute it and/or
|
|
6
|
+
# modify it under the terms of either of these two licenses.
|
|
7
|
+
#
|
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
|
+
# See the License for the specific language governing permissions and
|
|
12
|
+
# limitations under the License.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the licenses; if not, see
|
|
15
|
+
# <http://www.gnu.org/licenses/> for a copy of the GNU General Public License
|
|
16
|
+
# and <http://www.apache.org/licenses/LICENSE-2.0> for a copy of the Apache
|
|
17
|
+
# License, Version 2.0.
|
|
18
|
+
#
|
|
19
|
+
|
|
20
|
+
"""Tests for paramiko_vendor."""
|
|
21
|
+
|
|
22
|
+
from io import StringIO
|
|
23
|
+
|
|
24
|
+
try:
|
|
25
|
+
import paramiko
|
|
26
|
+
except ImportError:
|
|
27
|
+
has_paramiko = False
|
|
28
|
+
else:
|
|
29
|
+
has_paramiko = True
|
|
30
|
+
|
|
31
|
+
class Server(paramiko.ServerInterface):
|
|
32
|
+
"""http://docs.paramiko.org/en/2.4/api/server.html."""
|
|
33
|
+
|
|
34
|
+
def __init__(self, commands, *args, **kwargs) -> None:
|
|
35
|
+
super().__init__(*args, **kwargs)
|
|
36
|
+
self.commands = commands
|
|
37
|
+
|
|
38
|
+
def check_channel_exec_request(self, channel, command):
|
|
39
|
+
self.commands.append(command)
|
|
40
|
+
return True
|
|
41
|
+
|
|
42
|
+
def check_auth_password(self, username, password):
|
|
43
|
+
if username == USER and password == PASSWORD:
|
|
44
|
+
return paramiko.AUTH_SUCCESSFUL
|
|
45
|
+
return paramiko.AUTH_FAILED
|
|
46
|
+
|
|
47
|
+
def check_auth_publickey(self, username, key):
|
|
48
|
+
pubkey = paramiko.RSAKey.from_private_key(StringIO(CLIENT_KEY))
|
|
49
|
+
if username == USER and key == pubkey:
|
|
50
|
+
return paramiko.AUTH_SUCCESSFUL
|
|
51
|
+
return paramiko.AUTH_FAILED
|
|
52
|
+
|
|
53
|
+
def check_channel_request(self, kind, chanid):
|
|
54
|
+
if kind == "session":
|
|
55
|
+
return paramiko.OPEN_SUCCEEDED
|
|
56
|
+
return paramiko.OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED
|
|
57
|
+
|
|
58
|
+
def get_allowed_auths(self, username):
|
|
59
|
+
return "password,publickey"
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
USER = "testuser"
|
|
63
|
+
PASSWORD = "test"
|
|
64
|
+
SERVER_KEY = """\
|
|
65
|
+
-----BEGIN RSA PRIVATE KEY-----
|
|
66
|
+
MIIEpAIBAAKCAQEAy/L1sSYAzxsMprtNXW4u/1jGXXkQmQ2xtmKVlR+RlIL3a1BH
|
|
67
|
+
bzTpPlZyjltAAwzIP8XRh0iJFKz5y3zSQChhX47ZGN0NvQsVct8R+YwsUonwfAJ+
|
|
68
|
+
JN0KBKKvC8fPHlzqBr3gX+ZxqsFH934tQ6wdQPH5eQWtdM8L826lMsH1737uyTGk
|
|
69
|
+
+mCSDjL3c6EzY83g7qhkJU2R4qbi6ne01FaWADzG8sOzXnHT+xpxtk8TTT8yCVUY
|
|
70
|
+
MmBNsSoA/ka3iWz70ghB+6Xb0WpFJZXWq1oYovviPAfZGZSrxBZMxsWMye70SdLl
|
|
71
|
+
TqsBEt0+miIcm9s0fvjWvQuhaHX6mZs5VO4r5QIDAQABAoIBAGYqeYWaYgFdrYLA
|
|
72
|
+
hUrubUCg+g3NHdFuGL4iuIgRXl4lFUh+2KoOuWDu8Uf60iA1AQNhV0sLvQ/Mbv3O
|
|
73
|
+
s4xMLisuZfaclctDiCUZNenqnDFkxEF7BjH1QJV94W5nU4wEQ3/JEmM4D2zYkfKb
|
|
74
|
+
FJW33JeyH6TOgUvohDYYEU1R+J9V8qA243p+ui1uVtNI6Pb0TXJnG5y9Ny4vkSWH
|
|
75
|
+
Fi0QoMPR1r9xJ4SEearGzA/crb4SmmDTKhGSoMsT3d5ATieLmwcS66xWz8w4oFGJ
|
|
76
|
+
yzDq24s4Fp9ccNjMf/xR8XRiekJv835gjEqwF9IXyvgOaq6XJ1iCqGPFDKa25nui
|
|
77
|
+
JnEstOkCgYEA/ZXk7aIanvdeJlTqpX578sJfCnrXLydzE8emk1b7+5mrzGxQ4/pM
|
|
78
|
+
PBQs2f8glT3t0O0mRX9NoRqnwrid88/b+cY4NCOICFZeasX336/gYQxyVeRLJS6Z
|
|
79
|
+
hnGEQqry8qS7PdKAyeHMNmZFrUh4EiHiObymEfQS+mkRUObn0cGBTw8CgYEAzeQU
|
|
80
|
+
D2baec1DawjppKaRynAvWjp+9ry1lZx9unryKVRwjRjkEpw+b3/+hdaF1IvsVSce
|
|
81
|
+
cNj+6W2guZ2tyHuPhZ64/4SJVyE2hKDSKD4xTb2nVjsMeN0bLD2UWXC9mwbx8nWa
|
|
82
|
+
2tmtUZ7a/okQb2cSdosJinRewLNqXIsBXamT1csCgYEA0cXb2RCOQQ6U3dTFPx4A
|
|
83
|
+
3vMXuA2iUKmrsqMoEx6T2LBow/Sefdkik1iFOdipVYwjXP+w9zC2QR1Rxez/DR/X
|
|
84
|
+
8ymceNUjxPHdrSoTQQG29dFcC92MpDeGXQcuyA+uZjcLhbrLOzYEvsOfxBb87NMG
|
|
85
|
+
14hNQPDNekTMREafYo9WrtUCgYAREK54+FVzcwf7fymedA/xb4r9N4v+d3W1iNsC
|
|
86
|
+
8d3Qfyc1CrMct8aVB07ZWQaOr2pPRIbJY7L9NhD0UZVt4I/sy1MaGqonhqE2LP4+
|
|
87
|
+
R6legDG2e/50ph7yc8gwAaA1kUXMiuLi8Nfkw/3yyvmJwklNegi4aRzRbA2Mzhi2
|
|
88
|
+
4q9WMQKBgQCb0JNyxHG4pvLWCF/j0Sm1FfvrpnqSv5678n1j4GX7Ka/TubOK1Y4K
|
|
89
|
+
U+Oib7dKa/zQMWehVFNTayrsq6bKVZ6q7zG+IHiRLw4wjeAxREFH6WUjDrn9vl2l
|
|
90
|
+
D48DKbBuBwuVOJWyq3qbfgJXojscgNQklrsPdXVhDwOF0dYxP89HnA==
|
|
91
|
+
-----END RSA PRIVATE KEY-----"""
|
|
92
|
+
CLIENT_KEY = """\
|
|
93
|
+
-----BEGIN RSA PRIVATE KEY-----
|
|
94
|
+
MIIEpAIBAAKCAQEAxvREKSElPOm/0z/nPO+j5rk2tjdgGcGc7We1QZ6TRXYLu7nN
|
|
95
|
+
GeEFIL4p8N1i6dmB+Eydt7xqCU79MWD6Yy4prFe1+/K1wCDUxIbFMxqQcX5zjJzd
|
|
96
|
+
i8j8PbcaUlVhP/OkjtkSxrXaGDO1BzfdV4iEBtTV/2l3zmLKJlt3jnOHLczP24CB
|
|
97
|
+
DTQKp3rKshbRefzot9Y+wnaK692RsYgsyo9YEP0GyWKG9topCHk13r46J6vGLeuj
|
|
98
|
+
ryUKqmbLJkzbJbIcEqwTDo5iHaCVqaMr5Hrb8BdMucSseqZQJsXSd+9tdRcIblUQ
|
|
99
|
+
38kZjmFMm4SFbruJcpZCNM2wNSZPIRX+3eiwNwIDAQABAoIBAHSacOBSJsr+jIi5
|
|
100
|
+
KUOTh9IPtzswVUiDKwARCjB9Sf8p4lKR4N1L/n9kNJyQhApeikgGT2GCMftmqgoo
|
|
101
|
+
tlculQoHFgemBlOmak0MV8NNzF5YKEy/GzF0CDH7gJfEpoyetVFrdA+2QS5yD6U9
|
|
102
|
+
XqKQxiBi2VEqdScmyyeT8AwzNYTnPeH/DOEcnbdRjqiy/CD79F49CQ1lX1Fuqm0K
|
|
103
|
+
I7BivBH1xo/rVnUP4F+IzocDqoga+Pjdj0LTXIgJlHQDSbhsQqWujWQDDuKb+MAw
|
|
104
|
+
sNK4Zf8ErV3j1PyA7f/M5LLq6zgstkW4qikDHo4SpZX8kFOO8tjqb7kujj7XqeaB
|
|
105
|
+
CxqrOTECgYEA73uWkrohcmDJ4KqbuL3tbExSCOUiaIV+sT1eGPNi7GCmXD4eW5Z4
|
|
106
|
+
75v2IHymW83lORSu/DrQ6sKr1nkuRpqr2iBzRmQpl/H+wahIhBXlnJ25uUjDsuPO
|
|
107
|
+
1Pq2LcmyD+jTxVnmbSe/q7O09gZQw3I6H4+BMHmpbf8tC97lqimzpJ0CgYEA1K0W
|
|
108
|
+
ZL70Xtn9quyHvbtae/BW07NZnxvUg4UaVIAL9Zu34JyplJzyzbIjrmlDbv6aRogH
|
|
109
|
+
/KtuG9tfbf55K/jjqNORiuRtzt1hUN1ye4dyW7tHx2/7lXdlqtyK40rQl8P0kqf8
|
|
110
|
+
zaS6BqjnobgSdSpg32rWoL/pcBHPdJCJEgQ8zeMCgYEA0/PK8TOhNIzrP1dgGSKn
|
|
111
|
+
hkkJ9etuB5nW5mEM7gJDFDf6JPupfJ/xiwe6z0fjKK9S57EhqgUYMB55XYnE5iIw
|
|
112
|
+
ZQ6BV9SAZ4V7VsRs4dJLdNC3tn/rDGHJBgCaym2PlbsX6rvFT+h1IC8dwv0V79Ui
|
|
113
|
+
Ehq9WTzkMoE8yhvNokvkPZUCgYEAgBAFxv5xGdh79ftdtXLmhnDvZ6S8l6Fjcxqo
|
|
114
|
+
Ay/jg66Tp43OU226iv/0mmZKM8Dd1xC8dnon4GBVc19jSYYiWBulrRPlx0Xo/o+K
|
|
115
|
+
CzZBN1lrXH1i6dqufpc0jq8TMf/N+q1q/c1uMupsKCY1/xVYpc+ok71b7J7c49zQ
|
|
116
|
+
nOeuUW8CgYA9Infooy65FTgbzca0c9kbCUBmcAPQ2ItH3JcPKWPQTDuV62HcT00o
|
|
117
|
+
fZdIV47Nez1W5Clk191RMy8TXuqI54kocciUWpThc6j44hz49oUueb8U4bLcEHzA
|
|
118
|
+
WxtWBWHwxfSmqgTXilEA3ALJp0kNolLnEttnhENwJpZHlqtes0ZA4w==
|
|
119
|
+
-----END RSA PRIVATE KEY-----"""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|