qbraid-cli 0.16.8__tar.gz → 0.16.9__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.
- {qbraid_cli-0.16.8/qbraid_cli.egg-info → qbraid_cli-0.16.9}/PKG-INFO +4 -4
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/pyproject.toml +4 -4
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/agents/app.py +61 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9/qbraid_cli.egg-info}/PKG-INFO +4 -4
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli.egg-info/requires.txt +3 -3
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/LICENSE +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/README.md +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/__init__.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/_build_info.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/_version.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/account/__init__.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/account/app.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/admin/__init__.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/admin/app.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/admin/headers.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/admin/validation.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/agents/__init__.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/agents/permission_response.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/ai/__init__.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/ai/app.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/ai/token.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/comms/__init__.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/comms/app.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/compute/__init__.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/compute/app.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/compute/instances.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/compute/profiles.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/compute/server.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/compute/ssh.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/configure/__init__.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/configure/actions.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/configure/app.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/devices/__init__.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/devices/app.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/devices/validation.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/envs/__init__.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/envs/activate.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/envs/app.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/envs/create.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/envs/data_handling.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/envs/groups.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/envs/publish.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/envs/registry.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/envs/share.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/exceptions.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/handlers.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/jobs/__init__.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/jobs/app.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/jobs/groups.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/kernels/__init__.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/kernels/app.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/lab/__init__.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/lab/app.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/main.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/pip/__init__.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/pip/app.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/pip/hooks.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/projects/__init__.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/projects/app.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/py.typed +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/skills/__init__.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/skills/app.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/troubleshoot/__init__.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli/troubleshoot/app.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli.egg-info/SOURCES.txt +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli.egg-info/dependency_links.txt +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli.egg-info/entry_points.txt +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/qbraid_cli.egg-info/top_level.txt +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/setup.cfg +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/tests/test_cli_e2e.py +0 -0
- {qbraid_cli-0.16.8 → qbraid_cli-0.16.9}/tests/test_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: qbraid-cli
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.9
|
|
4
4
|
Summary: Command Line Interface for interacting with all parts of the qBraid platform.
|
|
5
5
|
Author-email: qBraid Development Team <contact@qbraid.com>
|
|
6
6
|
License-Expression: LicenseRef-Proprietary
|
|
@@ -30,11 +30,11 @@ Requires-Dist: typer>=0.12.1
|
|
|
30
30
|
Requires-Dist: rich>=10.11.0
|
|
31
31
|
Requires-Dist: click<=8.5.0
|
|
32
32
|
Requires-Dist: questionary>=2.0.0
|
|
33
|
-
Requires-Dist: qbraid-core>=0.6.
|
|
33
|
+
Requires-Dist: qbraid-core>=0.6.21
|
|
34
34
|
Provides-Extra: compute
|
|
35
|
-
Requires-Dist: qbraid-core[compute]>=0.6.
|
|
35
|
+
Requires-Dist: qbraid-core[compute]>=0.6.21; extra == "compute"
|
|
36
36
|
Provides-Extra: envs
|
|
37
|
-
Requires-Dist: qbraid-core[environments]>=0.6.
|
|
37
|
+
Requires-Dist: qbraid-core[environments]>=0.6.21; extra == "envs"
|
|
38
38
|
Provides-Extra: dev
|
|
39
39
|
Requires-Dist: isort; extra == "dev"
|
|
40
40
|
Requires-Dist: black; extra == "dev"
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "qbraid-cli"
|
|
7
|
-
version = "0.16.
|
|
7
|
+
version = "0.16.9"
|
|
8
8
|
description = "Command Line Interface for interacting with all parts of the qBraid platform."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [{ name = "qBraid Development Team", email = "contact@qbraid.com" }]
|
|
@@ -32,7 +32,7 @@ dependencies = [
|
|
|
32
32
|
"rich>=10.11.0",
|
|
33
33
|
"click<=8.5.0",
|
|
34
34
|
"questionary>=2.0.0",
|
|
35
|
-
"qbraid-core>=0.6.
|
|
35
|
+
"qbraid-core>=0.6.21",
|
|
36
36
|
]
|
|
37
37
|
requires-python = ">= 3.10"
|
|
38
38
|
|
|
@@ -43,8 +43,8 @@ Documentation = "https://docs.qbraid.com/v2/cli/api-reference/qbraid"
|
|
|
43
43
|
Discord = "https://discord.gg/KugF6Cnncm"
|
|
44
44
|
|
|
45
45
|
[project.optional-dependencies]
|
|
46
|
-
compute = ["qbraid-core[compute]>=0.6.
|
|
47
|
-
envs = ["qbraid-core[environments]>=0.6.
|
|
46
|
+
compute = ["qbraid-core[compute]>=0.6.21"]
|
|
47
|
+
envs = ["qbraid-core[environments]>=0.6.21"]
|
|
48
48
|
dev = ["isort", "black", "pytest", "pytest-cov", "pytest-asyncio"]
|
|
49
49
|
|
|
50
50
|
[project.scripts]
|
|
@@ -1582,6 +1582,32 @@ def agents_settings(
|
|
|
1582
1582
|
handle_error(error_type=type(error).__name__, message=str(error), include_traceback=False)
|
|
1583
1583
|
|
|
1584
1584
|
|
|
1585
|
+
def _prompt_answer_kwargs(method, trust_folder=None, accept_bypass_warning=False):
|
|
1586
|
+
"""Answers to the agent's own startup prompts, given on the command line.
|
|
1587
|
+
|
|
1588
|
+
``trust_folder`` answers "trust this folder?" (Claude, Codex); either
|
|
1589
|
+
explicit answer needs a Core that takes it, because an older Core trusts
|
|
1590
|
+
every Claude launch folder by itself, so a silently dropped "no" would be
|
|
1591
|
+
a yes. ``accept_bypass_warning`` skips Claude's bypass-permissions
|
|
1592
|
+
confirmation for this run.
|
|
1593
|
+
"""
|
|
1594
|
+
from qbraid_core.services.agents import AgentLauncherError
|
|
1595
|
+
|
|
1596
|
+
params = inspect.signature(method).parameters
|
|
1597
|
+
open_kwargs = any(p.kind is inspect.Parameter.VAR_KEYWORD for p in params.values())
|
|
1598
|
+
kwargs = {}
|
|
1599
|
+
for key, value, flag in (
|
|
1600
|
+
("trust_folder", trust_folder, "--trust-folder/--no-trust-folder"),
|
|
1601
|
+
("accept_bypass_warning", accept_bypass_warning or None, "--skip-bypass-confirmation"),
|
|
1602
|
+
):
|
|
1603
|
+
if value is None:
|
|
1604
|
+
continue
|
|
1605
|
+
if key not in params and not open_kwargs:
|
|
1606
|
+
raise AgentLauncherError(f"{flag} requires a newer qbraid-core on this machine.")
|
|
1607
|
+
kwargs[key] = value
|
|
1608
|
+
return kwargs
|
|
1609
|
+
|
|
1610
|
+
|
|
1585
1611
|
def _hook_trust_kwargs(method, value):
|
|
1586
1612
|
"""Fail before launch when an explicit choice cannot be honored."""
|
|
1587
1613
|
if value is None:
|
|
@@ -1673,6 +1699,21 @@ def agents_launch(
|
|
|
1673
1699
|
"resume. Refused with --repo. Independent of --approval and --yolo."
|
|
1674
1700
|
),
|
|
1675
1701
|
),
|
|
1702
|
+
trust_folder: Optional[bool] = typer.Option(
|
|
1703
|
+
None,
|
|
1704
|
+
"--trust-folder/--no-trust-folder",
|
|
1705
|
+
help=(
|
|
1706
|
+
"Answer the agent's 'trust this folder?' prompt now (Claude, Codex), so a detached "
|
|
1707
|
+
"agent does not stop at it. The answer is remembered for later launches and "
|
|
1708
|
+
"resumes. Trusting a folder lets its own settings, hooks and MCP servers run. "
|
|
1709
|
+
"Default: Claude trusts the folder, except a fresh --repo clone; Codex asks."
|
|
1710
|
+
),
|
|
1711
|
+
),
|
|
1712
|
+
skip_bypass_confirmation: bool = typer.Option(
|
|
1713
|
+
False,
|
|
1714
|
+
"--skip-bypass-confirmation",
|
|
1715
|
+
help="Claude with --yolo: skip its bypass-permissions confirmation, for this launch only.",
|
|
1716
|
+
),
|
|
1676
1717
|
yolo: bool = typer.Option(
|
|
1677
1718
|
False, "--yolo", help="Claude: skip permissions. Codex: bypass approvals and its sandbox."
|
|
1678
1719
|
),
|
|
@@ -1729,6 +1770,12 @@ def agents_launch(
|
|
|
1729
1770
|
if not compute or str(uuid.UUID(request_id)) != request_id:
|
|
1730
1771
|
raise AgentLauncherError("--request-id requires --compute and a canonical UUID.")
|
|
1731
1772
|
|
|
1773
|
+
if compute and (trust_folder is not None or skip_bypass_confirmation):
|
|
1774
|
+
raise AgentLauncherError(
|
|
1775
|
+
"--trust-folder and --skip-bypass-confirmation are not yet supported for remote "
|
|
1776
|
+
"launches; answer the prompts in the agent's terminal."
|
|
1777
|
+
)
|
|
1778
|
+
|
|
1732
1779
|
if compute and backend != TerminalBackend.AUTO:
|
|
1733
1780
|
raise AgentLauncherError("Remote launches select the backend on the destination; omit --backend.")
|
|
1734
1781
|
launcher = _backend_launcher(backend)
|
|
@@ -1766,6 +1813,7 @@ def agents_launch(
|
|
|
1766
1813
|
tags=tag,
|
|
1767
1814
|
**_approval_kwargs(launcher.launch, approval.value if approval else None),
|
|
1768
1815
|
**_hook_trust_kwargs(launcher.launch, True if trust_hooks else None),
|
|
1816
|
+
**_prompt_answer_kwargs(launcher.launch, trust_folder, skip_bypass_confirmation),
|
|
1769
1817
|
**_execution_kwargs(launcher.launch, execution_mode.value if execution_mode else None),
|
|
1770
1818
|
progress_callback=_clone_progress if repo else None,
|
|
1771
1819
|
)
|
|
@@ -1911,6 +1959,14 @@ def agents_resume(
|
|
|
1911
1959
|
"for this resume only. Hooks are reviewed again on every run that omits it."
|
|
1912
1960
|
),
|
|
1913
1961
|
),
|
|
1962
|
+
trust_folder: Optional[bool] = typer.Option(
|
|
1963
|
+
None,
|
|
1964
|
+
"--trust-folder/--no-trust-folder",
|
|
1965
|
+
help=(
|
|
1966
|
+
"Answer 'trust this folder?' for the folder it resumes in (remembered). "
|
|
1967
|
+
"Default: keep the answer given at launch."
|
|
1968
|
+
),
|
|
1969
|
+
),
|
|
1914
1970
|
compute: Optional[str] = typer.Option(None, "--compute", "-c", help="SSH alias for remote compute"),
|
|
1915
1971
|
):
|
|
1916
1972
|
"""Resume a previous agent session.
|
|
@@ -1943,6 +1999,8 @@ def agents_resume(
|
|
|
1943
1999
|
flags += f" --approval {shlex.quote(approval.value)}"
|
|
1944
2000
|
if trust_hooks:
|
|
1945
2001
|
flags += " --trust-hooks"
|
|
2002
|
+
if trust_folder is not None:
|
|
2003
|
+
flags += " --trust-folder" if trust_folder else " --no-trust-folder"
|
|
1946
2004
|
# markup=False -- see agents_status.
|
|
1947
2005
|
console.print(
|
|
1948
2006
|
_ssh_cmd(compute, f"qbraid agents resume {shlex.quote(session_id)}{flags}"),
|
|
@@ -1963,6 +2021,7 @@ def agents_resume(
|
|
|
1963
2021
|
name=name,
|
|
1964
2022
|
**(_approval_kwargs(launcher.resume, approval.value) if approval else {}),
|
|
1965
2023
|
**_hook_trust_kwargs(launcher.resume, True if trust_hooks else None),
|
|
2024
|
+
**_prompt_answer_kwargs(launcher.resume, trust_folder),
|
|
1966
2025
|
**_execution_kwargs(launcher.resume, execution_mode.value if execution_mode else None),
|
|
1967
2026
|
)
|
|
1968
2027
|
except AgentLauncherError as e:
|
|
@@ -2013,6 +2072,7 @@ def agents_resume(
|
|
|
2013
2072
|
# --trust-hooks on this command bypasses hook review.
|
|
2014
2073
|
True if trust_hooks else None,
|
|
2015
2074
|
),
|
|
2075
|
+
**_prompt_answer_kwargs(launcher.launch, trust_folder),
|
|
2016
2076
|
# A fork of a detached agent must not quietly
|
|
2017
2077
|
# become one that waits for a human.
|
|
2018
2078
|
**_approval_kwargs(
|
|
@@ -2090,6 +2150,7 @@ def agents_resume(
|
|
|
2090
2150
|
name=name,
|
|
2091
2151
|
**(_approval_kwargs(launcher.resume, approval.value) if approval else {}),
|
|
2092
2152
|
**_hook_trust_kwargs(launcher.resume, True if trust_hooks else None),
|
|
2153
|
+
**_prompt_answer_kwargs(launcher.resume, trust_folder),
|
|
2093
2154
|
**_execution_kwargs(launcher.resume, execution_mode.value if execution_mode else None),
|
|
2094
2155
|
)
|
|
2095
2156
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: qbraid-cli
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.9
|
|
4
4
|
Summary: Command Line Interface for interacting with all parts of the qBraid platform.
|
|
5
5
|
Author-email: qBraid Development Team <contact@qbraid.com>
|
|
6
6
|
License-Expression: LicenseRef-Proprietary
|
|
@@ -30,11 +30,11 @@ Requires-Dist: typer>=0.12.1
|
|
|
30
30
|
Requires-Dist: rich>=10.11.0
|
|
31
31
|
Requires-Dist: click<=8.5.0
|
|
32
32
|
Requires-Dist: questionary>=2.0.0
|
|
33
|
-
Requires-Dist: qbraid-core>=0.6.
|
|
33
|
+
Requires-Dist: qbraid-core>=0.6.21
|
|
34
34
|
Provides-Extra: compute
|
|
35
|
-
Requires-Dist: qbraid-core[compute]>=0.6.
|
|
35
|
+
Requires-Dist: qbraid-core[compute]>=0.6.21; extra == "compute"
|
|
36
36
|
Provides-Extra: envs
|
|
37
|
-
Requires-Dist: qbraid-core[environments]>=0.6.
|
|
37
|
+
Requires-Dist: qbraid-core[environments]>=0.6.21; extra == "envs"
|
|
38
38
|
Provides-Extra: dev
|
|
39
39
|
Requires-Dist: isort; extra == "dev"
|
|
40
40
|
Requires-Dist: black; extra == "dev"
|
|
@@ -2,10 +2,10 @@ typer>=0.12.1
|
|
|
2
2
|
rich>=10.11.0
|
|
3
3
|
click<=8.5.0
|
|
4
4
|
questionary>=2.0.0
|
|
5
|
-
qbraid-core>=0.6.
|
|
5
|
+
qbraid-core>=0.6.21
|
|
6
6
|
|
|
7
7
|
[compute]
|
|
8
|
-
qbraid-core[compute]>=0.6.
|
|
8
|
+
qbraid-core[compute]>=0.6.21
|
|
9
9
|
|
|
10
10
|
[dev]
|
|
11
11
|
isort
|
|
@@ -15,4 +15,4 @@ pytest-cov
|
|
|
15
15
|
pytest-asyncio
|
|
16
16
|
|
|
17
17
|
[envs]
|
|
18
|
-
qbraid-core[environments]>=0.6.
|
|
18
|
+
qbraid-core[environments]>=0.6.21
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|