
    hh5                    ~   d dl mZ d dlmZmZmZmZmZ d dl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 d dlmZmZmZmZ d dlmZmZ d dlmZm Z m!Z!m"Z"m#Z# ersd d	l$m%Z%m&Z&m'Z' d d
l(m)Z) d dl*Z+d dl,Z-d dl.Z/d dl0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7 d dlm8Z8m9Z9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZG  G d de3eedf                   ZH eddd          ZIg dZJ G d ded         eee         ed         eee                   ZK G d deKe         ee                   ZL G d  d!ee         e e         eeef                   ZM G d" d#eMeef         eeef                   ZN G d$ d%eMeef         e	e         eeef                   ZO G d& d'eMeef         e
e         eeef                   ZP G d( d)eMeef         ee         eeef                   ZQ G d* d+eMeef         ee         eeef                   ZR G d, d-eMeef         ee         eeef                   ZS G d. d/eeeIf                   ZTdS )0    )annotations)TYPE_CHECKINGAnyGenericLiteralProtocol)CatNamespaceDateTimeNamespaceListNamespaceStringNamespaceStructNamespace)CompliantColumn)CompliantSeriesT_coEagerDataFrameAnyEagerSeriesT_coNativeSeriesTNativeSeriesT_co)FromIterable
FromNativeNumpyConvertible
ToNarwhals)TypeVarassert_never)_StoresCompliant_StoresNativeis_compliant_seriesis_sized_multi_index_selectorunstable)IterableIteratorSequence)
ModuleTypeN)NotRequiredSelf	TypedDict)CompliantDataFrame)EagerNamespace)ImplementationVersion_LimitedContext)DType)Series)Into1DArray	IntoDTypeMultiIndexSelectorPythonLiteralRollingInterpolationMethodSizedMultiIndexSelector_1DArray_SliceIndexc                  $    e Zd ZU ded<   ded<   dS )HistDataz/NotRequired[list[float] | _1DArray | list[Any]]
breakpointz2NativeSeriesT | _1DArray | _CountsT_co | list[Any]countN)__name__
__module____qualname____annotations__     Q/var/www/histauto/venv/lib/python3.11/site-packages/narwhals/_compliant/series.pyr6   r6   7   s*         CCCCAAAAAAr>   r6   _CountsT_coIterable[Any]T)bound	covariant)	CompliantSeriesEagerSeriesEagerSeriesCatNamespaceEagerSeriesDateTimeNamespaceEagerSeriesHistEagerSeriesListNamespaceEagerSeriesNamespaceEagerSeriesStringNamespaceEagerSeriesStructNamespacec                     e Zd ZU ded<   edd            ZddZdd	Zedd            Z	ddZ
ddZddZedd            Zedd            ZddZdd!Zdd$Zdd&Zdd(Zedd*            Zed+d,d-dd1            Zdd2Zdd3Zdd4Zdd5Zdd6Zdd7Zdd8Zdd9Zdd:Zdd;Zdd=Z dd?Z!dd@Z"ddCZ#ddDZ$ddEZ%ddGZ&ddJZ'ddLZ(ddMZ)ddNZ*ddPZ+ddQZ,ddRZ-ddSZ.ddTZ/ddXZ0dd\Z1dd`Z2ddaZ3ddbZ4dddZ5ddfZ6ddgZ7ddhZ8ddjZ9ddnZ:ddoZ;ddqZ<ddsZ=dduZ>dvdwddyZ?dd~Z@ddZAddZBeCdd            ZDeCdd            ZEd,S )rD   r(   _implementationreturnr   c                    d S Nr=   selfs    r?   nativezCompliantSeries.nativeV   s    '*sr>   r$   c                    | S rQ   r=   rR   s    r?   __narwhals_series__z#CompliantSeries.__narwhals_series__X   s    r>   r"   c                    d S rQ   r=   rR   s    r?   __native_namespace__z$CompliantSeries.__native_namespace__[         r>   datacontextr*   c                  d S rQ   r=   clsrZ   r[   s      r?   from_nativezCompliantSeries.from_native\   s    WZWZr>   Series[NativeSeriesT]c                :    | j                             | d          S )Nfull)level)_versionseriesrR   s    r?   to_narwhalszCompliantSeries.to_narwhals^   s    }##D#777r>   re   r   c                    d S rQ   r=   rS   re   s     r?   _with_nativezCompliantSeries._with_nativea   rY   r>   versionr)   c                    d S rQ   r=   )rS   rj   s     r?   _with_versionzCompliantSeries._with_versionb   rY   r>   r+   c                    d S rQ   r=   rR   s    r?   dtypezCompliantSeries.dtypee   s    !cr>   strc                    d S rQ   r=   rR   s    r?   namezCompliantSeries.nameg   s    3r>   rn   copybool | Noner3   c                   d S rQ   r=   )rS   rn   rr   s      r?   	__array__zCompliantSeries.__array__i   rY   r>   otherboolc                    d S rQ   r=   rS   rv   s     r?   __contains__zCompliantSeries.__contains__j   rY   r>   itemMultiIndexSelector[Self]c                    d S rQ   r=   rS   r{   s     r?   __getitem__zCompliantSeries.__getitem__k   rY   r>   Iterator[Any]c                    d S rQ   r=   rR   s    r?   __iter__zCompliantSeries.__iter__l   rY   r>   intc                *    t          | j                  S rQ   )lenrT   rR   s    r?   __len__zCompliantSeries.__len__m   s    4;r>   r-   c                  d S rQ   r=   r]   s      r?   
from_numpyzCompliantSeries.from_numpyp   s    TWTWr>    N)rq   rn   rA   rq   IntoDType | Nonec                  d S rQ   r=   )r^   rZ   r[   rq   rn   s        r?   from_iterablezCompliantSeries.from_iterabler   s	     sr>   c                    d S rQ   r=   ry   s     r?   __radd__zCompliantSeries.__radd__|   rY   r>   c                    d S rQ   r=   ry   s     r?   __rand__zCompliantSeries.__rand__}   rY   r>   c                    d S rQ   r=   ry   s     r?   __rmul__zCompliantSeries.__rmul__~   rY   r>   c                    d S rQ   r=   ry   s     r?   __ror__zCompliantSeries.__ror__   rY   r>   c                    d S rQ   r=   rR   s    r?   allzCompliantSeries.all   rY   r>   c                    d S rQ   r=   rR   s    r?   anyzCompliantSeries.any   rY   r>   c                    d S rQ   r=   rR   s    r?   arg_maxzCompliantSeries.arg_max   rY   r>   c                    d S rQ   r=   rR   s    r?   arg_minzCompliantSeries.arg_min   rY   r>   c                    d S rQ   r=   rR   s    r?   arg_truezCompliantSeries.arg_true   rY   r>   c                    d S rQ   r=   rR   s    r?   r8   zCompliantSeries.count   rY   r>   	predicatec                    d S rQ   r=   )rS   r   s     r?   filterzCompliantSeries.filter   rY   r>   r0   c                    d S rQ   r=   rR   s    r?   firstzCompliantSeries.first   rY   r>   c                    d S rQ   r=   rR   s    r?   lastzCompliantSeries.last   rY   r>   noffsetc                    d S rQ   r=   )rS   r   r   s      r?   gather_everyzCompliantSeries.gather_every   rY   r>   c                    d S rQ   r=   rS   r   s     r?   headzCompliantSeries.head   rY   r>   c                2    |                                  dk    S Nr   )r   rR   s    r?   is_emptyzCompliantSeries.is_empty   s    xxzzQr>   
descendingc                   d S rQ   r=   )rS   r   s     r?   	is_sortedzCompliantSeries.is_sorted   rY   r>   index
int | Nonec                    d S rQ   r=   )rS   r   s     r?   r{   zCompliantSeries.item   rY   r>   float | Nonec                    d S rQ   r=   rR   s    r?   kurtosiszCompliantSeries.kurtosis   rY   r>   c                    d S rQ   r=   rR   s    r?   r   zCompliantSeries.len   rY   r>   c                    d S rQ   r=   rR   s    r?   maxzCompliantSeries.max   rY   r>   floatc                    d S rQ   r=   rR   s    r?   meanzCompliantSeries.mean   rY   r>   c                    d S rQ   r=   rR   s    r?   medianzCompliantSeries.median   rY   r>   c                    d S rQ   r=   rR   s    r?   minzCompliantSeries.min   rY   r>   c                    d S rQ   r=   rR   s    r?   n_uniquezCompliantSeries.n_unique   rY   r>   c                    d S rQ   r=   rR   s    r?   
null_countzCompliantSeries.null_count   rY   r>   quantileinterpolationr1   c                    d S rQ   r=   )rS   r   r   s      r?   r   zCompliantSeries.quantile   s    r>   fractionwith_replacementseedc                   d S rQ   r=   )rS   r   r   r   r   s        r?   samplezCompliantSeries.sample   s	     sr>   indicesint | Sequence[int]valuesc                    d S rQ   r=   )rS   r   r   s      r?   scatterzCompliantSeries.scatter   rY   r>   c                    d S rQ   r=   r   s     r?   shiftzCompliantSeries.shift   rY   r>   c                    d S rQ   r=   rR   s    r?   skewzCompliantSeries.skew   rY   r>   
nulls_lastc                   d S rQ   r=   )rS   r   r   s      r?   sortzCompliantSeries.sort   rY   r>   ddofc                   d S rQ   r=   rS   r   s     r?   stdzCompliantSeries.std   rY   r>   c                    d S rQ   r=   rR   s    r?   sumzCompliantSeries.sum   rY   r>   c                    d S rQ   r=   r   s     r?   tailzCompliantSeries.tail   rY   r>   pa.Array[Any]c                    d S rQ   r=   rR   s    r?   to_arrowzCompliantSeries.to_arrow   rY   r>   	separator
drop_first'CompliantDataFrame[Self, Any, Any, Any]c                   d S rQ   r=   )rS   r   r   s      r?   
to_dummieszCompliantSeries.to_dummies       25#r>   c                    d S rQ   r=   rR   s    r?   to_framezCompliantSeries.to_frame   rY   r>   	list[Any]c                    d S rQ   r=   rR   s    r?   to_listzCompliantSeries.to_list   rY   r>   pd.Series[Any]c                    d S rQ   r=   rR   s    r?   	to_pandaszCompliantSeries.to_pandas   rY   r>   	pl.Seriesc                    d S rQ   r=   rR   s    r?   	to_polarszCompliantSeries.to_polars   rY   r>   F)maintain_orderr   c                   d S rQ   r=   )rS   r   s     r?   uniquezCompliantSeries.unique   rY   r>   r   parallel
str | None	normalizec                   d S rQ   r=   )rS   r   r   rq   r   s        r?   value_countszCompliantSeries.value_counts   r   r>   c                   d S rQ   r=   r   s     r?   varzCompliantSeries.var   rY   r>   maskc                    d S rQ   r=   )rS   r  rv   s      r?   zip_withzCompliantSeries.zip_with   rY   r>   binslist[float]include_breakpointc                   dS )z(`Series.hist(bins=..., bin_count=None)`.Nr=   )rS   r  r  s      r?   hist_from_binszCompliantSeries.hist_from_bins   	    
 	r>   	bin_countc                   dS )z(`Series.hist(bins=None, bin_count=...)`.Nr=   )rS   r  r  s      r?   hist_from_bin_countz#CompliantSeries.hist_from_bin_count   r
  r>   rO   r   )rO   r$   )rO   r"   )rZ   r   r[   r*   rO   r$   )rO   r`   )re   r   rO   r$   )rj   r)   rO   r$   )rO   r+   )rO   ro   )rn   r   rr   rs   rO   r3   )rv   r   rO   rw   )r{   r|   rO   r   )rO   r   )rO   r   )rZ   r-   r[   r*   rO   r$   )
rZ   rA   r[   r*   rq   ro   rn   r   rO   r$   )rv   r   rO   r$   rO   rw   )r   r   rO   r$   )rO   r0   )r   r   r   r   rO   r$   )r   r   rO   r$   )r   rw   rO   rw   )r   r   rO   r   )rO   r   )rO   r   )rO   r   )r   r   r   r1   rO   r   )
r   r   r   r   r   rw   r   r   rO   r$   )r   r   r   r   rO   r$   )r   rw   r   rw   rO   r$   )r   r   rO   r   )rO   r   )r   ro   r   rw   rO   r   )rO   r   )rO   r   )rO   r   )rO   r   )r   rw   rO   r$   )
r   rw   r   rw   rq   r   r   rw   rO   r   )r  r   rv   r   rO   r$   )r  r  r  rw   rO   r   )r  r   r  rw   rO   r   )Fr9   r:   r;   r<   propertyrT   rV   rX   classmethodr_   rf   ri   rl   rn   rq   ru   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r   r   r   r   r   r   r   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r	  r  r=   r>   r?   rD   rD   K   s         $###*** X*    6555ZZZ [Z8 8 8 8 5444:::: !!! X! XJJJJ3333EEEE,,,,        WWW [W "&     [ 0///////////....!!!!!!!!####1111))))((((<<<<''''    :9991111++++    """"""""$$$$       NMMM((((''''FFFF----'''',,,,6 6 6 6 GFFF''''....))))/4BBBBBB6 6 6 6 .---::::    X    X  r>   rD   )r3   r-   r`   c                     e Zd ZU ded<   ded<   ded<   ded<   ed,d            Zed-d            Zd.dZddd/dZ	d0dZ
d1dZd2dZd3d Zed4d"            Zed5d$            Zed6d&            Zed7d(            Zed8d*            Zd+S )9rE   r   _native_seriesr(   rN   r)   rd   rw   
_broadcastrO   tuple[int, ...]c                4    | j                                         S rQ   )rN   _backend_versionrR   s    r?   r  zEagerSeries._backend_version   s    #44666r>   re   r$   Sequence[Self]c                    dS )a  Ensure all of `series` have the same length (and index if `pandas`).

        Scalars get broadcasted to the full length of the longest Series.

        This is useful when you need to construct a full Series anyway, such as:

            DataFrame.select(...)

        It should not be used in binary operations, such as:

            nw.col("a") - nw.col("a").mean()

        because then it's more efficient to extract the right-hand-side's single element as a scalar.
        Nr=   )r^   re   s     r?   _align_full_broadcastz!EagerSeries._align_full_broadcast   s	      	r>   valuec                >    |                      |g| j        |           S )N)rq   r[   )r   rq   )rS   r  s     r?   _from_scalarzEagerSeries._from_scalar   s!    !!5'	4!HHHr>   F)preserve_broadcastr   r  c                   dS )a  Return a new `CompliantSeries`, wrapping the native `series`.

        In cases when operations are known to not affect whether a result should
        be broadcast, we can pass `preserve_broadcast=True`.
        Set this with care - it should only be set for unary expressions which don't
        change length or order, such as `.alias` or `.fill_null`. If in doubt, don't
        set it, you probably don't need it.
        Nr=   )rS   re   r  s      r?   ri   zEagerSeries._with_native   s	     	r>   2EagerNamespace[Any, Self, Any, Any, NativeSeriesT]c                    d S rQ   r=   rR   s    r?   __narwhals_namespace__z"EagerSeries.__narwhals_namespace__   s    =@Sr>   rows&SizedMultiIndexSelector[NativeSeriesT]c                    d S rQ   r=   rS   r#  s     r?   _gatherzEagerSeries._gather   rY   r>   _SliceIndex | rangec                    d S rQ   r=   r&  s     r?   _gather_slicezEagerSeries._gather_slice   rY   r>   r{   r|   c                    t          |t          t          f          r|                     |          S t	          |          r|                     |j                  S t          |          r|                     |          S t          |           d S rQ   )	
isinstancesliceranger*  r   r'  rT   r   r   r~   s     r?   r   zEagerSeries.__getitem__   s    dUEN++ 	,%%d+++t$$ 	&<<,,,*400 	&<<%%%Tr>   /EagerSeriesStringNamespace[Self, NativeSeriesT]c                    d S rQ   r=   rR   s    r?   ro   zEagerSeries.str  s    FIcr>   1EagerSeriesDateTimeNamespace[Self, NativeSeriesT]c                    d S rQ   r=   rR   s    r?   dtzEagerSeries.dt  s    GJsr>   ,EagerSeriesCatNamespace[Self, NativeSeriesT]c                    d S rQ   r=   rR   s    r?   catzEagerSeries.cat  s    CF3r>   -EagerSeriesListNamespace[Self, NativeSeriesT]c                    d S rQ   r=   rR   s    r?   listzEagerSeries.list
  s    EHSr>   /EagerSeriesStructNamespace[Self, NativeSeriesT]c                    d S rQ   r=   rR   s    r?   structzEagerSeries.struct  s    ILr>   NrO   r  )re   r$   rO   r  )r  r   rO   r$   )re   r   r  rw   rO   r$   )rO   r   )r#  r$  rO   r$   )r#  r(  rO   r$   )r{   r|   rO   r$   )rO   r/  )rO   r1  )rO   r4  )rO   r7  )rO   r:  )r9   r:   r;   r<   r  r  r  r  r  ri   r"  r'  r*  r   ro   r3  r6  r9  r<  r=   r>   r?   rE   rE      st        ####7 7 7 X7    ["I I I I DI     A A A A QPPPCCCC    III XIJJJ XJFFF XFHHH XHLLL XLLLr>   rE   c                      e Zd ZU ded<   edd            Zedd            Zedd            Zedd
            Zedd            Z	ddZ
dS )_SeriesNamespacer   _compliant_seriesrO   c                    | j         S rQ   r@  rR   s    r?   	compliantz_SeriesNamespace.compliant  s    %%r>   r(   c                    | j         j        S rQ   )rC  rN   rR   s    r?   implementationz_SeriesNamespace.implementation  s    ~--r>   r  c                4    | j                                         S rQ   )rE  r  rR   s    r?   backend_versionz _SeriesNamespace.backend_version  s    "33555r>   r)   c                    | j         j        S rQ   )rC  rd   rR   s    r?   rj   z_SeriesNamespace.version#  s    ~&&r>   r   c                    | j         j        S rQ   )r@  rT   rR   s    r?   rT   z_SeriesNamespace.native'  s    %,,r>   re   r   c               6    | j                             |          S rQ   )rC  ri   rh   s     r?   with_nativez_SeriesNamespace.with_native+  s    ~**6222r>   N)rO   r   )rO   r(   r=  )rO   r)   )rO   r   )re   r   rO   r   )r9   r:   r;   r<   r  rC  rE  rG  rj   rT   rK  r=   r>   r?   r?  r?    s         
 +***& & & X& . . . X. 6 6 6 X6 ' ' ' X' - - - X-3 3 3 3 3 3r>   r?  c                  "    e Zd ZU ded<   ddZdS )	rJ   r   r@  re   rO   Nonec                   || _         d S rQ   rB  rh   s     r?   __init__zEagerSeriesNamespace.__init__5  s    !'r>   N)re   r   rO   rM  )r9   r:   r;   r<   rO  r=   r>   r?   rJ   rJ   /  s8          '&&&( ( ( ( ( (r>   rJ   c                      e Zd ZdS )rF   Nr9   r:   r;   r=   r>   r?   rF   rF   9           3r>   rF   c                      e Zd ZdS )rG   NrQ  r=   r>   r?   rG   rG   @  rR  r>   rG   c                      e Zd ZdS )rI   NrQ  r=   r>   r?   rI   rI   G  rR  r>   rI   c                      e Zd ZdS )rK   NrQ  r=   r>   r?   rK   rK   N  rR  r>   rK   c                      e Zd ZdS )rL   NrQ  r=   r>   r?   rL   rL   U  rR  r>   rL   c                      e Zd ZU ded<   ded<   ded<   ed*d	            Zed+d            Zd,dZddd-dZ	d.dZ
d/dZd0dZd1d"Zd2d$Zd3d&Zd4d'Zd5d(Zd)S )6rH   EagerSeries[NativeSeriesT]_seriesrw   _breakpoint$HistData[NativeSeriesT, _CountsT_co]_datarO   r   c                    | j         j        S rQ   )rY  rT   rR   s    r?   rT   zEagerSeriesHist.nativea  s    |""r>   re   r  r$   c               L    |                      |           }||_        ||_        |S rQ   )__new__rY  rZ  )r^   re   r  objs       r?   from_serieszEagerSeriesHist.from_seriese  s(     kk#,
r>   r   c                    d S rQ   r=   rR   s    r?   r   zEagerSeriesHist.to_framen  rY   r>   both)closedstartr   endnum_samplesr   rd  Literal['both', 'none']r3   c                   d S rQ   r=   )rS   re  rf  rg  rd  s        r?   _linear_spacezEagerSeriesHist._linear_spaceo  s	     3r>   c                    d S rQ   r=   rR   s    r?   is_empty_serieszEagerSeriesHist.is_empty_seriesy  rY   r>   c                "    | j         rg g dndg iS )N)r7   r8   r8   )rZ  rR   s    r?   
data_emptyzEagerSeriesHist.data_empty|  s"    262BUb2...RTUr>   argint | list[float]c                   d S rQ   r=   )rS   ro  s     r?   series_emptyzEagerSeriesHist.series_empty      /2sr>   r  r  c                   t          |          dk    r|                                 | _        nI|                                 r|                     |          | _        n|                     |          | _        | S )N   )r   rn  r\  rl  rr  _calculate_histrS   r  s     r?   	with_binszEagerSeriesHist.with_bins  si    t99>>**DJJ!!## 	4**400DJJ--d33DJr>   r  c                   |dk    r|                                  | _        n\|                                 r|                     |          | _        n-|                     |                     |                    | _        | S r   )rn  r\  rl  rr  rv  _calculate_binsrS   r  s     r?   with_bin_countzEagerSeriesHist.with_bin_count  sr    >>**DJJ!!## 	O**955DJJ--d.B.B9.M.MNNDJr>   list[float] | _1DArrayc               x    t          |t                    r|                     dd|dz             n|}|dd          S )Nr   ru  )r,  r   rj  )rS   ro  r  s      r?   _calculate_breakpointz%EagerSeriesHist._calculate_breakpoint  s>    4>sC4H4HQt!!!Qa000cABBxr>   c                    d S rQ   r=   r{  s     r?   rz  zEagerSeriesHist._calculate_bins  rY   r>   c                    d S rQ   r=   rw  s     r?   rv  zEagerSeriesHist._calculate_hist  rs  r>   Nr  )re   rX  r  rw   rO   r$   )rO   r   )
re  r   rf  r   rg  r   rd  rh  rO   r3   r  )rO   r[  )ro  rp  rO   r[  )r  r  rO   r$   )r  r   rO   r$   )ro  rp  rO   r}  )r  r   rO   r3   )r  r}  rO   r[  )r9   r:   r;   r<   r  rT   r  ra  r   rj  rl  rn  rr  rx  r|  r  rz  rv  r=   r>   r?   rH   rH   \  sA        ''''////# # # X#    [ 1000 +1      +***V V V V
3 3 3 3          ?>>>3 3 3 3 3 3r>   rH   )U
__future__r   typingr   r   r   r   r   !narwhals._compliant.any_namespacer	   r
   r   r   r   narwhals._compliant.columnr   narwhals._compliant.typingr   r   r   r   r   narwhals._translater   r   r   r   narwhals._typing_compatr   r   narwhals._utilsr   r   r   r   r   collections.abcr   r    r!   typesr"   pandaspdpolarsplpyarrowpatyping_extensionsr#   r$   r%   narwhals._compliant.dataframer&   narwhals._compliant.namespacer'   r(   r)   r*   narwhals.dtypesr+   narwhals.seriesr,   narwhals.typingr-   r.   r/   r0   r1   r2   r3   r4   r6   r@   __all__rD   rE   r?  rJ   rF   rG   rI   rK   rL   rH   r=   r>   r?   <module>r     s   " " " " " " A A A A A A A A A A A A A A              7 6 6 6 6 6              W V V V V V V V V V V V 9 9 9 9 9 9 9 9               B<<<<<<<<<<      >>>>>>>>>>@@@@@@<<<<<<HHHHHHHHHH%%%%%%&&&&&&	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	B B B B B9gm]&BC B B B
 gm?dKKK
 
 
{ { { { {./}&']{ { {|DM DM DM DM DM/-0(=2I DM DM DMN3 3 3 3 3()"# "2233 3 3>( ( ( ( (_&667O--.( ( (    _&667!_../      _&667o&_../      _&667/"_../      _&667O$_../      _&667O$_../  B3 B3 B3 B3 B3h}k9: B3 B3 B3 B3 B3r>   