Ë
    FêñiC  ã                   óê  — 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 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mZ d dlmZmZmZmZmZmZmZmZ d d	l m!Z! d d
l"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) ejT                  jW                  dddg«      d„ «       Z,ejT                  jW                  dddg«      d„ «       Z-d„ Z.ejT                  j_                  e' d¬«      ejT                  jW                  dddg«      d„ «       «       Z0ejT                  jb                  ejT                  j_                  e' d¬«      ejT                  jW                  d e	eddgddgddgddgddgdg«      D � ������cg c]"  \  } }}}}}}|r|s| dk(  r|s|r|s	| ||||||f‘Œ$ c}}}}}}} «      d„ «       «       «       Z2ejT                  jb                  ejT                  jW                  d e	eddgdgdgddgddgddgddg«      D � �������c	g c](  \  } }}}}}}}|r|s| dk(  r|s|re%r|r|s
| |||||||f‘Œ* c	}}}}}}}} «      d„ «       «       Z3ejT                  jb                  ejT                  jW                  d e	eddgdgddgddgddgddg«      D � ������cg c]  \  } }}}}}}| dk(  r|s|r|s	| ||||||f‘Œ  c}}}}}}} «      d„ «       «       Z4ejT                  jb                  ejT                  j_                  e d¬«      ejT                  j_                  e$ d¬«      ejT                  j_                  ejj                  d¬«      ejT                  j_                  exr	 exr edk\  d ¬«      ejT                  jW                  d! e	eddgddgddgddgdgddg«      D � ������cg c]-  \  } }}}}}}|r|s| d"k7  r|s|r|s| dk(  r|s|r|s	| ||||||f‘Œ/ c}}}}}}} «      d#„ «       «       «       «       «       «       Z6ejT                  jb                  ejT                  j_                  ejn                   xs e% d$¬«      ejT                  j_                  e xs ed%¬«      ejT                  jW                  d e	edgddgddgdgddgddg«      D � ������cg c]*  \  } }}}}}}|r|s| dk(  r|ser|s|re%r|r|s	| ||||||f‘Œ, c}}}}}}} «      d&„ «       «       «       «       Z8ejT                  j_                  e$ d¬«      ejT                  j_                  ed'¬«      ejT                  j_                  exr ed(¬«      ejT                  j_                  ejj                  d¬«      d)„ «       «       «       «       Z9ejT                  j_                  ejn                   d*¬«      ejT                  j_                  e% d+¬«      ejT                  j_                  e d,¬«      d-„ «       «       «       Z:ejT                  j_                  dd.¬«      ejT                  j_                  e d/¬«      d0„ «       «       Z;ejT                  j_                  dd1¬«      d2„ «       Z<ejT                  jb                  ejT                  j_                  e# d3¬«      d4„ «       «       Z=ejT                  jb                  ejT                  j_                  e# d3¬«      ejT                  jW                  d5 e	eddgddgddgddg«      D � ����cg c]  \  } }}}}|r|s| ||||f‘Œ c}}}}} «      d6„ «       «       «       Z>ejT                  jb                  ejT                  j_                  e& d7¬«      d8„ «       «       Z?ejT                  jb                  ejT                  j_                  e& d7¬«      ejT                  jW                  d9 e@ e	eddgdg«      «      «      d:„ «       «       «       ZAejT                  j_                  e) d;¬«      ejT                  j_                  ej„                   d<¬«      ejT                  j_                  e d=¬«      ejT                  j_                  ed>¬«      d?„ «       «       «       «       ZCejT                  j_                  ejn                   xs e) d@¬«      ejT                  j_                  edA¬«      dB„ «       «       ZDejT                  jb                  ejT                  j_                  ejn                   xs e) d@¬«      ejT                  j_                  edA¬«      ejT                  jW                  dCe«      dD„ «       «       «       «       ZEejT                  jb                  ejT                  j_                  e( dE¬«      ejT                  j_                  e xs exr edF¬«      ejT                  j_                  edG¬«      dH„ «       «       «       «       ZFyc c}}}}}}} w c c	}}}}}}}} w c c}}}}}}} w c c}}}}}}} w c c}}}}}}} w c c}}}}} w )Ié    N)Úredirect_stderrÚredirect_stdout)Úproduct)ÚPath)ÚMODELÚSOURCE)ÚYOLO)Ú	TASK2DATAÚ
TASK2MODELÚTASKS)ÚARM64Ú	IS_DOCKERÚIS_RASPBERRYPIÚLINUXÚMACOSÚMACOS_VERSIONÚWINDOWSÚchecks)Ú
torch2onnx)Ú
TORCH_1_10Ú
TORCH_1_11Ú
TORCH_1_13Ú	TORCH_2_0Ú	TORCH_2_1Ú	TORCH_2_8Ú	TORCH_2_9Úend2endFTc                 óv   — t        t        «      j                  ddd| ¬«      } t        |«      t        d¬«       y)zOTest YOLO model export to TorchScript format for compatibility and correctness.ÚtorchscriptFé    )ÚformatÚoptimizeÚimgszr   ©r#   N©r	   r   Úexportr   ©r   Úfiles     úT/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/tests/test_exports.pyÚtest_export_torchscriptr*      s2   € ô ”‹;×Ñ ]¸UÈ"ÐV]ÐÓ^€DØ„DˆƒJŒv˜RÖ ó    c                 óv   — t        t        «      j                  ddd| ¬«      } t        |«      t        d¬«       y)z8Test YOLO model export to ONNX format with dynamic axes.ÚonnxTr    )r!   Údynamicr#   r   r$   Nr%   r'   s     r)   Útest_export_onnxr/      s1   € ô ”‹;×Ñ V°TÀÈWÐÓU€DØ„DˆƒJŒv˜RÖ r+   c                 ó¤  ‡‡‡‡	‡
— dŠdŠ	g Št        j                  «       Š
ˆˆ	ˆ
fd„}| j                  t        j                  d|«       dt
        fˆˆfd„}t        d«      D �cg c]  }t        j                  ||f¬«      ‘Œ }}|D ]  }|j                  «        Œ |D ]  }|j                  «        Œ ‰r
J d‰› �«       ‚‰	d	k(  s
J d
‰	› �«       ‚yc c}w )z9Ensure ONNX exports do not overlap across worker threads.r   c                  ó¸   •— ‰5  ‰dz  Št        ‰‰«      Šd d d «       t        j                  d«       ‰5  ‰dz  Šd d d «       y # 1 sw Y   Œ/xY w# 1 sw Y   y xY w)Né   gš™™™™™©?)ÚmaxÚtimeÚsleep)ÚargsÚkwargsÚactiveÚ
max_activeÚ
state_locks     €€€r)   Úfake_exportzBtest_torch2onnx_serializes_concurrent_exports.<locals>.fake_export,   sd   ø€ àñ 	1Ø�a‰KˆFÜ˜Z¨Ó0ˆJ÷	1ô 	�
‰
�4ÔØñ 	Ø�a‰KˆF÷	ð 	÷		1ð 	1ú÷	ð 	ús   „AµAÁAÁAr&   Úindexc           
      óô   •— 	 t        t        j                  j                  «       t        j                  dddd«      t        ‰d| › d�z  «      «       y # t        $ r}‰j                  |«       Y d }~y d }~ww xY w)Nr2   é   é   zexport-z.onnx)r   ÚtorchÚnnÚIdentityÚzerosÚstrÚ	ExceptionÚappend)r<   ÚerrorÚerrorsÚtmp_paths     €€r)   Úexport_modelzCtest_torch2onnx_serializes_concurrent_exports.<locals>.export_model7   sf   ø€ ð	!Ü”u—x‘x×(Ñ(Ó*¬E¯K©K¸¸1¸aÀÓ,CÄSÈÐV]Ð^cÐ]dÐdiÐTjÑIjÓEkÕløÜò 	!Ø�M‰M˜%× Ñ ûð	!ús   ƒAA Á	A7ÁA2Á2A7é   )Útargetr6   zConcurrent export errors: r2   z&Expected max 1 concurrent export, got N)
Ú	threadingÚLockÚsetattrr@   r-   ÚintÚrangeÚThreadÚstartÚjoin)ÚmonkeypatchrI   r;   rJ   ÚiÚthreadsÚthreadr8   rH   r9   r:   s    `     @@@@r)   Ú-test_torch2onnx_serializes_concurrent_exportsrY   %   s×   ü€ à€FØ€JØ€FÜ—‘Ó!€Jöð ×ÑœŸ
™
 H¨kÔ:ð!œCö !ô JOÈqËÖRÀAŒy×Ñ |¸1¸$Ö?ÐR€GÐRØò ˆØ�‰�ðàò ˆØ�‰�ðñ Ð<Ð3°F°8Ð<Ó<ˆ:Ø˜Š?ÐQÐDÀZÀLÐQÓQ‰?ùò Ss   Á"CzOpenVINO requires torch>=2.1)Úreasonc                 ó  — t        t        «      j                  dd| ¬«      }t        rLt	        |«      }|j                  |j                  |j                  › dt        j                  «       › �«      «      } t        |«      t        d¬«       y)zFTest YOLO export to OpenVINO format for model inference compatibility.Úopenvinor    )r!   r#   r   ú-r$   N)r	   r   r&   r   r   ÚrenameÚ	with_stemÚstemÚuuidÚuuid4r   r'   s     r)   Útest_export_openvinorc   G   sg   € ô ”‹;×Ñ Z°rÀ7ÐÓK€DÝä�D‹zˆØ�{‰{˜4Ÿ>™>¨T¯Y©Y¨K°q¼¿¹»¸Ð*GÓHÓIˆØ„DˆƒJŒv˜RÖ r+   z.task, dynamic, int8, half, batch, nms, end2endr2   é   Úclassifyc                 óx  — t        t        |    «      j                  dd||||t        |    ||¬«	      }t        rLt        |«      }|j                  |j                  |j                  › dt        j                  «       › �«      «      } t        |«      t        g|z  |rdnd|¬«       t        j                  |d¬«       y	)
zQTest YOLO model export to OpenVINO under various configuration matrix conditions.r\   r    )	r!   r#   r.   Úint8ÚhalfÚbatchÚdataÚnmsr   r]   é@   )r#   ri   T©Úignore_errorsN)r	   r   r&   r
   r   r   r^   r_   r`   ra   rb   r   ÚshutilÚrmtree©Útaskr.   rg   rh   ri   rk   r   r(   s           r)   Útest_export_openvino_matrixrs   S   s§   € ô ”
˜4Ñ Ó!×(Ñ(ØØØØØØÜ�t‰_ØØð )ó 
€Dõ ä�D‹zˆØ�{‰{˜4Ÿ>™>¨T¯Y©Y¨K°q¼¿¹»¸Ð*GÓHÓIˆØ„DˆƒJ”ˆx˜%Ñ©W¡r¸"ÀEÕJÜ
‡M�M�$ dÖ+r+   z8task, dynamic, int8, half, batch, simplify, nms, end2endc                 óÈ   — t        t        |    «      j                  dd|||||||¬«	      } t        |«      t        g|z  |rdnd¬«       t	        |«      j                  «        y)zKTest YOLO export to ONNX format with various configurations and parameters.r-   r    )	r!   r#   r.   rg   rh   ri   Úsimplifyrk   r   rl   r$   N©r	   r   r&   r   r   Úunlink)	rr   r.   rg   rh   ri   ru   rk   r   r(   s	            r)   Útest_export_onnx_matrixrx   u   sk   € ô ”
˜4Ñ Ó!×(Ñ(ØØØØØØØØØð )ó 
€Dð „DˆƒJ”ˆx˜%Ñ©W¡r¸"Õ=ÜˆƒJ×ÑÕr+   c           
      óÆ   — t        t        |    «      j                  dd||||||¬«      } t        |«      t        g|z  |rdnd¬«       t	        |«      j                  «        y)zITest YOLO model export to TorchScript format under varied configurations.r   r    ©r!   r#   r.   rg   rh   ri   rk   r   rl   r$   Nrv   rq   s           r)   Útest_export_torchscript_matrixr{   ‘   sd   € ô ”
˜4Ñ Ó!×(Ñ(Ø B°¸dÈÐUZÐ`cÐmtð )ó €Dð „DˆƒJ”ˆx˜%Ñ©W¡r¸"Õ=ÜˆƒJ×ÑÕr+   z(CoreML inference only supported on macOSz"CoreML export requires torch>=1.11z#CoreML not supported in Python 3.13Ú15z.CoreML YOLO26 matrix test crashes on macOS 15+z.task, dynamic, int8, half, nms, batch, end2endÚdetectc           
      ó¶   — t        t        |    «      j                  dd||||||¬«      } t        |«      t        g|z  d¬«       t	        j
                  |«       y)zHTest YOLO export to CoreML format with various parameter configurations.Úcoremlr    rz   r$   N©r	   r   r&   r   ro   rp   )rr   r.   rg   rh   rk   ri   r   r(   s           r)   Útest_export_coreml_matrixr�   ¥   s`   € ô. ”
˜4Ñ Ó!×(Ñ(ØØØØØØØØð )ó 	€Dð „DˆƒJ”ˆx˜%Ñ rÕ*Ü
‡M�M�$Õr+   z3TFLite export requires Python>=3.10 and torch>=1.13zUTest disabled as TF suffers from install conflicts on Windows, macOS and Raspberry Pic           
      ó¾   — t        t        |    «      j                  dd||||||¬«      } t        |«      t        g|z  d¬«       t	        |«      j                  «        y)zLTest YOLO export to TFLite format considering various export configurations.Útfliter    rz   r$   Nrv   rq   s           r)   Útest_export_tflite_matrixr„   Ê   s`   € ô4 ”
˜4Ñ Ó!×(Ñ(Ø˜r¨7¸ÀDÐPUÐ[^Ðhoð )ó €Dð „DˆƒJ”ˆx˜%Ñ rÕ*ÜˆƒJ×ÑÕr+   zCoreML not supported on Windowsz%CoreML not supported on aarch64 Linuxc                  ó  — t        j                  «       t        j                  «       }} t        | «      5  t        |«      5  t	        t
        «      j                  ddd¬«       t        r7t	        t
        «      j                  dd¬«      } t	        |«      t        d¬«       ddd«       ddd«       | j                  «       |j                  «       z   }d|vs
J d	|› �«       ‚d
|vsJ d«       ‚y# 1 sw Y   ŒLxY w# 1 sw Y   ŒPxY w)z7Test YOLO export to CoreML format and check for errors.r   Tr    )r!   rk   r#   ©r!   r#   r$   NÚErrorzCoreML export produced errors: z%You will not be able to run predict()z!CoreML export has predict() error)
ÚioÚStringIOr   r   r	   r   r&   r   r   Úgetvalue)ÚstdoutÚstderrr(   Úoutputs       r)   Útest_export_coremlrŽ   ë   sà   € ô —[‘[“]¤B§K¡K£MˆF€FÜ	˜Ó	 ñ )¤/°&Ó"9ñ )ÜŒU‹×Ñ (°¸BÐÔ?ÝÜœ“;×%Ñ%¨X¸RÐ%Ó@ˆDØŒD�‹J”v RÕ(÷	)÷ )ð �_‰_Ó §¡Ó!2Ñ2€FØ˜&Ñ ÐLÐ$CÀFÀ8Ð"LÓLÐ Ø2¸&Ñ@ÐeÐBeÓeÑ@÷)ð )ú÷ )ð )ús$   ´C6Á AC*ÂC6Ã*C3	Ã/C6Ã6C?z#TFLite export requires Python>=3.10z"TFLite export requires torch>=1.13zGTest disabled as TF suffers from install conflicts on Windows and macOSc                  óv   — t        t        «      } | j                  dd¬«      } t        |«      t        d¬«       y)zRTest YOLO export to TFLite format under specific OS and Python version conditions.rƒ   r    r†   r$   Nr%   ©Úmodelr(   s     r)   Útest_export_tfliter’   ÿ   s/   € ô
 ”‹K€EØ�<‰<˜x¨rˆ<Ó2€DØ„DˆƒJŒv˜RÖ r+   zTest disabledz6TF suffers from install conflicts on Windows and macOSc                  óv   — t        t        «      } | j                  dd¬«      } t        |«      t        d¬«       y)z8Test YOLO export to TensorFlow's Protobuf (*.pb) format.Úpbr    r†   r$   Nr%   r�   s     r)   Útest_export_pbr•   	  s/   € ô ”‹K€EØ�<‰<˜t¨2ˆ<Ó.€DØ„DˆƒJŒv˜RÖ r+   zITest disabled as Paddle protobuf and ONNX protobuf requirements conflict.c                  óD   — t        t        «      j                  dd¬«       y)zGTest YOLO export to Paddle format, noting protobuf conflicts with ONNX.Úpaddler    r†   N)r	   r   r&   © r+   r)   Útest_export_paddler™     s   € ô 	ŒƒK×Ñ˜h¨bÐÕ1r+   zMNN export requires torch>=1.10c                  ór   — t        t        «      j                  dd¬«      }  t        | «      t        d¬«       y)zaTest YOLO export to MNN format (WARNING: MNN test must precede NCNN test or CI error on Windows).Úmnnr    r†   r$   Nr%   ©r(   s    r)   Útest_export_mnnr�     s-   € ô ”‹;×Ñ U°"ÐÓ5€DØ„DˆƒJŒv˜RÖ r+   z task, int8, half, batch, end2endc                 óº   — t        t        |    «      j                  dd||||¬«      } t        |«      t        g|z  d¬«       t	        |«      j                  «        y)zITest YOLO export to MNN format considering various export configurations.r›   r    )r!   r#   rg   rh   ri   r   r$   Nrv   )rr   rg   rh   ri   r   r(   s         r)   Útest_export_mnn_matrixrŸ      sU   € ô ”
˜4Ñ Ó!×(Ñ(°¸RÀdÐQUÐ]bÐlsÐ(Ót€DØ„DˆƒJ”ˆx˜%Ñ rÕ*ÜˆƒJ×ÑÕr+   z-NCNN inference causes segfault on PyTorch<2.0c                  ór   — t        t        «      j                  dd¬«      }  t        | «      t        d¬«       y)z Test YOLO export to NCNN format.Úncnnr    r†   r$   Nr%   rœ   s    r)   Útest_export_ncnnr¢   1  s-   € ô ”‹;×Ñ V°2ÐÓ6€DØ„DˆƒJŒv˜RÖ r+   ztask, half, batchc                 ó²   — t        t        |    «      j                  dd||¬«      } t        |«      t        g|z  d¬«       t	        j
                  |d¬«       y)zJTest YOLO export to NCNN format considering various export configurations.r¡   r    )r!   r#   rh   ri   r$   Trm   Nr€   )rr   rh   ri   r(   s       r)   Útest_export_ncnn_matrixr¤   9  sM   € ô
 ”
˜4Ñ Ó!×(Ñ(°¸bÀtÐSXÐ(ÓY€DØ„DˆƒJ”ˆx˜%Ñ rÕ*Ü
‡M�M�$ dÖ+r+   z IMX export requires torch>=2.9.0zRequires Python>=3.9z"IMX export only supported on LinuxzSTest disabled as IMX export suffers from OOM (Out of Memory) on Raspberry Pi 5 16GBc                  ón   — t        d«      } | j                  dd¬«      } t        |«      t        d¬«       y)zTest YOLO export to IMX format.z
yolo11n.ptÚimxr    r†   r$   N)r	   r&   r   r�   s     r)   Útest_export_imxr§   C  s0   € ô �Ó€EØ�<‰<˜u¨Bˆ<Ó/€DØ„DˆƒJŒv˜RÖ r+   z&Requires Python>=3.10 and Torch>=2.9.0zSkipping test on Windowsc                  óX  — t        t        «      j                  dd¬«      } t        | «      j	                  «       s
J d| › �«       ‚t        | «      dz  }|j	                  «       s
J d|› �«       ‚t        | «      dz  }|j	                  «       s
J d|› �«       ‚t        j                  | d	¬
«       y)z,Test YOLO model export to ExecuTorch format.Ú
executorchr    r†   z/ExecuTorch export failed, directory not found: ú	model.ptez ExecuTorch .pte file not found: úmetadata.yamlz$ExecuTorch metadata.yaml not found: Trm   N©r	   r   r&   r   Úexistsro   rp   )r(   Úpte_fileÚmetadata_files      r)   Útest_export_executorchr°   Q  s¨   € ô ”‹;×Ñ \¸ÐÓ<€DÜ�‹:×ÑÔÐXÐ"QÐRVÐQWÐ XÓXÐä�D‹z˜KÑ'€HØ�?‰?ÔÐKÐ @ÀÀ
ÐKÓKÐä˜“J Ñ0€MØ×ÑÔ!ÐYÐ%IÈ-ÈÐ#YÓYÐ!ä
‡M�M�$ dÖ+r+   rr   c                 óp  — t        t        |    «      j                  dd¬«      }t        |«      j	                  «       sJ d| › d|› �«       ‚t        |«      dz  }|j	                  «       sJ d| › d|› �«       ‚t        |«      d	z  }|j	                  «       sJ d
| › d|› �«       ‚t        j                  |d¬«       y)z=Test YOLO export to ExecuTorch format for various task types.r©   r    r†   z#ExecuTorch export failed for task 'z', directory not found: rª   z)ExecuTorch .pte file not found for task 'z': r«   z-ExecuTorch metadata.yaml not found for task 'Trm   N)r	   r   r&   r   r­   ro   rp   )rr   r(   r®   r¯   s       r)   Útest_export_executorch_matrixr²   a  sÈ   € ô ”
˜4Ñ Ó!×(Ñ(°ÀBÐ(ÓG€DÜ�‹:×ÑÔÐjÐ"EÀdÀVÐKcÐdhÐciÐ jÓjÐä�D‹z˜KÑ'€HØ�?‰?ÔÐ]Ð IÈ$ÈÈsÐS[ÐR\Ð]Ó]Ðä˜“J Ñ0€MØ×ÑÔ!ÐkÐ%RÐSWÐRXÐX[Ð\iÐ[jÐ#kÓkÐ!ä
‡M�M�$ dÖ+r+   z$Axelera export requires torch>=2.8.0zNAxelera export is only supported on Linux and is not supported on ARM64 DockerzFTest disabled due to OOM (Out of Memory) issues on Raspberry Pi 5 16GBc                  óº   — t        t        «      j                  ddd¬«      } t        | «      j	                  «       s
J d| › �«       ‚t        j                  | d¬«       y)	z#Test YOLO export to Axelera format.Úaxelerarl   z
coco8.yaml)r!   r#   rj   z,Axelera export failed, directory not found: Trm   Nr¬   rœ   s    r)   Útest_export_axelerarµ   s  sP   € ô ”‹;×Ñ Y°b¸|ÐÓL€DÜ�‹:×ÑÔÐUÐ"NÈtÈfÐ UÓUÐä
‡M�M�$ dÖ+r+   )Grˆ   ro   rM   r4   ra   Ú
contextlibr   r   Ú	itertoolsr   Úpathlibr   Úpytestr@   Útestsr   r   Úultralyticsr	   Úultralytics.cfgr
   r   r   Úultralytics.utilsr   r   r   r   r   r   r   r   Úultralytics.utils.export.enginer   Úultralytics.utils.torch_utilsr   r   r   r   r   r   r   ÚmarkÚparametrizer*   r/   rY   Úskipifrc   Úslowrs   rx   r{   ÚIS_PYTHON_3_13r�   ÚIS_PYTHON_MINIMUM_3_10r„   rŽ   r’   r•   r™   r�   rŸ   r¢   Úlistr¤   ÚIS_PYTHON_MINIMUM_3_9r§   r°   r²   rµ   )rr   r.   rg   rh   ri   rk   r   ru   s   00000000r)   ú<module>rÈ      s  ðó 
Û Û Û Û ß 7Ý Ý ã Û ç Ý ß 8Ñ 8ß l× lÓ lÝ 6ß x× xÑ xð ‡�×Ñ˜ U¨D MÓ2ñ!ó 3ð!ð ‡�×Ñ˜ U¨D MÓ2ñ!ó 3ð!òRðD ‡�×Ñ˜	�MÐ*HÐÓIØ‡�×Ñ˜ U¨D MÓ2ñ!ó 3ó Jð!ð ‡�×ÑØ‡�×Ñ˜	�MÐ*HÐÓIØ‡�×ÑØ4ñ ?FØ�D˜%�= 4¨ -°$¸°ÀÀAÀÈÈuÈÐX\ÐW]ó?
÷ô á:ˆD�'˜4  u¨c°7ñ ™$ D¨JÒ$6¹3ÁGÑPSð	 
ˆw˜˜d E¨3°Ò8÷ð ó	ñ,ó	ó Jó ð,ð* ‡�×ÑØ‡�×ÑØ>ñ IPØ�D˜%�= 5 '¨E¨7°Q¸°F¸TÀ5¸MÈDÐRWÈ=Ð[_ÐafÐZgóI
÷õ áDˆD�'˜4  u¨h¸¸Wñ ™$ D¨JÒ$6¹3ÁCÑPZÑ`gÑloð	 
ˆw˜˜d E¨8°S¸'ÒB÷ñ ó	ñó	ó ðð" ‡�×ÑØ‡�×ÑØ4ñ ?FØ�E˜4�= 5 '¨E°4¨=¸1¸a¸&À4ÈÀ-ÐRVÐX]ÐQ^ó?
÷ô á:ˆD�'˜4  u¨c°7ð ˜Ò#©±¹Sð	 
ˆw˜˜d E¨3°Ò8÷ð ó	ñó	ó ðð ‡�×ÑØ‡�×Ñ˜�IÐ&PÐÓQØ‡�×Ñ˜
�NÐ+OÐÓPØ‡�×Ñ�F×)Ñ)Ð2WÐÓXØ‡�×ÑØ	Ò5ˆmÒ5 °Ñ 5Ð>nð ó ð ‡�×ÑØ4ñ ?FØ�D˜%�= 4¨ -°$¸°ÀÀuÀÐPQÈsÐUYÐ[`ÐTaó?
÷
ô 
á:ˆD�'˜4  s¨E°7ñ ™Ø˜Ò!¡cÙ™SØ˜Ò#©Ù™Sð 
ˆw˜˜d C¨°Ò8÷
ð 
óñóóó Yó Qó Ró ð*ð  ‡�×ÑØ‡�×ÑØ×%Ñ%Ð%Ò7¨Z¨Ð@uð ó ð ‡�×ÑØ€IÒ�Øbð ó ð ‡�×ÑØ4ñ ?FØ�E�7˜T 5˜M¨D°%¨=¸1¸#ÀÀe¸}ÈtÐUZÈmó?
÷ô á:ˆD�'˜4  u¨c°7ñ ‘dØ˜
Ò"¡sÙ™#Ù™JÙ™Cð 
ˆw˜˜d E¨3°Ò8÷ð óñ ó!ó	óó ð0ð ‡�×Ñ˜
�NÐ+OÐÓPØ‡�×Ñ�GÐ$EÐÓFØ‡�×Ñ�E’O˜eÐ,SÐÓTØ‡�×Ñ�F×)Ñ)Ð2WÐÓXñfó Yó Uó Gó Qðfð  ‡�×Ñ˜×5Ñ5Ð5Ð>cÐÓdØ‡�×Ñ˜
�NÐ+OÐÓPØ‡�×Ñ˜�IÐ&oÐÓpñ!ó qó Qó eð!ð ‡�×Ñ�D ÐÓ1Ø‡�×Ñ˜�IÐ&^ÐÓ_ñ!ó `ó 2ð!ð ‡�×Ñ�DÐ!lÐÓmñ2ó nð2ð
 ‡�×ÑØ‡�×Ñ˜
�NÐ+LÐÓMñ!ó Nó ð!ð ‡�×ÑØ‡�×Ñ˜
�NÐ+LÐÓMØ‡�×ÑØ&ñ 18¸ÀÀe¸}ÈtÐUZÈmÐ^_ÐabÐ]cÐfjÐlqÐerÓ0s÷ò á,ˆD�$˜˜e WÙ™ð 
ˆt�T˜5 'Ò*öóñóó Nó ðð ‡�×ÑØ‡�×Ñ˜	�MÐ*YÐÓZñ!ó [ó ð!ð ‡�×ÑØ‡�×Ñ˜	�MÐ*YÐÓZØ‡�×ÑÐ,©d±7¸5À4ÈÀ-ÐRSÐQTÓ3UÓ.VÓWñ,ó Xó [ó ð,ð ‡�×Ñ˜	�MÐ*LÐÓMØ‡�×Ñ˜×4Ñ4Ð4Ð=SÐÓTØ‡�×Ñ˜�IÐ&JÐÓKØ‡�×ÑØÐpð ó ñ!óó Ló Uó Nð!ð ‡�×Ñ˜×5Ñ5Ð5ÒF¸Y¸ÐOwÐÓxØ‡�×Ñ�GÐ$>ÐÓ?ñ,ó @ó yð,ð ‡�×ÑØ‡�×Ñ˜×5Ñ5Ð5ÒF¸Y¸ÐOwÐÓxØ‡�×Ñ�GÐ$>ÐÓ?Ø‡�×Ñ˜ Ó'ñ,ó (ó @ó yó ð,ð ‡�×ÑØ‡�×Ñ˜	�MÐ*PÐÓQØ‡�×ÑØ€IÒ&�%Ò%˜IØ[ð ó ð ‡�×Ñ�NÐ+sÐÓtñ,ó uó	ó Ró ñ,ù÷G	ð ù÷Bñ ù÷8ð ù÷4
ð 
ù÷Lð ùö`s$   Å.'f4Ç?-f?Ê#gÎ2g Ò/g!Û$g,