
    G/Php                        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mZmZmZmZ d dlmZmZmZmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZm Z  d dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dl(Z(da) e(j*                    Z+ e,            Z-d Z.d Z/d Z0 e/ede0           dBdZ1 e/ede1           dCdZ2 e/ede2           	 	 	 dDdZ3 e/ede3           dEdZ4 e/ede4           d Z5d Z6 e/ede6           dFdZ7 e/ede7           dGd Z8d!d gfd"Z9 e/ed#e9           d$ Z: e/ed%e:           d&ed'<   d(ed)<   d*ed+<   d,ed-<   d.ed/<   d0ed1<   d2ed3<   d4ed5<   exj;        d6z  c_;        ej        d7k    r.d8ed9<    e$            r ej<        d:           d;ej;        z   e_;        eZ=	 	 	 	 	 dHd<Zee_        eZ>d= Zee_        d>D ]1Z?ej@        A                    d?e?z   d@z             ZBeB eCeBdAe           2dS )I    N)copy)Path)	ccompiler)compiler_classgen_lib_optionsget_default_compilernew_compiler	CCompiler)DistutilsExecErrorDistutilsModuleErrorDistutilsPlatformErrorCompileErrorUnknownFileError)customize_compiler)LooseVersion)log)filepath_from_subprocess_outputforward_bytes_to_stdout)	cyg2win32is_sequencemingw32get_num_build_jobs_commandline_dep_stringsanitize_cxx_flagsc                 &   | dz   }t           j                            |          sdS t          |          5 }|                                }ddd           n# 1 swxY w Y   t          |||          }|d         }||k    rdS d                    |dd                   }	d t          j        |	d          D             }
	 t          j	        |           j
        }|
D ]"}t          j	        |          j
        |k    r dS #n# t          $ r Y dS w xY wdS )	z
    Check if an objects needs to be rebuild based on its dependencies

    Parameters
    ----------
    obj : str
        object file

    Returns
    -------
    bool
    .dTN c                 H    g | ]}|d k    |                     d          | S )
:)endswith).0xs     Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numpy/distutils/ccompiler.py
<listcomp>z _needs_build.<locals>.<listcomp>G   s6     2 2 2!DyyCy yy    )posixF)ospathexistsopen	readlinesr   joinshlexsplitstatst_mtimeOSError)objcc_argsextra_postargspp_optsdep_fileflinescmdlinelast_cmdlinecontentsdepst_objs               r%   _needs_buildr@   '   s~    TzH7>>(## t 
h 1               %WngFFG9LwtwwuSbSz""H2 2u{84888 2 2 2D
%  	 	Awqzz"U**tt +	    tt 5s)   AAA;D  >D   
DDc                 4    fd}t          | ||           d S )Nc                      | g|R i |S N )selfargskwfuncs      r%   <lambda>z replace_method.<locals>.<lambda>[   s!    $$t"9d"9"9"9b"9"9 r'   )setattr)klassmethod_namerH   ms     ` r%   replace_methodrN   Y   s)    9999AE;"""""r'   c                     dS )z
    Does nothing here, but is called by the get_version method and can be
    overridden by subclasses. In particular it is redefined in the `FCompiler`
    class where more documentation can be found.

    NrD   rE   s    r%   CCompiler_find_executablesrQ   d   s	     	Dr'   find_executablesc                 \   ||nt          t          j                  }|3|}t          |          r"d                    t          |                    }t          j        |           	 | j        rt          j
        ||           n!t          j
        |t          j        |           dS # t          j        $ r}|j        }|j        }Y d}~nmd}~wt          $ r]}d| d}	 |                    t"          j        j                  }n%# t(          $ r |                    d          }Y nw xY wd}Y d}~nd}~ww xY wt          |          r"d                    t          |                    }| j        rt+          |           t-          j        d	|          rd
}nd}t1          d|||fz            )a  
    Execute a command in a sub-process.

    Parameters
    ----------
    cmd : str
        The command to execute.
    display : str or sequence of str, optional
        The text to add to the log file kept by `numpy.distutils`.
        If not given, `display` is equal to `cmd`.
    env : a dictionary for environment variables, optional

    Returns
    -------
    None

    Raises
    ------
    DistutilsExecError
        If the command failed, i.e. the exit status was not 0.

    N )env)stderrrU   z

z


utf8   s   Too many open filesz2
Try rerunning setup command until build succeeds.r   z)Command "%s" failed with exit status %d%s)dictr)   environr   r.   listr   infoverbose
subprocesscheck_outputSTDOUTCalledProcessErroroutput
returncoder3   encodesysstdoutencodingAttributeErrorr   researchr   )	rE   cmddisplayrU   excosemsgs	            r%   CCompiler_spawnrr   r   s   . ##d2:&6&6Cw 	.hhtG}}--GHW< 	L#CS11111#C
0AsKKKK. t- (   JN    1	!,--AA 	! 	! 	!  AAA	! * 3 "hhtCyy!!| #"""	y'++ C
H !SM* + + +sH   (?B) )D58CD5D0$DD0D&#D0%D&&D00D5spawnr   c                 0   |d}g }|D ]}t           j                            t           j                            |                    \  }}t           j                            |          d         }|t           j                            |          d         }|                    d          rk|                    d          dz   }|d|         }	t           j                            t           j        	                    |	                    }	|	||d         z   }|| j
        vrt          d|d|d          |rt           j                            |          }t           j                            ||| j        z             }
|                    |
           |S )	a  
    Return the name of the object files for the given source files.

    Parameters
    ----------
    source_filenames : list of str
        The list of paths to source files. Paths can be either relative or
        absolute, this is handled transparently.
    strip_dir : bool, optional
        Whether to strip the directory from the returned paths. If True,
        the file name prepended by `output_dir` is returned. Default is False.
    output_dir : str, optional
        If given, this path is prepended to the returned paths to the
        object files.

    Returns
    -------
    obj_names : list of str
        The list of paths to the object files corresponding to the source
        files in `source_filenames`.

    Nr      z..   zunknown file type 'z	' (from 'z'))r)   r*   splitextnormpath
splitdriveisabs
startswithrfindbasenameabspathsrc_extensionsr   r.   obj_extensionappend)rE   source_filenames	strip_dir
output_dir	obj_namessrc_namebaseextidobj_names              r%   CCompiler_object_filenamesr      sw   . 
I$ # #G$$RW%5%5h%?%?@@	cw!!$''*BGMM$''(()??4   	  

4  "ARaRA  !3!344AtABBx<Dd)))""333PXPXPX#YZZZ 	*7##D))D7<<
D43E,EFF""""r'   object_filenamesc	           	           t                      }	t          5  t          t          j        |	          addd           n# 1 swxY w Y   |sg S ddlm}
m}m} t           |
          rag }dD ]F}t           d|z             }||                    d|dd                    |                     Gd	                    |          }n  j        }d
d                    |          d	}t          j        |                                |||||          \  }} }                      ||          dd                              z  }r|dd                              z  z  }t          j        |             fd}t           |
          rt%          |                                          }g g }}|D ]}||v r||         \  }} j        dk    rt+          |          }t+          |          }t-          |          j                                        |v r% ||          s|                    |||ff           |                    |||ff           |}|D ]} ||           n|                                }t5          |          dk    rU|	dk    rOddlm}  ||	          5 }|                    ||          }ddd           n# 1 swxY w Y   t%          |           n|D ]} ||           |S )a  
    Compile one or more source files.

    Please refer to the Python distutils API reference for more details.

    Parameters
    ----------
    sources : list of str
        A list of filenames
    output_dir : str, optional
        Path to the output directory.
    macros : list of tuples
        A list of macro definitions.
    include_dirs : list of str, optional
        The directories to add to the default include file search path for
        this compilation only.
    debug : bool, optional
        Whether or not to output debug symbols in or alongside the object
        file(s).
    extra_preargs, extra_postargs : ?
        Extra pre- and post-arguments.
    depends : list of str, optional
        A list of file names that all targets depend on.

    Returns
    -------
    objects : list of str
        A list of object file names, one per source file `sources`.

    Raises
    ------
    CompileError
        If compilation fails.

    Nr   )	FCompilerFORTRAN_COMMON_FIXED_EXTENSIONShas_f90_header)f77f90fix	compiler_zFortran z compiler: rT   r    zC compiler: zcompile options: '%s'z
extra options: '%s'c           	      p   | \  }\  }}t          |          sd S 	 t          5  |t          vr't                              |           	 d d d            n-	 d d d            n# 1 swxY w Y   t	          j        d           e	 t          5                      |||           d d d            n# 1 swxY w Y   t          5  t                              |           d d d            d S # 1 swxY w Y   d S # t          5  t                              |           d d d            w # 1 swxY w Y   w xY w)NTg?)	r@   _global_lock_processing_filesaddtimesleep_job_semaphore_compileremove)rF   r4   srcr   r5   r6   r7   rE   s       r%   single_compilez)CCompiler_compile.<locals>.single_compile4  sl   Zc3C.'BB 	F	  ///%))#...	      /               JsOOO		. O Oc3WngNNNO O O O O O O O O O O O O O O  . .!((---. . . . . . . . . . . . . . . . . . . .!((---. . . . . . . . . . . . . . . .sw   %A$$A(+A(C: B3'C: 3B77C: :B7;C: C--C14C1:D5D)D5)D--D50D-1D5absoftru   )ThreadPoolExecutor)r   r   r   	threading	Semaphorenumpy.distutils.fcompilerr   r   r   
isinstancegetattrr   r.   compiler_sor   r\   _setup_compile_get_cc_argsr[   keyscompiler_typer   r   suffixloweritemslenconcurrent.futuresr   map)!rE   sourcesr   macrosinclude_dirsdebugextra_preargsr6   dependsjobsr   r   r   rl   fcfcompccompobjectsbuildr   objects_to_buildf77_objectsother_objectsr4   r   r   build_itemsrn   r   poolresr5   r7   s!   `      `                       @@r%   CCompiler_compiler      s>   P D 
 7 7!&066N7 7 7 7 7 7 7 7 7 7 7 7 7 7 7  	; ; ; ; ; ; ; ; ; ; $	"" 
:' 	N 	NBD+b.11E}NNNCHHUOOOLMMMM))G$$ (+9HW
FL' '9 9 4FG^We >>G%'):):;G H*chh~.F.FGGHW. . . . . . . .6 $	"" $

--%'] 
	< 
	<C&&& :S%x//#C..C#C..C99#))++/NNN)>#.. O&&c3Z'89999!((#Sz):;;; "  	 	AN1	 kkmm
5zzA~~$((999999%% 	8((>;77C	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8S				  	 	AN1 Ns#   AA	A1KKKcompilerD   c                    t          j        d| j        j        dj        j                   t	          | d          rjd| j        d         v r[t          j                    dk    rt          j        dk    s4| j        	                    d           | j
        	                    d           fd	} |d
          r|                     j                    |d          r#j        D ]\  }}|                     ||            |d          rj        D ]}|                     |            |d          r"|                     | j        j        z               |d          r"|                     | j        j        z               |d          r|                     j                    |d          r|                     j                   dS dS )a  
    Customize compiler using distutils command.

    Parameters
    ----------
    cmd : class instance
        An instance inheriting from ``distutils.cmd.Command``.
    ignore : sequence of str, optional
        List of ``distutils.ccompiler.CCompiler`` commands (without ``'set_'``) that should not be
        altered. Strings that are checked for are:
        ``('include_dirs', 'define', 'undef', 'libraries', 'library_dirs',
        'rpath', 'link_objects')``.

    Returns
    -------
    None

    z
customize z using compilerclangr   arm64darwinz-ftrapping-mathc                 2    t          | d           d uo| vS rC   )r   )attrrk   ignores    r%   allowz&CCompiler_customize_cmd.<locals>.allow  s$    sD$''t3JF8JJr'   r   defineundef	librarieslibrary_dirsrpathlink_objectsN)r   r\   	__class____name__hasattrr   platformmachinere   r   r   set_include_dirsr   r   define_macror   undefine_macroset_librariesr   set_library_dirsr   set_runtime_library_dirsr   set_link_objectsr   )rE   rk   r   r   namevaluemacros    ``    r%   CCompiler_customize_cmdr   x  s9   & HH(?(?(?(+(>(>@ A A A 	j!!
34=###7**s|x/G/G 	./// 1222K K K K K K u^ 0c.///uX + Z 	+ 	+MT5dE****uW~~ 'Y 	' 	'E&&&&u[ ;4>CM9:::u^ Dd/#2BBCCCuW~~ 1%%ci000u^ 0c./////0 0r'   customize_cmdc                    g }d}t          | j                                                  }dD ]}||vr|                    |           |D ]c}t	          | |          rQt          | |          }t          |t          |                    }|                    |t          |          f           ddt          |dz             z   dz   fd|D             }d	                    |          S )Nr   )
versionr   r   object_switchcompile_switchr   r   r   r   r   z%-ru   zs = %sc                     g | ]}|z  S rD   rD   )r#   propfmts     r%   r&   z'_compiler_to_string.<locals>.<listcomp>  s    ***DS4Z***r'   r    )
r[   executablesr   r   r   r   maxr   reprr.   )r   propsmxr   keyvr:   r   s          @r%   _compiler_to_stringr     s    E	
B$))++,,DL   d??KK ) )8S!! 	)#&&ARS""BLL#tAww(((
bd
h
&C****E***E99Ur'   c                    	 |                                   n# t          $ r Y nw xY wt          j        j        dk     rPt          d           t          | j                   t          t          |                      t          d           dS dS )z
    Print the compiler customizations to stdout.

    Parameters
    ----------
    None

    Returns
    -------
    None

    Notes
    -----
    Printing is only done if the distutils log threshold is < 2.

    rv   zP********************************************************************************N)get_version	Exceptionr   _global_log	thresholdprintr   r   rP   s    r%   CCompiler_show_customizationr     s    "   
 ""fdn!$''(((f	 #"s    
$$show_customizationc                    t          j        d| j        j        z             t	          |            |r	 | j                            d           n# t          t          f$ r Y nw xY wt          | d          ryd| j
        d         v rj| j        sb| j
        d                             d          rd\  }}nd\  }}| j
        d                             ||          g| j
        d	d
         z   | _        n^t          | d          rt          j        d| j
        d           t          | d          s!t          j        d| j        j        z              t          | d          r5d| j
        d         v sd| j
        d         v sd| j
        d         v rd| _        nt           j        dk    rdd
l}dd
l}|                                }	 t           j                            |d          }t/          |d          5 }	|	                    d           d
d
d
           n# 1 swxY w Y   |                     |g|dd|dz   g           d| _        n# t4          $ r
 d| _        Y nw xY w|                    |           n# |                    |           w xY wd
S )ao  
    Do any platform-specific customization of a compiler instance.

    This method calls ``distutils.sysconfig.customize_compiler`` for
    platform-specific customization, as well as optionally remove a flag
    to suppress spurious warnings in case C++ code is being compiled.

    Parameters
    ----------
    dist : object
        This parameter is not used for anything.
    need_cxx : bool, optional
        Whether or not C++ has to be compiled. If so (True), the
        ``"-Wstrict-prototypes"`` option is removed to prevent spurious
        warnings. Default is False.

    Returns
    -------
    None

    Notes
    -----
    All the default options used by distutils can be extracted with::

      from distutils import sysconfig
      sysconfig.get_config_vars('CC', 'CXX', 'OPT', 'BASECFLAGS',
                                'CCSHARED', 'LDSHARED', 'SO')

    zcustomize %sz-Wstrict-prototypesr   ccr   gcc)r   g++)r   zc++ru   Nz#### z #######compiler_cxxzMissing compiler_cxx fix for r  r   Tr(   zfile.cwzint a;
z-MMDz-MFr   )r   r   F)r   r\   r   r   r   r   r   rh   
ValueErrorr   r   r  r{   replacewarn_auto_dependsr)   r   tempfileshutilmkdtempr*   r.   r,   writer   r   rmtree)
rE   distneed_cxxabr  r	  tmpdirfnr9   s
             r%   CCompiler_customizer    s   > H^t~67888t T	##$9::::
+ 	 	 	D	 4$$ 	Tq1A)A)A$ 8=#..u55 ''DAqq&DAq%)]1%5%=%=a%C%C$D&*mABB&7%8! tZ(( ?dmmm=>>>400 T84>;RRSSS
 tZ   "et}Q/?&?&?&+t}Q/?&?&?&-q1A&A&A!	G		!!##
	"fh//Bb# $!
###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $LL"&(.rDy'A  C C C!%D 	' 	' 	'!&D	' MM&!!!!FMM&!!!!
Fs_   A A$#A$ 0I 0HI HI H)I I1 II1 II1 1J	customize[-.\d]+c                       fd}|S )ak  
    Simple matching of version numbers, for use in CCompiler and FCompiler.

    Parameters
    ----------
    pat : str, optional
        A regular expression matching version numbers.
        Default is ``r'[-.\d]+'``.
    ignore : str, optional
        A regular expression matching patterns to skip.
        Default is ``''``, in which case nothing is skipped.
    start : str, optional
        A regular expression matching the start of where to start looking
        for version numbers.
        Default is ``''``, in which case searching is started at the
        beginning of the version string given to `matcher`.

    Returns
    -------
    matcher : callable
        A function that is appropriate to use as the ``.version_match``
        attribute of a ``distutils.ccompiler.CCompiler`` class. `matcher` takes a single parameter,
        a version string.

    c                    |                     dd          }d}r-t          j        |          }|sd S |                                }	 t          j        ||d                    }|sd S r=t          j        |                    d                    r|                                }a	 |                    d          S )Nr    rT   r   )r  ri   matchendrj   group)rE   version_stringposrM   r   patstarts       r%   matcherz%simple_version_match.<locals>.matcherL  s     (//c:: 	//A t%%''C		#~cdd344A t "(61771::66 eeggwwqzzr'   rD   )r  r   r  r  s   ``` r%   simple_version_matchr   2  s/    4      & Nr'   Fc                 J  	 |st          | d          r| j        S |                                  	 | j        }n# t          $ r Y dS w xY w|r|d         sdS 	 | j        }n0# t          $ r# 	 | j        	n# t          $ r Y Y dS w xY w	fd}Y nw xY w	 t          j        |t          j	                  }t          |          }d}n9# t          j        $ r}|j        }|j        }Y d}~nd}~wt          $ r d}d}Y nw xY wd}||v r ||          }|rt          |          }|| _        |S )a  
    Return compiler version, or None if compiler is not available.

    Parameters
    ----------
    force : bool, optional
        If True, force a new determination of the version, even if the
        compiler already has a version attribute. Default is False.
    ok_status : list of int, optional
        The list of status values returned by the version look-up process
        for which a version string is returned. If the status value is not
        in `ok_status`, None is returned. Default is ``[0]``.

    Returns
    -------
    version : str or None
        Version string, in the format of ``distutils.version.LooseVersion``.

    r   Nr   c                 d    t          j        |           }|sd S |                    d          }|S )Nr   )ri   r  r  )r  rM   r   r  s      r%   r  z&CCompiler_get_version.<locals>.matcher  s7    n--A tggi((GNr'   )rV   rX   r'   )r   r   rR   version_cmdrh   version_matchversion_patternr^   r_   r`   r   ra   rb   rc   r3   r   )
rE   force	ok_statusr#  r  rb   statusrm   r   r  s
            @r%   CCompiler_get_versionr)  a  s   (  WT9-- |&   tt k!n t$ 
 
 
	&CC 	 	 	444		 	 	 	 	 	 	
(Z=NOOO 188 (          	 G'&// 	,"7++GDLNsc   8 
AAA 
B)A10B1
B ;B?B  B
B C C7C##C76C7r   c                    | j         dv r| S t          |           }|j        |_        |j        d         gt          |j        dd                   z   |_        t
          j                            d          r>d|j        d         v r/|j        d         |j        d         g|j        dd         z   |_        t
          j                            d          rO|j        	                    d	           |j        	                    d
           |j        	                    d
           n#|j        d         g|j        dd         z   |_        |S )z
    Return the C++ compiler.

    Parameters
    ----------
    None

    Returns
    -------
    cxx : class instance
        The C++ compiler, as a ``distutils.ccompiler.CCompiler`` instance.

    )msvcintelwintelemwr   ru   N)aixos400	ld_so_aixrv   r/  z-D__STDC_FORMAT_MACROSz-fno-extern-tls-init)
r   r   r  r   r   re   r   r{   	linker_sor   )rE   cxxs     r%   CCompiler_cxx_compilerr3    s<    ;;;
t**C'C'*+()<==>CO 011 ,3=+++q)3+;A+>?-+,
|w'' B7888566634444)!,-abb0AAJr'   cxx_compiler)intelccompilerIntelCCompilerz(Intel C Compiler for 32-bit applicationsintel)r5  IntelItaniumCCompilerz7Intel C Itanium Compiler for Itanium-based applicationsintele)r5  IntelEM64TCCompilerz(Intel C Compiler for 64-bit applicationsintelem)r5  IntelCCompilerWz3Intel C Compiler for 32-bit applications on Windowsr,  )r5  IntelEM64TCCompilerWz3Intel C Compiler for 64-bit applications on Windowsr-  )pathccompilerPathScaleCCompilerz2PathScale Compiler for SiCortex-based applicationspathcc)armccompilerArmCCompilerzArm C Compilerarm)fujitsuccompilerFujitsuCCompilerzFujitsu C Compilerfujitsu))linux.*r7  )rG  r9  )rG  r;  )rG  r@  )ntr,  )rH  r-  win32)mingw32ccompilerMingw32CCompilerz>Mingw32 port of GNU C Compiler for Win32(for MSC built Python)r   z+Setting mingw32 as default compiler for nt.))rH  r   c                 P   |!t          j                    t           j        k    }| t          j        } 	 |t          |           }t          |         \  }}}n,# t          $ r d| z  }||d|z  z   }t          |          w xY wd|z   }	 t          |           n# t          $ r}	t          |	          }t          j        dt          |                     |dd          }	 t          |           n3# t          $ r&}	t          |	          }t          d|z            d }	~	ww xY wY d }	~	nd }	~	ww xY w	 t          j        |         }
t!          |
          |         }n$# t          $ r t          d|d|d	          w xY w |d ||          }||_        t          j        d
|z             |S )Nz5don't know how to compile C/C++ code on platform '%s'z with '%s' compilerznumpy.distutils.z,%s in numpy.distutils; trying from distutils   z4can't compile C/C++ code: unable to load module '%s'z0can't compile C/C++ code: unable to find class 'z' in module ''znew_compiler returns %s)r   get_thresholdINFOr)   r   r   r   KeyErrorr   
__import__ImportErrorstrr\   r   re   modulesvarsr]   r   )platr   r]   dry_runr&  module_name
class_namelong_descriptionrq   rp   modulerK   s               r%   r	   r	     s$    #%%1|w*+D11H6DX6N3j"2"2 * * *EL-88C$S)))	*
 %{2KK     
 
 
!ff?S	 	 	!!""o	{#### 	 	 	a&&C&'](   	 $####
>[)VZ( > > >""$.JJ$= > > 	>> uT7E**HHI'51222OsS   "A )A?B 
D+";D&C.-D&.
D8!DDD&&D+/'E !E8c                     t          | |||          }g }|D ]I}t          |          r#|                    t          |                     4|                    |           J|S rC   )_distutils_gen_lib_optionsr   extendr[   r   )r   r   runtime_library_dirsr   rlib_optsr   s          r%   r   r      su     	#8\#7	D 	DAH  q>> 	OODGG$$$$OOAOr'   )msvc9r+  _msvcbcppcygwincemxcunixcz
distutils.r   r   )NN)r   r   )NNNr   NNN)rD   )r   )r  r   r   )NNNr   r   )Dr)   ri   re   r   r/   r   r^   r   pathlibr   	distutilsr   distutils.ccompilerr   r   r   r	   r
   distutils.errorsr   r   r   r   r   distutils.sysconfigr   distutils.versionr   numpy.distutilsr   numpy.distutils.exec_commandr   r   numpy.distutils.misc_utilr   r   r   r   r   r   r   r   Lockr   setr   r@   rN   rQ   rr   r   r   r   r   r   r  r   r)  r3  _default_compilersr\   _distutils_new_compilerr^  _ccrU  get_mrJ   rD   r'   r%   <module>ry     sH   				 				 



                                                    3 2 2 2 2 2 * * * * * *             9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9    y~CEE / / /d# # #	 	 	 y,.H I I IE+ E+ E+ E+N y'? 3 3 3+ + + +Z y,.H I I I=A@D37J J J JX y)%6 7 7 740 40 40 40l y/+B C C C  $  6 y.0L M M MO O O Ob y+': ; ; ;- - - -^ ',s A A A AF y-)> ? ? ?" " "H y.*@ A A AGw Wx Iy Sx Uz Rx .u 2y  
   !5 5   <7!;N9 wyy F 	>???';)2)E(F	$ ' 	* * * *X &	 ,   " ,	 
 J 8 8C	+j8	9	9B	~%7778 8r'   