roscoe 2.4.0__tar.gz → 2.4.2__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.
- {roscoe-2.4.0/roscoe.egg-info → roscoe-2.4.2}/PKG-INFO +1 -1
- {roscoe-2.4.0 → roscoe-2.4.2}/pyproject.toml +1 -1
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/__init__.py +1 -1
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/ticktick.py +54 -7
- {roscoe-2.4.0 → roscoe-2.4.2/roscoe.egg-info}/PKG-INFO +1 -1
- {roscoe-2.4.0 → roscoe-2.4.2}/LICENSE +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/README.md +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/approval/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/approval/gate.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/build_command.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/build_ui.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/eval_command.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/eval_gui.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/google_auth_command.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/graph_command.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/gui_theme.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/init_command.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/main.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/monitor_command.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/monitor_gui.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/pricing_command.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/pricing_gui.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/run_command.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/run_web.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold/.env.example +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold/agent_config.yaml +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold/custom_ui_example.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold/db.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold/docs.md +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold/evals/test_cases.json +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold/main.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold/prompts/system.txt +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold/tools/my_tools.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold_nc/agent_config.yaml +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold_nc/workflow.yaml +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/validate_command.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/wizard_gui.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/config/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/config/loader.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/_graph_base.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/base_connector.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/database.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/github.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/google_workspace.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/jira.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/notion.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/outlook.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/rest_api.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/servicenow.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/sharepoint.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/snowflake.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/core/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/core/agent_base.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/core/agent_result.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/core/agent_runner.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/core/executor.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/core/state.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/dataset.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/eval_runner.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/regression.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/report.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/scorers/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/scorers/_judge.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/scorers/base.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/scorers/hallucination.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/scorers/output_quality.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/scorers/tool_usage.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/llm/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/llm/base_provider.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/llm/capability_map.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/llm/provider_factory.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/memory/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/memory/conversation.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/memory/knowledge.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/memory/persistent.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/middleware/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/middleware/audit_logger.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/middleware/cost_tracker.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/middleware/rate_limiter.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/middleware/retry.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/monitoring/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/monitoring/alerts.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/monitoring/dashboard.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/monitoring/exporters/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/monitoring/exporters/azure_monitor.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/monitoring/exporters/prometheus.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/monitoring/metrics.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/monitoring/notifier.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/monitoring/web.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/pricing.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/exec_assistant_agent/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/exec_assistant_agent/agent_config.yaml +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/exec_assistant_agent/prompts/system.txt +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/exec_assistant_agent/tools/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/exec_assistant_agent/tools/exec_tools.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/google_workspace_agent/agent_config.yaml +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/google_workspace_agent/prompts/system.txt +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/google_workspace_agent/tools/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/google_workspace_agent/tools/gws_tools.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/hr_agent/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/hr_agent/agent_config.yaml +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/hr_agent/prompts/system.txt +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/hr_agent/tools/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/hr_agent/tools/hr_tools.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/it_support_agent/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/it_support_agent/agent_config.yaml +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/it_support_agent/prompts/system.txt +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/it_support_agent/tools/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/it_support_agent/tools/it_tools.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/knowledge_base_agent/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/knowledge_base_agent/agent_config.yaml +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/knowledge_base_agent/prompts/system.txt +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/knowledge_base_agent/tools/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/knowledge_base_agent/tools/kb_tools.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/legal_agent/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/legal_agent/agent_config.yaml +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/legal_agent/prompts/system.txt +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/legal_agent/tools/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/legal_agent/tools/legal_tools.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/tools/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/tools/decorator.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/workflow/__init__.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/workflow/diagram.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/workflow/executor.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/workflow/expressions.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/workflow/loader.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/workflow/registry.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/workflow/runner.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/workflow/schema.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/workflow/validate.py +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe.egg-info/SOURCES.txt +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe.egg-info/dependency_links.txt +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe.egg-info/entry_points.txt +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe.egg-info/requires.txt +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/roscoe.egg-info/top_level.txt +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/setup.cfg +0 -0
- {roscoe-2.4.0 → roscoe-2.4.2}/tests/test_smoke.py +0 -0
|
@@ -32,7 +32,8 @@ _PRIORITIES = {"none": 0, "low": 1, "medium": 3, "high": 5}
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
class TickTickConnector(BaseConnector):
|
|
35
|
-
"""Tools: list_projects, list_project_tasks, get_task, create_task,
|
|
35
|
+
"""Tools: list_projects, list_project_tasks, get_task, create_task,
|
|
36
|
+
create_tasks_batch, complete_task."""
|
|
36
37
|
|
|
37
38
|
def _base_url(self) -> str:
|
|
38
39
|
return self.config.get("base_url", _BASE)
|
|
@@ -68,19 +69,15 @@ class TickTickConnector(BaseConnector):
|
|
|
68
69
|
"""Retrieve one TickTick task by id."""
|
|
69
70
|
return self._request("GET", f"/project/{project_id}/task/{task_id}")
|
|
70
71
|
|
|
71
|
-
def
|
|
72
|
+
def _create_one(
|
|
72
73
|
title: str,
|
|
73
74
|
content: str = "",
|
|
74
75
|
project_id: str | None = None,
|
|
75
76
|
due_date: str | None = None,
|
|
76
77
|
priority: str = "none",
|
|
77
78
|
is_all_day: bool = True,
|
|
79
|
+
checklist: list[str] | None = None,
|
|
78
80
|
) -> Any:
|
|
79
|
-
"""Create a TickTick task.
|
|
80
|
-
|
|
81
|
-
due_date is ISO 8601 with an offset, e.g. '2026-08-03T09:00:00+0000'.
|
|
82
|
-
priority is one of: none, low, medium, high.
|
|
83
|
-
"""
|
|
84
81
|
if priority not in _PRIORITIES:
|
|
85
82
|
raise ValueError(
|
|
86
83
|
f"Unknown priority '{priority}'. Use one of: {', '.join(_PRIORITIES)}."
|
|
@@ -95,8 +92,55 @@ class TickTickConnector(BaseConnector):
|
|
|
95
92
|
if due_date:
|
|
96
93
|
payload["dueDate"] = due_date
|
|
97
94
|
payload["isAllDay"] = is_all_day
|
|
95
|
+
if checklist:
|
|
96
|
+
payload["kind"] = "CHECKLIST"
|
|
97
|
+
payload["items"] = [{"title": item, "status": 0} for item in checklist]
|
|
98
98
|
return self._request("POST", "/task", json=payload)
|
|
99
99
|
|
|
100
|
+
def create_task(
|
|
101
|
+
title: str,
|
|
102
|
+
content: str = "",
|
|
103
|
+
project_id: str | None = None,
|
|
104
|
+
due_date: str | None = None,
|
|
105
|
+
priority: str = "none",
|
|
106
|
+
is_all_day: bool = True,
|
|
107
|
+
checklist: list[str] | None = None,
|
|
108
|
+
) -> Any:
|
|
109
|
+
"""Create a TickTick task.
|
|
110
|
+
|
|
111
|
+
due_date is ISO 8601 with an offset, e.g. '2026-08-03T09:00:00+0000'.
|
|
112
|
+
priority is one of: none, low, medium, high.
|
|
113
|
+
checklist, if given, adds real checkable sub-items (TickTick's native
|
|
114
|
+
checklist) instead of plain text in content.
|
|
115
|
+
"""
|
|
116
|
+
return _create_one(
|
|
117
|
+
title, content, project_id, due_date, priority, is_all_day, checklist
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
def create_tasks_batch(tasks: list[dict[str, Any]]) -> Any:
|
|
121
|
+
"""Create several TickTick tasks in one call.
|
|
122
|
+
|
|
123
|
+
Each item in `tasks` takes the same fields as create_task: title
|
|
124
|
+
(required), content, project_id, due_date, priority (none/low/
|
|
125
|
+
medium/high), checklist (list of strings, becomes native checkable
|
|
126
|
+
sub-items). One tool call for the whole batch, so a workflow can
|
|
127
|
+
gate it behind a single `requires_approval` instead of one pause
|
|
128
|
+
per task.
|
|
129
|
+
"""
|
|
130
|
+
created = [
|
|
131
|
+
_create_one(
|
|
132
|
+
title=t["title"],
|
|
133
|
+
content=t.get("content", ""),
|
|
134
|
+
project_id=t.get("project_id"),
|
|
135
|
+
due_date=t.get("due_date"),
|
|
136
|
+
priority=t.get("priority", "none"),
|
|
137
|
+
is_all_day=t.get("is_all_day", True),
|
|
138
|
+
checklist=t.get("checklist"),
|
|
139
|
+
)
|
|
140
|
+
for t in tasks
|
|
141
|
+
]
|
|
142
|
+
return {"created": len(created), "tasks": created}
|
|
143
|
+
|
|
100
144
|
def complete_task(project_id: str, task_id: str) -> Any:
|
|
101
145
|
"""Mark a TickTick task as complete."""
|
|
102
146
|
return self._request(
|
|
@@ -110,5 +154,8 @@ class TickTickConnector(BaseConnector):
|
|
|
110
154
|
),
|
|
111
155
|
StructuredTool.from_function(get_task, description=get_task.__doc__),
|
|
112
156
|
StructuredTool.from_function(create_task, description=create_task.__doc__),
|
|
157
|
+
StructuredTool.from_function(
|
|
158
|
+
create_tasks_batch, description=create_tasks_batch.__doc__
|
|
159
|
+
),
|
|
113
160
|
StructuredTool.from_function(complete_task, description=complete_task.__doc__),
|
|
114
161
|
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|