§
    �Štjo¶  ã            !       óÐ  — U d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	 ddlm
Z
 ddlmZ ddlmZ ddlmZmZ dd	lmZ ddlZddlZd
„ Z G d„ de¦  «        Z G d„ d¦  «        Zeeef         ZdZi Zeed<   	 dddœZg d¢Z G d„ de¦  «        Z d„ Z! G d„ d¦  «        Z" G d„ d¦  «        Z#dedefd„Z$dedede%fd „Z&d!„ Z'	 	 	 	 	 ded$ed%ed&eded'e%d(e%dee         fd)„Z(d*ed+ed,ed-ed.eee)f         d/e%d(e%d0e#d1e%ddfd2„Z*dfd3„Z+d4„ Z, ej-        d5¦  «        Z.d6„ Z/d7„ Z0d8„ Z1d9„ Z2 ej-        d:¦  «        Z3d;„ Z4 ej-        d<¦  «        Z5d=„ Z6 ej-        d>¦  «        Z7d?„ Z8dgd@„Z9de%fdA„Z:de%fdB„Z;dC„ Z<de%fdD„Z=dE„ Z> G dF„ dG¦  «        Z? G dH„ dI¦  «        Z@ e@¦   «         ZAi ZBeeeCf         edJ<   e	D ]MZD eEeDe¦  «        s eFdK¦  «        ‚eD G                    ¦   «         D ]\  ZHZIeA J                    eH¦  «         eIeBeH<   Œ ŒN ej-        dLeA K                    ¦   «         › dM�¦  «        ZL ej-        dN¦  «        ZM ej-        dO¦  «        ZN ej-        dP¦  «        ZO ej-        dQ¦  «        ZP	 d*ed+ed,ed-ed.eee)f         d/e%d(e%d0e#d1e%defdR„ZQdgdfdS„ZRdfdT„ZSdU„ ZT ej-        dV¦  «        ZUdW„ ZVdXede%fdY„ZW	 	 	 	 	 	 	 	 	 	 	 	 	 	 dhd_ed`e%dedaed*ed-ed%edbed'e%d&ed1e%d/e%d(e%dce%d0e#dz  def dd„ZXdS )ia   The Python Hipify script.
##
# Copyright (c) 2015-2016 Advanced Micro Devices, Inc. All rights reserved.
#               2017-2018 Advanced Micro Devices, Inc. and
#                         Facebook Inc. All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
é    Né   )ÚCUDA_TO_HIP_MAPPINGS)ÚMATH_TRANSPILATIONS)ÚCAFFE2_PATH_MAPPINGS)ÚIterator)ÚMappingÚIterable)ÚEnumc                 óD   — t          j        d| › �t          d¬¦  «         d S )Nz-hipify version 2.0.0 no longer uses function é   )Ú
stacklevel)ÚwarningsÚwarnÚFutureWarning)Únames    ú^/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/utils/hipify/hipify_python.pyÚ_deprecatedr   -   s)   € Ý„MÐHÀ$ÐHÐHÍ-ÐdeÐfÑfÔfÐfÐfÐfó    c                   ó   — e Zd ZdZdZdS )ÚCurrentStater   r   N)Ú__name__Ú
__module__Ú__qualname__ÚINITIALIZEDÚDONE© r   r   r   r   0   s   € € € € € Ø€KØ€D€D€Dr   r   c                   ó"   — e Zd Zdd„Zdefd„ZdS )ÚHipifyResultÚreturnNc                 ó0   — || _         || _        d| _        d S )NÚ ©Úcurrent_stateÚhipified_pathÚstatus)Úselfr#   r$   s      r   Ú__init__zHipifyResult.__init__5   s   € Ø*ˆÔØ*ˆÔØˆŒˆˆr   c                 ó6   — d| j         › d| j        › d| j        › �S )NzHipifyResult:: current_state: z, hipified_path : z
, status: r"   ©r&   s    r   Ú__str__zHipifyResult.__str__:   sG   € ð C°Ô1Cð  Cð  CÐW[ÔWið  Cð  CÐuyô  vAð  Cð  Cð  	Dr   ©r   N)r   r   r   r'   Ústrr*   r   r   r   r   r   4   sJ   € € € € € ðð ð ð ð
D˜ð Dð Dð Dð Dð Dð Dr   r   z;// !!! This is a file automatically generated by hipify!!!
ÚHIPIFY_FINAL_RESULTÚscalar_t)ÚDtypeÚT) Ú
InputErrorÚopenfÚbcolorsÚGeneratedFileCleanerÚmatch_extensionsÚmatched_files_iterÚpreprocess_file_and_save_resultÚcompute_statsÚadd_dim3ÚprocessKernelLaunchesÚfind_closure_groupÚfind_bracket_groupÚfind_parentheses_groupÚreplace_math_functionsÚhip_header_magicÚreplace_extern_sharedÚget_hip_file_pathÚis_out_of_placeÚis_pytorch_fileÚis_cusparse_fileÚis_special_fileÚis_caffe2_gpu_fileÚTrieÚpreprocessorÚfile_specific_replacementÚfile_add_headerÚfix_static_global_kernelsÚextract_argumentsÚstr2boolr   r   Úhipifyc                   ó,   ‡ — e Zd Zdˆ fd„Zdefd„Zˆ xZS )r1   r   Nc                 óX   •— t          ¦   «                              |¦  «         || _        d S ©N)Úsuperr'   Úmessage)r&   rS   Ú	__class__s     €r   r'   zInputError.__init__Q   s&   ø€ Ý‰Œ×Ò˜Ñ!Ô!Ð!ØˆŒˆˆr   c                 ó   — d| j         › �S )NzInput error: )rS   r)   s    r   r*   zInputError.__str__U   s   € Ø-˜tœ|Ð-Ð-Ð-r   r+   )r   r   r   r'   r,   r*   Ú__classcell__)rT   s   @r   r1   r1   N   sX   ø€ € € € € ðð ð ð ð ð ð.˜ð .ð .ð .ð .ð .ð .ð .ð .r   r1   c                 ó&   — t          | |d¬¦  «        S )NÚignore)Úerrors)Úopen)ÚfilenameÚmodes     r   r2   r2   Y   s   € Ý�˜$ xÐ0Ñ0Ô0Ð0r   c                   ó.   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
r3   z[95mz[94mz[92mz[93mz[91mz[0mz[1mz[4mN)r   r   r   ÚHEADERÚOKBLUEÚOKGREENÚWARNINGÚFAILÚENDCÚBOLDÚ	UNDERLINEr   r   r   r3   r3   ^   s6   € € € € € Ø€FØ€FØ€GØ€GØ€DØ€DØ€DØ€I€I€Ir   r3   c                   ó8   — e Zd ZdZd
dd„Zd„ Zd„ Zd
dd„Zd	„ ZdS )r4   z+Context Manager to clean up generated filesFr   Nc                 óH   — || _         t          ¦   «         | _        g | _        d S rQ   )Úkeep_intermediatesÚsetÚfiles_to_cleanÚdirs_to_clean)r&   rh   s     r   r'   zGeneratedFileCleaner.__init__s   s$   € Ø"4ˆÔÝ!™eœeˆÔØˆÔÐÐr   c                 ó   — | S rQ   r   r)   s    r   Ú	__enter__zGeneratedFileCleaner.__enter__x   s   € Øˆr   c                 óÎ   — t           j                             |¦  «        s7| j                             t           j                             |¦  «        ¦  «         t          |g|¢R i |¤ŽS rQ   )ÚosÚpathÚexistsrj   ÚaddÚabspathrZ   )r&   ÚfnÚargsÚkwargss       r   rZ   zGeneratedFileCleaner.open{   s[   € ÝŒw�~Š~˜bÑ!Ô!ð 	9ØÔ×#Ò#¥B¤G§O¢O°BÑ$7Ô$7Ñ8Ô8Ð8å�BÐ(˜Ð(Ð(Ð( Ð(Ð(Ð(r   c                 óâ  — t           j                             |¦  «        \  }}|s"t           j                             |¦  «        \  }}|r8|r6t           j                             |¦  «        s|                      |d¬¦  «         t           j                             |¦  «        r|sMt          j        |¦  «         | j                             t           j         	                    |¦  «        ¦  «         d S d S )NT)Úexist_ok)
ro   rp   Úsplitrq   ÚmakedirsÚisdirÚmkdirrk   Úappendrs   )r&   Údnrx   ÚparentÚns        r   rz   zGeneratedFileCleaner.makedirs�   sÑ   € Ý”G—M’M "Ñ%Ô%‰	ˆ�Øð 	.ÝœŸš fÑ-Ô-‰IˆF�AØð 	1�að 	1¥¤§¢¨vÑ 6Ô 6ð 	1Ø�MŠM˜&¨4ˆMÑ0Ô0Ð0ÝŒw�}Š}˜RÑ Ô ð 	;¨ð 	;ÝŒH�R‰LŒLˆLØÔ×%Ò%¥b¤g§o¢o°bÑ&9Ô&9Ñ:Ô:Ð:Ð:Ð:ð	;ð 	;r   c                 ó¢   — | j         sE| j        D ]}t          j        |¦  «         Œ| j        d d d…         D ]}t          j        |¦  «         Œd S d S )Néÿÿÿÿ)rh   rj   ro   Úunlinkrk   Úrmdir)r&   ÚtypeÚvalueÚ	tracebackÚfÚds         r   Ú__exit__zGeneratedFileCleaner.__exit__‹   sn   € ØÔ&ð 	ØÔ(ð ð �Ý”	˜!‘”��ØÔ'¨¨¨"¨Ô-ð ð �Ý”˜‘”��ð		ð 	ðð r   ©Fr+   )	r   r   r   Ú__doc__r'   rm   rZ   rz   rŠ   r   r   r   r4   r4   q   sy   € € € € € Ø5Ð5ð ð  ð  ð  ð  ð
ð ð ð)ð )ð )ð;ð ;ð ;ð ;ð ;ðð ð ð ð r   r4   rp   r   c                 óB   — |                       t          j        d¦  «        S )Nú/)Úreplacero   Úsep)rp   s    r   Ú_to_unix_pathr‘   “   s   € Ø�<Š<�œ Ñ$Ô$Ð$r   r[   Ú
extensionsc                 ó:   ‡ — t          ˆ fd„|D ¦   «         ¦  «        S )z<Helper method to see if filename ends with certain extensionc              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S rQ   ©Úendswith)Ú.0Úer[   s     €r   ú	<genexpr>z#match_extensions.<locals>.<genexpr>˜   s1   øè è € Ð8Ð8¨ˆx× Ò  Ñ#Ô#Ð8Ð8Ð8Ð8Ð8Ð8r   ©Úany)r[   r’   s   ` r   r5   r5   –   s&   ø€ åÐ8Ð8Ð8Ð8¨ZÐ8Ñ8Ô8Ñ8Ô8Ð8r   c                 ó:   ‡ — t          ˆ fd„|D ¦   «         ¦  «        S )Nc              3   óB   •K  — | ]}t          j         ‰|¦  «        V — Œd S rQ   )Úfnmatch)r—   ÚpatternÚfilepaths     €r   r™   z_fnmatch.<locals>.<genexpr>œ   s/   øè è € ÐJÐJ°g�wŒ˜x¨Ñ1Ô1ÐJÐJÐJÐJÐJÐJr   rš   )r    Úpatternss   ` r   Ú_fnmatchr¢   ›   s&   ø€ ÝÐJÐJÐJÐJÀÐJÑJÔJÑJÔJÐJr   r   FÚ	root_pathÚincludesÚignoresÚout_of_place_onlyÚis_pytorch_extensionc              #   óB  K  — t          |¦  «        }t          j        | d¬¦  «        D ]ö\  }}}	t          j                             || ¦  «        }
|
dk    r`d|v r|                     d¦  «         d|v r|                     d¦  «         d|v r*|                     d¦  «         |                     d¦  «         |	D ]g}t          t          j                             ||¦  «        ¦  «        }t          ||¦  «        r(t          ||¦  «        st          ||¦  «        s||v r|V — ŒhŒ÷d S )NT)Útopdownú.z.gitÚbuildÚthird_partyzthird_party/nvfuser)ri   ro   Úwalkrp   ÚrelpathÚremover}   r‘   Újoinr¢   r5   )r£   r¤   r¥   r’   r¦   r§   Úexact_matchesÚabs_dirpathÚdirsÚ	filenamesÚrel_dirpathr[   r    s                r   r6   r6   Ÿ   sN  è è € õ ˜‘M”M€Mõ +-¬'°)ÀTÐ*JÑ*JÔ*Jð ð Ñ&ˆ�d˜IÝ”g—o’o k°9Ñ=Ô=ˆØ˜#ÒÐà˜ˆ~ˆ~Ø—’˜FÑ#Ô#Ð#Ø˜$ˆˆØ—’˜GÑ$Ô$Ð$Ø Ð$Ð$Ø—’˜MÑ*Ô*Ð*Ø—’Ð1Ñ2Ô2Ð2Ø!ð 		ð 		ˆHÝ$¥R¤W§\¢\°+¸xÑ%HÔ%HÑIÔIˆHõ ˜ 8Ñ,Ô,ðå! (¨GÑ4Ô4ðõ & h°
Ñ;Ô;ðð @HÈ=Ð?XÐ?Xà���øð		ðð r   Úoutput_directoryr    Ú	all_filesÚheader_include_dirsÚstatsÚhip_clang_launchÚ	clean_ctxÚshow_progressc	                 ó^  — t           j                             t           j                             | |¦  «        ¦  «        }	t	          t
          j        |	¬¦  «        }
|
t          |	<   t          | ||||||||¦	  «	        }|r'd|j	        vrt          |	d|j        |j	        d¬¦  «         |t          |	<   d S )N)r#   r$   Úignoredz->T)Úflush)ro   rp   rs   r°   r   r   r   r-   rH   r%   Úprintr$   )r¶   r    r·   r¸   r¹   rº   r§   r»   r¼   Úfin_pathÚhipify_resultÚresults               r   r7   r7   Å   sÂ   € õ Œw�Š�rœwŸ|š|Ð,<¸hÑGÔGÑHÔH€HÝ ­|Ô/GÐW_Ð`Ñ`Ô`€MØ$1Õ˜Ñ!ÝÐ*¨H°iÐATÐV[Ø*Ð,@À)È]ñ\ô \€Fð ð =˜¨&¬-Ð7Ð7ÝØ�dØÔ  &¤-°tð	=ñ 	=ô 	=ð 	=ð %+Õ˜Ñ!Ð!Ð!r   c                 óú   — d„ | d         D ¦   «         }t          dt          |¦  «        d›�¦  «         t          d                     |¦  «        ¦  «         t          dt          | d         ¦  «        d›�¦  «         d S )Nc                 ó   — h | ]\  }}|’ŒS r   r   )r—   Ú	cuda_callÚ	_filepaths      r   ú	<setcomp>z compute_stats.<locals>.<setcomp>ß   s   € Ð\Ð\Ð\Ñ'=¨	°9˜Ð\Ð\Ð\r   Úunsupported_callsz1Total number of unsupported CUDA function calls: r‰   ú, z+
Total number of replaced kernel launches: Úkernel_launches)rÀ   Úlenr°   )r¹   rÉ   s     r   r8   r8   Þ   sŽ   € Ø\Ð\ÀÐGZÔA[Ð\Ñ\Ô\Ðõ 
Ð
X½cÐBSÑ>TÔ>TÐ
XÐ
XÐ
XÑYÔYÐYõ 
ˆ$�)Š)Ð%Ñ
&Ô
&Ñ'Ô'Ð'õ 
Ð
Z½¸UÐCTÔ=UÑ9VÔ9VÐ
ZÐ
ZÐ
ZÑ[Ô[Ð[Ð[Ð[r   c                 ó  — d}d}|                       dd¦  «                              dd¦  «        } d„ t          d¦  «        D ¦   «         }d||         d<   t          | ¦  «        D ]q\  }}|dk    r ne|d	k    r|dz  }n|d
k    r|dz  }|dk    s|t          | ¦  «        dz
  k    r1|dk    r+||dk    z   ||         d<   |dz  }|dk     r|dz   ||         d<   Œr| |d         d         |d         d         dz   …         }| |d         d         |d         d         …         }| |d         d         |d         d         …                               dd¦  «                             d¦  «        }	| |d         d         |d         d         …                               dd¦  «                             d¦  «        }
d|	› d
�}d|
› d
�}|                      |	|¦  «        }|                      |
|¦  «        }|                      ||z   ||z   ¦  «        }|S )zBadds dim3() to the second and third arguments in the kernel launchr   ú<<<r!   ú>>>c                 ó   — g | ]}i ‘ŒS r   r   )r—   Ú_s     r   ú
<listcomp>zadd_dim3.<locals>.<listcomp>ð   s   € Ð%;Ð%;Ð%;¨Q bÐ%;Ð%;Ð%;r   r   Ústartr   ú(ú)ú,Úendú
ú zdim3()r�   ÚrangeÚ	enumeraterÌ   Ústrip)Úkernel_stringÚcuda_kernelÚcountÚclosureÚarg_locsÚindÚcÚfirst_arg_rawÚsecond_arg_rawÚfirst_arg_cleanÚsecond_arg_cleanÚfirst_arg_dim3Úsecond_arg_dim3Úfirst_arg_raw_dim3Úsecond_arg_raw_dim3s                  r   r9   r9   ë   sL  € à€EØ€GØ!×)Ò)¨%°Ñ4Ô4×<Ò<¸UÀBÑGÔG€MØ%;Ð%;µ%¸±(´(Ð%;Ñ%;Ô%;€HØ €HˆU„O�GÑÝ˜MÑ*Ô*ð 3ð 3‰ˆˆQØ�1Š9ˆ9ØˆEØ�Š8ˆ8Ø�q‰LˆGˆGØ�#ŠXˆXØ�q‰LˆGØ�ŠHˆH˜�s =Ñ1Ô1°AÑ5Ò5Ð5¸7Àaº<¸<Ø%(¨A°ªHÑ%5ˆH�UŒO˜EÑ"Ø�Q‰JˆEØ�qŠyˆyØ+.°©7�˜” Ñ(øà! (¨1¤+¨gÔ"6°xÀ´{À5Ô7IÈAÑ7MÐ"MÔN€MØ" 8¨A¤;¨wÔ#7¸À¼ÀEÔ8JÐ#JÔK€Nà# H¨Q¤K°Ô$8¸À!¼ÀUÔ9KÐ$KÔL×TÒTÐUYÐ[]Ñ^Ô^×dÒdÐehÑiÔi€OØ$ X¨a¤[°Ô%9¸(À1¼+ÀeÔ:LÐ%LÔM×UÒUÐVZÐ\^Ñ_Ô_×eÒeÐfiÑjÔjÐà/˜_Ð/Ð/Ð/€NØ1Ð.Ð1Ð1Ð1€Oà&×.Ò.¨ÀÑOÔOÐØ(×0Ò0Ð1AÀ?ÑSÔSÐØ×%Ò% m°nÑ&DÐFXÐ[nÑFnÑoÔo€KØÐr   z([ ]+)(detail?)::[ ]+\\\n[ ]+c           
      ó¼  ‡ — t                                d„ ‰ ¦  «        Š ˆ fd„}d„ }d„ }t           | |‰ ¦  «        ¦  «        ¦  «        }‰ }|D �]Œ} ||¦  «        }‰                      d|d         ¦  «        }	‰ |d         d         |	d	z   …         }
‰ |d         |d         …         }|d	         d         d
k    rdnd	}‰ |d         d         ||         d         d	z   …         }t	          ||
¦  «        }t          t          d|d                              dd¦  «                             dd¦  «        ¦  «        ¦  «        }d|dd
…                              ddd|z
  z  dz   ¦  «                             dd¦  «                             dd¦  «                             |d|z   dz   ¦  «        z   }|                     |
|¦  «        }|d                              |¦  «         �ŒŽ|S )zK Replace the CUDA style Kernel launches with the HIP style kernel launches.c                 ó\   — |                       d¦  «        › |                       d¦  «        › d�S )Nr   r   z::©Úgroup©Úinps    r   ú<lambda>z'processKernelLaunches.<locals>.<lambda>  s(   € °·²¸1±´Ð.O¸s¿yºyÈ¹|¼|Ð.OÐ.OÐ.O€ r   c                 ó   •— | d         | d         dœdddœdddœdœ}ddi}d}d}d	}d
}|}t          |d         d         dz
  dd¦  «        D �]}‰
|         }	|||fv r^|	dk    r#||k    r|}||d         d<   |dxx         dz  cc<   |	dk    r/|dxx         dz  cc<   |d         dk    r||k    r||d         d<   |}||k    rŒ‰
|                              ¦   «         s
‰
|         dv r>||k    r|}||d         d<   |dk    r$d|d         d<   |d         |d         |d         gc S Œ×||k    r$||d         d<   |d         |d         |d         gc S �Œd S )NrÓ   r×   ©rÓ   r×   r‚   )Úkernel_launchÚkernel_nameÚtemplatez<>r   r   r   é   rõ   ú>r÷   ú<>   rÑ   ú#rÔ   rÕ   ú:rö   )rÚ   Úisalnum)Ú	in_kernelÚposrß   ÚSTARTÚAT_TEMPLATEÚAFTER_TEMPLATEÚAT_KERNEL_NAMEr%   ÚiÚcharÚstrings             €r   Úgrab_method_and_templatez7processKernelLaunches.<locals>.grab_method_and_template  s  ø€ ð (1°Ô'9À)ÈEÔBRÐSÐSØ%'°Ð3Ð3Ø"$¨RÐ0Ð0ð
ð 
ˆð �q�	ˆð ˆØˆØˆØˆàˆõ �s˜?Ô+¨GÔ4°qÑ8¸"¸bÑAÔAð %	añ %	aˆAØ˜!”9ˆDð ˜% Ð-Ð-Ð-Ø˜3’;�;Ø ’�Ø!,˜Ø12˜˜Jœ¨Ñ.Ø˜$�K�K”K 1Ñ$�K�K‘Kà˜3’;�;Ø˜$�K�K”K 1Ñ$�K�K‘KØ˜T”{ aÒ'Ð'¨V°{Ò-BÐ-BØ34˜˜Jœ¨Ñ0Ø!/˜ð ˜Ò$Ð$Ø˜!”9×$Ò$Ñ&Ô&ð a¨&°¬)Ð7PÐ*PÐ*PØ Ò/Ð/Ø!/˜Ø45˜˜MÔ*¨5Ñ1ð ˜A’v�vØ67˜˜MÔ*¨7Ñ3ð "% ]Ô!3°s¸:´È#ÈoÔJ^Ð`Ð`Ð`Ð`ð	 ð  Ò/Ð/Ø67˜˜MÔ*¨7Ñ3ð "% ]Ô!3°s¸:´È#ÈoÔJ^Ð`Ð`Ð`Ð`ùðK%	að %	ar   c                 ó@  — d}g }|                       d|¦  «        dk    r|                       d|¦  «        }|                       d|¦  «        dz   }|dk    rt          d¦  «        ‚|                     ||| ||…         dœ¦  «         |                       d|¦  «        dk    °|S )zKFinds the starting and ending points for all kernel launches in the string.r   rÎ   r‚   rÏ   rø   zno kernel end found)rÓ   r×   rï   )Úfindr1   r}   )r  Ú
kernel_endÚkernel_positionsÚkernel_starts       r   Úfind_kernel_boundsz1processKernelLaunches.<locals>.find_kernel_boundsQ  sÊ   € àˆ
ØÐð �kŠk˜% Ñ,Ô,°Ò2Ð2à!Ÿ;š; u¨jÑ9Ô9ˆLð  Ÿš U¨LÑ9Ô9¸AÑ=ˆJØ˜QŠˆÝ Ð!6Ñ7Ô7Ð7ð ×#Ò#¨lÀ:Ø.4°\À:Ð5MÔ.Nð%Pð %Pñ Qô Qð Qð �kŠk˜% Ñ,Ô,°Ò2Ð2ð  Ðr   c                 ó0  — d}d}d}| D ]Œ}|dk    r3|dk    r	|dk    rd}nb|dk    r	|dk    rd}nS|dk    r|dk    r|dk    rd}n>|dk    r|d	k    s|d
k    rd}n)|dk    r|dk    r|dk    rd}n|dk    r|dk    r|dk    rd}|}|dk    r||z  }Œ‡|dz  }Œ�|S )Nr!   rŽ   z//Ú*z/*ú"ú\ú'úrØ   Úxr   )r  Ú
in_commentÚprev_cÚ
new_stringrã   s        r   Úmask_commentsz,processKernelLaunches.<locals>.mask_commentsi  s  € Øˆ
ØˆØˆ
Øð 	"ð 	"ˆAØ˜RÒÐà˜’8�8 ¨#¢ Ø!%�J�JØ˜#’X�X &¨C¢- -Ø!%�J�JØ˜#’X�X &¨D¢. .°V¸s²]°]Ø!$�JøØ˜tÒ#Ð#à˜’9�9  T¢	 	Ø!#�JøØ˜tÒ#Ð#à˜’8�8 ¨#¢ Ø!#�JøØ˜sÒ"Ð"à˜’8�8 ¨$¢ Ø!#�JØˆFØ˜RÒÐØ˜a‘�
�
à˜cÑ!�
�
ØÐr   rÔ   r×   r   rÓ   r   r‚   rï   rÎ   rÏ   rÕ   zhipLaunchKernelGGL(z, 0é   rÊ   rË   )	ÚRE_KERNEL_LAUNCHÚsubÚlistr	  r9   rÌ   rL   r�   r}   )r  r¹   r  r  r  Úget_kernel_positionsÚoutput_stringÚkernelÚparamsÚparenthesisrÞ   rÝ   Úend_param_indexÚkernel_name_with_templateÚcuda_kernel_dim3Únum_klpÚ
hip_kernels   `                r   r:   r:     sA  ø€ õ ×!Ò!Ð"OÐ"OÐQWÑXÔX€Fð9að 9að 9að 9að 9aðv ð  ð  ð0ð ð õB  Ð 2Ð 2°=°=ÀÑ3HÔ3HÑ IÔ IÑJÔJÐØ€Mð 'ð 4ñ 4ˆà)Ð)¨&Ñ1Ô1ˆð —k’k # v¨e¤}Ñ5Ô5ˆð ˜V AœY wÔ/°¸a±Ð?Ô@ˆØ˜v gœ¨v°e¬}Ð<Ô=ˆØ% aœy¨Ô/°2Ò5Ð5˜!˜!¸1ˆØ$*¨6°!¬9°WÔ+=¸fÀ_Ô>UÐV[Ô>\Ð_`Ñ>`Ð+`Ô$aÐ!Ý# M°;Ñ?Ô?ÐåÕ'¨¨6°'¬?×+BÒ+BÀ5È#Ñ+NÔ+N×+VÒ+VÐW\Ð^aÑ+bÔ+bÑcÔcÑdÔdˆà*Ð-=¸aÀ¸dÔ-C×-KÒ-KØ�5˜A ™KÑ(¨5Ñ0ñ.2ô .2ß29²'¸%ÀÑ2FÔ2FÇwÂwØ�4ñHô Hß šÐ!:¸CÐB[Ñ<[Ð^aÑ<aÑbÔbñcˆ
ð
 &×-Ò-¨k¸:ÑFÔFˆð 	ÐÔ ×'Ò'¨
Ñ3Ô3Ð3Ñ3àÐr   c                 ó  — d}d}|}d\  }}|t          | ¦  «        k     r`| |         |d         k    r|du rd}d}|}n+|dz  }n%| |         |d         k    r|r|dz  }|dk    r|}||fS |dz  }|t          | ¦  «        k     °`dS )aÊ  Generalization for finding a balancing closure group

         if group = ["(", ")"], then finds the first balanced parentheses.
         if group = ["{", "}"], then finds the first balanced bracket.

    Given an input string, a starting position in the input string, and the group type,
    find_closure_group returns the positions of group[0] and group[1] as a tuple.

    Example:
        >>> find_closure_group("(hi)", 0, ["(", ")"])
        (0, 3)
    Fr   )r‚   r‚   Tr   )NN)rÌ   )Úinput_stringrÓ   rï   Úinside_parenthesisÚparensrÿ   Úp_startÚp_ends           r   r;   r;   «  sÌ   € ð ÐØ€FØ
€CØ�N€GˆUà
•�LÑ!Ô!Ò
!Ð
!Ø˜Ô  a¤Ò(Ð(Ø! UÐ*Ð*Ø%)Ð"Ø�Ø��à˜!‘��Ø˜#Ô %¨¤(Ò*Ð*Ð/AÐ*Ø�a‰KˆFà˜Š{ˆ{Ø�Ø �~Ð%àˆq‰ˆð •�LÑ!Ô!Ò
!Ð
!ð  ˆ:r   c                 ó*   — t          | |ddg¬¦  «        S )z%Finds the first balanced parentheses.Ú{Ú}rî   ©r;   ©r(  rÓ   s     r   r<   r<   Ñ  ó   € å˜l¨E¸#¸s¸ÐDÑDÔDÐDr   c                 ó*   — t          | |ddg¬¦  «        S )z!Finds the first balanced bracket.rÔ   rÕ   rî   r0  r1  s     r   r=   r=   Ö  r2  r   z\bassert[ ]*\(c                 ól   — | }t           D ])}|                     |› d�t           |         › d�¦  «        }Œ*|S )a‹  FIXME: Temporarily replace std:: invocations of math functions
        with non-std:: versions to prevent linker errors NOTE: This
        can lead to correctness issues when running tests, since the
        correct version of the math function (exp/expf) might not get
        called.  Plan is to remove this function once HIP supports
        std:: math function calls inside device code

    rÔ   )r   r�   )r(  r  Úfuncs      r   r>   r>   Þ  sM   € ð !€MÝ#ð \ð \ˆØ%×-Ò-°$¨k¨k¨kÕ>QÐRVÔ>WÐ;ZÐ;ZÐ;ZÑ[Ô[ˆˆàÐr   z:?:?\b(__syncthreads)\b(\w*\()c                 ó¾   ‡— | Šddg}t          ˆfd„|D ¦   «         ¦  «        r‰S d‰v }|d‰v z  }|d‰v z  }|t                               ‰¦  «        duz  }|rd| z   Š‰S )	a  If the file makes kernel builtin calls and does not include the cuda_runtime.h header,
    then automatically add an #include to match the "magic" includes provided by NVCC.
    TODO:
        Update logic to ignore cases where the cuda_runtime.h is included by another file.
    zhip/hip_runtime.hzhip/hip_runtime_api.hc              3   óP   •K  — | ] }t          j        d |› d|› d�‰¦  «        V — Œ!dS )z#include ("z"|<z>)N)ÚreÚsearch)r—   Úextr  s     €r   r™   z#hip_header_magic.<locals>.<genexpr>ý  sC   øè è € Ð
WÐ
WÈ�2Œ9Ð3 CÐ3Ð3¨CÐ3Ð3Ð3°]ÑCÔCÐ
WÐ
WÐ
WÐ
WÐ
WÐ
Wr   ÚhipLaunchKernelGGLÚ
__global__Ú
__shared__Nz#include "hip/hip_runtime.h"
)r›   ÚRE_SYNCTHREADSr9  )r(  ÚheadersÚhasDeviceLogicr  s      @r   r?   r?   ñ  s¤   ø€ ð !€Mð #Ð$;Ð<€GÝ
Ð
WÐ
WÐ
WÐ
WÈwÐ
WÑ
WÔ
WÑWÔWð ØÐð *¨]Ð:€NØ�l mÐ3Ñ3€NØ�l mÐ3Ñ3€NØ•n×+Ò+¨MÑ:Ô:À$ÐFÑF€Nð ð HØ8¸<ÑGˆàÐr   zGextern\s+([\w\(\)]+)?\s*__shared__\s+([\w:<>\s]+)\s+(\w+)\s*\[\s*\]\s*;c                 óB   — | }t                                d„ |¦  «        }|S )a¢  
    Match 'extern __shared__ type foo[];' syntax and use HIP_DYNAMIC_SHARED() MACRO instead.
    See: https://github.com/ROCm/hip/blob/master/docs/markdown/hip_kernel_language.md#__shared__
    Examples:
        "extern __shared__ char smemChar[];"
            => "HIP_DYNAMIC_SHARED( char, smemChar)"
        "extern __shared__ unsigned char smem[];"
            => "HIP_DYNAMIC_SHARED( unsigned char, my_smem)"
    c                 ó�   — d|                       d¦  «        pd› d|                       d¦  «        › d|                       d¦  «        › d�S )	NzHIP_DYNAMIC_SHARED(r   r!   rÙ   r   rÊ   rø   rÕ   rî   rð   s    r   rò   z'replace_extern_shared.<locals>.<lambda>  sF   € Ð^¨#¯)ª)°A©,¬,Ð*<¸"Ð^Ð^¸s¿yºyÈ¹|¼|Ð^Ð^ÈsÏyÊyÐYZÉ|Ì|Ð^Ð^Ð^€ r   )ÚRE_EXTERN_SHAREDr  )r(  r  s     r   r@   r@     s1   € ð !€MÝ$×(Ò(Ø^Ð^Ð`mñoô o€Mð Ðr   c                 óú  — t           j                             | ¦  «        rt          d¦  «        ‚|st	          | ¦  «        s| S t           j                             | ¦  «        \  }}t           j                             |¦  «        \  }}|dk    rd}|}|}|                     dd¦  «        }|                     dd¦  «        }|                     dd	¦  «        }|                     dd¦  «        }|                     dd¦  «        }|d
k    r|                     dd	¦  «        }|s&||k    r t           j                             |d¦  «        }|r||k    r||z   |k    r|dz   }t           j                             |||z   ¦  «        S )z3
    Returns the new name of the hipified file
    ú$rel_filepath must be a relative pathú.cuú.hipÚcudaÚhipÚCUDAÚHIPÚTHCÚTHHzcaffe2/coreÚ_hip)	ro   rp   ÚisabsÚAssertionErrorrB   ry   Úsplitextr�   r°   )Úrel_filepathr§   Údirpathr[   Úrootr:  Úorig_filenameÚorig_dirpaths           r   rA   rA   "  sz  € õ 
„w‡}‚}�\Ñ"Ô"ð EÝÐCÑDÔDÐDØð ­¸Ñ(EÔ(Eð ØÐåœŸš lÑ3Ô3Ñ€GˆXÝ”× Ò  Ñ*Ô*�I€Dˆ#ðH ˆe‚|€|Øˆà€MØ€Là�oŠo˜f eÑ,Ô,€GØ�oŠo˜f eÑ,Ô,€GØ�oŠo˜e UÑ+Ô+€Gà�<Š<˜ Ñ&Ô&€DØ�<Š<˜ Ñ&Ô&€Dà�-ÒÐØ�|Š|˜E 5Ñ)Ô)ˆàð / G¨|Ò$;Ð$;Ý”'—,’,˜w¨Ñ.Ô.ˆàð  ¨<Ò 7Ð 7¸TÀC¹ZÈMÒ<YÐ<YØ�f‰}ˆåŒ7�<Š<˜ ¨¡Ñ,Ô,Ð,r   c                 óì   — t           j                             | ¦  «        rt          d¦  «        ‚|                      d¦  «        rdS |                      d¦  «        rdS |                      d¦  «        rdS dS )NrE  útorch/Fúthird_party/nvfuser/útools/autograd/templates/T)ro   rp   rO  rP  Ú
startswith©rR  s    r   rB   rB   k  s€   € Ý	„w‡}‚}�\Ñ"Ô"ð EÝÐCÑDÔDÐDØ×Ò˜xÑ(Ô(ð ØˆuØ×ÒÐ5Ñ6Ô6ð ØˆuØ×ÒÐ:Ñ;Ô;ð ØˆuØˆ4r   c                 óð  — t          d¦  «         t          j                             | ¦  «        rt	          d¦  «        ‚|                      d¦  «        r|                      d¦  «        rdS dS |                      d¦  «        rdS |                      d¦  «        rdS |                      d	¦  «        rdS |                      d
¦  «        rdS |                      d¦  «        rdS |                      d¦  «        rdS dS )NrC   rE  zaten/zaten/src/ATen/core/FTrX  rY  zthird_party/fbgemm/zthird_party/mslk/rZ  ztest/cpp/c10d/)r   ro   rp   rO  rP  r[  r\  s    r   rC   rC   x  s  € ÝÐ!Ñ"Ô"Ð"Ý	„w‡}‚}�\Ñ"Ô"ð EÝÐCÑDÔDÐDØ×Ò˜wÑ'Ô'ð Ø×"Ò"Ð#8Ñ9Ô9ð 	Ø�5ØˆtØ×Ò˜xÑ(Ô(ð ØˆtØ×ÒÐ5Ñ6Ô6ð ØˆtØ×ÒÐ4Ñ5Ô5ð ØˆtØ×ÒÐ2Ñ3Ô3ð ØˆtØ×ÒÐ:Ñ;Ô;ð ØˆtØ×ÒÐ/Ñ0Ô0ð ØˆtØˆ5r   c                 ón   — t          d¦  «         t          | ¦  «        rd|                      ¦   «         v S dS )NrD   ÚsparseF©r   rC   Úlowerr\  s    r   rD   rD   �  s=   € ÝÐ"Ñ#Ô#Ð#Ý�|Ñ$Ô$ð 0Ø˜<×-Ò-Ñ/Ô/Ð/Ð/Øˆ5r   c                 óÒ   — t          d¦  «         t          | ¦  «        rHd|                      ¦   «         v rdS d|                      ¦   «         v rd|                      ¦   «         v rdS dS dS )NrE   r_  TÚlinalgÚbatchlinearalgebralibblasFr`  r\  s    r   rE   rE   –  sz   € ÝÐ!Ñ"Ô"Ð"Ý�|Ñ$Ô$ð Ø�|×)Ò)Ñ+Ô+Ð+Ð+Ø�4Ø˜×+Ò+Ñ-Ô-Ð-Ð-Ø*¨l×.@Ò.@Ñ.BÔ.BÐBÐBØ�uØ�4Øˆ5r   c                 óD  — t          d¦  «         t          j                             | ¦  «        rt	          d¦  «        ‚|                      d¦  «        rdS t          j                             | ¦  «        }t          j                             |¦  «        \  }}d|v s|dv od|vS )NrF   rE  zc10/cudaTÚgpu©rF  ú.cuhÚcudnn)r   ro   rp   rO  rP  r[  ÚbasenamerQ  )rR  r[   rÑ   r:  s       r   rF   rF   ¢  sŸ   € ÝÐ$Ñ%Ô%Ð%Ý	„w‡}‚}�\Ñ"Ô"ð EÝÐCÑDÔDÐDØ×Ò˜zÑ*Ô*ð ØˆtÝŒw×Ò Ñ-Ô-€HÝŒW×Ò˜hÑ'Ô'�F€A€sà�XÐÐ7 ¨Ð!7ÐV¸gÈXÐ>UÐVr   c                   ó   — e Zd ZdZdd„ZdS )ÚTrieNodez�A Trie node whose children are represented as a directory of char: TrieNode.
       A special char '' represents end of word
    r   Nc                 ó   — i | _         d S rQ   )Úchildrenr)   s    r   r'   zTrieNode.__init__³  s   € ØˆŒˆˆr   r+   )r   r   r   rŒ   r'   r   r   r   rl  rl  ®  s2   € € € € € ðð ðð ð ð ð ð r   rl  c                   ó`   — e Zd ZdZdd„Zdd„Zd„ Zd„ Zd„ Ze	j
        d	„ ¦   «         Zd
„ Zd„ ZdS )rG   z£Creates a Trie out of a list of words. The trie can be exported to a Regex pattern.
    The corresponding Regex should match much faster than a simple Regex union.r   Nc                 óœ   — t          ¦   «         | _        t          j        d¬¦  «        | _        | j                             ¦   «         | _        dS )z,Initialize the trie with an empty root node.F)ÚusedforsecurityN)rl  rT  ÚhashlibÚmd5Ú_hashÚdigestÚ_digestr)   s    r   r'   zTrie.__init__»  s:   € å‘J”JˆŒ	Ý”[°Ð7Ñ7Ô7ˆŒ
Ø”z×(Ò(Ñ*Ô*ˆŒˆˆr   c                 ó.  — | j                              |                     ¦   «         ¦  «         | j                              ¦   «         | _        | j        }|D ]6}|j                             |t          ¦   «         ¦  «         |j        |         }Œ7d|j        d<   dS )zAdd a word to the Trie. Tr!   N)	rt  ÚupdateÚencoderu  rv  rT  rn  Ú
setdefaultrl  ©r&   ÚwordÚnoder  s       r   rr   zTrie.addÁ  s‡   € àŒ
×Ò˜$Ÿ+š+™-œ-Ñ(Ô(Ð(Ø”z×(Ò(Ñ*Ô*ˆŒØŒyˆàð 	'ð 	'ˆDØŒM×$Ò$ T­8©:¬:Ñ6Ô6Ð6Ø”= Ô&ˆDˆDØ ˆŒ�bÑÐÐr   c                 ó   — | j         S )zReturn the root node of Trie. )rT  r)   s    r   Údumpz	Trie.dumpÌ  s
   € àŒyÐr   c                 ó*   — t          j        |¦  «        S )z Escape a char for regex. )r8  Úescape)r&   r  s     r   Úquotez
Trie.quoteÐ  s   € åŒy˜‰ŒÐr   c                 ó^   — | j         }|D ]}||j        v r|j        |         }Œ dS d|j        v S )zZSearch whether word is present in the Trie.
        Returns True if yes, else return FalseFr!   )rT  rn  r{  s       r   r9  zTrie.searchÔ  sK   € ð ŒyˆØð 	ð 	ˆDØ�t”}Ð$Ð$Ø”} TÔ*��à�u�uð �T”]Ð"Ð"r   c                 óÂ  — |}d|j         v r,t          |j                              ¦   «         ¦  «        dk    rdS g }g }d}t          |j                              ¦   «         ¦  «        D ]¯}t	          |j         |         t
          ¦  «        r‹	 |                      |j         |         | j        ¦  «        }|                     |  	                    |¦  «        |z   ¦  «         Œu# t          $ r+ |                     |  	                    |¦  «        ¦  «         Y Œ©w xY wd}Œ°t          |¦  «        dk     }	t          |¦  «        dk    r]t          |¦  «        dk    r|                     |d         ¦  «         n.|                     dd                     |¦  «        z   dz   ¦  «         t          |¦  «        dk    r	|d         }
ndd                     |¦  «        z   d	z   }
|r|	r|
d
z  }
nd|
› d�}
|
S )zžConvert a Trie into a regular expression pattern

        Memoized on the hash digest of the trie, which is built incrementally
        during add().
        r!   r   Nr   ú[ú]z(?:ú|rÕ   ú?z)?)rn  rÌ   ÚkeysÚsortedÚ
isinstancerl  Ú_patternrv  r}   r‚  Ú	Exceptionr°   )r&   rT  ru  r}  ÚaltÚccÚqr  ÚrecurseÚcconlyrÃ   s              r   rŒ  zTrie._patterná  sé  € ð ˆà�”ÐÐ¥3 t¤}×'9Ò'9Ñ';Ô';Ñ#<Ô#<ÀÒ#AÐ#AØ�4àˆØˆØˆÝ˜4œ=×-Ò-Ñ/Ô/Ñ0Ô0ð 	ð 	ˆDÝ˜$œ-¨Ô-­xÑ8Ô8ð ð0Ø"Ÿmšm¨D¬M¸$Ô,?ÀÄÑNÔN�GØ—J’J˜tŸzšz¨$Ñ/Ô/°'Ñ9Ñ:Ô:Ð:Ð:øÝ ð 0ð 0ð 0Ø—I’I˜dŸjšj¨Ñ.Ô.Ñ/Ô/Ð/Ð/Ð/ð0øøøð ��Ý˜‘X”X ’\Ð!ˆåˆr‰7Œ7�QŠ;ˆ;Ý�2‰wŒw˜!Š|ˆ|Ø—
’
˜2˜aœ5Ñ!Ô!Ð!Ð!à—
’
˜3 §¢¨¡¤Ñ,¨sÑ2Ñ3Ô3Ð3åˆs‰8Œ8�qŠ=ˆ=Ø˜”VˆFˆFà˜SŸXšX c™]œ]Ñ*¨SÑ0ˆFàð 	*Øð *Ø˜#‘��à)˜vÐ)Ð)Ð)�Øˆs   ÂACÃ2DÄDc                 óB   — |                       | j        | j        ¦  «        S ©z#Export the Trie to a regex pattern.©rŒ  rT  rv  r)   s    r   rŸ   zTrie.pattern  ó   € à�}Š}˜TœY¨¬Ñ5Ô5Ð5r   c                 óB   — |                       | j        | j        ¦  «        S r”  r•  r)   s    r   Úexport_to_regexzTrie.export_to_regex  r–  r   r+   )r   r   r   rŒ   r'   rr   r  r‚  r9  Ú	functoolsÚ	lru_cacherŒ  rŸ   r˜  r   r   r   rG   rG   ·  s³   € € € € € ðSð Sð+ð +ð +ð +ð	!ð 	!ð 	!ð 	!ðð ð ðð ð ð#ð #ð #ð Ôð)ð )ñ Ôð)ðV6ð 6ð 6ð6ð 6ð 6ð 6ð 6r   rG   ÚPYTORCH_MAPz=Expected each mapping in CUDA_TO_HIP_MAPPINGS to be a Mappingz(?<=\W)(z)(?=\W)z#include "([^"]+)"z#include <([^>]+)>z"#define THC_GENERIC_FILE "([^"]+)"z\.cu\bc	                 ó>  ‡ ‡‡‡‡‡‡‡‡— t           j                             t           j                             ‰ |¦  «        ¦  «        Št	          |¦  «        }t
          ‰         }	|‰vr!d|	_        d|	_        t          j	        |	_
        |	S t	          t           j                             |‰ ¦  «        ¦  «        }
t          ‰d¬¦  «        5 }|                     ¦   «         t          k    r-d|	_        d|	_        t          j	        |	_
        |	cddd¦  «         S |                     d¦  «         |                     ¦   «         }ddd¦  «         n# 1 swxY w Y   |}t           j                             t           j                             ‰ t#          |
‰¦  «        ¦  «        ¦  «        }t           j                             t           j                             |¦  «        ¦  «        s2‰                     t           j                             |¦  «        ¦  «         d„ }t*                               ||¦  «        }t/          j        ¦   «         D ]Q\  }}d|v r2d|vr.d	t3          j        |¦  «        z   }t3          j        |||¦  «        }Œ;|                     ||¦  «        }ŒRd#ˆˆˆˆˆˆˆ ˆˆf	d„	}t8                                |dd
¦  «        |¦  «        }t:                                |dd¦  «        |¦  «        }t<                                |d¦  «        |¦  «        }|                     d¦  «        rG|                     dd¦  «        }|                     dd¦  «        }t@                               d|¦  «        }‰stC          |‰¦  «        }|                     d¦  «        rd|vrtE          |¦  «        }tG          |¦  «        }‰rg||k    rat           j                             ‰¦  «        t           j                             |¦  «        k    r!‰|	_        d|	_        t          j	        |	_
        |	S ‰|k    rtI          ‰d¦  «        r
t          |z   }d
}t           j                             |¦  «        rAt          |d¬¦  «        5 }|                     ¦   «         |k    }ddd¦  «         n# 1 swxY w Y   |rá	 ‰                     |dd¬¦  «        5 }| %                    |¦  «         ddd¦  «         n# 1 swxY w Y   ||	_        d|	_        t          j	        |	_
        |	S # tL          $ rm}tO          tP          j)        › d|› d|j*        › d‰› dtP          j+        › �	tX          j-        ¬ ¦  «         ‰|	_        d!|	_        t          j	        |	_
        |	cY d}~S d}~ww xY w||	_        d"|	_        t          j	        |	_
        |	S )$z< Executes the CUDA -> HIP conversion on the specified file. Nz[ignored, not to be hipified]zutf-8)Úencodingz#[ignored, input is hipified output]r   c                 óB   — t           |                      d¦  «                 S )Nr   )r›  rï   )Úms    r   Úpt_replzpreprocessor.<locals>.pt_replX  s   € Ý˜1Ÿ7š7 1™:œ:Ô&Ð&r   z/hip/z
(?<!/hip/)Tc                 ó*   •	‡ ‡— ˆˆˆˆˆˆˆˆ	ˆ
ˆˆ fd„}|S )Nc                 ó°  •‡— |                       d¦  «        }t          j                             |¦  «        Š|                     d¦  «        s*|                     d¦  «        rK|                     d¦  «        s6‰                     t          |                       d¦  «        ‰¦  «        ¦  «        S ‰�r”t          ˆfd„‰D ¦   «         ¦  «        �rxd }d }‰rt          j                             ‰¦  «        }t          j         	                    t          j         
                    ||¦  «        ¦  «        }t          j                             |¦  «        r|}|}|€…‰D ]‚}t          j         
                    ‰|¦  «        }t          j         	                    t          j         
                    ||¦  «        ¦  «        }t          j                             |¦  «        r|}|}Œƒ|€|                       d¦  «        S |t          vrt          ‰|‰‰‰‰‰‰‰¦	  «	         nÞ|t          v rÕt          |         }|j        t          j        k    r³t          j                             |‰¦  «        }t          j         	                    t          j         
                    ‰t          |‰¦  «        ¦  «        ¦  «        }	|	|_        |t          |<   ‰                     t          j                             |	�|	n||¦  «        ¦  «        S t          |         j        }
‰                     t'          t          j                             |
�|
n||¦  «        ¦  «        ¦  «        S |                       d¦  «        S )Nr   )z	ATen/cudazATen/native/cudazATen/native/nested/cudazATen/native/quantized/cudazATen/native/sparse/cudazATen/native/transformers/cudazTHC/rL  ÚTHCPc              3   óB   •K  — | ]}|                      ‰¦  «        V — Œd S rQ   r•   )r—   Úsr[   s     €r   r™   z>preprocessor.<locals>.mk_repl.<locals>.repl.<locals>.<genexpr>€  s/   øè è € Ð,UÐ,UÀa¨Q¯ZªZ¸Ñ-AÔ-AÐ,UÐ,UÐ,UÐ,UÐ,UÐ,Ur   r   )rï   ro   rp   rj  r[  ÚformatrA   r›   Údirnamers   r°   rq   r-   r7   r#   r   r   r®   r$   r‘   )rŸ  rˆ   Ú
header_dirÚheader_filepathÚheader_dir_to_checkÚheader_path_to_checkÚheader_include_dirÚheader_resultÚheader_rel_pathÚheader_fout_pathÚhipified_header_filepathr[   r·   r»   rÁ   r¸   rº   Úinclude_current_dirr§   r¶   r¼   r¹   Útempls              @€€€€€€€€€€€r   Úreplz+preprocessor.<locals>.mk_repl.<locals>.replq  sO  øø€ Ø—’˜‘
”
ˆAÝ”w×'Ò'¨Ñ*Ô*ˆHà—’ð &ñ 'ô 'ð
Yð —’˜eÑ$Ô$ð
Yð ./¯\ª\¸&Ñ-AÔ-Að
Yð —|’|Õ$5°a·g²g¸a±j´jÐBVÑ$WÔ$WÑXÔXÐXà$ñ (f­Ð,UÐ,UÐ,UÐ,UÈ9Ð,UÑ,UÔ,UÑ)UÔ)Uñ (fØ!�
Ø"&�à&ð ?Ý*,¬'¯/ª/¸(Ñ*CÔ*CÐ'Ý+-¬7¯?ª?½2¼7¿<º<ÐH[Ð]^Ñ;_Ô;_Ñ+`Ô+`Ð(Ý”w—~’~Ð&:Ñ;Ô;ð ?Ø%8˜
Ø*>˜à"Ð*Ø.Að Cð CÐ*Ý.0¬g¯lªlÐ;KÐM_Ñ.`Ô.`Ð+Ý/1¬w¯ª½r¼w¿|º|ÐL_ÐabÑ?cÔ?cÑ/dÔ/dÐ,Ýœ7Ÿ>š>Ð*>Ñ?Ô?ð CØ)<˜JØ.B˜Oøà"Ð*ØŸ7š7 1™:œ:Ð%à"Õ*=Ð=Ð=Ý3Ð4DØ4CØ4=Ð?RÐTYÐ[kØ4HÈ)ÐUbñdô dð dð dð %Õ(;Ð;Ð;Ý$7¸Ô$H�MØ$Ô2µlÔ6NÒNÐNå*,¬'¯/ª/¸/ÐK[Ñ*\Ô*\˜Ý+-¬7¯?ª?½2¼7¿<º<ÐHXÝHYÐZiÐkñ  IAô  IAñ<Bô <Bñ ,Cô ,CÐ(à6F˜Ô3Ø?LÕ+¨OÑ<Ø$Ÿ|š|­B¬G¯OªOÐP`ÐPlÐ<LÐ<LØAPÐR\ñ-^ô -^ñ  _ô  _ð _å+>¸Ô+OÔ+]Ð(Ø—|’|¥Mµ"´'·/²/Ð^vð  _CÐBZÐBZØGVÐXbñ3dô 3dñ %eô %eñ fô fð fð —7’7˜1‘:”:Ðr   r   )r²  r±  r³  r·   r»   rÁ   r¸   rº   r§   r¶   r¼   r¹   s   `` €€€€€€€€€r   Úmk_replzpreprocessor.<locals>.mk_replp  sX   øøø€ ð9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	ðt ˆr   z#include "{0}"z#include <{0}>Fz#define THC_GENERIC_FILE "{0}"zCMakeLists.txtrJ  rK  rL  rM  rG  rg  Ú	PowKernelz[skipped, no changes])rF  rh  ú.cú.ccú.cppú.hú.hppÚwz[ok]zFailed to save z with "z", leaving z unchanged.©Úfilez[skipped, no permissions]z[skipped, already hipified])T).ro   rp   rs   r°   r‘   r-   r$   r%   r   r   r#   r®   rZ   ÚreadlineÚHIPIFY_C_BREADCRUMBÚseekÚreadrA   rq   r§  rz   ÚRE_PYTORCH_PREPROCESSORr  r   Úitemsr8  r�  r�   ÚRE_QUOTE_HEADERÚRE_ANGLE_HEADERÚRE_THC_GENERIC_FILEr–   ÚRE_CU_SUFFIXr:   r>   r?   r5   ÚwriteÚOSErrorrÀ   r3   ra   Ústrerrorrc   ÚsysÚstderr)r¶   r    r·   r¸   r¹   rº   r§   r»   r¼   rÂ   rR  ÚfinÚoutput_sourceÚorig_output_sourceÚ	fout_pathr   Ú	cuda_pathÚhip_pathrŸ   r´  Údo_writeÚfout_oldÚfoutr˜   rÁ   s   ` ```````               @r   rH   rH   1  s�  øøøøøøøøø€ õ Œw�Š�rœwŸ|š|Ð,<¸hÑGÔGÑHÔH€HÝ˜XÑ&Ô&€HÝ'¨Ô1€MØ�yÐ Ð Ø&*ˆÔ#Ø>ˆÔÝ&2Ô&7ˆÔ#ØÐå ¥¤§¢°Ð;KÑ!LÔ!LÑMÔM€Lå	ˆh Ð	)Ñ	)Ô	)ð #¨SØ�<Š<‰>Œ>Õ0Ò0Ð0Ø*.ˆMÔ'Ø#HˆMÔ Ý*6Ô*;ˆMÔ'Ø ð#ð #ð #ð #ñ #ô #ð #ð #ð 	�Š�‰ŒˆØŸš™
œ
ˆð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð 'Ðõ ”—’¥¤§¢Ð-=Õ?PÐQ]Ð_sÑ?tÔ?tÑ uÔ uÑvÔv€IÝŒ7�>Š>�"œ'Ÿ/š/¨)Ñ4Ô4Ñ5Ô5ð 7Ø×Ò�2œ7Ÿ?š?¨9Ñ5Ô5Ñ6Ô6Ð6ð'ð 'ð 'õ ,×/Ò/°¸ÑGÔG€Mõ  4Ô9Ñ;Ô;ð Gð GÑˆ	�8ð �hÐÐ 7°)Ð#;Ð#;ð $¥b¤i°	Ñ&:Ô&:Ñ:ˆGÝœF 7¨H°mÑDÔDˆMˆMð *×1Ò1°)¸XÑFÔFˆMˆMð;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;õx $×'Ò'¨¨Ð0@À$Ñ(GÔ(GÈÑWÔW€MÝ#×'Ò'¨¨Ð0@À%Ñ(HÔ(HÈ-ÑXÔX€MÝ'×+Ò+¨G¨GÐ4TÑ,UÔ,UÐWdÑeÔe€Mð ×ÒÐ)Ñ*Ô*ð @Ø%×-Ò-¨f°eÑ<Ô<ˆØ%×-Ò-¨e°UÑ;Ô;ˆÝ$×(Ò(¨°Ñ?Ô?ˆð ð DÝ-¨m¸UÑCÔCˆð 	×Ò˜/Ñ*Ô*ð >°À8Ð0KÐ0KÝ.¨}Ñ=Ô=ˆõ % ]Ñ3Ô3€Mð 	ðà -Ò/Ð/ÝŒG�OŠO˜HÑ%Ô%­¬¯ª¸Ñ)CÔ)CÒCÐCà&.ˆÔ#Ø6ˆÔÝ&2Ô&7ˆÔ#ØÐð �9ÒÐÕ!1°(Ð<nÑ!oÔ!oÐÝ+¨mÑ;ˆà€HÝ	„w‡~‚~�iÑ Ô ð 8Ý�) gÐ.Ñ.Ô.ð 	8°(Ø—}’}‘”¨-Ò7ˆHð	8ð 	8ð 	8ñ 	8ô 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8øøøð 	8ð 	8ð 	8ð 	8àð ð	!Ø—’ 	¨3¸�ÑAÔAð *ÀTØ—
’
˜=Ñ)Ô)Ð)ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *à*3ˆMÔ'Ø#)ˆMÔ Ý*6Ô*;ˆMÔ'Ø Ð øÝð 	!ð 	!ð 	!Ý•W”_ð  Bð  B°Yð  Bð  BÀqÄzð  Bð  BÐ^fð  Bð  BÕszÔsð  Bð  BÝ”zð#ñ #ô #ð #à*2ˆMÔ'Ø#>ˆMÔ Ý*6Ô*;ˆMÔ'Ø Ð Ð Ð Ð Ð Ð øøøøð	!øøøð '0ˆÔ#Ø<ˆÔÝ&2Ô&7ˆÔ#ØÐsm   Ã>EÄ)EÅE
ÅE
Ñ+RÒRÒRÒT Ò6SÓT ÓSÓT ÓSÓ #T Ô
U;ÔA"U6Õ0U;Õ6U;c                 óŽ  ‡— t          | d¦  «        5 }|                     ¦   «         }|r0t          j        dt          j        |¦  «        › d�ˆfd„|¦  «        }n|                     |‰¦  «        }|                     d¦  «         |                     |¦  «         |                     ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )Núr+z\b(z)\bc                 ó   •— ‰S rQ   r   )r  Úreplace_strings    €r   rò   z+file_specific_replacement.<locals>.<lambda>ñ  s   ø€ Èn€ r   r   )	r2   rÁ  r8  r  r�  r�   rÀ  rÈ  Útruncate)r    Úsearch_stringrÙ  Ústrictrˆ   Úcontentss     `   r   rI   rI   í  s  ø€ Ý	ˆx˜Ñ	Ô	ð  !Ø—6’6‘8”8ˆØð 	GÝ”vÐB¥R¤Y¨}Ñ%=Ô%=ÐBÐBÐBÐD\ÐD\ÐD\ÐD\Ð^fÑgÔgˆHˆHà×'Ò'¨°~ÑFÔFˆHØ	�Šˆq‰	Œ	ˆ	Ø	�Š�ÑÔÐØ	�
Š
‰Œˆðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ’BB:Â:B>ÃB>c                 óJ  — t          | d¦  «        5 }|                     ¦   «         }|d         dk    r|d         dk    rd|› d�}d|› d�|z   }|                     d¦  «         |                     |¦  «         |                     ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )	Nr×  r   rú   r‚   rù   r  z	#include z 
)r2   rÁ  rÀ  rÈ  rÚ  )r    Úheaderrˆ   rÝ  s       r   rJ   rJ   ù  sí   € Ý	ˆx˜Ñ	Ô	ð  !Ø—6’6‘8”8ˆØ�!Œ9˜ÒÐ  r¤
¨cÒ 1Ð 1Ø"˜�]�]�]ˆFØ+ Ð+Ð+Ð+¨xÑ7ˆØ	�Šˆq‰	Œ	ˆ	Ø	�Š�ÑÔÐØ	�
Š
‰Œˆðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ‘A:BÂBÂBc                 ó2   — |                       dd¦  «        } | S )z<Static global kernels in HIP results in a compilation error.z __global__ staticr<  ©r�   )Úin_txts    r   rK   rK     s   € à�^Š^Ð0°,Ñ?Ô?€FØ€Mr   z#include .*\nc                 ó|  — g }dddœ}| }|dz   }|t          |¦  «        k     �r||         dk    r|dxx         dz  cc<   nq||         dk    r|dxx         dz  cc<   nT||         dk    r|dxx         dz  cc<   n7||         dk    r+||dz
           dk    r|d         dk    r|dxx         dz  cc<   |d         dk    r%|d         dk    r|                     ||d	œ¦  «         nZ|d         dk    r5|d         dk    r)||         d
k    r|                     ||d	œ¦  «         |dz   }|dz  }|t          |¦  «        k     �°|S )a2  
    Return the list of arguments in the upcoming function parameter closure.
    Example:
    string (input): '(blocks, threads, 0, THCState_getCurrentStream(state))'
    arguments (output): [{'start': 1, 'end': 7}, {'start': 8, 'end': 16},         {'start': 17, 'end': 19}, {'start': 20, 'end': 53}]
    r   )rú   rÔ   r   rÔ   rÕ   rú   rù   ú-rô   rÖ   )rÌ   r}   )rÓ   r  Ú	argumentsÚclosuresÚcurrent_positionÚargument_start_poss         r   rL   rL     sÊ  € ð €IàØðð €Hð ÐØ)¨AÑ-Ðð �S ™[œ[Ò
(Ñ
(ØÐ"Ô# sÒ*Ð*Ø�SˆMˆMŒM˜QÑˆMˆM‰MˆMØÐ$Ô%¨Ò,Ð,Ø�SˆMˆMŒM˜QÑˆMˆM‰MˆMØÐ$Ô%¨Ò,Ð,Ø�SˆMˆMŒM˜QÑˆMˆM‰MˆMØÐ$Ô%¨Ò,Ð,°Ð8HÈ1Ñ8LÔ1MÐQTÒ1TÐ1TÐYaÐbeÔYfÐijÒYjÐYjØ�SˆMˆMŒM˜QÑˆMˆM‰Mð �CŒ=˜AÒÐ (¨3¤-°1Ò"4Ð"4à×ÒÐ'9ÐBRÐSÐSÑTÔTÐTØð �CŒ=˜AÒÐ (¨3¤-°1Ò"4Ð"4¸Ð@PÔ9QÐUXÒ9XÐ9XØ×ÒÐ'9ÐBRÐSÐSÑTÔTÐTØ!1°AÑ!5Ðà˜AÑÐð+ �S ™[œ[Ò
(Ñ
(ð. Ðr   Úvc                 óŠ   — |                       ¦   «         dv rdS |                       ¦   «         dv rdS t          j        d¦  «        ‚)zArgumentParser doesn't support type=bool. Thus, this helper method will convert
    from possible string types to True / False.)ÚyesÚtrueÚtÚyÚ1T)ÚnoÚfalserˆ   r€   Ú0FzBoolean value expected.)ra  ÚargparseÚArgumentTypeError)ré  s    r   rM   rM   9  sH   € ð 	‡w‚w�y„yÐ2Ð2Ð2ØˆtØ	
�Š‰ŒÐ4Ð	4Ð	4ØˆuåÔ(Ð)BÑCÔCÐCr   ©rF  rh  r¶  r·  r¸  r¹  z.inrº  ©rh  r¹  rº  r!   ©r  TÚproject_directoryÚshow_detailedÚheader_extensionsÚextra_filesÚhipify_extra_files_onlyc                 ó€  ‡ ‡‡‡‡	— ‰ dk    rt          j        ¦   «         Š t           j                             ‰ ¦  «        s#t	          d¦  «         t          j        d¦  «         ‰s‰                      d¦  «         ‰ dz   Š‰ ‰k    rˆˆ fd„‰D ¦   «         Šˆˆ fd„‰	D ¦   «         Š	t           j                             ‰¦  «        st          j	        ‰ ‰¦  «         t          t          t          ‰¦  «        ¦  «        Št          t          t          ‰	¦  «        ¦  «        Š	t          t          ‰‰‰	|||¬¦  «        ¦  «        }t          |¦  «        }|D ]Z}t           j                             |¦  «        s t           j                             ‰|¦  «        }||vr|                     |¦  «         Œ[d	d
lm} |D ]Œ}t           j                             |¦  «        r ||¦  «        }n) |t           j                             ‰|¦  «        ¦  «        }|                     ˆˆ	ˆfd„|                     d¦  «        D ¦   «         ¦  «         Œ�|€t-          d¬¦  «        }g g dœ}|s|n|D ]}t/          ‰||||||||
¦	  «	         Œt	          t0          j        dz   t0          j        z   t
          j        ¬¦  «         |rt9          |¦  «         t:          S )Nr!   z,The project folder specified does not exist.r   rŽ   Ú_amdc                 ó<   •— g | ]}|                      ‰‰¦  «        ‘ŒS r   rá  )r—   Úincluder¶   rø  s     €€r   rÒ   zhipify.<locals>.<listcomp>c  s)   ø€ ÐaÐaÐaÈW�G—O’OÐ$5Ð7GÑHÔHÐaÐaÐar   c                 ó<   •— g | ]}|                      ‰‰¦  «        ‘ŒS r   rá  )r—   rX   r¶   rø  s     €€r   rÒ   zhipify.<locals>.<listcomp>d  s)   ø€ Ð]Ð]Ð]È6�6—>’>Ð"3Ð5EÑFÔFÐ]Ð]Ð]r   )r¤   r¥   r’   r¦   r§   r   )ÚPathc              3   óü   •K  — | ]v}|                      ¦   «         ¯t          t          |¦  «        ‰¦  «        ¯3t          t          |¦  «        ‰¦  «        °Pt          |j        ‰¦  «        ¯et          |¦  «        V — Œwd S rQ   )Úis_filer¢   r,   r5   r   )r—   rp   rú  r¥   r¤   s     €€€r   r™   zhipify.<locals>.<genexpr>€  s“   øè è € ð 
ð 
ØÈÏÊÉÌð
å�˜T™œ HÑ-Ô-ð
õ �c $™iœi¨Ñ1Ô1ð
õ ! ¤Ð,=Ñ>Ô>ð	
Ý�‰IŒIð
ð 
ð 
ð 
ð 
ð 
r   r  T)rh   )rÉ   rË   z-Successfully preprocessed all matching files.r¼  )ro   Úgetcwdrp   rq   rÀ   rË  ÚexitÚrstripÚshutilÚcopytreer  Úmapr‘   r6   ri   rO  r°   r}   Úpathlibr  ÚextendÚrglobr4   r7   r3   r`   rc   rÌ  r8   r-   )rø  rù  r’   rú  r¶   r¸   r¤   rû  r¦   r¥   r¼   rº   r§   rü  r»   r·   Úall_files_setrˆ   r  r¬  Úheader_include_dir_pathr¹   r    s   `  `` `  `             r   rN   rN   D  sE  øøøøø€ ð" ˜BÒÐÝœI™KœKÐõ Œ7�>Š>Ð+Ñ,Ô,ð ÝÐ<Ñ=Ô=Ð=ÝŒ�‰Œˆð ð 6Ø× Ò  Ñ%Ô%Ð%Ø,¨vÑ5ÐàÐ,Ò,Ð,ØaÐaÐaÐaÐaÐX`ÐaÑaÔaˆØ]Ð]Ð]Ð]Ð]ÐU\Ð]Ñ]Ô]ˆõ Œ7�>Š>Ð*Ñ+Ô+ð =ÝŒÐ)Ð+;Ñ<Ô<Ð<å•C� xÑ0Ô0Ñ1Ô1€HÝ•3•} gÑ.Ô.Ñ/Ô/€GåÕ'Ð(8À8Ø07ÀJØ:KØ=QðSñ Sô Sñ Tô T€Iõ ˜	‘N”N€Màð  ð  ˆÝŒw�}Š}˜QÑÔð 	2Ý”—’Ð-¨qÑ1Ô1ˆAØ�MÐ!Ð!Ø×Ò˜QÑÔÐøð ÐÐÐÐÐØ1ð 

ð 

ÐÝŒ7�=Š=Ð+Ñ,Ô,ð 	_Ø&* dÐ+=Ñ&>Ô&>Ð#Ð#à&* d­2¬7¯<ª<Ð8HÐJ\Ñ+]Ô+]Ñ&^Ô&^Ð#Ø×Òð 
ð 
ð 
ð 
ð 
ð 
Ø"9×"?Ò"?ÀÑ"DÔ"Dð
ñ 
ô 
ñ 	
ô 	
ð 	
ð 	
ð ÐÝ(¸DÐAÑAÔAˆ	ð 46È"ÐMÐM€Eà&=ÐN�Y�YÀ;ð qð qˆÝ'Ð(8¸(ÀIÐObØ(-Ð/?ÐAUÐW`Ðboñ	qô 	qð 	qð 	qõ 
�'Œ/ÐKÑ
KÍgÌlÑ
ZÕadÔakÐlÑlÔlÐlð ð Ý�eÑÔÐåÐr   )r   r   r   FFr+   r‹   )Frõ  rö  r!   r   r÷  r   Fr   TFFFN)YrŒ   ró  rž   r8  r  rË  ro   r   Úcuda_to_hip_mappingsr   r   r   Úcollections.abcr   r   r	   Úenumr
   r™  rr  r   r   r   Údictr,   ÚHipifyFinalResultr¿  r-   Ú__annotations__ÚPYTORCH_TEMPLATE_MAPÚ__all__r�  r1   r2   r3   r4   r‘   Úboolr5   r¢   r6   r  r7   r8   r9   Úcompiler  r:   r;   r<   r=   Ú	RE_ASSERTr>   r>  r?   rC  r@   rA   rB   rC   rD   rE   rF   rl  rG   ÚPYTORCH_TRIEr›  ÚobjectÚmappingr‹  Ú	TypeErrorrÃ  ÚsrcÚdstrr   r˜  rÂ  rÄ  rÅ  rÆ  rÇ  rH   rI   rJ   rK   Ú
RE_INCLUDErL   rM   rN   r   r   r   ú<module>r"     sn  ððð ð ð0 €€€Ø €€€Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø 	€	€	€	Ø €€€à 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6à $Ð $Ð $Ð $Ð $Ð $Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ø €€€ðgð gð gðð ð ð ð �4ñ ô ð ðDð Dð Dð Dð Dñ Dô Dð Dð ˜˜lÐ*Ô+Ð ØTÐ Ø)+Ð Ð&Ð +Ð +Ñ +ðà!+°*Ð=Ð=Ð ðsð sð s€ð.ð .ð .ð .ð .�ñ .ô .ð .ð1ð 1ð 1ð
ð ð ð ð ñ ô ð ð&ð ð ð ð ñ ô ð ðD%˜ð % ð %ð %ð %ð %ð9˜sð 9°ð 9¸Tð 9ð 9ð 9ð 9ð
Kð Kð Kð  ØØ!Ø"'Ø%*ð#ð #Øð#àð#ð ð#ð ð	#ð
  ð#ð #ð#ð 08¸¬}ð#ð #ð #ð #ðL+Øð+àð+ð ð+ð &ð	+ð
 �C˜�IŒð+ð ð+ð #ð+ð (ð+ð ð+ð !%ð+ð +ð +ð +ð2
\ð 
\ð 
\ð 
\ð ð  ð  ðF �2”:Ð>Ñ?Ô?Ð ðWð Wð Wðt#ð #ð #ðLEð Eð Eð
Eð Eð Eð
 ˆBŒJÐ(Ñ)Ô)€	ðð ð ð  �”Ð=Ñ>Ô>€ðð ð ð: �2”:ÐhÑiÔiÐ ðð ð ð"F-ð F-ð F-ð F-ðR	 Tð 	ð 	ð 	ð 	ð Tð ð ð ð ð.ð ð ð	 Tð 	ð 	ð 	ð 	ð	Wð 	Wð 	Wðð ð ð ð ñ ô ð ð\6ð \6ð \6ð \6ð \6ñ \6ô \6ð \6ð| ˆt‰vŒv€Ø!#€ˆT�#�v�+ÔÐ #Ð #Ñ #à#ð ð €GØˆ:�g˜wÑ'Ô'ð YØˆiÐWÑXÔXÐXØ—M’M‘O”Oð ð ‰ˆˆSØ×Ò˜ÑÔÐØˆ�CÑÐðð %˜"œ*Ð%X°×1MÒ1MÑ1OÔ1OÐ%XÐ%XÐ%XÑYÔYÐ à�"”*Ð2Ñ3Ô3€Ø�"”*Ð2Ñ3Ô3€Ø �b”jÐ!FÑGÔGÐ ØˆrŒz˜)Ñ$Ô$€ððzØðzàðzð ðzð &ð	zð
 �C˜�IŒðzð ðzð #ðzð (ðzð ðzð !-ðzð zð zð zðx	ð 	ð 	ð 	ð 	ðð ð ð ðð ð ð ˆRŒZÐ(Ñ)Ô)€
ð)ð )ð )ðXD�ð D˜ð Dð Dð Dð Dð  ØTØ"8ØØ$&ØØØ#ØØØ"Ø!&Ø$)Ø-1ðSð SØðSàðSð ðSð  ð	Sð
 ðSð "ðSð ðSð ðSð ðSð ðSð ðSð ðSð ðSð "ðSð $ dÑ*ðSð  ð!Sð Sð Sð Sð Sð Sr   