
    bMh[                        d dl Zd dlZd dlmZ d dlmZ d dlZd dl	m
Z d dlmZ ej                            ddddgddggd	d
gd	dgd	dgdfdddgdej        gddggg dg dg ddfg          d             Zej                            ddddgddggdd
gddgddgdfdddgdej        gddgej        dggg dg dg ddfg          d             Zej                            ddddgd
d	gdd	gdd	gdfdddej        gg dg dg ddfg          d             Zej                            ddddd ej        g ej        d!d!gdd g"          fdddd ej        g ej        g d#dd ej        g"          fg          d$             Zej                            d%d ej        d&d'gdd gd()          fd ej        g d*dd ej        gd()          fg          d+             Zej                            d,d-          d.             Zej                            d/ ej        d d0           ed1          ej                            d2d3gd4d5g6          g          d7             Zej                            ddddgddggd	d
gddgddgdfdddgdej        gddggg dg d8g d9dfg          d:             Zej        j        ej                            d; ej        d<           ej        d=          f ej         d>           ej         d?          f ej!        d<           ej!        d=          fg          ej                            d@ddAd!gfdg dBfg          dC                                     Z"ej                            dD ej#        dddd ej        gg dEdFdGg dHidd ej        gdIJ           ej#        dddd ej        gg dEdFdGg dKiddLJ           ej#        dg dMg dEdFdGg dHiddNJ           ej#        dg dMg dEdFdGg dHiddOJ          g          dP             Z$ej                            dQddgdd gg          ej                            dRdgdd gg          ej                            dSddg          dT                                     Z%dU Z&dV Z'ej                            dW e(dX                    ej                            dYddZd[d\d]d^d_d`dadbdadcddde ej#        dfej        )                    edgh          i          djdkdlg          ej                            dmddg          dn                                     Z*ej                            dmddg          ej                            dYe+dg          do                         Z,ej                            dpg dq          dr             Z-ds Z.ej                            dtdudvg          dw             Z/dx Z0dy Z1dS )z    N)pa_version_under10p1)na_value_for_dtype)get_groupby_method_argszdropna, tuples, outputsTAB      *@Q^@     ^@      ?cdeF)r   皙(@r	   )r         m@r
   )r         (@r   c                    g dd|dddgg dg dg}t          j        |g d	          }|                    d
dg|                                           }t           j                            |t          d                    }| s$|                    ddt          j	        gd          }t          j        ||          }t          j        ||           d S )Nr   r      r   r   r   r   r   r   r   r   r	   {      r   r   r   r   r   abr   r   r   columnsr   r   dropnaabnamesr   levelindexpd	DataFramegroupbysum
MultiIndexfrom_tupleslist
set_levelsnpnantmassert_frame_equal)	r    tuplesoutputsnulls_fixturedf_listdfgroupedmiexpecteds	            h/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pandas/tests/groupby/test_groupby_dropna.py:test_groupby_dropna_multi_index_dataframe_nan_in_one_groupr>      s    0 		mT5"-"""	G 
g'@'@'@	A	A	ABjj#sFj337799G		"	"6d	"	<	<B  :]]Cbf-S]99|G2...H'8,,,,,    r   )r   g*@r	   r   )r   g     @m@r
   r   )r   r   r   r   c           	         g dd|dddgg d|dddd	gd|ddd	gg}t          j        |g d
          }|                    ddg|                                           }t           j                            |t          d                    }| s1|                    ddt          j	        gddt          j	        gg          }t          j        ||          }	t          j        ||	           d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r"   r&   r(   )
r    r5   r6   r7   nulls_fixture2r8   r9   r:   r;   r<   s
             r=   ;test_groupby_dropna_multi_index_dataframe_nan_in_two_groupsrB   8   s	   0 		mT5"-"""	aC(	naC(G 
g'@'@'@	A	A	ABjj#sFj337799G		"	"6d	"	<	<B  E]]S#rv.c260BCDD|G2...H'8,,,,,r?   zdropna, idx, outputs)r   r   r   )r	   r   r   )r
   r   r   )r   r   r   c                 "   g dg dg dg dg}t          j        |g d          }|                    d|                                           }t          j        |t          j        |d	          
          }t          j        ||           d S )N)r   r   r   r   )Nr   r   r   )r   r	   r   r   )r   r   r   r   )r   r   r   r   r   r   r   namer&   )r)   r*   r+   r,   Indexr3   r4   )r    idxr6   r8   r9   r:   r<   s          r=   *test_groupby_dropna_normal_index_dataframerH   d   s    $ 		G 
g';';';	<	<	<BjjVj,,0022G|G28Cc+B+B+BCCCH'8,,,,,r?   zdropna, idx, expectedr   r      r&   )rI   rI   rI   c                     t          j        g d|          }|                    d|                                           }t	          j        ||           d S )N)r      rI   rI   r&   r   )r%   r    )r)   Seriesr+   r,   r3   assert_series_equal)r    rG   r<   serresults        r=    test_groupby_dropna_series_levelrP      sV     )LLL
,
,
,C[[q[004466F68,,,,,r?   zdropna, expected     @j@     u@	Max Speedr'   rE   )rQ   rR         4@c                     t          j        g dg dd          }|                    dddt          j        g|                                           }t          j        ||           d S )N)g     `x@rR   g      >@rU   )FalconrW   ParrotrX   rS   rT   r   r   r   )r)   rL   r+   r1   r2   meanr3   rM   )r    r<   rN   rO   s       r=   test_groupby_dropna_series_byrZ      sv     )"""666  C [[#sC0[@@EEGGF68,,,,,r?   r    )FTc                     t          j        g dg dd          }|                    d|           }|j        j        | k    sJ d S )Nr   r   r   Nr   rK   rI   Nr   r   r   r   )r)   r*   r+   _grouperr    )r    r9   gbs      r=   test_grouper_dropna_propagationra      sT     
OOO///BB	C	CB	C	'	'B;''''''r?   r'      abcd)r   rK   )Rr   numcolr"   c                 `   dddd| rt           j        ndgi}t          j        g dg dd|          }|                    d| 	          }|                    t                    }t          j        ||          }t          j        ||           |dg                             t                    }t          j        ||          }t          j        ||           |d                             t                    }t          j	        |d         |d
          }t          j
        ||           d S )Nr   rK   r   r\   r]   r^   r&   r   r   rT   )r1   r2   r)   r*   r+   	transformlenr3   r4   rL   rM   )r    r'   expected_datar9   r`   rO   r<   s          r=   +test_groupby_dataframe_slice_then_transformrk      s    1af$;BFF!<=M	OOO///BB%	P	P	PB	C	'	'B\\#F|M777H&(+++Y  %%F|M777H&(+++Ws##Fys+5sCCCH68,,,,,r?   )r   r   r
   )r   r   r   c                    g dg dg dg dg}t          j        |g d          }ddd	d
}|                    ddg|                               |          }t           j                            |t          d                    }| s$|                    ddt          j	        gd          }t          j        ||          }t          j        ||           d S )Nr   )r   Nr   r   r   r   r   r   r   r,   maxminr   r   r   r   r!   r"   r   r   r$   r&   )r)   r*   r+   aggr-   r.   r/   r0   r1   r2   r3   r4   )	r    r5   r6   r8   r9   agg_dictr:   r;   r<   s	            r=   -test_groupby_dropna_multi_index_dataframe_aggrq      s    , 	$$$"""	G 
g'@'@'@	A	A	ABU33Hjj#sFj3377AAG		"	"6d	"	<	<B  :]]Cbf-S]99|G2...H'8,,,,,r?   zdatetime1, datetime2z
2020-01-01z
2020-02-01z-2 daysz-1 dayszdropna, valuesr   )r   rI      c           	      J   t          j        g d||||||gd          }| r||g}n||t          j        g}|                    d|                               ddi          }t          j        d|it          j        |d                    }	t          j        ||	           d S )	N)r   rK   rI   rb      rr   )valuesdtrv   r   ru   r,   rD   r&   )	r)   r*   r1   r2   r+   ro   rF   r3   r4   )
r    ru   	datetime1	datetime2unique_nulls_fixtureunique_nulls_fixture2r9   indexesr:   r<   s
             r=   &test_groupby_dropna_datetime_like_datar|      s     
((($%
	
 
	

 
B  1i(i0jjfj--118U2CDDG|Xv.bhwT6R6R6RSSSH'8,,,,,r?   z#dropna, data, selected_data, levels)
   r}         )groupsru   ru   )r   r   r   r   dropna_false_has_nan)id)r   r   r   dropna_true_has_nan)r   r   r   r   dropna_false_no_nandropna_true_no_nanc                    t          j        |          }|                    d|           }d}t          j        t
          |          5  |                    d           }d d d            n# 1 swxY w Y   t          t          |d         |d                             }t           j	        
                    |dd g          }	| s|r|	                    |d          }	t          j        ||		          }
t          j        ||
           d S )
Nr   r   z7DataFrameGroupBy.apply operated on the grouping columnsmatchc                 b    t          j        dt          t          |                     i          S )Nru   )r)   r*   rangeri   )grps    r=   <lambda>z@test_groupby_apply_with_dropna_for_multi_index.<locals>.<lambda>I  s!    blHeCHHoo3N&O&O r?   ru   r"   r$   r&   )r)   r*   r+   r3   assert_produces_warningFutureWarningapplytuplezipr-   r.   r0   r4   )r    dataselected_datalevelsr9   r`   msgrO   	mi_tuplesr;   r<   s              r=   .test_groupby_apply_with_dropna_for_multi_indexr     sS   L 
d		B	HV	,	,B
CC		#M	=	=	= Q QOOPPQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q c$x.-*ABBCCI		"	"9Xt4D	"	E	EB  3f 3]]6]22|M444H&(+++++s   	A,,A03A0input_indexkeysseriesc                    t          j        dt          j        gddgddgd          }|                    |          }|r	|d         }n| ddgk    r|dgk    r	|dg         }| |                    |           }|                    |d	          }|r|d         }|                                }t          j        ||           d S )
Nr   rK   rI   r   r   r   r   r   r   Fr   )	r)   r*   r1   r2   	set_indexr+   r,   r3   assert_equal)r   r   r   objr<   r`   rO   s          r=   )test_groupby_dropna_with_multiindex_inputr   V  s    
 ,RVQQ	
 	
 C }}T""H #C=	c
	"	"tu}}SE?mmK((	T%	(	(B WVVXXFOFH%%%%%r?   c            	         dt           j        ddt           j        gg dd} t          j        |           }|                    dd          }|j        }t           j        }dt          j        dd	g|
          dt          j        dg|
          t           j        t          j        ddg|
          i}t          |	                                |	                                          D ]\  }}t          j        ||           t          j        t          |                                          d	                   sJ t          |                                          dd	         ddgk    sJ d S )Ng1g2)r   r   rK   rI   rb   )groupr   r   Fr   r   rK   dtyperI   r   rb   )r1   r2   r)   r*   r+   indicesintparrayr   ru   r3   assert_numpy_array_equalisnanr/   r   )r   r9   r:   rO   r   r<   result_valuesexpected_valuess           r=   test_groupby_nan_includedr   t  sL   BFD$7oooNND	d		Bjjj//G_FGEbh1vU+++bhs%(((
!Qu---H
 +.fmmoox?P?P*Q*Q D D&
#M?CCCC8D''*+++++qs#d|333333r?   c                     t          j        t          j        ddggg d          } |                     ddg          } |                     ddgd                                          }| }t          j        ||           d S )	Nr   r   r   r   r   r   Fr   )	r)   r*   r1   r2   r   r+   firstr3   r4   )r9   rO   r<   s      r=   &test_groupby_drop_nan_with_multi_indexr     s}    	1~&	@	@	@B	sCj	!	!BZZc
5Z117799FH&(+++++r?   sequence_indexQ   r   UInt8Int8UInt16Int16UInt32Int32UInt64Int64Float32Float64categorystringstring[pyarrow]zpyarrow is not installed)reason)marksdatetime64[ns]	period[d]zSparse[float]test_seriesc                     d                      fdt          d          D                       }|dv rddt          j        dn%|dv rd	d
t          j        dnddt          j        dt          j        t          j        fd|D             |          g dd          }|                    ddd|d          }|r|d         }|	                                }i }t          |          D ]!\  }	}
|                    |
d          |	z   ||
<   "|dk    r4t          j        fd|D             |d         j        j        d          }nt          |t                     rL|                    d          r7t          j        t          j        fd|D             |          d          }n#t          j        fd|D             |d          }t          j        |                                |dd           }|s|                                }|sI|                                }|3|                    d          r|d                             |          |d<   t1          j        ||           d S )N c                 :    g | ]}d dddd|z  z  dz           S )xyz)r   r   rK   rI    ).0kr   s     r=   
<listcomp>z(test_no_sort_keep_na.<locals>.<listcomp>  s6    RRRASSS	!	!.QT":Q">	?RRRr?   rb   )r   r   r   r   )r   r   r   )r   r   z
2016-01-01z
2017-01-01r   rK   c                      g | ]
}|         S r   r   r   labeluniquess     r=   r   z(test_no_sort_keep_na.<locals>.<listcomp>  s    CCCgenCCCr?   r   )r   r   rK   rI   )keyr   r   F)r    sortas_indexobservedr   r   r   c                      g | ]
}|         S r   r   )r   r   r   s     r=   r   z(test_no_sort_keep_na.<locals>.<listcomp>  s    (((AWQZ(((r?   rD   Sparsec                      g | ]
}|         S r   r   r   s     r=   r   z(test_no_sort_keep_na.<locals>.<listcomp>  s    999gen999r?   c                      g | ]
}|         S r   r   r   s     r=   r   z(test_no_sort_keep_na.<locals>.<listcomp>  s    ===U'%.===r?   )r   rE   )r'   rE   r   )joinr   r)   NAr1   r2   r*   rL   r+   r,   	enumerategetCategoricalIndexcat
categories
isinstancestr
startswithrF   r   ru   to_framereset_indexastyper3   r   )r   r   r   r   sequencer9   r`   rO   summedrG   r   r'   r<   r   s   `            @r=   test_no_sort_keep_nar     s   F wwRRRRqRRR H
 ---#BE22	1	1	1$<beDD//	9CCCC(CCC5QQQ	
 	

 
B 
E%ehQV	W	WB WVVXXF F)) 3 3
U

5!,,s2u
#(((((((uIM$
 
 

 
E3		 XE$4$4X$>$> XH9999&999GGGe
 
 
 ====f===UQVWWWyCtLLLH '$$&& <''))!1!1(!;!;&uo44U;;HUOOFH%%%%%r?   c                    t          j        dddgi          }t          j        ||g|          }|r|d         n|}|                    |d|           }|                                }	t          j        t          |j                  g          }
t          j        ddgi|
          }|rt          j	        |	|d                    d S t          j
        |	|           d S )	Nr   r   rK   r   F)r    r   rI   r&   )r)   r*   rL   r+   r,   rF   r   r   r3   rM   r4   )r   r   r7   rA   r   r9   r   r   r`   rO   r'   r<   s               r=   test_null_is_null_for_dtyper     s     
sQFm	$	$BY~6eDDDF 
("S''bC	VE	5	5BVVXXFH(66788E|S1#Je444H 0
vx}55555
fh/////r?   
index_kind)r   singlemultic                 ^   t          j        t           j                            d                              g dd          d           }t          j        t          j        |g d          t          d          d          }|	                                }t          j        |g d	          
                    d
          |d<   |dk    rdg}n||dk    r.dg}|                    d          }|                    d          }nHddg}|d         |d<   |                    ddg          }|d         |d<   |                    ddg          }t          | |          }	t          | |          }
| dk    r@|dk    r:|	d                             |          f}	|
d                             |          f}
|                    |d|||          }|sL| dv rHt          j        t"          d          5   t%          ||           |	  d d d            n# 1 swxY w Y   d S |                    |||d          } t%          ||           |
                                 }|d         j                            d
g          |d<   |dk    r$|d         j                            d
g          |d<   |r4|dk    r|                    ddg          }nT|                    d          }n>|dk    r8| dk    r2|                    d          }|dk    r|                    d          }| dv rd|dk    r^|d         j                                        }|dk    r(d |D             }t          j        |g d          |d<   nd |D             }||d<   | dk    r5|                    ddi          }|r|d                             d           }|s|dk    s| dk    rd }nt2          }d}t5          j        ||          5   t%          ||           |	 }d d d            n# 1 swxY w Y   t5          j        ||           d S ) NrK   r   rK   N   sizer   rK   rI   r   r~   r   r   )r   rK   rI   rb   rb   r   r   r   x2corrwithr   r   Fr    r   r   r   )idxminidxmaxz(empty group due to unobserved categoriesr   T)r   r   r   r   r   )r   r   r   c                 6    g | ]}|d k    rt           j        n|S )rb   r1   r2   r   r   s     r=   r   z-test_categorical_reducers.<locals>.<listcomp>6  s&    >>>!QbffA>>>r?   c                 N    g | ]"}|d k    rt           j        t           j        fn|#S ))rb   rb   r   r   s     r=   r   z-test_categorical_reducers.<locals>.<listcomp>9  s.    MMM!v++rvrv&&1MMMr?   z*A grouping .* was excluded from the result)r1   appendrandomdefault_rngchoicer)   r*   Categoricalr   copyfillnar   r   dropr+   pytestraises
ValueErrorgetattrr   r   remove_categoriesru   tolistrenamer   r3   r   r   )reduction_funcr   r   r   r   ru   r9   	df_filledr   argsargs_filled	gb_keepna	gb_filledr<   warnr   rO   s                    r=   test_categorical_reducersr    s    Yry,,Q//66|||"6MMtTTF	nV			:::rKK
 
B
 		I^F|||DDDKKANNIcNWu	x		u\\#'',,		T{c74\\3+&&#C.	$''d44	">266D).)DDK##
g(=(=QT**,"1~**4*88:

UXD8   I  *>>>]H
 
 
 	6 	6 /GI~..55	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	!!$t!TTI1wy.11;?KKMMHSM%77<<HSMW!$+==qcBB 	3  ))3+66HH))#..HH	w		>V#;#;===--  }}T}22H---*2G2G#%,,..!!>>v>>>FN6iiiHHHHSMMMMfMMMF"HSM??Av;?77 	5'..t44H :((Nf,D,D
6C		#D	4	4	4 ; ;3N33T:; ; ; ; ; ; ; ; ; ; ; ; ; ; ; OFH%%%%%s$   -HHH-PPPc                    |dk    r6d}|                      t          j                            |d                     t	          j        t          j                            d                              g dd          d           }t          j
        t          j        |g d	
          t          d          d          }t          ||          }||d                                                  d         }	|dk    r*t          t          t!          |	                              }
n|dk    r|rB|r |d                             d          dz
  }nR|d                             d          dz
  }n2|j        d |	j        d                  d                                         }t!          |	          |gz  }
n t)          |	|          | }
t          j
        d|
i          }|                    dd|||          }|                    dd||          }d}|dk    rGt-          j        t0          |          5   t)          |d          | }d d d            n# 1 swxY w Y   n t)          ||          | } t)          ||          | }t3          ||d                                                  j                                        |j                                                  D ]'\  }}|j        dk    r||j        |<   ||j        |df<   (|dk    r>||d                                         |                    |          z  xx         dz  cc<   |dvr|                     d          }t-          j!        ||           d S )Nr  zBGH#49651 fillna may incorrectly reorders results when dropna=FalseF)r   strictrK   r   r   r   r   r   r~   r   r   r   cumcountngroupr   r   r   r   T)r    r   r   zLThe default fill_method='ffill' in DataFrameGroupBy.pct_change is deprecated
pct_changer   )rankdiffr  shiftint64)"applymarkerr
  markxfailr1   r  r  r  r  r)   r*   r  r   r   isnullr/   ri   nuniqueilocr'   r  r+   r3   r   r   r   r  ru   ravelndimnotnullger   r   )requesttransformation_funcr   r   r   r   ru   r9   r  null_group_valuesnull_group_datana_groupnull_group_resultr  	gb_dropnarO   r<   r'  values                      r=   test_categorical_transformersr4  M  s    h&&RFK--S-GGHHHYry,,Q//66|||"6MMtTTF	nV			:::rKK
 
B ##6;;D 2c7>>++,S1j((uS):%;%;<<==		(	( 	L =c7??%?881< c7??%?881<w;!2!8!;;<SAIIKKH/00H:=I'"35HII4Pc?%;<<

EH4(   I 

3thT
JJI
XCl**'SAAA 	= 	=5WY55t<F	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 9$788$?6wy"566=H
2c7>>"))++->-E-K-K-M-M  + +e =A"'HM$%*HM$'""h&&C""X[[%:%::;;;q@;;;"III??7++OFH%%%%%s   5IIImethodheadtailc                    t           j                            d                              g dd          }t	          j        t	          j        |g d          t          t          |                    d          }|	                    dd|||	          } t          ||                       }| d
k    r|d d d         }|dk    |dk                                    dk    z  |dk    |dk                                    dk    z  z  |d k    |d k                                    dk    z  z  }| d
k    r|d d d         }||         }	t          j        ||	           d S )NrK   r   r   r   r   r   r   Fr   r7  r   rt   )r1   r  r  r  r)   r*   r  r   ri   r+   r  cumsumr3   r4   )
r5  r   r   r   ru   r9   r`   rO   maskr<   s
             r=   test_categorical_head_tailr<    sm    Y""1%%,,\\\2>>F	nV			:::s6{{ASASTT
 
B 
Cth	W	WB WR  ""F" A+6Q;..00A5	6aKVq[0022a78	: dN$6688A=>	@ 	 DDbDz$xH&(+++++r?   c                     t           j                            d                              g dd          } t	          j        t	          j        | g d          t          t          |                     d          }|	                    ddd	          }|
                    d
           }|                                }t          j        ||           d S )NrK   r   r   r   r   r   r   Fr    r   c                 *    |                                  S Nr,   r   s    r=   r   z&test_categorical_agg.<locals>.<lambda>  s    aeegg r?   )r1   r  r  r  r)   r*   r  r   ri   r+   ro   r,   r3   r4   ru   r9   r`   rO   r<   s        r=   test_categorical_aggrD    s    Y""1%%,,\\\2>>F	nV			:::s6{{ASASTT
 
B 
C	6	6BVV%%&&FvvxxH&(+++++r?   c                     t           j                            d                              g dd          } t	          j        t	          j        | g d          t          t          |                     d          }|	                    ddd	          }|
                    d
           }|
                    d          }t          j        ||           d S )NrK   r   r   r   r   r   r   Fr>  c                 *    |                                  S r@  rA  rB  s    r=   r   z,test_categorical_transform.<locals>.<lambda>  s    AEEGG r?   r,   )r1   r  r  r  r)   r*   r  r   ri   r+   rh   r3   r4   rC  s        r=   test_categorical_transformrG    s    Y""1%%,,\\\2>>F	nV			:::s6{{ASASTT
 
B 
C	6	6B\\++,,F||E""H&(+++++r?   )2numpyr1   r
  pandas.compat.pyarrowr   pandas.core.dtypes.missingr   pandasr)   pandas._testing_testingr3   pandas.tests.groupbyr   r#  parametrizer2   r>   rB   rH   rL   rP   rZ   ra   
RangeIndexr/   r-   from_productrk   rq   arm_slow	Timestamp	TimedeltaPeriodr|   paramr   r   r   r   r   skipifr   objectr   r  r4  r<  rD  rG  r   r?   r=   <module>rY     s	        6 6 6 6 6 6 9 9 9 9 9 9           8 8 8 8 8 8  3Z#s$.e}D#;GG	
 3Z#rvc
3))))))&&& 	
 &- -' &-0  3Z#s$.e}D#;GG	
 3Z#rvc
RVSMB......+++ 	
 &- -' &-2 	Sz&$udm3PT+VVW#rv))))))&&& 	
 - - -  	S#rv&		1a&c
(K(K(KL#sBF#BIiiiS"&'9:::	

 
- -
 
- 	yry%SzLLLMBI***3RV2D;WWW	
	 	- -	 	- =11( ( 21( aV
""FJ#7u~"NN - - -(  3Z#s$.e}C:FF	
 3Z#rvc
3))))))%%% 	
 &- -' &-. 	l	#	#\R\,%?%?@	i	 	 ,",y"9"9:	<	 	 )")L"9"9:  )TB7OeZZZ=P+QRR- - SR  -: )S#rv.:J:J:JKK|||$#rv%	
 	
 	
 	S#rv.:J:J:JKKyyy!$	
 	
 	
 	+++7G7G7GHH|||$$	
 	
 	
 	+++7G7G7GHH|||$#	
 	
 	
/" "F, ,G" "F,( usCj(ABB3%#s!455D%=11& & 21 65 CB&64 4 4$, , , )55;;77+$$$-G %  	
 	
 	
 	/ 8 u665& 5& 769  87<5&p u6664.110 0 21 760" 'C'C'CDDP& P& EDP&f9& 9& 9&x FF#344, , 54,2	, 	, 	,	, 	, 	, 	, 	,r?   