
    Z jV                        S r SSKrSSKJs  Jr  SSKJr  SSKJr  SSKJ	r
  SSKJr  SSKJrJr  SS	KJr  SS
KJrJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ r J!r!J"r"  SSK#J$r$  SSK%J&r&J'r'  SSK(J)r)  SSK*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5  \"Rl                  " \75      r8\!" SS9\ " S S\5      5       5       r9 " S S\35      r: " S S\5      r; " S S\Rx                  5      r= " S  S!\)5      r> " S" S#\+5      r? " S$ S%\55      r@ " S& S'\45      rA " S( S)\,\5      rB " S* S+\25      rC " S, S-\15      rD " S. S/\-5      rE " S0 S1\/5      rF " S2 S3\05      rG " S4 S5\.5      rH/ S6QrIg)7zPyTorch MiniMax model.    N)strict)nn   )initialization)ACT2FN)CacheDynamicCache)PreTrainedConfig)create_causal_mask!create_sliding_window_causal_mask)FlashAttentionKwargs)GradientCheckpointingLayer)MoeModelOutputWithPast)RopeParameters)Unpack)TransformersKwargsauto_docstringlogging)merge_with_config_defaults)OutputRecordercapture_outputs   )Gemma2RotaryEmbedding)MixtralAttentionMixtralDecoderLayerMixtralForCausalLMMixtralForQuestionAnswering MixtralForSequenceClassificationMixtralForTokenClassificationMixtralModelMixtralPreTrainedModelMixtralRMSNormMixtralSparseMoeBlockMixtralTopKRouterzMiniMaxAI/MiniMax-Text-01-hf)
checkpointc                     ^  \ rS rSr% SrSrS/rSrSSSSSSS	S
.rS/S/4SS/S/4S/S/4S.r	SS0r
Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\S-  \S'   Sr\\S '   S!r\\S"'   S#r\\S$'   S%r\\S&'   S'r\\S('   Sr\S-  \S)'   S*r\S-  \S+'   S,r\\\   -  S-  \S-'   S.r \\S/'   Sr!\S-  \S0'   S1r"\\-  \S2'   S,r#\\S3'   Sr$\\S'   S.r%\\S4'   S5r&\\S6'   S1r'\\S7'   Sr(\)\*-  S-  \S8'   Sr+\\   S-  \S9'   S:r,\\S;'   S*r-\\-  \S<'   S*r.\\-  \S='   S*r/\\-  \S>'   S*r0\\-  \S?'   S*r1\\-  \S@'   S*r2\\-  \SA'   U 4SB jr3SCr4U =r5$ )DMiniMaxConfig6   aA  
block_size (`int`, *optional*, defaults to 256):
    The length of each attention block, determining how queries, keys, and values
    are grouped and processed for intra- and inter-block attention.
full_attn_alpha_factor (`float`, *optional*, defaults to 1):
    Weight for residual value in residual connection after normal attention.
full_attn_beta_factor (`float`, *optional*, defaults to 1):
    Weight for hidden state value in residual connection after normal attention.
linear_attn_alpha_factor (`float`, *optional*, defaults to 1):
    Weight for residual value in residual connection after lightning attention.
linear_attn_beta_factor (`float`, *optional*, defaults to 1):
    Weight for hidden state value in residual connection after lightning attention.
mlp_alpha_factor (`float`, *optional*, defaults to 1):
    Weight for residual value in residual connection after MLP.
mlp_beta_factor (`float`, *optional*, defaults to 1):
    Weight for hidden state value in residual connection after MLP.

```python
>>> from transformers import MiniMaxModel, MiniMaxConfig

>>> # Initializing a MiniMax style configuration
>>> configuration = MiniMaxConfig()

>>> # Initializing a model from the MiniMax style configuration
>>> model = MiniMaxModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config
```minimaxpast_key_valuesg    .Acolwiserowwisepacked_colwisemoe_tp_experts)zlayers.*.self_attn.q_projzlayers.*.self_attn.k_projzlayers.*.self_attn.v_projzlayers.*.self_attn.o_projz!layers.*.mlp.experts.gate_up_projzlayers.*.mlp.experts.down_projzlayers.*.mlp.experts	input_idsinputs_embedshidden_statesattention_mask)embed_tokenslayersnormnum_expertsnum_local_expertsi }  
vocab_sizei   hidden_sizei 8  intermediate_size    num_hidden_layersnum_attention_heads   num_key_value_headsNhead_dimsilu
hidden_acti   max_position_embeddingsg{Gz?initializer_rangeh㈵>rms_norm_epsT	use_cachepad_token_id   bos_token_idr   eos_token_idFtie_word_embeddingssliding_windowg        attention_dropoutnum_experts_per_tokoutput_router_logitsgMbP?router_aux_loss_coefrouter_jitter_noiserope_parameterslayer_types   
block_sizefull_attn_alpha_factorfull_attn_beta_factorlinear_attn_alpha_factorlinear_attn_beta_factormlp_alpha_factormlp_beta_factorc                   > U R                   c  U R                  U l         U R                  cC  [        U R                  5       Vs/ s H  n[        US-   S-  5      (       a  SOSPM     snU l        [        TU ]  " S0 UD6  g s  snf )NrI   r   full_attentionlinear_attention )r?   r=   rT   ranger<   boolsuper__post_init__)selfkwargsi	__class__s      |/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/transformers/models/minimax/modular_minimax.pyrd   MiniMaxConfig.__post_init__   s    ##+'+'?'?D$#W\]a]s]sWt WtRSD!a%1$5$5 ;MMWt D 	''	 s   $B)rT   r?   )6__name__
__module____qualname____firstlineno____doc__
model_typekeys_to_ignore_at_inferencedefault_thetabase_model_tp_planbase_model_pp_planattribute_mapr8   int__annotations__r9   r:   r<   r=   r?   r@   rB   strrC   rD   floatrF   rG   rb   rH   rJ   rK   listrL   rM   rN   rO   r7   rP   rQ   rR   rS   r   dictrT   rV   rW   rX   rY   rZ   r[   r\   rd   __static_attributes____classcell__rh   s   @ri   r'   r'   6   s%   < J#4"5M%.%.%.%.-=*3 0 &(9:#%568IJ!"_$56
 #$78MJK"s"s!!  HcDjJ#,S,#u#L%It#L#*# L#* +,L#S	/D(, %%!%NC$J%%(us{(  s!&$&"'%'!$$48O^d*T18$(KcT!(J*+C%K+)*3;*,-cEk-+,S5[,$%cEk%#$OS5[$	( 	(    r'   c                       \ rS rSrSrg)MiniMaxRMSNorm   r`   Nrk   rl   rm   rn   r|   r`   r   ri   r   r          r   r   c                      ^  \ rS rSrU 4S jrS rS\4S jrU 4S jrS\4S jr	S	\
R                  4S
 jrS\4S jrSrU =r$ )MiniMaxCache   c                 0   > [         TU ]  5         / U l        g N)rc   __init__linear_cachere   rh   s    ri   r   MiniMaxCache.__init__   s    02r   c                     [        [        U R                  5      US-   5       H  nU R                  R                  / 5        M      X R                  U'   g )NrI   )ra   lenr   append)re   	layer_idxr   _s       ri   set_linear_cacheMiniMaxCache.set_linear_cache   sD    s4,,-y1}=A$$R( >'3)$r   r   c                 @    U[        U 5      :  a  U R                  U   $ g r   )r   r   )re   r   s     ri   get_linear_cacheMiniMaxCache.get_linear_cache   s"    s4y $$Y//r   c                 Z   > [        [        TU ]	  5       [        U R                  5      5      $ r   )maxrc   __len__r   r   r   s    ri   r   MiniMaxCache.__len__   s"    57?$c$*;*;&<==r   repeatsc                     [        [        U 5      5       H`  nU R                  U   / :w  a,  U R                  U   R                  USS9U R                  U'   MB  U R                  U   R                  U5        Mb     g )Nr   dim)ra   r   r   repeat_interleaver4   batch_repeat_interleave)re   r   r   s      ri   r   $MiniMaxCache.batch_repeat_interleave   sl    s4y)I  +r1/3/@/@/K/]/]^ekl/]/m!!),I&>>wG	 *r   indicesc                     [        [        U 5      5       HW  nU R                  U   / :w  a#  U R                  U   US4   U R                  U'   M9  U R                  U   R	                  U5        MY     g )N.)ra   r   r   r4   batch_select_indices)re   r   r   s      ri   r   !MiniMaxCache.batch_select_indices   sd    s4y)I  +r1/3/@/@/KGUXL/Y!!),I&;;GD	 *r   
max_lengthc                     [        S5      e)Nz*MiniMaxCache doesnot support `crop` method)RuntimeError)re   r   s     ri   cropMiniMaxCache.crop   s    GHHr   )r   )rk   rl   rm   rn   r   r   rv   r   r   r   torchTensorr   r   r|   r}   r~   s   @ri   r   r      sR    34# 
>Hs HEELL EIs I Ir   r   c                   .  ^  \ rS rSrS\S\4U 4S jjrS rS r SS\	R                  S	\\	R                  \	R                  4   S
\	R                  S-  S\S-  S\\   S\\	R                  \	R                  S-  \\	R                     S-  4   4S jjrSrU =r$ )MiniMaxLightningAttention   configr   c                   > [         TU ]  5         X l        [        USS 5      =(       d    UR                  UR
                  -  U l        UR
                  U l        UR                  U l        UR                  U l        [        UR                     U l        [        U R                  U R
                  -  5      U l        [        R                  " UR                  U R
                  U R                  -  S-  SS9U l        [        R                  " U R
                  U R                  -  UR                  SS9U l        [        R                  " UR                  U R
                  U R                  -  SS9U l        U R'                  5       nU R)                  U5      u  pEnU R+                  SU5        U R+                  SU5        U R+                  SU5        U R+                  SU5        g )	Nr@   r   F)bias
slope_ratequery_decay	key_decaydiagonal_decay)rc   r   r   getattrr9   r=   r@   r<   rV   r   rB   act_fnr   r5   r   Linearqkv_projout_projoutput_gateget_slope_ratedecay_factorsregister_buffer)re   r   r   r   r   r   r   rh   s          ri   r   "MiniMaxLightningAttention.__init__   s   "
D9mV=O=OSYSmSm=m#)#=#= !'!9!9 ++V../"4==43K3K#KL			&"4"4d6N6NQUQ^Q^6^ab6bino		$":":T]]"JFL^L^ejk99V%7%79Q9QTXTaTa9ahmn((*
151C1CJ1O.\:6]K8[)4-~>r   c                     SSSU R                   -  -  -  n[        R                  " U R                   5      S-   nSU R                  U R                  S-
  S-   -  -
  S-   nX-  nXC-  nUS S 2S S 4   nU$ )NrI   r   r>   rE   )r=   r   aranger   r<   )re   baseexponentfactorrates        ri   r   (MiniMaxLightningAttention.get_slope_rate   s    A!d66678<< 8 89A=T^^t'='='AD'HIIDP~}AtTM"r   c                    [         R                  " U R                  5      S-   n[         R                  " U* US S 2S 4   -  5      n[         R                  " U* U R                  US S 2S 4   -
  -  5      nUS S 2S 4   US S S 24   -
  nUS S S S 2S S 24   nX-  n[         R                  " US:  U* [        S5      5      n[         R                  " U5      nX4U4$ )NrI   r   z-inf)r   r   rV   expwherery   )re   r   block_size_ranger   r   r   s         ri   r   'MiniMaxLightningAttention.decay_factors   s     <<81<ii.>q$w.G GHIIzkT__?OPQSWPW?X-XYZ	)!T'25EdAg5NN'dAq(89#4^q%8>/5QW=Y>2~55r   Nr1   position_embeddingsr2   r*   rf   returnc                  	   UR                   u  pgnXpR                  -   S-
  U R                  -  n	U R                  U R                  U5      5      n
U
R	                  XgU R
                  SU R                  -  5      n
[        R                  " XR                  SS9u  pnUR                  SS5      nUR                  SS5      nUR                  SS5      nS nUb  UR                  U R                  5      nUGc  [        R                  " X`R
                  U R                  U R                  5      R                  U5      nUbN  UR                  [        R                  S9nUR                  UR!                  S5      R!                  S5      ) S5      n/ n[#        U	5       GHh  nUU R                  -  n[%        UU R                  -   U5      nUU-
  nUS S 2S S 2UU24   nUS S 2S S 2UU24   nUS S 2S S 2UU24   nU R&                  S S 2S U24   nU R(                  S S 2U* S 24   nU R*                  S S 2S S 2S U2S U24   n[        R,                  " U R.                  * U-  5      n[        R0                  " UUR                  SS5      5      n[        R0                  " UU-  U5      n[        R0                  " UU-  U5      nUU-   nUR3                  U5        [        R0                  " UU-  R                  SS5      U5      nUU-  U-   nGMk     O[        R,                  " U R.                  * 5      n / n[#        U5       H  nUS S 2S S 2UUS-   24   nUS S 2S S 2UUS-   24   nUS S 2S S 2UUS-   24   n[        R0                  " UR                  SS5      U5      n!U U-  U!-   n[        R0                  " UU5      nUR3                  U5        M     [        R4                  " USS9nUR                  SS5      nUR	                  XgU R
                  U R                  -  5      nU R7                  U5      n[8        R:                  " U R=                  U5      5      U-  nU R?                  U5      nUb  URA                  U R                  U5        X4$ )	NrI   r   r   r   )dtyper   )!shaperV   r   r   reshaper=   r@   r   split	transposer   r   zerostorb   masked_fill	unsqueezera   minr   r   r   r   r   matmulr   catr5   Fsigmoidr   r   r   )"re   r1   r   r2   r*   rf   
batch_sizeseq_lenr9   
num_blocks
qkv_statesquery_states
key_statesvalue_statesattn_weights_interattn_outputrg   	start_idxend_idxcurrent_block_sizecurrent_query_statescurrent_key_statescurrent_value_statescurrent_query_decaycurrent_key_decaycurrent_diagonal_decayblock_decayattn_weights_intraattn_output_intraattn_output_intercurrent_attn_outputnext_attn_weights_interratiocurrent_attn_weights_inters"                                     ri   forward!MiniMaxLightningAttention.forward   s    ,9+>+>(
[/!3G
[[}!=>
''
T=U=UWX[_[h[hWhi
16Z\]1^.,#--a3))!Q/
#--a3 "&!0!A!A$..!Q%!&Z9Q9QSWS`S`bfbobo!p!s!s"
 )!/!2!2!2!D+779Q9QRS9T9^9^_a9b8bdefK:&/	i$//97C%,y%8"'3Aq)G:K4K'L$%/1i6G0G%H"'3Aq)G:K4K'L$&*&6&6q:M;M:M7M&N#$(NN17I6I6J3J$K!)-)<)<QCVDVCVXkYkXk=k)l&#ii(8;M(MN &+\\2FHZHdHdegikHl%m"$)LL1CF\1\^r$s! %*LL1EH[1[]o$p! '8:K&K#""#67 +0,,'*;;FFr2NPd+' &8+%EH_%_"; '@ IIt./EK7^'3Aq!a!e)O'D$%/1a!a%i%@"'3Aq!a!e)O'D$-2\\:L:V:VWY[]:^`t-u*%*-?%?B\%\"&+ll3GI[&\#""#67 $ ii4 "++Aq1!))*t?W?WZ^ZgZg?ghii,ii 0 0 ?@;NmmK0 &,,T^^=OP..r   )
r   rV   r@   r   r5   r=   r<   r   r   r   r   )rk   rl   rm   rn   r'   rv   r   r   r   r   r   tupler   r   r   r   r|   r}   r~   s   @ri   r   r      s    ?} ? ?,	6& )-_/||_/ #5<<#=>_/ t+	_/
 _/ -._/ 
u||U\\D0%2E2LL	M_/ _/r   r   c                       \ rS rSrSrg)MiniMaxRotaryEmbeddingiR  r`   Nr   r`   r   ri   r   r   R  r   r   r   c                       \ rS rSrSrg)MiniMaxAttentioniV  r`   Nr   r`   r   ri   r  r  V  r   r   r  c                       \ rS rSrSrg)MiniMaxTopKRouteriZ  r`   Nr   r`   r   ri   r  r  Z  r   r   r  c                       \ rS rSrSrg)MiniMaxSparseMoeBlocki^  r`   Nr   r`   r   ri   r  r  ^  r   r   r  c                   T  ^  \ rS rSrS\S\4U 4S jjr     SS\R                  S\	\R                  \R                  4   S-  S\R                  S-  S	\R                  S-  S
\S-  S\S-  S\\   S\	\R                  \	\R                  \R                  4   S-  4   4S jjrSrU =r$ )MiniMaxDecoderLayerib  r   r   c                   > [         TU ]  X5        X l        [        US5      (       a  UR                  U   OS U l        UR                  U l        UR                  U l        U ?[        U5      U l        U R
                  S:X  a3  [        X5      U l        UR                  U l        UR                  U l        g [!        X5      U l        UR"                  U l        UR$                  U l        g )NrT   r_   )rc   r   r   hasattrrT   
layer_typer[   r\   mlpr  r   	self_attnrY   attn_alpha_factorrZ   attn_beta_factorr  rW   rX   )re   r   r   rh   s      ri   r   MiniMaxDecoderLayer.__init__c  s    +";B6=;Y;Y&,,Y7_c & 7 7%55H(0??006vIDN%+%D%DD"$*$B$BD!-f@DN%+%B%BD"$*$@$@D!r   Nr1   r   r2   position_idsr*   rG   rf   r   c           
         U R                  U5      nUnU R                  " SUUUUUUS.UD6u  pXR                  -  XR                  -  -   nU R	                  U5      nUnU R                  U5      nXR                  -  XR                  -  -   nU$ )N)r1   r   r2   r  r*   rG   r`   )input_layernormr  r  r  post_attention_layernormr  r[   r\   )
re   r1   r   r2   r  r*   rG   rf   residualr   s
             ri   r   MiniMaxDecoderLayer.forwardu  s     ,,]; >> 
' 3)%+
 
 !#9#99MLaLa<aa55mD / #8#88=K_K_;__r   )r  r  r   r
  r  r[   r\   r  )NNNNF)rk   rl   rm   rn   r'   rv   r   r   r   r   
LongTensorr   rb   r   r   FloatTensorr   r|   r}   r~   s   @ri   r  r  b  s    A} A A* IM.204(,!&|| #5<<#=>E t+	
 &&-  $; -. 
u  %(9(95;L;L(L"MPT"TT	U r   r  c                   H   ^  \ rS rSrSr\" \SSS9\\\	/S.r
U 4S jrSrU =r$ )	MiniMaxPreTrainedModeli  Fzmlp.gater   )
layer_nameindex)router_logitsr1   
attentionsc                   > [         TU ]  U5        [        U[        5      (       a  UR	                  5       nUR                  U5      u  p4n[        R                  " UR                  U5        [        R                  " UR                  U5        [        R                  " UR                  U5        [        R                  " UR                  U5        g g r   )rc   _init_weights
isinstancer   r   r   initcopy_r   r   r   r   )re   moduler   r   r   r   rh   s         ri   r  $MiniMaxPreTrainedModel._init_weights  s    f%f788..0J5;5I5I*5U2KNJJv((*5JJv));7JJv''3JJv,,n= 9r   r`   )rk   rl   rm   rn   _can_compile_fullgraphr   r  r  r  r   _can_record_outputsr  r|   r}   r~   s   @ri   r  r    s5    "'(9jXYZ,')BC> >r   r  c                       \ rS rSr\\      SS\R                  S-  S\R                  S-  S\R                  S-  S\	S-  S\R                  S-  S\S-  S	\\   S
\\-  4S jj5       5       rSrg)MiniMaxModeli  Nr/   r2   r  r*   r0   rG   rf   r   c           
         US L US L-  (       a  [        S5      eU(       a  Uc  [        5       nO4U(       a-  [        U[        5      (       d  [        S[        U5       S35      eUc  U R	                  U5      nUcU  Ub  UR                  5       OSn[        R                  " UR                  S   UR                  S9U-   nUR                  S5      nU R                  R                  c  [        O[        n	U	" U R                  UUUUS9n
UnU R                  X5      n[!        U R"                  5       H6  u  pU R                  R$                  U   S:X  a  U
nOUnU" U4UUUUUS	.UD6nM8     U R'                  U5      n[)        UUS
9$ )Nz:You must specify exactly one of input_ids or inputs_embedszSMiniMax uses cache of its own and is not compatible with `past_key_values` of type .r   rI   )device)r   r0   r2   r*   r  r^   )r2   r   r  r*   rG   )last_hidden_stater*   )
ValueErrorr   r   typer3   get_seq_lengthr   r   r   r+  r   r   rM   r   r   
rotary_emb	enumerater4   rT   r5   r   )re   r/   r2   r  r*   r0   rG   rf   past_seen_tokensmask_functioncausal_maskr1   r   rg   decoder_layerinput_attention_masks                   ri   r   MiniMaxModel.forward  s    -t";<YZZ0*nOz/<HHefjkzf{e||}~    --i8MCRC^==?de <<(;(;A(>}G[G[\_ooL'11!4L.2kk.H.H.P*Vw#;;')+%
 &"oomJ )$++ 6A{{&&q)-=='2$ (6$)3$7) /# M !7" 		-0%++
 	
r   r`   )NNNNNN)rk   rl   rm   rn   r   r   r   r  r   r   r  rb   r   r   r   r   r   r|   r`   r   ri   r(  r(    s     .2.204/326!%>
##d*>
 t+>
 &&-	>

 &,>
 ((4/>
 $;>
 +,>
 
'	'>
   >
r   r(  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )MiniMaxForCausalLMi  c                 $   > [         TU ]  " S0 UD6$ )a   
labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
    Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
    config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
    (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.

Example:

```python
>>> from transformers import AutoTokenizer, MiniMaxForCausalLM

>>> model = MiniMaxForCausalLM.from_pretrained("MiniMaxAI/MiniMax-Text-01-hf")
>>> tokenizer = AutoTokenizer.from_pretrained("MiniMaxAI/MiniMax-Text-01-hf")

>>> prompt = "Hey, are you conscious? Can you talk to me?"
>>> inputs = tokenizer(prompt, return_tensors="pt")

>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=30)
>>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."
```r`   )rc   r   )re   super_kwargsrh   s     ri   r   MiniMaxForCausalLM.forward  s    . w...r   r`   )rk   rl   rm   rn   r   r|   r}   r~   s   @ri   r9  r9    s    / /r   r9  c                       \ rS rSrSrg) MiniMaxForSequenceClassificationi  r`   Nr   r`   r   ri   r>  r>    r   r   r>  c                       \ rS rSrSrg)MiniMaxForTokenClassificationi	  r`   Nr   r`   r   ri   r@  r@  	  r   r   r@  c                       \ rS rSrSrg)MiniMaxForQuestionAnsweringi  r`   Nr   r`   r   ri   rB  rB    r   r   rB  )r'   r  r(  r9  r>  r@  rB  )Jro   r   torch.nn.functionalr   
functionalr   huggingface_hub.dataclassesr    r   r!  activationsr   cache_utilsr   r	   configuration_utilsr
   masking_utilsr   r   modeling_flash_attention_utilsr   modeling_layersr   modeling_outputsr   modeling_rope_utilsr   processing_utilsr   utilsr   r   r   utils.genericr   utils.output_capturingr   r   gemma2.modeling_gemma2r   mixtral.modeling_mixtralr   r   r   r   r   r   r    r!   r"   r#   r$   
get_loggerrk   loggerr'   r   r   Moduler   r   r  r  r  r  r  r(  r9  r>  r@  rB  __all__r`   r   ri   <module>rY     sd       .  & ! . 3 R B 9 6 1 & @ @ 7 E :    
		H	% 9:\($ \(  ;\(~	^ 	"I< "IJO/		 O/d	2 		' 		) 		1 	.-/I .b>3 >&A
< A
H/+ /6	'G 		$A 		"= 	r   