dbos 1.12.0a2__tar.gz → 1.12.0a3__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.
Potentially problematic release.
This version of dbos might be problematic. Click here for more details.
- {dbos-1.12.0a2 → dbos-1.12.0a3}/PKG-INFO +1 -1
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_fastapi.py +2 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/cli/cli.py +35 -6
- {dbos-1.12.0a2 → dbos-1.12.0a3}/pyproject.toml +1 -1
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_package.py +100 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_spans.py +2 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/LICENSE +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/README.md +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/__init__.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/__main__.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_admin_server.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_app_db.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_classproperty.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_client.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_conductor/conductor.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_conductor/protocol.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_context.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_core.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_croniter.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_dbos.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_dbos_config.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_debug.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_docker_pg_helper.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_error.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_event_loop.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_flask.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_kafka.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_kafka_message.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_logger.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/env.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/script.py.mako +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/versions/01ce9f07bd10_streaming.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/versions/04ca4f231047_workflow_queues_executor_id.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/versions/27ac6900c6ad_add_queue_dedup.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/versions/50f3227f0b4b_fix_job_queue.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/versions/5c361fc04708_added_system_tables.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/versions/66478e1b95e5_consolidate_queues.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/versions/83f3732ae8e7_workflow_timeout.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/versions/933e86bdac6a_add_queue_priority.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/versions/a3b18ad34abe_added_triggers.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/versions/d76646551a6b_job_queue_limiter.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/versions/d76646551a6c_workflow_queue.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/versions/d994145b47b6_consolidate_inputs.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/versions/eab0cc1d9a14_job_queue.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/versions/f4b9b32ba814_functionname_childid_op_outputs.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_outcome.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_queue.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_recovery.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_registrations.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_roles.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_scheduler.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_schemas/__init__.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_schemas/application_database.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_schemas/system_database.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_serialization.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_sys_db.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_templates/dbos-db-starter/README.md +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_templates/dbos-db-starter/__package/__init__.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_templates/dbos-db-starter/__package/main.py.dbos +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_templates/dbos-db-starter/__package/schema.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_templates/dbos-db-starter/alembic.ini +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_templates/dbos-db-starter/dbos-config.yaml.dbos +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_templates/dbos-db-starter/migrations/env.py.dbos +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_templates/dbos-db-starter/migrations/script.py.mako +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_templates/dbos-db-starter/migrations/versions/2024_07_31_180642_init.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_templates/dbos-db-starter/start_postgres_docker.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_tracer.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_utils.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_workflow_commands.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/cli/_github_init.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/cli/_template_init.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/cli/migration.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/dbos-config.schema.json +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/py.typed +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/__init__.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/atexit_no_ctor.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/atexit_no_launch.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/classdefs.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/client_collateral.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/client_worker.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/conftest.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/dupname_classdefs1.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/dupname_classdefsa.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/more_classdefs.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/queuedworkflow.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_admin_server.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_async.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_async_workflow_management.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_classdecorators.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_cli.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_client.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_concurrency.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_config.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_croniter.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_dbos.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_debug.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_docker_secrets.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_failures.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_fastapi.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_fastapi_roles.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_flask.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_kafka.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_migrate.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_outcome.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_queue.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_scheduler.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_schema_migration.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_singleton.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_sqlalchemy.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_streaming.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_workflow_introspection.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/tests/test_workflow_management.py +0 -0
- {dbos-1.12.0a2 → dbos-1.12.0a3}/version/__init__.py +0 -0
|
@@ -83,4 +83,6 @@ def setup_fastapi_middleware(app: FastAPI, dbos: DBOS) -> None:
|
|
|
83
83
|
response = await call_next(request)
|
|
84
84
|
else:
|
|
85
85
|
response = await call_next(request)
|
|
86
|
+
if hasattr(response, "status_code"):
|
|
87
|
+
DBOS.span.set_attribute("responseCode", response.status_code)
|
|
86
88
|
return response
|
|
@@ -14,6 +14,7 @@ from rich import print as richprint
|
|
|
14
14
|
from rich.prompt import IntPrompt
|
|
15
15
|
from typing_extensions import Annotated, List
|
|
16
16
|
|
|
17
|
+
from dbos._context import SetWorkflowID
|
|
17
18
|
from dbos._debug import debug_workflow, parse_start_command
|
|
18
19
|
from dbos.cli.migration import grant_dbos_schema_permissions, migrate_dbos_databases
|
|
19
20
|
|
|
@@ -567,7 +568,9 @@ def resume(
|
|
|
567
568
|
start_client(db_url=db_url).resume_workflow(workflow_id=workflow_id)
|
|
568
569
|
|
|
569
570
|
|
|
570
|
-
@workflow.command(
|
|
571
|
+
@workflow.command(
|
|
572
|
+
help="[DEPRECATED - Use fork instead] Restart a workflow from the beginning with a new id"
|
|
573
|
+
)
|
|
571
574
|
def restart(
|
|
572
575
|
workflow_id: Annotated[str, typer.Argument()],
|
|
573
576
|
db_url: Annotated[
|
|
@@ -600,6 +603,22 @@ def fork(
|
|
|
600
603
|
help="Restart from this step",
|
|
601
604
|
),
|
|
602
605
|
] = 1,
|
|
606
|
+
forked_workflow_id: Annotated[
|
|
607
|
+
typing.Optional[str],
|
|
608
|
+
typer.Option(
|
|
609
|
+
"--forked-workflow-id",
|
|
610
|
+
"-f",
|
|
611
|
+
help="Custom ID for the forked workflow",
|
|
612
|
+
),
|
|
613
|
+
] = None,
|
|
614
|
+
application_version: Annotated[
|
|
615
|
+
typing.Optional[str],
|
|
616
|
+
typer.Option(
|
|
617
|
+
"--application-version",
|
|
618
|
+
"-v",
|
|
619
|
+
help="Custom application version for the forked workflow",
|
|
620
|
+
),
|
|
621
|
+
] = None,
|
|
603
622
|
db_url: Annotated[
|
|
604
623
|
typing.Optional[str],
|
|
605
624
|
typer.Option(
|
|
@@ -609,11 +628,21 @@ def fork(
|
|
|
609
628
|
),
|
|
610
629
|
] = None,
|
|
611
630
|
) -> None:
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
631
|
+
client = start_client(db_url=db_url)
|
|
632
|
+
|
|
633
|
+
if forked_workflow_id is not None:
|
|
634
|
+
with SetWorkflowID(forked_workflow_id):
|
|
635
|
+
status = client.fork_workflow(
|
|
636
|
+
workflow_id=workflow_id,
|
|
637
|
+
start_step=step,
|
|
638
|
+
application_version=application_version,
|
|
639
|
+
).get_status()
|
|
640
|
+
else:
|
|
641
|
+
status = client.fork_workflow(
|
|
642
|
+
workflow_id=workflow_id,
|
|
643
|
+
start_step=step,
|
|
644
|
+
application_version=application_version,
|
|
645
|
+
).get_status()
|
|
617
646
|
print(jsonpickle.encode(status, unpicklable=False))
|
|
618
647
|
|
|
619
648
|
|
|
@@ -275,3 +275,103 @@ def test_workflow_commands(postgres_db_engine: sa.Engine) -> None:
|
|
|
275
275
|
assert isinstance(fork_wf_data, dict)
|
|
276
276
|
assert fork_wf_data["workflow_id"] != wf_id
|
|
277
277
|
assert fork_wf_data["status"] == "ENQUEUED"
|
|
278
|
+
|
|
279
|
+
# fork the workflow with custom forked workflow ID
|
|
280
|
+
custom_fork_id = "custom-fork-id-12345"
|
|
281
|
+
output = subprocess.check_output(
|
|
282
|
+
[
|
|
283
|
+
"dbos",
|
|
284
|
+
"workflow",
|
|
285
|
+
"fork",
|
|
286
|
+
wf_id,
|
|
287
|
+
"--step",
|
|
288
|
+
"3",
|
|
289
|
+
"--forked-workflow-id",
|
|
290
|
+
custom_fork_id,
|
|
291
|
+
],
|
|
292
|
+
cwd=temp_path,
|
|
293
|
+
env=env,
|
|
294
|
+
)
|
|
295
|
+
custom_fork_data = json.loads(output)
|
|
296
|
+
assert isinstance(custom_fork_data, dict)
|
|
297
|
+
assert custom_fork_data["workflow_id"] == custom_fork_id
|
|
298
|
+
assert custom_fork_data["status"] == "ENQUEUED"
|
|
299
|
+
|
|
300
|
+
# verify the forked workflow data with get command
|
|
301
|
+
output = subprocess.check_output(
|
|
302
|
+
["dbos", "workflow", "get", custom_fork_id, "--db-url", db_url],
|
|
303
|
+
cwd=temp_path,
|
|
304
|
+
)
|
|
305
|
+
custom_fork_get_data = json.loads(output)
|
|
306
|
+
assert isinstance(custom_fork_get_data, dict)
|
|
307
|
+
assert custom_fork_get_data["workflow_id"] == custom_fork_id
|
|
308
|
+
|
|
309
|
+
# fork the workflow with custom application version
|
|
310
|
+
output = subprocess.check_output(
|
|
311
|
+
[
|
|
312
|
+
"dbos",
|
|
313
|
+
"workflow",
|
|
314
|
+
"fork",
|
|
315
|
+
wf_id,
|
|
316
|
+
"--step",
|
|
317
|
+
"2",
|
|
318
|
+
"--application-version",
|
|
319
|
+
"test-version",
|
|
320
|
+
],
|
|
321
|
+
cwd=temp_path,
|
|
322
|
+
env=env,
|
|
323
|
+
)
|
|
324
|
+
version_fork_data = json.loads(output)
|
|
325
|
+
assert isinstance(version_fork_data, dict)
|
|
326
|
+
assert version_fork_data["workflow_id"] != wf_id
|
|
327
|
+
assert version_fork_data["status"] == "ENQUEUED"
|
|
328
|
+
|
|
329
|
+
# verify the forked workflow data with get command and check application version
|
|
330
|
+
output = subprocess.check_output(
|
|
331
|
+
[
|
|
332
|
+
"dbos",
|
|
333
|
+
"workflow",
|
|
334
|
+
"get",
|
|
335
|
+
version_fork_data["workflow_id"],
|
|
336
|
+
"--db-url",
|
|
337
|
+
db_url,
|
|
338
|
+
],
|
|
339
|
+
cwd=temp_path,
|
|
340
|
+
)
|
|
341
|
+
version_fork_get_data = json.loads(output)
|
|
342
|
+
assert isinstance(version_fork_get_data, dict)
|
|
343
|
+
assert version_fork_get_data["workflow_id"] == version_fork_data["workflow_id"]
|
|
344
|
+
assert version_fork_get_data["app_version"] == "test-version"
|
|
345
|
+
|
|
346
|
+
# fork the workflow with both custom ID and application version
|
|
347
|
+
custom_fork_id2 = "custom-fork-with-version-67890"
|
|
348
|
+
output = subprocess.check_output(
|
|
349
|
+
[
|
|
350
|
+
"dbos",
|
|
351
|
+
"workflow",
|
|
352
|
+
"fork",
|
|
353
|
+
wf_id,
|
|
354
|
+
"--step",
|
|
355
|
+
"4",
|
|
356
|
+
"--forked-workflow-id",
|
|
357
|
+
custom_fork_id2,
|
|
358
|
+
"--application-version",
|
|
359
|
+
"v2.0.0",
|
|
360
|
+
],
|
|
361
|
+
cwd=temp_path,
|
|
362
|
+
env=env,
|
|
363
|
+
)
|
|
364
|
+
combined_fork_data = json.loads(output)
|
|
365
|
+
assert isinstance(combined_fork_data, dict)
|
|
366
|
+
assert combined_fork_data["workflow_id"] == custom_fork_id2
|
|
367
|
+
assert combined_fork_data["status"] == "ENQUEUED"
|
|
368
|
+
|
|
369
|
+
# verify the forked workflow data with get command and check both ID and application version
|
|
370
|
+
output = subprocess.check_output(
|
|
371
|
+
["dbos", "workflow", "get", custom_fork_id2, "--db-url", db_url],
|
|
372
|
+
cwd=temp_path,
|
|
373
|
+
)
|
|
374
|
+
combined_fork_get_data = json.loads(output)
|
|
375
|
+
assert isinstance(combined_fork_get_data, dict)
|
|
376
|
+
assert combined_fork_get_data["workflow_id"] == custom_fork_id2
|
|
377
|
+
assert combined_fork_get_data["app_version"] == "v2.0.0"
|
|
@@ -244,6 +244,8 @@ def test_wf_fastapi(dbos_fastapi: Tuple[DBOS, FastAPI]) -> None:
|
|
|
244
244
|
|
|
245
245
|
assert spans[0].name == test_workflow_endpoint.__qualname__
|
|
246
246
|
assert spans[1].name == "/wf"
|
|
247
|
+
assert spans[1].attributes is not None
|
|
248
|
+
assert spans[1].attributes["responseCode"] == 200
|
|
247
249
|
|
|
248
250
|
assert spans[0].parent.span_id == spans[1].context.span_id # type: ignore
|
|
249
251
|
assert spans[1].parent == None
|
|
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
|
{dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/versions/5c361fc04708_added_system_tables.py
RENAMED
|
File without changes
|
{dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/versions/66478e1b95e5_consolidate_queues.py
RENAMED
|
File without changes
|
|
File without changes
|
{dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/versions/933e86bdac6a_add_queue_priority.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dbos-1.12.0a2 → dbos-1.12.0a3}/dbos/_migrations/versions/d994145b47b6_consolidate_inputs.py
RENAMED
|
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
|