sunholo 0.71.5__tar.gz → 0.71.8__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.
- {sunholo-0.71.5 → sunholo-0.71.8}/PKG-INFO +2 -2
- {sunholo-0.71.5 → sunholo-0.71.8}/setup.py +1 -1
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/discovery_engine/discovery_engine_client.py +55 -1
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/vertex/__init__.py +1 -1
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/vertex/memory_tools.py +11 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo.egg-info/PKG-INFO +2 -2
- {sunholo-0.71.5 → sunholo-0.71.8}/LICENSE.txt +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/MANIFEST.in +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/README.md +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/setup.cfg +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/agents/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/agents/chat_history.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/agents/dispatch_to_qa.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/agents/fastapi/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/agents/fastapi/base.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/agents/fastapi/qna_routes.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/agents/flask/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/agents/flask/base.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/agents/flask/qna_routes.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/agents/flask/vac_routes.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/agents/langserve.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/agents/pubsub.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/agents/route.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/agents/special_commands.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/agents/swagger.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/archive/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/archive/archive.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/auth/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/auth/run.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/bots/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/bots/discord.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/bots/github_webhook.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/bots/webapp.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/chunker/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/chunker/data_to_embed_pubsub.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/chunker/doc_handling.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/chunker/images.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/chunker/loaders.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/chunker/message_data.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/chunker/pdfs.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/chunker/publish.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/chunker/splitter.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/cli/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/cli/chat_vac.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/cli/cli.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/cli/cli_init.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/cli/configs.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/cli/deploy.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/cli/embedder.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/cli/merge_texts.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/cli/run_proxy.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/cli/sun_rich.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/cli/swagger.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/components/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/components/llm.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/components/retriever.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/components/vectorstore.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/database/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/database/alloydb.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/database/alloydb_client.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/database/database.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/database/lancedb.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/database/sql/sb/create_function.sql +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/database/sql/sb/create_function_time.sql +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/database/sql/sb/create_table.sql +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/database/sql/sb/delete_source_row.sql +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/database/sql/sb/return_sources.sql +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/database/sql/sb/setup.sql +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/database/static_dbs.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/database/uuid.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/discovery_engine/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/discovery_engine/chunker_handler.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/discovery_engine/create_new.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/embedder/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/embedder/embed_chunk.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/gcs/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/gcs/add_file.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/gcs/download_url.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/gcs/metadata.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/langfuse/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/langfuse/callback.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/langfuse/prompts.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/llamaindex/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/llamaindex/generate.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/llamaindex/get_files.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/llamaindex/import_files.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/logging.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/lookup/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/lookup/model_lookup.yaml +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/patches/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/patches/langchain/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/patches/langchain/lancedb.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/patches/langchain/vertexai.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/pubsub/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/pubsub/process_pubsub.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/pubsub/pubsub_manager.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/qna/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/qna/parsers.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/qna/retry.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/streaming/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/streaming/content_buffer.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/streaming/langserve.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/streaming/stream_lookup.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/streaming/streaming.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/summarise/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/summarise/summarise.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/utils/__init__.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/utils/api_key.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/utils/big_context.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/utils/config.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/utils/config_schema.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/utils/gcp.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/utils/gcp_project.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/utils/parsers.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/utils/timedelta.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/utils/user_ids.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/utils/version.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/vertex/extensions.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/vertex/extensions_class.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/vertex/init.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo/vertex/safety.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo.egg-info/SOURCES.txt +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo.egg-info/dependency_links.txt +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo.egg-info/entry_points.txt +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo.egg-info/requires.txt +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/sunholo.egg-info/top_level.txt +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/tests/test_chat_history.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/tests/test_chunker.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/tests/test_config.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/tests/test_dispatch_to_qa.py +0 -0
- {sunholo-0.71.5 → sunholo-0.71.8}/tests/test_swagger.py +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sunholo
|
|
3
|
-
Version: 0.71.
|
|
3
|
+
Version: 0.71.8
|
|
4
4
|
Summary: Large Language Model DevOps - a package to help deploy LLMs to the Cloud.
|
|
5
5
|
Home-page: https://github.com/sunholo-data/sunholo-py
|
|
6
|
-
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.71.
|
|
6
|
+
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.71.8.tar.gz
|
|
7
7
|
Author: Holosun ApS
|
|
8
8
|
Author-email: multivac@sunholo.com
|
|
9
9
|
License: Apache License, Version 2.0
|
|
@@ -11,7 +11,7 @@ except ImportError:
|
|
|
11
11
|
SearchResponse = None
|
|
12
12
|
|
|
13
13
|
from ..logging import log
|
|
14
|
-
from typing import Optional
|
|
14
|
+
from typing import Optional, List
|
|
15
15
|
|
|
16
16
|
class DiscoveryEngineClient:
|
|
17
17
|
"""
|
|
@@ -69,6 +69,7 @@ class DiscoveryEngineClient:
|
|
|
69
69
|
self.store_client = discoveryengine.DataStoreServiceClient(client_options=client_options)
|
|
70
70
|
self.doc_client = discoveryengine.DocumentServiceClient(client_options=client_options)
|
|
71
71
|
self.search_client = discoveryengine.SearchServiceClient(client_options=client_options)
|
|
72
|
+
self.engine_client = discoveryengine.EngineServiceClient(client_options=client_options)
|
|
72
73
|
|
|
73
74
|
@classmethod
|
|
74
75
|
def my_retry(cls):
|
|
@@ -261,6 +262,59 @@ class DiscoveryEngineClient:
|
|
|
261
262
|
result_string = "\n".join(all_chunks)
|
|
262
263
|
|
|
263
264
|
return result_string
|
|
265
|
+
|
|
266
|
+
def create_engine(self,
|
|
267
|
+
engine_id: str,
|
|
268
|
+
data_store_ids: List[str],
|
|
269
|
+
solution_type=None,
|
|
270
|
+
search_tier=None,
|
|
271
|
+
search_add_ons=None,
|
|
272
|
+
) -> str:
|
|
273
|
+
|
|
274
|
+
# The full resource name of the collection
|
|
275
|
+
# e.g. projects/{project}/locations/{location}/collections/default_collection
|
|
276
|
+
parent = self.data_store_path()
|
|
277
|
+
|
|
278
|
+
engine = discoveryengine.Engine(
|
|
279
|
+
display_name=engine_id,
|
|
280
|
+
# Options: GENERIC, MEDIA, HEALTHCARE_FHIR
|
|
281
|
+
industry_vertical=discoveryengine.IndustryVertical.GENERIC,
|
|
282
|
+
# Options: SOLUTION_TYPE_RECOMMENDATION, SOLUTION_TYPE_SEARCH, SOLUTION_TYPE_CHAT, SOLUTION_TYPE_GENERATIVE_CHAT
|
|
283
|
+
solution_type=solution_type or discoveryengine.SolutionType.SOLUTION_TYPE_SEARCH,
|
|
284
|
+
# For search apps only
|
|
285
|
+
search_engine_config=discoveryengine.Engine.SearchEngineConfig(
|
|
286
|
+
# Options: SEARCH_TIER_STANDARD, SEARCH_TIER_ENTERPRISE
|
|
287
|
+
search_tier=search_tier or discoveryengine.SearchTier.SEARCH_TIER_ENTERPRISE,
|
|
288
|
+
# Options: SEARCH_ADD_ON_LLM, SEARCH_ADD_ON_UNSPECIFIED
|
|
289
|
+
search_add_ons=search_add_ons or [discoveryengine.SearchAddOn.SEARCH_ADD_ON_UNSPECIFIED],
|
|
290
|
+
),
|
|
291
|
+
# For generic recommendation apps only
|
|
292
|
+
# similar_documents_config=discoveryengine.Engine.SimilarDocumentsEngineConfig,
|
|
293
|
+
data_store_ids=data_store_ids,
|
|
294
|
+
)
|
|
295
|
+
|
|
296
|
+
request = discoveryengine.CreateEngineRequest(
|
|
297
|
+
parent=parent,
|
|
298
|
+
engine=engine,
|
|
299
|
+
engine_id=engine_id,
|
|
300
|
+
)
|
|
301
|
+
|
|
302
|
+
# Make the request
|
|
303
|
+
operation = self.engine_client.create_engine(request=request)
|
|
304
|
+
|
|
305
|
+
log.info(f"Waiting for create vertex ai search operation to complete: {operation.operation.name}")
|
|
306
|
+
response = operation.result()
|
|
307
|
+
|
|
308
|
+
# Once the operation is complete,
|
|
309
|
+
# get information from operation metadata
|
|
310
|
+
metadata = discoveryengine.CreateEngineMetadata(operation.metadata)
|
|
311
|
+
|
|
312
|
+
# Handle the response
|
|
313
|
+
log.info(f"{response=} {metadata=}")
|
|
314
|
+
|
|
315
|
+
return operation.operation.name
|
|
316
|
+
|
|
317
|
+
|
|
264
318
|
|
|
265
319
|
def import_documents(self,
|
|
266
320
|
gcs_uri: Optional[str] = None,
|
|
@@ -106,6 +106,17 @@ def get_vertex_memories(vector_name):
|
|
|
106
106
|
|
|
107
107
|
return tools
|
|
108
108
|
|
|
109
|
+
def get_google_search_grounding(vector_name):
|
|
110
|
+
# can't have this and llamaindex memories?
|
|
111
|
+
ground = load_config_key("grounding", vector_name=vector_name, kind="vacConfig")
|
|
112
|
+
if ground and ground.get("google_search"):
|
|
113
|
+
gs_tool = Tool.from_google_search_retrieval(grounding.GoogleSearchRetrieval())
|
|
114
|
+
log.info(f"Got Search Tool: {gs_tool}")
|
|
115
|
+
return gs_tool
|
|
116
|
+
|
|
117
|
+
log.info(f"No google search config available for {vector_name}")
|
|
118
|
+
return None
|
|
119
|
+
|
|
109
120
|
def print_grounding_response(response):
|
|
110
121
|
"""Prints Gemini response with grounding citations."""
|
|
111
122
|
grounding_metadata = response.candidates[0].grounding_metadata
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sunholo
|
|
3
|
-
Version: 0.71.
|
|
3
|
+
Version: 0.71.8
|
|
4
4
|
Summary: Large Language Model DevOps - a package to help deploy LLMs to the Cloud.
|
|
5
5
|
Home-page: https://github.com/sunholo-data/sunholo-py
|
|
6
|
-
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.71.
|
|
6
|
+
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.71.8.tar.gz
|
|
7
7
|
Author: Holosun ApS
|
|
8
8
|
Author-email: multivac@sunholo.com
|
|
9
9
|
License: Apache License, Version 2.0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|