+
    œ°³jVB  ã                   ó^  € R t ^ RIt^ RIt^ RIHt ^ RIt^ RIHu Hu H	t
 ^ RIHtHtHt ^RIHt ^RIHtHt ^RIHtHt ^RIHtHtHt ^RIHtHt ^R	IHtH t  ^R
I!H"t" ^RI#H$t$ Rt% ! R R]RR7      t&RR R llt']PP                  PR                  R 4       t*]  ! R R]4      4       t+R.t,R# )z%Image processor class for Pix2Struct.N)ÚUnion)ÚImageÚ	ImageDrawÚ	ImageFont)ÚTorchvisionBackend)ÚBatchFeatureÚget_size_dict)Úgroup_images_by_shapeÚreorder_images)ÚChannelDimensionÚ
ImageInputÚSizeDict)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚauto_docstring)Úhf_api)Úrequires_backendszybelkada/fontsc                   ó0   a € ] tR t^%t o RtV 3R ltRtV tR# )ÚPix2StructImageProcessorKwargsa]  
max_patches (`int`, *optional*):
    Maximum number of patches to extract.
patch_size (`dict[str, int]`, *optional*, defaults to `{"height": 16, "width": 16}`):
    The patch size to use for the image. According to Pix2Struct paper and code, the patch size is 16x16.
is_vqa (`bool`, *optional*, defaults to `False`):
    Whether or not the image processor is for the VQA task. If `True` and `header_text` is passed in, text is
    rendered onto the input images.
header_text (`Union[list[str], str]`, *optional*):
    Text to render as a header. Only has an effect if `image_processor.is_vqa` is `True`.
c                óŽ   <€ V ^8„  d   Qh/ S[ ;R&   S[S[S[ 3,          ;R&   S[;R&   S[S[,          S[,          R,          ;R&   # )é   Úmax_patchesÚ
patch_sizeÚis_vqaNÚheader_text)ÚintÚdictÚstrÚboolÚlist)ÚformatÚ__classdict__s   "€Ú{/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/pix2struct/image_processing_pix2struct.pyÚ__annotate__Ú+Pix2StructImageProcessorKwargs.__annotate__%   sM   ø‡ ‚ ñ Ññ ñ ‘S™#�X•Ññ ñ �Lñ ñ  ‘c•™S• 4Õ'Ñ'ò! ó    © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__)r"   s   @r#   r   r   %   s   ø‡ € ñ
÷ ƒ r&   r   F)Útotalc                óÌ   € V ^8„  d   QhR\         R\        R\         R\         R\        R\        R\        R\        R	\        R
,          R\         R
,          R\        P                  /# )r   ÚtextÚ	text_sizeÚ
text_colorÚbackground_colorÚleft_paddingÚright_paddingÚtop_paddingÚbottom_paddingÚ
font_bytesNÚ	font_pathÚreturn)r   r   Úbytesr   )r!   s   "r#   r$   r$   9   s�   € ÷ Cñ CÜ
ðCäðCô ðCô ð	Cô
 ðCô ðCô ðCô ðCô ˜•ðCô �T�zðCô ‡[�[ñCr&   c
                ó¨  € \        \        R4       \        P                  ! ^PR7      p
V
P	                  V R7      pRP                  V4      pVe   V	f   \        P                  ! V4      pM%V	e   T	pM\        4       P                  \        R4      p\        P                  ! VRVR7      p\        P                  ! RR4      p\        P                   ! V4      pVP#                  RWÍR	7      w   pppVV,           V,           pVV,           V,           p\        P                  ! RVV3V4      p\        P                   ! V4      pVP%                  WF3WÂVR
7       V# )aC  
Render text. This script is entirely adapted from the original script that can be found here:
https://github.com/google-research/pix2struct/blob/main/pix2struct/preprocessing/preprocessing_utils.py

Args:
    text (`str`, *optional*, defaults to ):
        Text to render.
    text_size (`int`, *optional*, defaults to 36):
        Size of the text.
    text_color (`str`, *optional*, defaults to `"black"`):
        Color of the text.
    background_color (`str`, *optional*, defaults to `"white"`):
        Color of the background.
    left_padding (`int`, *optional*, defaults to 5):
        Padding on the left.
    right_padding (`int`, *optional*, defaults to 5):
        Padding on the right.
    top_padding (`int`, *optional*, defaults to 5):
        Padding on the top.
    bottom_padding (`int`, *optional*, defaults to 5):
        Padding on the bottom.
    font_bytes (`bytes`, *optional*):
        Bytes of the font to use. If `None`, the default font will be used.
    font_path (`str`, *optional*):
        Path to the font to use. If `None`, the default font will be used.
Úvision)Úwidth)r2   Ú
z	Arial.TTFzUTF-8)ÚencodingÚsizeÚRGB)Úfont)ÚfillrE   )é   rG   ©é    rI   )r   Úrender_textÚtextwrapÚTextWrapperÚwrapÚjoinÚioÚBytesIOr   Úhf_hub_downloadÚDEFAULT_FONT_PATHr   Útruetyper   Únewr   ÚDrawÚtextbboxr2   )r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   ÚwrapperÚlinesÚwrapped_textrE   Útemp_imgÚ	temp_drawÚ_ÚwÚhÚ
text_widthÚtext_heightÚimgÚdraws   &&&&&&&&&&             r#   rJ   rJ   9   s(  € ôL ”k 8Ô,ô ×"Ò"¨Ô,€GØ�L‰L˜dˆLÓ#€EØ—9‘9˜UÓ#€LàÒ )Ò"3Ü�zŠz˜*Ó%‰Ø	Ò	Ø‰ä‹x×'Ñ'Ô(9¸;ÓGˆÜ×Ò˜d¨W¸9ÔE€Dô �yŠy˜ Ó'€HÜ—’˜xÓ(€IØ×#Ñ# F¨LÐ#ÓD�J€A€qˆ!ˆQà�\Õ! MÕ1€JØ�k•/ NÕ2€Kô �)Š)�E˜J¨Ð4Ð6FÓ
G€CÜ�>Š>˜#Ó€DØ‡I�Iˆ|Ð)¨<Èt€IÔTà€Jr&   c                ó&  € V P                   w  r4rV\        P                  P                  P	                  WV3W3R7      pVP                  W4WR4      pVP                  ^ ^^^^4      P                  W5V,          Wb,          WA,          V,          4      pV# )a_  
Extract patches from image tensor. Returns tensor of shape (batch, rows, columns, patch_height*patch_width*channels).

Args:
    image_tensor (`torch.Tensor`):
        Image tensor of shape (batch, channels, height, width).
    patch_height (`int`):
        Height of patches to extract.
    patch_width (`int`):
        Width of patches to extract.
)Ústrideéÿÿÿÿ)ÚshapeÚtorchÚnnÚ
functionalÚunfoldÚreshapeÚpermute)Úimage_tensorÚpatch_heightÚpatch_widthÚ
batch_sizeÚchannelsÚheightr@   Úpatchess   &&&     r#   Útorch_extract_patchesrt   €   sŽ   € ð +7×*<Ñ*<Ñ'€J˜&Ü�h‰h×!Ñ!×(Ñ(¨ÀkÐ7RÐ\hÐ[vÐ(Ów€GØ�o‰o˜j°LÈrÓR€GØ�o‰o˜a  A q¨!Ó,×4Ñ4Ø˜lÕ*¨EÕ,@À(ÕBYÐ\gÕBgó€Gð €Nr&   c                   ó  a a€ ] tR t^–t oRtRtRtR^R^/tRtRt	]
tRR.tRV3R	 lV 3R
 llltR tRV3R lR lltV3R lR ltV3R lR lt]RV3R lV 3R lll4       tRR]P*                  R3V3R lR lltV3R lR ltRtVtV ;t# )ÚPix2StructImageProcessorNTrr   r@   i   FÚflattened_patchesÚattention_maskc                óZ   <€ V ^8„  d   QhRS[ S[S[3,          S[,          R,          RS[ /# )r   r   Nr<   )r   r   r   r   )r!   r"   s   "€r#   r$   Ú%Pix2StructImageProcessor.__annotate__¡   s1   ø€ ÷ ñ á™™c˜•N¡XÕ-°Õ4ðñ 
ñ	r&   c           	     óš   <€ \         SV `  ! R/ VB pVe2   \        V\        4      '       g   \        R/ \	        VRR7      B VR&   V# WR&   V# )zS
Process custom Pix2Struct kwargs, specifically converting patch_size to SizeDict.
r   )rC   Ú
param_namer'   )ÚsuperÚ_standardize_kwargsÚ
isinstancer   r   )Úselfr   ÚkwargsÚ	__class__s   &&,€r#   r~   Ú,Pix2StructImageProcessor._standardize_kwargs¡   sY   ø€ ô ‘Ò,Ñ6¨vÑ6ˆØÒ!¬*°ZÄ×*JÒ*JÜ#+Ñ#f¬mÀÐXdÔ.eÑ#fˆF�<Ñ ð ˆð $.�<Ñ àˆr&   c                ó   € R# )zC
Skip standard validation as Pix2Struct uses custom preprocessing.
Nr'   )r€   r�   s   &,r#   Ú_validate_preprocess_kwargsÚ4Pix2StructImageProcessor._validate_preprocess_kwargs±   s   € ñ 	r&   c          
      óP   <€ V ^8„  d   QhRRRS[ RS[R,          RS[ R,          RR/# )r   Úimageútorch.TensorÚheaderr:   Nr;   r<   )r   r=   )r!   r"   s   "€r#   r$   rz   ¹   sE   ø€ ÷ 6ñ 6àð6ñ ð6ñ ˜D•Lð	6ñ
 ˜•:ð6ð 
ñ6r&   c                ó²  € VP                   pVP                  pVP                  \        P                  8X  d   \        P
                  ! V4      pMLV^ÿ,          P                  ^ ^ÿ4      P                  \        P                  4      p\        P
                  ! V4      p\        W#VR7      p	\        V	P                  VP                  4      p
\        VP                  W§P                  ,          ,          4      p\        V	P                  W©P                  ,          ,          4      p\        P                  ! RW«V,           3R4      pVP                  V	P!                  W¬34      R4       VP                  VP!                  W«34      ^ V34       \        P"                  ! V4      P                  V4      pV\        P                  8w  d   VP%                  4       R,          pV# )aµ  
Render header text on image using torch tensors.

Args:
    image (`torch.Tensor`):
        Image tensor in channel-first format (C, H, W).
    header (`str`):
        Header text to render.
    font_bytes (`bytes`, *optional*):
        Font bytes to use for rendering.
    font_path (`str`, *optional*):
        Path to font file to use for rendering.

Returns:
    `torch.Tensor`: Image with header in channel-first format (C, H, W).
©r:   r;   rD   Úwhiteg     ào@rH   )ÚdeviceÚdtyperg   Úuint8ÚtvFÚto_pil_imageÚclampÚtorJ   Úmaxr@   r   rr   r   rT   ÚpasteÚresizeÚpil_to_tensorÚfloat)r€   rˆ   rŠ   r:   r;   rŽ   r�   Ú	image_pilÚimage_uint8Úheader_imageÚ	new_widthÚ
new_heightÚnew_header_heightÚ	new_imageÚresults   &&&&&          r#   Úrender_headerÚ&Pix2StructImageProcessor.render_header¹   sl  € ð. —‘ˆØ—‘ˆð �;‰;œ%Ÿ+™+Ô%Ü×(Ò(¨Ó/‰Ið ! 3�;×-Ñ-¨a°Ó5×8Ñ8¼¿¹ÓEˆKÜ×(Ò(¨Ó5ˆIô # 6ÈIÔVˆô ˜×*Ñ*¨I¯O©OÓ<ˆ	Ü˜×)Ñ)¨Y¿¹Õ-HÕIÓJˆ
Ü × 3Ñ 3°y×CUÑCUÕ7UÕ VÓWÐô —I’I˜e iÐ>OÕ1OÐ%PÐRYÓZˆ	Ø�‰˜×+Ñ+¨YÐ,JÓKÈVÔTØ�‰˜	×(Ñ(¨)Ð)@ÓAÀAÐGXÐCYÔZô ×"Ò" 9Ó-×0Ñ0°Ó8ˆð ”E—K‘KÔØ—\‘\“^ eÕ+ˆFàˆr&   c                ó"   <€ V ^8„  d   QhRRRR/# )r   Úimagesr‰   r<   r'   )r!   r"   s   "€r#   r$   rz   ñ   s   ø€ ÷ 1ñ 1 ð 1°>ñ 1r&   c                ó~  € VP                  RRR7      pVP                  RRR7      pVP                  ^,          VP                  ^,          ,          VP                  ^,          ,          pRVR,          ,          p\        P                  ! V\        P
                  ! WSP                  R7      4      pW,
          V,          # )zì
Normalize batched images using per-image mean and standard deviation.

Args:
    images (`torch.Tensor`):
        Batched float image tensor of shape (B, C, H, W).

Returns:
    `torch.Tensor`: Normalized images of shape (B, C, H, W).
T)ÚdimÚkeepdimg      ð?ç      à?©rŽ   )rG   r   é   )ÚmeanÚstdrf   rg   ÚmaximumÚtensorrŽ   )r€   r¥   r¬   r­   Únum_elements_per_imageÚmin_stdÚadjusted_stddevs   &&     r#   Ú	normalizeÚ"Pix2StructImageProcessor.normalizeñ   s‹   € ð �{‰{˜y°$ˆ{Ó7ˆØ�j‰j˜Y°ˆjÓ5ˆà!'§¡¨a¥°6·<±<Àµ?Õ!BÀVÇ\Á\ÐRSÅ_Õ!TÐØÐ.°Õ3Õ3ˆÜŸ-š-¨¬U¯\ª\¸'Ï*É*Ô-UÓVˆà• Õ0Ð0r&   c                ó.   <€ V ^8„  d   QhRRRS[ RS[RR/# )r   r¥   r‰   r   r   r<   )r   r   )r!   r"   s   "€r#   r$   rz     s9   ø€ ÷ Cñ CàðCñ ðCñ ð	Cð
 
ñCr&   c           	     óH  € VP                   VP                  rTVP                  w  rgr‰W$V,          ,          WY,          ,          R,          p
\        \	        \        W¨,          V,          4      V4      ^4      p\        \	        \        W©,          V,          4      V4      ^4      p\        W´,          ^4      p\        WÅ,          ^4      p\        WÞR7      pV P                  W\        P                  P                  RR7      p\        WV4      pVP                  w  ppppVP                  VVV,          V4      p\        P                  ! VVP                  R7      P                  V^4      P!                  ^V4      P                  ^VV,          ^4      p\        P                  ! VVP                  R7      P                  ^V4      P!                  V^4      P                  ^VV,          ^4      pVP#                  VRR4      pVP#                  VRR4      pV^,           P%                  4       pV^,           P%                  4       p\        P&                  ! VVV.RR7      p\        P(                  P*                  P-                  V^ ^ ^ VVV,          ,
          .4      P%                  4       pV# )a°  
Extract flattened patches from a batch of images.

Args:
    images (`torch.Tensor`):
        Batched images tensor of shape (batch, channels, height, width).
    max_patches (`int`):
        Maximum number of patches to extract.
    patch_size (`SizeDict`):
        Dictionary containing patch height and width.

Returns:
    `torch.Tensor`: Batched flattened patches with row/column IDs of shape (batch, max_patches, patch_dim).
r©   )rr   r@   T)rˆ   rC   ÚresampleÚ	antialiasrª   ©r§   re   )rr   r@   rf   r•   Úminr   r   r—   r‘   ÚInterpolationModeÚBILINEARrt   rk   rg   ÚarangerŽ   ÚrepeatÚexpandr™   Úcatrh   ri   Úpad)r€   r¥   r   r   rn   ro   rp   rq   Úimage_heightÚimage_widthÚscaleÚnum_feasible_rowsÚnum_feasible_colsÚresized_heightÚresized_widthÚresize_sizers   ÚrowsÚcolumnsÚdepthÚrow_idsÚcol_idsr¡   s   &&&&                   r#   Úextract_flattened_patchesÚ2Pix2StructImageProcessor.extract_flattened_patches  s=  € ð( %/×$5Ñ$5°z×7GÑ7G�kØ:@¿,¹,Ñ7ˆ
˜lð ¨|Õ ;Õ<ÀÕ@YÕZÐ_bÕbˆÜ¤¤C¨Õ(<¸|Õ(KÓ$LÈkÓ ZÐ\]Ó^ÐÜ¤¤C¨Õ(;¸kÕ(IÓ$JÈKÓ XÐZ[Ó\ÐÜÐ.Õ=¸qÓAˆÜÐ-Õ;¸QÓ?ˆô  nÔJˆØ—‘ 6Äc×F[ÑF[×FdÑFdÐpt�Óuˆô (¨¸kÓJˆà+2¯=©=Ñ(ˆ
�D˜' 5ð —/‘/ *¨d°W­n¸eÓDˆô �LŠL˜ f§m¡mÔ4×<Ñ<¸TÀ1ÓE×LÑLÈQÐPWÓX×`Ñ`ÐabÐdhÐkrÕdrÐtuÓvð 	ô �LŠL˜¨¯©Ô7ß‰W�Q˜Ó ß‰V�D˜!‹_ß‰W�Q˜˜w�¨Ó*ð	 	ð —.‘. ¨R°Ó4ˆØ—.‘. ¨R°Ó4ˆð ˜Q•;×%Ñ%Ó'ˆØ˜Q•;×%Ñ%Ó'ˆô —’˜G W¨gÐ6¸BÔ?ˆô —‘×$Ñ$×(Ñ(¨°!°Q¸¸;È$ÐQXÍ.Õ;YÐ1ZÓ[×aÑaÓcˆàˆr&   c                óp   <€ V ^8„  d   QhRS[ RS[S[S[,          ,          R,          RS[S[,          RS[/# )r   r¥   r   Nr�   r<   )r   r   r    r   r   r   )r!   r"   s   "€r#   r$   rz   L  sL   ø€ ÷ 
Mñ 
Máð
Mñ ™4¡�9•_ tÕ+ð
Mñ Ñ7Õ8ð	
Mñ
 
ñ
Mr&   c                ó*   <€ \         SV `  ! V3RV/VB # )zŽ
header_text (`Union[str, list[str]]`, *optional*):
    Text to render as a header. Only has an effect if `image_processor.is_vqa` is `True`.
r   )r}   Ú
preprocess)r€   r¥   r   r�   r‚   s   &&&,€r#   rÓ   Ú#Pix2StructImageProcessor.preprocessK  s   ø€ ô ‰wÒ! &ÑL°kÐLÀVÑLÐLr&   c                ó¤   <€ V ^8„  d   QhRS[ RS[S[S[,          ,          R,          RS[RS[RS[S[R3,          R,          RS[S[,          R	S[/# )
r   r¥   r   NÚdo_convert_rgbÚinput_data_formatrŽ   ztorch.devicer�   r<   )	r   r   r    r   r   r   r   r   r   )r!   r"   s   "€r#   r$   rz   X  ss   ø€ ÷ &2ñ &2áð&2ñ ™4¡�9•_ tÕ+ð&2ñ ð	&2ñ
 ,ð&2ñ ‘c˜>Ð)Õ*¨TÕ1ð&2ñ Ñ7Õ8ð&2ñ 
ñ&2r&   c                óÊ  € V P                  VVVVR7      pVP                  RV P                  4      pV'       d“   Vf   \        R4      hVP	                  RR4      pVP	                  RR4      p	\        V\        4      '       d   V.\        V4      ,          p\        V4       U
Uu. uF  w  r«V P                  W²V
,          W‰R7      NK!  	  pp
pV P                  ! V3/ VB # u upp
i )z#
Preprocess images for Pix2Struct.
)r¥   rÖ   r×   rŽ   r   Nz.A header text must be provided for VQA models.r:   r;   rŒ   )Ú_prepare_image_like_inputsÚgetr   Ú
ValueErrorÚpopr   r   ÚlenÚ	enumerater¢   Ú_preprocess)r€   r¥   r   rÖ   r×   rŽ   r�   r   r:   r;   Úirˆ   s   &&&&&&,     r#   Ú_preprocess_image_like_inputsÚ6Pix2StructImageProcessor._preprocess_image_like_inputsX  sç   € ð ×0Ñ0ØØ)Ø/Øð	 1ó 
ˆð —‘˜H d§k¡kÓ2ˆßØÒ"Ü Ð!QÓRÐRàŸ™ L°$Ó7ˆJØŸ
™
 ;°Ó5ˆIä˜+¤s×+Ò+Ø*˜m¬c°&«kÕ9�ô
 !*¨&Ô 1ôá 1‘H�Að ×"Ñ" 5°a­.ÀZÐ"ÖeÙ 1ð ñ ð
 ×Ò Ñ1¨&Ñ1Ð1ùós   Â$%Cc                óp   <€ V ^8„  d   QhRS[ R,          RS[RS[RS[RS[S[,          R,          RS[R	S[/# )
r   r¥   r‰   Údo_normalizer   r   Úreturn_tensorsNÚdisable_groupingr<   )r    r   r   r   r   r   r   )r!   r"   s   "€r#   r$   rz   €  s`   ø€ ÷ /
ñ /
á�^Õ$ð/
ñ ð/
ñ ð	/
ñ
 ð/
ñ ™jÕ(¨4Õ/ð/
ñ ð/
ñ 
ñ/
r&   c                ó"  € \        WR7      w  r‰/ p
/ pVP                  4        F‹  w  rÍVP                  \        P                  8X  d   VP                  4       pV'       d   V P                  V4      pV P                  WÓVR7      pVP                  RR7      ^ 8g  P                  4       pWêV&   WûV&   K�  	  \        W©4      p\        W¹4      pV'       d1   \        P                  ! V^ R7      p\        P                  ! V^ R7      p\        RVRV/VR7      # )z1
Preprocess images to extract flattened patches.
)ræ   )r¥   r   r   r¹   rw   rx   )ÚdataÚtensor_typere   )r	   Úitemsr�   rg   r�   r™   r³   rÏ   Úsumr
   Ústackr   )r€   r¥   rä   r   r   rå   ræ   r�   Úgrouped_imagesÚgrouped_images_indexÚflattened_patches_groupedÚattention_masks_groupedrf   Ústacked_imagesrs   Úmasksrw   Úattention_maskss   &&&&&&&,          r#   rß   Ú$Pix2StructImageProcessor._preprocess€  s  € ô 0EÀVÔ/oÑ,ˆà$&Ð!Ø"$Ðà%3×%9Ñ%9Ö%;Ñ!ˆEà×#Ñ#¤u§{¡{Ô2Ø!/×!5Ñ!5Ó!7�÷ Ø!%§¡°Ó!?�à×4Ñ4Ø%È:ð 5ó ˆGð —[‘[ R�[Ó(¨AÑ-×4Ñ4Ó6ˆEà/6 eÑ,Ø-2 EÓ*ñ &<ô" +Ð+DÓ[ÐÜ(Ð)@ÓWˆ÷ Ü %§¢Ð,=À1Ô EÐÜ#Ÿkšk¨/¸qÔAˆOäØ%Ð'8Ð:JÈOÐ\Ø&ô
ð 	
r&   r'   )N)NN)r(   r)   r*   r+   Úrescale_factorrä   rÖ   r   r   r   r   Úvalid_kwargsÚmodel_input_namesr~   r…   r¢   r³   rÏ   r   rÓ   r   ÚFIRSTrá   rß   r.   r/   Ú__classcell__)r‚   r"   s   @@r#   rv   rv   –   s¸   ù‡ € à€NØ€LØ€NØ˜B ¨Ð,€JØ€KØ€FØ1€LØ,Ð.>Ð?Ð÷õ ò ÷6ò 6÷p1ð 1÷*Cð CðJ ÷
Mô 
Mó ð
Mð /3Ø#Ø.>×.DÑ.DØ48÷&2ò &2÷P/
÷ /
ð /
r&   rv   )	é$   Úblackr�   é   rü   rü   rü   NN)-r,   rO   rK   Útypingr   rg   Ú$torchvision.transforms.v2.functionalÚ
transformsÚv2ri   r‘   ÚPILr   r   r   Úimage_processing_backendsr   Úimage_processing_utilsr   r   Úimage_transformsr	   r
   Úimage_utilsr   r   r   Úprocessing_utilsr   r   Úutilsr   r   Ú	utils.hubr   Úutils.import_utilsr   rR   r   rJ   ÚcompilerÚdisablert   rv   Ú__all__r'   r&   r#   Ú<module>r     s¢   ðñ ,ã 	Û Ý ã ß 2Ó 2ß +Ñ +å ;ß Aß Eß AÑ Aß 4ß /Ý Ý 3ð %Ð ô( \¸õ (÷(CðN ‡�×Ññó ðð* ôX
Ð1ó X
ó ðX
ðv &Ð
&‚r&   