
    sh+^                     n   S r SSKrSSKrSSKrSSKrSSKJrJrJrJ	r	J
r
JrJr  SSKrSSKJr  SSKJrJrJr  SSKJrJrJr  SSKJrJr  \R6                  " \5      rSrSrS	r S
r!Sr"\r#\r$SRK                  5       r&\'" \&5       H  u  r(r)\*" \RV                  \   \)\(5        M     Sr,Sr-S r.\R^                  " 5       r0 " S S\15      r2 " S S\15      r3Sr4SSSSSSSSSSSSS.r5S r6S r7S r8S r9Sr: " S S \15      r;S!r<S"r=S#r>S$r?S%r@S& rAS' rBS( rCS) rDS* rES+ rFS, rG\R                  " S-5      rIS. rJS/ rKS0 rLg)1z(
This is a direct translation of nvvm.h
    N)c_void_pc_intPOINTERc_char_pc_size_tbyrefc_char)ir   )	NvvmErrorNvvmSupportErrorNvvmWarning)get_libdeviceopen_libdeviceopen_cudalib)cgutilsconfig         a  
NVVM_SUCCESS
NVVM_ERROR_OUT_OF_MEMORY
NVVM_ERROR_PROGRAM_CREATION_FAILURE
NVVM_ERROR_IR_VERSION_MISMATCH
NVVM_ERROR_INVALID_INPUT
NVVM_ERROR_INVALID_PROGRAM
NVVM_ERROR_INVALID_IR
NVVM_ERROR_INVALID_OPTION
NVVM_ERROR_NO_MODULE_IN_PROGRAM
NVVM_ERROR_COMPILATION
ze-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v16:16:16-v32:32:32-v64:64:64-v128:128:128-n16:32:64ze-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-i128:128:128-f32:32:32-f64:64:64-v16:16:16-v32:32:32-v64:64:64-v128:128:128-n16:32:64c                  :     [        5         g! [         a     gf = f)z 
Return if libNVVM is available
TF)NVVMr        k/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/cuda/cudadrv/nvvm.pyis_availabler   <   s%       s   
 
c                   `   \ rS rSrSr\\" \5      \" \5      4\\" \5      4\\" \5      4\\\	\
\	4\\\	\
\	4\\\\" \	5      4\\\" \
5      4\\\	4\\\" \
5      4\\\	4\\" \5      \" \5      \" \5      \" \5      4\\\\" \	5      4S.rSrS rS r\S 5       r\S 5       rS	 rS
 rSS jrSrg)r   K   zProcess-wide singleton.
    )nvvmVersionnvvmCreateProgramnvvmDestroyProgramnvvmAddModuleToProgramnvvmLazyAddModuleToProgramnvvmCompileProgramnvvmGetCompiledResultSizenvvmGetCompiledResultnvvmGetProgramLogSizenvvmGetProgramLognvvmIRVersionnvvmVerifyProgramNc                    [            U R                  c  [        R                  U 5      =U l        n [	        S5      Ul        UR                  R                  5        H;  u  pE[        UR
                  U5      nUS   Ul        USS  Ul        [        XU5        M=     S S S 5        U R                  $ ! [         a  nS U l        Sn[        X2-  5      eS nAff = f! , (       d  f       U R                  $ = f)Nnvvmz;libNVVM cannot be found. Do `conda install cudatoolkit`:
%sr   r   )
_nvvm_lock_NVVM__INSTANCEobject__new__r   driverOSErrorr   _PROTOTYPESitemsgetattrrestypeargtypessetattr)clsinsteerrmsgnameprotofuncs          r   r0   NVVM.__new__   s    ~~%(.s(;;7".v"6DK $(#3#3#9#9#;KD"4;;5D#(8DL$)!"IDMD-	 $< $ ~~  7%)CN2F*6:66	7 Z$ ~~s/   *CB/AC/
C9CCC
C0c                     U R                  5       nUS   U l        US   U l        US   U l        US   U l        [        5       U l        g )Nr   r      r   )get_ir_version_majorIR_minorIR	_majorDbg	_minorDbgget_supported_ccs_supported_ccs)selfir_versionss     r   __init__NVVM.__init__   sG    ))+#A#A$Q$Q/1r   c                 R    U R                   U R                  4S:  a  [        $ [        $ )N)r      )rD   rE   _datalayout_original_datalayout_i128rJ   s    r   data_layoutNVVM.data_layout   s#    MM4==)F2''##r   c                     U R                   $ N)rI   rR   s    r   supported_ccsNVVM.supported_ccs   s    """r   c                     [        5       n[        5       nU R                  [        U5      [        U5      5      nU R                  US5        UR                  UR                  4$ )NzFailed to get version.)r   r   r   check_errorvalue)rJ   majorminorerrs       r   get_versionNVVM.get_version   sN    uU|U5\:67{{EKK''r   c                 B   [        5       n[        5       n[        5       n[        5       nU R                  [        U5      [        U5      [        U5      [        U5      5      nU R                  US5        UR                  UR                  UR                  UR                  4$ )NzFailed to get IR version.)r   r)   r   rZ   r[   )rJ   majorIRminorIRmajorDbgminorDbgr^   s         r   rC   NVVM.get_ir_version   sx    ''77  ww!&x%/C9:}}gmmX^^X^^KKr   c                     U(       a>  [        U[        U   5      nU(       a"  [        U5        [        R                  " S5        g Ueg )Nr   )r   RESULT_CODE_NAMESprintsysexit)rJ   errormsgrk   excs        r   rZ   NVVM.check_error   s6    C!25!9:Cc
	 r   )rF   rD   rG   rE   rI   )F)__name__
__module____qualname____firstlineno____doc__nvvm_resultr   r   nvvm_programr   r   r3   r.   r0   rL   propertyrS   rW   r_   rC   rZ   __static_attributes__r   r   r   r   r   K   s<   
 $WU^WU^D *7<+@A  +GL,AB
 x8#E x8'E ugh.?A wx'8&: #.|X!F #.|WX=N!O *<B &wu~wu~!%.'%.: *<%h/1c3Kl J*2 $ $ # #(Lr   r   c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)CompilationUnit   c                     [        5       U l        [        5       U l        U R                  R	                  [        U R                  5      5      nU R                  R                  US5        g )NzFailed to create CU)r   r1   rv   _handler    r   rZ   )rJ   r^   s     r   rL   CompilationUnit.__init__   sF    f#~kk++E$,,,?@%:;r   c                     [        5       nUR                  [        U R                  5      5      nUR	                  USSS9  g )NzFailed to destroy CUT)rk   )r   r!   r   r}   rZ   )rJ   r1   r^   s      r   __del__CompilationUnit.__del__   s8    ''dll(;<3 6TBr   c                     U R                   R                  U R                  U[        U5      S5      nU R                   R	                  US5        g)z
Add a module level NVVM IR to a compilation unit.
- The buffer should contain an NVVM module IR either in the bitcode
  representation (LLVM3.0) or in the text representation.
NFailed to add module)r1   r"   r}   lenrZ   rJ   bufferr^   s      r   
add_moduleCompilationUnit.add_module   s?     kk00v14VdD%;<r   c                     U R                   R                  U R                  U[        U5      S5      nU R                   R	                  US5        g)z
Lazily add an NVVM IR module to a compilation unit.
The buffer should contain NVVM module IR either in the bitcode
representation or in the text representation.
Nr   )r1   r#   r}   r   rZ   r   s      r   lazy_add_moduleCompilationUnit.lazy_add_module   s?     kk44T\\658[$H%;<r   c           
         S nUR                  5        VVs/ s H  u  p4U" X45      PM     nnn[        [        U5      -  " U Vs/ s H  n[        UR                  S5      5      PM     sn6 nU R                  R                  U R                  [        U5      U5      nU R                  US5        U R                  R                  U R                  [        U5      U5      nU R                  US5        [        5       nU R                  R                  U R                  [        U5      5      nU R                  US5        [        UR                  -  " 5       n	U R                  R                  U R                  U	5      nU R                  US5        U R                  5       U l        U R                   (       a#  ["        R$                  " U R                   [&        S9  U	SS $ s  snnf s  snf )	a  Perform Compilation.

Compilation options are accepted as keyword arguments, with the
following considerations:

- Underscores (`_`) in option names are converted to dashes (`-`), to
  match NVVM's option name format.
- Options that take a value will be emitted in the form
  "-<name>=<value>".
- Booleans passed as option values will be converted to integers.
- Options which take no value (such as `-gen-lto`) should have a value
  of `None` passed in and will be emitted in the form "-<name>".

For documentation on NVVM compilation options, see the CUDA Toolkit
Documentation:

https://docs.nvidia.com/cuda/libnvvm-api/index.html#_CPPv418nvvmCompileProgram11nvvmProgramiPPKc
c                     U R                  SS5      n Uc  SU  3$ [        U[        5      (       a  [        U5      nSU  SU 3$ )N_-=)replace
isinstanceboolint)kvs     r   stringify_option1CompilationUnit.compile.<locals>.stringify_option   sJ    		#s#Ay1#w!T""Fqc1#;r   utf8zFailed to verify
zFailed to compile
z&Failed to get size of compiled result.zFailed to get compiled result.)categoryN)r4   r   r   encoder1   r*   r}   
_try_errorr$   r   r%   r   r	   r[   r&   get_loglogwarningswarnr   )
rJ   optionsr   r   r   xc_optsr^   reslenoutput_buffers
             r   compileCompilationUnit.compile   sx   (		 7>mmoFoda#A)oFS\)6=-?6= .6ahhv6F-G6=-? @ kk++DLL#g,O12 kk,,T\\3w<P23 kk33DLL%-PEF&,,.1kk//mL=> <<>88MM$(([9Q7 G-?s   G$Gc                 d    U R                   R                  X< SU R                  5       < 35        g )N
)r1   rZ   r   )rJ   r^   rm   s      r   r   CompilationUnit._try_error%  s!    dlln%EFr   c                    [        5       nU R                  R                  U R                  [	        U5      5      nU R                  R                  US5        UR                  S:  au  [        UR                  -  " 5       nU R                  R                  U R                  U5      nU R                  R                  US5        UR                  R                  S5      $ g)Nz#Failed to get compilation log size.r   zFailed to get compilation log.r    )
r   r1   r'   r}   r   rZ   r[   r	   r(   decode)rJ   r   r^   logbufs       r   r   CompilationUnit.get_log(  s    kk//eFmL%JK<<!v||+.F++//fECKK##C)IJ<<&&v..r   )r}   r1   r   N)rp   rq   rr   rs   rL   r   r   r   r   r   r   rx   r   r   r   rz   rz      s(    <C
==: xGr   rz   )r   r   )r      r   r   )r   rB   )r   r   )   r   )r   r   )r   rB   )r   r   )r   rB   )r   r   )rO   r   rO   r   rO   r   )rO   	   r   r   )r   r   )r   r   )r   r   )r   r   ))   rB   )r   r   )r   r   )r   r   )r   r   )r   r   )r   rO   )   r   )r   r   )r   rB   )r   r   )r   r   c                      [         U    u  p[        [         Vs/ s H  nXs=::  a  U::  d  M  O  M  UPM     sn5      $ s  snf ! [         a?    [        [         Vs/ s H  nU[        R
                  :  d  M  UPM     Os  snf sn5      s $ f = frV   )CTK_SUPPORTEDtupleCOMPUTE_CAPABILITIESKeyErrorr   CUDA_DEFAULT_PTX_CC)ctk_versionmin_ccmax_ccccs       r   ccs_supported_by_ctkr   Q  s    	<&{3#7 1#7R// / #7 1 2 	2 1 < #7 ;#7Rv999 #7 ; < 	<<s9   A ???A A BA>
7A>
=BBc                       SSK Jn   U R                  5       n[        [        5      nX:  a9  SnUS    SUS    3nSU SUS    SUS    S3n[
        R                  " U5        U$ [        U5      nU$ !   SnUs $ = f)	Nr   )runtimer   .r   zCUDA Toolkit z is unsupported by Numba - z! is the minimum required version.)numba.cuda.cudadrv.runtimer   r_   minr   r   r   r   )r   cudart_version_supported_cc
min_cudartctk_verunsupported_vers         r   rH   rH   ^  s    6 ,,. ]#J"#A&'q):(;<*7)3N(m_Ajm_ =// 	o&(8M% s   A2 2A:c                     [        5       R                  nU(       d  Sn[        U5      e[        U5       H4  u  p4X@:X  a  Us  $ X@:  d  M  US:X  a  SX-   -  n[        U5      eXS-
     s  $    US   $ )z
Given a compute capability, return the closest compute capability supported
by the CUDA toolkit.

:param mycc: Compute capability as a tuple ``(MAJOR, MINOR)``
:return: Closest supported CC as a tuple ``(MAJOR, MINOR)``
zmNo supported GPU compute capabilities found. Please check your cudatoolkit version matches your CUDA version.r   z?GPU compute capability %d.%d is not supported(requires >=%d.%d)r   )r   rW   r   	enumerate)myccrW   rm   ir   s        r   find_closest_archr   w  s     F((MQs##=):IYAv+.2i9&s++ %U++ *  r   c                 x    [         R                  (       a  [         R                  nSU-  $ [        X45      nSU-  $ )z1Matches with the closest architecture option
    zcompute_%d%d)r   FORCE_CUDA_CCr   )r\   r]   archs      r   get_arch_optionr     s>     ## D   !%0D  r   aN  Missing libdevice file.
Please ensure you have a CUDA Toolkit 11.2 or higher.
For CUDA 12, ``cuda-nvcc`` and ``cuda-nvrtc`` are required:

    $ conda install -c conda-forge cuda-nvcc cuda-nvrtc "cuda-version>=12.0"

For CUDA 11, ``cudatoolkit`` is required:

    $ conda install -c conda-forge cudatoolkit "cuda-version>=11.2,<12.0"
c                   $    \ rS rSrSrS rS rSrg)	LibDevicei  Nc                     U R                   c)  [        5       c  [        [        5      e[	        5       U l         U R                   U l        g rV   )_cache_r   RuntimeErrorMISSING_LIBDEVICE_FILE_MSGr   bcrR   s    r   rL   LibDevice.__init__  s5    <<&"#=>>)+DL,,r   c                     U R                   $ rV   )r   rR   s    r   getLibDevice.get  s    wwr   )r   r   )rp   rq   rr   rs   r   rL   r   rx   r   r   r   r   r     s    Gr   r   z
    %cas_success = cmpxchg volatile {Ti}* %iptr, {Ti} %old, {Ti} %new monotonic monotonic
    %cas = extractvalue {{ {Ti}, i1 }} %cas_success, 0
a  
define internal {T} @___numba_atomic_{T}_{FUNC}({T}* %ptr, {T} %val) alwaysinline {{
entry:
    %iptr = bitcast {T}* %ptr to {Ti}*
    %old2 = load volatile {Ti}, {Ti}* %iptr
    br label %attempt

attempt:
    %old = phi {Ti} [ %old2, %entry ], [ %cas, %attempt ]
    %dold = bitcast {Ti} %old to {T}
    %dnew = {OP} {T} %dold, %val
    %new = bitcast {T} %dnew to {Ti}
    {CAS}
    %repeat = icmp ne {Ti} %cas, %old
    br i1 %repeat, label %attempt, label %done

done:
    %result = bitcast {Ti} %old to {T}
    ret {T} %result
}}
a  
define internal {T} @___numba_atomic_{Tu}_inc({T}* %iptr, {T} %val) alwaysinline {{
entry:
    %old2 = load volatile {T}, {T}* %iptr
    br label %attempt

attempt:
    %old = phi {T} [ %old2, %entry ], [ %cas, %attempt ]
    %bndchk = icmp ult {T} %old, %val
    %inc = add {T} %old, 1
    %new = select i1 %bndchk, {T} %inc, {T} 0
    {CAS}
    %repeat = icmp ne {T} %cas, %old
    br i1 %repeat, label %attempt, label %done

done:
    ret {T} %old
}}
a  
define internal {T} @___numba_atomic_{Tu}_dec({T}* %iptr, {T} %val) alwaysinline {{
entry:
    %old2 = load volatile {T}, {T}* %iptr
    br label %attempt

attempt:
    %old = phi {T} [ %old2, %entry ], [ %cas, %attempt ]
    %dec = add {T} %old, -1
    %bndchk = icmp ult {T} %dec, %val
    %new = select i1 %bndchk, {T} %dec, {T} %val
    {CAS}
    %repeat = icmp ne {T} %cas, %old
    br i1 %repeat, label %attempt, label %done

done:
    ret {T} %old
}}
a  
define internal {T} @___numba_atomic_{T}_{NAN}{FUNC}({T}* %ptr, {T} %val) alwaysinline {{
entry:
    %ptrval = load volatile {T}, {T}* %ptr
    ; Return early when:
    ; - For nanmin / nanmax when val is a NaN
    ; - For min / max when val or ptr is a NaN
    %early_return = fcmp uno {T} %val, %{PTR_OR_VAL}val
    br i1 %early_return, label %done, label %lt_check

lt_check:
    %dold = phi {T} [ %ptrval, %entry ], [ %dcas, %attempt ]
    ; Continue attempts if dold less or greater than val (depending on whether min or max)
    ; or if dold is NaN (for nanmin / nanmax)
    %cmp = fcmp {OP} {T} %dold, %val
    br i1 %cmp, label %attempt, label %done

attempt:
    ; Attempt to swap in the value
    %old = bitcast {T} %dold to {Ti}
    %iptr = bitcast {T}* %ptr to {Ti}*
    %new = bitcast {T} %val to {Ti}
    {CAS}
    %dcas = bitcast {Ti} %cas to {T}
    br label %lt_check

done:
    ret {T} %ptrval
}}
c                 (    [         R                  U S9$ )NTi)cas_nvvmformatr   s    r   ir_casr   #  s    ??b?!!r   c           	      V    [        XX#[        U5      S9n[        R                  " S0 UD6$ )N)Tr   OPFUNCCASr   )dictr   ir_numba_atomic_binary_templater   )r   r   r   r   paramss        r   ir_numba_atomic_binaryr   '  s(    AF2J?F*11;F;;r   c                 Z    [        XX#UU[        U5      S9n[        R                  " S0 UD6$ )N)r   r   NANr   
PTR_OR_VALr   r   r   )r   r   ir_numba_atomic_minmax_templater   )r   r   r   r   r   r   r   s          r   ir_numba_atomic_minmaxr   ,  s1    A#-F +11;F;;r   c                 <    [         R                  X[        U 5      S9$ N)r   Tur   )ir_numba_atomic_inc_templater   r   r   r   s     r   ir_numba_atomic_incr   3      '..vay.IIr   c                 <    [         R                  X[        U 5      S9$ r   )ir_numba_atomic_dec_templater   r   r   s     r   ir_numba_atomic_decr  7  r   r   c                    S[        SSSSS94S[        SS	S
SS94S[        SSS
SS94S[        SSS94S[        SSS94S[        SS	SSSSS94S[        SSSSSSS94S[        SS	SSSSS94S[        SSSSSSS94S[        SS	SSSSS94S[        SSSSSSS94S [        SS	SS!SSS94S"[        SSSS!SSS94S#/nU H  u  p#U R	                  X#5      n M     [        U 5      n U $ )$NzIdeclare double @"___numba_atomic_double_add"(double* %".1", double %".2")doublei64faddadd)r   r   r   r   zEdeclare float @"___numba_atomic_float_sub"(float* %".1", float %".2")floati32fsubsubzIdeclare double @"___numba_atomic_double_sub"(double* %".1", double %".2")z=declare i64 @"___numba_atomic_u64_inc"(i64* %".1", i64 %".2")u64r   z=declare i64 @"___numba_atomic_u64_dec"(i64* %".1", i64 %".2")zEdeclare float @"___numba_atomic_float_max"(float* %".1", float %".2")r   znnan oltptrmax)r   r   r   r   r   r   zIdeclare double @"___numba_atomic_double_max"(double* %".1", double %".2")zEdeclare float @"___numba_atomic_float_min"(float* %".1", float %".2")znnan ogtr   zIdeclare double @"___numba_atomic_double_min"(double* %".1", double %".2")zHdeclare float @"___numba_atomic_float_nanmax"(float* %".1", float %".2")nanultzLdeclare double @"___numba_atomic_double_nanmax"(double* %".1", double %".2")zHdeclare float @"___numba_atomic_float_nanmin"(float* %".1", float %".2")ugtzLdeclare double @"___numba_atomic_double_nanmin"(double* %".1", double %".2"))immargr   )r   r   r  r   r   llvm140_to_70_ir)llvmirreplacementsdeclfns       r   llvm_replacer  ;  s   	T	(ue	L	N	P	'eU	K	M	T	(ue	L	N	H	u	/	1	H	u	/	1	P	'e
+0u
>	? 
U	(u"+0u
>	? 
Q	'e
+0u
>	? 
U	(u"+0u
>	? 
T	'e5+-E
;	< 
X	(u%E+-E
;	< 
T	'e5+-E
;	< 
X	(u%E+-E
;	< 	G$LL !) ! f%FMr   c                 ~   [        U [        5      (       a  U /n UR                  SS5      (       a  UR                  SSSSS.5        [	        5       n[        5       nU  H.  n[        U5      nUR                  UR                  S5      5        M0     UR                  UR                  5       5        UR                  " S0 UD6$ )NfastmathFT)ftzfmaprec_div	prec_sqrtr   r   )r   strpopupdaterz   r   r  r   r   r   r   r   )r  optscu	libdevicemods        r   
compile_irr%  j  s    &#xx
E""	
 	 
	BI3
cjj()  y}}'::r   z"^attributes #\d+ = \{ ([\w\s]+)\ }c                    / nU R                   " 5        H  nUR                  S5      (       am  [        R                  U5      nUR	                  S5      R                  5       nSR                  S U 5       5      nUR                  UR	                  S5      U5      nUR                  U5        M     SR                  U5      $ )z$
Convert LLVM 14.0 IR for LLVM 7.0.
zattributes #r    c              3   4   #    U  H  oS :w  d  M
  Uv   M     g7f)
willreturnNr   ).0as     r   	<genexpr>#llvm140_to_70_ir.<locals>.<genexpr>  s     C1l1BQQs   		r   )	
splitlines
startswithre_attributes_defmatchgroupsplitjoinr   append)r
   buflinemattrss        r   r  r    s     C??>**!''-AGGAJ$$&EHHCCCE<<
E2D

4   99S>r   c                 f   U R                   n[        R                  " US5      n[        R                  " [        R                  " S5      S5      nUR                  XU45      n[        R                  " US5      nUR                  U5        [        R                  " S5      R                  5       n[        R                  " US5      nU R                  U5      n[        R                  " XS5      n	SU	l        SU	l        [        R                  " Xx/5      U	l        U R                   R#                  S	5        g
)aD  
Mark a function as a CUDA kernel. Kernels have the following requirements:

- Metadata that marks them as a kernel.
- Addition to the @llvm.used list, so that they will not be discarded.
- The noinline attribute is not permitted, because this causes NVVM to emit
  a warning, which counts as failing IR verification.

Presently it is assumed that there is one kernel per module, which holds
for Numba-jitted functions. If this changes in future or this function is
to be used externally, this function may need modification to add to the
@llvm.used list rather than creating it.
kernel    r   znvvm.annotationsrO   z	llvm.used	appendingzllvm.metadatanoinlineN)moduler
   MetaDataStringConstantIntTypeadd_metadatar   get_or_insert_named_metadatar  
as_pointer	ArrayTypebitcastGlobalVariablelinkagesectioninitializer
attributesdiscard)
functionr?  mdstrmdvaluemdnmdptrtyusedtyfnptr	llvm_useds
             r   set_cuda_kernelrW    s     __F fh/Ekk"**R.!,G			hw7	8B

.
.v7I
JCGGBK JJqM$$&E\\%#FU#E!!&+>I#I'IKK8I 
+r   c                     [         R                  " S5      n[        5       R                  5        Vs/ s H
  o!" U5      PM     nnU R	                  U5      nU R                  SU5        gs  snf )zAdd NVVM IR version to moduler<  znvvmir.versionN)r
   rB  r   rC   rC  add_named_metadata)r$  r  r   rK   md_vers        r   add_ir_versionr[    s\     **R.C#'6#8#8#:;#:a3q6#:K;k*F+V4 <s   A()Mrt   loggingrerj   r   ctypesr   r   r   r   r   r   r	   	threadingllvmliter
   rl   r   r   r   libsr   r   r   
numba.corer   r   	getLoggerrp   loggerADDRSPACE_GENERICADDRSPACE_GLOBALADDRSPACE_SHAREDADDRSPACE_CONSTANTADDRSPACE_LOCALrv   ru   r3  rh   r   r   r   r8   modulesrP   rQ   r   Lockr-   r/   r   rz   r   r   r   rH   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r%  r   r0  r  rW  r[  r   r   r   <module>rl     s    	 
      ; ; = = & 
		8	$       
EG  '(DAqCKK!1a( )
; 7 
	 ^^
{6 {|kf k\   
<2D!	  # ,  (  (# @"<
<JJ,^. JJDE $$,N5r   