Ë
    Z^(hž†  ã                   óp  — 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Zd dlZ	d dl
mZ d dlmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d
dlmZ d
dlmZmZ g d¢Z ej@                  e!«      Z"de#de$fd„Z%de$de#fd„Z&dejN                  de(e$   fd„Z)dejN                  de(e#   fd„Z*dejN                  de(e   fd„Z+i ejX                  dde)f“ejZ                  dde)f“ej\                  dde)f“ej^                  dde+f“ejF                  dde+f“ej`                  dde+f“ejb                  dde+f“ejd                  dde+f“ejf                  d de+f“ejh                  d de+f“ejj                  d!de+f“ejl                  d!de+f“ejH                  d"de+f“ejn                  d"de+f“ejp                  d"de+f“ejr                  d#d$e+f“ejt                  d%d&e*f“ejv                  d%d&e*fejx                  d'd&e*fejz                  d'd&e*fej|                  d(d)e+fej~                  d*d+e*fej€                  d*d+e*fejf                  d d,e+fej‚                  d d,e+fej„                  d d,e+fi	¥ZCd-„ ZD	 	 	 dDd.„ZEdEd/„ZFdFd0„ZGd1„ ZHd2„ ZIdGd3„ZJdGd4„ZKdHd5„ZL	 dId6„ZMdGd7„ZNdJd8„ZOdKd9„ZPd:„ ZQdLd;„ZRd<„ ZSd=„ ZT	 dMd>„ZUdMd?„ZVdNd@„ZWdA„ ZXdB„ ZY	 dNdC„ZZy)Oé    N)ÚAnyÚOptional)Ú
struct_pb2)ÚHistogramProtoÚSummaryÚSummaryMetadata)ÚTensorProto)ÚTensorShapeProto)Ú
layout_pb2)ÚPrCurvePluginData)ÚTextPluginDataé   )Úmake_np)Ú_prepare_videoÚconvert_to_HWC)Úhalf_to_intÚint_to_halfÚhparamsÚscalarÚhistogram_rawÚ	histogramÚmake_histogramÚimageÚimage_boxesÚ
draw_boxesÚ
make_imageÚvideoÚ
make_videoÚaudioÚcustom_scalarsÚtextÚtensor_protoÚpr_curve_rawÚpr_curveÚcompute_curveÚmeshÚfÚreturnc                 ó`   — t        j                  d| «      }t        j                  d|«      d   S )aA  Casts a half-precision float value into an integer.

    Converts a half precision floating point value, such as `torch.half` or
    `torch.bfloat16`, into an integer value which can be written into the
    half_val field of a TensorProto for storage.

    To undo the effects of this conversion, use int_to_half().

    r'   Úir   ©ÚstructÚpackÚunpack)r'   Úbufs     ú]/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/utils/tensorboard/summary.pyr   r   6   s*   € ô �+‰+�c˜1Ó
€CÜ�=‰=˜˜cÓ" 1Ñ%Ð%ó    r*   c                 ó`   — t        j                  d| «      }t        j                  d|«      d   S )z–Casts an integer value to a half-precision float.

    Converts an integer value obtained from half_to_int back into a floating
    point value.

    r*   r'   r   r+   )r*   r/   s     r0   r   r   C   s*   € ô �+‰+�c˜1Ó
€CÜ�=‰=˜˜cÓ" 1Ñ%Ð%r1   Útc                 óv   — | j                  «       j                  «       D �cg c]  }t        |«      ‘Œ c}S c c}w ©N)ÚflattenÚtolistr   )r3   Úxs     r0   Ú_tensor_to_half_valr9   M   s)   € Ø$%§I¡I£K×$6Ñ$6Ó$8Ö9˜qŒK˜�NÒ9Ð9ùÒ9s   ¡6c                 ód   — t        j                  | «      j                  «       j                  «       S r5   )ÚtorchÚview_as_realr6   r7   ©r3   s    r0   Ú_tensor_to_complex_valr>   P   s%   € Ü×Ñ˜aÓ ×(Ñ(Ó*×1Ñ1Ó3Ð3r1   c                 ó>   — | j                  «       j                  «       S r5   )r6   r7   r=   s    r0   Ú_tensor_to_listr@   S   s   € Ø�9‰9‹;×ÑÓÐr1   ÚDT_HALFÚhalf_valÚDT_BFLOAT16ÚDT_FLOATÚ	float_valÚ	DT_DOUBLEÚ
double_valÚDT_INT8Úint_valÚDT_UINT8ÚDT_INT16ÚDT_INT32ÚDT_INT64Ú	int64_valÚDT_COMPLEX32Úscomplex_valÚDT_COMPLEX64ÚDT_BOOLÚbool_valÚDT_COMPLEX128Údcomplex_valÚ
uint32_valc                 óœ   — t        | t        j                  «      s| j                  «       n| }|j                  t        j
                  k(  rdS dS )Nr   éÿ   )Ú
isinstanceÚnpÚndarrayÚnumpyÚdtypeÚuint8)ÚtensorÚ	converteds     r0   Ú_calc_scale_factorra   u   s6   € Ü&0°¼¿¹Ô&D�—‘”È&€IØ—‘¤2§8¡8Ò+ˆ1Ð4°Ð4r1   c	                 ó¶  — ddl m}	m}
 |
j                  «       }|	j	                  | «      }||||f\  }}}}|j                  ||f||f||f||f||fg||¬«       |r|}|j                  |«      \  }}}}||z
  ||z
  }}t        j                  d|z  «      }|j                  |||z
  d|z  z
  f||z   |fg|¬«       |j                  ||z   ||z
  |z
  f|||¬«       | S )Nr   )Ú	ImageDrawÚ	ImageFont)ÚwidthÚfillgš™™™™™©?é   )rf   )rf   Úfont)ÚPILrc   rd   Úload_defaultÚDrawÚlineÚgetbboxrZ   ÚceilÚ	rectangler!   )r   ÚxminÚyminÚxmaxÚymaxÚdisplay_strÚcolorÚ
color_textÚ	thicknessrc   rd   rh   ÚdrawÚleftÚrightÚtopÚbottomÚtext_bottomÚ_leftÚ_topÚ_rightÚ_bottomÚ
text_widthÚtext_heightÚmargins                            r0   Ú_draw_single_boxr…   z   s/  € ÷ )à×!Ñ!Ó#€DØ�>‰>˜%Ó €DØ"&¨¨d°DÐ!9Ñ€Tˆ5�#�vØ‡I�IØ
�ˆ�t˜V�n u¨f o¸¸s°|ÀdÈCÀ[ÐQØØð ô ñ
 Øˆà'+§|¡|°KÓ'@Ñ$ˆˆt�V˜WØ"(¨5¡.°'¸D±.�Kˆ
Ü—‘˜ Ñ+Ó,ˆØ�‰à�{ [Ñ0°1°v±:Ñ=Ð>Ø˜
Ñ" KÐ0ðð ð 	ô 	
ð 	�	‰	Ø�F‰]˜K¨+Ñ5¸Ñ>Ð?ØØØð	 	ô 	
ð €Lr1   c           	      ó†	  ‡ ‡— ddl }ddlm}m}m}m}m}m}	 ddlm	}
m
}m}m}m} ddlm}m}m} t%        ‰ t&        «      s t(        j+                  d«       t-        d«      ‚t%        |t&        «      s t(        j+                  d«       t-        d«      ‚|xs i }t%        |t&        «      st-        d«      ‚|j/                  «       D ]@  \  Š}‰‰ vs&t%        |t0        «      rt3        ˆ ˆfd	„|D «       «      rŒ0t-        d
‰› d‰› d�«      ‚ g } |«       }‰ j/                  «       D �],  \  Š}|€Œ
t%        |t4        t6        f«      r€||j8                  ‰   _        ‰|v r<t=        j>                  |‰   D �cg c]  }t=        j@                  |¬«      ‘Œ c}¬«      }nd}|jC                   |‰|jA                  d«      |¬«      «       Œ t%        |tD        «      r�||j8                  ‰   _#        ‰|v r<t=        j>                  |‰   D �cg c]  }t=        j@                  |¬«      ‘Œ c}¬«      }nd}|jC                   |‰|jA                  d«      |¬«      «       �Œ1t%        |tH        «      r�||j8                  ‰   _%        ‰|v r<t=        j>                  |‰   D �cg c]  }t=        j@                  |¬«      ‘Œ c}¬«      }nd}|jC                   |‰|jA                  d«      |¬«      «       �ŒÂt%        ||jL                  «      rLtO        |«      d   }||j8                  ‰   _        |jC                   |‰|jA                  d«      ¬«      «       �Œ$tQ        d«      ‚  |||¬«      }tS        tS        jT                  ||jW                  «       ¬«      ¬«      }tY        tY        j@                  ||¬«      g¬«      }|j[                  «       D �cg c]  } | ||¬«      ¬«      ‘Œ }} |||¬«      } |||¬«      }tS        tS        jT                  ||jW                  «       ¬«      ¬«      }tY        tY        j@                  |
|¬«      g¬«      } ||	jA                  d «      ¬!«      } |||¬"«      }tS        tS        jT                  ||jW                  «       ¬«      ¬«      }tY        tY        j@                  ||¬«      g¬«      }|||fS c c}w c c}w c c}w c c}w )#a2  Output three `Summary` protocol buffers needed by hparams plugin.

    `Experiment` keeps the metadata of an experiment, such as the name of the
      hyperparameters and the name of the metrics.
    `SessionStartInfo` keeps key-value pairs of the hyperparameters
    `SessionEndInfo` describes status of the experiment e.g. STATUS_SUCCESS

    Args:
      hparam_dict: A dictionary that contains names of the hyperparameters
        and their values.
      metric_dict: A dictionary that contains names of the metrics
        and their values.
      hparam_domain_discrete: (Optional[Dict[str, List[Any]]]) A dictionary that
        contains names of the hyperparameters and all discrete values they can hold

    Returns:
      The `Summary` protobufs for Experiment, SessionStartInfo and
        SessionEndInfo
    r   N)ÚDataTypeÚ
ExperimentÚ
HParamInfoÚ
MetricInfoÚ
MetricNameÚStatus)ÚEXPERIMENT_TAGÚPLUGIN_DATA_VERSIONÚPLUGIN_NAMEÚSESSION_END_INFO_TAGÚSESSION_START_INFO_TAG)ÚHParamsPluginDataÚSessionEndInfoÚSessionStartInfoz>parameter: hparam_dict should be a dictionary, nothing logged.z>parameter: metric_dict should be a dictionary, nothing logged.zIparameter: hparam_domain_discrete should be a dictionary, nothing logged.c              3   óN   •K  — | ]  }t        |t        ‰‰   «      «      –— Œ y ­wr5   )rY   Útype)Ú.0ÚdÚhparam_dictÚks     €€r0   ú	<genexpr>zhparams.<locals>.<genexpr>ì   s!   øè ø€ ÒF¸q”z !¤T¨+°a©.Ó%9×:ÑFùs   ƒ"%z"parameter: hparam_domain_discrete[z/] should be a list of same type as hparam_dict[z].)Únumber_value)ÚvaluesÚDATA_TYPE_FLOAT64)Únamer–   Údomain_discrete)Ústring_valueÚDATA_TYPE_STRING)Ú
bool_valueÚDATA_TYPE_BOOL)rŸ   r–   z=value should be one of int, float, str, bool, or torch.Tensor)Úsession_start_infoÚversion©Úplugin_nameÚcontent©Úplugin_data)ÚtagÚmetadata©Úvalue©r¬   )rŸ   )Úhparam_infosÚmetric_infos)Ú
experimentr¦   ÚSTATUS_SUCCESS)Ústatus)Úsession_end_infor¦   ).r;   Ú#tensorboard.plugins.hparams.api_pb2r‡   rˆ   r‰   rŠ   r‹   rŒ   Ú$tensorboard.plugins.hparams.metadatar�   rŽ   r�   r�   r‘   Ú+tensorboard.plugins.hparams.plugin_data_pb2r’   r“   r”   rY   ÚdictÚloggerÚwarningÚ	TypeErrorÚitemsÚlistÚallÚintÚfloatr   rœ   r   Ú	ListValueÚValueÚappendÚstrr¡   Úboolr£   ÚTensorr   Ú
ValueErrorr   Ú
PluginDataÚSerializeToStringr   Úkeys)r™   Úmetric_dictÚhparam_domain_discreter;   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r�   r‘   r’   r“   r”   ÚvÚhpsÚssir˜   r    r©   Úsmdrš   ÚmtsÚexpÚseis   `                        `   r0   r   r   ¥   s–  ù€ ó( ÷÷ ÷õ ÷ñ ô �k¤4Ô(Ü�‰ÐWÔXÜØLó
ð 	
ô �k¤4Ô(Ü�‰ÐWÔXÜØLó
ð 	
ð 4Ò9°rÐÜÐ,¬dÔ3ÜØWó
ð 	
ð '×,Ñ,Ó.ò ‰ˆˆ1à�[Ñ Ü˜a¤Ô&ÜÔFÀAÔFÕFäØ4°Q°CÐ7fÐghÐfiÐikÐlóð ðð €Cá
Ó
€CØ×!Ñ!Ó#ó L
‰ˆˆ1Øˆ9ØÜ�aœ#œu˜Ô&Ø*+ˆC�K‰K˜‰NÔ'àÐ*Ñ*ÜBL×BVÑBVð "8¸Ñ!:öàô #×(Ñ(°aÖ8òôC‘ð #'�à�J‰JÙØØ!Ÿ™Ð(;Ó<Ø$3ôôð ä�aœÔØ*+ˆC�K‰K˜‰NÔ'àÐ*Ñ*Ü",×"6Ñ"6ð "8¸Ñ!:öàô #×(Ñ(°aÖ8òô#‘ð #'�à�J‰JÙØØ!Ÿ™Ð(:Ó;Ø$3ôôñ ä�aœÔØ()ˆC�K‰K˜‰NÔ%àÐ*Ñ*Ü",×"6Ñ"6ð "8¸Ñ!:öàô #×(Ñ(°AÖ6òô#‘ð #'�à�J‰JÙØØ!Ÿ™Ð(8Ó9Ø$3ôôñ ä�a˜Ÿ™Ô&Ü˜“
˜1‘ˆAØ*+ˆC�K‰K˜‰NÔ'Ø�J‰J‘z q¨x¯~©~Ð>QÓ/RÔSÔTÙÜØKó
ð 	
ðUL
ñ\  °3Ð@SÔT€GÜ
Ü#×.Ñ.Ø#¨W×-FÑ-FÓ-Hô
ô€Cô
 œŸ™Ð+AÈCÔPÐQÔ
R€Cà7B×7GÑ7GÓ7IÖ
J°!‰:™:¨!Ô,Ö-Ð
J€CÐ
Já
 #°CÔ
8€Cá¨3Ð8KÔL€GÜ
Ü#×.Ñ.Ø#¨W×-FÑ-FÓ-Hô
ô€Cô
 œŸ™¨>ÀCÔHÐIÔ
J€Cá
 §¡Ð-=Ó >Ô
?€CÙ°Ð>QÔR€GÜ
Ü#×.Ñ.Ø#¨W×-FÑ-FÓ-Hô
ô€Cô
 œŸ™Ð+?È#ÔNÐOÔ
P€Cà��Sˆ=ÐùòGùò,ùò,ùòD Ks   Å*R/
Ç:R4
ÊR9
Î9R>c                 óº  — t        |«      j                  «       }|j                  dk(  s"J d|j                  › d|j                  › d�«       ‚t	        |«      }|rct        |gd¬«      }|rt        |gd¬«      }t        j                  d	¬
«      }t        |¬«      }t        t        j                  | ||¬«      g¬«      S t        t        j                  | |¬«      g¬«      S )a  Output a `Summary` protocol buffer containing a single scalar value.

    The generated Summary has a Tensor.proto containing the input Tensor.
    Args:
      name: A name for the generated node. Will also serve as the series name in
        TensorBoard.
      tensor: A real numeric Tensor containing a single value.
      collections: Optional list of graph collections keys. The new summary op is
        added to these collections. Defaults to `[GraphKeys.SUMMARIES]`.
      new_style: Whether to use new style (tensor field) or old style (simple_value
        field). New style could lead to faster data loading.
    Returns:
      A scalar `Tensor` of type `string`. Which contains a `Summary` protobuf.
    Raises:
      ValueError: If tensor has the wrong shape or type.
    r   zBTensor should contain one element (0 dimensions). Was given size: z and z dimensions.rD   )rE   r]   rF   )rG   r]   Úscalars©r¨   rª   ©r¬   r_   r­   r®   )r¬   Úsimple_value)
r   ÚsqueezeÚndimÚsizerÂ   r	   r   rÊ   r   rÄ   )	rŸ   r_   ÚcollectionsÚ	new_styleÚdouble_precisionr   r"   r«   rÒ   s	            r0   r   r   b  sÚ   € ô" �V‹_×$Ñ$Ó&€Fà�‰�qÒðxà	KÈFÏKÉKÈ=ÐX]Ð^d×^iÑ^iÐ]jÐjvÐwóxØô �6‹]€FÙÜ"¨f¨X¸ZÔHˆÙÜ&°6°(À+ÔNˆLä%×0Ñ0¸YÔGˆÜ¨+Ô6ˆÜä—‘ØØ'Ø ôðô
ð 	
ô œgŸm™m°À6ÔJÐKÔLÐLr1   c                 ó  — |j                  «       |j                  z  dk\  rt        d«      ‚|j                  t        v ret        |j                     \  }}}t        di d|dt        |j                  D �cg c]  }t        j                  |¬«      ‘Œ c}¬«      | ||«      i¤Ž}nt        | › d|j                  › �«      ‚t        j                  d¬	«      }t        |¬
«      }t        t        j                  | ||¬«      g¬«      S c c}w )aö  Outputs a `Summary` protocol buffer containing the full tensor.
    The generated Summary has a Tensor.proto containing the input Tensor.
    Args:
      tag: A name for the generated node. Will also serve as the series name in
        TensorBoard.
      tensor: Tensor to be converted to protobuf
    Returns:
      A tensor protobuf in a `Summary` protobuf.
    Raises:
      ValueError: If tensor is too big to be converted to protobuf, or
                     tensor data type is not supported
    l        zAtensor is bigger than protocol buffer's hard limit of 2GB in sizer]   Útensor_shape©rÝ   ©Údimz has unsupported tensor dtype r_   rØ   rª   ©r¬   r­   r_   r®   © )ÚnumelÚitemsizerÉ   r]   Ú_TENSOR_TYPE_MAPr	   r
   ÚshapeÚDimr   rÊ   r   rÄ   )	r¬   r_   r]   Ú
field_nameÚconversion_fnr8   r"   r«   rÒ   s	            r0   r"   r"   �  sõ   € ð ‡|�|ƒ~˜Ÿ™Ñ'¨GÒ4ÜØOó
ð 	
ð ‡|�|Ô'Ñ'Ü+;¸F¿L¹LÑ+IÑ(ˆˆz˜=Ü"ñ 
à˜ØÔ 0Ø?E¿|¹|ÖL¸!Ô)×-Ñ-°1Ö5ÒLô!ð ™M¨&Ó1ðñ
‰ô ˜C˜5Ð >¸v¿|¹|¸nÐMÓNÐNä!×,Ñ,¸ÔB€KÜ
 kÔ
2€CÜœ'Ÿ-™-¨C¸#ÀlÔSÐTÔUÐUùò Ms   Á2Dc           	      ój   — t        |||||||¬«      }t        t        j                  | |¬«      g¬«      S )a  Output a `Summary` protocol buffer with a histogram.

    The generated
    [`Summary`](https://www.tensorflow.org/code/tensorflow/core/framework/summary.proto)
    has one summary value containing a histogram for `values`.
    Args:
      name: A name for the generated node. Will also serve as a series name in
        TensorBoard.
      min: A float or int min value
      max: A float or int max value
      num: Int number of values
      sum: Float or int sum of all values
      sum_squares: Float or int sum of squares for all values
      bucket_limits: A numeric `Tensor` with upper value per bucket
      bucket_counts: A numeric `Tensor` with number of values per bucket
    Returns:
      A scalar `Tensor` of type `string`. The serialized `Summary` protocol
      buffer.
    ©ÚminÚmaxÚnumÚsumÚsum_squaresÚbucket_limitÚbucket©r¬   Úhistor®   )r   r   rÄ   )	rŸ   rñ   rò   ró   rô   rõ   Úbucket_limitsÚbucket_countsÚhists	            r0   r   r   ²  s>   € ô* ØØØØØØ"Øô€Dô œ'Ÿ-™-¨D¸Ô=Ð>Ô?Ð?r1   c                 óœ   — t        |«      }t        |j                  t        «      ||«      }t	        t	        j
                  | |¬«      g¬«      S )ad  Output a `Summary` protocol buffer with a histogram.

    The generated
    [`Summary`](https://www.tensorflow.org/code/tensorflow/core/framework/summary.proto)
    has one summary value containing a histogram for `values`.
    This op reports an `InvalidArgument` error if any value is not finite.
    Args:
      name: A name for the generated node. Will also serve as a series name in
        TensorBoard.
      values: A real numeric `Tensor`. Any shape. Values to use to
        build the histogram.
    Returns:
      A scalar `Tensor` of type `string`. The serialized `Summary` protocol
      buffer.
    rø   r®   )r   r   ÚastyperÂ   r   rÄ   )rŸ   r�   ÚbinsÚmax_binsrü   s        r0   r   r   Ó  s=   € ô" �V‹_€FÜ˜&Ÿ-™-¬Ó.°°hÓ?€DÜœ'Ÿ-™-¨D¸Ô=Ð>Ô?Ð?r1   c           
      ó8  — | j                   dk(  rt        d«      ‚| j                  d«      } t        j                  | |¬«      \  }}t        |«      }|�˜||kD  r“||z  }||z  }|dk7  rt        j                  |d||z
  ggdd¬«      }|j                  d|«      j                  d¬«      }t        j                  |j                   d	z   f|j                  «      }|dd|…   |dd |d   |d<   |}t        j                  t        j                  |d«      «      }	t        j                  |	d|	d   d	z
  gd
¬«      \  }
}t        |
«      }
t        |«      d	z   }~	|
dkD  r||
d	z
  | nt        j                  dg|d| g«      }||
|d	z    }|j                   dk(  s|j                   dk(  rt        d«      ‚| j                  | «      }t!        | j#                  «       | j%                  «       t        | «      | j                  «       ||j'                  «       |j'                  «       ¬«      S )zDConvert values into a histogram proto using logic from histogram.cc.r   zThe input has no element.éÿÿÿÿ)rÿ   NÚconstant)Ú	pad_widthÚmodeÚconstant_values)Úaxisr   rz   )Úsidez1The histogram is empty, please file a bug report.rð   )rÝ   rÉ   ÚreshaperZ   r   ÚlenÚpadrô   Úemptyr]   ÚcumsumÚgreaterÚsearchsortedrÁ   ÚconcatenateÚdotr   rñ   rò   r7   )r�   rÿ   r   ÚcountsÚlimitsÚnum_binsÚsubsamplingÚsubsampling_remainderÚ
new_limitsÚ
cum_countsÚstartÚendÚsum_sqs                r0   r   r   é  s  € à‡{�{�aÒÜÐ4Ó5Ð5Ø�^‰^˜BÓ€FÜ—\‘\ &¨tÔ4�N€FˆFÜ�6‹{€HØÐ ¨8Ò 3Ø (Ñ*ˆØ (¨;Ñ 6ÐØ  AÒ%Ü—V‘VØØ˜{Ð-BÑBÐCÐDØØ !ô	ˆFð —‘  KÓ0×4Ñ4¸"Ð4Ó=ˆÜ—X‘X˜vŸ{™{¨Q™Ð0°&·,±,Ó?ˆ
Ø   " [ Ñ1ˆ
�3�BˆØ ™ˆ
�2‰Øˆô —‘œ2Ÿ:™: f¨aÓ0Ó1€JÜ—‘ ¨a°¸B±À!Ñ1CÐ-DÈ7ÔS�J€Eˆ3Ü�‹J€EÜ
ˆc‹(�Q‰,€CØð $)¨1¢9ˆˆu�q‰y˜3Ñ´"·.±.À1À#ÀvÈdÈsÀ|ÐATÓ2Uð ð �E˜C !™GÐ$€Fà‡{�{�aÒ˜6Ÿ;™;¨!Ò+ÜÐLÓMÐMà�Z‰Z˜Ó€FÜØ�J‰J‹LØ�J‰J‹LÜ�‹KØ�J‰J‹LØØ—]‘]“_Ø�}‰}‹ôð r1   c                 óF  — t        |«      }t        ||«      }t        |«      }|j                  t        j
                  «      }||z  j                  dd«      j                  t        j                  «      }t        ||¬«      }t        t        j                  | |¬«      g¬«      S )aJ  Output a `Summary` protocol buffer with images.

    The summary has up to `max_images` summary values containing images. The
    images are built from `tensor` which must be 3-D with shape `[height, width,
    channels]` and where `channels` can be:
    *  1: `tensor` is interpreted as Grayscale.
    *  3: `tensor` is interpreted as RGB.
    *  4: `tensor` is interpreted as RGBA.
    The `name` in the outputted Summary.Value protobufs is generated based on the
    name, with a suffix depending on the max_outputs setting:
    *  If `max_outputs` is 1, the summary value tag is '*name*/image'.
    *  If `max_outputs` is greater than 1, the summary value tags are
       generated sequentially as '*name*/image/0', '*name*/image/1', etc.
    Args:
      tag: A name for the generated node. Will also serve as a series name in
        TensorBoard.
      tensor: A 3-D `uint8` or `float32` `Tensor` of shape `[height, width,
        channels]` where `channels` is 1, 3, or 4.
        'tensor' can either have values in [0, 1] (float32) or [0, 255] (uint8).
        The image() function will scale the image values to [0, 255] by applying
        a scale factor of either 1 (uint8) or 255 (float32). Out-of-range values
        will be clipped.
    Returns:
      A scalar `Tensor` of type `string`. The serialized `Summary` protocol
      buffer.
    r   rX   )Úrescale©r¬   r   r®   )r   r   ra   rþ   rZ   Úfloat32Úclipr^   r   r   rÄ   )r¬   r_   r  ÚdataformatsÚscale_factorr   s         r0   r   r      s€   € ô6 �V‹_€FÜ˜F KÓ0€Fä% fÓ-€LØ�]‰]œ2Ÿ:™:Ó&€FØ�|Ñ#×)Ñ)¨!¨SÓ1×8Ñ8¼¿¹ÓB€FÜ�v wÔ/€EÜœ'Ÿ-™-¨C°uÔ=Ð>Ô?Ð?r1   c                 óX  — t        |«      }t        ||«      }t        |«      }|j                  t        j                  «      t        |«      z  }t        |j                  dd«      j                  t        j                  «      |||¬«      }t        t        j                  | |¬«      g¬«      S )z/Output a `Summary` protocol buffer with images.r   rX   )r  ÚroisÚlabelsr  r®   )r   r   rþ   rZ   r  ra   r   r   r^   r   rÄ   )r¬   Útensor_imageÚtensor_boxesr  r!  r%  r   s          r0   r   r   E  s�   € ô ˜<Ó(€LÜ! ,°Ó<€LÜ˜<Ó(€LØ×&Ñ&¤r§z¡zÓ2Ô5GÈÓ5UÑU€LÜØ×Ñ˜!˜SÓ!×(Ñ(¬¯©Ó2ØØØô	€Eô œ'Ÿ-™-¨C°uÔ=Ð>Ô?Ð?r1   c           
      ó¢   — |j                   d   }t        |«      }|D ]/  }t        | ||df   ||df   ||df   ||df   |€d n||   d¬«      } Œ1 | S )Nr   r   rg   é   ÚRed)rt   ru   )rë   Úranger…   )Ú
disp_imageÚboxesr%  Ú	num_boxesÚlist_gtr*   s         r0   r   r   V  sy   € à—‘˜A‘€IÜ�IÓ€GØò 	
ˆÜ%ØØ�!�Q�$‰KØ�!�Q�$‰KØ�!�Q�$‰KØ�!�Q�$‰KØ & ™°F¸1±IØô
‰
ð	
ð Ðr1   c                 ó¼  — ddl m} | j                  \  }}}t        ||z  «      }t        ||z  «      }	|j	                  | «      }
|�t        |
||¬«      }
|j                  j                  }|
j                  |	|f|«      }
ddl	}|j                  «       }|
j                  |d¬«       |j                  «       }|j                  «        t        j                  ||||¬«      S )z=Convert a numpy representation of an image to Image protobuf.r   )ÚImageN)r%  ÚPNG)Úformat©Úheightre   Ú
colorspaceÚencoded_image_string)ri   r1  rë   rÁ   Ú	fromarrayr   Ú
ResamplingÚLANCZOSÚresizeÚioÚBytesIOÚsaveÚgetvalueÚcloser   )r_   r  r$  r%  r1  r5  re   ÚchannelÚscaled_heightÚscaled_widthr   Ú	ANTIALIASr<  ÚoutputÚimage_strings                  r0   r   r   g  sÊ   € åà#Ÿ\™\Ñ€FˆE�7Ü˜ Ñ(Ó)€MÜ�u˜w‘Ó'€LØ�O‰O˜FÓ#€EØÐÜ˜5 $¨vÔ6ˆØ× Ñ ×(Ñ(€IØ�L‰L˜,¨Ð6¸	ÓB€EÛà�Z‰Z‹\€FØ	‡J�Jˆv˜e€JÔ$Ø—?‘?Ó$€LØ
‡L�L„NÜ�=‰=ØØØØ)ô	ð r1   c                 óB  — t        |«      }t        |«      }t        |«      }|j                  t        j
                  «      }||z  j                  dd«      j                  t        j                  «      }t        ||«      }t        t        j                  | |¬«      g¬«      S )Nr   rX   r  r®   )r   r   ra   rþ   rZ   r  r   r^   r   r   rÄ   )r¬   r_   Úfpsr"  r   s        r0   r   r   �  s|   € Ü�V‹_€FÜ˜FÓ#€Fä% fÓ-€LØ�]‰]œ2Ÿ:™:Ó&€FØ�|Ñ#×)Ñ)¨!¨SÓ1×8Ñ8¼¿¹ÓB€FÜ�v˜sÓ#€EÜœ'Ÿ-™-¨C°uÔ=Ð>Ô?Ð?r1   c                 óà  — 	 dd l }	 ddl m} dd l}| j
                  \  }}}}|j                  t        | «      |¬«      }	|j                  dd¬	«      j                  }
	 |	j                  |
dd ¬
«       t        |
d«      5 }|j                  «       }d d d «       	 t        j                  |
«       t'        j(                  |||¬«      S # t        $ r t        d«       Y y w xY w# t        $ r t        dd«       Y y w xY w# t        $ r; 	 |	j                  |
dd¬«       n"# t        $ r |	j                  |
d¬«       Y nw xY wY ŒÌw xY w# 1 sw Y   Œ´xY w# t         $ r t"        j%                  d«       Y ŒÁw xY w)Nr   zadd_video needs package moviepy)Úeditorz6moviepy is installed, but can't import moviepy.editor.z2Some packages could be missing [imageio, requests])rH  z.gifF)ÚsuffixÚdelete)Úverboser»   )rM  Úprogress_bar)rM  Úrbz5The temporary file used by moviepy cannot be deleted.r4  )ÚmoviepyÚImportErrorÚprintrJ  Útempfilerë   ÚImageSequenceClipr¿   ÚNamedTemporaryFilerŸ   Ú	write_gifr½   ÚopenÚreadÚosÚremoveÚOSErrorr»   r¼   r   r1  )r_   rH  rP  ÚmpyrS  Ú_tÚhÚwÚcr   Úfilenamer'   Útensor_strings                r0   r   r   Œ  sw  € ðÛðÝ)ó à—,‘,�K€Bˆˆ1ˆað × Ñ ¤ f£°3Ð Ó7€Dà×*Ñ*°&ÀÐ*ÓG×LÑL€Hð4Ø�‰�x¨°tˆÔ<ô 
ˆh˜Ó	ð ! ØŸ™›ˆ÷!ðPÜ
�	‰	�(Ôô �=‰=Ø˜ a¸môð øôG ò ÜÐ/Ô0Ùðûô
 ò ÜØDØ@ô	
ñ 	ðûô  ò 4ð	4Ø�N‰N˜8¨UÀˆNÕGøÜò 	4Ø�N‰N˜8¨UˆNÖ3ð	4üð4ú÷!ð !ûô
 ò PÜ�‰ÐNÖOðPúsv   ‚C ‡C ÁC9 Á<E ÂE ÃCÃCÃC6Ã5C6Ã9	D=ÄDÄD=ÄD7Ä4D=Ä6D7Ä7D=Ä<D=Å E	ÅE-Å,E-c                 ó@  — t        |«      }|j                  «       }t        |«      j                  «       dkD  rt	        d«       |j                  dd«      }|j                  dk(  sJ d«       ‚|t        j                  t        j                  «      j                  z  j                  d«      }dd l}dd l}|j                  «       }|j                  |d«      5 }|j                  d«       |j!                  d«       |j#                  |«       |j%                  |j&                  «       d d d «       |j)                  «       }|j+                  «        t-        j.                  |d|j0                  d   |d	¬
«      }	t-        t-        j2                  | |	¬«      g¬«      S # 1 sw Y   ŒrxY w)Nr   z4warning: audio amplitude out of range, auto clipped.r  z%input tensor should be 1 dimensional.z<i2r   Úwbrg   z	audio/wav)Úsample_rateÚnum_channelsÚlength_framesÚencoded_audio_stringÚcontent_type)r¬   r   r®   )r   rÛ   Úabsrò   rR  r   rÜ   rZ   ÚiinfoÚint16rþ   r<  Úwaver=  rW  ÚsetnchannelsÚsetsampwidthÚsetframerateÚwriteframesÚdatar?  r@  r   ÚAudiorë   rÄ   )
r¬   r_   re  Úarrayr<  rm  ÚfioÚ
wave_writeÚaudio_stringr   s
             r0   r   r   ·  sH  € Ü�F‹O€EØ�M‰M‹O€EÜ
ˆ5ƒz‡~�~Ó˜!ÒÜÐDÔEØ—
‘
˜2˜qÓ!ˆØ�:‰:˜Š?ÐCÐCÓCˆ?Ø”R—X‘XœbŸh™hÓ'×+Ñ+Ñ+×3Ñ3°EÓ:€EãÛà
�*‰*‹,€CØ	�‰�3˜Ó	ð + Ø×Ñ Ô"Ø×Ñ Ô"Ø×Ñ Ô,Ø×Ñ˜uŸz™zÔ*÷	+ð
 —<‘<“>€LØ‡I�I„KÜ�M‰MØØØ—k‘k "‘oØ)Ø ô€Eô œ'Ÿ-™-¨C°uÔ=Ð>Ô?Ð?÷+ð +ús   ÃAFÆFc           
      ó  — g }| j                  «       D ]ø  \  }}g }|j                  «       D ]¸  \  }}|d   }|d   dk(  rht        |«      dk(  sJ ‚t        j                  t        j                  j	                  |d   |d   |d   ¬«      g¬«      }t        j
                  ||¬«      }	n-t        j                  |¬	«      }
t        j
                  ||
¬
«      }	|j                  |	«       Œº |j                  t        j                  ||¬«      «       Œú t        j                  |¬«      } t        j                  d¬«      }t        |¬«      }t        d| j                  «       gt        «       ¬«      }t        t        j                   d||¬«      g¬«      S )Nr   r   ÚMarginr)  rg   )r¯   ÚlowerÚupper)Úseries)Útitler„   r°   )r}  Ú	multiline)r}  Úchart)Úcategoryr    rØ   rª   Ú	DT_STRING©r]   Ú
string_valrâ   Úcustom_scalars__config__rÙ   r®   )r¾   r
  r   ÚMarginChartContentÚSeriesÚChartÚMultilineChartContentrÅ   ÚCategoryÚLayoutr   rÊ   r	   rË   r
   r   rÄ   )ÚlayoutÚ
categoriesrš   rÏ   ÚchartsÚ
chart_nameÚchart_metadataÚtagsÚmgccr  Úmlccr«   rÒ   r_   s                 r0   r    r    Õ  s}  € Ø€JØ—‘“ò F‰ˆˆ1ØˆØ*+¯'©'«)ò 	!Ñ&ˆJ˜Ø! !Ñ$ˆDØ˜aÑ  HÒ,Ü˜4“y A’~Ð%�~Ü!×4Ñ4ä"×5Ñ5×<Ñ<Ø"& q¡'°°a±ÀÀQÁð =ó ðô�ô #×(Ñ(¨zÀ$ÔG‘ä!×7Ñ7¸DÔA�Ü"×(Ñ(¨zÀTÔJ�Ø�M‰M˜%Õ ð	!ð  	×Ñœ*×-Ñ-°A¸VÔDÕEð%Fô( ×Ñ¨
Ô3€FÜ!×,Ñ,Ð9IÔJ€KÜ
 kÔ
2€CÜØØ×,Ñ,Ó.Ð/Ü%Ó'ô€Fô
 ä�M‰MÐ8ÀÐRUÔVð
ôð r1   c           	      ó@  — t        j                  dt        d¬«      j                  «       ¬«      }t        |¬«      }t	        d|j                  d¬«      gt        t        j                  d	¬
«      g¬«      ¬«      }t        t        j                  | dz   ||¬«      g¬«      S )Nr!   r   )r¦   r§   rª   r�  Úutf_8)Úencodingr   rã   rä   r‚  z/text_summaryræ   r®   )
r   rÊ   r   rË   r	   Úencoder
   rì   r   rÄ   )r¬   r!   r«   rÒ   r_   s        r0   r!   r!   ú  s�   € Ü!×,Ñ,Ø¤N¸1Ô$=×$OÑ$OÓ$Qô€Kô  kÔ
2€CÜØØ—K‘K¨�KÓ1Ð2Ü%Ô+;×+?Ñ+?ÀQÔ+GÐ*HÔIô€Fô
 Ü�}‰}  Ñ!6ÀÈVÔTÐUôð r1   c	                 óú  — |dkD  rd}t        j                  ||||||f«      }	t        d|¬«      j                  «       }
t	        j
                  d|
¬«      }t	        |¬«      }t        d|	j                  d«      j                  «       t        t        j                  |	j                  d   ¬	«      t        j                  |	j                  d
   ¬	«      g¬«      ¬«      }t        t        j                  | ||¬«      g¬«      S )Né   r   ©r¦   Únum_thresholdsÚ	pr_curvesr§   rª   rD   r  rã   r   rä   ©r]   rE   râ   ræ   r®   )rZ   Ústackr   rË   r   rÊ   r	   r	  r7   r
   rì   rë   r   rÄ   )r¬   ÚtpÚfpÚtnÚfnÚ	precisionÚrecallrš  Úweightsrr  Úpr_curve_plugin_datar«   rÒ   r_   s                 r0   r#   r#   	  sã   € ð ˜ÒØˆÜ�8‰8�R˜˜R  Y°Ð7Ó8€DÜ,Ø .ôçÑÓð ô "×,Ñ,ØÐ)=ô€Kô  kÔ
2€CÜØØ—,‘,˜rÓ"×)Ñ)Ó+Ü%ä ×$Ñ$¨$¯*©*°Q©-Ô8Ü ×$Ñ$¨$¯*©*°Q©-Ô8ðô
ô	€Fô œ'Ÿ-™-¨C¸#ÀfÔMÐNÔOÐOr1   c                 óì  — t        |d«      }t        ||||¬«      }t        d|¬«      j                  «       }t	        j
                  d|¬«      }t	        |¬«      }t        d|j                  d	«      j                  «       t        t        j                  |j                  d   ¬
«      t        j                  |j                  d   ¬
«      g¬«      ¬«      }	t        t        j                  | ||	¬«      g¬«      S )Nr˜  )rš  r¤  r   r™  r›  r§   rª   rD   r  rã   r   rä   rœ  ræ   r®   )rñ   r%   r   rË   r   rÊ   r	   r	  r7   r
   rì   rë   r   rÄ   )
r¬   r%  Úpredictionsrš  r¤  rr  r¥  r«   rÒ   r_   s
             r0   r$   r$   #  sÚ   € ä˜¨Ó-€NÜØ�¨NÀGô€Dô -Ø .ôçÑÓð ô "×,Ñ,ØÐ)=ô€Kô  kÔ
2€CÜØØ—,‘,˜rÓ"×)Ñ)Ó+Ü%ä ×$Ñ$¨$¯*©*°Q©-Ô8Ü ×$Ñ$¨$¯*©*°Q©-Ô8ðô
ô	€Fô œ'Ÿ-™-¨C¸#ÀfÔMÐNÔOÐOr1   c                 ó‚  — d}|€d}t        j                  t        j                  ||dz
  z  «      «      }| j                  t         j                  «      }d|dz
  f}t        j
                  |||||z  ¬«      \  }}	t        j
                  |||d|z
  |z  ¬«      \  }
}	t        j                  |d d d…   «      d d d…   }t        j                  |
d d d…   «      d d d…   }|d   |z
  }|d   |z
  }|t        j                  |||z   «      z  }|t        j                  |||z   «      z  }t        j                  ||||||f«      S )NgH¯¼šò×z>g      ð?r   r   )rÿ   r+  r¤  r  )	rZ   Úint32Úfloorrþ   Úfloat64r   r  Úmaximumr�  )r%  r§  rš  r¤  Ú_MINIMUM_COUNTÚbucket_indicesÚfloat_labelsÚhistogram_rangeÚ
tp_bucketsÚ_Ú
fp_bucketsrž  rŸ  r   r¡  r¢  r£  s                    r0   r%   r%   >  sL  € Ø€Nà€Øˆô —X‘XœbŸh™h {°nÀqÑ6HÑ'IÓJÓK€NØ—=‘=¤§¡Ó,€LØ˜.¨1Ñ,Ð-€OÜ—L‘LØØØØ˜wÑ&ô	�M€J�ô —L‘LØØØØ�|Ñ# wÑ.ô	�M€J�ô 
�‰�:™d ˜dÑ#Ó	$¡T r TÑ	*€BÜ	�‰�:™d ˜dÑ#Ó	$¡T r TÑ	*€BØ	ˆA‰�‰€BØ	ˆA‰�‰€BØ”R—Z‘Z °°R±Ó8Ñ8€IØ”"—*‘*˜^¨R°"©WÓ5Ñ5€FÜ�8‰8�R˜˜R  Y°Ð7Ó8Ð8r1   c                 ó  — ddl }ddlm}  |j                  |«      }|j	                  | ||||j
                  ||¬«      }	t        d|j                  d«      j                  «       t        t        j                  |j
                  d   ¬«      t        j                  |j
                  d   ¬«      t        j                  |j
                  d	   ¬«      g¬
«      ¬«      }t        j                  |j                  | |«      ||	¬«      }
|
S )a  Create a tensor summary with summary metadata.

    Args:
      name: Uniquely identifiable name of the summary op. Could be replaced by
        combination of name and type to make it unique even outside of this
        summary.
      display_name: Will be used as the display name in TensorBoard.
        Defaults to `name`.
      description: A longform readable description of the summary data. Markdown
        is supported.
      tensor: Tensor to display in summary.
      content_type: Type of content inside the Tensor.
      components: Bitmask representing present parts (vertices, colors, etc.) that
        belong to the summary.
      json_config: A string, JSON-serialized dictionary of ThreeJS classes
        configuration.

    Returns:
      Tensor summary with metadata.
    r   N©r­   )Újson_configrD   r  rã   r   rg   rä   rœ  rÙ   )r;   Útensorboard.plugins.meshr­   Ú	as_tensorÚcreate_summary_metadatarë   r	   r	  r7   r
   rì   r   rÄ   Úget_instance_name)rŸ   Údisplay_nameÚdescriptionr_   ri  Ú
componentsr¶  r;   r­   Útensor_metadataÚtensor_summarys              r0   Ú_get_tensor_summaryrÀ  _  sé   € ó. Ý1àˆU�_‰_˜VÓ$€Fà×6Ñ6ØØØØØ�‰ØØð 7ó €Oô ØØ—.‘. Ó$×+Ñ+Ó-Ü%ä ×$Ñ$¨&¯,©,°q©/Ô:Ü ×$Ñ$¨&¯,©,°q©/Ô:Ü ×$Ñ$¨&¯,©,°q©/Ô:ðô
ô
€Fô —]‘]Ø×&Ñ& t¨\Ó:ØØ ô€Nð Ðr1   c                 ó<   — d}| �t        j                  | d¬«      }|S )z5Parse and returns JSON string from python dictionary.z{}T)Ú	sort_keys)ÚjsonÚdumps)Úconfig_dictr¶  s     r0   Ú_get_json_configrÆ  š  s#   € à€KØÐÜ—j‘j ¸Ô=ˆØÐr1   c                 óz  — ddl m} ddlm} t	        |«      }	g }
||j
                  f||j                  f||j                  fg}|D �cg c]
  }|d   €Œ	|‘Œ }}|j                  |D ��cg c]  \  }}|‘Œ	 c}}«      }|D ]%  \  }}|
j                  t        | ||||||	«      «       Œ' t        |
¬«      S c c}w c c}}w )a'  Output a merged `Summary` protocol buffer with a mesh/point cloud.

    Args:
      tag: A name for this summary operation.
      vertices: Tensor of shape `[dim_1, ..., dim_n, 3]` representing the 3D
        coordinates of vertices.
      faces: Tensor of shape `[dim_1, ..., dim_n, 3]` containing indices of
        vertices within each triangle.
      colors: Tensor of shape `[dim_1, ..., dim_n, 3]` containing colors for each
        vertex.
      display_name: If set, will be used as the display name in TensorBoard.
        Defaults to `name`.
      description: A longform readable description of the summary data. Markdown
        is supported.
      config_dict: Dictionary with ThreeJS classes names and configuration.

    Returns:
      Merged summary for mesh/point cloud representation.
    r   rµ  )ÚMeshPluginDatar®   )r·  r­   Ú(tensorboard.plugins.mesh.plugin_data_pb2rÈ  rÆ  ÚVERTEXÚFACEÚCOLORÚget_components_bitmaskrÅ   rÀ  r   )r¬   ÚverticesÚcolorsÚfacesrÅ  r»  r¼  r­   rÈ  r¶  Ú	summariesÚtensorsr_   ri  r½  s                  r0   r&   r&   £  sâ   € õ, 2ÝGä" ;Ó/€Kà€Ià	�>×(Ñ(Ð)Ø	�×#Ñ#Ð$Ø	�×%Ñ%Ð&ð€Gð
 %,ÖE˜&¨v°a©yÑ/DŠvÐE€GÐEØ×0Ñ0Ø4;×<Ñ0˜6 <ŠÓ<ó€Jð !(ò 
Ñˆ�Ø×ÑÜØØØØØØØóõ
	
ð
ô ˜Ô#Ð#ùò% Fùã<s   Á
B2ÁB2Á(B7
)ÚblackrÓ  rg   )NNN)NFFr5   )r   ÚNCHW)r   ÚCHWN)r   NN)é   )iD¬  )r˜  N)NN)[rÃ  ÚloggingrY  r,   Útypingr   r   r;   r\   rZ   Úgoogle.protobufr   Ú$tensorboard.compat.proto.summary_pb2r   r   r   Ú#tensorboard.compat.proto.tensor_pb2r	   Ú)tensorboard.compat.proto.tensor_shape_pb2r
   Ú!tensorboard.plugins.custom_scalarr   Ú,tensorboard.plugins.pr_curve.plugin_data_pb2r   Ú(tensorboard.plugins.text.plugin_data_pb2r   Ú_convert_npr   Ú_utilsr   r   Ú__all__Ú	getLoggerÚ__name__r»   rÂ   rÁ   r   r   rÈ   r¿   r9   r>   r@   ÚhalfÚfloat16Úbfloat16r  r«  ÚdoubleÚint8r^   Úqint8rl  Úshortr©  Úqint32Úint64Ú	complex32ÚchalfÚ	complex64ÚcfloatrÇ   Ú
complex128ÚcdoubleÚquint8Úquint4x2rê   ra   r…   r   r   r"   r   r   r   r   r   r   r   r   r   r   r    r!   r#   r$   r%   rÀ  rÆ  r&   rç   r1   r0   ú<module>rö     s¦  ðã Û Û 	Û ç  ã Û å &÷ñ õ
 <Ý FÝ 8Ý JÝ Cå  ß 2ò€ð0 
ˆ×	Ñ	˜8Ó	$€ð&�5ð &˜Só &ð&�3ð &˜5ó &ð:˜5Ÿ<™<ð :¨D°©Ió :ð4˜eŸl™lð 4¨t°E©{ó 4ð �u—|‘|ð  ¨¨S©	ó  ðØ	‡J�J�˜JÐ(;Ð<ðà	‡M�M�I˜zÐ+>Ð?ðð 
‡N�N�] JÐ0CÐDðð 
‡M�M�J ¨_Ð=ð	ð
 
‡K�K�*˜k¨?Ð;ðð 
‡M�M�K ¨Ð?ðð 
‡L�L�; ¨oÐ>ðð 
‡J�J�˜I Ð7ðð 
‡K�K�*˜i¨Ð9ðð 
‡K�K�*˜i¨Ð9ðð 
‡K�K�*˜i¨Ð9ðð 
‡K�K�*˜i¨Ð9ðð 
‡I�I�
˜I Ð7ðð 
‡K�K�*˜i¨Ð9ðð 
‡L�L�:˜y¨/Ð:ðð  
‡K�K�*˜k¨?Ð;ð!ð" 
‡O�O�n nÐ6LÐMð#ð$ 
‡K�K�. .Ð2HÐIØ	‡O�O�n nÐ6LÐMØ	‡L�L�> >Ð3IÐJØ	‡J�J�˜J¨Ð8Ø	×Ñ�¨Ð8NÐOØ	‡M�M�O ^Ð5KÐLØ	‡K�K�*˜l¨OÐ<Ø	‡L�L�:˜|¨_Ð=Ø	‡N�N�Z ¨Ð?ñ5Ð ò<5ð ØØó(óVzóz(MòV"VòJ@óB@ó,4ón"@ðL KOó@ó"ó"ó4@ò(óV@ò<"òJð  IMóPó4Pó69òB8òvð OSô3$r1   