
    hh>                       U d dl mZ d dlmZmZmZmZ d dlmZ d dl	m
Z
mZmZmZmZmZ d dlmZmZmZmZmZmZmZmZmZ d dlmZmZmZmZmZ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. e
rd d	l/m0Z0 d d
l1m2Z2 d dl3m4Z4 d dl5Z6d dl7Z8d dl9Z:d dl;m<Z<m=Z= d dl>m?Z?m@Z@ d dlAmBZB d dlCmDZD d dlmEZE d dlFmGZGmHZH d dl#mIZImJZJ d dlKmLZL d dlMmNZN d dlOmPZP d dlQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_ eZ`dead<   g dZb ed          ZcdZddead<    ed          Ze G d d e&ee         eee         ee          eeeee f                   Zf G d! d"ed#         ed$eegef         f         ed%         eefeee f         eeeee f                   Zh G d& d'efeee f         eeee f                   Zi G d( d)eheeed*f         eiedd*f         e$eeeeef                   ZjdS )+    )annotations)IteratorMappingSequenceSized)chain)TYPE_CHECKINGAnyLiteralProtocolTypeVaroverload)	CompliantDataFrameAnyCompliantExprT_contraCompliantLazyFrameAnyCompliantSeriesT
EagerExprTEagerSeriesTNativeDataFrameTNativeLazyFrameTNativeSeriesT)ArrowConvertibleDictConvertible
FromNativeNumpyConvertible
ToNarwhalsToNarwhalsT_co)assert_never)ValidateBackendVersionVersion_StoresNativecheck_columns_existis_compliant_seriesis_index_selectoris_rangeis_sequence_likeis_sized_multi_index_selectoris_slice_indexis_slice_none)BytesIO)Path)
ModuleTypeN)Self	TypeAlias)CompliantGroupByDataFrameGroupBy)EagerNamespace)SparkSession)IntoArrowTable)_EagerAllowedImpl_LazyAllowedImpl)Implementation_LimitedContext)	DataFrame)DType)ColumnNotFoundError)AsofJoinStrategy
IntoSchemaJoinStrategyMultiColSelectorMultiIndexSelectorPivotAggSingleIndexSelectorSizedMultiIndexSelectorSizedMultiNameSelectorSizeUnitUniqueKeepStrategy_2DArray_SliceIndex
_SliceNamer.   
Incomplete)CompliantDataFrameCompliantFrameCompliantLazyFrameEagerDataFrameT2dict[str, CompliantSeriesT] | dict[str, list[Any]]_ToDict_NativeFrameTc                  B   e Zd ZU dZded<   ded<   ded<   dWd
ZdXdZdYdZdZdZe	d[d            Z
ed\d            Zed]d            Zed^d            Zd^dZd_dZd`d"Zdad#Zdbd&Zdcd+Zddd.Zded6Zdfd;Zdgd>ZdhdAZdidCZdjdHZdddIZdkdMZdldRZdhdSZdmdUZ dVS )nrK   z)Common parts of `DataFrame`, `LazyFrame`.rQ   _native_framer6   _implementationr    _versionreturnr,   c                    d S N selfs    T/var/www/histauto/venv/lib/python3.11/site-packages/narwhals/_compliant/dataframe.py__native_namespace__z#CompliantFrame.__native_namespace__d             r
   c                    d S rX   rY   rZ   s    r\   __narwhals_namespace__z%CompliantFrame.__narwhals_namespace__e   r^   r_   dfr-   c                    d S rX   rY   )r[   rb   s     r\   _with_nativezCompliantFrame._with_nativef   r^   r_   versionc                    d S rX   rY   )r[   re   s     r\   _with_versionzCompliantFrame._with_versiong   r^   r_   datacontextr7   c                  d S rX   rY   clsrh   ri   s      r\   from_nativezCompliantFrame.from_nativeh       WZWZr_   Sequence[str]c                    d S rX   rY   rZ   s    r\   columnszCompliantFrame.columnsj       (+r_   c                    | j         S rX   )rS   rZ   s    r\   nativezCompliantFrame.nativel   s    !!r_   Mapping[str, DType]c                    d S rX   rY   rZ   s    r\   schemazCompliantFrame.schemap   s    -0Sr_   c                    d S rX   rY   rZ   s    r\   collect_schemazCompliantFrame.collect_schemas   r^   r_   rq   strictboolc                   d S rX   rY   )r[   rq   rz   s      r\   dropzCompliantFrame.dropt   r^   r_   subsetSequence[str] | Nonec                    d S rX   rY   r[   r~   s     r\   
drop_nullszCompliantFrame.drop_nullsu   r^   r_   c                    d S rX   rY   r[   rq   s     r\   explodezCompliantFrame.explodev   r^   r_   	predicate"CompliantExprT_contra | Incompletec                    d S rX   rY   )r[   r   s     r\   filterzCompliantFrame.filterw   r^   r_   keys/Sequence[str] | Sequence[CompliantExprT_contra]drop_null_keys-CompliantGroupBy[Self, CompliantExprT_contra]c                   d S rX   rY   r[   r   r   s      r\   group_byzCompliantFrame.group_byx   s	    
 9<r_   nintc                    d S rX   rY   r[   r   s     r\   headzCompliantFrame.head~   r^   r_   otherhowr=   left_onright_onsuffixstrc                   d S rX   rY   )r[   r   r   r   r   r   s         r\   joinzCompliantFrame.join   	     sr_   by_leftby_rightstrategyr;   c                   d S rX   rY   )r[   r   r   r   r   r   r   r   s           r\   	join_asofzCompliantFrame.join_asof   s	     sr_   mappingMapping[str, str]c                    d S rX   rY   )r[   r   s     r\   renamezCompliantFrame.rename   r^   r_   exprsr   c                    d S rX   rY   r[   r   s     r\   selectzCompliantFrame.select   r^   r_   column_namesc                    dS )z)`select` where all args are column names.NrY   )r[   r   s     r\   simple_selectzCompliantFrame.simple_select       r_   by
descendingbool | Sequence[bool]
nulls_lastc                   d S rX   rY   )r[   r   r   r   s       r\   sortzCompliantFrame.sort       sr_   c                    d S rX   rY   r   s     r\   tailzCompliantFrame.tail   r^   r_   keeprE   order_byc                   d S rX   rY   )r[   r~   r   r   s       r\   uniquezCompliantFrame.unique   	     sr_   onindexvariable_name
value_namec                    d S rX   rY   )r[   r   r   r   r   s        r\   unpivotzCompliantFrame.unpivot   r   r_   c                    d S rX   rY   r   s     r\   with_columnszCompliantFrame.with_columns   r^   r_   namec                    d S rX   rY   r[   r   r   s      r\   with_row_indexzCompliantFrame.with_row_index   r^   r_   N)rV   r,   )rV   r
   )rb   rQ   rV   r-   )re   r    rV   r-   )rh   rQ   ri   r7   rV   r-   )rV   ro   )rV   rQ   )rV   ru   )rq   ro   rz   r{   rV   r-   )r~   r   rV   r-   )rq   ro   rV   r-   )r   r   rV   r-   )r   r   r   r{   rV   r   )r   r   rV   r-   )r   r-   r   r=   r   r   r   r   r   r   rV   r-   )r   r-   r   r   r   r   r   r   r   r   r   r;   r   r   rV   r-   )r   r   rV   r-   r   r   rV   r-   )r   r   rV   r-   )r   r   r   r   r   r{   rV   r-   )r~   r   r   rE   r   r   rV   r-   )
r   r   r   r   r   r   r   r   rV   r-   )r   r   r   ro   rV   r-   )!__name__
__module____qualname____doc____annotations__r]   ra   rd   rg   classmethodrm   propertyrq   rt   rw   ry   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rY   r_   r\   rK   rK   X   s         43    ####55550000::::::::ZZZ [Z+++ X+" " " X" 000 X08888HHHHCCCC::::PPPP< < < < ('''   
 
 
 
 >===@@@@       ('''       GFFFMMMMMMr_   rK   c                     e Zd ZdudZedvd            Zedwd            Zedxd            Zedyd            ZdzdZ	d{dZ
ed|d            ZdudZd}d Zd~d$Zdd(Zdd.Zdd3Zdd5Zdd9Zdd:Zdd@ZddJZddLZddNZddSZddUZddWZddYZedd]            Zedd`            ZddbZdcddddjZ ddkZ!eddn            Z"eddp            Z"ddsZ"ddtZ#dcS )rJ   rV   r-   c                    d S rX   rY   rZ   s    r\   __narwhals_dataframe__z)CompliantDataFrame.__narwhals_dataframe__   r^   r_   rh   r3   ri   r7   c                  d S rX   rY   rk   s      r\   
from_arrowzCompliantDataFrame.from_arrow   rn   r_   Mapping[str, Any]rw   IntoSchema | Nonec                  d S rX   rY   rl   rh   ri   rw   s       r\   	from_dictzCompliantDataFrame.from_dict   r   r_   Sequence[Mapping[str, Any]]c                  d S rX   rY   r   s       r\   
from_dictszCompliantDataFrame.from_dicts   r   r_   rF   !IntoSchema | Sequence[str] | Nonec                  d S rX   rY   r   s       r\   
from_numpyzCompliantDataFrame.from_numpy   r   r_   dtyper
   copybool | Nonec                   d S rX   rY   )r[   r   r   s      r\   	__array__zCompliantDataFrame.__array__   r^   r_   itemetuple[SingleIndexSelector | MultiIndexSelector[CompliantSeriesT], MultiColSelector[CompliantSeriesT]]c                    d S rX   rY   )r[   r   s     r\   __getitem__zCompliantDataFrame.__getitem__   r   r_   tuple[int, int]c                    d S rX   rY   rZ   s    r\   shapezCompliantDataFrame.shape   rr   r_   c                    d S rX   rY   rZ   s    r\   clonezCompliantDataFrame.clone   r^   r_   unitrD   int | floatc                    d S rX   rY   )r[   r   s     r\   estimated_sizez!CompliantDataFrame.estimated_size   r^   r_   r   r   offsetc                    d S rX   rY   )r[   r   r   s      r\   gather_everyzCompliantDataFrame.gather_every   r^   r_   r   r   r   c                    d S rX   rY   )r[   r   s     r\   
get_columnzCompliantDataFrame.get_column   r^   r_   r   r   r   r{   DataFrameGroupBy[Self, Any]c                   d S rX   rY   r   s      r\   r   zCompliantDataFrame.group_by   s	    
 '*cr_   row
int | Nonecolumnint | str | Nonec                    d S rX   rY   )r[   r   r   s      r\   r   zCompliantDataFrame.item   r^   r_   Iterator[CompliantSeriesT]c                    d S rX   rY   rZ   s    r\   iter_columnszCompliantDataFrame.iter_columns   r^   r_   namedbuffer_size7Iterator[tuple[Any, ...]] | Iterator[Mapping[str, Any]]c                   d S rX   rY   )r[   r  r  s      r\   	iter_rowszCompliantDataFrame.iter_rows       BE#r_   c                    d S rX   rY   rZ   s    r\   	is_uniquezCompliantDataFrame.is_unique   r^   r_   backend_LazyAllowedImpl | NonesessionSparkSession | Noner   c                   d S rX   rY   )r[   r  r  s      r\   lazyzCompliantDataFrame.lazy        #r_   r   ro   r   r   valuesaggregate_functionPivotAgg | Nonesort_columns	separatorc                   d S rX   rY   )r[   r   r   r  r  r  r  s          r\   pivotzCompliantDataFrame.pivot   s	     sr_   tuple[Any, ...]c                    d S rX   rY   )r[   r   s     r\   r   zCompliantDataFrame.row   r^   r_   7Sequence[tuple[Any, ...]] | Sequence[Mapping[str, Any]]c                   d S rX   rY   )r[   r  s     r\   rowszCompliantDataFrame.rows   r  r_   fractionfloat | Nonewith_replacementseedc                   d S rX   rY   )r[   r   r  r   r!  s        r\   samplezCompliantDataFrame.sample  	     sr_   pa.Tablec                    d S rX   rY   rZ   s    r\   to_arrowzCompliantDataFrame.to_arrow	  r^   r_   pd.DataFramec                    d S rX   rY   rZ   s    r\   	to_pandaszCompliantDataFrame.to_pandas
  r^   r_   pl.DataFramec                    d S rX   rY   rZ   s    r\   	to_polarszCompliantDataFrame.to_polars  r^   r_   	as_seriesLiteral[True]dict[str, CompliantSeriesT]c                   d S rX   rY   r[   r.  s     r\   to_dictzCompliantDataFrame.to_dict  s    SVSVr_   Literal[False]dict[str, list[Any]]c                   d S rX   rY   r2  s     r\   r3  zCompliantDataFrame.to_dict  s    MPSr_   rO   c                   d S rX   rY   r2  s     r\   r3  zCompliantDataFrame.to_dict  s    =@Sr_   N)maintain_orderr~   r   rE   r8  r   c                   d S rX   rY   )r[   r~   r   r8  r   s        r\   r   zCompliantDataFrame.unique  r$  r_   c                    d S rX   rY   r   s      r\   r   z!CompliantDataFrame.with_row_index  r^   r_   fileNonec                    d S rX   rY   r[   r;  s     r\   	write_csvzCompliantDataFrame.write_csv  s    ,/Cr_   str | Path | BytesIOc                    d S rX   rY   r>  s     r\   r?  zCompliantDataFrame.write_csv  s    =@Sr_   str | Path | BytesIO | None
str | Nonec                    d S rX   rY   r>  s     r\   r?  zCompliantDataFrame.write_csv   r^   r_   c                    d S rX   rY   r>  s     r\   write_parquetz CompliantDataFrame.write_parquet!  r^   r_   rV   r-   )rh   r3   ri   r7   rV   r-   )rh   r   ri   r7   rw   r   rV   r-   )rh   r   ri   r7   rw   r   rV   r-   )rh   rF   ri   r7   rw   r   rV   r-   )r   r
   r   r   rV   rF   )r   r   rV   r-   )rV   r   )r   rD   rV   r   )r   r   r   r   rV   r-   )r   r   rV   r   )r   r   r   r{   rV   r   )r   r   r   r   rV   r
   )rV   r   )r  r{   r  r   rV   r  )rV   r   )r  r  r  r  rV   r   )r   ro   r   r   r  r   r  r  r  r{   r  r   rV   r-   )r   r   rV   r  )r  r{   rV   r  )
r   r   r  r  r   r{   r!  r   rV   r-   )rV   r%  )rV   r(  )rV   r+  )r.  r/  rV   r0  )r.  r4  rV   r5  )r.  r{   rV   rO   )
r~   r   r   rE   r8  r   r   r   rV   r-   )r   r   r   r   rV   r-   )r;  r<  rV   r   r;  r@  rV   r<  )r;  rB  rV   rC  )$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   r3  r   r   r?  rF  rY   r_   r\   rJ   rJ      s        2111ZZZ [Z   [    [    [ KJJJ    +++ X+    @@@@<<<<<<<<* * * * JIII====F F F F 1000$ $ $ $	 	 	 	 6555F F F F    (''',,,,,,,,VVV XVPPP XPA A A A '+      UTTT/// X/@@@ X@MMMMDDDDDDr_   rJ   )rF   rF   z_ToDict[CompliantSeriesT])r%  r3   c                  6    e Zd ZddZddZddZddZddZdS )rL   rV   r-   c                    d S rX   rY   rZ   s    r\   __narwhals_lazyframe__z)CompliantLazyFrame.__narwhals_lazyframe__(  r^   r_   Iterator[Any]c                    d S rX   rY   rZ   s    r\   _iter_columnsz CompliantLazyFrame._iter_columns*  r^   r_   r   r   c                    dS )zk`select` where all args are aggregations or literals.

        (so, no broadcasting is necessary).
        NrY   r   s     r\   	aggregatezCompliantLazyFrame.aggregate+  s	    
 	r_   r  _EagerAllowedImpl | Nonekwargsr
   r   c                    d S rX   rY   )r[   r  rR  s      r\   collectzCompliantLazyFrame.collect2  r  r_   r;  r@  r<  c                    d S rX   rY   r>  s     r\   sink_parquetzCompliantLazyFrame.sink_parquet5  r^   r_   NrG  )rV   rL  r   )r  rQ  rR  r
   rV   r   rH  )r   r   r   rK  rN  rP  rT  rV  rY   r_   r\   rL   rL   $  sa         21111111   $ $ $ $ DCCCCCr_   rL   c                      e Zd Zed9d            Zd:dZd;dZd<dZddd=dZd>dZ	d?dZ
d@dZdAdZdBdZedCd%            ZdDd(ZdEd*ZdFd+ZdGd-ZdHd.ZdId0ZdJd3ZdKd7Zd8S )LrM   rV   tuple[int, ...]c                4    | j                                         S rX   )rT   _backend_versionrZ   s    r\   rZ  zEagerDataFrame._backend_version@  s    #44666r_   OEagerNamespace[Self, EagerSeriesT, EagerExprT, NativeDataFrameT, NativeSeriesT]c                    d S rX   rY   rZ   s    r\   ra   z%EagerDataFrame.__narwhals_namespace__D  s	     sr_   DataFrame[NativeDataFrameT]c                :    | j                             | d          S )Nfull)level)rU   	dataframerZ   s    r\   to_narwhalszEagerDataFrame.to_narwhalsJ  s    }&&t6&:::r_   r   r   r-   c                     | j         | S rX   )r   r   s     r\   rP  zEagerDataFrame.aggregateM  s     t{E""r_   T)validate_column_namesrb   r   rd  r{   c                   d S rX   rY   )r[   rb   rd  s      r\   rd   zEagerDataFrame._with_nativeW  r   r_   r~   ro   ColumnNotFoundError | Nonec                .    t          || j                  S )N)	available)r"   rq   r   s     r\   _check_columns_existz#EagerDataFrame._check_columns_exist[  s    "6T\BBBBr_   exprr   c               R     ||           }t          |          dk    sJ |d         S )z6Evaluate `expr` and ensure it has a **single** output.   r   )len)r[   rj  results      r\   _evaluate_exprzEagerDataFrame._evaluate_expr^  s0    )-d6{{aayr_   Sequence[EagerSeriesT]c                ^     t          t          j         fd|D                                 S )Nc              3  B   K   | ]}                     |          V  d S rX   )_evaluate_into_expr).0rj  r[   s     r\   	<genexpr>z6EagerDataFrame._evaluate_into_exprs.<locals>.<genexpr>i  s1      QQ4 8 8 > >QQQQQQr_   )tupler   from_iterabler   s   ` r\   _evaluate_into_exprsz#EagerDataFrame._evaluate_into_exprsd  s:     QQQQ5QQQQQ
 
 	
r_   c                   |                     |           } ||           }t          |          d |D             x}k    rd| d| }t          |          |S )a  Return list of raw columns.

        For eager backends we alias operations at each step.

        As a safety precaution, here we can check that the expected result names match those
        we were expecting from the various `evaluate_output_names` / `alias_output_names` calls.

        Note that for PySpark / DuckDB, we are less free to liberally set aliases whenever we want.
        c                    g | ]	}|j         
S rY   )r   )rt  ss     r\   
<listcomp>z6EagerDataFrame._evaluate_into_expr.<locals>.<listcomp>y  s    666!qv666r_   z"Safety assertion failed, expected z, got )_evaluate_aliaseslistAssertionError)r[   rj  aliasesrn  result_aliasesmsgs         r\   rs  z"EagerDataFrame._evaluate_into_exprl  sx     ((..d==66v6666N
 
 WwVVnVVC %%%r_   r   r
   c                   dS )z@Extract native Series, broadcasting to `len(self)` if necessary.NrY   )r[   r   s     r\   _extract_comparandz!EagerDataFrame._extract_comparand  r   r_   rh   rF   rq   r   	list[str]c               h    t          |p#d t          | j        d                   D                       S )Nc              3      K   | ]	}d | V  
dS )column_NrY   )rt  xs     r\   ru  z5EagerDataFrame._numpy_column_names.<locals>.<genexpr>  s(      LL!!LLLLLLr_   rl  )r~  ranger   )rh   rq   s     r\   _numpy_column_namesz"EagerDataFrame._numpy_column_names  s4     GLLLuTZ]7K7KLLLMMMr_   r  &SizedMultiIndexSelector[NativeSeriesT]c                    d S rX   rY   r[   r  s     r\   _gatherzEagerDataFrame._gather  r^   r_   _SliceIndex | rangec                    d S rX   rY   r  s     r\   _gather_slicezEagerDataFrame._gather_slice  r^   r_   c                    d S rX   rY   r   s     r\   _select_multi_indexz"EagerDataFrame._select_multi_index  r   r_   %SizedMultiNameSelector[NativeSeriesT]c                    d S rX   rY   r   s     r\   _select_multi_namez!EagerDataFrame._select_multi_name  r   r_   c                    d S rX   rY   r   s     r\   _select_slice_indexz"EagerDataFrame._select_slice_index  r^   r_   rH   c                    d S rX   rY   r   s     r\   _select_slice_namez!EagerDataFrame._select_slice_name  r^   r_   r   ]tuple[SingleIndexSelector | MultiIndexSelector[EagerSeriesT], MultiColSelector[EagerSeriesT]]c                Z   |\  }}| }t          |          sHt          |t                    r't          |          dk    r|                                S t          |          rtt          |          st          |          r|                    |          }nt          |          r| 
                    |j                  }n|
                    |          }nt          |t                    r|                    |          }n^t          |          r|                     |j                  }n4t          |          r|                     |          }nt!          |           t          |          st          |t"                    r|                    |g          }nt          |t          t&          f          r|                    |          }n^t          |          r|                    |j                  }n4t+          |          r|                    |          }nt!          |           |S )Nr   )r)   
isinstancer   rm  r   r$   r(   r%   r  r#   r  rt   slicer  r  r&   r   r   r  r  r  r'   )r[   r   r  rq   	compliants        r\   r   zEagerDataFrame.__getitem__  s    g	W%% 	&'5)) *c'lla.?.? ''))) )) &!'** Ghw.?.? G ) = =g F FII(11 G $ 8 8 H HII ) = =g F FIIGU++ &%88AA		$W-- & 33GNCC		!'** & 33G<<		W%%%T"" 
	#$$$ 	#%--tf55		D5%.11 #%33D99		$T** #%--dk::		.t44 #%--d33		T"""r_   r;  r@  r<  c                ,    |                      |          S rX   )rF  r>  s     r\   rV  zEagerDataFrame.sink_parquet  s    !!$'''r_   N)rV   rX  )rV   r[  )rV   r]  )r   r   rV   r-   )rb   r   rd  r{   rV   r-   )r~   ro   rV   rf  )rj  r   rV   r   )r   r   rV   rp  )rj  r   rV   rp  )r   r   rV   r
   )rh   rF   rq   r   rV   r  )r  r  rV   r-   )r  r  rV   r-   )rq   r  rV   r-   )rq   r  rV   r-   )rq   r  rV   r-   )rq   rH   rV   r-   )r   r  rV   r-   rH  )r   r   r   r   rZ  ra   rb  rP  rd   ri  ro  rx  rs  r  staticmethodr  r  r  r  r  r  r  r   rV  rY   r_   r\   rM   rM   8  s        7 7 7 X7   ; ; ; ;# # # # FJ     C C C C   
 
 
 
   &    N N N \N
 QPPPCCCC       MLLLBBBB( ( ( (T( ( ( ( ( (r_   rM   r]  )k
__future__r   collections.abcr   r   r   r   	itertoolsr   typingr	   r
   r   r   r   r   narwhals._compliant.typingr   r   r   r   r   r   r   r   r   narwhals._translater   r   r   r   r   r   narwhals._typing_compatr   narwhals._utilsr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   ior*   pathlibr+   typesr,   pandaspdpolarsplpyarrowpatyping_extensionsr-   r.   narwhals._compliant.group_byr/   r0   narwhals._compliant.namespacer1   narwhals._spark_like.utilsr2   r3   narwhals._typingr4   r5   r6   r7   narwhals.dataframer8   narwhals.dtypesr9   narwhals.exceptionsr:   narwhals.typingr;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   r   __all__rN   rP   rQ   rK   r   rJ   rL   rM   rY   r_   r\   <module>r     s   " " " " " " " > > > > > > > > > > > >       K K K K K K K K K K K K K K K K
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                1 0 0 0 0 0                           $       11111111OOOOOOOO<<<<<<777777222222DDDDDDDD????????,,,,,,%%%%%%777777                               "  J
Z
Z
ZGCLLI I I I I((TN TN TN TN TN- }~"M>AB	TN TN TNnrE rE rE rE rE+,/c1BBC12	(*:NJK46FVWrE rE rEjD D D D D(*:NJK"$4nDED D D(F( F( F( F( F(j"24QQ z<1NNO\:'7FGF( F( F( F( F(r_   