+
    i^                    :  a  0 t $ R t^ RIHt ^ RIt^ RIt^ RIHt ^ RIH	t	 ^ RI
Ht ^ RIHtHtHtHt ^ RIHtHtHt ^ RIHt ^ R	IHtHtHtHt ^ R
IHt ^ RIHt ^ RI H!t! Rt"R]#R&   RR0t$R]#R&   0 R8mt%R]#R&   R t&R t'RRRR/R R llt(R t)R R lt*]PV                  ! ]*R R!7      t,]PV                  ! ]*R"R!7      t-]PV                  ! ]*RR!7      t.R9R# R$ llt/R% t0R:R& lt1R9R' R( llt2R)t3R* R+ lt4R9R, R- llt5R9R. R/ llt6R9R0 R1 llt7R2 R3 lt8R4 R5 lt9R6 R7 lt:R# );z.Astroid hooks for the Python standard library.)annotationsN)Iterator)dedent)Final)	argumentsbasesnodesutil)AstroidBuilder_extract_single_nodeextract_node)InferenceContext)AstroidTypeErrorAstroidValueErrorInferenceErrorUseInferenceDefault)inference_tip)AstroidManager)SYNTHETIC_ROOT	enum.Enumz
Final[str]
ENUM_QNAMEtyping.NamedTupletyping_extensions.NamedTupler   TYPING_NAMEDTUPLE_QUALIFIED
NamedTupleTYPING_NAMEDTUPLE_BASENAMESc                   \        V \        P                  4      '       d   \        h \	        V P                  VR 7      4      p\        T\        P                  4      '       d   \        4       hT#   \         d   p\        ThRp?ii ; i)contextN)
isinstancer	   UninferableBaser   nextinferStopIterationr   )noder   valueexcs   &&  E/usr/lib/python3/dist-packages/astroid/brain/brain_namedtuple_enum.py_infer_firstr(   (   sr    $,,--!!&TZZZ01 %--..!##L	  &#%&s   A/ /B:BBc                .  aaa RVVV3R llpV P                   oV P                  pV'       d'   V Uu/ uF  qDP                  VP                  bK  	  upM/ oV! ^ RR7      pV! ^RR7      pV'       d   V'       d   VP                  V3# \	        4       hu upi )Nc                   < \        S4      V 8  d   \        SV ,          S4      # V'       d   VS9   d   \        SV,          S4      # R # R # N)lenr(   )positionkey_nameargsr   found_keywordss   &&r'   "_extract_namedtuple_arg_or_keywordE_find_func_form_arguments.<locals>._extract_namedtuple_arg_or_keyword5   sE     t9xX88N2x 8'BB 38    typename)r-   r.   field_namesr+   )r/   keywordsargr%   r   )	r$   r   r1   r6   keywordnamenamesr/   r0   s	   &f     @@r'   _find_func_form_argumentsr;   4   s    C C 99D}}H@H8<8gmm	#8<b  .q:ND.MREzz5  

 	=s   Br   enumFc               0    V ^8  d   QhRRRRRRRRRR	R
R/# )   r$   
nodes.Call	base_typeznodes.NodeNGparentr   InferenceContext | Noner<   boolreturnz%tuple[nodes.ClassDef, str, list[str]] )formats   "r'   __annotate__rG   K   sL     Z( Z(
Z(Z( 	Z(
 %Z( Z( +Z(r3   c          	         \        W4      w  rV VP                  P                  RR4      P                  4       pT'       g   T Uu. uF  p\'        T4      NK  	  ppT Uu. uF  pRT9  g   K  TNK  	  ppT;'       g    R	p\        P(                  ! TT P*                  T P,                  T P.                  T P0                  TR
7      pTP3                  T.. RR7       T F4  p\        P4                  ! 4       pYn        Yn        T.TP:                  T&   K6  	  YT3#   \         Ed   pT'       g[   . p\        T 4      p	T	'       d@   \        T	4      p
T
P                   Uu. uF  p\        Y4      P                  NK  	  Mu upi pp Rp?ELM\        TR4      '       d   \        TP                  \        4      '       dh   TP                   Uu. uFI  p\        T^ ,          \        P                  4      '       g   K,  \        T^ ,          T4      P                  NKK  	  Mu upi ppEM\        TR4      '       d   \        ;QJ d&    R TP                   4       F  '       d   K   RM	  RM! R TP                   4       4      '       dj   TP                   Uu. uFL  p\        T\        P                   4      '       g   K%  \        TP                  ^ ,          T4      P                  NKN  	  Mu upi ppM<TP                   Uu. uF  p\        Y4      P                  NK  	  Mu upi ppM\        ThT'       g   \        Th Rp?EL Rp?ii ; i  \        \"        3 d   p\$        ThRp?ii ; iu upi u upi )z<Specific inference function for namedtuple or Python 3 enum., itemseltsc              3  V   "   T F  p\        V\        P                  4      x  K!  	  R # 5ir+   )r   r   Tuple).0consts   & r'   	<genexpr>"infer_func_form.<locals>.<genexpr>v   s     Rze:eU[[99zs   ')FTNUninferable)lineno
col_offset
end_linenoend_col_offsetrA   )r   body
decorators)r;   r%   replacesplitAttributeError_get_namedtuple_fieldsr   rL   r(   hasattrr   rK   listr   ConstallrN   r   r   strClassDefrT   rU   rV   rW   postinit	EmptyNoderA   attrnameinstance_attrs)r$   r@   rA   r   r<   r9   r:   
attributesr&   fieldsfields_noderP   attr
class_node	fake_nodes   &&$$$          r'   infer_func_formrn   K   s   ,+/>(	2$)KK$7$7S$A$G$G$IJV ,67JDc$iJ
7 $.A:4D$$:JA   =D{{????**J k   OO%	%!+4+
!!$'	 
 Z''Q  &	2
/5".v"6KHSHXHX"HXuU4::HX"J " 5'**z%++t/L/L &+[["%0E%eAh< >U1Xw7==%0"J "J
 UF++ sRuzzRsssRuzzRRR */&)3)%= GLA@FF)3&
 &
 MRJJ&LV5L8>>J&
 &
 )c1!(c1 "K&	2N N+ +!s*+
 8 Bs   M *D M" 	M'.M'L?%6L:E:9L:M A L:)H5!H&L:=L:$L: L:"K!5+K! L:7LL:-L:4M :L??M MMMc                B    \        V P                  4      \        ,          # )zFPredicate for class inference tip.

:type node: ClassDef
:rtype: bool
)set	basenamesr   r$   s   &r'   _has_namedtuple_basers      s     t~~!<<<r3   c                   V ^8  d   QhRR/# )r>   rD   rC   rE   )rF   s   "r'   rG   rG      s      t r3   c                    V P                   p\        V\        P                  4      '       d   VP                  V8H  # \        V\        P
                  4      '       d   VP                  V8H  # R # F)funcr   r   	Attributerf   Namer9   )r$   r9   rw   s   && r'   _looks_likerz      sN    99D$((}}$$$

##yyD  r3   
namedtupler9   Enumc               $    V ^8  d   QhRRRRRR/# r>   r$   r?   r   rB   rD   zIterator[nodes.ClassDef]rE   )rF   s   "r'   rG   rG      s$     < <
<6<<r3   c                x  a \        R4      p\        W\        VR7      w  r4p\        P                  P                  WR7      p\        P                  ! \        R4      4      p\        V\        P                  4      '       g   Q h \        TP                  TRT;'       g    \        4       4      4      P                  4       pVRJ p	 \#        WEV	4      pRP-                  R T 4       4      pRoRP-                  T3R l\/        T4       4       4      p\1        \3        4       4      P5                  RT RT: RT RT R2	4      pTP6                  ^ ,          P8                  R,          TP8                  R&   TP6                  ^ ,          P8                  R,          TP8                  R&   TP6                  ^ ,          P8                  R,          TP8                  R&   TP6                  ^ ,          P8                  R,          TP8                  R&   T F4  pTP6                  ^ ,          P8                  T,          TP8                  T&   K6  	  \;        T.4      #   \        \         3 d    Rp	 ELi ; i  \$         d"   p
\'        R\)        T
4      ,           4      T
hR	p
?
i\*         d"   p
\'        R
\)        T
4      ,           4      T
hR	p
?
ii ; i)z5Specific inference function for namedtuple Call node.tuple)rA   r   r   z*import collections; collections.namedtuplerenameTFzTypeError: NzValueError: , c              3  *   "   T F	  q R 2x  K  	  R# 5i)z=NoneNrE   )rO   r7   s   & r'   rQ   $infer_named_tuple.<locals>.<genexpr>   s     AjsuE]js   z[    {name} = property(lambda self: self[{index:d}], doc='Alias for field number {index:d}')
c              3  L   <"   T F  w  rSP                  W!R 7      x  K  	  R# 5i))r9   indexN)rF   )rO   r   r9   	field_defs   &  r'   rQ   r      s+      0KE 	d000s   !$z
class z*(tuple):
    __slots__ = ()
    _fields = z
    def _asdict(self):
        return self.__dict__
    @classmethod
    def _make(cls, iterable, new=tuple.__new__, len=len):
        return new(cls, iterable)
    def _replace(self, zP):
        return self
    def __getnewargs__(self):
        return tuple(self)
z
    _asdict_make_replace_fields)r   rn   r   r   CallSite	from_callr	   
safe_inferr   r   NodeNGr!   infer_argumentr   
bool_valuer   r#   _check_namedtuple_attributesr   r   rb   r   join	enumerater
   r   string_buildrX   localsiter)r$   r   
tuple_baserl   r9   rh   	call_siterw   rename_arg_bool_valuer   r&   replace_args
field_defsfakerk   r   s   &&             @r'   infer_named_tupler      s    2':J#2$ Jj "",,T,CI??IJD dELL)))) $$$T8W5R5R@P@RS!

*, 	 '$.F1$FK
 99AjAAL	2   $Z0 J .*+88 >f n  %~ &  : 	D $(99Q<#6#6y#AJi !%1!4!4W!=Jg$(IIaL$7$7
$CJj!#'99Q<#6#6y#AJi "&))A,"5"5d";
$  S M* 
  E!-#c(":;D F!.3s8";<#EFsB   I	 %I	 I# 	I I #J9.J

J9J9J44J9c                   \        V 4      p\        4       p\        V 4       F  w  r4\        ;QJ d    R  V 4       F  '       d   K   RM	  RM! R  V 4       4      '       d_   \        P
                  ! V4      '       gC   V'       d;   V^ ,          P                  4       '       g   VP                  R4      '       g   WB9   d   RV,          W&   VP                  V4       K  	  \        V4      # )c              3  Z   "   T F!  qP                  4       ;'       g    VR 8H  x  K#  	  R# 5i)_N)isalnum)rO   cs   & r'   rQ   5_get_renamed_namedtuple_attributes.<locals>.<genexpr>  s#     :TIIK++18+Ts   ++FTr   z_%d)
r_   rp   r   ra   r8   	iskeywordisdigit
startswithaddr   )r5   r:   seenir9   s   &    r'   "_get_renamed_namedtuple_attributesr      s    E5D[) :T::T:::  &&Aw  s##|qyEH * <r3   c                2   \        V4      pV'       d   \        V4      pV .VO F  p\        V\        4      '       g   \	        R \        V4      : 24      hVP                  4       '       g   \        RRV: 2,           4      h\        P                  ! V4      '       g   K{  \        RV: 24      h	  \        4       pV FW  pVP                  R4      '       d   V'       g   \        RV: 24      hW49   d   \        RV: 24      hVP                  V4       KY  	  V# )z0Type names and field names must be strings, not z(Type names and field names must be validzidentifiers: z0Type names and field names cannot be a keyword: r   z-Field names cannot start with an underscore: z"Encountered duplicate field name: )r   r   r   rb   r   typeisidentifierr   r8   r   rp   r   r   )r4   rh   r   r9   r   s   &&&  r'   r   r     s   z"J7
C
 'J'$$$"B4:.Q    ""#:}TH=UU  T""#B4(K  ( 5D??3#?xH  <#&H$QRR  r3   c               $    V ^8  d   QhRRRRRR/# )r>   r$   r?   r   rB   rD   zIterator[bases.Instance]rE   )rF   s   "r'   rG   rG   3  s$     ;2 ;2
;26;2;2r3   c                z    V P                   P                  V4      p\
        ;QJ d    R T 4       F  '       g   K   RM	  RM! R T 4       4      '       g   \        h\        R4      p\        T T\        TRR7      ^ ,          p\        TP                  4       .4      #   \        \        3 d   p\        ThRp?ii ; i)z/Specific inference function for enum Call node.Nc              3     "   T F>  p\        V\        P                  4      ;'       d    VP                  4       \        8H  x  K@  	  R # 5ir+   )r   r   rc   qnamer   )rO   items   & r'   rQ   infer_enum.<locals>.<genexpr>=  s8      D 	4(GGTZZ\Z-GGs
   %A ATFa  
    class EnumMeta(object):
        'docstring'
        def __call__(self, node):
            class EnumAttribute(object):
                name = ''
                value = 0
            return EnumAttribute()
        def __iter__(self):
            class EnumAttribute(object):
                name = ''
                value = 0
            return [EnumAttribute()]
        def __reversed__(self):
            class EnumAttribute(object):
                name = ''
                value = 0
            return (EnumAttribute, )
        def __next__(self):
            return next(iter(self))
        def __getitem__(self, attr):
            class Value(object):
                @property
                def name(self):
                    return ''
                @property
                def value(self):
                    return attr

            return Value()
        __members__ = ['']
    )rA   r   r<   )rw   r"   r   r#   r   anyr   rn   r   r   instantiate_class)r$   r   inferredr&   	enum_metarl   s   &&    r'   
infer_enumr   3  s    
+99??7+ 3 333    "!$ & 	IH ! 	J --/011i M* +!s*+s   B B:.B55B:a  
    def __or__(self, other):
        return {name}(self.value | other.value)
    def __and__(self, other):
        return {name}(self.value & other.value)
    def __xor__(self, other):
        return {name}(self.value ^ other.value)
    def __add__(self, other):
        return {name}(self.value + other.value)
    def __div__(self, other):
        return {name}(self.value / other.value)
    def __invert__(self):
        return {name}(~self.value)
    def __mul__(self, other):
        return {name}(self.value * other.value)
c                    V ^8  d   QhRRRR/# )r>   r$   nodes.ClassDefrD   rE   )rF   s   "r'   rG   rG     s     P P> Pn Pr3   c                f
   R V P                  4        4        EF  pV P                  4       P                  R8X  d    V # / p\        4       pV P                  P                  4        EF7  w  rE\        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       g   VR8X  d   KI  V^ ,          P                  4       p\        V\        P                  4      '       da   \        VP                  ^ ,          \        P                  4      '       d#   VP                  ^ ,          P                  4       pM>VP                  pM1\        V\        P                  4      '       d   VP                  .pMEK  RpVP                   e   \        VP                   \        P"                  4      '       db   \        VP                   P                   \$        4      '       d!   \'        VP                   P                   4      pM1VP                   P                   pMVP                   P)                  4       p. p	V EFZ  p
\        V
\        P*                  4      '       d   K&  VP-                  V
P                  4       \/        RP1                  V
P                  R	P3                  V P4                  4      VR
7      4      pRV9   d(   V\6        P1                  V
P                  R7      ,          p\9        \;        4       RR7      P=                  V4      V
P                  ,          pV
P>                  Vn        V PA                  4        F  pV.VP                  VP                  &   K  	  V	PC                  VPE                  4       4       VP                   f   EKV  WV&   EK]  	  WP                  V&   EK:  	  \        PF                  ! V V PH                  V PJ                  V PL                  V PN                  R7      .V P                  R&   \        PF                  ! V V PH                  V PJ                  V PL                  V PN                  R7      pTPQ                  VP                  4        UUu. uFk  w  pp\        P"                  ! WR7      \        PR                  ! VP                  VVPH                  VPJ                  VPL                  VPN                  R7      3NKm  	  upp4       V.V P                  R&   RV9  dE   \/        R4      p\9        \;        4       4      P=                  V4      R,          pV.V P                  R&    V # 	  V # u uppi )zSpecific inference for enums.c              3  H   "   T F  qP                    F  q"x  K  	  K  	  R # 5ir+   )rq   )rO   clsbs   &  r'   rQ   #infer_enum_class.<locals>.<genexpr>  s     D*3mmQmQ*s    "r<   c              3  `   "   T F$  p\        V\        P                  4      '       * x  K&  	  R # 5ir+   )r   r   
AssignName)rO   r%   s   & r'   rQ   r     s#     P
5%*:*:;;;s   ,.TF_ignore_Na  
                class {name}({types}):
                    @property
                    def value(self):
                        return {return_value}
                    @property
                    def _value_(self):
                        return {return_value}
                    @property
                    def name(self):
                        return "{name}"
                    @property
                    def _name_(self):
                        return "{name}"
                r   )r9   typesreturn_valueIntFlagr|   )apply_transforms)rA   rT   rU   rV   rW   _value2member_map_)rA   __members__r9   ay  
                @property
                def name(self):
                    """The name of the Enum member.

                    This is a reconstruction by astroid: enums are too dynamic to understand, but we at least
                    know 'name' should be a string, so this is astroid's best guess.
                    """
                    return ''
                )*mrorootr9   rp   r   rK   r   	statementr   r   AssigntargetsrN   itered	AnnAssigntargetr%   r`   rb   repr	as_stringStarredr   r   rF   r   rq   INT_FLAG_ADDITION_METHODSr
   r   r   rA   	mymethodsappendr   DictrT   rU   rV   rW   rd   ry   )r$   basenamedunder_memberstarget_nameslocalvaluesstmtr   inferred_return_valuenew_targetsr   classdefr   methodmemberskvcodename_dynamicclassattrs   &                  r'   infer_enum_classr     s   D$((*D99;v%V KU u![[..0MEPPPPPPJ&!9&&(D$--dll1ou{{;;"ll1o446G"llGD%//22;;-$(!zz%djj%++66!$**"2"2C8804TZZ5E5E0F-04

0@0@-,0JJ,@,@,B)K!femm44  -! F#[["ii7%:  * (
  9 @ @fkk @ RRH%"$u,x(6 %mm"nn.F06xDKK, /""4#9#9#;<::%(,u%U "V "-KKQ 1X JJ{{????#22-
() **;;..
 	 +002 3DAq KK2JJ& xx#$<<#$<<'('7'7
 3	
  '.YM" % 	 	D %3>3C$D$Q$QRV$W%! $9"9DKKK] E\ KWs   A1T-c                   V ^8  d   QhRR/# r>   r   rB   rE   )rF   s   "r'   rG   rG     s     ) )7N )r3   c                r   V P                    Uu. uF;  p\        V\        P                  4      '       g   K%  VP                  P
                  NK=  	  pp\        R4      P                  V P
                  RP                  V4      R7      p\        V4      p \        \        WQ4      4      pT P                  4        F  pT.TP                  TP
                  &   K  	  T P                    F  p	\        T	\        P                   4      '       dB   T	P"                   F/  p
T
P
                  pT P                  T,          TP                  T&   K1  	  Kd  \        T	\        P$                  4      '       g   K  T	.TP                  T	P
                  &   K  	  \'        T34      # u upi   \         d   p\        YQR7      ThRp?ii ; i)z&Infer a subclass of typing.NamedTuple.zU
    from collections import namedtuple
    namedtuple({typename!r}, {fields!r})
    rI   )r4   ri   )r$   r   N)rX   r   r   r   r   r9   r   rF   r   r   r!   r   r#   r   r   r   r   r   rc   r   )rl   r   	annassignannassigns_fieldsr   r$   generated_class_nodeer   	body_noder   rk   s   &&          r'   infer_typing_namedtuple_classr     s|   
 $(Ii1 		(  
   	 
:K1L	M 	 D@#$5d$DE &&(4:8##FKK0 )  __	i..#++{{4>4E4Ed4K$++D1 , 	5>>22;D+ ''	7 % %'((3  @$8a?@s"   "FFF F6$F11F6c                   V ^8  d   QhRR/# r   rE   )rF   s   "r'   rG   rG   5  s     
  
 4K 
 r3   c                :    \        R4      pVP                  V4      # )z
Starting with python3.9, NamedTuple is a function of the typing module.
The class NamedTuple is build dynamically through a call to `type` during
initialization of the `_NamedTuple` variable.
zD
        from typing import _NamedTuple
        _NamedTuple
        )r   r"   )r$   r   klasss   && r'    infer_typing_namedtuple_functionr   5  s$       E ;;wr3   c               $    V ^8  d   QhRRRRRR/# r   rE   )rF   s   "r'   rG   rG   B  s$     , ,
,6,,r3   c                    \        V P                  P                  4       4      pTP                  4       \        9  d   \
        h\        T P                  4      ^8w  d   \
        h\        T P                  ^,          \        P                  \        P                  34      '       g   \
        h\        Y4      #   \        \        3 d   p\
        ThRp?ii ; i)z$Infer a typing.NamedTuple(...) call.N)r!   rw   r"   r   r#   r   r   r   r,   r/   r   r   ListrN   r   )r$   r   rw   r&   s   &&  r'   infer_typing_namedtupler   B  s    +DIIOO%& zz|66!!
499~!!diilUZZ$=>>!!T++ M* +!s*+s   #B6 6CCCc                    V ^8  d   QhRRRR/# )r>   r$   r?   rD   rb   rE   )rF   s   "r'   rG   rG   Y  s     ' ' ' 'r3   c                   . pRp \        V P                  ^,          P                  4       4      pT'       gK   T P                   F:  pTP                  R8X  g   K   \        TP                  P                  4       4      p M	  \        T\        P                  4      '       g   \
        hTP                   F  p\        T\        P                  4      '       d"   TP                  TP!                  4       4       KD  \        T\        P"                  \        P$                  34      '       g   \
        h\'        TP                  4      ^8w  d   \
        hTP                  TP                  ^ ,          P!                  4       4       K  	  T'       d   RRP)                  T4       R2pT# RpT#   \        \        3 d   p\
        ThRp?i\         d     ELi ; i  \        \        3 d   p\
        ThRp?ii ; i)zGet and return fields of a NamedTuple in code-as-a-string.

Because the fields are represented in their code form we can
extract a node from them later on.
Nr5   (rI   z,) )r!   r/   r"   r   r#   r   
IndexErrorr6   r7   r%   r   r   BaseContainerrL   r`   r   r   r   rN   r,   r   )r$   r:   	containerr&   keyword_nodeeltr5   s   &      r'   r]   r]   Y  s    EI1++-.	  MML=07 $\%7%7%=%=%? @I  * i!4!455!!~~c5;;''LL)#

EKK899%%sxx=A%%SXXa[**,-  #((5/*"-  ; M* +!s*  '6 7-367s;   *F% #G%G6F==G
GGG/#G**G/c                    V ^8  d   QhRRRR/# )r>   r   r   rD   rC   rE   )rF   s   "r'   rG   rG     s     * *> *d *r3   c                $    V P                  R4      # )z,Return whether cls is a subclass of an Enum.r   )is_subtype_of)r   s   &r'   _is_enum_subclassr    s    [))r3   c                    V ^8  d   QhRRRR/# )r>   managerr   rD   NonerE   )rF   s   "r'   rG   rG     s      n  r3   c                H   V P                  \        P                  \        \        4      \
        4       V P                  \        P                  \        \        4      \        4       V P                  \        P                  \        \        R 7       V P                  \        P                  \        \        4      \        4       V P                  \        P                  \        \        4      R 4       V P                  \        P                  \        \        4      \         4       R# ))	predicatec                l    V P                   R 8H  ;'       d    \        V P                  4       RR4      R8H  # )r   r9   Ntyping)r9   getattrr   rr   s   &r'   <lambda>register.<locals>.<lambda>  s3    TYY,. ; ;DIIK.(:;r3   N)register_transformr   Callr   r   _looks_like_namedtupler   _looks_like_enumrc   r   r  r   rs   FunctionDefr   r   _looks_like_typing_namedtuple)r
  s   &r'   registerr    s    

M"346L uzz=+DFVW(4E   34
 67	; 

-.%r3   >   r   r   r   r+   rv   );__conditional_annotations____doc__
__future__r   	functoolsr8   collections.abcr   textwrapr   r  r   astroidr   r   r   r	   astroid.builderr
   r   r   astroid.contextr   astroid.exceptionsr   r   r   r   astroid.inference_tipr   astroid.managerr   'astroid.nodes.scoped_nodes.scoped_nodesr   r   __annotations__r   r   r(   r;   rn   rs   rz   partialr  r  r  r   r   r   r   r   r   r   r   r   r]   r  r  )r  s   @r'   <module>r)     s   
 5 "   $   1 1 N N ,  0 * B$
J $"& U & U 	 .Z(
 (,Z( Z(z= #**;\J $$[v>  ) 1 1+L Q <~$ F;2| $Pf)>
 ,.'T*
r3   