+
    l|iS                      a  0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIHtH	t	H
t
HtHtHtHt ]'       d   ^ RIHtHtHt ^ RIHt R R lt ! R R	]4      t ! R
 R]]4      t]R[,          tR]R&   ]R]3,          tR]R&    ! R R4      t ! R R4      t ! R R4      t  ! R R4      t! ! R  R4      t" ! R! R4      t# ! R" R4      t$ ! R# R4      t% ! R$ R4      t& ! R% R4      t' ! R& R4      t( ! R' R4      t) ! R( R4      t*]PV                  ! R)4      t,]PV                  ! R*4      t-]PV                  ! R+4      t.R, R- lt/R. R/ lt0R0 R1 lt1R\R2 R3 llt2R4 R5 lt3R6 R7 lt4R8 R9 lt5R: R; lt6R< R= lt7 ! R> R?]8]]R,          3,          4      t9 ! R@ RA]94      t: ! RB RC4      t; ! RD RE]
4      t<RF RG lt=]=! RH4      t>]=! RI4      t?]=! RJ4      t@]=! RK4      tARL]=! RM4      RN]=! RO4      /tB]PV                  ! RP4      P                  tD]PV                  ! ];P                  ]P                  4      P                  tG]PV                  ! RQ4      P                  tH]P                  ! RR^4      tJRS RT ltKRU RV ltLRW RX ltM ! RY RZ4      tNR# )]z
cssselect.parser
================

Tokenizer, parser and parsed objects for CSS selectors.


:copyright: (c) 2007-2012 Ian Bicking and contributors.
See AUTHORS for more details.
:license: BSD, see LICENSE for more details.

)annotationsN)TYPE_CHECKINGLiteralProtocol	TypeAliasUnioncastoverload)IterableIteratorSequence)Selfc                    V ^8  d   QhRRRR/# )   stringstrreturn )formats   "2/usr/lib/python3/dist-packages/cssselect/parser.py__annotate__r      s     8 8 8 8    c                ^    V P                  R4      P                  4       P                  R4      # )z(Lower-case, but only in the ASCII range.utf8)encodelowerdecode)r   s   &r   ascii_lowerr      s%    == &&(//77r   c                      ] tR t^!tRtRtR# )SelectorErrorzCommon parent for :class:`SelectorSyntaxError` and
:class:`ExpressionError`.

You can just use ``except SelectorError:`` when calling
:meth:`~GenericTranslator.css_to_xpath` and handle both exceptions types.

r   N__name__
__module____qualname____firstlineno____doc____static_attributes__r   r   r   r   r   !   s    r   r   c                      ] tR t^+tRtRtR# )SelectorSyntaxErrorz3Parsing a selector that does not match the grammar.r   Nr    r   r   r   r(   r(   +   s    =r   r(   ElementHashClassFunctionPseudoAttribNegationRelationMatchingSpecificityAdjustmentCombinedSelectorr   TreeFunctionalPseudoElementPseudoElementc                  N    ] tR t^AtRtRR R lltR R ltR R ltR	 R
 ltRt	R# )Selectoru
  
Represents a parsed selector.

:meth:`~GenericTranslator.selector_to_xpath` accepts this object,
but ignores :attr:`pseudo_element`. It is the user’s responsibility
to account for pseudo-elements and reject selectors with unknown
or unsupported pseudo-elements.

Nc               $    V ^8  d   QhRRRRRR/# )r   treer4   pseudo_elementzPseudoElement | Noner   Noner   )r   s   "r   r   Selector.__annotate__L   s#     - -T -3G -SW -r   c                	h    Wn         Ve"   \        V\        4      '       g   \        V4      pW n        R # N)parsed_tree
isinstancer5   r   r;   )selfr:   r;   s   &&&r   __init__Selector.__init__L   s4    %j3/
 /
 )8N* -r   c                   V ^8  d   QhRR/# r   r   r   r   )r   s   "r   r   r=   h   s     R R# Rr   c                	   \        V P                  \        4      '       d   \        V P                  4      pM$V P                  '       d   R V P                   2pMRpV P                  P
                   RV P                  : V R2# ):: [])rA   r;   r5   repr	__class__r!   r@   )rB   r;   s   & r   __repr__Selector.__repr__h   st    d))+BCC!$"5"56N   !$"5"5!67NN..))*!D,<,<+??OqQQr   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r=   q   s      3 r   c                H   \        V P                  \        4      '       d   RV P                  P                  4        2pM$V P                  '       d   RV P                   2pMRpV P                  P                  4        V 2p\        V4      ^8  d   VP                  R4      pV# )z8Return a CSS representation for this selector (a string)rH   rI   *)rA   r;   r5   	canonicalr@   lenlstrip)rB   r;   ress   &  r   rS   Selector.canonicalq   s    d))+BCC!$"5"5"?"?"A!BCN   !$"5"5!67NN!!++-.~.>?s8a<**S/C
r   c                   V ^8  d   QhRR/# r   r   ztuple[int, int, int]r   )r   s   "r   r   r=   ~   s     	 	1 	r   c                z    V P                   P                  4       w  rpV P                  '       d
   V^,          pWV3# )zReturn the specificity_ of this selector as a tuple of 3 integers.

.. _specificity: http://www.w3.org/TR/selectors/#specificity

)r@   specificityr;   rB   abcs   &   r   r[   Selector.specificity~   s:     ""..0aFAQwr   )r@   r;   r?   
r!   r"   r#   r$   r%   rC   rN   rS   r[   r&   r   r   r   r8   r8   A   s!    -8R	 	r   r8   c                  J    ] tR t^tRtR R ltR R ltR R ltR R	 ltR
t	R# )r+   z 
Represents selector.class_name
c               $    V ^8  d   QhRRRRRR/# )r   selectorr4   
class_namer   r   r<   r   )r   s   "r   r   Class.__annotate__   s!     % % %3 %4 %r   c                	    Wn         W n        R # r?   )rd   re   )rB   rd   re   s   &&&r   rC   Class.__init__   s     $r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   rf      s     Q Q# Qr   c                	j    V P                   P                   R V P                  : RV P                   R2# )rJ   .rK   )rM   r!   rd   re   rB   s   &r   rN   Class.__repr__   s0    ..))*!DMM+<Adoo=NaPPr   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   rf      s     @ @3 @r   c                	T    V P                   P                  4        R V P                   2# )rk   )rd   rS   re   rl   s   &r   rS   Class.canonical   s&    --))+,Adoo->??r   c                   V ^8  d   QhRR/# rY   r   )r   s   "r   r   rf            1 r   c                	V    V P                   P                  4       w  rpV^,          pWV3#    rd   r[   r\   s   &   r   r[   Class.specificity   *    --++-a	QQwr   )re   rd   Nra   r   r   r   r+   r+      s"    %Q@ r   c                  J    ] tR t^tRtR R ltR R ltR R ltR R	 ltR
t	R# )r5   aT  
Represents selector::name(arguments)

.. attribute:: name

    The name (identifier) of the pseudo-element, as a string.

.. attribute:: arguments

    The arguments of the pseudo-element, as a list of tokens.

    **Note:** tokens are not part of the public API,
    and may change between cssselect versions.
    Use at your own risks.

c                    V ^8  d   QhRRRR/# )r   namer   	argumentsSequence[Token]r   )r   s   "r   r   $FunctionalPseudoElement.__annotate__   s     # #S #_ #r   c                	2    \        V4      V n        W n        R # r?   )r   r{   r|   )rB   r{   r|   s   &&&r   rC    FunctionalPseudoElement.__init__   s    %	"r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r~      s     M M# Mr   c                	    V P                    Uu. uF  qP                  NK  	  ppV P                  P                   R V P                   RV: R2# u upi )z[::()])r|   valuerM   r!   r{   rB   tokentoken_valuess   &  r   rN    FunctionalPseudoElement.__repr__   sK    15@@..))*#dii[,9ILL As   Ac                   V ^8  d   QhRR/# r   r   z	list[str]r   )r   s   "r   r   r~           8 8	 8r   c                	V    V P                    Uu. uF  qP                  NK  	  up# u upi r?   r|   typerB   r   s   & r   argument_types&FunctionalPseudoElement.argument_types        (,7u

777   &c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r~      s     & &3 &r   c                	j    R P                  R V P                   4       4      pV P                   RV R2# )rI   c              3  @   "   T F  qP                  4       x  K  	  R # 5ir?   css.0r   s   & r   	<genexpr>4FunctionalPseudoElement.canonical.<locals>.<genexpr>        ?uyy{{   r   ))joinr|   r{   rB   argss   & r   rS   !FunctionalPseudoElement.canonical   s1    ww???))AdV1%%r   )r|   r{   N)
r!   r"   r#   r$   r%   rC   rN   r   rS   r&   r   r   r   r5   r5      s!    "#M8& &r   c                  V    ] tR t^tRtR R ltR R ltR R ltR R	 ltR
 R lt	Rt
R# )r,   z 
Represents selector:name(expr)
c               (    V ^8  d   QhRRRRRRRR/# )	r   rd   r4   r{   r   r|   r}   r   r<   r   )r   s   "r   r   Function.__annotate__   s)     # # #S #_ #QU #r   c                	>    Wn         \        V4      V n        W0n        R # r?   )rd   r   r{   r|   )rB   rd   r{   r|   s   &&&&r   rC   Function.__init__   s     %	"r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r      s     ] ]# ]r   c                	    V P                    Uu. uF  qP                  NK  	  ppV P                  P                   R V P                  : RV P
                   RV: R2# u upi )rJ   :r   r   )r|   r   rM   r!   rd   r{   r   s   &  r   rN   Function.__repr__   sW    15@@..))*!DMM+<Adii[,IYY[\\ As   Ac                   V ^8  d   QhRR/# r   r   )r   s   "r   r   r      r   r   c                	V    V P                    Uu. uF  qP                  NK  	  up# u upi r?   r   r   s   & r   r   Function.argument_types   r   r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r      s     B B3 Br   c                	    R P                  R V P                   4       4      pV P                  P                  4        RV P                   RV R2# )rI   c              3  @   "   T F  qP                  4       x  K  	  R # 5ir?   r   r   s   & r   r   %Function.canonical.<locals>.<genexpr>   r   r   r   r   r   )r   r|   rd   rS   r{   r   s   & r   rS   Function.canonical   sE    ww???--))+,Adii[$qAAr   c                   V ^8  d   QhRR/# rY   r   )r   s   "r   r   r      rr   r   c                	V    V P                   P                  4       w  rpV^,          pWV3# rt   rv   r\   s   &   r   r[   Function.specificity   rx   r   )r|   r{   rd   N)r!   r"   r#   r$   r%   rC   rN   r   rS   r[   r&   r   r   r   r,   r,      s'    #
]8B r   c                  J    ] tR t^tRtR R ltR R ltR R ltR R	 ltR
t	R# )r-   z
Represents selector:ident
c               $    V ^8  d   QhRRRRRR/# )r   rd   r4   identr   r   r<   r   )r   s   "r   r   Pseudo.__annotate__   s!     ( ( (c (d (r   c                	2    Wn         \        V4      V n        R # r?   )rd   r   r   )rB   rd   r   s   &&&r   rC   Pseudo.__init__   s      '
r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r      s     L L# Lr   c                	j    V P                   P                   R V P                  : RV P                   R2# )rJ   r   rK   )rM   r!   rd   r   rl   s   &r   rN   Pseudo.__repr__   s/    ..))*!DMM+<Adjj\KKr   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r      s     ; ;3 ;r   c                	T    V P                   P                  4        R V P                   2# )r   )rd   rS   r   rl   s   &r   rS   Pseudo.canonical   s%    --))+,Adjj\::r   c                   V ^8  d   QhRR/# rY   r   )r   s   "r   r   r      rr   r   c                	V    V P                   P                  4       w  rpV^,          pWV3# rt   rv   r\   s   &   r   r[   Pseudo.specificity   rx   r   )r   rd   Nra   r   r   r   r-   r-      s!    (L; r   c                  J    ] tR t^tRtR R ltR R ltR R ltR R	 ltR
t	R# )r/   z&
Represents selector:not(subselector)
c               $    V ^8  d   QhRRRRRR/# )r   rd   r4   subselectorr   r<   r   )r   s   "r   r   Negation.__annotate__   s!     ' ' 'D 'T 'r   c                	    Wn         W n        R # r?   rd   r   )rB   rd   r   s   &&&r   rC   Negation.__init__   s     &r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r           Y Y# Yr   c                	l    V P                   P                   R V P                  : RV P                  : R2# )rJ   :not(r   rM   r!   rd   r   rl   s   &r   rN   Negation.__repr__   3    ..))*!DMM+<E$BRBRAUUWXXr   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r      s     < <3 <r   c                	    V P                   P                  4       p\        V4      ^8  d   VP                  R4      pV P                  P                  4        RV R2# )ru   rR   r   r   )r   rS   rT   rU   rd   rB   subsels   & r   rS   Negation.canonical   sP    !!++-v;?]]3'F--))+,E&;;r   c                   V ^8  d   QhRR/# rY   r   )r   s   "r   r   r          ) )1 )r   c                	    V P                   P                  4       w  rpV P                  P                  4       w  rEpW,           W%,           W6,           3# r?   rd   r[   r   rB   a1b1c1a2b2c2s   &      r   r[   Negation.specificity  C    ]]..0
%%113
w((r   r   Nra   r   r   r   r/   r/      s!    'Y<) )r   c                  J    ] tR tRtRtR R ltR R ltR R ltR	 R
 ltRt	R# )r0   i	  z&
Represents selector:has(subselector)
c               $    V ^8  d   QhRRRRRR/# )r   rd   r4   
combinatorTokenr   r8   r   )r   s   "r   r   Relation.__annotate__  s!     ' ' '5 'x 'r   c                	*    Wn         W n        W0n        R # r?   rd   r   r   rB   rd   r   r   s   &&&&r   rC   Relation.__init__  s     $&r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r     r   r   c                	l    V P                   P                   R V P                  : RV P                  : R2# )rJ   :has(r   r   rl   s   &r   rN   Relation.__repr__  r   r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r     s     < <3 <r   c                	    V P                   ^ ,          P                  4       p\        V4      ^8  d   VP	                  R4      pV P
                  P                  4        RV R2#   \         d    T P                   P                  4       p Lhi ; i)    rR   r   r   )r   rS   	TypeErrorrT   rU   rd   r   s   & r   rS   Relation.canonical  s    	2%%a(224F v;?]]3'F--))+,E&;;	  	2%%//1F	2s   !A$ $%BBc                   V ^8  d   QhRR/# rY   r   )r   s   "r   r   r     s     ) )1 )r   c                	   V P                   P                  4       w  rp V P                  R,          P                  4       w  rEpW,           W%,           W6,           3#   \         d!    T P                  P                  4       w  rEp LAi ; i)ru   )rd   r[   r   r   r   s   &      r   r[   Relation.specificity  sx    ]]..0
	8))"-99;JBB w((  	8))557JBB	8s   $A (BBr   rd   r   Nra   r   r   r   r0   r0   	  s!    '
Y<) )r   c                  J    ] tR tRtRtR R ltR R ltR R ltR	 R
 ltRt	R# )r1   i(  z'
Represents selector:is(selector_list)
c                    V ^8  d   QhRRRR/# )r   rd   r4   selector_listzIterable[Tree]r   )r   s   "r   r   Matching.__annotate__-  s     + + +n +r   c                	    Wn         W n        R # r?   rd   r  rB   rd   r  s   &&&r   rC   Matching.__init__-       *r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r  1  s     N N# Nr   c                	    R P                  R V P                   4       4      pV P                  P                   RV P                  : RV R2# ), c              3  8   "   T F  p\        V4      x  K  	  R # 5ir?   rL   r   ss   & r   r   $Matching.__repr__.<locals>.<genexpr>2       A.@T!WW.@   rJ   :is(r   r   r  rM   r!   rd   rB   args_strs   & r   rN   Matching.__repr__1  sE    99Ad.@.@AA..))*!DMM+<D
"MMr   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r  5  s     = =3 =r   c                	    . pV P                    F3  pVP                  4       pVP                  VP                  R 4      4       K5  	  RP	                  R V 4       4      pV P
                  P                  4        RV R2# )rR   r
  c              3  8   "   T F  p\        V4      x  K  	  R # 5ir?   r   r  s   & r   r   %Matching.canonical.<locals>.<genexpr>:       @-?SVV-?r  r  r   r  rS   appendrU   r   rd   rB   selector_argumentsr  selargr  s   &    r   rS   Matching.canonical5  sr    ##A[[]F%%fmmC&89 $ 99@-?@@--))+,D
!<<r   c                   V ^8  d   QhRR/# rY   r   )r   s   "r   r   r  =  s     @ @1 @r   c                	:    \        R  V P                   4       4      # )c              3  @   "   T F  qP                  4       x  K  	  R # 5ir?   )r[   )r   xs   & r   r   'Matching.specificity.<locals>.<genexpr>>  s     ?,>q==??,>r   )maxr  rl   s   &r   r[   Matching.specificity=  s    ?D,>,>???r   r  Nra   r   r   r   r1   r1   (  s#    +N=@ @r   c                  J    ] tR tRtRtR R ltR R ltR R ltR	 R
 ltRt	R# )r2   iA  zn
Represents selector:where(selector_list)
Same as selector:is(selector_list), but its specificity is always 0
c                    V ^8  d   QhRRRR/# )r   rd   r4   r  
list[Tree]r   )r   s   "r   r   "SpecificityAdjustment.__annotate__G  s     + + +j +r   c                	    Wn         W n        R # r?   r  r  s   &&&r   rC   SpecificityAdjustment.__init__G  r  r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r-  K  s     Q Q# Qr   c                	    R P                  R V P                   4       4      pV P                  P                   RV P                  : RV R2# )r
  c              3  8   "   T F  p\        V4      x  K  	  R # 5ir?   r  r  s   & r   r   1SpecificityAdjustment.__repr__.<locals>.<genexpr>L  r  r  rJ   :where(r   r  r  s   & r   rN   SpecificityAdjustment.__repr__K  sE    99Ad.@.@AA..))*!DMM+<GH:RPPr   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r-  O  s     @ @3 @r   c                	    . pV P                    F3  pVP                  4       pVP                  VP                  R 4      4       K5  	  RP	                  R V 4       4      pV P
                  P                  4        RV R2# )rR   r
  c              3  8   "   T F  p\        V4      x  K  	  R # 5ir?   r  r  s   & r   r   2SpecificityAdjustment.canonical.<locals>.<genexpr>T  r  r  r4  r   r  r  s   &    r   rS   SpecificityAdjustment.canonicalO  sr    ##A[[]F%%fmmC&89 $ 99@-?@@--))+,GH:Q??r   c                   V ^8  d   QhRR/# rY   r   )r   s   "r   r   r-  W  s      1 r   c                	    R# )r   r   r   r   r   rl   s   &r   r[   !SpecificityAdjustment.specificityW  s    r   r  Nra   r   r   r   r2   r2   A  s"    
+Q@ r   c                  v    ] tR tRtRt]R R l4       t]R R l4       tR R ltR	 R
 ltR R ltR R lt	Rt
R# )r.   i[  z6
Represents selector[namespace|attrib operator value]
c               0    V ^8  d   QhRRRRRRRRR	R
RR
/# )r   rd   r4   	namespace
str | Noneattribr   operatorzLiteral['exists']r   r<   r   r   )r   s   "r   r   Attrib.__annotate__a  sF        	
 $  
r   c                	    R # r?   r   rB   rd   rA  rC  rD  r   s   &&&&&&r   rC   Attrib.__init__`       r   c               0    V ^8  d   QhRRRRRRRRRR	R
R/# )r   rd   r4   rA  rB  rC  r   rD  r   r   r   r<   r   )r   s   "r   r   rE  k  sF        	
   
r   c                	    R # r?   r   rG  s   &&&&&&r   rC   rH  j  rI  r   c               0    V ^8  d   QhRRRRRRRRRR	R
R/# )r   rd   r4   rA  rB  rC  r   rD  r   zToken | Noner   r<   r   )r   s   "r   r   rE  t  sF        	
   
r   c                	B    Wn         W n        W0n        W@n        WPn        R # r?   )rd   rA  rC  rD  r   rG  s   &&&&&&r   rC   rH  t  s     !" 
r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   rE    s     n n# nr   c           
     	   V P                   '       d   V P                    R V P                   2MV P                  pV P                  R8X  d+   V P                  P                   RV P
                  : RV R2# V P                  f   Q hV P                  P                   RV P
                  : RV RV P                   RV P                  P                  : R2
# )|existsrJ   z]] )rA  rC  rD  rM   r!   rd   r   )rB   rC  s   & r   rN   Attrib.__repr__  s    6:nnnDNN#1T[[M2$++==H$nn--.a/@&LLzz%%%..))*!DMM+<AfXQt}}oUVW[WaWaWgWgVjjlmmr   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   rE    s     	4 	43 	4r   c                	P   V P                   '       d   V P                    R V P                   2MV P                  pV P                  R8X  d   TpM:V P                  f   Q hV V P                   V P                  P	                  4        2pV P
                  P                  4        RV R2# )rP  rQ  rJ   rK   )rA  rC  rD  r   r   rd   rS   )rB   rC  ops   &  r   rS   Attrib.canonical  s    6:nnnDNN#1T[[M2$++==H$B::)))8DMM?4::>>+;*<=B--))+,AbT33r   c                   V ^8  d   QhRR/# rY   r   )r   s   "r   r   rE    rr   r   c                	V    V P                   P                  4       w  rpV^,          pWV3# rt   rv   r\   s   &   r   r[   Attrib.specificity  rx   r   )rC  rA  rD  rd   r   N)r!   r"   r#   r$   r%   r	   rC   rN   rS   r[   r&   r   r   r   r.   r.   [  sI        n	4 r   c                  N    ] tR tRtRtRR R lltR R ltR R	 ltR
 R ltRt	R# )r)   i  zI
Represents namespace|element

`None` is for the universal selector '*'

Nc               $    V ^8  d   QhRRRRRR/# )r   rA  rB  elementr   r<   r   )r   s   "r   r   Element.__annotate__  s$      #5?	r   c                	    Wn         W n        R # r?   )rA  r]  )rB   rA  r]  s   &&&r   rC   Element.__init__  s     #r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r^    s     @ @# @r   c                	V    V P                   P                   R V P                  4        R2# )rJ   rK   )rM   r!   rS   rl   s   &r   rN   Element.__repr__  s(    ..))*!DNN,<+=Q??r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r^    s      3 r   c                	x    V P                   ;'       g    R pV P                  '       d   V P                   RV 2pV# )rR   rP  r]  rA  )rB   r]  s   & r   rS   Element.canonical  s6    ,,%%#>>>('3Gr   c                   V ^8  d   QhRR/# rY   r   )r   s   "r   r   r^    rr   r   c                	.    V P                   '       d   R# R# )r   )r   r   ru   r=  r]  rl   s   &r   r[   Element.specificity  s    <<<Nr   rf  )NNra   r   r   r   r)   r)     s!    @ r   c                  J    ] tR tRtRtR R ltR R ltR R ltR	 R
 ltRt	R# )r*   i  z
Represents selector#id
c               $    V ^8  d   QhRRRRRR/# )r   rd   r4   idr   r   r<   r   )r   s   "r   r   Hash.__annotate__  s!       3 4 r   c                	    Wn         W n        R # r?   )rd   rn  )rB   rd   rn  s   &&&r   rC   Hash.__init__  s     r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   ro    s     I I# Ir   c                	j    V P                   P                   R V P                  : RV P                   R2# )rJ   #rK   )rM   r!   rd   rn  rl   s   &r   rN   Hash.__repr__  s/    ..))*!DMM+<AdggYaHHr   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   ro    s     8 83 8r   c                	T    V P                   P                  4        R V P                   2# )rt  )rd   rS   rn  rl   s   &r   rS   Hash.canonical  s%    --))+,AdggY77r   c                   V ^8  d   QhRR/# rY   r   )r   s   "r   r   ro    rr   r   c                	V    V P                   P                  4       w  rpV^,          pWV3# rt   rv   r\   s   &   r   r[   Hash.specificity  rx   r   )rn  rd   Nra   r   r   r   r*   r*     s!    I8 r   c                  F    ] tR tRtR R ltR R ltR R ltR R	 ltR
tR# )r3   i  c               (    V ^8  d   QhRRRRRRRR/# )r   rd   r4   r   r   r   r   r<   r   )r   s   "r   r   CombinedSelector.__annotate__  s(     ' ' '3 'T 'd 'r   c                	6    Vf   Q hWn         W n        W0n        R # r?   r   r   s   &&&&r   rC   CombinedSelector.__init__  s    ### $&r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r~    s     
 
# 
r   c                	    V P                   R 8X  d   RMV P                   pV P                  P                   RV P                  : R V R V P                  : R2# )rR  z
<followed>rJ   rK   )r   rM   r!   rd   r   )rB   combs   & r   rN   CombinedSelector.__repr__  sQ    ##5|4??~~&&'q(94&$BRBRAUUVW	
r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r~    s     I I3 Ir   c                	    V P                   P                  4       p\        V4      ^8  d   VP                  R4      pV P                  P                  4        RV P
                   RV 2# )ru   rR   rR  )r   rS   rT   rU   rd   r   r   s   & r   rS   CombinedSelector.canonical  sY    !!++-v;?]]3'F--))+,Adoo->axHHr   c                   V ^8  d   QhRR/# rY   r   )r   s   "r   r   r~    r   r   c                	    V P                   P                  4       w  rpV P                  P                  4       w  rEpW,           W%,           W6,           3# r?   r   r   s   &      r   r[   CombinedSelector.specificity  r   r   r   N)	r!   r"   r#   r$   rC   rN   rS   r[   r&   r   r   r   r3   r3     s    '
I) )r   z%^[ \t\r\n\f]*([a-zA-Z]+)[ \t\r\n\f]*$z6^[ \t\r\n\f]*([a-zA-Z]*)#([a-zA-Z0-9_-]+)[ \t\r\n\f]*$z?^[ \t\r\n\f]*([a-zA-Z]*)\.([a-zA-Z][a-zA-Z0-9_-]*)[ \t\r\n\f]*$c                    V ^8  d   QhRRRR/# )r   r   r   r   zlist[Selector]r   )r   s   "r   r   r     s     . .s .~ .r   c           	     f   \         P                  V 4      pV'       d&   \        \        VP	                  ^4      R7      4      .# \
        P                  V 4      pVeI   \        \        \        VP	                  ^4      ;'       g    RR7      VP	                  ^4      4      4      .# \        P                  V 4      pVeI   \        \        \        VP	                  ^4      ;'       g    RR7      VP	                  ^4      4      4      .# \        \        V 4      4      pWn        \        \        V4      4      # )a  Parse a CSS *group of selectors*.

If you don't care about pseudo-elements or selector specificity,
you can skip this and use :meth:`~GenericTranslator.css_to_xpath`.

:param css:
    A *group of selectors* as a string.
:raises:
    :class:`SelectorSyntaxError` on invalid selectors.
:returns:
    A list of parsed :class:`Selector` objects, one for each
    selector in the comma-separated group.

rj  N)_el_rematchr8   r)   group_id_rer*   	_class_rer+   TokenStreamtokenizesourcelistparse_selector_group)r   r  streams   &  r   parser    s      LLEQ89::LLEgekk!n.D.DEu{{ST~VWXXOOC EU75;;q>+A+ATBEKKPQNST
 	
 #'FM$V,--r   c                    V ^8  d   QhRRRR/# )r   r  r  r   zIterator[Selector]r   )r   s   "r   r   r     s       1C r   c              #     "   V P                  4         \        \        V 4      !  x  V P                  4       R8X  d#   V P	                  4        V P                  4        KL  R# 5i)ru   NDELIM,)skip_whitespacer8   parse_selectorpeeknext)r  s   &r   r  r    sJ     

v.//;;=N*KKM""$s   AA!c                    V ^8  d   QhRRRR/# )r   r  r  r   !tuple[Tree, PseudoElement | None]r   )r   s   "r   r   r   (  s     " "; "+L "r   c                x   \        V 4      w  r V P                  4        V P                  4       pVR9   d    W3# V'       d   \        RV R24      hVP	                  RRR4      '       d6   \        RV P                  4       P                  4      pV P                  4        MRp\        V 4      w  rR\        WV4      pK  )	ru   Got pseudo-element :: not at the end of a selector+>~r   rR  EOFNr  )	parse_simple_selectorr  r  r(   is_delimr   r  r   r3   )r  resultr;   r  r   next_selectors   &     r   r  r  (  s    26:F
 {{}22 !! %''77TU  ==c3''eV[[]%8%89J""$ J(=f(E%!&mDr   c               $    V ^8  d   QhRRRRRR/# )r   r  r  inside_negationboolr   r  r   )r   s   "r   r   r   @  s)     o" o"o"*.o"&o"r   c                2   V P                  4        \        V P                  4      pV P                  4       pVP                  R 8X  g   VR8X  dz   VP                  R 8X  d   V P                  4       P                  pMV P                  4        RpV P                  4       R8X  d"   V P                  4        V P                  4       pMTpRpMR;rT\        WE4      pRp V P                  4       pVP                  R9   g*   VP                  RRRR4      '       g   V'       d
   VR8X  d   EM<V'       d   \        RV R24      hVP                  R	8X  d1   \        V\        R
V P                  4       P                  4      4      pK  VR8X  d,   V P                  4        \        W`P                  4       4      pK  VR8X  d.   V P                  4        \        RV P                  4       4      pEK  VR8X  d   V P                  4        \        W`4      pEK0  VR8X  EdD   V P                  4        V P                  4       R8X  d^   V P                  4        V P                  4       pV P                  4       R8X  d&   V P                  4        \!        V\#        V 4      4      pEK  V P                  4       pVP%                  4       R9   d   \'        V4      pEK  V P                  4       R8w  Ed'   \)        Wh4      p\+        V4      R8X  Ed   \        V P                  4      ^8X  g   \        V P                  4      ^8X  d#   V P                  ^ ,          P                  R8X  g   \        V P                  4      ^8  d)   V P                  R,          P                  R4      '       gp   \        V P                  4      ^8  dK   V P                  R,          P                  R8X  d)   V P                  R ,          P                  R4      '       g   \        R4      hEK)  V P                  4        V P                  4        VP%                  4       R8X  dy   V'       d   \        R4      h\-        V RR7      w  rV P                  4       pV
'       d   \        RV
 RVP.                   24      hVR8w  d   \        RV 24      h\1        Wi4      pEK  VP%                  4       R8X  d   \3        V 4      w  r\5        WlV4      pEK  VP%                  4       R!9   d   \7        V 4      p\9        Wn4      pEK5  VP%                  4       R8X  d   \7        V 4      p\;        Wn4      pEKc  \=        Wh\#        V 4      4      pEK{  \        RV 24      h\        V P                  4      V8X  d   \        RV P                  4        24      hWg3# )"IDENTNSr  r  r  r  r  r  HASHr   zPseudo[Element[*]:scope]zJGot immediate child pseudo-element ":scope" not at the start of a selectornotzGot nested :not()T)r  z inside :not() at zExpected ')', got haswherezExpected selector, got r  rR   r  rP  )r  r  r  r   r  rk   )r  rJ   )r  r   )r  r   )z
first-linezfirst-letterbeforeafter)matchesis)r  rT   usedr  r   r  r   next_ident_or_starr)   r  r(   r*   r   r+   
next_identparse_attribr5   parse_argumentsr   r   r-   rL   r  posr/   parse_relative_selectorr0   parse_simple_selector_argumentsr1   r2   r,   )r  r  selector_startr  rA  r]  r  r;   r   argumentargument_pseudo_elementnext_r   r|   	selectorss   &&             r   r  r  @  sn    %N;;=DyyGt~599++IKKMI;;=N*KKM//1GGI""9.F+/N
{{}II%}}S#sC00DN$:%''77TU  99&$ufkkm.A.A"BCF^#KKM6#4#4#67F^#KKMT6#4#4#67F^#KKM!&1F^#KKM{{}.!'!2!2!4;;=N2KKM%<&(?&N %%'E{{} QQ "%U{{}..<#==$)FKK(A-&++a.2E2E2LFKK(A-&++b/2J2J32O2OFKK(A-"KKO00C7"KKO44S99 .9  KKM""${{}%"-.ABB4ID51 *-/0G/HHZ[`[d[dZef  N*-0B5'.JKK!&3%'(?(G%
!&i@"33;FC	!&4');FC	.vA!&1HI%(?v&FGG
6;;>)!$;FKKM?"KLL!!r   c                    V ^8  d   QhRRRR/# )r   r  r  r   zlist[Token]r   )r   s   "r   r   r     s     L LK LK Lr   c                    . p V P                  4        V P                  4       pVP                  R9   g   VR9   d   VP                  V4       KL  VR8X  d   V# \	        RV 24      h)ru   Expected an argument, got r  STRINGNUMBER)r  r  r  -r  )r  r  r   r  r(   )r  r|   r  s   &  r   r  r    sl    I
 ::66% D
 ;
 U#n$%(B5'&JKKr   c                    V ^8  d   QhRRRR/# )r   r  r  r   ztuple[Token, Selector]r   )r   s   "r   r   r     s      K 4J r   c                   V P                  4        R pV P                  4       pVR9   d$   TpV P                  4        V P                  4       pM\        RR^ R7      p VP                  R9   g   VR9   d   V\	        RVP
                  4      ,          pM*VR	8X  d   \        V4      pW4^ ,          3# \        RV 24      hV P                  4       pKs  )
rI   r  rR  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  s   &    r   r  r    s    
KKKMEPP
 7CQ/

::66% D
 ;
 4u{{33Kn$;'Fay((%(B5'&JKKr   c                    V ^8  d   QhRRRR/# )r   r  r  r   r,  r   )r   s   "r   r   r     s      K J r   c                X   . p \        V R4      w  r#V'       d   \        RV R24      hV P                  4        V P                  4       pVR9   d4   V P                  4        V P                  4        VP	                  V4       K  VR8X  d   VP	                  V4        V# \        RV 24      h)ru   Tr  z inside functionr  r  r  )r  r(   r  r  r  )r  r|   r  r;   r  s   &    r   r  r    s    I
!6vt!D%''77GH  	 33KKM""$V$n$V$  &(B5'&JKKr   c               $    V ^8  d   QhRRRRRR/# )r   rd   r4   r  r  r   r.   r   )r   s   "r   r   r     s&     )G )G4 )G )G )Gr   c                   VP                  4        VP                  4       pVf2   VP                  4       R8w  d   \        RVP                  4        24      hVP                  4       R8X  dP   VP	                  4        VP                  4       R8X  d   R pVP	                  4        RpMTpVP                  4       pR pMR ;r4Vf   VP                  4        VP	                  4       pVR8X  d   \        W\        RV4      RR 4      # VR8X  d   RpMmVP                  RRR	R
RR4      '       dD   VP                  4       R8X  d/   \        RVP                  4      R,           pVP	                  4        M\        RV 24      hVP                  4        VP	                  4       pVP                  R9  d   \        RV 24      hVP                  4        VP	                  4       pVR8w  d   \        RV 24      h\        W\        RV4      WF4      # )NrP  zExpected '|', got =z|=r   rQ  ^$rR   r  !zOperator expected, got zExpected string or ident, got zExpected ']', got r  )r  r  )r  rK   )r  r  )r  r  r  r(   r  r  r.   r   r  r   r   )rd   r  rC  rA  rV  r  r   s   &&     r   r  r    s   
&&(F~&++->9!$6v{{}o"FGG {{}&;;=N*IKKMBI&&(FB		z N"(tE6/BHdSSN"B^^Cc3S99KKM^+eU[[)C/BKKM%(?w&GHH
KKMEzz,,!$B5'"JKK
KKME!$6ug">??(tE6':BFFr   c                    V ^8  d   QhRRRR/# )r   tokensIterable[Token]r   ztuple[int, int]r   )r   s   "r   r   r     s       _ r   c                   V  F  pVP                   R8X  g   K  \        R4      h	  RP                  R V  4       4      P                  4       pVR8X  d   R	# VR8X  d   R
# VR8X  d   R# RV9  d   ^ \	        V4      3# VP                  R^4      w  r4V'       g   ^pM%VR9   d   \	        VR,           4      pM\	        V4      pV'       d   \	        V4      M^ pWV3# )zf
Parses the arguments for :nth-child() and friends.

:raises: A list of tokens
:returns: :``(a, b)``

r  z$String tokens not allowed in series.rI   c              3  N   "   T F  p\        R VP                  4      x  K  	  R# 5i)r   N)r   r   r   s   & r   r   parse_series.<locals>.<genexpr>)  s     =fUUEKK((fs   #%oddevenn1)r   ru   )r   r   )ru   r   >   r  r  )r   
ValueErrorr   stripintsplit)r  r   r  r]   r^   a_as_intb_as_ints   &      r   parse_seriesr    s     ::!CDD  	=f==CCEAEzF{Cx
!|#a&y773?DA	
jq3w<q6s1vHr   c                      ] tR tRt$ ]R R l4       t]R R l4       tR R ltR R	 ltR
 R ltR]R&   ]	R R l4       t
]	R R l4       tR R ltRtR# )r   iB  c               (    V ^8  d   QhRRRRRRRR/# )	r   type_z:Literal['IDENT', 'HASH', 'STRING', 'S', 'DELIM', 'NUMBER']r   r   r  r  r   r   r   )r   s   "r   r   Token.__annotate__D  s2      I  	
 
r   c                	    R # r?   r   clsr  r   r  s   &&&&r   __new__Token.__new__C  s     r   c               (    V ^8  d   QhRRRRRRRR/# )	r   r  zLiteral['EOF']r   r<   r  r  r   r   r   )r   s   "r   r   r  L  s    OONO4OcOdOr   c                	    R # r?   r   r  s   &&&&r   r  r  K  s    LOr   c               (    V ^8  d   QhRRRRRRRR/# )	r   r  r   r   rB  r  r  r   r   r   )r   s   "r   r   r  N  s(      C 
   r   c                	@    \         P                  WV34      pW4n        V# r?   )tupler  r  )r  r  r   r  objs   &&&& r   r  r  N  s    mmC0
r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r  S  s     = =# =r   c                	V    R V P                    RV P                   RV P                   R2# )<z 'z' at r  )r   r   r  rl   s   &r   rN   Token.__repr__S  s)    499+R

|5
!<<r   c                    V ^8  d   QhRRRR/# )r   valuesr   r   r  r   )r   s   "r   r   r  V  s     = = = =r   c                	N    V P                   R 8H  ;'       d    V P                  V9   # )r  )r   r   )rB   r  s   &*r   r  Token.is_delimV  s"    yyG#<<

f(<<r   r  r  c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r  \  s      c r   c                	    V ^ ,          # )r   r   rl   s   &r   r   
Token.type[      Awr   c                   V ^8  d   QhRR/# r   r   rB  r   )r   s   "r   r   r  `  s      z r   c                	    V ^,          # rt   r   rl   s   &r   r   Token.value_  r  r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r  c  s     ' 'S 'r   c                	z    V P                   R 8X  d   \        V P                  4      # \        RV P                  4      # )r  r   )r   rL   r   r   rl   s   &r   r   	Token.cssc  s.    99 

##E4::&&r   r   N)r!   r"   r#   r$   r	   r  rN   r  __annotations__propertyr   r   r   r&   r   r   r   r   r   B  sj      O O
== 
H   ' 'r   r   c                  .    ] tR tRtR R ltR R ltRtR# )EOFTokenii  c                    V ^8  d   QhRRRR/# )r   r  r  r   r   r   )r   s   "r   r   EOFToken.__annotate__j  s     4 4# 4$ 4r   c                	2    \         P                  V R RV4      # r  )r   r  )r  r  s   &&r   r  EOFToken.__new__j  s    }}S%s33r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r  m  s     . .# .r   c                	<    R V P                    RV P                   R2# )r  z at r  )r   r  rl   s   &r   rN   EOFToken.__repr__m  s    499+T$((1--r   r   N)r!   r"   r#   r$   r  rN   r&   r   r   r   r  r  i  s    4. .r   r  c                  b    ] tR tRtRt]R,           tR],           tRtR] R] 2tR] R] 2t	R	t
R
# )TokenMacrosit  z&\\([0-9a-f]{1,6})(?:\r\n|[ \n\r\t\f])?z|\\[^\n\r\f0-9a-f]z\\(?:\n|\r\n|\r|\f)|z
[^\0-\177]z[_a-z0-9-]|rP  z[_a-z]|r   N)r!   r"   r#   r$   unicode_escapeescapestring_escapenonasciinmcharnmstartr&   r   r   r   r%  r%  t  sE    >N33F+f4MH6(!H:.Fxq
+Gr   r%  c                  &    ] tR tRtRR R lltRtR# )	MatchFunci}  c               (    V ^8  d   QhRRRRRRRR/# )r   r   r   r  r  endposr   zre.Match[str] | Noner   )r   s   "r   r   MatchFunc.__annotate__~  s,     # ## ##36#	#r   c                	    R # r?   r   )rB   r   r  r/  s   &&&&r   __call__MatchFunc.__call__~  s    "r   r   N)..)r!   r"   r#   r$   r2  r&   r   r   r   r-  r-  }  s    # #r   r-  c                    V ^8  d   QhRRRR/# )r   patternr   r   r-  r   )r   s   "r   r   r     s     H Hc Hi Hr   c                    \         P                  ! V \        \        4      ,          \         P                  4      P
                  # r?   )recompilevarsr%  
IGNORECASEr  )r5  s   &r   _compiler;    s'    ::g[ 112==AGGGr   z[ \t\r\n\f]+z[+-]?(?:[0-9]*\.[0-9]+|[0-9]+)z#(?:%(nmchar)s)+z -?(?:%(nmstart)s)(?:%(nmchar)s)*'z!([^\n\r\f\\']|%(string_escape)s)*"z!([^\n\r\f\\"]|%(string_escape)s)*z\\(.)z\\(?:\n|\r\n|\r|\f)r  c                    V ^8  d   QhRRRR/# )r   r  zre.Match[str]r   r   r   )r   s   "r   r   r     s      M c r   c                |    \        V P                  ^4      ^4      pV\        P                  8  d   Rp\	        V4      # )ru   i  )r  r  sys
maxunicodechr)r  	codepoints   & r   _replace_unicoderD    s1    EKKNB'I3>>!	y>r   c                    V ^8  d   QhRRRR/# )r   r   r   r   r   )r   s   "r   r   r     s     6 6# 6# 6r   c                B    \        \        V 4      p \        \        V 4      # r?   )_sub_unicode_escaperD  _sub_simple_escape_replace_simple)r   s   &r   unescape_identrJ    s     0%8Eou55r   c                    V ^8  d   QhRRRR/# )r   r  r   r   zIterator[Token]r   )r   s   "r   r   r     s     D D D Dr   c              #  2  "   ^ p\        V 4      pW8  Edj   \        WR7      pV'       d"   \        RRV4      x  VP                  4       pK<  \	        WR7      pV'       dM   \        \        \        \        VP                  4       4      4      p\        RWA4      x  VP                  4       pK  \        WR7      pV'       dU   \        \        \        \        VP                  4       R,          4      4      p\        RWA4      x  VP                  4       pEK  W,          pV\        9   d   \        V,          ! W^,           R7      pV'       g   Q R4       hVP                  4       pWb8X  d   \        RV 24      hW,          V8w  d   \        R	V 24      h\        \        \        \        \        R
VP                  4       4      4      4      p\        RWA4      x  V^,           pEK  \        WR7      pV'       d2   VP                  4       p\        RWA4      x  VP                  4       pEK  V^,           pWV R8X  d)   V P                  RV4      pVR8X  d   TpM	V^,          pEKO  \        RW,          V4      x  V^,          pEKp  W8X  g   Q h\!        V4      x  R# 5i)r   r  r  rR  r  :ru   NNr  z)Should have found at least an empty matchzUnclosed string at zInvalid string at rI   r  r  z/*z*/r  Nr   )rT   _match_whitespacer   end_match_identrH  rI  rG  rD  r  _match_hash_match_string_by_quoter(   _sub_newline_escape_match_numberfindr  )r  r  len_sr  r   quoteend_pospos2s   &       r   r  r    s*    
CFE
+!!-S#&&))+CQ(&!45Eu{{}!UE ,,))+CA'&#$4ekkmB6GHE ++))+C***51!qAEEEE5iikG),?u*EFFzU"),>se*DEE&#$&9"ekkm&LE %--A+Ca)KKME%--))+CQw;$&&t$CbyqGQVS))q<<
3-s   JJc                  b    ] tR tRtRR R lltR R ltR R ltR	 R
 ltR R ltR R lt	Rt
R# )r  i  Nc               $    V ^8  d   QhRRRRRR/# )r   r  r  r  rB  r   r<   r   )r   s   "r   r   TokenStream.__annotate__  s!     / / /
 /d /r   c                	    . V n         \        V4      V n        W n        R V n        RV n        V P                  P                  V n        R # )NF)r  iterr  r  peeked_peeking__next__
next_token)rB   r  r  s   &&&r   rC   TokenStream.__init__  s8    !#	6l$(++..r   c                   V ^8  d   QhRR/# r   r   r   r   )r   s   "r   r   r[    s      e r   c                	   V P                   '       dI   R V n         V P                  f   Q hV P                  P                  V P                  4       V P                  # V P	                  4       pV P                  P                  V4       V# F)r_  r^  r  r  ra  rB   r  s   & r   r  TokenStream.next  se    ===!DM;;***IIT[[);;!		r   c                   V ^8  d   QhRR/# rd  r   )r   s   "r   r   r[    s      e r   c                	    V P                   '       g   V P                  4       V n        R V n         V P                  f   Q hV P                  # )T)r_  ra  r^  rl   s   &r   r  TokenStream.peek  s:    }}}//+DK DM{{&&&{{r   c                   V ^8  d   QhRR/# rF   r   )r   s   "r   r   r[    s     ( (C (r   c                	    V P                  4       pVP                  R 8w  d   \        RV 24      h\        RVP                  4      # )r  zExpected ident, got r   )r  r   r(   r   r   rg  s   & r   r  TokenStream.next_ident  s=    		:: %(<UG&DEEE5;;''r   c                   V ^8  d   QhRR/# r  r   )r   s   "r   r   r[    s     I IJ Ir   c                	    V P                  4       pVP                  R 8X  d   VP                  # VR8X  d   R# \        RV 24      h)r  NzExpected ident or '*', got r  )r  r   r   r(   rg  s   & r   r  TokenStream.next_ident_or_star  sA    		:: ;;N"!$?w"GHHr   c                   V ^8  d   QhRR/# )r   r   r<   r   )r   s   "r   r   r[    s       r   c                	l    V P                  4       pVP                  R 8X  d   V P                  4        R# R# )r  N)r  r   r  )rB   r  s   & r   r  TokenStream.skip_whitespace  s'    yy{99IIK r   )r_  ra  r^  r  r  r  r?   )r!   r"   r#   r$   rC   r  r  r  r  r  r&   r   r   r   r  r    s&    /(I r   r  )r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   rf  )O__conditional_annotations__r%   
__future__r   rD  r7  r@  typingr   r   r   r   r   r   r	   collections.abcr
   r   r   typing_extensionsr   r   	Exceptionr   SyntaxErrorr(   r4   r  r   r6   r8   r+   r5   r,   r-   r/   r0   r1   r2   r.   r)   r*   r3   r8  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r%  r-  r;  rM  rS  rP  rO  rQ  subrH  r&  r:  rG  rR  methodcallerrI  rD  rJ  r  r  )ru  s   @r   <module>r~     s{   #  	 
 U U U<< '8
I >- > 
i  !!:C!?@y @F FR *& &D 6 *) )0) )>@ @2 4< <~ : *) )8 
<	= 
M	N JJF	
.T"0o"dL 4,)GXH$'E#sTz/" $'N.u ., ,# #H _- :;)*:;6	76	7 
 ZZ)-- jj!;!;R]]KOO jj!78<<  ''36
DN+ +r   