Ë
    jQêjô\  ã            "       ó°  — d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZmZ d dlmZ ddlmZmZm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+m,Z, ddl-m.Z. ddl/m0Z0m1Z1 ddl2m3Z4 ddl2m5Z6 ddl2m7Z7 ddl8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZB ddlCmDZD ddlCmEZE ddlFmGZGmHZHmIZI ddlJmKZK ddlLmMZMmNZNmOZO dd lPmQZQ dd!lmRZR dd"lSmTZTmUZUmVZVmWZW dd#lXmYZYmZZZm[Z[m\Z\ erd d$l]m^Z^ d%e_fd&„Z`d'e_d(eee_e_f      d)dfd*„Za	 dYdd+dddddddd,dddd-œd'ee   d.ee_   d/e_d0ee_   d1ee_   d2ee   d3eeebef      d4ee"ee_e	f   df   d(eee_e_f      d5eeR   d6ecd7ee_   d8eee_e_f      d9ee
e_      d:e	d)ef d;„Zd<d=d>d?dddd?d@d@d,dAœdBe_dCeQdDe_dEeeb   dFecdGeec   dHeec   dIee
e_      dJecdKebdLebdMecd)ee   fdN„ZdOZddPeee_e_f   d)eee_e_f   fdQ„Zfd,dRœdSe_dTecd)efdU„Zgdd+ddddddd,dddVœd'ed.ee_   d/e_d0ee_   d1ee_   d2ee   d4eee"ee_e	f   f      d(eee_e_f      d5eeR   d6ecd8eee_e_f      d)efdW„Zhg dX¢Ziy)Zé    N)ÚThreadPoolExecutor)Ú	timedelta)ÚDictÚOptionalÚUnionÚAnyÚListÚIterableÚTYPE_CHECKINGé   )Ú__version__)Úconnect)ÚFtsToken)ÚFunctionErrorFragment)ÚFunctionErrorRecord)ÚFunctionErrors)ÚRTEWriteSpec)Útokenize)ÚURIÚsanitize_uri)Úurlparse)ÚAsyncConnectionÚDBConnectionÚLanceDBConnection)ÚClientConfig)ÚRemoteDBConnection)ÚExprÚcolÚlitÚfunc)ÚblobÚvector)Ú
BlobReader)ÚAsyncJobÚJob)Ú
AsyncQuery)ÚQuery)ÚQueryDescription)
ÚAssignmentMappingÚFunctionArtifactRequestÚFunctionApplicationÚFunctionBindingÚFunctionRegistrationRequestÚFunctionVersionÚPythonRuntimeSpecÚRefreshColumnResultÚUdfDefinitionÚudf)ÚEnvVarSecret)Ú
SecretInfo)ÚAsyncMaterializedViewÚMaterializedViewÚMaterializedViewDefinition)ÚViewDescription)Ú
AsyncTableÚCompactionOptionsÚTable)ÚBaseTokenizerType)ÚSession)Úconnect_namespaceÚconnect_namespace_asyncÚLanceNamespaceDBConnectionÚAsyncLanceNamespaceDBConnection)ÚAsyncCatalogÚCatalogÚconnect_catalogÚconnect_catalog_async©ÚBlobTypeÚnamec                 ó`   — | dk(  rddl m} |t        «       d<   |S t        dt        ›d| ›�«      ‚)NrG   r   rF   zmodule z has no attribute )ÚschemarG   ÚglobalsÚAttributeErrorÚ__name__)rH   rG   s     úU/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/lancedb/__init__.pyÚ__getattr__rO   H   s7   € ØˆzÒÝ$à (Œ‹	�*ÑØˆÜ
˜7¤8 ,Ð.@ÀÀÐIÓ
JÐJó    ÚuriÚstorage_optionsÚreturnc                 óÜ   ‡— t        | t        «      r| j                  d«      syt        | «      }|j                  }d|vryddh}‰xr t        ˆfd„|D «       «      }|st        d|› d�«      ‚y)	a  
    Check if an S3 URI has a bucket name containing dots and warn if no region
    is specified. S3 buckets with dots cannot use virtual-hosted-style URLs,
    which breaks automatic region detection.

    See: https://github.com/lancedb/lancedb/issues/1898
    zs3://Nú.ÚregionÚ
aws_regionc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w©N© )Ú.0ÚkrR   s     €rN   ú	<genexpr>z-_check_s3_bucket_with_dots.<locals>.<genexpr>f   s   øè ø€ Ò(SÀ!¨¨oÔ)=Ñ(Sùs   ƒzS3 bucket name 'a  ' contains dots, which prevents automatic region detection. Please specify the region explicitly via storage_options={'region': '<your-region>'} or storage_options={'aws_region': '<your-region>'}. See https://github.com/lancedb/lancedb/issues/1898 for details.)Ú
isinstanceÚstrÚ
startswithr   ÚnetlocÚanyÚ
ValueError)rQ   rR   ÚparsedÚbucketÚregion_keysÚ
has_regions    `    rN   Ú_check_s3_bucket_with_dotsrh   Q   sƒ   ø€ ô �cœ3Ô s§~¡~°gÔ'>Øä�c‹]€FØ�]‰]€Fà
�&ÑØð ˜\Ð*€KØ ÒS¤SÓ(SÀ{Ô(SÓ%S€JáÜØ˜v˜hð 'Nð Oó
ð 	
ð rP   ú	us-east-1F)Úapi_keyrV   Úhost_overrideÚsql_host_overrideÚread_consistency_intervalÚrequest_thread_poolÚclient_configrR   ÚsessionÚmanifest_enabledÚnamespace_client_implÚnamespace_client_propertiesÚ$namespace_client_pushdown_operationsrj   rV   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   Úkwargsc          	      óÒ  — |�.|€t        d«      ‚|rt        d|› �«      ‚t        |||||	|¬«      S |�|
st        d«      ‚|�t        d«      ‚| €t        d«      ‚t        | t        «      rÃ| j	                  d«      r²|j                  «       D ��ci c]  \  }}|dvr||“Œ }}}|rt        d|› �«      ‚|	�t        d	«      ‚|
rt        d
«      ‚|€t        j                  j                  d«      }|€t        d| › �«      ‚t        |t        «      rt        |«      }t        | |||f|||||dœ|¤ŽS t        t        | «      |«       |rt        d|› �«      ‚t        | |||	|
|¬«      S c c}}w )aU  Connect to a LanceDB database.

    Parameters
    ----------
    uri: str or Path, optional
        The uri of the database. When ``namespace_client_impl`` is provided you may
        omit ``uri`` and connect through a namespace client instead.
    api_key: str, optional
        If presented, connect to LanceDB cloud.
        Otherwise, connect to a database on file system or cloud storage.
        Can be set via environment variable `LANCEDB_API_KEY`.
        OAuth configuration is currently supported only by ``connect_async``;
        synchronous LanceDB Cloud connections require an API key.
    region: str, default "us-east-1"
        The region to use for LanceDB Cloud.
    host_override: str, optional
        The override url for LanceDB Cloud.
    sql_host_override: str, optional
        The remote SQL service endpoint override. The client connects lazily when SQL
        is first executed and retains that connection.
    read_consistency_interval: timedelta, default None
        The interval at which to check for updates to the table from other
        processes. If None, then consistency is not checked. For performance
        reasons, this is the default. For strong consistency, set this to
        zero seconds. Then every read will check for updates from other
        processes. As a compromise, you can set this to a non-zero timedelta
        for eventual consistency. If more than that interval has passed since
        the last check, then the table will be checked for updates. Note: this
        consistency only applies to read operations. Write operations are
        always consistent.

        Stronger consistency is not free. The smaller the interval, the more
        often each read pays the cost of checking for updates against object
        storage, raising per-read latency and cost.
    client_config: ClientConfig or dict, optional
        Configuration options for the LanceDB Cloud HTTP client. If a dict, then
        the keys are the attributes of the ClientConfig class. If None, then the
        default configuration is used.
    storage_options: dict, optional
        Additional options for the storage backend. See available options at
        <https://docs.lancedb.com/storage/>
    manifest_enabled : bool, default False
        When true for local/native connections, use directory namespace
        manifests as the source of truth for table metadata. Existing
        directory-listed root tables are migrated into the manifest on access.
    session: Session, optional
        (For LanceDB OSS only)
        A session to use for this connection. Sessions allow you to configure
        cache sizes for index and metadata caches, which can significantly
        impact memory use and performance. They can also be re-used across
        multiple connections to share the same cache state.
    namespace_client_impl : str, optional
        When provided along with ``namespace_client_properties``, ``connect``
        returns a namespace-backed connection by delegating to
        :func:`connect_namespace`. The value identifies which namespace
        implementation to load (e.g., ``"dir"`` or ``"rest"``).
    namespace_client_properties : dict, optional
        Configuration to pass to the namespace client implementation. Required
        when ``namespace_client_impl`` is set.
    namespace_client_pushdown_operations : list[str], optional
        Only used when ``namespace_client_properties`` is provided. Forwards to
        :func:`connect_namespace` to control which operations are executed on the
        namespace service (e.g., ``["QueryTable", "CreateTable"]``).

    Examples
    --------

    For a local directory, provide a path for the database:

    >>> import lancedb
    >>> db = lancedb.connect("~/.lancedb")

    For object storage, use a URI prefix:

    >>> db = lancedb.connect(  # doctest: +SKIP
    ...     "s3://my-bucket/lancedb",
    ...     storage_options={
    ...         "aws_access_key_id": "***",
    ...         "aws_secret_access_key": "***",
    ...         "aws_region": "us-east-1",
    ...     },
    ... )

    For Azure Blob Storage, credentials can be passed directly without setting
    environment variables:

    >>> azure_storage_options = {
    ...     "account_name": "some-account",
    ...     "account_key": "some-key",
    ... }
    >>> db = lancedb.connect(  # doctest: +SKIP
    ...     "az://my-container/my-database",
    ...     storage_options=azure_storage_options,
    ... )

    For tests and temporary data, use an in-memory database:

    >>> db = lancedb.connect("memory://")

    In-memory databases are not persisted. Tables are dropped when the last
    connection or table handle referencing them is closed.

    Connect to LanceDB cloud:

    >>> db = lancedb.connect("db://my_database", api_key="ldb_...",
    ...                      client_config={"retry_config": {"retries": 5}})

    Connect to a namespace-backed database:

    >>> db = lancedb.connect(namespace_client_impl="dir",
    ...                      namespace_client_properties={"root": "/tmp/ns"})

    Returns
    -------
    conn : DBConnection
        A connection to a LanceDB database.
    zNnamespace_client_properties must be provided when namespace_client_impl is setzUnknown keyword arguments: )rm   rR   rp   rt   zjnamespace_client_impl must be provided when using namespace_client_properties unless manifest_enabled=TruezVnamespace_client_pushdown_operations is only valid when connecting through a namespacez>uri is required when not connecting through a namespace clientzdb://)Úconnection_timeoutÚread_timeoutz/session is not supported for remote connectionsz8manifest_enabled is not supported for remote connectionsÚLANCEDB_API_KEYz1api_key is required to connect to LanceDB cloud: )rl   rn   ro   rR   rm   )rm   rR   rp   rq   rs   )rc   r>   r^   r_   r`   ÚitemsÚNotImplementedErrorÚosÚenvironÚgetÚintr   r   rh   r   )rQ   rj   rV   rk   rl   rm   rn   ro   rR   rp   rq   rr   rs   rt   ru   ÚkeyÚvalueÚunknown_kwargss                     rN   r   r   r   s  € ðN Ð(Ø&Ð.Üð/óð ñ ÜÐ:¸6¸(ÐCÓDÐDÜ Ø!Ø'Ø&?Ø+ØØ1Uô
ð 	
ð #Ð.Ñ7GÜðGó
ð 	
ð
 ,Ð7Üð-ó
ð 	
ð €{ÜØLó
ð 	
ô �#”sÔ §¡¨wÔ 7ð
 %Ÿl™l›n÷
á��UØÐ@Ñ@ð �‰Jð
ˆñ 
ñ
 ÜÐ:¸>Ð:JÐKÓLÐLØÐÜ%Ð&WÓXÐXÙÜ%ØJóð ð ˆ?Ü—j‘j—n‘nÐ%6Ó7ˆGØˆ?ÜÐPÐQTÐPUÐVÓWÐWÜÐ)¬3Ô/Ü"4Ð5HÓ"IÐÜ!ØØØØð	
ð
 0à 3Ø'Ø+Ø&?ñ
ð ñ
ð 	
ô œs 3›x¨Ô9áÜÐ6°v°hÐ?Ó@Ð@äØØ";Ø'ØØ)Ø$?ôð ùóK
s   ÂE#ÚsimpleÚEnglishé(   Té   ©Úbase_tokenizerÚlanguageÚmax_token_lengthÚ
lower_caseÚstemÚremove_stop_wordsÚcustom_stop_wordsÚascii_foldingÚngram_min_lengthÚngram_max_lengthÚprefix_onlyÚqueryrˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r�   r‘   r’   c                ó0   — t        | |||||||||	|
|¬«      S )ai  Tokenize a full-text search query using an explicit tokenizer.

    This does not require an FTS index. The tokenizer options match
    :class:`lancedb.index.FTS`. ``custom_stop_words`` accepts a list of strings.
    When ``stem`` or ``remove_stop_words`` is None, the base tokenizer's default
    applies: False for ``code`` and ``ngram``, True otherwise.
    r‡   )Ú	_tokenize)r“   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r�   r‘   r’   s               rN   r   r   K  s5   € ô. ØØ%ØØ)ØØØ+Ø+Ø#Ø)Ø)Øôð rP   Ú_lancedb_worker_Úpropsc                 óÖ   — | D �cg c]  }|j                  t        «      sŒ|‘Œ }}|s| S t        | «      }|D ]*  }|j                  |«      }|t	        t        «      d }|||<   Œ, |S c c}w )a  Apply worker property overrides.

    Any key starting with ``_lancedb_worker_`` is extracted, the prefix
    is stripped, and the resulting key-value pair is put back into the
    map (overriding the existing value if present).  The original
    prefixed key is removed.
    N)r`   ÚWORKER_PROPERTY_PREFIXÚdictÚpopÚlen)r—   r\   Úworker_keysÚresultr€   r�   Úreal_keys          rN   Ú_apply_worker_overridesr    u  sz   € ð $ÖL˜ q§|¡|Ô4JÕ'K’1ÐL€KÐLÙØˆÜ�%‹[€FØò !ˆØ—
‘
˜3“ˆØ”sÔ1Ó2Ð4Ð5ˆØ ˆˆxÒð!ð €Mùò Ms
   …A& A&)Ú
for_workerÚdatar¡   c          
      ó”  — ddl }|j                  | «      }|j                  d«      }|j                  d«      }|�t        |¬«      nd}|j                  d«      }|dk(  rMt	        |j                  d«      xs i «      }|rt        |«      }t        |d	   ||||j                  d
«      ¬«      S |dk(  r2t        |d   |||j                  dd«      |j                  d«      ¬«      S |dk(  rUt        |d   |d   |j                  dd«      |j                  d«      |j                  d«      |j                  d«      |¬«      S t        d|› �«      ‚)af  Reconstruct a DBConnection from a serialized string.

    The string must have been produced by
    :meth:`DBConnection.serialize`.

    Parameters
    ----------
    data : str
        String produced by ``serialize()``.
    for_worker : bool, default False
        When ``True``, any namespace client property whose key starts
        with ``_lancedb_worker_`` has that prefix stripped and the
        value overrides the corresponding property.  For example,
        ``_lancedb_worker_uri`` replaces ``uri``.

    Returns
    -------
    DBConnection
        A new connection matching the serialized state.
    r   NÚconnection_typeÚ!read_consistency_interval_seconds)ÚsecondsrR   Ú	namespacers   rr   rt   )rr   rs   rm   rR   rt   ÚlocalrQ   rq   F)rm   rR   rq   rs   ÚremoteÚdb_urlrj   rV   ri   rk   rl   ro   )rk   rl   ro   rR   zUnknown connection_type: )
ÚjsonÚloadsr~   r   rš   r    r>   r   r   rc   )	r¢   r¡   r«   rd   r¤   Úrci_secsÚrcirR   r—   s	            rN   Údeserialize_connr¯   ˆ  sb  € ó2 à�Z‰Z˜Ó€FØ—j‘jÐ!2Ó3€Oà�z‰zÐ=Ó>€HØ)1Ð)=Œ)˜HÕ
%À4€CØ—j‘jÐ!2Ó3€Oà˜+Ò%Ü�V—Z‘ZÐ =Ó>ÒDÀ"ÓEˆÙÜ+¨EÓ2ˆEÜ Ø"(Ð)@Ñ"AØ(-Ø&)Ø+Ø17·±Ø6ó2ô
ð 	
ð 
˜GÒ	#Ü Ø�5‰MØ&)Ø+Ø#ŸZ™ZÐ(:¸EÓBØ(.¯
©
Ð3PÓ(Qô
ð 	
ð 
˜HÒ	$Ü!Ø�8ÑØ�9ÑØ�J‰J�x Ó-Ø Ÿ*™* _Ó5Ø$Ÿj™jÐ)<Ó=Ø Ÿ*™* _Ó5Ø+ô
ð 	
ô Ð4°_Ð4EÐFÓGÐGrP   )rj   rV   rk   rl   rm   ro   rR   rp   rq   rs   Úoauth_configc             ƒ   óø   K  — |�|j                  «       }nd}t        |t        «      rt        di |¤Ž}t	        t        | «      |«       t        t        t        | «      |||||||||	|
|«      ƒ d{  –—† «      S 7 Œ­w)aÀ  Connect to a LanceDB database.

    Parameters
    ----------
    uri: str or Path
        The uri of the database.
    api_key: str, optional
        If present, connect to LanceDB cloud.
        Otherwise, connect to a database on file system or cloud storage.
        Can be set via environment variable `LANCEDB_API_KEY`.
    region: str, default "us-east-1"
        The region to use for LanceDB Cloud.
    host_override: str, optional
        The override url for LanceDB Cloud.
    sql_host_override: str, optional
        The remote SQL service endpoint override. The client connects lazily when SQL
        is first executed and retains that connection.
    read_consistency_interval: timedelta, default None
        The interval at which to check for updates to the table from other
        processes. If None, then consistency is not checked. For performance
        reasons, this is the default. For strong consistency, set this to
        zero seconds. Then every read will check for updates from other
        processes. As a compromise, you can set this to a non-zero timedelta
        for eventual consistency. If more than that interval has passed since
        the last check, then the table will be checked for updates. Note: this
        consistency only applies to read operations. Write operations are
        always consistent.

        Stronger consistency is not free. The smaller the interval, the more
        often each read pays the cost of checking for updates against object
        storage, raising per-read latency and cost.
    client_config: ClientConfig or dict, optional
        Configuration options for the LanceDB Cloud HTTP client. If a dict, then
        the keys are the attributes of the ClientConfig class. If None, then the
        default configuration is used.
    storage_options: dict, optional
        Additional options for the storage backend. See available options at
        <https://docs.lancedb.com/storage/>
    session: Session, optional
        (For LanceDB OSS only)
        A session to use for this connection. Sessions allow you to configure
        cache sizes for index and metadata caches, which can significantly
        impact memory use and performance. They can also be re-used across
        multiple connections to share the same cache state.
    manifest_enabled : bool, default False
        When true for local/native connections, use directory namespace
        manifests as the source of truth for table metadata. Existing
        directory-listed root tables are migrated into the manifest on access.
    namespace_client_properties : dict, optional
        Additional directory namespace client properties to use with
        ``manifest_enabled=True``.
    oauth_config : OAuthConfig, optional
        OAuth configuration for LanceDB Cloud/Enterprise. This is supported by
        ``connect_async`` only; synchronous ``connect`` uses API key
        authentication for ``db://`` URIs.

    Examples
    --------

    >>> import lancedb
    >>> azure_storage_options = {
    ...     "account_name": "some-account",
    ...     "account_key": "some-key",
    ... }
    >>> async def doctest_example():
    ...     # For a local directory, provide a path to the database
    ...     db = await lancedb.connect_async("~/.lancedb")
    ...     # For object storage, use a URI prefix
    ...     db = await lancedb.connect_async("s3://my-bucket/lancedb",
    ...                                      storage_options={
    ...                                          "aws_access_key_id": "***"})
    ...     # Azure credentials can also be passed directly
    ...     db = await lancedb.connect_async(
    ...         "az://my-container/my-database",
    ...         storage_options=azure_storage_options,
    ...     )
    ...     # For tests and temporary data, use an in-memory database
    ...     db = await lancedb.connect_async("memory://")
    ...     # Connect to LanceDB cloud
    ...     db = await lancedb.connect_async("db://my_database", api_key="ldb_...",
    ...                                      client_config={
    ...                                          "retry_config": {"retries": 5}})

    Returns
    -------
    conn : AsyncConnection
        A connection to a LanceDB database.
    NrZ   )	Útotal_secondsr^   rš   r   rh   r_   r   Úlancedb_connectr   )rQ   rj   rV   rk   rl   rm   ro   rR   rp   rq   rs   r°   Úread_consistency_interval_secss                rN   Úconnect_asyncrµ   Í  s‘   è ø€ ðN !Ð,Ø)B×)PÑ)PÓ)RÑ&à)-Ð&ä�-¤Ô&Ü$Ñ5 }Ñ5ˆäœs 3›x¨Ô9äÜÜ˜ÓØØØØØ*ØØØØØ'Øó
÷ 	
óð ð	
ús   ‚A-A:Á/A8Á0	A:)(rC   rB   rD   rE   r5   r6   r7   r8   r   rµ   r   r>   r?   r   r$   ÚAsyncSqlQueryrA   r9   r:   r   r   r   r    r   r   r   r!   rG   r"   r   r%   r(   ÚSqlQueryr   r@   r   r   r=   r;   r   rY   )jr|   Úconcurrent.futuresr   Údatetimer   Útypingr   r   r   r   r	   r
   r   Ú_lancedbr   r   r³   r   r   r   r   r   r   r•   Úcommonr   r   Úurllib.parser   Údbr   r   r   r©   r   Ú	remote.dbr   Úexprr   r   r   r    rJ   r!   r"   Ú_blob_readerr#   Újobr$   r%   Úsqlr&   r¶   r'   r·   r(   Ú	functionsr)   r*   r+   r,   r-   r.   r/   r0   r1   r2   Úsecretsr3   r4   Úmaterialized_viewr5   r6   r7   Úviewr8   Útabler9   r:   r;   Útypesr<   r=   r§   r>   r?   r@   rA   ÚcatalogrB   rC   rD   rE   Ú
lance.blobrG   r_   rO   rh   r   Úboolr™   rš   r    r¯   rµ   Ú__all__rZ   rP   rN   ú<module>rÎ      sG  ðó
 
Ý 1Ý ß L× LÑ Lå 0Ý 0Ý Ý DÝ @Ý 6Ý "Ý +ß %Ý !ß @Ñ @Ý  Ý )ß &Ó &ß  Ý 2ß Ý ,Ý "Ý !÷÷ ÷ õ 2Ý -÷ñ õ
 5ß 7Ñ 7Ý $Ý ÷ó ÷ó ñ Ý/ðK�có Kð
Ø	ð
Ø'¨¨S°#¨X©Ñ7ð
à	ó
ðD ðVð "ØØ#'Ø'+Ø59ØDHØ?CØ04Ø!%Ø"Ø+/Ø<@Ø@DòVØ	�#‰ðVð �c‰]ðVð ð	Vð
 ˜C‘=ðVð   ‘}ðVð  (¨	Ñ2ðVð " %¨Ð-?Ð(?Ñ"@ÑAðVð ˜ t¨C°¨H¡~°tÐ;Ñ<ðVð ˜d 3¨ 8™nÑ-ðVð �gÑðVð ðVð $ C™=ðVð "*¨$¨s°C¨x©.Ñ!9ðVð +3°4¸±9Ñ*=ðVð  ð!Vð" ó#Vðx )1ØØ&(ØØØ(,Ø-1ØØØØò$Øð$ð &ð$ð ð	$ð
 ˜s‘mð$ð ð$ð �4‰.ð$ð   ‘~ð$ð    S¡	Ñ*ð$ð ð$ð ð$ð ð$ð ð$ð ˆhÑó$ðN ,Ð ð 4¨¨S¨¡>ð °d¸3À¸8±nó ð, òBHØ
ðBHð ðBHð ó	BHðP "ØØ#'Ø'+Ø59ØCGØ04Ø!%Ø"Ø<@Øò@Ø	ð@ð �c‰]ð@ð ð	@ð
 ˜C‘=ð@ð   ‘}ð@ð  (¨	Ñ2ð@ð ˜E ,°°S¸#°X±Ð">Ñ?Ñ@ð@ð ˜d 3¨ 8™nÑ-ð@ð �gÑð@ð ð@ð "*¨$¨s°C¨x©.Ñ!9ð@ð ó@òF)�rP   