+
    ix  c                   s   R t RtRtRtRtRtRtRtRt^ RI	t	^ RI
t
^ RIt^ R	I5 . R
NRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNR NR!NR"NR#NR$NR%NR&NR'NR(NR)NR*NR+NR,NR-NR.NR/NR0NR1NR2NR3NR4NtR5 t ^ R6IHtHtHt R7 tR9 tR: tR; t ^ R<IHt R> tR? t]P>                  P                   ]n         R@ t RA t! ^ RBIH"t" RC t#]$! ]%! ^ 4       U u0 uF  p ]&! V 4      kK  	  up 0 Rcm,          4      t']$! 0 RdmRD Uu0 uF  pREV 2kK
  	  up,          RD Uu0 uF  pRFV 2kK
  	  up,          4      t(RG t)RH t*RI t+RJt,Rs-Rs.RK t/ ^ RLIH0t1  ^ RNIH2t2 RO t3 ^ RQIH4t4H5t5H6t7 ]83RR lt9]83RS lt:RTRU/RV lt;RXt<ReRY lt=RZ t> ^ R[IH?t@ ^ R\IHAtB ^ R]IHCtD ^ R^IHEtF ^ R_IHGtH ^ R`IHItJ  ^ RaIHKtK Rb tLR#   ] d    R8 t EL5i ; i  ] d    R= t EL6i ; i  ] d    Rt" ELi ; iu up i u upi u upi   ] d    RM t1 Li ; i  ] d    RP t3 Li ; i  ] d    RTRU/RW lt; Li ; i  ] d     Li ; i  ] d     R# i ; i)fzCommon pathname manipulations, WindowsNT/95 version.

Instead of importing this module directly, import os and refer to this
module as os.path.
...\Z;/z.;C:\binnulN)*normcaseisabsjoin
splitdrive	splitrootsplitsplitextbasenamedirnameZcommonprefixZgetsizeZgetmtimeZgetatimeZgetctimeislinkexistslexistsisdirisfileismount
isreserved
expanduser
expandvarsnormpathabspathcurdirpardirseppathsepdefpathaltsepextsepdevnullrealpathsupports_unicode_filenamesrelpathZsamefileZsameopenfileZsamestat
commonpath
isjunction
isdevdriveALLOW_MISSINGc                 s6    \        V \        4      '       d   R # R# )   \/\/)
isinstancebytespath   &/usr/lib64/python3.14/ntpath.py_get_bothsepsr1   "   s    $    )LCMapStringExLOCALE_NAME_INVARIANTLCMAP_LOWERCASEc                st   \         P                  ! V 4      p V '       g   V # \        V \        4      '       d_   \        P
                  ! 4       pV P                  VR4      P                  RR4      p \        \        \        V 4      p V P                  VR4      # \        \        \        V P                  RR4      4      # )^Normalize case of pathname.

Makes all characters lowercase and all slashes into backslashes.
Zsurrogateescaper   r   )osfspathr+   r,   sysZgetfilesystemencodingZdecodereplace_LCMapStringEx_LOCALE_NAME_INVARIANT_LCMAP_LOWERCASEencode)sZencoding   & r0   r   r   2   s    
 IIaLHa002H#45==c4HA5/4A88H&788!"8"2"#))C"68 8r2   c                s*   \         P                  ! V 4      p \        V \        4      '       dI   \         P                  ! \         P
                  ! V 4      P                  RR4      P                  4       4      # V P                  RR4      P                  4       # )r6   r   r   )r7   r8   r+   r,   fsencodefsdecoder:   lower)r?   r/   r0   r   r   E   se    
 IIaLa;;r{{1~55c4@FFHIIyyd#))++r2   c                s   \         P                  ! V 4      p \        V \        4      '       d
   RpRpRpRpMRpRpRpRpV R	,          P	                  W!4      p V P                  V^4      ;'       g    V P                  V4      # )
zTest whether a path is absolute   \   /s   :\   \\r   r   z:\\\:N   N)r7   r8   r+   r,   r:   
startswith)r?   r   r   Z	colon_sepZ
double_sep   &    r0   r   r   P   sx    
		!A!U	
	
	"f"A<<	1%AAj)AAr2   c                 s   \         P                  ! V 4      p \        V \        4      '       d   R pRpRpMRpRpRp \	        V 4      w  rVpV F  p\	        V4      w  rpV
'       d   V	'       g	   V'       g   T	pT
pTpK1  V	'       d4   W8w  d.   V	P                  4       VP                  4       8w  d	   T	pT
pTpKj  T	pV'       d   VR,          V9  d	   Wr,           pW{,           pK  	  V'       d.   V'       g&   V'       d   VR,          V9  d   WR,           V,           # WV,           V,           #   \        \        \        3 d    \        P                  ! RT .TO5!   h i ; i)rD   r)   s   :\/r   r*   z:\/r   )r7   r8   r+   r,   r
   rC   	TypeErrorAttributeErrorBytesWarninggenericpath_check_arg_types)r.   pathsr   sepsZ
colon_sepsZresult_driveZresult_rootZresult_pathpZp_driveZp_rootZp_paths   &*          r0   r   r   c   s3   99T?D$

1:4.;A&/l#GV,#*L$$W4==?l&8&8&::#*L"(K"(K&{2d:)/%.K+ . \"-Z?%33)K77~|4 $$VT:E:s;   0D% ,D% 4D% :D% ?)D% )D% 1D% 9D% D% %1Ec                s2    \        V 4      w  rpWV,           3# )a  Split a pathname into drive/UNC sharepoint and relative path specifiers.
Returns a 2-tuple (drive_or_unc, path); either part may be empty.

If you assign
    result = splitdrive(p)
It is always true that:
    result[0] + result[1] == p

If the path contained a drive letter, drive_or_unc will contain everything
up to and including the colon.  e.g. splitdrive("c:/dir") returns ("c:", "/dir")

If the path contained a UNC path, the drive_or_unc will contain the host name
and share up to but not including the fourth directory separator character.
e.g. splitdrive("//host/computer/dir") returns ("//host/computer", "/dir")

Paths cannot contain both a drive letter and a UNC path.

)r
   )rS   driveroottails   &   r0   r	   r	      s    & "!E+r2   )_path_splitroot_exc                s   \         P                  ! V 4      p \        V \        4      '       d   RpRpRpRpRpM
RpRpRpR	pR
pV P	                  W!4      pVR,          V8X  d   VR,          V8X  dz   VR,          P                  4       V8X  d   ^M^pVP                  W4      pVR8X  d   WV3# VP                  W^,           4      p	V	R8X  d   WV3# V RV	 W	V	^,            W	^,           R 3# WPR,          V R,          3# VR,          V8X  d;   VR,          V8X  d   V R,          V R,          V R,          3# V R,          WPR,          3# WUV 3# )zWSplit a pathname into drive, root and tail.

The tail contains anything after the root.rD   rE   s   :   \\?\UNC\r2   r   r   :\\?\UNC\ :N   N:r\      N:Ni   NN:r\   NN:r]   rH   N:Nr]   N:rH   NN:r]   NNrK   )r7   r8   r+   r,   r:   upperZfind)
rS   r   r   Zcolon
unc_prefixZemptyZnormpstartZindexZindex2
   &         r0   r
   r
      s^    IIaLaCFE(JECFE'JE		&&9SzS  #2Y__.*<!

3.B;U?*C3R<U?*&z1FQJ#7A:;GG eQrU**3Z5 SzS uafae++ uerU** ?"r2   c                s   \         P                  ! V 4      p \        V 4      p\        V 4      w  r#p \	        V 4      pV'       d    W^,
          ,          V9  d   V^,          pK'  V RV WR reW#,           VP                  V4      ,           V3# )zvSplit a pathname.

Return tuple (head, tail) where tail is everything after the final slash.
Either part may be empty.N)r7   r8   r1   r
   lenrstrip)rS   rR   driZheadrV      &      r0   r   r      sv    
 			!ADlGA!AA
A#d"	Q2A"$54;;t$$d**r2   c                 s    \         P                  ! V 4      p \        V \        4      '       d   \        P
                  ! V R RR4      # \        P
                  ! V RRR4      # )rD   rE      .r   r   r    )r7   r8   r+   r,   rO   	_splitextrS   r/   r0   r   r      sJ    
		!A!U$$QtT::$$Qc377r2   c                s&    \        V 4      ^,          # )z)Returns the final component of a pathnamer   rj   r/   r0   r   r          8A;r2   c                s&    \        V 4      ^ ,          # )z-Returns the directory component of a pathnamerk   rj   r/   r0   r   r     rl   r2   )_getvolumepathnamec                s   \         P                  ! V 4      p \        V 4      p\        V 4      p \	        V 4      w  r#pV'       d   V^ ,          V9   d   V'       * # V'       d   V'       g   R# \
        '       dM   V P                  V4      p\        V 4      P                  V4      pVP                  4       VP                  4       8H  # R# )z]Test whether a path is a mount point (a drive root, the root of a
share, or a mounted volume)TF)r7   r8   r1   r   r
   rm   rc   Zcasefold)r.   rR   rT   rU   ZrestZxZyrg   r0   r   r     s     99T?DD4=D!$EqT!xDKKd#**40zz|qzz|++r2   u   123456789¹²³ZCOMZLPTc                sV   \         P                  ! \        V 4      ^,          4      P                  \        \
        4      p \        ;QJ d8    R \        V P                  \
        4      4       4       F  '       g   K   R# 	  R# ! R \        V P                  \
        4      4       4       4      # )z6Return true if the pathname is reserved by the system.c              3   s8   "   T F  p\        V4      x  K  	  R # 5iN)_isreservedname)Z.0namer@   r0   Z	<genexpr>Zisreserved.<locals>.<genexpr><  s     K1Jt$$1Js   TF)	r7   rB   r
   r:   r   r   ZanyZreversedr   r-   r/   r0   r   r   7  sk     ;;yq)*2263?D3K$**S/1JK33K3K3K$**S/1JKKKr2   c                s    V RR R9   d   V R9  # \         P                  V 4      '       d   R# V P                  R4      ^ ,          P                  R4      P	                  4       \
        9   # )z6Return true if the filename is reserved by the system.Nr     TrK   )r    rq   )r    r   )_reserved_charsZintersectionZ	partitionrc   r^   _reserved_names)rp   r/   r0   ro   ro   >  sb     BCyJ;&& ##D)) >>#q!((-335HHr2   c                sr   \         P                  ! V 4      p \        V \        4      '       d   RpRpMRpRpV P	                  V4      '       g   V # ^\        V 4      rCW48  d   W,          V9  d   V^,          pK  R\         P                  9   d   \         P                  R,          pMXR\         P                  9  d   V # \         P                  P                  RR4      p\        V\         P                  R,          4      pV^8w  d~   V ^V p\        V\        4      '       d   \         P                  ! V4      p\         P                  P                  R	4      pWx8w  d(   V\        V4      8w  d   V # \        \        V4      V4      p\        V \        4      '       d   \         P                  ! V4      pWPVR
 ,           # )zHExpand ~ and ~user constructs.

If user or $HOME is unknown, do nothing.r)   s   ~r*   Z~ZUSERPROFILEZHOMEPATHZ	HOMEDRIVEr[   ZUSERNAMEN)r7   r8   r+   r,   rI   rb   environZgetr   rB   r   r   rA   )	r.   rR   Ztilderf   ZnZuserhomerT   Ztarget_userZcurrent_users	   &        r0   r   r   W  sP    99T?D$??5!!c$iq
%DG4'	Q

"::m,	2::	%

{B/rzz*56Av1Qik5))++k2Kzz~~j1& x11GH-{;H$;;x(12hr2   z.'[^']*'?|%(%|[^%]*%?)|\$(\$|[-\w]+|\{[^}]*\}?)c                sH  aaaaa \         P                  ! V 4      p \        V \        4      '       dy   RV 9  d
   RV 9  d   V # \        '       g=   ^ RIpVP                  \        P                  4       VP                  4      P                  s\        pRoRoRoRo\        \         RR4      oMhRV 9  d
   RV 9  d   V # \        '       g/   ^ RIpVP                  \        VP                  4      P                  s\        pRoR	oR
oRo\         P                  oVVVVV3R lpV! W04      # )zbExpand shell variables of the forms $var, ${var} and %var%.

Unknown variables are left unchanged.s   $s   %Ns   {s   }ZenvironbZ$Z%Z{Z}c                 s
  < V P                   pVf
   V ^ ,          # W,          pV^8X  d0   VS8X  d   V# VP                  S4      '       g
   V ^ ,          # VR R pMEVS8X  d   V# VP                  S4      '       d&   VP                  S4      '       g
   V ^ ,          # V^R p Sf@   \        P                  ! \        P
                  \        P                  ! V4      ,          4      # SV,          #   \         d    T ^ ,          u # i ; i)NrK   )	lastindexZendswithrI   r7   rA   rt   rB   ZKeyError)Zmru   rp   bracedollarrt   percentrbraces   &  r0   replZexpandvars.<locals>.repl  s    KK	Q4K|>w==))t9Dv~u%%}}V,,Q4KAbz	{{2::bkk$.?#@AAt}$ 	Q4K	s   AC+ "C+ +DD)r7   r8   r+   r,   _varsubbreZcompile_varpatternr>   ZASCIIsubZgetattr_varsubrt   )	r.   r|   r~   rz   rv   rw   rt   rx   ry   s	   &   @@@@@r0   r   r     s     99T?D$tD 0Kxzz+"4"4"6AEEH"j$/d?s$Kwjjbhh7;;G** 6 t?r2   )_path_normpathc                s   \         P                  ! V 4      p \        V \        4      '       d
   RpRpRpRpMRpRpRpRpV P	                  W!4      p \        V 4      w  rVp WV,           pV P                  V4      p^ p	V	\        V4      8  d   W,          '       d   W,          V8X  d   W K/  W,          V8X  dW   V	^ 8  d2   W^,
          ,          V8w  d   W^,
          V	^,           1 V	^,          p	Kt  V	^ 8X  d   V'       d   W K  V	^,          p	K  V	^,          p	K  V'       g   V'       g   VP                  V4       WqP                  V4      ,           # )	z0Normalize path, eliminating double slashes, etc.rD   rE   rh      ..r   r   r    r   )
r7   r8   r+   r,   r:   r
   r   rb   Zappendr   )
r.   r   r   r   r   rT   rU   prefixZcompsrf   ra   r0   r   r     s   yydE""CFFFCFFF||F(%dOT

3#e*n88ux61HV#q5UQ3Z61c!A#gFA!VFAQeLL ''r2   )_getfullpathnamec                s    \        \        V 4      4      #   \        \        3 d     Mi ; i\        P
                  ! T 4      p \        T 4      '       g   \        T \        4      '       d   Rp\        P                  pMRp\        P                  p\        T 4      w  r4p T'       g	   T'       dD    \        \        Y4,           4      T 4      p M7  \        \        3 d    Y1,           T ,           p  Mi ; i\        T! 4       T 4      p \        T 4      # )&Return the absolute version of a path.rD   r   )r   r   OSError
ValueErrorr7   r8   r   r+   r,   getcwdbgetcwdr
   r   )r.   r   r   rT   rU   rJ   r0   r   r     s    	#HTN33$ 		 yyT{{$&& )$E. 0 >ED, . ;-D. FHd+~s    **.C
 
 C-,C-c                s    \         P                  ! V 4      p \        V 4      '       gM   \        V \        4      '       d   \         P
                  ! 4       pM\         P                  ! 4       p\        W4      p \        V 4      # )r   )	r7   r8   r   r+   r,   r   r   r   r   )r.   cwdr@   r0   r   r     sN    yyT{{$&&jjliik?D~r2   )_findfirstfile_getfinalpathnamereadlinkc                 s   Rp\        4       p\        V 4      V9  dr   VP                  \        V 4      4        T p\        V 4      p \	        V 4      '       g7   \        V4      '       g   Tp  V # \        \        \        V4      V 4      4      p K  K  V #   T d   pTP                  T9   d    Rp?T # h Rp?i\         d     T # i ; i)r\   N)r\   r]   rH             2   C   W   i&  i(  i)  )Zsetr   Zadd_nt_readlinkr   r   r   r   r   winerrorr   )r.   ignored_errorallowed_winerrorZseenZold_pathexs   &&    r0   _readlink_deepr   3  s     LutnD(HHXd^$#D) T{{ "(++'  $D):D$ABD #  ! ;;"22
 	  s/   1B ,B CB/.B//C<C Cc                 s>   RpV R,          pV '       d"    \        V 4      p V'       d   \        W4      # T # V#   T d   pTP                  T9  d   h  \        T TR7      pYP8w  d   T'       d   \        YS4      MTu Rp?# M  T d     Mi ; iTP                  R9   d5    \	        T 4      p\        T 4      w  rM'  T d    \        T 4      w  r Mi ; i\        T 4      w  rT '       d   T'       g   Y,           u Rp?# T'       d   \        Yc4      MTp Rp?EK  Rp?ii ; i)r\   :Ni    Nr   N)r\   r]   rH   r   r   r   r   i5   iA   r   r   i{   i   i      )r\   r   r   r   r   r   r   )r   r   r   r   r   r   )r.   r   r   rV   r   Znew_pathrp   _s   &&      r0   _getfinalpathname_nonstrictr   ]  s   & ^ Bx:(.+/tD'9T96 5 ! :;;&66
  .d<I KH'7;tH3I ($  ;;"@@1-d3"'+a( 1%*4[
d1 "'tJD;&+/tD'T3:s   7 7 DDA?,A?8D>D?B	DB		DB76D7CDCD&D.D5D;DDDstrictFc                s    \        V 4      p \        V \        4      '       d1   R pRpRp\        P                  ! 4       pRp\        V 4      V8X  d   R# M/RpRpRp\        P                  ! 4       pRp\        V 4      V8X  d   R	# V P                  V4      pV\        J d
   \        pR
pMV'       d   RpM\        pV'       g   \        V 4      '       g   \        WP4      p  \        V 4      p ^ p	V'       gg   V P                  V4      '       dP   V P                  V4      '       d   W@\%        V4      R ,           pMV \%        V4      R p \        V4      V 8X  d   Tp V # V #   \         d3   p
T'       d   \        \        T
4      4      Rh\        T 4      p  Rp
?
LRp
?
iT d$   p
T
P                   p	\#        T TR7      p  Rp
?
LRp
?
ii ; i  \         d   p
 Rp
?
T # Rp
?
i\         d   p
T
P                   X	8X  d   Tp  Rp
?
T # Rp
?
ii ; i)s   \\?\rX   rF   s   nuls   \\.\NULz\\?\rZ   rG   r   z\\.\NULTNr   ) )r   r+   r,   r7   r   r   r   rI   r(   ZFileNotFoundErrorr   r   r   r   r   Zstrr   r   rb   )r.   r   r   r_   Znew_unc_prefixr   r!   Z
had_prefixr   Zinitial_winerrorr   Zspaths   &$          r0   r"   r"     s   ~dE""F(J$N**,CG~($ ) F'J#N))+CG~(#__V,
]"-MFM#M%++?D	L$T*D   doof55 z**&c*o.>)??S[\*!$U+t3 D tG  	"
 c"g&D0D>D 	L!{{.t=JLD	L$      ! ;;"22 D!sN   E G  F=#(FF=F=F88F= G=G=G=G88G=c                s    \        V 4      # rn   )r   )r.   r   s   &$r0   r"   r"   0  s    t}r2   Tc                sh   \         P                  ! V 4      p V '       g   \        R4      h\        V \        4      '       d   RpRpRpMRpRpRpVf   TpM\         P                  ! V4      p \        V4      p\        V 4      p\        V4      w  rxp	\        V4      w  rp\        V4      \        V
4      8w  d   \        R	V
: R
V: 24      hV	'       d   V	P                  V4      M. pV'       d   VP                  V4      M. p^ p\        W4       F*  w  pp\        V4      \        V4      8w  d    MV^,          pK,  	  V.\        V4      V,
          ,          WR ,           pV'       g   V# VP                  V4      #   \        \        \        \        \        3 d    \         P"                  ! RY4       h i ; i)z#Return a relative version of a pathzno path specifiedrD   rh   r   r   r    r   Nzpath is on mount z, start on mount r$   )r7   r8   r   r+   r,   r   r
   r   r   Zziprb   r   rL   rM   rN   ZDeprecationWarningrO   rP   )r.   r`   r   r   r   Z	start_absZpath_absZstart_driver   Z
start_restZ
path_driveZ	path_restZ
start_listZ	path_listrf   Ze1Ze2Zrel_lists   &&                r0   r$   r$     s   99T?D,--$}		% EN	4=%.y%9"
#,X#6 
yK HZ$88K) * * /9Z%%c*b
,5IOOC(2	*0FB|x|+FA 1
 8s:q01IbMAMxx!!z><AST $$Y<s    +A%E8 E8 ,A:E8 'E8 89F1c           
     s   \        \        \        P                  V 4      4      p V '       g   \	        R4      h\        V ^ ,          \        4      '       d   RpRpRpMRpRpRp V  Uu. uF+  p\        VP                  W!4      P                  4       4      NK-  	  ppV UUUu. uF  w  rgqDP                  V4      NK  	  pppp\        V UUUu0 uF  w  rgqFkK	  	  uppp4      ^8w  d   \	        R4      h\        V ^ ,          P                  W!4      4      w  rp\        V UUUu0 uF  w  rgqGkK	  	  uppp4      ^8w  d   V	'       d   \	        R	4      h\	        R
4      hVP                  V4      pV Uu. uF  q'       g   K  W8w  g   K  VNK  	  ppV UUu. uF%  q Uu. uF  q'       g   K  W8w  g   K  VNK  	  upNK'  	  ppp\        V4      p\        V4      p\        V4       F  w  ppVVV,          8w  g   K  VRV p M	  VR\        V4       pW,           VP                  V4      ,           # u upi u upppi u upppi u upppi u upi u upi u uppi   \         \"        3 d    \$        P&                  ! R.T O5!   h i ; i)zEGiven an iterable of path names, returns the longest common sub-path.z%commonpath() arg is an empty iterablerD   rE   rh   r   r   r    zPaths don't have the same drivez%Can't mix absolute and relative pathsz%Can't mix rooted and not-rooted pathsNr%   )ZtupleZmapr7   r8   r   r+   r,   r
   r:   rC   r   rb   ZminZmaxZ	enumerater   rL   rM   rO   rP   )rQ   r   r   r   rS   Zdrivesplitsrd   re   Zsplit_pathsrT   rU   r.   Zcommoncr?   Zs1Zs2rf   s   &                 r0   r%   r%     s3   #bii'(E@AA%(E""!JOP%Qy6!7!=!=!?@%P3>?;awws|;?
 -gaA-.!3>??%eAh&6&6v&CDT-gaA-.!3 !HII !HIIC#9Vq!Q[!!V9DOPKq1:1aak1:KPbMDAqBqEz "
 HSW%F|chhv...; Q?
 . . ::P ~& $$\:E:s   "I &1H*I H/;I 
H6AI H=,I +I -	I;II	I I	I	&I	.I	4I;5I 54I *I 	II +I?)_path_isdir)_path_isfile)_path_islink)_path_isjunction)_path_exists)_path_lexists)_path_isdevdrivec                sP     \        \        V 4      4      #   \         d     R# i ; i)z@Determines whether the specified path is on a Windows Dev Drive.F)r   r   r   r-   r/   r0   r'   r'   ^  s(    	#GDM22 		s    %%>	   Z"r   r   rY   Z<Z>Z?r   Z|>   ZAUXZCONZNULZPRNzCONIN$zCONOUT$rn   )MZ__doc__r   r   r    r   r   r   r   r!   r7   r9   rO   Z__all__r1   Z_winapir3   r;   r4   r<   r5   r=   r   ZImportErrorr   r   r	   ZntrW   r
   r   r   ri   r   r   rm   r   Z	frozensetZrangeZchrrr   rs   r   ro   r   r}   r   r{   r   r   r   r   r   r   r   r   r   r   r   r   r"   r#   r$   r%   r   r   r   r   r   r   r   r&   r   r   r   r   r   r'   )rf   r   s   00r0   <module>r      s$   
		

	

 	 
  *: *g *f *\ *+ *g *j *** .*/8*9C** *"**+3*4=*>E*FN* * "* #/* 0<* =G* 	* 	* '	* (-	* .7	* 8A	* BJ	*
 *
 *
 )*
 *F*
 GP* * &* (2* 4@* BN* * )*!,- -
8<B&)^.-#2h+*8 ((00 
%( 2YYSVY23
 5/0/1s1#Y/01/0/1s1#Y/01LI2,x @
:@&(-R)#6oNN ,3 (T 9@ 6pF FT " ,r0f	 ())1)+
	#u  	,,	,N  +#*#+#V  .   10L  #("(#(T  
	
T   R	  		  		s    F5 G G G'G,
G1
G6 H 
H $H* *	H7 5
GG
GG	G$#G$6
HH
HHH'&H'*H43H47II