
    Ph"j                        U d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	 d dl
mc mZ d dlm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 d dlmZ  ej:                         Zej>                  e d<   dee	eeef      de!fd	Z" e#d
      Z$de	eef   de!fdZ%de	eeef   deee!e&f      fdZ' e#d      Z( e#d      Z)de&de!fdZ*de&de!fdZ+ e#d      Z, e#d      Z-de&de.fdZ/dZ0 e jb                  e0      Z2ee&e&f   e d<   de&de&fdZ3de	eeef   de.de&de&fdZ4dede.de&fdZ5dede.de&fdZ6ejn                  dej\                  d ejp                  d!ejL                  d"ejr                  d ejt                  d ejB                  d#iZ;dedeee&ee&   f      fd$Z<dede&fd%Z=ded&ede&fd'Z>ded&ede&fd(Z?ded&ede&fd)Z@ded&ede&fd*ZAded&ede&fd+ZB e#d,      ZCdede!fd-ZDdede&fd.ZE G d/ d0      ZF G d1 d2      ZGy)3    N)DictListOptionalSequenceTupleUnion)native_function_manager)ArgumentBackendIndexBaseTyBaseTypeFunctionSchemaNativeFunctionsGroupNativeFunctionsViewGroupOptionalTypeSelfArgumentTensorOptionsArgumentsType)configlogger	argumentsreturnc                 T    | D ]#  }t        |dd       }|st        |dd      }|s# y y)N
annotation	alias_set TF)getattr)r   argr   r   s       lC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torchgen/static_runtime/generator.py	has_aliasr       s;     S,5
JR8	      )sparse_sampled_addmmhspmmlinalg_svdvalssspaddmmcoalesce_indicesindices_valuesvaluescrow_indicescol_indicesfloor_dividegerconj_physicalbinary_cross_entropyarccoshcholeskylu_solvelinalg_choleskylinalg_householder_productlinalg_ldl_solve_compute_linear_combination
_make_dual
_fw_primal_index_reduce!_new_zeros_with_same_feature_meta_conj_physical binary_cross_entropy_with_logitsbincountconv_tbccopy
_copy_from_copy_from_and_resizecount_nonzerocudnn_affine_grid_generator$cudnn_affine_grid_generator_backwardcudnn_grid_sampler
diag_embed	embeddingembedding_dense_backward_embedding_bag_dense_backward*_embedding_bag_per_sample_weights_backwardgrid_sampler_2d_grid_sampler_2d_cpu_fallbackgrid_sampler_3disnanmkldnn_linearmedian	nanmedian_sparse_sparse_matmulbatch_norm_backward_elemt_euclidean_distpixel_shufflepixel_unshufflechannel_shuffle_reshape_nested_backwardrelupreluceluslice_scatterselect_scatterdiagonal_scattersum_mkldnn_transpose_nested_tensor_from_mask_nested_from_padded_nested_tensor_size&_nested_from_padded_and_nested_example_standard_gamma_grad_dirichlet_gradnative_norm_sparse_softmax_sparse_softmax_backward_data_sparse_log_softmax!_sparse_log_softmax_backward_datazero_sparse_addmmsparse_mask_sparse_mask_projection	_to_dense	_coalesce
_coalescedcopy_sparse_to_sparse	to_sparseto_sparse_csrto_sparse_csc	to_mkldnnquantize_per_tensor_dynamicquantize_per_channelq_per_channel_scalesq_per_channel_zero_pointsint_repr"_make_per_channel_quantized_tensorsetlift
lift_freshlift_fresh_copymasked_scatter_masked_softmax_masked_softmax_backwardputindex_reducetrace_cholesky_solve_helperdistmax_torch_cuda_cu_linker_symbol_opglu_jvpglu_backward_jvphardswish_backwardrrelu_with_noise_backward#mkldnn_adaptive_avg_pool2d_backward_adaptive_avg_pool2d_backward_adaptive_avg_pool3d_backwardisinflinalg_lu_solvelinalg_vecdotlinalg_matrix_explinalg_eigvalsh_test_warn_in_autograd%_test_autograd_multiple_dispatch_view*_test_autograd_multiple_dispatch_view_copy_segment_reduce_segment_reduce_backward_fw_primal_copy_make_dual_copyview_as_real_copyview_as_complex_copy
_conj_copy_neg_view_copydiagonal_copydetach_copysqueeze_copyt_copyunsqueeze_copy_indices_copy_values_copyindices_copyvalues_copycrow_indices_copycol_indices_copyccol_indicesccol_indices_copyrow_indicesrow_indices_copyunfold_copy
alias_copy_triton_multi_head_attentionspecial_airy_aispecial_bessel_j0special_bessel_j1special_bessel_y0special_bessel_y1special_chebyshev_polynomial_tspecial_chebyshev_polynomial_uspecial_chebyshev_polynomial_vspecial_chebyshev_polynomial_wspecial_hermite_polynomial_hspecial_hermite_polynomial_hespecial_laguerre_polynomial_lspecial_legendre_polynomial_pspecial_modified_bessel_i0special_modified_bessel_i1special_modified_bessel_k0special_modified_bessel_k1!special_scaled_modified_bessel_k0!special_scaled_modified_bessel_k1&special_shifted_chebyshev_polynomial_t&special_shifted_chebyshev_polynomial_u&special_shifted_chebyshev_polynomial_v&special_shifted_chebyshev_polynomial_wspecial_spherical_bessel_j0_foobar_nested_tensor_stridesgc                    d}d }t        | t              r-| j                  j                  }| j                  j                  }nJ| j
                  j                  j                  j                  j                  }| j
                  j                  }t        j                  |       rt        j                  d|       y|t        v rt        j                  d|       y|j                         D ]1  }t        |j                        }|rt        j                  d|        y t        | t              rSdt!        j"                  |j$                  d      j'                         k7  r t        j                  dt)        |             yy	| j*                  j                  j                         D ]E  }t        |j                        }|rt        j                  d| j*                  j                          y | j,                  sKt/        | d
      r>t)        |      j1                  d      r$t)        |j                        j1                  d      sydt!        j"                  |j$                  d      j'                         k7  rt        j                  d|       yt3        |j4                  j6                        rt        j                  d|       yy	)N zHAND WRITTEN: %sFzBLOCKED: %sz!NOT SUPPORTED TYPE CONVERTING: %sz
at::Tensor)symintzNON-TENSOR RET TYPE: %sToutzTensor(a!) out) -> Tensor(a!)z.outzat::Tensor &zNON_TENSOR RET TYPE: %szINPUTS ALIAS: %s)
isinstancer   view	root_namefuncr   namebaser   is_hand_writtenr   infoBLOCKED_OPSschema_order_argumentsivalue_type_conversion_methodtypecppreturns_typereturnscpp_typestr
functional
structuredhasattrendswithr    r   non_out)r   base_op_namer   r   maybe_methods        r   is_supportedr      s   LD!-.vv''vv{{uuzz++00uuzza &5{"M<0**,4SXX>KK;TB - !-. 3++DLLGPPRRKK13t9= ||  7794SXX>KK;Q\\=N=NO : <<
 5!t9%%&EFtyy>**62))$,,uENNPP-t4''(&5r!   arg_typec                    t         j                  dt         j                  dt         j                  dt         j                  dt         j
                  dt         j                  di}d}t        | t              r| j                  }nCt        | t              r2t        | j                  t              sy| j                  j                  }ny||vry||   }t        | t              r|d   S |d	   S )
aD  
    Return the method call expression of `c10::ivalue' to convert its contained value to
    the expected value of `arg_type` type. For example, for `arg_type` == BaseTy.Tensor,
    this function returns ".toTensor()", so that it can be appended to the ivalue's
    variable name to get the value of the expected type.
    ))Tz
toTensor())FztoOptional<at::Tensor>()))FztoInt())FztoOptional<int64_t>()))FztoBool())FztoOptional<bool>()))Fz
toScalar())FztoOptional<at::Scalar>()))FztoScalarType())FztoOptional<at::ScalarType>()))FztoStringView())FztoOptional<c10::string_view>()Nr      )r   TensorintboolScalar
ScalarTyper   r   r   r   r   elem)r   type_conversion_methodsbase_ty_objectmethodss       r   r   r   !  s     	R

JIS 
 	

 
 N(H%!	Hl	+(--2!++44%n5G(H%qz1:r!   )bitwise_notbitwise_and
bitwise_orbitwise_xorbitwise_left_shiftbitwise_right_shiftgcdlcmscattergather _convert_indices_from_coo_to_csr _convert_indices_from_csr_to_coo)view_as_realimag_conjop_namec                     | t         v S N)should_use_int_tensor_ops_r	  s    r   should_use_int_tensorr  _  s    000r!   c                     | t         v S r  )should_use_complex_tensor_ops_r  s    r   should_use_complex_tensorr  c  s    444r!   )	addmv	index_addr  r  nll_loss_backwarddotvdotouterr.   )addmmmmnuclear_normdiag_addmm_activationmatrix_Htc                 (    | t         v ry| t        v ryy)Nr         )test_tensor_dim_ops_1_test_tensor_dim_ops_2_r  s    r   test_tensor_dimr$  y  s    ((((r!   z{"view_as_complex": "{2, 2}"}test_tensor_shape_jsonc                 &    | t         v r	t         |    S y)Nr   )r%  r  s    r   test_tensor_shaper'    s    ((%g..r!   indexc                    t        |      }|dk(  rV|dk(  rdnd}t        |      }t        j                  |t	        |      z        }||dz  z  }ddj                  | g|z        z  }t        |      rd| d	}nt        |      rd
| d}nd| d}t        j                  |t        j                  dt        j                  dt        j                  dt        j                  dt        j                  di}d }	t        | t               r| j"                  }	nBt        | t$              rt        | j&                  t               sJ | j&                  j"                  }	|	|v sJ d       ||	   }
|
S )Nr   r      @   r   z{%s},zat::randint(1, 100, z, at::kInt)z
at::randn(z, at::kComplexFloat)z	at::rand()1false2zat::ScalarType::Floatz"floor"znot expected type)r'  r$  mathceilfloatjoinr  r  r   r   r   r   r   r   r   r   r   r   r   r   )r   r(  r	  tensor_size_exnum_tensorsnum_dimsize_per_dimtensor_expressionvalue_expressionsr   value_expressions              r   test_value_expressionr<    sj    'w/N!QJbB!'*yyuW~!=>q((388~,?',I#JKW%2>2B+N	"7	+((88LM''7q9 	(

CWs2

I N(H%!(L1jMM87
 	
 
 "++..C0CC.(8r!   schemac                    | j                         rJ | j                  j                  j                  }i }| j                         D ](  }t	        |j
                  ||      }|||j                  <   * t        j                  |||       g }|j                         D ]  \  }}|j                  d| | d|          dj                  |      dz   S )Nzauto z = ;
    ;)	is_out_fnr   r   r   r<  r   r   override_test_valuesitemsappendr4  )	r=  r(  schema_namearg_mapr   test_value_exparg_populationsarg_name	arg_values	            r   generate_test_value_definitionsrK    s    !!!++""''KG,,..sxxL* / e<O&}})xjs9+FG  />>/*S00r!   c                 x    | j                         rJ dj                  fd| j                         D              S )Nr,  c              3   >   K   | ]  }|j                       y wr  r   ).0r   r(  s     r   	<genexpr>z,generate_test_value_names.<locals>.<genexpr>  s!     T4SSsxxj(4Ss   )rA  r4  r   )r=  r(  s    `r   generate_test_value_namesrQ    s3    !!!88TF4Q4Q4STTTr!   r   r   r3  r   r   c                     dt         dt        t        t        t           f   fd}| j	                         D cg c]
  } ||       c}S c c}w )Nr   r   c                     | j                   }d}t        |t              r|j                  }d}t        |t              sJ d }|j
                  t        v rt        |j
                     }|r|r| d}d| j
                  z   |fS )NFT?%)r   r   r   r   r   r   /generate_test_ir_arguments_base_ty_to_type_str_)r   r  add_optionaltype_strs       r   ir_argumentz/generate_test_ir_arguments.<locals>.ir_argument  s{    HHa&AL!X&&&66DDFqvvNH"1~Hchh))r!   )r
   r   r   r   r   )r=  rY  r   s      r   generate_test_ir_argumentsrZ    sM    * *eC#,>&? * )/(E(E(GH(GK(GHHHs   A	c                    g }t        | j                               D ]P  \  }}t        |j                        }|sJ |\  }}|rdnd}|j	                  d| d|j
                   d| d|        R dj                  |      dz   S )	N&r   z
const auto z = p_node->Input(z).r?  r@  )	enumerater   r   r   rD  r   r4  )r=  rH  ir   r   is_referencetype_conversion_method	references           r   generate_arg_extractionrc    s    OF99;<34SXX>|/;,,'CR	1SXXJ.?s"E[D\]	
 = >>/*S00r!   backend_indexc                     |j                  | j                        }| j                  s|)t        j                  | j                  j
                        S |j                  S r  )
get_kernelr   r   r   r   r   kernelr   rd  rg  s      r   get_kernel_nameri    sD    %%all3F||v~xx))**==r!   c                     |j                  | j                        }| j                  s|)t        j                  | j                  j
                        S |j                  S r  )rf  r   r   r   r   r   rg  rh  s      r   get_out_kernel_namerk    sB    %%aee,F||v~xx

##==r!   c                     | j                   j                  }|j                         rJ t        | |      }d |j	                         D        }| j
                  rdnd}d| d| ddj                  |       dS )	Nc              3   4   K   | ]  }|j                     y wr  rN  rO  r   s     r   rP  z0generate_non_out_variant_call.<locals>.<genexpr>       E%Dc%D   cpunativeat::::(r,  r-  )r   r   rA  ri  r   r   r4  )r   rd  r=  kernel_name	arg_namesnamespace_names         r   generate_non_out_variant_callry     sw     \\F!!!!!]3KEV%B%B%DEIllUN.!K=#((92E1FaHHr!   c                    | j                   j                  }t        j                  |      }|j	                  | j                         }|r|j
                  }d |j                         D        }d}d| d| ddj                  |       dS )Nc              3   4   K   | ]  }|j                     y wr  rN  rn  s     r   rP  z,generate_call_to_view_ops.<locals>.<genexpr>  ro  rp  rr  rs  rt  ru  r,  r-  )r   r   r   r   rf  rg  r   r4  )r   rd  r=  rv  rg  rw  rx  s          r   generate_call_to_view_opsr|    s}     VV[[F((6"K%%aff-FmmEV%B%B%DEIN.!K=#((92E1FaHHr!   c                 
   | j                   j                  }|j                         sJ g }t        | |      }| j                  r.|j
                  j                   D cg c]  }|j                   }}ng }|j
                  j                  D ]e  }t        |t              r&|j                  |j                  j                         9t        |t              sJ |j                  |j                         g | j                  sVt        |j
                  j                         dk(  sJ |j                  |j
                  j                   d   j                         dj                  |      }| j                  rdnd}d| d| d| d	S c c}w )
Nr   r   r,  rq  rr  rs  rt  ru  r-  )r   r   rA  rk  r   r   r   r   r   r   rD  argumentr
   lenr4  )	r   rd  r=  rw  rv  out_argr   cpp_arg_namesrx  s	            r   generate_out_variant_callr    sJ    UUZZFI%a7K||171A1A1E1EF1EgW\\1E	F	''c<(S\\../c8,,,SXX& ( <<6##''(A---))--a0556HHY'MllUN.!K=-BB Gs   F )zisin.Scalar_Tensorr  r  r  r  histcl1_lossmulti_margin_lossmultilabel_margin_lossnll_loss
nll_loss2dprodc                 P    t        |       }|d |j                  d       }|t        vS )Nru  )r   findno_memory_resize_ops)r=  
schema_strtype_variant_op_names      r   should_check_resizer  D  s.    VJ%&<
(<=';;;r!   c                 j    | j                   j                  j                  j                  j                  S r  )r   r   r   r   )r   s    r   op_name_from_groupr  J  s$    <<!!&&+++r!   c                   h    e Zd Zdee   dedefdZdee   dedefdZ	dededefdZ
dededefdZy	)
GenOpDispatchergroupsrd  r   c                 8   |syg }|D ]X  }t        |      5  t        |      sJ t        |t              sJ | j	                  ||      }|j                  |       d d d        Z t        |d         }dj                  |      }d| d| d| d}|S # 1 sw Y   xY w)Nr   r   
z&
REGISTER_OPERATOR_FUNCTOR(
    aten::,
    aten_(,
    [](Node* n) -> SROperator {
      :
      LogAndDumpSchema(n);
      return nullptr;
    });
)r	   r   r   r   out_variant_op_generatorrD  r  r4  	selfr  rd  generated_type_variantsr   generated_type_variantr	  body	generateds	            r   out_variantzGenOpDispatcher.out_variantO  s     "$A(+#A&!!%9:::)-)F)Fq-)X&'../EF	 ,+  %VAY/yy01) 

 f 		 # ,+s   ABB	c                 L   |syg }|D ]X  }t        |      5  t        |      sJ t        |t              sJ | j	                  ||      }|j                  |       d d d        Z t        j                  |d         }dj                  |      }d| d| d| d}|S # 1 sw Y   xY w)Nr   r   r  z-
REGISTER_NATIVE_OPERATOR_FUNCTOR(
    aten::r  r  r  )	r	   r   r   r   view_op_generatorrD  r   func_name_base_strr4  r  s	            r   r   zGenOpDispatcher.viewi  s     "$A(+#A&!!%=>>>)-)?)?=)Q&'../EF	 ,+  ++F1I6yy01) 

 f 		 # ,+s   ABB#	r   c                    |j                   }t        |j                        }t        |j                   j                        }t	        ||      }t        |j                  j                  j                  j                        dk(  sJ t        |j                  j                  j                  j                  d   j                        }t        ||      }d| d| d| d| d| d| d	}	|	S )
Nr   r   +
      if (n->matches(torch::schema("aten::<"))) {
        return [](ProcessedNode* p_node) {
          zM
          if (p_node->Output(0).isNone()) {
            p_node->Output(0) = z2;
            return;
          }
          auto& z< = p_node->Output(0).toTensor();
          fastResizeToZero(z);
          ;
        };
      })
r   r   r   rc  ry  r  r   r   r   r  )
r  r   rd  r   r=  populated_argumentfunctional_variant_callout_variable_nameout_variant_callr  s
             r   r  z(GenOpDispatcher.out_variant_op_generator  s     \\
Z__%4Q\\5F5FG"?="Q155::''++,111

 4 4 8 8 ; @ @A4QF++1( 3
 !!8 9 : ## $-. /
 		 r!   c                     t        |j                  j                        }t        |j                  j                        }t	        ||      }d| d| d| d}|S )Nr  r  z!
            p_node->Output(0) = r  )r   r   r   rc  r|  )r  r   rd  r=  r  r  r  s          r   r  z!GenOpDispatcher.view_op_generator  sj     QVV[[!4QVV[[A";A}"M++1( 3
 !!8 9 :			 r!   N)__name__
__module____qualname__r   r   r   r   r  r   r   r  r  r   r!   r   r  r  N  s    34EQ	478IU	4%6B	2):F	r!   r  c                   X    e Zd Zdee   defdZdee   defdZdedefdZ	dedefdZ
y)	GenOpTestCaser  r   c                     |syg }|D ]W  }t        |      5  t        |      sJ t        |t              sJ | j	                  |      }|j                  |       d d d        Y dj                  |      S # 1 sw Y   txY wNr   r  )r	   r   r   r   "out_variant_op_test_case_generatorrD  r4  r  r  r  r   r  s        r   r  zGenOpTestCase.out_variant  s    "$A(+#A&!!%9:::)-)P)PQR)S&'../EF	 ,+  yy011 ,+   AA33A<	c                     |syg }|D ]W  }t        |      5  t        |      sJ t        |t              sJ | j	                  |      }|j                  |       d d d        Y dj                  |      S # 1 sw Y   txY wr  )r	   r   r   r   view_op_test_case_generatorrD  r4  r  s        r   r   zGenOpTestCase.view  s    "$A(+#A&!!%=>>>)-)I)I!)L&'../EF	 ,+  yy011 ,+r  r   c                    |j                   j                  }t        |      }|j                  d      dkD  sJ |d |j                  d       j	                  dd      }t        |      }|j                  |      sJ t        |      }dj                  d |D              }dj                  d |D              }t        |j                        dk(  rZt        |j                  d   j                  t              r3|j                  d   j                  j                  t        j                   u sJ t#        |d      }	t%        |d      }
t#        |d      }t%        |d      }t'        |      rd	nd
}d| d| d| d| d|	 d|
 d| d| d| d| d}|S )Nru  r   ._, c              3   8   K   | ]  \  }}||n| d|   y wNz: r   rO  rI  r   s      r   rP  zCGenOpTestCase.out_variant_op_test_case_generator.<locals>.<genexpr>  2      *3&Hh %,XJb
2KK*3   c              3   &   K   | ]	  \  }}|  y wr  r   rO  rI  r  s      r   rP  zCGenOpTestCase.out_variant_op_test_case_generator.<locals>.<genexpr>       E9KHax9   r   truer/  
TEST(StaticRuntime, autogen_1) {
  const std::string script = R"IR(
    graph(?):
        %bias: None = prim::Constant()
        %ret = aten::Q)
        %cloned = aten::clone(%ret, %bias)
        return (%cloned)
  )IR";

  
  std::vector<IValue> args{zj};
  testStaticRuntime(script, args, {}, /*use_allclose=*/false, /*use_equalnan=*/false, /*check_resize=*/z);

  z
  std::vector<IValue> args2{zm};
  testStaticRuntime(script, args, args2, /*use_allclose=*/false, /*use_equalnan=*/false, /*check_resize=*/z);

}
)r   r   r   r  replacer  
startswithrZ  r4  r  r   r   r   r   r   r   r   rK  rQ  r  )r  r   r=  r  r  r	  	arg_typesarg_declarationsrw  test_value_definitionstest_value_namestest_value_definitions2test_value_names2check_resizer  s                  r   r  z0GenOpTestCase.out_variant_op_test_case_generator  s   ""[
s#a''')*@JOOC,@AII#sS$Q'#..w777.v6	99*3
 IIE9EF	1$6>>!,118<q!&&++v}}<	
= "A!K4VQ?"A&!"L5fa@!4V!<v'12 3
 Ya	{ +
  -. /jjviw x /0 1kkwjx y!	( r!   c                    |j                   j                  }t        |      }|j                  d      dkD  sJ |d |j                  d       j	                  dd      }|j                   j
                  }|j                  |      sJ t        |      }dj                  d |D              }dj                  d |D              }t        |j                        dk(  rZt        |j                  d   j                  t              r3|j                  d   j                  j                  t        j                   u sJ t#        |d      }	t%        |d      }
d	| d
| d| d| d|	 d|
 d}|S )Nru  r   r  r  r  c              3   8   K   | ]  \  }}||n| d|   y wr  r   r  s      r   rP  z<GenOpTestCase.view_op_test_case_generator.<locals>.<genexpr>  r  r  c              3   &   K   | ]	  \  }}|  y wr  r   r  s      r   rP  z<GenOpTestCase.view_op_test_case_generator.<locals>.<genexpr>  r  r  r   r  r  r  r  r  z(};
  testStaticRuntime(script, args);
}
)r   r   r   r  r  r   r  rZ  r4  r  r   r   r   r   r   r   r   rK  rQ  )r  r   r=  r  r  r	  r  r  rw  r  r  r  s               r   r  z)GenOpTestCase.view_op_test_case_generator  sv   [
s#a''')*@JOOC,@AII#sS&&""#..w777.v6	99*3
 IIE9EF	1$6>>!,118<q!&&++v}}<	
= "A!K4VQ?12 3
 Ya	{ +
  -. /	  r!   N)r  r  r  r   r   r   r  r   r   r  r  r   r!   r   r  r    s]    
2(+?"@ 
2S 
2
28$<= 
2# 
2.4H .S .`'-E '# 'r!   r  )Hjsonloggingr1  typingr   r   r   r   r   r   torchgen.api.cppapir   torchgen.contextr	   torchgen.modelr
   r   r   r   r   r   r   r   r   r   r   torchgen.static_runtimer   	getLoggerr   Logger__annotations__r   r    	frozensetr   r   r   r   r  r  r  r  r"  r#  r   r$  test_tensor_shapes_stringloadsr%  r'  r<  rK  rQ  r   r3  r   r   rV  rZ  rc  ri  rk  ry  r|  r  r  r  r  r  r  r   r!   r   <module>r     sn      ? ?   4    +***, ,
h6LLMN
	
 xzz9E.0HHI 9d 9x(HlD01(eD#I(V '   "++L!M 13 14 15s 5t 5 #
  #Q 
S S  < )34M)N S#X Ns s $HlD01$:=$HK$$N1N 13 13 1Un US US U MM8
JJ
LL'
JJ
MM5
u
KK3 /II	%Xc]"
#$I(
1N 
1s 
1+ L S /  QT II,8II
I
I0<
I
ICC,8CC4 ! $< <4 <,. ,3 ,[ [|p pr!   