clawd-code-sdk 0.4.0__tar.gz → 0.4.1__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.
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/PKG-INFO +1 -1
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/pyproject.toml +1 -1
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/__init__.py +15 -3
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/client.py +2 -4
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/__init__.py +14 -2
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/messages.py +115 -1
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/query.py +2 -2
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/.gitignore +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/LICENSE +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/README.md +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/_bundled/.gitignore +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/_errors.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/_internal/__init__.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/_internal/message_parser.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/_internal/query.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/_internal/transport/__init__.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/_internal/transport/subprocess_cli.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/_version.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/anthropic_types.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/list_sessions.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/mcp_utils.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/agents.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/base.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/content_blocks.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/control.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/hooks.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/input_types.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/mcp.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/options.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/output_types.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/permissions.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/sandbox.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/server_info.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/py.typed +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/session.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/storage/ARCHITECTURE.md +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/storage/__init__.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/storage/helpers.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/storage/models.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/storage/replay.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/usage.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/__init__.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/conftest.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/__init__.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_agents_and_settings.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_dynamic_control.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_hook_events.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_hooks.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_include_partial_messages.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_mcp_tools.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_sdk_mcp_tools.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_slash_commands.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_stderr_callback.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_structured_output.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_subagent_invocation.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_tool_permissions.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/mcp_server.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/mock_claude_server.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_changelog.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_client.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_errors.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_image.png +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_integration.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_message_parser.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_sdk_mcp_integration.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_session.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_streaming_client.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_subprocess_buffering.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_tool_callbacks.py +0 -0
- {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_transport.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: clawd-code-sdk
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.1
|
|
4
4
|
Summary: Python SDK for Claude Code
|
|
5
5
|
Project-URL: Documentation, https://github.com/phil65/claude-agent-sdk-python
|
|
6
6
|
Project-URL: Homepage, https://github.com/phil65/claude-agent-sdk-python
|
|
@@ -90,11 +90,17 @@ from .models import (
|
|
|
90
90
|
ToolResultBlock,
|
|
91
91
|
ToolUseBlock,
|
|
92
92
|
UserMessage,
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
DocumentMediaType,
|
|
94
|
+
ImageMediaType,
|
|
95
|
+
PlainTextMediaType,
|
|
96
|
+
UserDocumentPrompt,
|
|
97
|
+
UserDocumentURLPrompt,
|
|
95
98
|
UserImagePrompt,
|
|
99
|
+
UserImageURLPrompt,
|
|
100
|
+
UserPlainTextDocumentPrompt,
|
|
96
101
|
UserPrompt,
|
|
97
|
-
|
|
102
|
+
UserPromptSubmitHookInput,
|
|
103
|
+
UserTextPrompt,
|
|
98
104
|
FromPR,
|
|
99
105
|
NewSession,
|
|
100
106
|
ResumeSession,
|
|
@@ -146,6 +152,7 @@ __all__ = [
|
|
|
146
152
|
# Session config
|
|
147
153
|
"ContinueLatest",
|
|
148
154
|
"ConversationTurn",
|
|
155
|
+
"DocumentMediaType",
|
|
149
156
|
"FromPR",
|
|
150
157
|
"HookCallback",
|
|
151
158
|
"HookContext",
|
|
@@ -173,6 +180,7 @@ __all__ = [
|
|
|
173
180
|
"PermissionResultAllow",
|
|
174
181
|
"PermissionResultDeny",
|
|
175
182
|
"PermissionUpdate",
|
|
183
|
+
"PlainTextMediaType",
|
|
176
184
|
"PostToolUseFailureHookInput",
|
|
177
185
|
"PostToolUseFailureHookSpecificOutput",
|
|
178
186
|
"PostToolUseHookInput",
|
|
@@ -221,8 +229,12 @@ __all__ = [
|
|
|
221
229
|
"ToolUseBlock",
|
|
222
230
|
# Transport
|
|
223
231
|
"Transport",
|
|
232
|
+
"UserDocumentPrompt",
|
|
233
|
+
"UserDocumentURLPrompt",
|
|
224
234
|
"UserImagePrompt",
|
|
235
|
+
"UserImageURLPrompt",
|
|
225
236
|
"UserMessage",
|
|
237
|
+
"UserPlainTextDocumentPrompt",
|
|
226
238
|
"UserPrompt",
|
|
227
239
|
"UserPromptSubmitHookInput",
|
|
228
240
|
"UserTextPrompt",
|
|
@@ -31,9 +31,7 @@ if TYPE_CHECKING:
|
|
|
31
31
|
from clawd_code_sdk._internal.query import Query
|
|
32
32
|
from clawd_code_sdk.models import Message, PermissionMode
|
|
33
33
|
from clawd_code_sdk.models.mcp import McpServerConfig
|
|
34
|
-
from clawd_code_sdk.models.messages import
|
|
35
|
-
UserImagePrompt,
|
|
36
|
-
)
|
|
34
|
+
from clawd_code_sdk.models.messages import UserPrompt
|
|
37
35
|
from clawd_code_sdk.models.server_info import ClaudeCodeServerInfo
|
|
38
36
|
|
|
39
37
|
|
|
@@ -164,7 +162,7 @@ class ClaudeSDKClient:
|
|
|
164
162
|
|
|
165
163
|
async def query(
|
|
166
164
|
self,
|
|
167
|
-
*prompts: str |
|
|
165
|
+
*prompts: str | UserPrompt,
|
|
168
166
|
session_id: str = "default",
|
|
169
167
|
parent_tool_use_id: str | None = None,
|
|
170
168
|
) -> None:
|
|
@@ -241,10 +241,16 @@ from .messages import (
|
|
|
241
241
|
TriggerMetadata,
|
|
242
242
|
Usage,
|
|
243
243
|
UserMessage,
|
|
244
|
+
DocumentMediaType,
|
|
245
|
+
ImageMediaType,
|
|
246
|
+
PlainTextMediaType,
|
|
247
|
+
UserDocumentPrompt,
|
|
248
|
+
UserDocumentURLPrompt,
|
|
244
249
|
UserImagePrompt,
|
|
245
|
-
|
|
250
|
+
UserImageURLPrompt,
|
|
251
|
+
UserPlainTextDocumentPrompt,
|
|
246
252
|
UserPrompt,
|
|
247
|
-
|
|
253
|
+
UserTextPrompt,
|
|
248
254
|
system_message_adapter,
|
|
249
255
|
)
|
|
250
256
|
from .options import ClaudeAgentOptions
|
|
@@ -318,6 +324,7 @@ __all__ = [
|
|
|
318
324
|
"ControlErrorResponse",
|
|
319
325
|
"ControlRequestUnion",
|
|
320
326
|
"ControlResponse",
|
|
327
|
+
"DocumentMediaType",
|
|
321
328
|
"EditOutput",
|
|
322
329
|
"EditToolUseResult",
|
|
323
330
|
"EnterPlanModeInput",
|
|
@@ -392,6 +399,7 @@ __all__ = [
|
|
|
392
399
|
"PermissionRuleValue",
|
|
393
400
|
"PermissionUpdate",
|
|
394
401
|
"PermissionUpdateDestination",
|
|
402
|
+
"PlainTextMediaType",
|
|
395
403
|
"PostToolUseFailureHookInput",
|
|
396
404
|
"PostToolUseFailureHookSpecificOutput",
|
|
397
405
|
"PostToolUseHookInput",
|
|
@@ -491,8 +499,12 @@ __all__ = [
|
|
|
491
499
|
"UnsubscribeMcpResourceOutput",
|
|
492
500
|
"UnsubscribePollingOutput",
|
|
493
501
|
"Usage",
|
|
502
|
+
"UserDocumentPrompt",
|
|
503
|
+
"UserDocumentURLPrompt",
|
|
494
504
|
"UserImagePrompt",
|
|
505
|
+
"UserImageURLPrompt",
|
|
495
506
|
"UserMessage",
|
|
507
|
+
"UserPlainTextDocumentPrompt",
|
|
496
508
|
"UserPrompt",
|
|
497
509
|
"UserPromptSubmitHookInput",
|
|
498
510
|
"UserPromptSubmitHookSpecificOutput",
|
|
@@ -59,6 +59,8 @@ Outcome = Literal["success", "error", "cancelled"]
|
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
ImageMediaType = Literal["image/png", "image/jpeg", "image/gif", "image/webp"]
|
|
62
|
+
DocumentMediaType = Literal["application/pdf"]
|
|
63
|
+
PlainTextMediaType = Literal["text/plain"]
|
|
62
64
|
|
|
63
65
|
|
|
64
66
|
@dataclass
|
|
@@ -93,7 +95,119 @@ class UserImagePrompt:
|
|
|
93
95
|
}
|
|
94
96
|
|
|
95
97
|
|
|
96
|
-
|
|
98
|
+
@dataclass
|
|
99
|
+
class UserImageURLPrompt:
|
|
100
|
+
"""A user prompt containing an image referenced by URL."""
|
|
101
|
+
|
|
102
|
+
url: str
|
|
103
|
+
"""Public URL of the image."""
|
|
104
|
+
|
|
105
|
+
def to_content_block(self) -> dict[str, Any]:
|
|
106
|
+
"""Return the Anthropic API content block dict."""
|
|
107
|
+
return {
|
|
108
|
+
"type": "image",
|
|
109
|
+
"source": {
|
|
110
|
+
"type": "url",
|
|
111
|
+
"url": self.url,
|
|
112
|
+
},
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
@dataclass
|
|
117
|
+
class UserDocumentPrompt:
|
|
118
|
+
"""A user prompt containing a base64-encoded PDF document."""
|
|
119
|
+
|
|
120
|
+
document_data: str
|
|
121
|
+
"""Base64-encoded PDF data."""
|
|
122
|
+
media_type: DocumentMediaType = "application/pdf"
|
|
123
|
+
"""MIME type of the document."""
|
|
124
|
+
title: str | None = None
|
|
125
|
+
"""Optional document title."""
|
|
126
|
+
context: str | None = None
|
|
127
|
+
"""Optional context about the document."""
|
|
128
|
+
|
|
129
|
+
def to_content_block(self) -> dict[str, Any]:
|
|
130
|
+
"""Return the Anthropic API content block dict."""
|
|
131
|
+
block: dict[str, Any] = {
|
|
132
|
+
"type": "document",
|
|
133
|
+
"source": {
|
|
134
|
+
"type": "base64",
|
|
135
|
+
"media_type": self.media_type,
|
|
136
|
+
"data": self.document_data,
|
|
137
|
+
},
|
|
138
|
+
}
|
|
139
|
+
if self.title is not None:
|
|
140
|
+
block["title"] = self.title
|
|
141
|
+
if self.context is not None:
|
|
142
|
+
block["context"] = self.context
|
|
143
|
+
return block
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
@dataclass
|
|
147
|
+
class UserDocumentURLPrompt:
|
|
148
|
+
"""A user prompt containing a PDF document referenced by URL."""
|
|
149
|
+
|
|
150
|
+
url: str
|
|
151
|
+
"""Public URL of the PDF document."""
|
|
152
|
+
title: str | None = None
|
|
153
|
+
"""Optional document title."""
|
|
154
|
+
context: str | None = None
|
|
155
|
+
"""Optional context about the document."""
|
|
156
|
+
|
|
157
|
+
def to_content_block(self) -> dict[str, Any]:
|
|
158
|
+
"""Return the Anthropic API content block dict."""
|
|
159
|
+
block: dict[str, Any] = {
|
|
160
|
+
"type": "document",
|
|
161
|
+
"source": {
|
|
162
|
+
"type": "url",
|
|
163
|
+
"url": self.url,
|
|
164
|
+
},
|
|
165
|
+
}
|
|
166
|
+
if self.title is not None:
|
|
167
|
+
block["title"] = self.title
|
|
168
|
+
if self.context is not None:
|
|
169
|
+
block["context"] = self.context
|
|
170
|
+
return block
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
@dataclass
|
|
174
|
+
class UserPlainTextDocumentPrompt:
|
|
175
|
+
"""A user prompt containing a plain text document."""
|
|
176
|
+
|
|
177
|
+
data: str
|
|
178
|
+
"""The plain text content."""
|
|
179
|
+
media_type: PlainTextMediaType = "text/plain"
|
|
180
|
+
"""MIME type (always text/plain)."""
|
|
181
|
+
title: str | None = None
|
|
182
|
+
"""Optional document title."""
|
|
183
|
+
context: str | None = None
|
|
184
|
+
"""Optional context about the document."""
|
|
185
|
+
|
|
186
|
+
def to_content_block(self) -> dict[str, Any]:
|
|
187
|
+
"""Return the Anthropic API content block dict."""
|
|
188
|
+
block: dict[str, Any] = {
|
|
189
|
+
"type": "document",
|
|
190
|
+
"source": {
|
|
191
|
+
"type": "text",
|
|
192
|
+
"media_type": self.media_type,
|
|
193
|
+
"data": self.data,
|
|
194
|
+
},
|
|
195
|
+
}
|
|
196
|
+
if self.title is not None:
|
|
197
|
+
block["title"] = self.title
|
|
198
|
+
if self.context is not None:
|
|
199
|
+
block["context"] = self.context
|
|
200
|
+
return block
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
UserPrompt = (
|
|
204
|
+
UserTextPrompt
|
|
205
|
+
| UserImagePrompt
|
|
206
|
+
| UserImageURLPrompt
|
|
207
|
+
| UserDocumentPrompt
|
|
208
|
+
| UserDocumentURLPrompt
|
|
209
|
+
| UserPlainTextDocumentPrompt
|
|
210
|
+
)
|
|
97
211
|
"""Union type for all user prompt dataclasses."""
|
|
98
212
|
|
|
99
213
|
|
|
@@ -13,11 +13,11 @@ if TYPE_CHECKING:
|
|
|
13
13
|
|
|
14
14
|
from clawd_code_sdk._internal.transport import Transport
|
|
15
15
|
from clawd_code_sdk.models import Message
|
|
16
|
-
from clawd_code_sdk.models.messages import
|
|
16
|
+
from clawd_code_sdk.models.messages import UserPrompt
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
async def query(
|
|
20
|
-
*prompts: str |
|
|
20
|
+
*prompts: str | UserPrompt,
|
|
21
21
|
options: ClaudeAgentOptions | None = None,
|
|
22
22
|
transport: Transport | None = None,
|
|
23
23
|
) -> AsyncIterator[Message]:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/_internal/message_parser.py
RENAMED
|
File without changes
|
|
File without changes
|
{clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/_internal/transport/__init__.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
|