§
    ~ŠtjõŒ  ã                  ó  — d dl mZ d dlmZ d dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlmZ d dlmZmZ d dl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mZ d d	l m!Z!m"Z"m#Z#m$Z$ d d
l%m&Z&m'Z'm(Z( erd dl)m*Z* d dl+m,Z,  ej-        d¦  «        Z. ej/         e¦   «         ¬¦  «        Z0dAd„Z1ej2         G d„ d¦  «        ¦   «         Z3	 dBdCd„Z4	 dDdEd'„Z5dFd+„Z6	 	 dGdHd0„Z7	 	 dGdId1„Z8	 dJdKd2„Z9dLd4„Z:dMd8„Z;dNd;„Z<	 dOdPd?„Z=dQd@„Z>dS )Ré    )ÚannotationsN)Ú	cpu_count)ÚEmptyÚQueue)ÚTYPE_CHECKINGÚAnyÚOptionalÚUnionÚcast)Úschemas)Úutils)ÚZSTD_AVAILABLEÚCompressedTraces)Ú_AUTO_SCALE_DOWN_NEMPTY_TRIGGERÚ_AUTO_SCALE_UP_NTHREADS_LIMITÚ_AUTO_SCALE_UP_QSIZE_TRIGGERÚ	_BOUNDARY)ÚSerializedFeedbackOperationÚSerializedRunOperationÚ#combine_serialized_queue_operations)ÚContext)ÚClientzlangsmith.client©Úmax_workersÚbatchúlist[TracingQueueItem]Úreturnú}dict[tuple[Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str]], list[TracingQueueItem]]c                ó¾   — ddl m}  |t          ¦  «        }| D ]C}|j        |j        |j        |j        |j        |j        f}||          	                    |¦  «         ŒD|S )z3Group batch items by endpoint and auth combination.r   )Údefaultdict)
Úcollectionsr    ÚlistÚapi_urlÚapi_keyÚservice_keyÚ	tenant_idÚauthorizationÚcookieÚappend)r   r    ÚgroupedÚitemÚkeys        úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langsmith/_internal/_background_thread.pyÚ_group_batch_by_api_endpointr.   )   s}   € ð (Ð'Ð'Ð'Ð'Ð'àˆk�$ÑÔ€GØð 	"ð 	"ˆàŒLØŒLØÔØŒNØÔØŒKð
ˆð 	�Œ×Ò˜DÑ!Ô!Ð!Ð!Ø€Nó    c                  óš   — e Zd ZU dZded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   dZ	 	 	 	 	 	 	 ddd„Zdd„Zdd„ZdS )ÚTracingQueueItemzÒAn item in the tracing queue.

    Attributes:
        priority (str): The priority of the item.
        item (Any): The item itself.
        otel_context (Optional[Context]): The OTEL context of the item.
    ÚstrÚpriorityú:Union[SerializedRunOperation, SerializedFeedbackOperation]r+   úOptional[str]r#   r$   r%   r&   r'   r(   úOptional[Context]Úotel_context©	r3   r+   r$   r#   r%   r&   r'   r(   r7   Nr   ÚNonec
                ó„   — || _         || _        || _        || _        || _        || _        || _        || _        |	| _        d S ©Nr8   )
Úselfr3   r+   r$   r#   r%   r&   r'   r(   r7   s
             r-   Ú__init__zTracingQueueItem.__init__g   sL   € ð !ˆŒØˆŒ	ØˆŒØˆŒØ&ˆÔØ"ˆŒØ*ˆÔØˆŒØ(ˆÔÐÐr/   ÚotherÚboolc                óR   — | j         | j        j        f|j         |j        j        fk     S r;   )r3   r+   Ú	__class__©r<   r>   s     r-   Ú__lt__zTracingQueueItem.__lt__}   s-   € Ø”˜tœyÔ2Ð3ØŒNØŒJÔ ð7
ò 
ð 	
r/   Úobjectc                ó|   — t          |t          ¦  «        o'| j        | j        j        f|j        |j        j        fk    S r;   )Ú
isinstancer1   r3   r+   rA   rB   s     r-   Ú__eq__zTracingQueueItem.__eq__ƒ   sB   € Ý˜%Õ!1Ñ2Ô2ð 4ØŒMØŒIÔð8
ð Œn˜eœjÔ2Ð3ò84ð 	4r/   )NNNNNNN)r3   r2   r+   r4   r$   r5   r#   r5   r%   r5   r&   r5   r'   r5   r(   r5   r7   r6   r   r9   )r>   r1   r   r?   )r>   rD   r   r?   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__Ú	__slots__r=   rC   rG   © r/   r-   r1   r1   G   sê   € € € € € € ðð ð €M€M�MØDÐDÐDÑDØÐÐÑØÐÐÑØÐÐÑØÐÐÑØ Ð Ð Ñ ØÐÐÑØ#Ð#Ð#Ñ#ð
€Ið  "&Ø!%Ø%)Ø#'Ø'+Ø $Ø*.ð)ð )ð )ð )ð )ð,
ð 
ð 
ð 
ð4ð 4ð 4ð 4ð 4ð 4r/   r1   éd   TÚtracing_queuer   ÚlimitÚintÚblockr?   Úmax_size_bytesc                óà  — g }d}	 |                       |d¬¦  «        x}r?|                     |¦  «         |dk    r$||j                             ¦   «         z  }||k    r|S 	 	 |                       |d¬¦  «        }n# t          $ r Y nYw xY w|                     |¦  «         |dk    r#||j                             ¦   «         z  }||k    rn|rt          |¦  «        |k    rnŒ~n# t          $ r Y nw xY w|S )Nr   g      Ð?)rS   ÚtimeoutTçš™™™™™©?)Úgetr)   r+   Úcalculate_serialized_sizer   Úlen)rP   rQ   rS   rT   Ú
next_batchÚcurrent_sizer+   s          r-   Ú_tracing_thread_drain_queuer]   Š   sW  € ð *,€JØ€Lð$ð !×$Ò$¨5¸$Ð$Ñ?Ô?Ð?ˆ4ð 	&Ø×Ò˜dÑ#Ô#Ð#Ø Ò!Ð!Ø ¤	× CÒ CÑ EÔ EÑE�à .Ò0Ð0Ø%Ð%ð	ðØ$×(Ò(¨u¸dÐ(ÑCÔC��øÝð ð ð Ø�ðøøøð ×Ò˜dÑ#Ô#Ð#ð  Ò!Ð!Ø ¤	× CÒ CÑ EÔ EÑE�ð   .Ò0Ð0Øð ð �˜Z™œ¨EÒ1Ð1Øð'	øøõ( ð ð ð ØˆðøøøàÐs=   †AC ÁC Á A8 Á7C Á8
BÂC ÂBÂAC Ã
C+Ã*C+é  @Úclientr   Ú
size_limitÚsize_limit_bytesú
int | Noneú6tuple[Optional[io.BytesIO], Optional[tuple[int, int]]]c                óf  — 	 | j         €dS | j         j        5  | j         j        }| j        p|}|�|dk    rt	          d|› �¦  «        ‚|�|dk     rt	          d|› �¦  «        ‚|�||k     r |�| j         j        |k     r	 d d d ¦  «         dS | j         j                             dt          › d� 	                    ¦   «         ¦  «         | j         j         
                    ¦   «          | j         j                             ¦   «         }| j         j        }t          t          t          |¦  «        d| j         j        ¦  «         ||f}| j                              ¦   «          d d d ¦  «         n# 1 swxY w Y   |                     d¦  «         ||fS # t&          $ r  t(                               dd	¬
¦  «         Y dS w xY w)N)NNr   z!size_limit must be positive; got z*size_limit_bytes must be nonnegative; got z--z--
ÚcontextúuLangSmith tracing error: Failed to submit trace data.
This does not affect your application's runtime.
Error details:T©Úexc_info)Úcompressed_tracesÚlockÚuncompressed_sizeÚ_max_batch_size_bytesÚ
ValueErrorÚtrace_countÚcompressor_writerÚwriter   ÚencodeÚcloseÚbufferÚtellÚsetattrr   r   Ú_contextÚresetÚseekÚ	ExceptionÚloggerÚerror)r_   r`   ra   Úpre_compressed_sizer\   Úfilled_bufferÚcompressed_traces_infos          r-   Ú'_tracing_thread_drain_compressed_bufferr   ¸   sj  € ð3ØÔ#Ð+Ø�:ØÔ%Ô*ð #	-ð #	-Ø"(Ô":Ô"LÐà%Ô;ÐOÐ?OÐàÐ%¨*¸ª/¨/Ý Ð!QÀZÐ!QÐ!QÑRÔRÐRØÐ+Ð0@À1Ò0DÐ0DÝ ØSÐAQÐSÐSñô ð ð
 !Ð(Ð,?ÐBRÒ,RÐ,RàÐ" fÔ&>Ô&JÈZÒ&WÐ&Wà!ð##	-ð #	-ð #	-ñ #	-ô #	-ð #	-ð #	-ð #	-ð( Ô$Ô6×<Ò<Ø&•YÐ&Ð&Ð&×-Ò-Ñ/Ô/ñô ð ð Ô$Ô6×<Ò<Ñ>Ô>Ð>Ø!Ô3Ô:×?Ò?ÑAÔAˆLà"Ô4Ô;ˆMÝÝ•S˜-Ñ(Ô(ØØÔ(Ô1ñô ð ð ':¸<Ð%HÐ"àÔ$×*Ò*Ñ,Ô,Ð,ðG#	-ð #	-ð #	-ñ #	-ô #	-ð #	-ð #	-ð #	-ð #	-ð #	-ð #	-øøøð #	-ð #	-ð #	-ð #	-ðJ 	×Ò˜1ÑÔÐØÐ5Ð6Ð6øÝð 	ð 	ð 	Ý�Šðð ð	 	ñ 	
ô 	
ð 	
ð ˆzˆzð	øøøsG   ‚F ‹F —A%E"Á<F Â	CE"ÅF Å"E&Å&F Å)E&Å*F Æ&F0Æ/F0Úbatch_to_processú0list[tuple[str, dict, dict[str, Optional[str]]]]r9   c                ó¸  — 	 d„ |D ¦   «         }d„ |D ¦   «         }| j         €t          d¦  «        ‚t          |                       |¦  «        ¦  «        }t          |¦  «        t          |¦  «        k    r/t	          dt          |¦  «        › dt          |¦  «        › �¦  «        ‚d„ |D ¦   «         }||k    rt	          d|› d|› �¦  «        ‚t          ||¦  «        D ]2\  \  }}}}	|d	k    r | j        |	fi |¤Ž Œ|d
k    r | j        |	fi |¤Ž Œ3| j        r| j         	                    ¦   «          dS dS # t          $ r  t                               dd¬¦  «         Y dS w xY w)z1Process a batch of run operations asynchronously.c                ó   — g | ]\  }}}|‘Œ	S rN   rN   )Ú.0Ú_Úrun_datas      r-   ú
<listcomp>z3_process_buffered_run_ops_batch.<locals>.<listcomp>ø   s   € ÐEÐEÐE¡. ! X¨q�XÐEÐEÐEr/   c                ó8   — g | ]}|                      d ¦  «        ‘ŒS ©Úid©rX   ©r„   Úruns     r-   r‡   z3_process_buffered_run_ops_batch.<locals>.<listcomp>ù   s"   € Ð;Ð;Ð;¨#˜Ÿš ™œÐ;Ð;Ð;r/   NzAprocess_buffered_run_ops should not be None when processing batchzGprocess_buffered_run_ops must return the same number of runs. Expected z, got c                ó8   — g | ]}|                      d ¦  «        ‘ŒS r‰   r‹   rŒ   s     r-   r‡   z3_process_buffered_run_ops_batch.<locals>.<listcomp>	  s"   € ÐAÐAÐA¨3˜Ÿš ™œÐAÐAÐAr/   zKprocess_buffered_run_ops must preserve run IDs in the same order. Expected ÚpostÚpatchz…LangSmith buffered run ops processing error: Failed to process batch.
This does not affect your application's runtime.
Error details:Trg   )Ú_process_buffered_run_opsÚRuntimeErrorr"   rZ   rm   ÚzipÚ_create_runÚ_update_runÚ_data_available_eventÚsetry   rz   r{   )
r_   r€   Ú	run_dictsÚoriginal_idsÚprocessed_runsÚprocessed_idsÚ	operationr…   Ú	write_ctxÚprocessed_runs
             r-   Ú_process_buffered_run_ops_batchrŸ   ñ   s   € ð
-
àEÐEÐ4DÐEÑEÔEˆ	Ø;Ð;°Ð;Ñ;Ô;ˆð Ô+Ð3ÝØSñô ð õ ˜f×>Ò>¸yÑIÔIÑJÔJˆõ ˆ~ÑÔ¥# i¡.¤.Ò0Ð0ÝðHÝ 	™NœNðHð HÝ25°nÑ2EÔ2EðHð Hñô ð ð
 BÐA°.ÐAÑAÔAˆØ˜LÒ(Ð(Ýð@Ø(ð@ð @Ø0=ð@ð @ñô ð õ 9<Ø˜nñ9
ô 9
ð 	?ð 	?Ñ4Ñ%ˆY˜˜9 }ð ˜FÒ"Ð"Ø"�Ô" =Ð>Ð>°IÐ>Ð>Ð>Ð>Ø˜gÒ%Ð%Ø"�Ô" =Ð>Ð>°IÐ>Ð>Ð>øð Ô'ð 	/ØÔ(×,Ò,Ñ.Ô.Ð.Ð.Ð.ð	/ð 	/øåð 
ð 
ð 
å�Šðð ð	 	ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð
øøøs   ‚D)D/ Ä/&EÅEÚuse_multipartÚmark_task_doneÚopsúJOptional[list[Union[SerializedRunOperation, SerializedFeedbackOperation]]]c           
     óB  ‡— 	 t          |¦  «        }|                     ¦   «         D ]Ú\  \  }}}	}
}}}|st          d„ |D ¦   «         ¦  «        }nd„ |D ¦   «         Šˆfd„|D ¦   «         }|r|                      ||||	|
||¬¦  «         Œat	          d„ |D ¦   «         ¦  «        r&t
                               d¦  «         d„ |D ¦   «         }|                      t          t          t                   |¦  «        |||	|
||¬¦  «         ŒÛnH# t          $ r;}t
                               dd	¬
¦  «         |                      |¦  «         Y d}~nd}~ww xY w|rc|�c|D ]b}	 |                     ¦   «          Œ# t          $ r:}dt!          |¦  «        v rt
                               d|› �¦  «         n‚ Y d}~ŒWd}~ww xY wdS dS dS # |rc|�b|D ]`}	 |                     ¦   «          Œ# t          $ r:}dt!          |¦  «        v rt
                               d|› �¦  «         n‚ Y d}~ŒWd}~ww xY ww w w xY w)a­  Handle a batch of tracing queue items by sending them to LangSmith.

    Args:
        client: The LangSmith client to use for sending data.
        tracing_queue: The queue containing tracing items (used for task_done calls).
        batch: List of tracing queue items to process.
        use_multipart: Whether to use multipart endpoint for sending data.
        mark_task_done: Whether to mark queue tasks as done after processing.
            Set to False when called from parallel execution to avoid double counting.
        ops: Pre-combined serialized operations to use instead of combining from batch.
            If None, operations will be combined from the batch items.
    c                ó   — g | ]	}|j         ‘Œ
S rN   ©r+   ©r„   r+   s     r-   r‡   z0_tracing_thread_handle_batch.<locals>.<listcomp>J  s   € Ð7Ð7Ð7 4�T”YÐ7Ð7Ð7r/   c                ó&   — h | ]}|j         j        ’ŒS rN   )r+   rŠ   r§   s     r-   ú	<setcomp>z/_tracing_thread_handle_batch.<locals>.<setcomp>M  s   € ÐBÐBÐB¨d˜TœYœ\ÐBÐBÐBr/   c                ó&   •— g | ]}|j         ‰v ¯|‘ŒS rN   r‰   )r„   ÚopÚ	group_idss     €r-   r‡   z0_tracing_thread_handle_batch.<locals>.<listcomp>N  s%   ø€ ÐDÐDÐD B°´¸)Ð1CÐ1C˜RÐ1CÐ1CÐ1Cr/   )r#   r$   r%   r&   r'   r(   c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r;   ©rF   r   ©r„   r«   s     r-   ú	<genexpr>z/_tracing_thread_handle_batch.<locals>.<genexpr>[  s-   è è € ÐWÐWÀr•z "Õ&AÑBÔBÐWÐWÐWÐWÐWÐWr/   z;Feedback operations are not supported in non-multipart modec                ó<   — g | ]}t          |t          ¦  «        °|‘ŒS rN   r®   r¯   s     r-   r‡   z0_tracing_thread_handle_batch.<locals>.<listcomp>_  s9   € ð !ð !ð !àÝ)¨"Õ.IÑJÔJð!Øð!ð !ð !r/   rf   Trg   Nú!task_done() called too many timesú3Ignoring harmless task_done error during shutdown: )r.   Úitemsr   Ú_multipart_ingest_opsÚanyrz   ÚwarningÚ_batch_ingest_run_opsr   r"   r   ry   r{   Ú_invoke_tracing_error_callbackÚ	task_donerm   r2   Údebug)r_   rP   r   r    r¡   r¢   Úgrouped_batchesr#   r$   r%   r&   r'   r(   Úgroup_batchÚ	group_opsÚer…   r¬   s                    @r-   Ú_tracing_thread_handle_batchrÀ   &  s…  ø€ ð,Gå6°uÑ=Ô=ˆð *×/Ò/Ñ1Ô1ð,	ð ,	ñ ñ 
ØØØØØØØØð EÝ?Ø7Ð7¨;Ð7Ñ7Ô7ñô �	�	ð CÐB°kÐBÑBÔB�	ØDÐDÐDÐD¨#ÐDÑDÔD�	àð Ø×,Ò,ØØ#Ø#Ø +Ø'Ø"/Ø!ð -ñ ô ð ð õ ÐWÐWÈYÐWÑWÔWÑWÔWð Ý—N’NØUñô ð ð!ð !à"+ð!ñ !ô !�Ið
 ×,Ò,Ý�Õ4Ô5°yÑAÔAØ#Ø#Ø +Ø'Ø"/Ø!ð -ñ ô ð ð ðI,	øõ\ ð 1ð 1ð 1Ý�Šðð ð	 	ñ 	
ô 	
ð 	
ð 	×-Ò-¨aÑ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0øøøøð1øøøð ð 	˜mÐ7Øð ð �ð
Ø!×+Ò+Ñ-Ô-Ð-Ð-øÝ!ð ð ð Ø:½cÀ!¹f¼fÐDÐDõ ŸšØUÐRSÐUÐUñô ð ð ð ð	ð ð ð ð øøøøð	øøøð		ð 	Ð7Ð7ðð øð ð 	˜mÐ7Øð ð �ð
Ø!×+Ò+Ñ-Ô-Ð-Ð-øÝ!ð ð ð Ø:½cÀ!¹f¼fÐDÐDõ ŸšØUÐRSÐUÐUñô ð ð ð ð	ð ð ð ð øøøøð	øøøð		Ð7ðøøøsr   ƒC>D ÄF5 Ä
EÄ1EÄ=F5 ÅEÅF5 ÅE(Å(
F,Å20F'Æ'F,Æ5	HÆ?GÇHÇ
H	Ç0H	ÈHÈH	ÈHc                ó(  — 	 |€t          d„ |D ¦   «         ¦  «        }d„ |D ¦   «         }d„ |D ¦   «         }|r=| j        �| j                             ||¦  «         nt                               d¦  «         nH# t
          $ r;}t                               dd¬¦  «         |                      |¦  «         Y d}~nd}~ww xY w|rc|�c|D ]b}	 |                     ¦   «          Œ# t          $ r:}d	t          |¦  «        v rt           
                    d
|› �¦  «         n‚ Y d}~ŒWd}~ww xY wdS dS dS # |rc|�b|D ]`}	 |                     ¦   «          Œ# t          $ r:}d	t          |¦  «        v rt           
                    d
|› �¦  «         n‚ Y d}~ŒWd}~ww xY ww w w xY w)ad  Handle a batch of tracing queue items by exporting them to OTEL.

    Args:
        client: The LangSmith client containing the OTEL exporter.
        tracing_queue: The queue containing tracing items (used for task_done calls).
        batch: List of tracing queue items to process.
        mark_task_done: Whether to mark queue tasks as done after processing.
            Set to False when called from parallel execution to avoid double counting.
        ops: Pre-combined serialized operations to use instead of combining from batch.
            If None, operations will be combined from the batch items.
    Nc                ó   — g | ]	}|j         ‘Œ
S rN   r¦   r§   s     r-   r‡   z5_otel_tracing_thread_handle_batch.<locals>.<listcomp>œ  s   € Ð6SÐ6SÐ6SÀT°t´yÐ6SÐ6SÐ6Sr/   c                ó<   — g | ]}t          |t          ¦  «        ¯|‘ŒS rN   )rF   r   r¯   s     r-   r‡   z5_otel_tracing_thread_handle_batch.<locals>.<listcomp>ž  s(   € ÐNÐNÐN˜"¥z°"Õ6LÑ'MÔ'MÐN�2ÐNÐNÐNr/   c                óf   — i | ].}t          |j        t          ¦  «        ¯|j        j        |j        “Œ/S rN   )rF   r+   r   rŠ   r7   r§   s     r-   ú
<dictcomp>z5_otel_tracing_thread_handle_batch.<locals>.<dictcomp>Ÿ  sD   € ð 
ð 
ð 
àÝ˜$œ)Õ%;Ñ<Ô<ð
ØŒIŒL˜$Ô+ð
ð 
ð 
r/   z—LangSmith tracing error: Failed to submit OTEL trace data.
This does not affect your application's runtime.
Error details: client.otel_exporter is NonezpOTEL tracing error: Failed to submit trace data.
This does not affect your application's runtime.
Error details:Trg   r²   r³   )r   Úotel_exporterÚexport_batchrz   r{   ry   r¹   rº   rm   r2   r»   )	r_   rP   r   r¡   r¢   Úrun_opsÚotel_context_mapr¿   r…   s	            r-   Ú!_otel_tracing_thread_handle_batchrÊ   †  s›  € ð()Øˆ;Ý5Ð6SÐ6SÈUÐ6SÑ6SÔ6SÑTÔTˆCàNÐN ÐNÑNÔNˆð
ð 
àð
ñ 
ô 
Ðð
 ð 	ØÔ#Ð/ØÔ$×1Ò1°'Ð;KÑLÔLÐLÐLå—’ðBñô ð øøõ ð 1ð 1ð 1Ý�Šðð ð	 	ñ 	
ô 	
ð 	
ð 	×-Ò-¨aÑ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0øøøøð1øøøð ð 	˜mÐ7Øð ð �ð
Ø!×+Ò+Ñ-Ô-Ð-Ð-øÝ!ð ð ð Ø:½cÀ!¹f¼fÐDÐDõ ŸšØUÐRSÐUÐUñô ð ð ð ð	ð ð ð ð øøøøð	øøøð		ð 	Ð7Ð7ðð øð ð 	˜mÐ7Øð ð �ð
Ø!×+Ò+Ñ-Ô-Ð-Ð-øÝ!ð ð ð Ø:½cÀ!¹f¼fÐDÐDõ ŸšØUÐRSÐUÐUñô ð ð ð ð	ð ð ð ð øøøøð	øøøð		Ð7ðøøøsr   ‚A2A5 Á4D( Á5
B:Á?1B5Â0D( Â5B:Â:D( ÃCÃ
DÃ%0DÄDÄ(	FÄ2EÅFÅ
F	Å0F	ÆFÆF	ÆFc           
     ó\  — t          d„ |D ¦   «         ¦  «        }t          j        |¦  «        }t          j        |¦  «        }	 t          j        d¬¦  «        5 }|                     t          | |||d|¦  «        }	|                     t          | ||d|¦  «        }
|	                     ¦   «          |
                     ¦   «          ddd¦  «         n# 1 swxY w Y   nk# t          $ r^}dt          |¦  «        v rBt                               d¦  «         t          | |||d|¦  «         t          | ||d|¦  «         n‚ Y d}~nd}~ww xY w|rc|�c|D ]b}	 |                     ¦   «          Œ# t          $ r:}dt          |¦  «        v rt                               d	|› �¦  «         n‚ Y d}~ŒWd}~ww xY wdS dS dS )
a  Handle a batch of tracing queue items by sending to both both LangSmith and OTEL.

    Args:
        client: The LangSmith client to use for sending data.
        tracing_queue: The queue containing tracing items (used for task_done calls).
        batch: List of tracing queue items to process.
        use_multipart: Whether to use multipart endpoint for LangSmith.
        mark_task_done: Whether to mark queue tasks as done after processing.
            Set to False primarily for testing when items weren't actually queued.
    c                ó   — g | ]	}|j         ‘Œ
S rN   r¦   r§   s     r-   r‡   z7_hybrid_tracing_thread_handle_batch.<locals>.<listcomp>Ø  s   € Ð.KÐ.KÐ.K¸T¨t¬yÐ.KÐ.KÐ.Kr/   é   r   FNz6cannot schedule new futures after interpreter shutdownz@Interpreter shutting down, falling back to sequential processingr²   r³   )r   ÚcopyÚdeepcopyÚcfÚThreadPoolExecutorÚsubmitrÀ   rÊ   Úresultr’   r2   rz   r»   rº   rm   )r_   rP   r   r    r¡   r¢   Úlangsmith_opsÚotel_opsÚexecutorÚfuture_langsmithÚfuture_otelr¿   r…   s                r-   Ú#_hybrid_tracing_thread_handle_batchrÙ   Æ  sš  € õ$ .Ð.KÐ.KÀUÐ.KÑ.KÔ.KÑ
LÔ
L€Cõ ”M #Ñ&Ô&€MÝŒ}˜SÑ!Ô!€Hð'åÔ"¨qÐ1Ñ1Ô1ð 	!°Xà'ŸšÝ,ØØØØØØñ ô  Ðð #Ÿ/š/Ý1ØØØØØñô ˆKð ×#Ò#Ñ%Ô%Ð%Ø×ÒÑ Ô Ð ð-	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!øøõ. ð ð ð ØCÅsÈ1ÁvÄvÐMÐMõ �LŠLØRñô ð õ )Ø˜ u¨m¸UÀMñô ð õ .Ø˜ u¨e°Xñô ð ð ð ð	ð ð ð ð øøøøðøøøð" ð ˜-Ð3Øð 	ð 	ˆAð
Ø×'Ò'Ñ)Ô)Ð)Ð)øÝð ð ð Ø6½#¸a¹&¼&Ð@Ð@õ —L’LØQÈaÐQÐQñô ð ð ð ð	ð ð ð ð øøøøð	øøøð	ð Ð3Ð3ð	ð 	sV   ÁC ÁA(CÃ C ÃCÃC ÃCÃC Ã
E Ã"AD;Ä;E ÅE!Å!
F%Å+0F Æ F%úOptional[int]c                 ó®   — t          j        d¦  «        } | �>	 t          | ¦  «        S # t          $ r! t                               d| › d�¦  «         Y nw xY wd S )NÚBATCH_INGEST_SIZE_LIMITz+Invalid value for BATCH_INGEST_SIZE_LIMIT: z, continuing with default)Úls_utilsÚget_env_varrR   rm   rz   r·   )Úsize_limit_strs    r-   Úget_size_limit_from_envrà     sŠ   € ÝÔ)Ø!ñô €Nð Ð!ð	Ý�~Ñ&Ô&Ð&øÝð 	ð 	ð 	Ý�NŠNð*¸nð *ð *ð *ñô ð ð ð ð	øøøð
 ˆ4s   ˜' §(AÁAÚinfoúls_schemas.LangSmithInfoúls_schemas.BatchIngestConfigc                óÖ   — t          j        dd dt          t          t          ¬¦  «        }| s|S 	 | j        s|S t          ¦   «         }|�
|| j        d<   | j        S # t          $ r |cY S w xY w)NTrO   )Úuse_multipart_endpointra   r`   Úscale_up_nthreads_limitÚscale_up_qsize_triggerÚscale_down_nempty_triggerr`   )Ú
ls_schemasÚBatchIngestConfigr   r   r   Úbatch_ingest_configrà   ÚBaseException)rá   Údefault_configÚenv_size_limits      r-   Ú_ensure_ingest_configrï   &  s¡   € õ  Ô1Ø#ØØÝ =Ý;Ý"Aðñ ô €Nð ð ØÐðØÔ'ð 	"Ø!Ð!Ý0Ñ2Ô2ˆØÐ%Ø5CˆDÔ$ \Ñ2ØÔ'Ð'øÝð ð ð ØÐÐÐðøøøs   ¯A ¸ A ÁA(Á'A(Ú
client_refúweakref.ref[Client]c                ó�  ‡‡‡—  | ¦   «         Š‰€d S ‰j         }|€J ‚t          ‰j        ¦  «        }|d         }|d         }|d         }‰j         o|                     dd¦  «        }g ŠdŠt
          st                               d¦  «         t          j	        d¦  «        p‰j
        d	v pt
           }|sÍ|rË‰j        j        pi                      d
d¦  «        st                               d¦  «         nŽt          j        ¦   «         ‰_        t!          ¦   «         ‰_        t%          j        ¦   «         ‰_        t%          j        t,          t          j        ‰¦  «        f‰j        ¬¦  «                             ¦   «          ‰dz  Šd ˆˆˆfd„} |¦   «         �rŒ‰D ]+}	|	                     ¦   «         s‰                     |	¦  «         Œ,t9          ‰¦  «        |k     rv|                     ¦   «         |k    r^t%          j        t<          t          j        ‰¦  «        |f‰j        ¬¦  «        }
‰                     |
¦  «         |
                     ¦   «          ‰j
        }‰j         p|                     d¦  «        pd}tC          |||¬¦  «        x}r‘|dk    r-t                               d¦  «         tE          ‰|||¦  «         n^|dk    r,t                               d¦  «         tG          ‰||¦  «         n,t                               d¦  «         tI          ‰|||¦  «          |¦   «         �°Œt                               d|                     ¦   «         ¦  «         ‰j
        }‰j         p|                     d¦  «        pd}tC          ||d|¬¦  «        x}r¦|dk    r-t                               d¦  «         tE          ‰|||¦  «         n^|dk    r,t                               d¦  «         tG          ‰||¦  «         n,t                               d¦  «         tI          ‰|||¦  «         tC          ||d|¬¦  «        x}°¦t                               d¦  «         d S )!Nr`   ræ   rç   rå   Té   zUzstandard package is not installed. Falling back to uncompressed multipart ingestion.ÚDISABLE_RUN_COMPRESSION)ÚotelÚhybridÚzstd_compression_enabledFz~Run compression is not enabled. Please update to the latest version of LangSmith. Falling back to regular multipart ingestion.)ÚtargetÚargsÚdaemoné   r   r?   c                 ó¶  •— ‰rt          ‰d¦  «        r#‰j        rt                               d¦  «         dS t	          j        ¦   «                              ¦   «         st                               d¦  «         dS t          t          d¦  «        rLt          j        ‰¦  «        } ‰t          ‰¦  «        z   }| |k    }|st                               d| |¦  «         |S dS )NÚ_manual_cleanupz3Client is being cleaned up, stopping tracing threadFz,Main thread is dead, stopping tracing threadÚgetrefcountz�Client refs count indicates we're the only remaining reference to the client, stopping tracing thread (refcount=%d, threshold=%d)T)
Úhasattrrý   rz   r»   Ú	threadingÚmain_threadÚis_aliveÚsysrþ   rZ   )ÚrefcountÚ	thresholdÚshould_keep_threadr_   Únum_known_refsÚsub_threadss      €€€r-   Úkeep_thread_activez7tracing_control_thread_func.<locals>.keep_thread_activeo  sò   ø€ àð 	Ý�FÐ-Ñ.Ô.ð	Ø39Ô3Ið	õ �LŠLÐNÑOÔOÐOØ�5ÝÔ$Ñ&Ô&×/Ò/Ñ1Ô1ð 	å�LŠLÐGÑHÔHÐHØ�5å•3˜Ñ&Ô&ð 	õ ” vÑ.Ô.ˆHØ&­¨[Ñ)9Ô)9Ñ9ˆIØ!)¨IÒ!5ÐØ%ð Ý—’ð2ð Øñô ð ð &Ð%ð �4r/   ra   r   ©rQ   rT   rö   zHandling batch in hybrid moderõ   zHandling batch in otel modez Handling batch in langsmith modez/Tracing thread draining queue on exit: qsize=%d©rQ   rS   rT   zDraining batch in hybrid modezDraining batch in otel modez Draining batch in langsmith modez'Tracing control thread is shutting down©r   r?   )%rP   rï   rá   Ú_multipart_disabledrX   r   rz   r»   rÝ   Úis_env_var_truishÚ_tracing_modeÚinstance_flagsr·   ÚweakrefÚWeakSetÚ_futuresr   ri   r   ÚEventr–   ÚThreadÚ-tracing_control_thread_func_compress_parallelÚrefÚ_use_daemon_threadsÚstartr  ÚremoverZ   ÚqsizeÚ_tracing_sub_thread_funcr)   rl   r]   rÙ   rÊ   rÀ   )rð   rP   rë   r`   ræ   rç   r    Údisable_compressionr	  ÚthreadÚ
new_threadÚmodeÚmax_batch_sizer[   r_   r  r  s                 @@@r-   Útracing_control_thread_funcr"  >  s*  øøø€ ØˆZ‰\Œ\€FØ€~ØˆØÔ(€MØÐ$Ð$Ð$Ý/°´Ñ<Ô<ÐØ)¨,Ô7€JØ#6Ð7PÔ#QÐØ"5Ð6NÔ"OÐØÔ2Ð2ð Ð7J×7NÒ7NØ  $ñ8ô 8€Mð +-€Kà€Nõ ð 
Ý�Šð@ñ	
ô 	
ð 	
õ
 	Ô"Ð#<Ñ=Ô=ð 	ØÔÐ#5Ð5ð	åÐð ð
 ð   =ð  Ø”Ô*Ð0¨b×5Ò5Ø&¨ñ
ô 
ð 	 õ �NŠNðUñô ð ð õ
 &œoÑ/Ô/ˆFŒOÝ'7Ñ'9Ô'9ˆFÔ$Ý+4¬?Ñ+<Ô+<ˆFÔ(ÝÔÝDÝ”k &Ñ)Ô)Ð+ØÔ1ðñ ô ÷ Še‰gŒgˆgà˜aÑˆNðð ð ð ð ð ð ð ðB Ð
Ñ
Ô
ñ %Ø!ð 	+ð 	+ˆFØ—?’?Ñ$Ô$ð +Ø×"Ò" 6Ñ*Ô*Ð*øå�ÑÔÐ6Ò6Ð6Ø×#Ò#Ñ%Ô%Ð(>Ò>Ð>å"Ô)Ý/Ý”k &Ñ)Ô)¨=Ð9ØÔ1ðñ ô ˆJð
 ×Ò˜zÑ*Ô*Ð*Ø×ÒÑÔÐàÔ#ˆàÔ(ð Ø"×&Ò&Ð'9Ñ:Ô:ðàð 	õ
 5Ø ¸Nð
ñ 
ô 
ð 
ˆ:ð 	ð �xÒÐÝ—’Ð<Ñ=Ô=Ð=Ý3Ø˜M¨:°}ñô ð ð ð ˜’�Ý—’Ð:Ñ;Ô;Ð;Ý1°&¸-ÈÑTÔTÐTÐTå—’Ð?Ñ@Ô@Ð@Ý,Ø˜M¨:°}ñô ð ðG Ð
Ñ
Ô
ñ %õP ‡L‚LØ9Ø×ÒÑÔñô ð ð Ô€DàÔ$ÐXÐ(;×(?Ò(?Ð@RÑ(SÔ(SÐXÐWXð õ 4Ø˜Z¨uÀ^ðñ ô ð ˆ*ð ð �8ÒÐÝ�LŠLÐ8Ñ9Ô9Ð9Ý/Ø˜ z°=ñô ð ð ð �VŠ^ˆ^Ý�LŠLÐ6Ñ7Ô7Ð7Ý-¨f°mÀZÑPÔPÐPÐPå�LŠLÐ;Ñ<Ô<Ð<Ý(Ø˜ z°=ñô ð õ 4Ø˜Z¨uÀ^ðñ ô ð ˆ*ð õ  ‡L‚LÐ:Ñ;Ô;Ð;Ð;Ð;r/   ç      à?Úflush_intervalÚfloatc                óT  ‡‡—  | ¦   «         Š‰€d S t                                d¦  «         ‰j        �‰j        �‰j        €t                                d¦  «         d S t          ‰j        ¦  «        }|d         }‰j        p| 	                    dd¦  «        }dŠdˆˆfd	„}t          j        ¦   «         }	 ‰j                             d¬¦  «        } |¦   «         s�nJ|r¦‰j                             ¦   «          t          ‰||¦  «        \  }}	|�c	 t                               ‰j        ||	¦  «        }
‰j                             |
¦  «         n&# t&          $ r ‰                     ||	¦  «         Y nw xY wt          j        ¦   «         }n t          j        ¦   «         |z
  |k    r†t          ‰dd¬¦  «        \  }}	|�\	 t)          j        t                               ‰j        ||	¦  «        g¦  «         n&# t&          $ r ‰                     ||	¦  «         Y nw xY wt          j        ¦   «         }�Œq	 ‰j        �‰j        j        nd}t                                d|¦  «         t          ‰dd¬¦  «        \  }}	|�Üt                                d|                     ¦   «         j        ¦  «         	 t)          j        t                               ‰j        ||	¦  «        g¦  «         t                                d¦  «         nt# t&          $ rM t                                d¦  «         ‰                     ||	¦  «         t                                d¦  «         Y nw xY wt                                d¦  «         n,# t0          $ r t                                dd
¬¦  «         Y nw xY wt                                d¦  «         d S )Nz4Tracing control thread func compress parallel calledzšLangSmith tracing error: Required compression attributes not initialized.
This may affect trace submission but does not impact your application's runtime.r`   ra   r^   é   r   r?   c                 ó’  •— ‰rt          ‰d¦  «        r#‰j        rt                               d¦  «         dS t	          j        ¦   «                              ¦   «         st                               d¦  «         dS t          t          d¦  «        r:t          j        ‰¦  «        } | ‰k    }|st                               d| ‰¦  «         |S dS )Nrý   z7Client is being cleaned up, stopping compression threadFz0Main thread is dead, stopping compression threadrþ   z…Client refs count indicates we're the only remaining reference to the client, stopping compression thread (refcount=%d, threshold=%d)T)	rÿ   rý   rz   r»   r   r  r  r  rþ   )r  r  r_   r  s     €€r-   r	  zItracing_control_thread_func_compress_parallel.<locals>.keep_thread_activeï  sà   ø€ àð 	Ý�FÐ-Ñ.Ô.ð	Ø39Ô3Ið	õ �LŠLÐRÑSÔSÐSØ�5ÝÔ$Ñ&Ô&×/Ò/Ñ1Ô1ð 	å�LŠLÐKÑLÔLÐLØ�5Ý•3˜Ñ&Ô&ð 	õ ” vÑ.Ô.ˆHØ!)¨NÒ!:ÐØ%ð Ý—’ð2ð Ø"ñô ð ð &Ð%ð �4r/   TrW   )rV   rû   )r`   ra   r   z.Compression thread final flush: trace_count=%dz0Compression thread final flush: sending %d bytesz.Compression thread final flush: send completedzKCompression thread final flush: thread pool shutdown, sending synchronouslyz3Compression thread final flush: sync send completedz/Compression thread final flush: no data to sendzuLangSmith tracing error: Failed during final cleanup.
This does not affect your application's runtime.
Error details:rg   z1Compressed traces control thread is shutting downr  )rz   r»   ri   r–   r  r{   rï   rá   rl   rX   ÚtimeÚ	monotonicÚwaitÚclearr   ÚLANGSMITH_CLIENT_THREAD_POOLrÒ   Ú_send_compressed_multipart_reqÚaddr’   rÐ   rn   Ú	getbufferÚnbytesry   )rð   r$  rë   r`   ra   r	  Úlast_flush_timeÚ	triggeredÚdata_streamr~   Úfuturern   Úfinal_data_streamr_   r  s                @@r-   r  r  Ó  s¸  øø€ ð ˆZ‰\Œ\€FØ€~ØˆÝ
‡L‚LÐGÑHÔHÐHàÔ Ð(ØÔ'Ð/ØŒ?Ð"å�Šð1ñ	
ô 	
ð 	
ð
 	ˆå/°´Ñ<Ô<ÐØ)¨,Ô7€JØÔ3ð Ð7J×7NÒ7NØ˜Jñ8ô 8Ðð
 €Nðð ð ð ð ð ð õ< ”nÑ&Ô&€Oð43ØÔ0×5Ò5¸dÐ5ÑCÔCˆ	Ø!Ð!Ñ#Ô#ð 	Ùð ð .	3ØÔ(×.Ò.Ñ0Ô0Ð0õ 8Ø�jÐ"2ñ34ô 34Ñ/ˆKÐ/ð Ð&ðÝ9×@Ò@ØÔ=Ø#Ø.ñô �Fð
 ”O×'Ò'¨Ñ/Ô/Ð/Ð/øÝ#ð ð ð Ø×9Ò9Ø#Ø.ñô ð ð ð ðøøøõ
 #œnÑ.Ô.ˆOˆOõ ”Ñ Ô  ?Ñ2°~ÒEÐEõ <Ø q¸1ðñ ô ñØØ*ð Ð*ðÝœå <× CÒ CØ$*Ô$IØ$/Ø$:ñ!"ô !"ðñô ð ð øõ (ð ð ð Ø×=Ò=Ø'Ø2ñô ð ð ð ðøøøõ
 #'¤.Ñ"2Ô"2�ñi43ðn3
ð Ô'Ð3ð Ô$Ô0Ð0àð 	õ
 	�ŠØ<Øñ	
ô 	
ð 	
õ 4Ø˜q°1ð
ñ 
ô 
ñ	
ØØ"ð Ð(Ý�LŠLØBØ!×+Ò+Ñ-Ô-Ô4ñô ð ðTÝ”å4×;Ò;Ø"ÔAØ-Ø2ñô ðñô ð õ —’ÐMÑNÔNÐNÐNøÝð 	Tð 	Tð 	TÝ—’ð,ñô ð ð ×5Ò5Ø%Ø*ñô ð õ —’ÐRÑSÔSÐSÐSÐSð	Tøøøõ �LŠLÐJÑKÔKÐKøøåð 
ð 
ð 
Ý�Šðð ð	 	ñ 	
ô 	
ð 	
ð 	
ð 	
ð
øøøõ ‡L‚LÐDÑEÔEÐEÐEÐEs]   Ä;E Å E*Å)E*Æ34G( Ç( HÈ
HÈ$A9M" ÊAK- Ë,M" Ë-AMÍM" ÍMÍM" Í"&NÎ
Nc                ón  —  | ¦   «         }|€d S 	 |j         sd S n3# t          $ r&}t                               d|¦  «         Y d }~d S d }~ww xY w|j        }|€J ‚t          |j         ¦  «        }|                     dd¦  «        }d}t          j        ¦   «          	                    ¦   «         �r||d         k    �r|j
        p|                     d¦  «        pd}t          |||¬¦  «        x}	r›d}|j        }
|
dk    r-t                               d	¦  «         t          |||	|¦  «         nd|
d
k    r,t                               d¦  «         t          |||	¦  «         n2t                               d¦  «         t          |||	|¦  «         n|dz  }t          j        ¦   «          	                    ¦   «         r||d         k    �°|j        }
|j
        p|                     d¦  «        pd}t          ||d|¬¦  «        x}	r¦|
dk    r-t                               d¦  «         t          |||	|¦  «         n^|
d
k    r,t                               d¦  «         t          |||	¦  «         n,t                               d¦  «         t          |||	|¦  «         t          ||d|¬¦  «        x}	°¦t                               d¦  «         d S )Nz#Error in tracing control thread: %sr`   rO   r   rè   ra   r
  rö   z(Sub-thread handling batch in hybrid moderõ   z&Sub-thread handling batch in otel modez+Sub-thread handling batch in langsmith moderû   Fr  z(Sub-thread draining batch in hybrid modez&Sub-thread draining batch in otel modez+Sub-thread draining batch in langsmith modez+Tracing control sub-thread is shutting down)rá   rì   rz   r»   rP   rï   rX   r   r  r  rl   r]   r  rÙ   rÊ   rÀ   )rð   r    r_   r¿   rP   rë   r`   Úseen_successive_empty_queuesr!  r[   r   s              r-   r  r  }  st  € ð ˆZ‰\Œ\€FØ€~ØˆðØŒ{ð 	ØˆFð	øåð ð ð Ý�ŠÐ:¸AÑ>Ô>Ð>Øˆˆˆˆˆøøøøðøøøð Ô(€MØÐ$Ð$Ð$Ý/°´Ñ<Ô<ÐØ$×(Ò(¨°sÑ;Ô;€JØ#$Ð õ
 	ÔÑÔ×(Ò(Ñ*Ô*ñ .ð )ØÐ:Ô;ò<ñ <ð Ô(ð Ø"×&Ò&Ð'9Ñ:Ô:ðàð 	õ
 5Ø ¸Nð
ñ 
ô 
ð 
ˆ:ð 	.ð ,-Ð(àÔ'ˆDØ�xÒÐÝ—’ÐGÑHÔHÐHÝ3Ø˜M¨:°}ñô ð ð ð ˜’�Ý—’ÐEÑFÔFÐFÝ1°&¸-ÈÑTÔTÐTÐTå—’ÐJÑKÔKÐKÝ,Ø˜M¨:°}ñô ð ð ð )¨AÑ-Ð(õ= 	ÔÑÔ×(Ò(Ñ*Ô*ð .ð )ØÐ:Ô;ò<ñ <ð> Ô€DàÔ$ÐXÐ(;×(?Ò(?Ð@RÑ(SÔ(SÐXÐWXð õ 4Ø˜Z¨uÀ^ðñ ô ð ˆ*ð ð �8ÒÐÝ�LŠLÐCÑDÔDÐDÝ/Ø˜ z°=ñô ð ð ð �VŠ^ˆ^Ý�LŠLÐAÑBÔBÐBÝ-¨f°mÀZÑPÔPÐPÐPå�LŠLÐFÑGÔGÐGÝ(Ø˜ z°=ñô ð õ 4Ø˜Z¨uÀ^ðñ ô ð ˆ*ð õ  ‡L‚LÐ>Ñ?Ô?Ð?Ð?Ð?s   � š
A
¤AÁA
)r   r   r   r   )rO   Tr   )
rP   r   rQ   rR   rS   r?   rT   rR   r   r   )rO   r^   )r_   r   r`   rR   ra   rb   r   rc   )r_   r   r€   r�   r   r9   )TN)r_   r   rP   r   r   r   r    r?   r¡   r?   r¢   r£   r   r9   )r_   r   rP   r   r   r   r¡   r?   r¢   r£   r   r9   )T)r_   r   rP   r   r   r   r    r?   r¡   r?   r   r9   )r   rÚ   )rá   râ   r   rã   )rð   rñ   r   r9   )r#  )rð   rñ   r$  r%  r   r9   )rð   rñ   r    r?   r   r9   )?Ú
__future__r   Úconcurrent.futuresÚfuturesrÐ   rÎ   Ú	functoolsÚioÚloggingr  r   r)  r  Úmultiprocessingr   Úqueuer   r   Útypingr   r   r	   r
   r   Ú	langsmithr   ré   r   rÝ   Ú&langsmith._internal._compressed_tracesr   r   Úlangsmith._internal._constantsr   r   r   r   Úlangsmith._internal._operationsr   r   r   Úopentelemetry.context.contextr   Úlangsmith.clientr   Ú	getLoggerrz   rÑ   r-  r.   Útotal_orderingr1   r]   r   rŸ   rÀ   rÊ   rÙ   rà   rï   r"  r  r  rN   r/   r-   ú<module>rJ     s|  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ð Ð Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <à +Ð +Ð +Ð +Ð +Ð +Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø SÐ SÐ SÐ SÐ SÐ SÐ SÐ Sðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð (Ø5Ð5Ð5Ð5Ð5Ð5à'Ð'Ð'Ð'Ð'Ð'à	ˆÔ	Ð-Ñ	.Ô	.€à4˜rÔ4ÀÀÁÄÐMÑMÔMÐ ðð ð ð ð< Ôð?4ð ?4ð ?4ð ?4ð ?4ñ ?4ô ?4ñ Ôð?4ðF WXð+ð +ð +ð +ð +ð^ KUð6ð 6ð 6ð 6ð 6ðr2
ð 2
ð 2
ð 2
ðt  ð 	ð]ð ]ð ]ð ]ð ]ðH  ð 	ð=ð =ð =ð =ð =ðJ  ðNð Nð Nð Nð Nðbð ð ð ðð ð ð ð0R<ð R<ð R<ð R<ðl >AðgFð gFð gFð gFð gFðTK@ð K@ð K@ð K@ð K@ð K@r/   