dbos 1.9.0a4__tar.gz → 1.10.0a2__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.9.0a4 → dbos-1.10.0a2}/PKG-INFO +1 -1
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_dbos.py +11 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_dbos_config.py +2 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/cli/cli.py +39 -34
- {dbos-1.9.0a4 → dbos-1.10.0a2}/pyproject.toml +1 -1
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_dbos.py +23 -1
- {dbos-1.9.0a4 → dbos-1.10.0a2}/LICENSE +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/README.md +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/__init__.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/__main__.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_admin_server.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_app_db.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_classproperty.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_client.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_conductor/conductor.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_conductor/protocol.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_context.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_core.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_croniter.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_debug.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_docker_pg_helper.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_error.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_event_loop.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_fastapi.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_flask.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_kafka.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_kafka_message.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_logger.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_migrations/env.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_migrations/script.py.mako +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_migrations/versions/04ca4f231047_workflow_queues_executor_id.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_migrations/versions/27ac6900c6ad_add_queue_dedup.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_migrations/versions/50f3227f0b4b_fix_job_queue.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_migrations/versions/5c361fc04708_added_system_tables.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_migrations/versions/66478e1b95e5_consolidate_queues.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_migrations/versions/83f3732ae8e7_workflow_timeout.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_migrations/versions/933e86bdac6a_add_queue_priority.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_migrations/versions/a3b18ad34abe_added_triggers.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_migrations/versions/d76646551a6b_job_queue_limiter.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_migrations/versions/d76646551a6c_workflow_queue.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_migrations/versions/d994145b47b6_consolidate_inputs.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_migrations/versions/eab0cc1d9a14_job_queue.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_migrations/versions/f4b9b32ba814_functionname_childid_op_outputs.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_outcome.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_queue.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_recovery.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_registrations.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_roles.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_scheduler.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_schemas/__init__.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_schemas/application_database.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_schemas/system_database.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_serialization.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_sys_db.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_templates/dbos-db-starter/README.md +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_templates/dbos-db-starter/__package/__init__.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_templates/dbos-db-starter/__package/main.py.dbos +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_templates/dbos-db-starter/__package/schema.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_templates/dbos-db-starter/alembic.ini +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_templates/dbos-db-starter/dbos-config.yaml.dbos +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_templates/dbos-db-starter/migrations/env.py.dbos +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_templates/dbos-db-starter/migrations/script.py.mako +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_templates/dbos-db-starter/migrations/versions/2024_07_31_180642_init.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_templates/dbos-db-starter/start_postgres_docker.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_tracer.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_utils.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_workflow_commands.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/cli/_github_init.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/cli/_template_init.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/dbos-config.schema.json +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/py.typed +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/__init__.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/atexit_no_ctor.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/atexit_no_launch.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/classdefs.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/client_collateral.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/client_worker.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/conftest.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/dupname_classdefs1.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/dupname_classdefsa.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/more_classdefs.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/queuedworkflow.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_admin_server.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_async.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_async_workflow_management.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_classdecorators.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_cli.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_client.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_concurrency.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_config.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_croniter.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_debug.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_docker_secrets.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_failures.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_fastapi.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_fastapi_roles.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_flask.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_kafka.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_outcome.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_package.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_queue.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_scheduler.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_schema_migration.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_singleton.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_spans.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_sqlalchemy.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_workflow_introspection.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/tests/test_workflow_management.py +0 -0
- {dbos-1.9.0a4 → dbos-1.10.0a2}/version/__init__.py +0 -0
|
@@ -324,6 +324,17 @@ class DBOS:
|
|
|
324
324
|
self.conductor_websocket: Optional[ConductorWebsocket] = None
|
|
325
325
|
self._background_event_loop: BackgroundEventLoop = BackgroundEventLoop()
|
|
326
326
|
|
|
327
|
+
# Globally set the application version and executor ID.
|
|
328
|
+
# In DBOS Cloud, instead use the values supplied through environment variables.
|
|
329
|
+
if not os.environ.get("DBOS__CLOUD") == "true":
|
|
330
|
+
if (
|
|
331
|
+
"application_version" in config
|
|
332
|
+
and config["application_version"] is not None
|
|
333
|
+
):
|
|
334
|
+
GlobalParams.app_version = config["application_version"]
|
|
335
|
+
if "executor_id" in config and config["executor_id"] is not None:
|
|
336
|
+
GlobalParams.executor_id = config["executor_id"]
|
|
337
|
+
|
|
327
338
|
init_logger()
|
|
328
339
|
|
|
329
340
|
# Translate user provided config to an internal format
|
|
@@ -47,6 +47,8 @@ class DBOSConfig(TypedDict, total=False):
|
|
|
47
47
|
admin_port: Optional[int]
|
|
48
48
|
run_admin_server: Optional[bool]
|
|
49
49
|
otlp_attributes: Optional[dict[str, str]]
|
|
50
|
+
application_version: Optional[str]
|
|
51
|
+
executor_id: Optional[str]
|
|
50
52
|
|
|
51
53
|
|
|
52
54
|
class RuntimeConfig(TypedDict, total=False):
|
|
@@ -260,11 +260,9 @@ def _resolve_project_name_and_template(
|
|
|
260
260
|
return project_name, template
|
|
261
261
|
|
|
262
262
|
|
|
263
|
-
@app.command(
|
|
264
|
-
help="Run your database schema migrations using the migration commands in 'dbos-config.yaml'"
|
|
265
|
-
)
|
|
263
|
+
@app.command(help="Create DBOS system tables.")
|
|
266
264
|
def migrate(
|
|
267
|
-
|
|
265
|
+
app_database_url: Annotated[
|
|
268
266
|
typing.Optional[str],
|
|
269
267
|
typer.Option(
|
|
270
268
|
"--db-url",
|
|
@@ -272,30 +270,34 @@ def migrate(
|
|
|
272
270
|
help="Your DBOS application database URL",
|
|
273
271
|
),
|
|
274
272
|
] = None,
|
|
275
|
-
|
|
273
|
+
system_database_url: Annotated[
|
|
276
274
|
typing.Optional[str],
|
|
277
275
|
typer.Option(
|
|
278
|
-
"--sys-db-
|
|
276
|
+
"--sys-db-url",
|
|
279
277
|
"-s",
|
|
280
|
-
help="
|
|
278
|
+
help="Your DBOS system database URL",
|
|
281
279
|
),
|
|
282
280
|
] = None,
|
|
283
281
|
) -> None:
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
282
|
+
app_database_url = _get_db_url(app_database_url)
|
|
283
|
+
system_database_url = get_system_database_url(
|
|
284
|
+
{
|
|
285
|
+
"system_database_url": system_database_url,
|
|
286
|
+
"database_url": app_database_url,
|
|
287
|
+
"database": {},
|
|
288
|
+
}
|
|
289
|
+
)
|
|
290
290
|
|
|
291
|
-
typer.echo(f"Starting
|
|
291
|
+
typer.echo(f"Starting DBOS migrations")
|
|
292
|
+
typer.echo(f"Application database: {sa.make_url(app_database_url)}")
|
|
293
|
+
typer.echo(f"System database: {sa.make_url(system_database_url)}")
|
|
292
294
|
|
|
293
295
|
# First, run DBOS migrations on the system database and the application database
|
|
294
296
|
app_db = None
|
|
295
297
|
sys_db = None
|
|
296
298
|
try:
|
|
297
299
|
sys_db = SystemDatabase(
|
|
298
|
-
system_database_url=
|
|
300
|
+
system_database_url=system_database_url,
|
|
299
301
|
engine_kwargs={
|
|
300
302
|
"pool_timeout": 30,
|
|
301
303
|
"max_overflow": 0,
|
|
@@ -303,7 +305,7 @@ def migrate(
|
|
|
303
305
|
},
|
|
304
306
|
)
|
|
305
307
|
app_db = ApplicationDatabase(
|
|
306
|
-
database_url=
|
|
308
|
+
database_url=app_database_url,
|
|
307
309
|
engine_kwargs={
|
|
308
310
|
"pool_timeout": 30,
|
|
309
311
|
"max_overflow": 0,
|
|
@@ -313,17 +315,19 @@ def migrate(
|
|
|
313
315
|
sys_db.run_migrations()
|
|
314
316
|
app_db.run_migrations()
|
|
315
317
|
except Exception as e:
|
|
316
|
-
typer.echo(f"DBOS
|
|
318
|
+
typer.echo(f"DBOS migrations failed: {e}")
|
|
319
|
+
raise typer.Exit(code=1)
|
|
317
320
|
finally:
|
|
318
321
|
if sys_db:
|
|
319
322
|
sys_db.destroy()
|
|
320
323
|
if app_db:
|
|
321
324
|
app_db.destroy()
|
|
322
325
|
|
|
326
|
+
typer.echo(f"DBOS migrations successful")
|
|
327
|
+
|
|
323
328
|
# Next, run any custom migration commands specified in the configuration
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
# handle the case where the user has not specified migrations commands
|
|
329
|
+
if os.path.exists("dbos-config.yaml"):
|
|
330
|
+
config = load_config(run_process_config=False, silent=True)
|
|
327
331
|
if "database" not in config:
|
|
328
332
|
config["database"] = {}
|
|
329
333
|
migrate_commands = (
|
|
@@ -331,20 +335,21 @@ def migrate(
|
|
|
331
335
|
if "migrate" in config["database"] and config["database"]["migrate"]
|
|
332
336
|
else []
|
|
333
337
|
)
|
|
334
|
-
|
|
335
|
-
typer.echo(
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
338
|
+
if migrate_commands:
|
|
339
|
+
typer.echo("Executing migration commands from 'dbos-config.yaml'")
|
|
340
|
+
try:
|
|
341
|
+
for command in migrate_commands:
|
|
342
|
+
typer.echo(f"Executing migration command: {command}")
|
|
343
|
+
result = subprocess.run(command, shell=True, text=True)
|
|
344
|
+
if result.returncode != 0:
|
|
345
|
+
typer.echo(f"Migration command failed: {command}")
|
|
346
|
+
typer.echo(result.stderr)
|
|
347
|
+
raise typer.Exit(1)
|
|
348
|
+
if result.stdout:
|
|
349
|
+
typer.echo(result.stdout.rstrip())
|
|
350
|
+
except Exception as e:
|
|
351
|
+
typer.echo(f"An error occurred during schema migration: {e}")
|
|
352
|
+
raise typer.Exit(code=1)
|
|
348
353
|
|
|
349
354
|
|
|
350
355
|
@app.command(help="Reset the DBOS system database")
|
|
@@ -1397,7 +1397,7 @@ def test_app_version(config: DBOSConfig) -> None:
|
|
|
1397
1397
|
assert GlobalParams.app_version != app_version
|
|
1398
1398
|
|
|
1399
1399
|
# Verify that version can be overriden with an environment variable
|
|
1400
|
-
app_version =
|
|
1400
|
+
app_version = str(uuid.uuid4())
|
|
1401
1401
|
os.environ["DBOS__APPVERSION"] = app_version
|
|
1402
1402
|
|
|
1403
1403
|
DBOS.destroy(destroy_registry=True)
|
|
@@ -1412,6 +1412,28 @@ def test_app_version(config: DBOSConfig) -> None:
|
|
|
1412
1412
|
|
|
1413
1413
|
del os.environ["DBOS__APPVERSION"]
|
|
1414
1414
|
|
|
1415
|
+
# Verify that version and executor ID can be overriden with a config parameter
|
|
1416
|
+
app_version = str(uuid.uuid4())
|
|
1417
|
+
executor_id = str(uuid.uuid4())
|
|
1418
|
+
|
|
1419
|
+
DBOS.destroy(destroy_registry=True)
|
|
1420
|
+
config["application_version"] = app_version
|
|
1421
|
+
config["executor_id"] = executor_id
|
|
1422
|
+
DBOS(config=config)
|
|
1423
|
+
|
|
1424
|
+
@DBOS.workflow()
|
|
1425
|
+
def test_workflow() -> str:
|
|
1426
|
+
assert DBOS.workflow_id
|
|
1427
|
+
return DBOS.workflow_id
|
|
1428
|
+
|
|
1429
|
+
DBOS.launch()
|
|
1430
|
+
assert GlobalParams.app_version == app_version
|
|
1431
|
+
assert GlobalParams.executor_id == executor_id
|
|
1432
|
+
wfid = test_workflow()
|
|
1433
|
+
handle: WorkflowHandle[str] = DBOS.retrieve_workflow(wfid)
|
|
1434
|
+
assert handle.get_status().app_version == app_version
|
|
1435
|
+
assert handle.get_status().executor_id == executor_id
|
|
1436
|
+
|
|
1415
1437
|
|
|
1416
1438
|
def test_recovery_appversion(config: DBOSConfig) -> None:
|
|
1417
1439
|
input = 5
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.9.0a4 → dbos-1.10.0a2}/dbos/_migrations/versions/04ca4f231047_workflow_queues_executor_id.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dbos-1.9.0a4 → dbos-1.10.0a2}/dbos/_migrations/versions/5c361fc04708_added_system_tables.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|