
    i                       U d Z ddlmZ ddlZddlmZmZ ddlm	Z	 ddl
Zddl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZF dd	lGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZO dd
lPmQZQmRZR ddlSmTZTmUZUmVZV ddlWmXZX ddlYmZZZ ddl[m\Z\m]Z]m^Z^ ddl_m`Z` ddlambZb ddlcmdZdmeZemfZfmgZgmhZh ddlimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZs ddltmuZumvZvmwZw ddlxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZmZmZmZ ddlmZ eg df         Zeg eFf         ZddZdd Zdd"Zdd$Zdd%Zdd)Zdd+Zdd1Zdd4Zdd8Zdd:Zdd;Zdd=ZdZd>ed?<   dZd>ed@<   dAZd>edB<    G dC dD          ZddHZddMZddPZddRZddTZddWZddYZdd[Zdd]Zdd_ZddfZddiZddpZddtZddxZdd|Z	 ddd~Z	 dddZ G d dej        j                  ZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZdS )a  Transform mypy statement ASTs to mypyc IR (Intermediate Representation).

The top-level AST transformation logic is implemented in mypyc.irbuild.visitor
and mypyc.irbuild.builder.

A few statements are transformed in mypyc.irbuild.function (yield, for example).
    )annotationsN)CallableSequence)Final)"	ARG_NAMEDARG_POS
AssertStmtAssignmentStmt	AwaitExprBlock	BreakStmtContinueStmtDelStmt
ExpressionExpressionStmtForStmtIfStmtImport	ImportAll
ImportFrom	IndexExprListExprLvalue	MatchStmtNameExprOperatorAssignmentStmt	RaiseStmt
ReturnStmtStarExprStrExprTempNodeTryStmt	TupleExprTypeAliasStmt	WhileStmtWithStmt	YieldExprYieldFromExpr)TEMP_ATTR_NAME)	ERR_NEVERNAMESPACE_MODULENO_TRACEBACK_LINE_NOAssign
BasicBlockBranchCall
InitStaticIntegerLoadAddressLoadErrorValueLoadLiteral
LoadStatic
MethodCallPrimitiveDescriptionRaiseStandardErrorRegisterReturnTupleGetUnborrowUnreachableValue)	RInstanceRTuplec_pyssize_t_rprimitive
exc_rtuple	is_taggednone_rprimitiveobject_pointer_rprimitiveobject_rprimitive)is_borrow_friendly_exprprocess_conditional)	IRBuildercreate_type_paramsint_borrow_friendly_op)for_loop_helper)-add_raise_exception_blocks_to_generator_class)ExceptNonlocalControlFinallyNonlocalControlTryFinallyNonlocalControl)GENERATOR_HELPER_NAME)apply_dunder_specialization)AssignmentTargetAssignmentTargetAttrAssignmentTargetIndexAssignmentTargetRegisterAssignmentTargetTuple)
error_catch_opexc_matches_opget_exc_info_opget_exc_value_opkeep_propagating_opno_err_occurred_oppropagate_if_error_opraise_exception_opreraise_exception_oprestore_exc_info_op)iter_opnext_raw_oppy_delattr_op)
check_stop_opcoro_opget_native_attrs_opimport_from_many_opimport_many_op	import_opsend_op"set_type_alias_compute_function_optype_opyield_from_except_op   )MatchVisitorbuilderrJ   blockr   returnNonec                   |j         sc| j                            d           |j        D ]&}|                     |           | j        d         s n'| j                                         d S |j        rV|                     t          t          j        d|j	                             |                     t                                 d S d S )NTz#Reached allegedly unreachable code!)is_unreachableblock_reachable_stackappendbodyacceptpopaddr9   RUNTIME_ERRORliner>   )rr   rs   stmts      V/root/projects/qq-shell/venv/lib64/python3.11/site-packages/mypyc/irbuild/statement.pytransform_blockr      s     #%,,T222J 	 	DNN4   04  	%))+++++ 
 #"02WY^Yc 	
 	
 	

 	KMM"""""# #    r   r   c                    t          |j        t                    rd S |j                            | j                   |                     |j                   d S N)
isinstanceexprr    r|   visitorflush_keep_alivesr   )rr   r   s     r   transform_expression_stmtr      sQ    $)W%%  	IW_%%%di(((((r   r   c                   |j         r|                     |j                   }n| j                                        }|                     || j        d         |j                  }| j        d                             | ||j                   d S Nrw   )	r   r|   rr   nonecoerce	ret_typesr   nonlocal_control
gen_return)rr   r   retvals      r   transform_return_stmtr      s{    y (	**%%''^^FG$5b$949EEFR ++GVTYGGGGGr   r
   c                ~   | j         }|j        j        }|j        dk    st	          |          dk    rd S |                                 }||j        s|j        sd S |d         }d	fd |j                  }|D ]A}t          |t                    r*|j        |k    r|                     d| d|j                   Bd S )
N__new__r   lvalueslist[Expression]rt   c                    g }| D ]G}t          |t          t          f          r| |j                  z  }2|                    |           H|S r   )r   r#   r   itemsrz   )r   flatlvalueflattens      r   r   z1check_unsupported_cls_assignment.<locals>.flatten   s`     	$ 	$F&9h"788 $---F####r   zAssignment to argument "z!" in "__new__" method unsupported)r   r   rt   r   )fn_infofitem	arg_namesnamelenget_current_class_irinherits_pythonis_ext_classr   r   r   errorr   )	rr   r   fnmethod_argsircls_argr   r   r   s	           @r    check_unsupported_cls_assignmentr      s    	B($K	w)s;//144		%	%	'	'B	zR'zrz!nG      gdl##G  fh'' 	FK7,B,B MMU7UUUW[W`  	 r   c                    |j         }|sJ                      ||j                   t           |           |d         }|j        r7t          |j        t                    r                     ||j                   d S t          |t          t          f          rVt          |j        t          t          f          r4t          |j                  t          |j        j                  k    rt          d |j        D                       rt          |          dk    rg }|j        j        D ]\}                     |          t          j                  }                     ||j                   |                    |           ]t%          |j        |          D ]6\  }}                     |          }                     |||j                   7                     |j                   d S |j        j        }	                     |j                                                   r|j        r                     |           t          |t          t          f          rlt          j        t.                    rQt          j        j                  t          |j                  k    r!t          |          dk    rt          d |j        D                       rt3          d j        j        D                       rt          |j                  }
 fdt5          |
          D             } j                            g|	d           t%          |j        |          D ]Q\  }}                     t=          |                    }                                          |          ||	           R                     |	           d S |D ]}t          |t>                    rAtA           |j!        |j"        |j        gd	|          }|                     |j                   X                     |          }                     ||	                                |	           d S )
Nr   c              3  4   K   | ]}t          |          V  d S r   is_simple_lvalue.0items     r   	<genexpr>z,transform_assignment_stmt.<locals>.<genexpr>   +      FF4 &&FFFFFFr   rp   c              3  4   K   | ]}t          |          V  d S r   r   r   s     r   r   z,transform_assignment_stmt.<locals>.<genexpr>   r   r   c              3  $   K   | ]}|j         V  d S r   )is_refcountedr   ts     r   r   z,transform_assignment_stmt.<locals>.<genexpr>   s$      ??A??????r   c           	     Z    g | ]'}                     t          |d                     (S )T)borrowr~   r<   )r   irr   
rvalue_regs     r   
<listcomp>z-transform_assignment_stmt.<locals>.<listcomp>  s4    WWW7;;x
AdCCCDDWWWr   T)steal__setitem__)#r   disallow_class_assignmentsr   r   typer   rvaluer!   get_assignment_targetr#   r   r   r   allr|   r:   assignrz   zipr   non_function_scopeis_final_definit_final_staticrA   typesanyrangerr   
keep_aliver~   r=   r   rS   baseindex)rr   r   r   first_lvaluetempsrighttempleftassignment_targetr   nborrowslvalue_itemrvalue_itemr   specializedtargetr   s   `                @r   transform_assignment_stmtr      sY   lGNNN&&w	:::$Wd3331:Ly ZX66  	%%lDI>>> 	<)X!677t{Y$9:: "##s4;+<'='===FF<3EFFFFF >LLA[& 	 	E ..JJO,,DNN4TY777LLl0%88 	? 	?JD$ ' = =d C CNN,dDI>>>>!!$),,,;D,,J!!## <(9 <!!,
;;; 	<)X!677z// 
%&&#l.@*A*AAALLAFF<3EFFFFF ??)>?????  "##WWWWWeTUhhWWW""J<T"BBB(+L,>(H(H 	Z 	Z$K!++h{&;&;<<KNN788EE{TXYYYY!!$''' ( (fi(( 	5v|T[&A=RX K &))&+666..v66vz4000!!$''''( (r   r   r   boolc                H    t          | t          t          t          f           S r   )r   r   r   r#   )r   s    r   r   r     s    $8Y ?@@@@r   r   c                   |                      |j        g|j                   t          |                     |j                            r`t          |                     |j                            r9|j        t          v r+t          | |j                  ot          | |j                  }nd}| 	                    |j                  }| 
                    ||j        |          }|                     |j        |          }|j        dz   }|                     ||||j                  }|                     |||j                   |                     |j                   dS )z,Operator assignment statement such as x += 1F)
can_borrow=N)r   r   r   rD   	node_typer   oprL   rH   r   readr|   	binary_opr   r   )rr   r   r   r   target_valuerregr   ress           r   "transform_operator_assignment_stmtr     sD   &&}di@@@'##DK0011	g''4455	 G---,WdkBB 
G^T[H
 H


 
**4;77F<<	j<IIL>>$+*>==D	3B


L$DI
>
>C NN63)))ch'''''r   	module_idstras_name
str | Nonetuple[str, str]c                R    |r| }|}n|                      d          d         x}}||fS )a  Compute names for updating the globals dict with the appropriate module.

    * For 'import foo.bar as baz' we add 'foo.bar' with the name 'baz'
    * For 'import foo.bar' we add 'foo' with the name 'foo'

    Typically we then ignore these entries and access things directly
    via the module static, but we will use the globals version for
    modules that mypy couldn't find, since it doesn't analyze module
    references from those properly..r   )split)r   r   
globals_idglobals_names       r   import_globals_id_and_namer   6  s>      <
$-OOC$8$8$;;
\|##r   noder   c                   j         rd S j        s%fdj        D             }t          | |           d S | j        vrd S | j                 }t          | |          }|D ](\  }}|rt          | |           t          | |           )d S )Nc                *    g | ]\  }}||j         fS  r   )r   mod_idas_idr   s      r   r   z$transform_import.<locals>.<listcomp>c  s&    JJJ&%+JJJr   )is_mypy_onlyis_top_levelids"transform_imports_without_groupingmodule_import_groups'split_import_group_to_python_and_native!transform_non_native_import_group)rr   r   groupgroup_nodes	subgroupssubgroup	is_natives    `     r   transform_importr
  I  s     *   KJJJJJJ*7E:::7///.t4K7MMI( A A) 	A.wAAAA-gx@@@@	A Ar   r  list[Import]4list[tuple[list[tuple[str, str | None, int]], bool]]c           
     (   g }|D ]U}|j         D ]K\  }}|                    |||j        |                     |          o|                     |          f           LVg }d}|t          |          k     r|}||         d         }	|dz  }|t          |          k     r<||         d         |	k    r*|dz  }|t          |          k     r||         d         |	k    *|                    d |||         D             |	f           |t          |          k     |S )zPSplit imports into consecutive runs of native same-group and non-native imports.r      rp   c                "    g | ]}|d d         S )Nr  r   r   s     r   r   z;split_import_group_to_python_and_native.<locals>.<listcomp>  s     777!"1"777r   )r   rz   r   is_native_moduleis_same_group_moduler   )
rr   r  	flat_listimpr   r   resultr   i0r	  s
             r   r  r  s  sU    I 	 	"w 	 	OFGH,,V44]9U9UV\9]9]	   	 F	A
c)nn

aLO		Q#i..  Yq\!_	%A%AFA #i..  Yq\!_	%A%A77yA777CDDD c)nn

 Mr   !list[tuple[str, str | None, int]]c           
        |                                  }|D ]r\  }}}|                     ||           t          ||          \  }}|                     |d|                     |          |                     ||          gd |           sd S )Nr   result_typer   )load_globals_dict
gen_importr   gen_method_callload_str
get_module)rr   r  globalsr   r   r   r   r   s           r   r  r    s     ''))G!& 	
 	
64(((#=fg#N#N 
Ll++W-?-?
D-Q-QR 	  	
 	
 	
 	
	
 	
r   c           
     x   g }g }g }|r|d         d         nt           }|D ]\  }}}d| j        |<   |                    |gt          ||          R            t	          t
          |t                    }	|                    |                     t          t          |	                               |                    t          |t                               | j                            t          ||          }
| j                            t          ||          }|                     t          |                     t!          t#          |          t
                              |
|                                 |                     | j                  |                     | j        j                  |gt                      dS )zFTransform a group of import statements that target non-native modules.r      N	namespace)r,   importsrz   r   r6   rG   r+   r~   r3   rF   r2   rB   rr   setup_rarraycall_crj   r5   tupler  r  module_pathr   r   )rr   r  modulesstatic_ptrs	mod_lines
first_liner   r   r   
mod_staticstatic_array_ptrimport_line_ptrs               r   r  r    s    GK I %?q!+?J!& @ @"&M!;FG!L!LMMNNN 16EUVVV
7;;{3Lj'Y'YZZ[[['=>>????33!;
  o223I9V`aaONNKKE'NN4EFFGG%%''W011W_122	
 	    r   r   c                   |j         rd S | j        | j                 }| j                            d          r| j        }n|j        |j        r|j        d         }nd}t          j                            d|j	        z  |j
        z   |          }d | j        |<   d |j        D             }d |j        D             }|                     |          o|                     |          }t          | ||||j        |           d S )Nz__init__.pyr    r   c                    g | ]\  }}|S r   r   )r   r   _s      r   r   z)transform_import_from.<locals>.<listcomp>  s    ,,,gdAT,,,r   c                    g | ]	\  }}|p|
S r   r   )r   r   r   s      r   r   z)transform_import_from.<locals>.<listcomp>  s     @@@MD'4@@@r   )r   graphmodule_namer(  endswith	ancestors	importlibutilresolve_namerelativeidr$  namesr  r  transform_import_from_bucketsr   )rr   r   module_statemodule_packager=  r>  as_namesparent_is_natives           r   transform_import_fromrD    s    =!45L##M22  ,			+0F	+%/2		$	$S4=%847%BN	S	SBGOB,,,,,E@@TZ@@@H//33X8T8TUW8X8X!'2uh	K[\\\\\r   r   IMPORT_NATIVE_SUBMODULEIMPORT_NATIVE_ATTRr!  IMPORT_NON_NATIVEc                      e Zd Zd
dZd	S )ImportFromBucketkindintr>  	list[str]rB  rt   ru   c                0    || _         || _        || _        d S r   )rJ  r>  rB  )selfrJ  r>  rB  s       r   __init__zImportFromBucket.__init__  s    	
 r   N)rJ  rK  r>  rL  rB  rL  rt   ru   )__name__
__module____qualname__rO  r   r   r   rI  rI    s(        ! ! ! ! ! !r   rI  r   list[tuple[int, str, str]]list[ImportFromBucket]c           
        g }d}|t          |           k     r| |         d         }|}|dz  }|t          |           k     r<| |         d         |k    r*|dz  }|t          |           k     r| |         d         |k    *|                    t          |d | ||         D             d | ||         D                                  |t          |           k     |S )z}Group consecutive items by kind (first element) into ImportFromBuckets.

    Each item is a (kind, name, as_name) tuple.
    r   rp   c                    g | ]
}|d          S )rp   r   r   s     r   r   z%group_consecutive.<locals>.<listcomp>  s    #>#>#>QAaD#>#>#>r   c                    g | ]
}|d          S )r!  r   r   s     r   r   z%group_consecutive.<locals>.<listcomp>  s    @[@[@[!1@[@[@[r   )r   rz   rI  )r   r  r   rJ  r  s        r   group_consecutiverX    s    
 &(F	A
c%jj..Qx{	Q#e**nnq!!4!4FA #e**nnq!!4!4T#>#>%1+#>#>#>@[@[uUWXYUY{@[@[@[\\	
 	
 	
 c%jj.. Mr   r>  rL  rB  rC  c                &   g }t          ||          D ]p\  }}| d| }|                     |          r|                     |          rt          }	n|r|| j        vrt
          }	nt          }	|                    |	||f           qt          |          S )zOClassify each imported name and group consecutive same-kind names into buckets.r   )	r   r  r  rE  r5  rF  rG  rz   rX  )
rr   r   r>  rB  rC  r  r   r   submodule_idrJ  s
             r   classify_import_fromr[    s     IUH-- 0 0g#,,d,,##L11 	%g6R6RS_6`6` 	%*DD 	%,gm"C"C%DD$D$g.////Y'''r   r   rK  c           	        t          | |||          }d}|D ]}|j        t          k    r8fdt          |j        |j                  D             }	t          | |	           K|j        t          k    r|                                | 	                    t          t          |j                  t                              }
|j        |j        k    r|
}n:| 	                    t          t          |j                  t                              }|                     t          |                               |
||                                 g           ?|j        t"          k    sJ | 	                    t          t          |j                  t                              }
|j        |j        k    r|
}n:| 	                    t          t          |j                  t                              }|                     t$          |                               |
||                                 g          }|,| 	                    t'          |t(                               dS dS )zVHandle 'from module_id import names' by dispatching each bucket to the right strategy.Nc                *    g | ]\  }} d | |fS )r   r   )r   r   r   r   r   s      r   r   z1transform_import_from_buckets.<locals>.<listcomp>  sB     8 8 8!D' &&&&68 8 8r   r"  )r[  rJ  rE  r   r>  rB  r  rF  r  r~   r5   r'  rG   r&  rh   r  r  rG  ri   r1   r+   )rr   r   r>  rB  r   rC  bucketsmodulebucketr  names_literalas_names_literals    `  `       r   r?  r?    sp    #7IuhHXYYGF / /;1118 8 8 8 8%(v%G%G8 8 8E /w>>>>[...y$///#KKE&,4G4GIZ([([\\M&,..#0  #*;;fo 6 68IJJ$ $  NN#$$Y//!$--//	 	 	 	 	 ;"33333 $KKE&,4G4GIZ([([\\M&,..#0  #*;;fo 6 68IJJ$ $  ^^#$$Y//!$--//	 	 	FF Jvy<LMMMNNNNN r   r   c                X    |j         rd S |                     |j        |j                   d S r   )r   r  r=  r   rr   r   s     r   transform_import_allre  L  s2     tw	*****r   r   c                .   t                      t                      }}|j        rt                      n|}t          |j                  dk    sJ t	          | |j        d         ||           |                     |           |                     |j        d                    |                     |           |j        rD|                     |           |                     |j                   |                     |           |                     |           d S )Nrp   r   )	r.   	else_bodyr   r   rI   activate_blockr|   r{   goto)rr   r   if_bodynextrg  s        r   transform_if_stmtrl  R  s    LL*,,TG $8
DI ty>>Q1w	BBB7###NN49Q<   LL~ y)))t~&&&T4     r   sr%   c                   t                      t                      t                      t                      f\  }}}}|j        |n|}|                     ||           |                     |           t	          | |j        ||           |                     |           |                     |j                   | 	                    |           | 
                                 |j        D|                     |           |                     |j                   | 	                    |           |                     |           d S r   )r.   rg  push_loop_stackgoto_and_activaterI   r   rh  r|   r{   ri  pop_loop_stack)rr   rm  r{   rk  top
else_blocknormal_loop_exits          r   transform_while_stmtru  d  s%   ",,,
jllJLL"XD$Z%&[%<zz$C&&& c"""/?@@@4   NN16LL{z***q{###T4     r   r   c           	          d fd}d fd}t           j        j        |j        r|nd j        j                   d S )Nrt   ru   c                 <                          j                   d S r   r|   r{   rr   rm  s   r   r{   z transform_for_stmt.<locals>.body~      qvr   c                 N    j         J                      j                    d S r   )rg  r|   ry  s   r   rs  z&transform_for_stmt.<locals>.else_block  s+    {&&&q{#####r   rt   ru   )rM   r   r   rg  is_asyncr   )rr   rm  r{   rs  s   ``  r   transform_for_stmtr~  }  s          $ $ $ $ $ $ $ !&$ak(K

tQZYZY_    r   r   c                R    | j         d                             | |j                   d S r   )r   	gen_breakr   rd  s     r   transform_break_stmtr    s(    R **7DI>>>>>r   r   c                R    | j         d                             | |j                   d S r   )r   gen_continuer   rd  s     r   transform_continue_stmtr    s(    R --gtyAAAAAr   r   c                V   |j         D|                     t          g t                     |                     t                                 d S |                     |j                   }|                     t          |g|j                   |                     t                                 d S r   )	r   r&  ra   r,   r~   r>   r|   r`   r   )rr   rm  excs      r   transform_raise_stmtr    s    v~+R1EFFFKMM"""
..
 
 CNN%uaf555KKr   r{   GenFunchandlersLSequence[tuple[tuple[ValueGenFunc, int] | None, Expression | None, GenFunc]]rg  GenFunc | Nonec           
     F   |s
J d            t                      t                      t                      }}}t                      }|rt                      n|}	| j                            |           |                     t                                  |             |                     |	           | j                                         | j                            |           |                     |           |                     |                     t          g |                    }
| j
                            t          | j
        d         |
                     |D ]\  }}}d}|r|\  }}t                      t                      }}|                     t           |            g|          }|                     t          |||t          j        |                     |                     |           |rP|                     |          }|                     ||                     t&          g |j                  |j                    |             |                     |           |r|                     |            |rB|                     t*          g t,                     |                     t/                                 | j
                                         | j                                         |                     |           |                     t2          |                     |
|          g|           |                     |           |                     |           |                     t2          |                     |
|          g|           |                     t6          g t,                     |                     t/                                 |r4|                     |	            |             |                     |           |                     |           dS )zGeneralized try/except/else handling that takes functions to gen the bodies.

    The point of this is to also be able to support with.ztry needs exceptrw   N)r.   rr   push_error_handlerrp  ri  pop_error_handlerrh  maybe_spillr&  rY   r   rz   rO   rZ   r~   r/   BOOLr   r   r\   r   ra   r,   r>   r}   rb   r   r]   )rr   r{   r  rg  r   except_entry
exit_blockcleanup_blockdouble_except_blockrs  old_excr   varhandler_body
next_blocktype_f	type_line
body_blockmatchesr   s                       r   transform_try_exceptr    s    ''''''.8llJLL*,,m*L$,,!*:
J O&&|444jll+++DFFFLLO%%''' O&&':;;;<(((!!'..T"J"JKKG##$9':RSU:VX_$`$`aaa $, / /c<
 	/ $FI%/\\:<<
Jnn^ffhhZKKGKKw
JYWWXXX"":... 	]22377FNN67>>2BB#Q#QSVS[\\\]### 	/"":...  #+R1EFFFKMM"""  """O%%'''
 =)))NN&gt)D)D(EtLLLLL
 .///NN&gt)D)D(EtLLLNN&,@AAAKK  !z***	Z   :&&&&&r   r   r"   c                     d fd}d fdd fdfdt          j        j        j                  D             }j        r fdnd }t           |||j                   d S )Nrt   ru   c                 <                          j                   d S r   rx  rr   r   s   r   r{   z'transform_try_except_stmt.<locals>.body  rz  r   r{   r   r  c                      fdS )Nc                 .                                    S r   r|   r{   rr   s   r   <lambda>zAtransform_try_except_stmt.<locals>.make_handler.<locals>.<lambda>  s    w~~d++ r   r   r  s   `r   make_handlerz/transform_try_except_stmt.<locals>.make_handler  s    ++++++r   r   r   tuple[ValueGenFunc, int]c                       fd j         fS )Nc                 .                                    S r   r  )rr   r   s   r   r  z?transform_try_except_stmt.<locals>.make_entry.<locals>.<lambda>  s    t,, r   r   )r   rr   s   `r   
make_entryz-transform_try_except_stmt.<locals>.make_entry  s    ,,,,,di88r   c                N    g | ]!\  }}}|r |          nd | |          f"S r   r   )r   r   r  r{   r  r  s       r   r   z-transform_try_except_stmt.<locals>.<listcomp>  sT       D#t "	+D			tS,,t2D2DE  r   c                 .                                    S r   r  )
_else_bodyrr   s   r   r  z+transform_try_except_stmt.<locals>.<lambda>  s    
33 r   r|  )r{   r   rt   r  )r   r   rt   r  )r   r   varsr  rg  r  r   )rr   r   r{   r  rg  r  r  r  s   ``   @@@r   transform_try_except_stmtr    s          , , , , , ,9 9 9 9 9 9    "17AFAJ??  H
 J8BL333333I$)QVDDDDDr   err_handlerr.   return_entry
main_entrytry_body"Register | AssignmentTarget | Nonec                z   t          |          }| j                            |           | j                            |           |                     t                                  |             |                     |           | j                                         | j        	                                 |j
        S r   )rQ   rr   r  r   rz   rp  r.   ri  r}   r  ret_reg)rr   r  r  r  r  controls         r   try_finally_tryr    s     (55GO&&{333##G,,,jll+++HJJJLL  """O%%'''?r   finally_blockr  r?   c                t   | j         j        j        }t          t          |          }|                     |           |rC|                     ||                     t          | j	        d         |                    |           | 
                    |           |                     |           |                     t          ||                     t          t          |                    |                     | 
                    |           |                     |           |rC|                     ||                     t          | j	        d         |                    |           |                     t          ||                     t          g |          |                     | 
                    |           |S )Nr   rw   )r   r   r   r:   rC   rh  r   r~   r4   r   ri  r-   r&  rY   )rr   r  r  r  r  r  r   r  s           r   try_finally_entry_blocksr    s~    ? %Dz---G :&&& `wN7;LR;PRV,W,W X XZ^___LL<(((KKwN:t,L,L M MtTTUUULL ;''' `wN7;LR;PRV,W,W X XZ^___KKw~r4 H H$OOPPPLLNr   finally_bodyr  )tuple[BasicBlock, FinallyNonlocalControl]c                4   t                      }| j                            |           t          | j        d         |          }| j                            |           |                     |            |             | j                                         ||fS r   )r.   rr   r  rP   r   rz   rh  r}   )rr   r  r  r  r  finally_controls         r   try_finally_bodyr  ;  s     LLMO&&}555,W-Eb-I7SSO##O444=)))LNNN  """/))r   r  r  rP   c           	        | j         j        j        }t                      t                      }}|                     t          |||t
          j        |                     |                     |           |                     t          g t                     |                     t          |                     | j                                         |r|                     |           t                      t                      }}t          |t                    rA|j                            t$                    r"|                     |j        |j        |          }	n|                     ||          }	|                     t          |	||t
          j        |                     |                     |           | j        d                             | |	|           |                     |           t                      }
|                     |
           |                     |           |                    | |           |                     t4          g t                     |                     t                                 |
S )zResolve the control flow out of a finally block.

    This means returning if there was a return, propagating
    exceptions, break/continue (soon), or just continuing on.
    rw   )r   r   r   r.   r~   r/   IS_ERRORrh  r&  ra   r,   r>   rr   r  r   rU   attr
startswithr)   read_nullable_attrobjr   r   r   ri  gen_cleanupr]   )rr   r  r  r  r  r   reraiserestreturn_blockret_val	out_blocks              r   try_finally_resolve_controlr  J  s    ? %DLL*,,TGKKwgvEEFFF 7###NN'-ABBBKKD!!"""O%%'''  Ht$$$'\\:<<dg344 	29P9PQ_9`9` 	200glDQQGGll7D11GF7D,NNOOO|,,, $//$GGG 4   ILL =)))...NN&,@AAAKKr   rw   c                D   t                      t                      t                      t                      f\  }}}}t          | ||||          }t          | |||||          }	t          | |||	          \  }
}t	          | |
||	|          }|                     |           dS )zGeneralized try/finally handling that takes functions to gen the bodies.

    The point of this is to also be able to support with.N)r.   r  r  r  r  rh  )rr   r  r  r   r  r  r  r  r  r  r  r  r  s                r   transform_try_finally_stmtr  |  s     		<8K\= g{L*hWWG 'lJw G
 &6g& &"M?
 ,' I 9%%%%%r   c           	        t                      t                      t                      t                      f\  }}}}t          |          }| j                            |           | j                            |           |                     t                                  |             |                     |           | j                                         | j        	                                 |j
        }	|                     |           |                     |           |                     |           |                     |           |                     |           |                     t          g |           |                     |           |                     |            |             |                     t          g |          }
t                      }t                      }|                     t!          |
||t           j                             |                     |           |                     t$          g t&                     |                     t)                                 |                     |           |	rt                      t                      }}|                     t!          |                     |	|d          ||t           j                             |                     |           | j        d                             | |                     |	|          |           |                     |           |                     t0          g |          }|                     t3          |d|                    }|                                 }|                     ||d|          }t                      t                      }}|                     t!          |||t           j                             |                     |           |                     t8          g t&                     |                     t)                                 |                     |           dS )zAsync-aware try/finally handling for when finally contains await.

    This version uses a modified approach that preserves exceptions across await.T)allow_error_valuerw   r   zis notN)r.   rQ   rr   r  r   rz   rp  ri  r}   r  r  rh  r&  rY   r^   r~   r/   r  r]   r,   r>   r   r  r   r[   r<   none_objectr   ra   )rr   r  r  r   r  r  r  finally_entryr  r  no_current_excfinally_raisedcheck_originalr  check_old_excexc_infoexc_typenone_objhas_excreraise_blockr  s                        r    transform_try_finally_stmt_asyncr    s    		<8K\= (55GO&&{333##G,,,jll+++HJJJLL  """O%%'''oG :&&&LL <(((LL ;'''NN>2t,,, LL =))) LNNN ^^$6DAAN\\N\\NKK~~~v{SSTTT >***NN&,@AAAKK >***  .&0llJLLmWddCC	 	
 	
 	
 	|,,, $//gt9T9TVZ[[[}--- ~~or488H{{8Ha6677H ""$$H(HdCCG *jll:MKKwz6;GGHHH =)))NN'-ABBBKK :&&&&&r   c                  ,     e Zd Zd fdZd fdZ xZS )	AwaitDetectorrt   ru   c                V    t                                                       d| _        d S )NF)superrO  	has_await)rN  	__class__s    r   rO  zAwaitDetector.__init__  s$    r   omypy.nodes.AwaitExprc                X    d| _         t                                          |           d S )NT)r  r  visit_await_expr)rN  r  r  s     r   r  zAwaitDetector.visit_await_expr  s(      #####r   r|  )r  r  rt   ru   )rP  rQ  rR  rO  r  __classcell__)r  s   @r   r  r    s[             $ $ $ $ $ $ $ $ $ $r   r  c                    j         r                     dj                   d}j        r= j        j        r1t                      }j                            |           |j        rd}j        rJd	 fd}j        |rt           | fdj                   d S t           | fdj                   d S t                      d S )
Nz3Exception groups and except* cannot be compiled yetFTrt   ru   c                 n    j         rt                      d S                      j                   d S r   )r  r  r|   r{   r  s   r   transform_try_bodyz.transform_try_stmt.<locals>.transform_try_body-  s=    z ')'155555qv&&&&&r   c                 .                                    S r   r  r  s   r   r  z$transform_try_stmt.<locals>.<lambda>7      W^^D5I5I r   c                 .                                    S r   r  r  s   r   r  z$transform_try_stmt.<locals>.<lambda>;  r  r   r|  )is_starr   r   r  r   is_coroutiner  r|   r  r  r  r  )rr   r   use_async_versiondetectorr  r{   s   ``   @r   transform_try_stmtr    s9    	y UKQVTTT ~ %'/6 % ??	h''' 	% $~ .	' 	' 	' 	' 	' 	' 	' ~ 	,+-I-I-I-I-I16     '+-I-I-I-I-I16     	"'1-----r   list[Value]c                      j         j        j                             t          g            fdt          d          D             S )Nc           	     X    g | ]&}                     t          |                    'S r   r   )r   r   rr   r  r   s     r   r   z$get_sys_exc_info.<locals>.<listcomp>D  s1    GGGGKK1d3344GGGr   r  )r   r   r   r&  r[   r   )rr   r  r   s   `@@r   get_sys_exc_infor  A  sM    ? %D~~or488HGGGGGGeAhhGGGGr   r   Lvalue | Noner}  c           	        	
 rdnd                      |          t          j        t                    r-                     t          d dg                     d n|                     t          g          }                      	                    |d d                     
                     	                    |d d          g                                                                                                         	rt                     d fdd fdd 	fd
d 	fd}t            
fd|           d S )Nar1  __enter__)argsr   exit__r  r   rt   r?   c                   | rt                    }n                                }|||g}rat          j        t                    sJ j                                                            
	          d d|	t                    }nGJ                                         	                              
	          g|z   	          }rt          |	          S |S )Nr  r  )
arg_valuesr   r  )
r  r  r   r   r@   r  r   rE   py_call
emit_await)r  r  r   exit_valalrr   exit_r}  r	  r   mgrmgr_vs       r   maybe_natively_call_exitz0transform_with.<locals>.maybe_natively_call_exite  s    	&#G,,DD&&((D$%D 	ej)44@@ej@@@..S$''R+ /  HH $$$UD))GLLd,C,C+Dt+KT H  	gx666Or   ru   c                 t    r*                                                                             d S r   )r   r   )r{   rr   r   r   values   r   r  z transform_with.<locals>.try_body  s?     	ONN788@@%NNNr   c                                                                                    t                      t                      }}                      d          | |                               |                               t          g t                                         t                                                     |            d S )NTr  )
r   falser.   add_bool_branchrh  r&  ra   r,   r~   r>   )r  r  rr   r  r   r  s     r   except_bodyz#transform_with.<locals>.except_body  s    sGMMOOT222#-<<=	 8 8$ G G GTabbb}---+R1EFFFKMM"""y)))))r   c                 2   t                      t                      }}                     t                                        || t          j                                                 |            d                               |            d S )NFr  )r.   r~   r/   r   r  rh  rp  )r  r  rr   r  r   r  s     r   r  z$transform_with.<locals>.finally_body  s     *jll:	F7<<T22J	6;WWXXXz***  %0000!!),,,,,r   c                 2    t           d d fgd           S r   )r  )rr   r  r   r  s   r   r  z transform_with.<locals>.<lambda>  s$    $Wh$k9R8SUY[_`` r   )r  r   rt   r?   r|  )r|   r   r   r@   r~   r7   primitive_oprn   r  py_get_attrr  maybe_spill_assignabletruer  r  )rr   r   r   r{   r}  r   typr  r  r  r  r  r	  r  r  r  r  r
  s   ` ````  @@@@@@@@@@r   transform_withr  G  sO    	 bBNN4  E5:y11I aJu.>2.>.>.>RdSSSTT""7UGT::##G$7$7_"___d$S$STT 3 3C9Ib9I9I9I4 P PSXRY[_``


e
$
$C

(
(
8
8C 17E400            6         
* * * * * * * * *- - - - - - - - - ```````	    r   r  r&   c                2     d fd d           d S )Nr   rK  rt   ru   c                      t          j                  k    r                    j                   d S t	          j                  j                   fdj        j                   d S )Nc                        dz             S )Nrp   r   )generater   s   r   r  z7transform_with_stmt.<locals>.generate.<locals>.<lambda>  s    !a% r   )r   r   r|   r{   r  r   r}  r   )r   rr   r  r  s   `r   r  z%transform_with_stmt.<locals>.generate  sy    AFNN16"""""AHQK1H1H1H1H1H!*VWV\    r   r   )r   rK  rt   ru   r   )rr   r  r  s   ``@r   transform_with_stmtr    s@            HQKKKKKr   r  r	   c                `   | j         j        rd S |                     |j                  }t	                      t	                      }}|                     |||           |                     |           |j        4|                     t          t          j
        d |j                             nt          |j        t                    r>|                     t          t          j
        |j        j        |j                             nt|                     |j                  }|                     d|j                  }|                     ||g|j                  }|                     t$          |g|j                   |                     t'                                 |                     |           d S )Nzbuiltins.AssertionError)optionsstrip_assertsr|   r   r.   r  rh  msgr~   r9   ASSERTION_ERRORr   r   r    r
  load_module_attr_by_fullnamer  r&  r`   r>   )rr   r  condok_blockerror_blockmessager  r  s           r   transform_assert_stmtr'    sj   $ >>!&!!D&LL*,,kHD(K888;'''u}&'9'I4QRQWXXYYYY	AE7	#	# :&'9'I15;XYX^__```` ..''778QSTSYZZooh	16::)C5!&999KK8$$$$$r   r   c                b    t          | |                     |j                  |j                   d S r   )transform_del_itemr   r   r   rr   r  s     r   transform_del_stmtr+    s,    w = =af E EqvNNNNNr   rT   c                @   t          |t                    r'|                     |j        d|j        gd |           d S t          |t
                    rt          |j        t                    r[|j        j        }|	                    |j
                  s5|                     d|j
         d|           |                     d|           |                     |j
                  }|                     t          |j        |g|           d S t          |t"                    rQ|                     t'          |j        |                     t+          |j        d                                         d S t          |t.                    r|j        D ]}t3          | ||           d S d S )N__delitem__r  "z" cannot be deletedzMUsing "__deletable__ = ['<attr>']" in the class body enables "del obj.<attr>"T	undefines)r   rV   r  r   r   rU   obj_typer@   class_iris_deletabler  r   noter  r  re   r  rW   r~   r-   registerr4   r   rX   r   r)  )rr   r   r   clkey	subtargets         r   r)  r)    s   &/00 9KDt 	  	
 	
 	
 	
 	
 
F0	1	1 9foy11 	)B??6;// B&+BBBDIIIQ  
 v{++]VZ,=tDDDDD	F4	5	5 9 	6?GKKv{VZ0[0[0[$\$\]]	
 	
 	
 	
 	
 
F1	2	2 9 	9 	9Iw	488889 9	9 	9r   valc                   |                      || j        d         |          }| j        j        }t	                      }t          |j                  }|j                            |           |                     |j	        t          |          |           |                     t          ||                     |                     |           t          | |           |j        J |j        S )Nrw   )yield_target)r   r   r   generator_classr.   r   continuation_blocksrz   r   next_label_targetr2   r~   r;   rh  rN   send_arg_reg)rr   r9  r   r   clsr  
next_labels          r   
emit_yieldrB    s    ^^C!22!6==F
/
)C JS,--J"":...NN3('**=*=tDDDKKvJ777888:&&&1'4@@@'''r   is_awaitc          	         t          t                    t          t                    t          t                    t          }t          |t          t
          f          r<t          |j        t                    r"|j        j        	                    |          r|}nV|rt          nt          }t          |t                    r                     ||g          }n                     ||g          }                     |          t!                      t!                      t!                      }	}}t          j        t                    r j        j        	                    |          rd}
                               }                                 }t          t                    }                     t)          t          d                    }                     ||                                t-          t.          |                    }t          |||||||g          }t0          |_                             |          }n3d}
                     t4                                         g          }                     t7          |||t6          j                                                  |           |
r5                     t<          |g                                |           n1                                          t>          g                                           t)          j                            }                     |                                 |	                                |                                |           t!                      } !                    |           d
 fd}d
 fd}d
 fd	} "                    ||	           tG           |d d |fg|            $                                  !                    |	                                          S )Nr   Tr/  Frt   ru   c            
     |                          t                                                               d S r   )r   rB  r   )rr   r   received_regto_yield_regs   r   r  z*emit_yield_from_or_await.<locals>.try_bodyH  sF    *Wgll<.N.NPTUUW[	
 	
 	
 	
 	
r   c                    t          t                    }                     t          t          |                     }                    t                                        |g          }t                      t                      }}                    t          |||t          j
                                                 |                               	|            j        d                                                            |                               |            j        d                                        d S r   )r:   rG   r~   r3   rF   r&  ro   r   r.   r/   r  rh  r   r   r  r  )
r9  val_addressto_stopokstoprr   iter_regr   r  rG  s
        r   r  z-emit_yield_from_or_await.<locals>.except_bodyM  s+    ())kk+.G"M"MNN.. 7<<$#?#?"Mt
 
 <<DF7D"fk::;;; 	r"""|S$/// $11'4@@@ 	t$$$vsD))) $..w=====r   c                                         t                                                                      g          } t                      t                      }}                    t          | ||t
          j                                                 |                               |            j	        d         
                                                   |                                                    t          g                      j	        d                                        d S r   )r&  rl   r   r.   r~   r/   r  rh  r   r   r  rf   r  )	_yrK  rL  rr   rM  r   rF  r  rG  s	      r   rg  z+emit_yield_from_or_await.<locals>.else_bodyd  s     ^^gll8T22GLLt4T4TUW[
 
 <<DF2tR99::: 	r"""|R... $11'4@@@ 	t$$$vw~~mRFFMMM $..w=====r   r|  )%r:   rG   rR   r   r0   r7   r   r@   r2  
has_methodrg   rc   r8   r  r&  r  r.   r   r  r~   r4   r   r3   rF   r*   
error_kindrd   r/   r  rh  r_   rf   ri  rp  ro  r  rq  )rr   r9  r   rC  helper_methoditer_valget_op
stop_block
main_block
done_block	fast_pathr  nnstop_iter_valerrptrm_y_init
loop_blockr  r  rg  rM  rF  r  rG  s   ` `                   @@@@r   emit_yield_from_or_awaitr`    sf    'd333F-D999L-D999L)M3z*++;sx++; H((77; $1'f233 	;++FSE4@@HH~~fseT::H--h77H)3z||Z\\J
J(-++ T0F0Q0QR_0`0` T
 	ll8T**  "" !233kk.):dKKKLL}c4000kk+&?OOPPsMBBC+@$GG ++a..	..w||Hd/K/K.LdSSKKw
JHHIII:&&& N2]OTJJJv}d3333 	vw~~mRFFMMM ++nX]33
4
4CNN8S$'''LL:&&&NN<$/// Jj)))
 
 
 
 
 
 
 
 

> > > > > > > > > >.> > > > > > > > > > >( J
333(dD+-F,GTXYYYj)))<<%%%r   c                (    t          | ||d          S NTrC  )r`  )rr   r9  r   s      r   r  r    s    #GS$FFFFr   r'   c                    | j         j        r|                     d|j                   |j        r|                     |j                  }n| j                                        }t          | ||j                  S )Nz"async generators are unimplemented)	r   r  r   r   r   r|   rr   r   rB  )rr   r   r   s      r   transform_yield_exprre    sm    # G:DIFFFy (	**%%''gvty111r   r(   c                b    t          | |                     |j                  |j        d          S )NFrc  r`  r|   r   r   r*  s     r   transform_yield_from_exprrh    s*    #GW^^AF-C-CQVV[\\\\r   r   c                b    t          | |                     |j                  |j        d          S rb  rg  r*  s     r   transform_await_exprrj    s*    #GW^^AF-C-CQVVZ[[[[r   r]  r   c                L    |                     t          | |                     d S r   )r|   rq   )rr   r]  s     r   transform_match_stmtrl    s$    HH\'1%%&&&&&r   r$   c                <   |j         }|                     t          |                     d          g|          }t	          | ||j        |j                   }|                     |d|          }|                     |j        j                  |                                 g}d d g}t          t          g}|j        rX|
                    |                     ||                     |
                    d           |
                    t                     |                     |||||          }	|j                            | j                  }
| j                            t&          |	|
g|           |                     |j                  }|                     ||	|           d S )N_typingTypeAliasTypetype_params)r   	arg_kinds)r   r&  rk   r  rK   	type_argsr  r   r   r   rz   	new_tupler   r  r
  r|   r   rr   r  rm   r   r   )rr   rm  r   modrp  type_alias_typer  r   rq  alias
compute_fnr   s               r   transform_type_alias_stmtrx    so   6D ..W%5%5i%@%@$A4
H
HC$Wc1;GGK))#EEOQV[))7<<>>:D#',I'"I{ $G%%k488999'''###OOOT49XaObbE
 00JO  !CeZEXZ^___**1622FNN65$'''''r   )rr   rJ   rs   r   rt   ru   )rr   rJ   r   r   rt   ru   )rr   rJ   r   r   rt   ru   )rr   rJ   r   r
   rt   ru   )r   r   rt   r   )rr   rJ   r   r   rt   ru   )r   r   r   r   rt   r   )rr   rJ   r   r   rt   ru   )rr   rJ   r  r  rt   r  )rr   rJ   r  r  rt   ru   )rr   rJ   r   r   rt   ru   )r   rS  rt   rT  )rr   rJ   r   r   r>  rL  rB  rL  rC  r   rt   rT  )rr   rJ   r   r   r>  rL  rB  rL  r   rK  rC  r   rt   ru   )rr   rJ   r   r   rt   ru   )rr   rJ   r   r   rt   ru   )rr   rJ   rm  r%   rt   ru   )rr   rJ   rm  r   rt   ru   )rr   rJ   r   r   rt   ru   )rr   rJ   r   r   rt   ru   )rr   rJ   rm  r   rt   ru   )rr   rJ   r{   r  r  r  rg  r  r   rK  rt   ru   )rr   rJ   r   r"   rt   ru   )rr   rJ   r  r.   r  r.   r  r.   r  r  rt   r  )rr   rJ   r  r.   r  r.   r  r.   r  r.   r  r  rt   r?   )
rr   rJ   r  r.   r  r  r  r?   rt   r  )rr   rJ   r  r.   r  rP   r  r?   r  r  rt   r.   )rw   )
rr   rJ   r  r  r  r  r   rK  rt   ru   )rr   rJ   rt   r  )rr   rJ   r   r   r   r  r{   r  r}  r   r   rK  rt   ru   )rr   rJ   r  r&   rt   ru   )rr   rJ   r  r	   rt   ru   )rr   rJ   r  r   rt   ru   )rr   rJ   r   rT   r   rK  rt   ru   )rr   rJ   r9  r?   r   rK  rt   r?   )
rr   rJ   r9  r?   r   rK  rC  r   rt   r?   )rr   rJ   r   r'   rt   r?   )rr   rJ   r  r(   rt   r?   )rr   rJ   r  r   rt   r?   )rr   rJ   r]  r   rt   ru   )rr   rJ   rm  r$   rt   ru   )__doc__
__future__r   importlib.utilr9  collections.abcr   r   typingr   
mypy.nodesmypyr   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(   mypyc.commonr)   mypyc.ir.opsr*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   mypyc.ir.rtypesr@   rA   rB   rC   rD   rE   rF   rG   mypyc.irbuild.ast_helpersrH   rI   mypyc.irbuild.builderrJ   rK   rL   mypyc.irbuild.for_helpersrM   mypyc.irbuild.generatorrN   mypyc.irbuild.nonlocalcontrolrO   rP   rQ   mypyc.irbuild.preparerR   mypyc.irbuild.specializerS   mypyc.irbuild.targetsrT   rU   rV   rW   rX   mypyc.primitives.exc_opsrY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   mypyc.primitives.generic_opsrc   rd   re   mypyc.primitives.misc_opsrf   rg   rh   ri   rj   rk   rl   rm   rn   ro   matchrq   r  ValueGenFuncr   r   r   r   r   r   r   r   r
  r  r  r  rD  rE  __annotations__rF  rG  rI  rX  r[  r?  re  rl  ru  r~  r  r  r  r  r  r  r  r  r  r  r  	traverserTraverserVisitorr  r  r  r  r  r'  r+  r)  rB  r`  r  re  rh  rj  rl  rx  r   r   r   <module>r     s
     # " " " " "     . . . . . . . .          # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #H ( ' ' ' ' '                                               0	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 S R R R R R R R W W W W W W W W W W 5 5 5 5 5 5 Q Q Q Q Q Q         
 8 7 7 7 7 7 @ @ @ @ @ @                                     M L L L L L L L L L                              
2t8
E	"# # # #*) ) ) )H H H H   @E( E( E( E(PA A A A( ( ( (2$ $ $ $&'A 'A 'A 'AT   6
 
 
 
 ! ! ! !H] ] ] ]. "#  " " " "          ! ! ! ! ! ! ! !   &( ( ( (*<O <O <O <O~+ + + +! ! ! !$! ! ! !2
 
 
 
? ? ? ?B B B B   R' R' R' R'jE E E E*   *   >* * * */ / / /f OQ"& "& "& "& "&L OQi' i' i' i' i'Z$ $ $ $ $DN3 $ $ $&. &. &. &.RH H H HT T T Tn
 
 
 
% % % %.O O O O9 9 9 9B   (B& B& B& B&JG G G G2 2 2 2] ] ] ]\ \ \ \' ' ' '( ( ( ( ( (r   