Ë
    ÌÓ^jõ¸  ã                  óž  — U 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mZ d dlmZ d dlmZmZ d dlZej&                  j(                  Z ej,                  e«      ZdZdZd ZdZd	Zd
ZdZdZ dZ!dZ"dZ# ejH                  d«      Z%dZ&dZ' ejH                  d«      Z(d	Z)dZ*dZ+dddddddddddœ
Z,i Z-de.d <   da/da0d!e.d"<   da1d!e.d#<   da2d!e.d$<   da3d!e.d%<   da4d!e.d&<   da5d!e.d'<   da6d!e.d(<   da7d!e.d)<   da8d!e.d*<   da9d!e.d+<   d,a:d-e.d.<   d,a;d-e.d/<   da<da=da>da?da@daAdaBdaCdQd0„ZDd1„ ZEdRd2„ZFdRd3„ZGdSd4„ZHdTd5„ZIdQd6„ZJdUd7„ZKdVd8„ZL G d9„ d:eM«      ZN	 	 	 	 	 	 	 	 dWd;„ZOdXd<„ZPdYd=„ZQ G d>„ d?«      ZRdaSd@e.dA<   dBaTdBaUdZdC„ZVdSdD„ZWd[dE„ZXdeeddFœ	 	 	 	 	 	 	 	 	 	 	 d\dG„ZYd]dH„ZZd]dI„Z[	 d^	 	 	 d_dJ„Z\	 d^	 	 	 d_dK„Z]dZdL„Z^d`dM„Z_dadN„Z`dbdO„ZadZdP„Zby)cé    )ÚannotationsN)ÚCallableÚIterable)ÚPath)ÚAnyÚcasté   Ú!TORCH_CUPTI_MONITOR_LIBCUPTI_PATHé   é   i  @ g      ð?zcupti_monitor_meta.binzcupti_monitor_raw_buffers.bins   CUPMRBUFé   z
<8sIIIIQQQs   CUPMMETAz<8sIIé   ÚUnknownzDriver CompilerzBuffer FlushÚInstrumentationÚResourcez Runtime Triggered Module LoadingzLazy Function LoadingzCommand Buffer FullzActivity Buffer RequestzUVM Activity Init)
r   r   i   i   i   i   i   i   i   i   zdict[str, str]Ú_DEMANGLE_CACHEú
int | NoneÚ_USER_EXTERNAL_CORRELATION_KINDÚ_CUPTI_ACTIVITY_KIND_MEMCPYÚ_CUPTI_ACTIVITY_KIND_MEMSETÚ_CUPTI_ACTIVITY_KIND_DRIVERÚ_CUPTI_ACTIVITY_KIND_RUNTIMEÚ&_CUPTI_ACTIVITY_KIND_CONCURRENT_KERNELÚ_CUPTI_ACTIVITY_KIND_OVERHEADÚ_CUPTI_ACTIVITY_KIND_CUDA_EVENTÚ$_CUPTI_ACTIVITY_KIND_SYNCHRONIZATIONÚ)_CUPTI_ACTIVITY_KIND_EXTERNAL_CORRELATION© útuple[int, ...]Ú_DISABLED_RUNTIME_CBIDSÚ_DISABLED_DRIVER_CBIDSc                 ó€   — t         j                  j                  t        «      } | r| S ddlm}  |d«      j                  S )Nr   )Úload_nvidia_dynamic_libÚcupti)ÚosÚenvironÚgetÚ_LIBCUPTI_PATH_ENVÚcuda.pathfinderr#   Úabs_path)Úoverrider#   s     úh/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/profiler/_cupti_monitor.pyÚ_find_cupti_libraryr-   Y   s5   € Ü�z‰z�~‰~Ô0Ó1€HÙØˆõñ # 7Ó+×4Ñ4Ð4ó    c            	     ó8  — t         �t         S 	 ddlm}  | a t	        t         j
                  j                  «      at	        t         j                  j                  «      a
t	        t         j                  j                  «      at	        t         j                  j                  «      at	        t         j                  j                  «      at	        t         j                  j"                  «      at	        t         j                  j&                  «      at	        t         j                  j*                  «      at	        t         j                  j.                  «      at	        t         j                  j2                  «      at7        d„ t         j8                  j:                  t         j8                  j<                  t         j8                  j>                  t         j8                  j@                  t         j8                  jB                  t         j8                  jD                  fD «       «      a#t7        d„ t         jH                  jJ                  t         jH                  jL                  t         jH                  jN                  fD «       «      a(t         jR                  a*t         jV                  a,t         jZ                  a.t         j^                  a0t         jb                  a2t         jf                  a4t         jj                  a6t         jn                  a8t         S # t        $ r}t        d«      |‚d }~ww xY w)Nr   )r$   z|torch.profiler._cupti_monitor requires the cupti-python package. Install cupti-python to use the experimental CUPTI monitor.c              3  ó2   K  — | ]  }t        |«      –— Œ y ­w©N©Úint©Ú.0Úcbids     r,   ú	<genexpr>z(_require_cupti_python.<locals>.<genexpr>™   s   è ø€ ò 
$àô 	ˆD�	ñ
$ùó   ‚c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr1   r2   r4   s     r,   r7   z(_require_cupti_python.<locals>.<genexpr>¤   s   è ø€ ò #àô 	ˆD�	ñ#ùr8   )9Ú_ccr$   ÚModuleNotFoundErrorÚImportErrorr3   ÚExternalCorrelationKindÚCUSTOM1r   ÚActivityKindÚMEMCPYr   ÚMEMSETr   ÚDRIVERr   ÚRUNTIMEr   ÚCONCURRENT_KERNELr   ÚOVERHEADr   Ú
CUDA_EVENTr   ÚSYNCHRONIZATIONr   ÚEXTERNAL_CORRELATIONr   ÚtupleÚRuntime_api_trace_cbidÚcudaGetDevice_v3020ÚcudaSetDevice_v3020ÚcudaGetLastError_v3020ÚcudaEventCreate_v3020ÚcudaEventCreateWithFlags_v3020ÚcudaEventDestroy_v3020r    ÚDriver_api_trace_cbidÚcuKernelGetAttributeÚcuDevicePrimaryCtxGetStateÚcuCtxGetCurrentr!   Úactivity_kernel11_dtypeÚ_KERNEL_DTYPEÚactivity_memcpy6_dtypeÚ_MEMCPY_DTYPEÚactivity_memset4_dtypeÚ_MEMSET_DTYPEÚactivity_api_dtypeÚ
_API_DTYPEÚ#activity_external_correlation_dtypeÚ_EXTERNAL_CORRELATION_DTYPEÚactivity_overhead3_dtypeÚ_OVERHEAD_DTYPEÚactivity_cuda_event2_dtypeÚ_CUDA_EVENT_DTYPEÚactivity_synchronization2_dtypeÚ_SYNCHRONIZATION_DTYPE)Úimported_ccÚexcs     r,   Ú_require_cupti_pythonrg   j   sV  € ô. €Üˆ
ðÝ.ð €CÜ&)¬#×*EÑ*E×*MÑ*MÓ&NÐ#Ü"%¤c×&6Ñ&6×&=Ñ&=Ó">ÐÜ"%¤c×&6Ñ&6×&=Ñ&=Ó">ÐÜ"%¤c×&6Ñ&6×&=Ñ&=Ó">ÐÜ#&¤s×'7Ñ'7×'?Ñ'?Ó#@Ð Ü-0´×1AÑ1A×1SÑ1SÓ-TÐ*Ü$'¬×(8Ñ(8×(AÑ(AÓ$BÐ!Ü&)¬#×*:Ñ*:×*EÑ*EÓ&FÐ#Ü+.¬s×/?Ñ/?×/OÑ/OÓ+PÐ(Ü03Ü×Ñ×-Ñ-ó1Ð-ô $ñ 
$ô ×&Ñ&×:Ñ:Ü×&Ñ&×:Ñ:Ü×&Ñ&×=Ñ=Ü×&Ñ&×<Ñ<Ü×&Ñ&×EÑEÜ×&Ñ&×=Ñ=ð
ô
$ó 
Ðô #ñ #ô ×%Ñ%×:Ñ:Ü×%Ñ%×@Ñ@Ü×%Ñ%×5Ñ5ð
ô#ó Ðô ×/Ñ/€MÜ×.Ñ.€MÜ×.Ñ.€MÜ×'Ñ'€JÜ"%×"IÑ"IÐÜ×2Ñ2€OÜ×6Ñ6ÐÜ ×@Ñ@ÐÜ€Jøô] ò ÜðJó
ð ð	ûðús   ŽK? Ë?	LÌLÌLc                 óÂ   — t        «        t        t        t        t        «      «      t        t        t        t        «      «      t        t        t        t
        «      «      fS r1   )rg   r3   r   r   r   r   r   r.   r,   Ú_default_always_on_activitiesri   ·   sB   € ÜÔäŒD”Ô<Ó=Ó>ÜŒD”Ô1Ó2Ó3ÜŒD”Ô1Ó2Ó3ðð r.   c                 ó  — t        «        t        t        t        t        «      «      t        t        t        t        «      «      t        t        t        t
        «      «      t        t        t        t        «      «      t        t        t        t        «      «      t        t        t        t        «      «      t        t        t        t        «      «      t        t        t        t        «      «      t        t        t        t        «      «      f	S r1   )rg   r3   r   r   r   r   r   r   r   r   r   r   r   r.   r,   Ú _default_trace_window_activitiesrk   À   s¢   € ÜÔäŒD”Ô<Ó=Ó>ÜŒD”Ô1Ó2Ó3ÜŒD”Ô1Ó2Ó3ÜŒD”Ô2Ó3Ó4ÜŒD”Ô1Ó2Ó3ÜŒD”Ô?Ó@ÓAÜŒD”Ô3Ó4Ó5ÜŒD”Ô5Ó6Ó7ÜŒD”Ô:Ó;Ó<ð
ð 
r.   c                 óÞ   — 	 ddl m}  | j                  «       \  }}|| j                  j
                  k(  r|d uS || j                  j                  k(  ryt        d|› �«      ‚# t        $ r Y yw xY w)Nr   ©ÚdriverFzcuCtxGetCurrent failed with rc=)Úcuda.bindingsrn   r<   rT   ÚCUresultÚCUDA_SUCCESSÚCUDA_ERROR_NOT_INITIALIZEDÚRuntimeError)Úcuda_driverÚrcÚctxs      r,   Ú_has_active_cuda_contextrw   Ï   s|   € ðõ	
ð
 ×)Ñ)Ó+�G€BˆØ	ˆ[×!Ñ!×.Ñ.Ò.Ø˜$ˆÐØ	ˆ[×!Ñ!×<Ñ<Ò<ØÜ
Ð8¸¸Ð=Ó
>Ð>øô ò Ùðús   ‚A  Á 	A,Á+A,c                 ó¼   — t        j                  t        j                  «       dz  «      j                  } t        j                  «       | t        j                  «       fS )Nl   ÿÿ )ÚctypesÚc_int32Ú	threadingÚ	get_identÚvaluer%   ÚgetpidÚget_native_id)Ú
opaque_tids    r,   Ú_current_thread_resource_tupler�   Þ   s@   € Ü—‘¤	× 3Ñ 3Ó 5¸
Ñ BÓC×IÑI€JÜ�I‰I‹K˜¤Y×%<Ñ%<Ó%>Ð?Ð?r.   c                 ó>   — t         j                  j                  xs dS )NÚ )ÚtorchÚversionÚcudar   r.   r,   Ú_cuda_version_stringr‡   ã   s   € Ü�=‰=×ÑÒ# Ð#r.   c                óN   — t        j                  | dd¬«      j                  «       S )NT)ú,ú:)Ú	sort_keysÚ
separators)ÚjsonÚdumpsÚencode)Úpayloads    r,   Ú_safe_json_dumpsr‘   ç   s   € Ü�:‰:�g¨¸*ÔE×LÑLÓNÐNr.   c                ó   — t        | dd¬«      S )NÚabr   )Ú	buffering)Úopen)Úpaths    r,   Ú_open_binary_appendr—   ë   s   € Ü��d aÔ(Ð(r.   c                  ó   — e Zd Zy)Ú_CuptiErrorN)Ú__name__Ú
__module__Ú__qualname__r   r.   r,   r™   r™   ï   s   „ Ør.   r™   c                óp   — ~~| dk(  ry 	 ddl m}  |«       } |j                  | «      S # t        $ r Y y w xY w)Nr   )Úget_kernel_annotations)Útorch.cuda._graph_annotationsrž   Ú	Exceptionr'   )Úgraph_node_idÚrecord_kindÚcorrelation_idrž   r   s        r,   Ú"_default_graph_annotation_resolverr¤   ó   sK   € ð 	�^Ø˜ÒØðÝHá,Ó.ˆð ˆ;�?‰?˜=Ó)Ð)øô ò Ùðús   Š) ©	5´5c                ó’   — | s|S t        j                  | t         j                  «      j                  }|€|S |j	                  d¬«      S )NÚreplace)Úerrors)ry   r   Úc_char_pr}   Údecode)ÚptrÚdefaultr}   s      r,   Ú_decode_c_stringr¬     s?   € ÙØˆÜ�K‰K˜œVŸ_™_Ó-×3Ñ3€EØ€}ØˆØ�<‰<˜yˆ<Ó)Ð)r.   c                ó„   — t         j                  | «      }|€(t        j                  j	                  | «      x}t         | <   |S r1   )r   r'   r„   Ú_CÚ	_demangle)ÚnameÚcacheds     r,   Ú_demangle_symbolr²     s:   € Ü× Ñ  Ó&€FØ€~Ü).¯©×);Ñ);¸DÓ)AÐAˆ” Ñ&Ø€Mr.   c                  ó„  — e Zd Zdeeddœ	 	 	 	 	 	 	 	 	 	 	 d&d„Zd'd„Zd(d„Zd)d„Zd*d„Z	d'd„Z
d'd	„Zd'd
„Zd'd„Zddœd+d„Zd,d„Zd-d„Zd.d„Zd/d„Z	 d0	 	 	 d1d„Zd'd„Z	 d0	 	 	 d1d„Zd2d„Zd2d„Zd3d„Zd4d„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd „Z d5d!„Z!	 	 	 	 	 	 	 	 	 	 d6d"„Z"	 	 	 	 	 	 d7d#„Z#d8d$„Z$	 	 	 	 	 	 	 	 	 	 d6d%„Z%y)9ÚCuptiMonitorN©Ú
activitiesÚbuffer_sizeÚflush_period_sÚannotation_resolverc               óv  — t        «        t        |«      | _        t        |xs
 t	        «       «      | _        || _        || _        |xs t        | _	        t        j                  t        «       «      | _        | j                  «        t        j                   «       | _        t        j$                  | j"                  «      | _        d| _        d| _        t-        «       | _        t        j0                  «       | _        t        j0                  «       | _        d | _        d | _        d | _        d| _        d| _        g | _         d| _!        d| _"        i | _#        d| _$        i | _%        d| _&        d | _'        d | _(        d| _)        d| _*        d| _+        d | _,        d| _-        d| _.        d| _/        d| _0        d| _1        d| _2        y )NFr   r   r   )3rg   r   Ú
output_dirrI   ri   r¶   r·   r¸   r¤   r¹   ry   ÚCDLLr-   Ú_libÚ_setup_prototypesr{   ÚLockÚ_lockÚ	ConditionÚ_processing_doneÚ_startedÚ_callbacks_registeredÚsetÚ_enabled_activitiesÚEventÚ_worker_stopÚ_flush_stopÚ_worker_threadÚ_flush_threadÚ_worker_errorÚ_trace_window_activeÚ_trace_window_preparedÚ_trace_window_eventsÚ_trace_window_extra_activitiesÚ_trace_window_start_nsÚ_trace_window_user_annotationsÚ_next_user_external_idÚ_thread_resource_mapÚ_processing_inflightÚ_time_converterÚ_timestamp_callbackÚ_session_start_unix_nsÚ_session_start_approx_nsÚ!_session_start_calibrated_unix_nsÚ_raw_buffers_fpÚ_buffers_completedÚ_final_allocated_buffersÚ_valid_bytesÚ_outstanding_warnedÚ_dropped_recordsÚ_raw_chunk_count)Úselfr»   r¶   r·   r¸   r¹   s         r,   Ú__init__zCuptiMonitor.__init__  sŒ  € ô 	ÔÜ˜zÓ*ˆŒÜ 
Ò MÔ.KÓ.MÓNˆŒØ&ˆÔØ,ˆÔàÒEÔ#Eð 	Ô ô —K‘KÔ 3Ó 5Ó6ˆŒ	Ø×ÑÔ ä—^‘^Ó%ˆŒ
Ü )× 3Ñ 3°D·J±JÓ ?ˆÔØˆŒØ%*ˆÔ"Ü-0«UˆÔ Ü%ŸO™OÓ-ˆÔÜ$Ÿ?™?Ó,ˆÔØ7;ˆÔØ6:ˆÔØ37ˆÔØ$)ˆÔ!Ø&+ˆÔ#Ø:<ˆÔ!Ø?AˆÔ+Ø&'ˆÔ#Ø>@ˆÔ+Ø&'ˆÔ#Ø?AˆÔ!Ø$%ˆÔ!Ø#ˆÔØ#'ˆÔ Ø&'ˆÔ#Ø()ˆÔ%Ø12ˆÔ.à#ˆÔà"#ˆÔð )*ˆÔ%ØˆÔØ#(ˆÔ Ø !ˆÔØ !ˆÕr.   c                óZ  — t        j                  t         j                  «      g| j                  j                  _        t         j                  | j                  j                  _        t         j                  t         j                  g| j                  j                  _        t         j                  | j                  j                  _        t         j                  g| j                  j                  _        t         j                  | j                  j                  _        t         j                  g| j                  j                  _        t         j                  | j                  j                  _        t        | j                  d«      rbt         j                  t         j                  g| j                  j                  _        t         j                  | j                  j                  _        t        | j                  d«      rbt         j                  t         j                  g| j                  j                  _        t         j                  | j                  j                  _        t         j                  g| j                  j                   _        t         j                  | j                  j                   _        t         j                  t         j"                  t        j                  t         j                  «      g| j                  j$                  _        t         j                  | j                  j$                  _        t         j                  t         j                  t        j                  t         j"                  «      g| j                  j&                  _        t         j                  | j                  j&                  _        t         j                  g| j                  j(                  _        t         j                  | j                  j(                  _        t         j                  g| j                  j*                  _        t         j                  | j                  j*                  _        t         j                  t         j,                  g| j                  j.                  _        t         j                  | j                  j.                  _        t         j                  t        j                  t         j,                  «      g| j                  j0                  _        t         j                  | j                  j0                  _        t         j                  t        j                  t         j2                  «      g| j                  j4                  _        t         j                  | j                  j4                  _        y )NÚcuptiActivityEnableRuntimeApiÚcuptiActivityEnableDriverApi)ry   ÚPOINTERÚc_uint32r½   ÚcuptiGetVersionÚargtypesÚc_intÚrestypeÚc_void_pÚcuptiActivityRegisterCallbacksÚcuptiActivityEnableÚcuptiActivityDisableÚhasattrÚc_uint8rå   ræ   ÚcuptiActivityFlushAllÚc_size_tÚcuptiActivityGetNextRecordÚ!cuptiActivityGetNumDroppedRecordsÚcuptiActivityEnableHWTraceÚ&cuptiActivityRegisterTimestampCallbackÚc_uint64Ú&cuptiActivityPushExternalCorrelationIdÚ%cuptiActivityPopExternalCorrelationIdr¨   ÚcuptiGetResultString©râ   s    r,   r¾   zCuptiMonitor._setup_prototypesL  sO  € Ü.4¯n©n¼V¿_¹_Ó.MÐ-Nˆ�	‰	×!Ñ!Ô*Ü,2¯L©Lˆ�	‰	×!Ñ!Ô)ä�O‰OÜ�O‰Oð=
ˆ�	‰	×0Ñ0Ô9ô <B¿<¹<ˆ�	‰	×0Ñ0Ô8Ü28·,±,°ˆ�	‰	×%Ñ%Ô.Ü06·±ˆ�	‰	×%Ñ%Ô-Ü39·<±<°.ˆ�	‰	×&Ñ&Ô/Ü17·±ˆ�	‰	×&Ñ&Ô.Ü�4—9‘9Ð=Ô>ä—‘Ü—‘ð@ˆD�I‰I×3Ñ3Ô<ô ?E¿l¹lˆD�I‰I×3Ñ3Ô;Ü�4—9‘9Ð<Ô=ä—‘Ü—‘ð?ˆD�I‰I×2Ñ2Ô;ô >D¿\¹\ˆD�I‰I×2Ñ2Ô:Ü4:·O±OÐ3Dˆ�	‰	×'Ñ'Ô0Ü28·,±,ˆ�	‰	×'Ñ'Ô/ä�O‰OÜ�O‰OÜ�N‰Nœ6Ÿ?™?Ó+ð9
ˆ�	‰	×,Ñ,Ô5ô
 8>·|±|ˆ�	‰	×,Ñ,Ô4ä�O‰OÜ�O‰OÜ�N‰Nœ6Ÿ?™?Ó+ð@
ˆ�	‰	×3Ñ3Ô<ô
 ?E¿l¹lˆ�	‰	×3Ñ3Ô;Ü9?¿¹Ð8Hˆ�	‰	×,Ñ,Ô5Ü7=·|±|ˆ�	‰	×,Ñ,Ô4ÜEKÇ_Á_ÐDUˆ�	‰	×8Ñ8ÔAÜCIÇ<Á<ˆ�	‰	×8Ñ8Ô@ä�L‰LÜ�O‰OðE
ˆ�	‰	×8Ñ8ÔAô DJÇ<Á<ˆ�	‰	×8Ñ8Ô@ä�L‰LÜ�N‰Nœ6Ÿ?™?Ó+ðD
ˆ�	‰	×7Ñ7Ô@ô CIÇ,Á,ˆ�	‰	×7Ñ7Ô?ä�L‰LÜ�N‰Nœ6Ÿ?™?Ó+ð3
ˆ�	‰	×&Ñ&Ô/ô 28·±ˆ�	‰	×&Ñ&Õ.r.   c                óÐ   — t        j                  «       }| j                  | j                  j	                  t        j
                  |«      «      d«       t        |j                  «      S )Nré   )ry   rè   Ú_checkr½   ré   Úbyrefr3   r}   )râ   r…   s     r,   Ú_cupti_versionzCuptiMonitor._cupti_version†  sI   € Ü—/‘/Ó#ˆØ�‰Ø�I‰I×%Ñ%¤f§l¡l°7Ó&;Ó<Øô	
ô �7—=‘=Ó!Ð!r.   c                óð   — t        j                  «       }| j                  j                  |t        j                  |«      «      }|t
        k(  r&|j                  �|j                  j                  «       S d|› �S )Nzrc=)ry   r¨   r½   rü   r   Ú_CUPTI_SUCCESSr}   r©   )râ   ru   ÚresultÚrc2s       r,   Ú_result_stringzCuptiMonitor._result_stringŽ  s]   € Ü—‘Ó"ˆØ�i‰i×,Ñ,¨R´·±¸fÓ1EÓFˆØ”.Ò  V§\¡\Ð%=Ø—<‘<×&Ñ&Ó(Ð(Ø�R�DˆzÐr.   c                óT   — |t         k7  rt        |› d| j                  |«      › �«      ‚y )Nz failed with )r  r™   r  )râ   ru   r°   s      r,   rÿ   zCuptiMonitor._check•  s1   € Ø”ÒÜ   m°D×4GÑ4GÈÓ4KÐ3LÐMÓNÐNð  r.   c                ó   — | j                   ry t        j                  «       }t        j                  «       }| j	                  | j
                  j                  t        j                  |«      t        j                  |«      «      d«       d| _         y )Nrî   T)	rÄ   Ú_PY_PROFILERÚ._cupti_monitor_buffer_request_callback_addressÚ/_cupti_monitor_buffer_complete_callback_addressrÿ   r½   rî   ry   rí   )râ   Úrequest_addrÚcomplete_addrs      r,   Úregister_callbackszCuptiMonitor.register_callbacks™  so   € Ø×%Ò%ØÜ#×RÑRÓTˆÜ$×TÑTÓVˆØ�‰Ø�I‰I×4Ñ4Ü—‘ Ó-Ü—‘ Ó.óð -ô	
ð &*ˆÕ"r.   c                ó¶   — t         j                  «       }| j                  | j                  j	                  t        j                  |«      «      d«       || _        y )Nrø   )r	  Ú(_cupti_approximate_time_callback_addressrÿ   r½   rø   ry   rí   r×   )râ   Úcallback_addrs     r,   Úregister_timestamp_callbackz(CuptiMonitor.register_timestamp_callback§  sI   € Ü$×MÑMÓOˆØ�‰Ø�I‰I×<Ñ<Ü—‘ Ó.óð 5ô		
ð $1ˆÕ r.   c                ó6  — | j                   rt        d«      ‚t        j                  «        t        j	                  | j
                  «       | j                  «        t        j                  «       | _        | j                  «        t        j                  «       | _        t        t        j                  «       «      | _        | j!                  | j                  «      | _        | j$                  j'                  dd¬«       | j)                  «        | j+                  «        | j,                  j/                  «        | j0                  j/                  «        d | _        t5        j6                  | j8                  dd¬«      | _        | j:                  j=                  «        | j>                  dkD  rAt5        j6                  | j@                  dd¬«      | _!        | jB                  j=                  «        | jE                  «        | jG                  | jH                  «       d| _         y )Nz CUPTI monitor is already startedT)ÚparentsÚexist_okztorch-cupti-monitor-worker)Útargetr°   Údaemonr   ztorch-cupti-monitor-flush)%rÃ   rs   r	  Ú_cupti_monitor_reset_buffersÚ _cupti_monitor_configure_buffersr·   r  Ú$_ApproximateClockToUnixTimeConverterrÖ   r  ÚtimeÚtime_nsrØ   r3   Ú_get_approximate_timerÙ   Ú_convert_timerÚ   r»   ÚmkdirÚ_open_outputsÚ_write_meta_filerÈ   ÚclearrÉ   rÌ   r{   ÚThreadÚ_worker_looprÊ   Ústartr¸   Ú_flush_looprË   Ú_record_current_thread_infoÚenable_activitiesr¶   rý   s    r,   r%  zCuptiMonitor.start±  sš  € Ø�=Š=ÜÐAÓBÐBÜ×1Ñ1Ô3Ü×5Ñ5°d×6FÑ6FÔGØ×ÑÔ!Ü+×PÑPÓRˆÔØ×(Ñ(Ô*Ü&*§l¡l£nˆÔ#Ü(+¬L×,NÑ,NÓ,PÓ(QˆÔ%Ø15×1CÑ1CØ×)Ñ)ó2
ˆÔ.ð 	�‰×Ñ d°TÐÔ:Ø×ÑÔØ×ÑÔØ×Ñ×ÑÔ!Ø×Ñ×ÑÔ Ø!ˆÔÜ'×.Ñ.Ø×$Ñ$Ø-Øô
ˆÔð
 	×Ñ×!Ñ!Ô#Ø×Ñ Ò"Ü!*×!1Ñ!1Ø×'Ñ'Ø0Øô"ˆDÔð
 ×Ñ×$Ñ$Ô&Ø×(Ñ(Ô*Ø×Ñ˜tŸ™Ô/Øˆ�r.   c                ó<  — | j                   sy | j                  | j                  j                  t        «      d«       t        t        | j                  «      «      D ]-  }| j                  | j                  j                  |«      d«       Œ/ | j                  j                  «        d| _         | j                  j                  «        | j                  �R| j                  j                  d¬«       | j                  j                  «       rt        j!                  d«       d | _        | j"                  j                  «        t$        j'                  «        | j(                  �R| j(                  j                  d¬«       | j(                  j                  «       rt        j!                  d«       d | _        | j*                  �t-        d«      | j*                  ‚| j/                  «        t$        j1                  «       | _        t$        j5                  «        d | _        d | _        y )	Nró   rð   Fç      @©Útimeoutz1CUPTI monitor flush thread did not stop within 5sz2CUPTI monitor worker thread did not stop within 5szCUPTI monitor worker failed)rÃ   rÿ   r½   ró   Ú!_CUPTI_ACTIVITY_FLAG_FLUSH_FORCEDÚreversedrI   rÆ   rð   r"  rÉ   rÅ   rË   ÚjoinÚis_aliveÚloggerÚwarningrÈ   r	  Ú_cupti_monitor_shutdown_buffersrÊ   rÌ   rs   Ú_close_outputsÚ _cupti_monitor_allocated_buffersrÝ   r  rÖ   r×   )râ   Úactivitys     r,   ÚstopzCuptiMonitor.stopÕ  s¨  € Ø�}Š}ØØ�‰Ø�I‰I×+Ñ+Ô,MÓNØ#ô	
ô !¤ t×'?Ñ'?Ó!@ÓAò 	ˆHØ�K‰KØ—	‘	×.Ñ.¨xÓ8Ø&õð	ð
 	× Ñ ×&Ñ&Ô(ØˆŒØ×Ñ×ÑÔØ×ÑÐ)Ø×Ñ×#Ñ#¨CÐ#Ô0Ø×!Ñ!×*Ñ*Ô,Ü—‘ÐRÔSØ!%ˆDÔØ×Ñ×ÑÔä×4Ñ4Ô6Ø×ÑÐ*Ø×Ñ×$Ñ$¨SÐ$Ô1Ø×"Ñ"×+Ñ+Ô-Ü—‘ÐSÔTØ"&ˆDÔØ×ÑÐ)ÜÐ<Ó=À4×CUÑCUÐUØ×ÑÔÜ(4×(UÑ(UÓ(WˆÔ%Ü×1Ñ1Ô3Ø#ˆÔØ#'ˆÕ r.   F©Úforcedc               ón   — |rt         nd}| j                  | j                  j                  |«      d«       y )Nr   ró   )r-  rÿ   r½   ró   )râ   r9  Úflags      r,   ÚflushzCuptiMonitor.flushù  s*   € Ù4:Õ0ÀˆØ�‰�D—I‘I×3Ñ3°DÓ9Ð;RÕSr.   c                ó„   — |dk(  ry| j                   €|S t        | j                   j                  t        |«      «      «      S )Nr   )rÖ   r3   Ú
to_unix_ns)râ   r}   s     r,   r  zCuptiMonitor._convert_timeý  s=   € Ø�AŠ:ØØ×ÑÐ'ØˆLÜ�4×'Ñ'×2Ñ2´3°u³:Ó>Ó?Ð?r.   c                ó  — g }|D ]y  }|| j                   v rŒ| j                  | j                  j                  |«      d«       | j	                  |«       | j                   j                  |«       |j                  |«       Œ{ t        |«      S )Nrï   )rÆ   rÿ   r½   rï   Ú_apply_activity_filtersÚaddÚappendrI   )râ   r¶   Únewly_enabledr6  s       r,   r(  zCuptiMonitor.enable_activities  s‚   € ØˆØ"ò 	+ˆHØ˜4×3Ñ3Ñ3ØØ�K‰K˜Ÿ	™	×5Ñ5°hÓ?ÐAVÔWØ×(Ñ(¨Ô2Ø×$Ñ$×(Ñ(¨Ô2Ø× Ñ  Õ*ð	+ô �]Ó#Ð#r.   c                ó¼   — |D ]W  }|| j                   vrŒ| j                  | j                  j                  |«      d«       | j                   j	                  |«       ŒY y )Nrð   )rÆ   rÿ   r½   rð   Úremove)râ   r¶   r6  s      r,   Údisable_activitieszCuptiMonitor.disable_activities  sY   € Ø"ò 	6ˆHØ˜t×7Ñ7Ñ7ØØ�K‰KØ—	‘	×.Ñ.¨xÓ8Ø&ôð ×$Ñ$×+Ñ+¨HÕ5ñ	6r.   c                ó`  — |t         k(  rMt        | j                  d«      r7t        D ].  }| j	                  | j                  j                  |d«      d«       Œ0 |t        k(  rOt        | j                  d«      r8t        D ].  }| j	                  | j                  j                  |d«      d«       Œ0 y y y )Nrå   r   ræ   )	r   rñ   r½   r    rÿ   rå   r   r!   ræ   )râ   r6  r6   s      r,   r@  z$CuptiMonitor._apply_activity_filters  s¨   € ØÔ3Ò3¼Ø�I‰IÐ6ô9
ô 0ò �Ø—‘Ø—I‘I×;Ñ;¸DÀ!ÓDØ3õðð
 Ô2Ò2´wØ�I‰IÐ5ô8
ô /ò �Ø—‘Ø—I‘I×:Ñ:¸4ÀÓCØ2õñð8
Ð2r.   c                ój  — | j                   st        d«      ‚| j                  rt        d«      ‚t        |xs
 t	        «       «      }| j                  «        | j                  |«      }| j                  5  g | _        d| _        d| _	        || _
        d| _        i | _        d d d «       |S # 1 sw Y   |S xY w)Nz9CUPTI monitor must be started before prepare_trace_windowz"A trace window is already preparedTFr   )rÃ   rs   rÎ   rI   rk   r'  r(  rÀ   rÏ   rÍ   rÐ   rÑ   rÒ   ©râ   r¶   rC  s      r,   Úprepare_trace_windowz!CuptiMonitor.prepare_trace_window+  s¸   € ð �}Š}ÜØKóð ð ×&Ò&ÜÐCÓDÐDÜ˜:ÒKÔ)IÓ)KÓLˆ
Ø×(Ñ(Ô*Ø×.Ñ.¨zÓ:ˆØ�Z‰Zñ 	5Ø(*ˆDÔ%Ø*.ˆDÔ'Ø(-ˆDÔ%Ø2?ˆDÔ/Ø*+ˆDÔ'Ø24ˆDÔ/÷	5ð Ð÷	5ð Ðús   Á3+B(Â(B2c                ó¶  — | j                   st        d«      ‚| j                  st        d«      ‚| j                  rt        d«      ‚| j	                  «        | j                  d¬«       | j                  d¬«       | j                  5  g | _        | j                  t        t        j                  «       «      «      | _        d| _        d d d «       y # 1 sw Y   y xY w)	Nz7CUPTI monitor must be started before start_trace_windowúNo prepared trace windowz A trace window is already activeFr8  r*  ©Ú	timeout_sT)rÃ   rs   rÎ   rÍ   r'  r<  Ú_wait_for_processing_idlerÀ   rÏ   r  r3   r	  r  rÑ   rý   s    r,   Ústart_trace_windowzCuptiMonitor.start_trace_window@  sÂ   € Ø�}Š}ÜØIóð ð ×*Ò*ÜÐ9Ó:Ð:Ø×$Ò$ÜÐAÓBÐBØ×(Ñ(Ô*Ø�
‰
˜%ˆ
Ô Ø×&Ñ&°Ð&Ô5Ø�Z‰Zñ 	-Ø(*ˆDÔ%Ø*.×*<Ñ*<Ü”L×6Ñ6Ó8Ó9ó+ˆDÔ'ð )-ˆDÔ%÷	-÷ 	-ñ 	-ús   ÂA CÃCc                óH   — | j                  |«      }| j                  «        |S r1   )rJ  rP  rI  s      r,   Úbegin_trace_windowzCuptiMonitor.begin_trace_windowS  s&   € ð ×1Ñ1°*Ó=ˆØ×ÑÔ!ØÐr.   c           	     óÐ  — | j                   st        d«      ‚| j                  «        | j                  5  | j                  }| j
                  }t        | j                  «      }| j                  j                  «       D ��ci c]  \  }}|t        |«      “Œ }}}d d d «       | j                  «       | j                  d¬«       | j                  d¬«       | j                  5  t        | j                  «      }g | _        d| _         d| _        d| _        d| _        i | _        d d d «       | j!                  «      t        |«      |d	œS c c}}w # 1 sw Y   Œ¹xY w# 1 sw Y   Œ<xY w)
NrL  Tr8  r*  rM  Fr   r   )ÚeventsÚextra_activitiesÚuser_annotationsÚthread_resource_mapÚstart_ns)rÎ   rs   r'  rÀ   rÐ   rÑ   ÚdictrÒ   rÔ   ÚitemsrF  r<  rO  ÚlistrÏ   rÍ   Ú_filter_trace_window_events)râ   ÚextrarX  rV  ÚpidÚmappingrW  rT  s           r,   Úend_trace_windowzCuptiMonitor.end_trace_windowZ  sY  € Ø×*Ò*ÜÐ9Ó:Ð:Ø×(Ñ(Ô*Ø�Z‰Zñ 	Ø×7Ñ7ˆEØ×2Ñ2ˆHÜ# D×$GÑ$GÓHÐà7;×7PÑ7P×7VÑ7VÓ7X÷#Ù'3 s¨G�”T˜'“]Ñ"ð#Ðñ #÷		ð 	×Ñ Ô&Ø�
‰
˜$ˆ
ÔØ×&Ñ&°Ð&Ô5Ø�Z‰Zñ 	5Ü˜$×3Ñ3Ó4ˆFØ(*ˆDÔ%Ø*/ˆDÔ'Ø(-ˆDÔ%Ø24ˆDÔ/Ø*+ˆDÔ'Ø24ˆDÔ/÷	5ð ×6Ñ6°v¸xÓHÜ $ U£Ø 0Ø#6Ø ñ
ð 	
ùó#÷		ð 	ú÷	5ð 	5ús+   ´AEÁ?E
ÂEÃ!A EÅ
EÅEÅE%c                óÎ  — | j                   5  | j                  t        | j                  «      | j                  | j                  rt
        j                  «       n| j                  t
        j                  «       | j                  dz  | j                  | j                  t        | j                  «      | j                  | j                  | j                   dœcd d d «       S # 1 sw Y   y xY w)Ni   )Ústartedr¶   Úbuffers_completedÚbuffers_allocatedÚbuffers_pendingÚvalid_total_mbÚdropped_recordsÚraw_chunks_writtenr»   Útrace_window_preparedÚtrace_window_activeÚtrace_window_start_ns)rÀ   rÃ   r[  rÆ   rÜ   r	  r5  rÝ   Ú_cupti_monitor_pending_buffersrÞ   rà   rá   Ústrr»   rÎ   rÍ   rÑ   rý   s    r,   ÚstatszCuptiMonitor.statsx  s²   € Ø�Z‰Zñ 	àŸ=™=Ü" 4×#;Ñ#;Ó<Ø%)×%<Ñ%<à—=’=ô &2×%RÑ%RÔ%Tà×2Ñ2Ü#/×#NÑ#NÓ#PØ"&×"3Ñ"3°{Ñ"CØ#'×#8Ñ#8Ø&*×&;Ñ&;Ü! $§/¡/Ó2Ø)-×)DÑ)DØ'+×'@Ñ'@Ø)-×)DÑ)Dñ÷	÷ 	ò 	ús   �CCÃC$c                ó¶  — | j                  «        | j                  5  | j                  r| j                  rt        | j
                  vr
	 d d d «       y | j                  }| xj                  dz  c_        || j                  |<   d d d «       | j                  | j                  j                  t        t        j                  «      «      d«       |S # 1 sw Y   ŒNxY w)Nr   rú   )r'  rÀ   rÃ   rÎ   r   rÆ   rÓ   rÒ   rÿ   r½   rú   r   ry   rù   )râ   r°   Úexternal_ids      r,   Úpush_user_annotationz!CuptiMonitor.push_user_annotation‹  sÉ   € Ø×(Ñ(Ô*Ø�Z‰Zñ 
	Dà—M’MØ×2Ò2Ü<Ø×/Ñ/ñ0ð ÷
	Dð 
	Dð ×5Ñ5ˆKØ×'Ò'¨1Ñ,Õ'Ø?CˆD×/Ñ/°Ñ<÷
	Dð 	�‰Ø�I‰I×<Ñ<Ü/´·±ÀÓ1Móð 5ô		
ð Ð÷#
	Dð 
	Dús   �,CÁ0CÃCc                ó¦  — | j                  «        | j                  5  | j                  r| j                  rt        | j
                  vr
	 d d d «       y 	 d d d «       t        j                  «       }| j                  | j                  j                  t        t        j                  |«      «      d«       t        |j                  «      S # 1 sw Y   ŒuxY w)Nrû   )r'  rÀ   rÃ   rÎ   r   rÆ   ry   rù   rÿ   r½   rû   r   r   r3   r}   )râ   Úlast_ids     r,   Úpop_user_annotationz CuptiMonitor.pop_user_annotation   s¯   € Ø×(Ñ(Ô*Ø�Z‰Zñ 	à—M’MØ×2Ò2Ü<Ø×/Ñ/ñ0ð ÷	ð 	ð0÷		ô —/‘/Ó#ˆØ�‰Ø�I‰I×;Ñ;Ü/´·±¸gÓ1Fóð 4ô		
ô �7—=‘=Ó!Ð!÷	ð 	ús   �,CÃCc                óF   — t        | j                  t        z  «      | _        y r1   )r—   r»   Ú_RAW_BUFFER_FILErÛ   rý   s    r,   r   zCuptiMonitor._open_outputs³  s   € Ü2°4·?±?ÔEUÑ3UÓVˆÕr.   c                ó`   — | j                   �"| j                   j                  «        d | _         y y r1   )rÛ   Úcloserý   s    r,   r4  zCuptiMonitor._close_outputs¶  s-   € Ø×ÑÐ+Ø× Ñ ×&Ñ&Ô(Ø#'ˆDÕ ð ,r.   c                ó.  — t         | j                  «       t        «       t        t        «      d| j
                  | j                  | j                  | j                  t        | j                  dz  «      dt        | j                  «      t        «       dœ}t        |«      }t        | j                   t"        z  d«      5 }|j%                  t&        j)                  t*        t         t-        |«      «      «       |j%                  |«       d d d «       y # 1 sw Y   y xY w)NÚapproximate_clockg    eÍÍAT)Úmeta_versionÚcupti_versionÚcuda_versionÚhes_enabledÚtimestamp_modeÚsession_start_unix_nsÚsession_start_approx_nsÚ session_start_calibrated_unix_nsr·   Úflush_period_nsÚraw_buffer_dumpr¶   Úlibcupti_pathÚwb)Ú_META_VERSIONr  r‡   ÚboolÚ_hes_enabledrØ   rÙ   rÚ   r·   r3   r¸   r[  r¶   r-   r‘   r•   r»   Ú
_META_FILEÚwriteÚ_META_HEADERÚpackÚ_META_MAGICÚlen)râ   Úmetar�   Úfps       r,   r!  zCuptiMonitor._write_meta_file»  sÖ   € ä)Ø!×0Ñ0Ó2Ü0Ó2Ü¤Ó-Ø1Ø%)×%@Ñ%@Ø'+×'DÑ'DØ04×0VÑ0VØ×+Ñ+Ü" 4×#6Ñ#6¸Ñ#<Ó=Ø#Ü˜tŸ™Ó/Ü0Ó2ñ
ˆô # 4Ó(ˆÜ�$—/‘/¤JÑ.°Ó5ð 	¸Ø�H‰H”\×&Ñ&¤{´MÄ3ÀwÃ<ÓPÔQØ�H‰H�WÔ÷	÷ 	ñ 	ús   Â9A	DÄDc                ó    — t        «       \  }}}| j                  5  || j                  j                  |i «      |<   d d d «       y # 1 sw Y   y xY wr1   )r�   rÀ   rÔ   Ú
setdefault)râ   r^  r€   Úsys_tids       r,   r'  z(CuptiMonitor._record_current_thread_infoÐ  sN   € Ü#AÓ#CÑ ˆˆZ˜Ø�Z‰Zñ 	PØHOˆD×%Ñ%×0Ñ0°°bÓ9¸*ÑE÷	P÷ 	Pñ 	Pús   › AÁAc                óH  — 	 | j                   j                  | j                  «      sE| j                  r| j	                  d¬«       | j                   j                  | j                  «      sŒDy y # t
        $ r+}|| _        | j                  j                  «        Y d }~y d }~ww xY w)NFr8  )	rÉ   Úwaitr¸   rÃ   r<  ÚBaseExceptionrÌ   rÈ   rÅ   )râ   rf   s     r,   r&  zCuptiMonitor._flush_loopÕ  s�   € ð	$Ø×&Ñ&×+Ñ+¨D×,?Ñ,?Ô@Ø—=’=Ø—J‘J e�JÔ,ð ×&Ñ&×+Ñ+¨D×,?Ñ,?×@øô ò 	$Ø!$ˆDÔØ×Ñ×!Ñ!×#Ñ#ûð	$ús   ‚A(A- Á-	B!Á6!BÂB!c                óÜ  — 	 	 t         j                  «       }|€y |\  }}}}}| j                  5  | xj                  dz  c_        | xj                  dz  c_        | xj
                  t        |«      z  c_        d d d «       	 | j                  t        |«      t        |«      t        |«      t        |«      «       t         j                  t        |«      «       | j                  5  | xj                  dz  c_        | j                  j                  «        d d d «       | j                  «        �Œ)# 1 sw Y   Œ¶xY w# 1 sw Y   Œ'xY w# t         j                  t        |«      «       | j                  5  | xj                  dz  c_        | j                  j                  «        d d d «       w # 1 sw Y   w xY wxY w# t        $ r+}|| _        | j                  j                  «        Y d }~y d }~ww xY w)Nr   )r	  Ú_cupti_monitor_get_completedrÀ   rÕ   rÜ   rÞ   r3   Ú_process_completed_bufferÚ_cupti_monitor_return_bufferrÂ   Ú
notify_allÚ_maybe_warn_backpressurer—  rÌ   rÈ   rÅ   )râ   ÚitemÚ
buffer_ptrÚ
valid_sizerv   Ú	stream_idÚ_layout_epochrf   s           r,   r$  zCuptiMonitor._worker_loopÞ  s   € ð	$Øô $×@Ñ@ÓB�Ø�<Øð IMÑE�
˜J¨¨Y¸Ø—Z‘Zñ 9Ø×-Ò-°Ñ2Õ-Ø×+Ò+¨qÑ0Õ+Ø×%Ò%¬¨Z«Ñ8Õ%÷9ð;Ø×2Ñ2Ü˜C›¤# i£.´#°j³/Ä3ÀzÃ?ôô !×=Ñ=¼cÀ*»oÔNØ×.Ñ.ñ ;Ø×1Ò1°QÑ6Õ1Ø×-Ñ-×8Ñ8Ô:÷;ð ×-Ñ-Ô/ñ- ÷9ð 9ú÷;ð ;ûô !×=Ñ=¼cÀ*»oÔNØ×.Ñ.ñ ;Ø×1Ò1°QÑ6Õ1Ø×-Ñ-×8Ñ8Ô:÷;÷ ;ñ ;þô ò 	$Ø!$ˆDÔØ×Ñ×!Ñ!×#Ñ#ûð	$ús|   ‚F7 šF7 ®A	D,Á7F7 Â 8E Â8*F7 Ã"0D8ÄF7 Ä,D5Ä1F7 Ä8EÄ=F7 Å+F4Å/0F(Æ	F4Æ(F1Æ-F4Æ4F7 Æ7	G+Ç !G&Ç&G+c                ó”   — | j                   ry t        j                  «       }|t        k\  rd| _         t        j                  d|«       y y )NTz CUPTI monitor allocated %d activity buffers; the processing worker is not keeping up with CUPTI, so memory use will grow. Reduce traced activity or buffer size.)rß   r	  r5  Ú_OUTSTANDING_WARN_THRESHOLDr1  r2  )râ   Ú	allocateds     r,   r�  z%CuptiMonitor._maybe_warn_backpressureû  sH   € Ø×#Ò#ØÜ ×AÑAÓCˆ	ØÔ3Ò3Ø'+ˆDÔ$Ü�N‰Nð9ð õ	ð 4r.   c                ó^  — t        j                   «       |z   }| j                  5  	 t        j                  «       dk(  r| j                  dk(  r
	 d d d «       y |t        j                   «       z
  }|dk  r
	 d d d «       y | j                  j                  t        d|«      ¬«       Œ}# 1 sw Y   y xY w)Nr   gš™™™™™©?r+  )r  rÂ   r	  rl  rÕ   r–  Úmin)râ   rN  ÚdeadlineÚ	remainings       r,   rO  z&CuptiMonitor._wait_for_processing_idle  s¬   € Ü—9‘9“; Ñ*ˆØ×"Ñ"ñ 
	IØä ×?Ñ?ÓAÀQÒFØ×1Ñ1°QÒ6à÷
	Ið 
	Ið %¤t§y¡y£{Ñ2�	Ø ’>Ø÷
	Ið 
	Ið ×%Ñ%×*Ñ*´3°t¸YÓ3GÐ*ÔHð ÷
	Ið 
	Iús   ¤)B#ÁB#Á<'B#Â#B,c                óÔ  — | j                   s°t        j                  «       }| j                  j	                  t        j
                  |«      t        j                  |«      t        j                  |«      «      }|t        k(  r(| xj                  t        |j                  «      z  c_	        | j                  ||||«       y t        j
                  «       }	 | j                  j                  t        j
                  |«      t        j                  |«      t        j                  |«      «      }|t        k(  ri|j                  }|€t        d«      ‚| j                  |«      }	|	�<| j                   5  | j"                  r| j$                  j'                  |	«       d d d «       ŒÉ|t(        k(  rnt+        d| j-                  |«      › �«      ‚t        j                  «       }| j                  j	                  t        j
                  |«      t        j                  |«      t        j                  |«      «      }|t        k(  r)| xj                  t        |j                  «      z  c_	        y y # 1 sw Y   ŒÎxY w)Nz+CUPTI returned null activity record pointerz'cuptiActivityGetNextRecord failed with )rÎ   ry   rô   r½   rö   rí   rè   r   r  rà   r3   r}   Ú_write_raw_bufferrõ   rs   Ú_decode_recordrÀ   rÍ   rÏ   rB  Ú_CUPTI_ERROR_MAX_LIMIT_REACHEDr™   r  )
râ   rv   r¡  rŸ  r   Údroppedru   Ú
record_ptrÚrecord_addrÚtrace_events
             r,   rš  z&CuptiMonitor._process_completed_buffer  sì  € ð ×*Ò*Ü—o‘oÓ'ˆGØ—‘×<Ñ<Ü—‘ Ó$¤f§o¡o°iÓ&@Ä&Ç,Á,ÈwÓBWóˆBð ”^Ò#Ø×%Ò%¬¨W¯]©]Ó);Ñ;Õ%Ø×"Ñ" 3¨	°:¸zÔJØä—_‘_Ó&ˆ
ØØ—‘×5Ñ5Ü—‘ 
Ó+Ü—‘ 
Ó+Ü—‘˜ZÓ(óˆBð
 ”^Ò#Ø(×.Ñ.�ØÐ&Ü&Ð'TÓUÐUØ"×1Ñ1°+Ó>�ØÐ*ØŸ™ñ JØ×4Ò4Ø ×5Ñ5×<Ñ<¸[ÔI÷Jð ØÔ3Ò3ØÜØ9¸$×:MÑ:MÈbÓ:QÐ9RÐSóð ô —/‘/Ó#ˆØ�Y‰Y×8Ñ8Ü�O‰O˜CÓ ¤&§/¡/°)Ó"<¼f¿l¹lÈ7Ó>Só
ˆð ”ÒØ×!Ò!¤S¨¯©Ó%7Ñ7Ö!ð  ÷Jð Jús   Å)(IÉI'c                ó&  — |dk(  r|S t        «       }g }g }g }|D ]Þ  }|j                  d«      }|dv rct        |j                  dd«      «      }	|	|k\  rB|j                  |«       t        |j                  dd«      «      }
|
dk7  r|j	                  |
«       Œ{|dv r|j                  |«       Œ‘|dk(  r|j                  |«       Œ¨t        |j                  dd«      «      }	|	dk(  s|	|k\  sŒÎ|j                  |«       Œà |D ]3  }t        |j                  dd«      «      }
|
|v sŒ#|j                  |«       Œ5 |D ]Y  }t        |j                  dd«      «      }
t        |j                  dd«      «      }	|
|v s|
dk(  sŒC|	|k\  sŒI|j                  |«       Œ[ |S )Nr   Úkind>   rt   Úcuda_runtimerX  r£   >   ÚkernelÚ
gpu_memcpyÚ
gpu_memsetÚexternal_correlation)rÅ   r'   r3   rB  rA  )râ   rT  rX  Úretained_correlationsÚretained_eventsÚpending_gpu_eventsÚpending_external_eventsÚeventr³  Úevent_start_nsr£   s              r,   r\  z(CuptiMonitor._filter_trace_window_eventsA  s·  € ð �qŠ=ØˆMä*-«%ÐØ02ˆØ35ÐØ8:Ðàò 	.ˆEØ—9‘9˜VÓ$ˆDØÐ6Ñ6Ü!$ U§Y¡Y¨z¸1Ó%=Ó!>�Ø! XÒ-Ø#×*Ñ*¨5Ô1Ü%(¨¯©Ð3CÀQÓ)GÓ%H�NØ%¨Ò*Ø-×1Ñ1°.ÔAØàÐ=Ñ=Ø"×)Ñ)¨%Ô0ØàÐ-Ò-Ø'×.Ñ.¨uÔ5Øä  §¡¨:°qÓ!9Ó:ˆNØ Ò" n¸Ó&@Ø×&Ñ& uÕ-ð+	.ð. -ò 	.ˆEÜ  §¡Ð+;¸QÓ!?Ó@ˆNØÐ!6Ò6Ø×&Ñ& uÕ-ð	.ð
 (ò 	.ˆEÜ  §¡Ð+;¸QÓ!?Ó@ˆNÜ  §¡¨:°qÓ!9Ó:ˆNØÐ!6Ñ6Ø !Ó#¨¸(Ó(Bà×&Ñ& uÕ-ð	.ð Ðr.   c                ó~  — t        «       }t        t        j                  j	                  |«      j
                  «      }|t        k(  �r7|j                  j                  |d¬«      }| j                  t        |j                  «      t        t        |j                  «      «      }t        |j                  «      }| j                  t        |j                   «      «      }| j                  t        |j"                  «      «      }dt        |j$                  «      t        |j&                  «      t        |j(                  «      t        |j                  «      t        |j                  «      t        |j*                  «      ||||dœS |t,        k(  �r»|j.                  j                  |d¬«      }| j                  t        |j                  «      t0        t        |j                  «      «      }| j                  t        |j                   «      «      }| j                  t        |j"                  «      «      }i dd“dt        |j$                  «      “dt        |j&                  «      “d	t        |j(                  «      “d
t        |j                  «      “dt        |j2                  «      “dt        |j                  «      “dt        |j*                  «      “d|“d|“dt        |j4                  «      “dt        |j6                  «      “dt        |j8                  «      “dt        |j:                  «      “dt        |j<                  «      “d|“dd“S |t>        k(  �rr|j@                  j                  |d¬«      }| j                  t        |j                  «      tB        t        |j                  «      «      }| j                  t        |j                   «      «      }| j                  t        |j"                  «      «      }dt        |j$                  «      t        |j&                  «      t        |j(                  «      t        |j                  «      t        |j                  «      t        |j*                  «      ||t        |j4                  «      t        |j
                  «      t        |jD                  «      t        |j<                  «      |ddœS |tF        tH        fv rñ|jJ                  j                  |d¬«      }| j                  t        |j                   «      «      }| j                  t        |j"                  «      «      }|tF        k(  rdndt        |jL                  «      ||t        |jN                  «      t        |jP                  «      t        |j                  «      t        |jR                  «      dt        |jL                  «      › �dœ	S |tT        k(  r^|jV                  j                  |d¬«      }dt        |jX                  «      t        |jZ                  «      t        |j                  «      dd œS |t\        k(  rÂ|j^                  j                  |d¬«      }| j                  t        |j                   «      «      }| j                  t        |j"                  «      «      }t        |j`                  «      }	d!|	t        |jb                  «      d"||t        |j                  «      td        jg                  |	d#|	› �«      d$œS |th        k(  r¿|jj                  j                  |d¬«      }| j                  t        |jl                  «      «      }
d%t        |j$                  «      t        |j&                  «      t        |j(                  «      t        |jn                  «      t        |j                  «      |
t        |jp                  «      d%d&œ	S |tr        k(  rý|jt                  j                  |d¬«      }| j                  t        |j                   «      «      }| j                  t        |j"                  «      «      }t        |jv                  «      }d'|||t        |j                  «      t        |j&                  «      t        |j(                  «      t        |jx                  «      t        |jp                  «      t        |jR                  «      d(|› �d)œS y )*NT)Úreadonlyrµ  )r³  Ú	device_idÚ
context_idr¡  r£   r¡   Úgraph_idrX  Úend_nsÚ
annotationr°   r³  r¶  rÁ  rÂ  r¡  r£   Úruntime_correlation_idr¡   rÃ  rX  rÄ  ÚbytesÚ	copy_kindÚsrc_kindÚdst_kindÚflagsrÅ  r°   ÚMemcpyr·  ÚMemset)r³  rÁ  rÂ  r¡  r£   r¡   rÃ  rX  rÄ  rÇ  r}   Úmemory_kindrË  rÅ  r°   r´  rt   Úcbid_)	r³  r6   rX  rÄ  Ú
process_idÚ	thread_idr£   Úreturn_valuer°   r¸  )r³  Úexternal_kindrp  r£   r°   Úoverheadr   Ú	overhead_)r³  Úoverhead_kindÚobject_kindÚ	object_idrX  rÄ  r£   r°   Ú
cuda_event)	r³  rÁ  rÂ  r¡  Úevent_idr£   Údevice_timestamp_nsÚcuda_event_sync_idr°   Ú	cuda_syncÚsync_)r³  Ú	sync_typerX  rÄ  r£   rÂ  r¡  rÚ  rÜ  rÒ  r°   )=rg   r3   ry   rë   Úfrom_addressr}   r   ÚActivityKernel11Úfrom_ptrr¹   r¡   Ú_RECORD_KIND_KERNELr£   r²   r°   r  r%  ÚendrÁ  rÂ  r¡  rÃ  r   ÚActivityMemcpy6Ú_RECORD_KIND_MEMCPYrÆ  rÇ  rÈ  rÉ  rÊ  Úflags_r   ÚActivityMemset4Ú_RECORD_KIND_MEMSETrÎ  r   r   ÚActivityAPIr6   rÐ  rÑ  rÒ  r   ÚActivityExternalCorrelationrÓ  rp  r   ÚActivityOverhead3rÖ  r×  Ú_OVERHEAD_KIND_NAMESr'   r   ÚActivityCudaEvent2Údevice_timestamprÚ  rÜ  r   ÚActivitySynchronization2ÚtypeÚcuda_event_id)râ   r°  Úccr³  ÚrecordrÅ  Úkernel_namerX  rÄ  rÖ  Úevent_tsrß  s               r,   r¬  zCuptiMonitor._decode_recordr  s–  € ô #Ó$ˆÜ”6—<‘<×,Ñ,¨[Ó9×?Ñ?Ó@ˆØÔ9Ó9Ø×(Ñ(×1Ñ1°+ÈÐ1ÓMˆFØ×1Ñ1Ü�F×(Ñ(Ó)Ü#Ü�F×)Ñ)Ó*óˆJô
 +¨6¯;©;Ó7ˆKØ×)Ñ)¬#¨f¯l©lÓ*;Ó<ˆHØ×'Ñ'¬¨F¯J©J«Ó8ˆFà Ü  ×!1Ñ!1Ó2Ü! &×"3Ñ"3Ó4Ü  ×!1Ñ!1Ó2Ü"% f×&;Ñ&;Ó"<Ü!$ V×%9Ñ%9Ó!:Ü §¡Ó0Ø$Ø Ø(Ø#ñð ð Ô.Ó.Ø×'Ñ'×0Ñ0°ÀtÐ0ÓLˆFØ×1Ñ1Ü�F×(Ñ(Ó)Ü#Ü�F×)Ñ)Ó*óˆJð
 ×)Ñ)¬#¨f¯l©lÓ*;Ó<ˆHØ×'Ñ'¬¨F¯J©J«Ó8ˆFðØ˜ðàœS ×!1Ñ!1Ó2ðð œc &×"3Ñ"3Ó4ðð œS ×!1Ñ!1Ó2ð	ð
 !¤# f×&;Ñ&;Ó"<ðð )¬#¨f×.KÑ.KÓ*Lðð  ¤ V×%9Ñ%9Ó!:ðð œC §¡Ó0ðð ˜Hðð ˜&ðð œ˜VŸ\™\Ó*ðð œS ×!1Ñ!1Ó2ðð œC §¡Ó0ðð œC §¡Ó0ðð œ˜VŸ]™]Ó+ðð  ˜jð!ð" ˜ð#ð ð( Ô.Ó.Ø×'Ñ'×0Ñ0°ÀtÐ0ÓLˆFØ×1Ñ1Ü�F×(Ñ(Ó)Ü#Ü�F×)Ñ)Ó*óˆJð
 ×)Ñ)¬#¨f¯l©lÓ*;Ó<ˆHØ×'Ñ'¬¨F¯J©J«Ó8ˆFà$Ü  ×!1Ñ!1Ó2Ü! &×"3Ñ"3Ó4Ü  ×!1Ñ!1Ó2Ü"% f×&;Ñ&;Ó"<Ü!$ V×%9Ñ%9Ó!:Ü §¡Ó0Ø$Ø Ü˜VŸ\™\Ó*Ü˜VŸ\™\Ó*Ü" 6×#5Ñ#5Ó6Ü˜VŸ]™]Ó+Ø(Ø ñð ð$ Ô0Ô2MÐNÑNØ—^‘^×,Ñ,¨[À4Ð,ÓHˆFØ×)Ñ)¬#¨f¯l©lÓ*;Ó<ˆHØ×'Ñ'¬¨F¯J©J«Ó8ˆFð Ô7Ò7ñ 'à"Ü˜FŸK™KÓ(Ø$Ø Ü! &×"3Ñ"3Ó4Ü  ×!1Ñ!1Ó2Ü"% f×&;Ñ&;Ó"<Ü # F×$7Ñ$7Ó 8Ø¤ F§K¡KÓ 0Ð1Ð2ñð ð Ô<Ò<Ø×3Ñ3×<Ñ<¸[ÐSWÐ<ÓXˆFà.Ü!$ V×%9Ñ%9Ó!:Ü" 6×#5Ñ#5Ó6Ü"% f×&;Ñ&;Ó"<Ø.ñð ð Ô0Ò0Ø×)Ñ)×2Ñ2°;ÈÐ2ÓNˆFØ×)Ñ)¬#¨f¯l©lÓ*;Ó<ˆHØ×'Ñ'¬¨F¯J©J«Ó8ˆFÜ × 4Ñ 4Ó5ˆMà"Ø!.Ü" 6×#5Ñ#5Ó6ØØ$Ø Ü"% f×&;Ñ&;Ó"<Ü,×0Ñ0Ø!Ø ˜Ð/óñð ð Ô2Ò2Ø×*Ñ*×3Ñ3°KÈ$Ð3ÓOˆFØ×)Ñ)¬#¨f×.EÑ.EÓ*FÓGˆHà$Ü  ×!1Ñ!1Ó2Ü! &×"3Ñ"3Ó4Ü  ×!1Ñ!1Ó2Ü §¡Ó0Ü"% f×&;Ñ&;Ó"<Ø'/Ü&)¨&×*CÑ*CÓ&DØ$ñ
ð 
ð Ô7Ò7Ø×0Ñ0×9Ñ9¸+ÐPTÐ9ÓUˆFØ×)Ñ)¬#¨f¯l©lÓ*;Ó<ˆHØ×'Ñ'¬¨F¯J©J«Ó8ˆFÜ˜FŸK™KÓ(ˆIà#Ø&Ø$Ø Ü"% f×&;Ñ&;Ó"<Ü! &×"3Ñ"3Ó4Ü  ×!1Ñ!1Ó2Ü × 4Ñ 4Ó5Ü&)¨&×*CÑ*CÓ&DÜ # F×$7Ñ$7Ó 8Ø 	˜{Ð+ñð ð r.   c           
     óÞ  — | j                   €t        d«      ‚t        t        j	                  «       «      }| j                  |«      }t        j                  t        t        | j                  t        |«      t        |«      t        |«      ||«      }| j                   j                  |«       | j                   j                  t        j                  ||«      «       | xj                  dz  c_
        y )Nzraw buffer file is not openr   )rÛ   rs   r3   r	  r  r  Ú_RAW_CHUNK_HEADERr�  Ú_RAW_CHUNK_MAGICÚ_RAW_CHUNK_VERSIONrá   r‹  ry   Ú	string_at)râ   rv   r¡  rŸ  r   Ú	approx_nsÚunix_nsÚheaders           r,   r«  zCuptiMonitor._write_raw_buffer   sÁ   € ð ×ÑÐ'ÜÐ<Ó=Ð=Üœ×:Ñ:Ó<Ó=ˆ	Ø×$Ñ$ YÓ/ˆÜ"×'Ñ'ÜÜØ×!Ñ!Ü�	‹NÜ�
‹OÜ�‹HØØó	
ˆð 	×Ñ×"Ñ" 6Ô*Ø×Ñ×"Ñ"¤6×#3Ñ#3°JÀ
Ó#KÔLØ×Ò Ñ"Ör.   )r»   ústr | os.PathLike[str]r¶   úIterable[int] | Noner·   r3   r¸   Úfloatr¹   ú,Callable[[int, int, int], Any | None] | NoneÚreturnÚNone©r  r  )r  r3   )ru   r3   r  rm  )ru   r3   r°   rm  r  r  )r9  rˆ  r  r  )r}   r3   r  r3   )r¶   úIterable[int]r  r   )r¶   r  r  r  )r6  r3   r  r  r1   ©r¶   r   r  r   ©r  údict[str, Any]©r°   rm  r  r   ©r  r   )rN  r  r  r  )
rv   r3   r¡  r3   rŸ  r3   r   r3   r  r  )rT  úlist[dict[str, Any]]rX  r3   r  r  )r°  r3   r  údict[str, Any] | None)&rš   r›   rœ   Ú_DEFAULT_BUFFER_SIZEÚ_DEFAULT_FLUSH_PERIOD_Srã   r¾   r  r  rÿ   r  r  r%  r7  r<  r  r(  rF  r@  rJ  rP  rR  r`  rn  rq  rt  r   r4  r!  r'  r&  r$  r�  rO  rš  r\  r¬  r«  r   r.   r,   r´   r´     s•  „ ð
 ,0Ø/Ø 7ØLPñ7"à*ð7"ð )ð	7"ð
 ð7"ð ð7"ð Jð7"ð 
ó7"ór8>ót"óóOó*ó1ó"óH"(ðH ',õ Tó@ó	$ó6óð& 26ðØ.ðà	óó*-ð( 26ðØ.ðà	óó
ó<ó&ó*"ó&Wó(ó
ó*Pó
$ó$ó:óIð)8Øð)8Ø#&ð)8Ø47ð)8ØEHð)8à	ó)8ðV/Ø*ð/Ø69ð/à	ó/óblð\#Øð#Ø#&ð#Ø47ð#ØEHð#à	ô#r.   r´   úCuptiMonitor | NoneÚ_monitor_singletonFc                 ó  — t         ry t        j                  j                  «       s
t	        «       rt        d«      ‚ddlm}  | j                  d«      d   }|| j                  j                  k7  rt        d|› �«      ‚t        j                  t        «       «      }t        j                  g|j                  _        t        j"                  |j                  _        |j                  d«      }|t&        k7  rt)        d|› �«      ‚da y )Nz>enable_hes_early() must be called before CUDA context creationr   rm   zcuInit failed with rc=r   z*cuptiActivityEnableHWTrace failed with rc=T)r‰  r„   r†   Úis_initializedrw   rs   ro   rn   ÚcuInitrp   rq   ry   r¼   r-   rò   r÷   rê   rë   rì   r  r™   )rt   ru   Úlibs      r,   Úenable_hes_earlyr  ;  sÚ   € åØÜ‡z�z× Ñ Ô"Ô&>Ô&@ÜØLó
ð 	
õ 4à	×	Ñ	˜AÓ	˜qÑ	!€BØ	ˆ[×!Ñ!×.Ñ.Ò.ÜÐ3°B°4Ð8Ó9Ð9ô �+‰+Ô)Ó+Ó
,€CÜ/5¯~©~Ð.>€C×"Ñ"Ô+Ü-3¯\©\€C×"Ñ"Ô*Ø	×	'Ñ	'¨Ó	*€BØ	Œ^ÒÜÐFÀrÀdÐKÓLÐLØ�Lr.   c                 ó   — t         S r1   )r‰  r   r.   r,   Úis_hes_enabledr  V  s   € ÜÐr.   c                 ó   — t         S r1   )r  r   r.   r,   Úget_monitorr  Z  s   € ÜÐr.   rµ   c               ó®   — t         �t        d«      ‚t        | ||||¬«      }|j                  «        |a t        st        j                  t        «       da|S )Nz*CUPTI monitor collection is already activerµ   T)r  rs   r´   r%  Ú_atexit_registeredÚatexitÚregisterÚ_stop_collection_atexit)r»   r¶   r·   r¸   r¹   Úmonitors         r,   Ústart_collectionr!  ^  s[   € ô Ð%ÜÐGÓHÐHÜØØØØ%Ø/ô€Gð ‡M�M„OØ ÐÝÜ�‰Ô/Ô0Ø!ÐØ€Nr.   c                 óh   — t         } | €y 	 | j                  «        | j                  «       d a S # d a w xY wr1   )r  r7  rn  )r   s    r,   Ústop_collectionr#  x  s3   € ä €GØ€Øð"Ø�‰ŒØ�}‰}‹à!Ñø˜TÑús   ‹- ­1c                 ó8   — t         €y t         j                  «       S r1   )r  rn  r   r.   r,   Úmonitor_statsr%  „  s   € ÜÐ!ØÜ×#Ñ#Ó%Ð%r.   c                óN   — t         €t        d«      ‚t         j                  | «      S ©Nz&CUPTI monitor collection is not active)r  rs   rR  ©r¶   s    r,   rR  rR  Š  s'   € ô Ð!ÜÐCÓDÐDÜ×0Ñ0°Ó<Ð<r.   c                óN   — t         €t        d«      ‚t         j                  | «      S r'  )r  rs   rJ  r(  s    r,   rJ  rJ  ’  s'   € ô Ð!ÜÐCÓDÐDÜ×2Ñ2°:Ó>Ð>r.   c                 óN   — t         €t        d«      ‚t         j                  «        y r'  )r  rs   rP  r   r.   r,   rP  rP  š  s    € ÜÐ!ÜÐCÓDÐDÜ×)Ñ)Õ+r.   c                 óL   — t         €t        d«      ‚t         j                  «       S r'  )r  rs   r`  r   r.   r,   r`  r`     s#   € ÜÐ!ÜÐCÓDÐDÜ×.Ñ.Ó0Ð0r.   c                ó:   — t         €y t         j                  | «      S r1   )r  rq  )r°   s    r,   rq  rq  ¦  s   € ÜÐ!ØÜ×2Ñ2°4Ó8Ð8r.   c                 ó8   — t         €y t         j                  «       S r1   )r  rt  r   r.   r,   rt  rt  ¬  s   € ÜÐ!ØÜ×1Ñ1Ó3Ð3r.   c                 ó8   — 	 t        «        y # t        $ r Y y w xY wr1   )r#  r    r   r.   r,   r  r  ²  s   € ðÜÕøÜò Ùðús   ‚
 �	˜)r  rm  )r  r   )r  rˆ  )r  ztuple[int, int, int])r�   r	  r  rÇ  )r–   r   )r¡   r3   r¢   r3   r£   r3   r  z
Any | None)rª   r   r«   rm  r  rm  )r°   rm  r  rm  r  )r  r  )r»   rÿ  r¶   r   r·   r3   r¸   r  r¹   r  r  r´   )r  r  r1   r  r  r
  r  )cÚ
__future__r   r  ry   r�   Úloggingr%   Ústructr{   r  Úcollections.abcr   r   Úpathlibr   Útypingr   r   r„   r®   Ú	_profilerr	  Ú	getLoggerrš   r1  r¤  r(   r  r­  r-  r  r  rŠ  rv  rù  rú  ÚStructrø  rŽ  r‡  rŒ  rã  ræ  ré  rí  r   Ú__annotations__r:   r   r   r   r   r   r   r   r   r   r   r    r!   rV   rX   rZ   r\   r^   r`   rb   rd   r-   rg   ri   rk   rw   r�   r‡   r‘   r—   rs   r™   r¤   r¬   r²   r´   r  r‰  r  r  r  r  r!  r#  r%  rR  rJ  rP  r`  rq  rt  r  r   r.   r,   ú<module>r9     sü  ðæ "ã Û Û Û Û 	Û Û Û ß .Ý ß ã ð �x‰x×!Ñ!€à	ˆ×	Ñ	˜8Ó	$€ð "Ð à8Ð à€Ø!#Ð à$%Ð !à&Ð ØÐ à%€
Ø2Ð àÐ ØÐ Ø!�F—M‘M ,Ó/Ð Ø€Ø€Øˆv�}‰}˜WÓ%€àÐ ØÐ ØÐ ð ØØØØØ/Ø$Ø"Ø&Ø ñÐ ð #%€�Ó $Ø
€Ø.2Ð  Ó 2Ø*.Ð ˜ZÓ .Ø*.Ð ˜ZÓ .Ø*.Ð ˜ZÓ .Ø+/Ð ˜jÓ /Ø59Ð &¨
Ó 9Ø,0Ð ˜zÓ 0Ø.2Ð  Ó 2Ø37Ð $ jÓ 7Ø8<Ð )¨:Ó <Ø+-Ð ˜Ó -Ø*,Ð ˜Ó ,Ø€Ø€Ø€Ø€
Ø"Ð Ø€ØÐ ØÐ ó5ò"JóZóó?ó@ó
$óOó)ô	�,ô 	ð*Øð*Ø%(ð*Ø:=ð*àó*ó*ó÷a#ñ a#ðH +/Ð Ð'Ó .Ø€ØÐ óó6óð (,Ø+Ø3ØHLñØ&ðð %ðð ð	ð
 ðð Fðð óó4	"ó&ð (,ð=Ø$ð=àó=ð (,ð?Ø$ð?àó?ó,ó1ó9ó4ôr.   