apcore-cli 0.12.2__tar.gz → 0.12.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.
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/CHANGELOG.md +17 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/PKG-INFO +4 -4
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/README.md +1 -1
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/pyproject.toml +3 -3
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/init_cmd.py +9 -1
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_cli.py +37 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_init_cmd.py +8 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/.github/CODEOWNERS +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/.github/copilot-ignore +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/.github/workflows/ci.yml +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/.gitignore +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/.gitmessage +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/.pre-commit-config.yaml +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/CLAUDE.md +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/LICENSE +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/Makefile +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/examples/README.md +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/examples/extensions/math/add.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/examples/extensions/math/multiply.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/examples/extensions/sysutil/disk.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/examples/extensions/sysutil/env.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/examples/extensions/sysutil/info.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/examples/extensions/text/reverse.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/examples/extensions/text/upper.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/examples/extensions/text/wordcount.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/examples/run_examples.sh +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/planning/approval-gate.md +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/planning/config-resolver.md +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/planning/core-dispatcher.md +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/planning/discovery.md +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/planning/exposure-filtering.md +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/planning/grouped-commands.md +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/planning/output-formatter.md +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/planning/overview.md +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/planning/schema-parser.md +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/planning/security-manager.md +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/planning/shell-integration.md +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/planning/state.json +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/__init__.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/__main__.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/_sandbox_runner.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/acl_cmd.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/acl_loader.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/approval.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/builtin_group.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/cli.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/config.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/discovery.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/display_helpers.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/exit_codes.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/exposure.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/factory.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/openapi_cmd.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/openapi_source.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/output.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/ref_resolver.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/schema_parser.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/security/__init__.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/security/audit.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/security/auth.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/security/config_encryptor.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/security/sandbox.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/shell.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/strategy.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/system_cmd.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/system_usage.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/src/apcore_cli/validate.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/__init__.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/conformance/__init__.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/conformance/test_apcli_visibility.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/conformance/test_snake_case_kwargs.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/conftest.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/shell_test_utils.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_acl_cmd.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_acl_loader.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_apcli_integration.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_approval.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_bugfixes.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_builtin_group.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_config.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_discovery.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_discovery_fe13.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_display_helpers.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_e2e.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_exit_codes.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_exposure.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_factory_fe13.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_integration.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_list_command_filters.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_openapi_cmd.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_openapi_source.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_output.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_output_format_exec.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_output_format_markdown_skill.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_public_api.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_ref_resolver.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_sandbox_runner.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_schema_parser.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_security/__init__.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_security/test_audit.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_security/test_auth.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_security/test_config_encryptor.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_security/test_sandbox.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_shell.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_strategy.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_system_cmd.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_system_usage.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_toolkit_integration.py +0 -0
- {apcore_cli-0.12.2 → apcore_cli-0.12.3}/tests/test_validate.py +0 -0
|
@@ -5,6 +5,23 @@ All notable changes to apcore-cli (Python SDK) will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.12.3] - 2026-10-10
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- Upgrade the required apcore floor to 0.32.0 and apcore-toolkit to 0.14.0. Public executor, loader, scanner, display and formatter interfaces consumed by this CLI remain compatible.
|
|
13
|
+
- Binding documents now inherit toolkit 0.14.0's stricter validation: unknown document/entry keys and one-sided inline schema pairs fail in both modes; non-list `tags` fail in strict mode. Move application-specific entry data into `metadata` and supply both inline schemas. Runtime-only `auto_schema` / `schema_ref` entries require apcore's runtime loader, which this CLI's toolkit integration does not use.
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- `apcli init module --style binding` emits paired inline schemas instead of `auto_schema: true`, making generated scaffolds load through toolkit 0.14.0 in loose and strict modes. The schemas describe the generated no-argument function and its `status: string` result.
|
|
18
|
+
|
|
19
|
+
### Compatibility verification
|
|
20
|
+
|
|
21
|
+
- Native apcore validators exercise the canonical `details.errors` shape (`path`, `keyword`, `message`) through JSON and terminal error output, covering root `""`, nested-array `/items/0/count` and escaped `/a~1b~0c` pointers. CLI exit remains 45. The CLI never reads a legacy `field` member and its JSON output preserves details verbatim.
|
|
22
|
+
- Governance-provider/gate and logging fixes, immediate scoped timeouts, collect-all preflight, binding runtime validation, namespace dispatch, watcher/reload, task/store, nested-call and middleware/observability changes run inside apcore; no additional CLI call-site adaptation is required. MCP export-profile changes and the additive bare-name canonicalization API are not consumed here. OpenAPI generation already supplies both inline schemas.
|
|
23
|
+
- Full suite: **1024 passed, 0 failed, 6 xfailed** against published PyPI apcore 0.32.0 and apcore-toolkit 0.14.0; Ruff lint and changed-file formatting pass.
|
|
24
|
+
|
|
8
25
|
## [0.12.2] - 2026-09-29
|
|
9
26
|
|
|
10
27
|
### Changed — BREAKING
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: apcore-cli
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.3
|
|
4
4
|
Summary: Terminal adapter for apcore — execute AI-Perceivable modules from the command line
|
|
5
5
|
Project-URL: Homepage, https://aiperceivable.com
|
|
6
6
|
Project-URL: Repository, https://github.com/aiperceivable/apcore-cli-python
|
|
@@ -21,8 +21,8 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
21
21
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
22
22
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
23
23
|
Requires-Python: >=3.11
|
|
24
|
-
Requires-Dist: apcore-toolkit[http-proxy]>=0.
|
|
25
|
-
Requires-Dist: apcore>=0.
|
|
24
|
+
Requires-Dist: apcore-toolkit[http-proxy]>=0.14.0
|
|
25
|
+
Requires-Dist: apcore>=0.32.0
|
|
26
26
|
Requires-Dist: click>=8.1
|
|
27
27
|
Requires-Dist: cryptography>=41.0
|
|
28
28
|
Requires-Dist: jsonschema>=4.20
|
|
@@ -89,7 +89,7 @@ Terminal adapter for apcore. Execute AI-Perceivable modules from the command lin
|
|
|
89
89
|
pip install apcore-cli
|
|
90
90
|
```
|
|
91
91
|
|
|
92
|
-
Requires Python 3.11+, `apcore >= 0.
|
|
92
|
+
Requires Python 3.11+, `apcore >= 0.32.0`, and `apcore-toolkit >= 0.14.0` (now a **required** runtime dependency as of v0.9.0 — previously optional; see the [tech-design ADR-09](https://github.com/aiperceivable/apcore-cli/blob/main/docs/tech-design.md) for the byte-equivalent toolkit-delegated tier rationale). The `[toolkit]` extras group is retained as a no-op for backward compat:
|
|
93
93
|
|
|
94
94
|
```bash
|
|
95
95
|
pip install "apcore-cli[toolkit]" # equivalent to plain `pip install apcore-cli`
|
|
@@ -48,7 +48,7 @@ Terminal adapter for apcore. Execute AI-Perceivable modules from the command lin
|
|
|
48
48
|
pip install apcore-cli
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
Requires Python 3.11+, `apcore >= 0.
|
|
51
|
+
Requires Python 3.11+, `apcore >= 0.32.0`, and `apcore-toolkit >= 0.14.0` (now a **required** runtime dependency as of v0.9.0 — previously optional; see the [tech-design ADR-09](https://github.com/aiperceivable/apcore-cli/blob/main/docs/tech-design.md) for the byte-equivalent toolkit-delegated tier rationale). The `[toolkit]` extras group is retained as a no-op for backward compat:
|
|
52
52
|
|
|
53
53
|
```bash
|
|
54
54
|
pip install "apcore-cli[toolkit]" # equivalent to plain `pip install apcore-cli`
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "apcore-cli"
|
|
7
|
-
version = "0.12.
|
|
7
|
+
version = "0.12.3"
|
|
8
8
|
description = "Terminal adapter for apcore — execute AI-Perceivable modules from the command line"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "Apache-2.0"
|
|
@@ -26,8 +26,8 @@ classifiers = [
|
|
|
26
26
|
"Environment :: Console",
|
|
27
27
|
]
|
|
28
28
|
dependencies = [
|
|
29
|
-
"apcore>=0.
|
|
30
|
-
"apcore-toolkit[http-proxy]>=0.
|
|
29
|
+
"apcore>=0.32.0",
|
|
30
|
+
"apcore-toolkit[http-proxy]>=0.14.0",
|
|
31
31
|
"click>=8.1",
|
|
32
32
|
"jsonschema>=4.20",
|
|
33
33
|
"rich>=13.0",
|
|
@@ -39,7 +39,15 @@ _BINDING_TEMPLATE = """bindings:
|
|
|
39
39
|
- module_id: "{module_id}"
|
|
40
40
|
target: "{target}"
|
|
41
41
|
description: "{description}"
|
|
42
|
-
|
|
42
|
+
input_schema:
|
|
43
|
+
type: object
|
|
44
|
+
properties: {{}}
|
|
45
|
+
output_schema:
|
|
46
|
+
type: object
|
|
47
|
+
properties:
|
|
48
|
+
status:
|
|
49
|
+
type: string
|
|
50
|
+
required: [status]
|
|
43
51
|
"""
|
|
44
52
|
|
|
45
53
|
|
|
@@ -1351,3 +1351,40 @@ class TestBuildModuleCommandRefResolverErrorTranslation:
|
|
|
1351
1351
|
with pytest.raises(SystemExit) as excinfo:
|
|
1352
1352
|
build_module_command(module_def, executor)
|
|
1353
1353
|
assert excinfo.value.code == 48
|
|
1354
|
+
|
|
1355
|
+
|
|
1356
|
+
@pytest.mark.parametrize("tty", [False, True])
|
|
1357
|
+
def test_native_validation_errors_preserve_json_pointers(tty, capsys):
|
|
1358
|
+
import json
|
|
1359
|
+
|
|
1360
|
+
from apcore.errors import SchemaValidationError
|
|
1361
|
+
from apcore.schema import SchemaValidator
|
|
1362
|
+
from pydantic import Field, create_model
|
|
1363
|
+
|
|
1364
|
+
from apcore_cli.cli import _emit_error_json, _emit_error_tty
|
|
1365
|
+
|
|
1366
|
+
item = create_model("ValidationItem", count=(int, ...))
|
|
1367
|
+
model = create_model(
|
|
1368
|
+
"ValidationInput",
|
|
1369
|
+
count=(int, ...),
|
|
1370
|
+
items=(list[item], ...),
|
|
1371
|
+
escaped=(int, Field(alias="a/b~c")),
|
|
1372
|
+
)
|
|
1373
|
+
with pytest.raises(SchemaValidationError) as caught:
|
|
1374
|
+
SchemaValidator().validate_input({"items": [{"count": "bad"}], "a/b~c": "bad"}, model)
|
|
1375
|
+
error = caught.value
|
|
1376
|
+
assert error.code == "SCHEMA_VALIDATION_ERROR"
|
|
1377
|
+
emit = _emit_error_tty if tty else _emit_error_json
|
|
1378
|
+
emit(error, 45)
|
|
1379
|
+
output = capsys.readouterr().err
|
|
1380
|
+
if tty:
|
|
1381
|
+
assert "/items/0/count" in output
|
|
1382
|
+
assert "/a~1b~0c" in output
|
|
1383
|
+
assert "unknown" not in output
|
|
1384
|
+
else:
|
|
1385
|
+
payload = json.loads(output)
|
|
1386
|
+
assert payload["exit_code"] == 45
|
|
1387
|
+
assert payload["details"] == error.details
|
|
1388
|
+
errors = payload["details"]["errors"]
|
|
1389
|
+
assert {entry["path"] for entry in errors} == {"", "/items/0/count", "/a~1b~0c"}
|
|
1390
|
+
assert all(set(entry) == {"path", "keyword", "message"} for entry in errors)
|
|
@@ -45,6 +45,14 @@ class TestInitModule:
|
|
|
45
45
|
assert len(yaml_files) == 1
|
|
46
46
|
content = yaml_files[0].read_text()
|
|
47
47
|
assert "ops.deploy" in content
|
|
48
|
+
from apcore_toolkit import BindingLoader
|
|
49
|
+
|
|
50
|
+
for strict in (False, True):
|
|
51
|
+
modules = BindingLoader().load(str(yaml_files[0]), strict=strict)
|
|
52
|
+
assert len(modules) == 1
|
|
53
|
+
assert modules[0].module_id == "ops.deploy"
|
|
54
|
+
assert modules[0].input_schema == {"type": "object", "properties": {}}
|
|
55
|
+
assert modules[0].output_schema["properties"]["status"] == {"type": "string"}
|
|
48
56
|
|
|
49
57
|
def test_init_convention_has_cli_group(self, cli, tmp_path):
|
|
50
58
|
runner = CliRunner()
|
|
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
|
|
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
|