
    BR<i                     n
   d Z ddlmZmZmZmZmZmZmZm	Z	 ddl
mZ ddlmZmZ ddlmZmZ ddlmZmZmZmZmZmZ  G d d	      Z eej6                  ej8                  ej:                  ej<                  ej>                  ej@                  ejB                  ejD                  ejF                  ejH                  ejJ                  ejL                  ejN                  ejP                  ejR                  ejT                  ejV                  ejX                  ejZ                  ej\                  g      Z/i d
ej`                  dejb                  dejd                  dejf                  dejh                  dejj                  dejl                  dejn                  dejp                  dejr                  dejt                  dejv                  dejx                  dejz                  dej|                  dej~                  dej                  i dej                  dej                  dej8                  dej:                  dej<                  d ej>                  d!ej@                  d"ejB                  d#ejD                  d$ejF                  d%ej6                  d&ej                  d'ej                  d(ej                  d)ej                  d*ej                  d+ej                  i d,ej                  d-ej                  d.ej                  d/ej                  d0ej                  d1ej                  d2ej                  d3ejH                  d4ejJ                  d5ejL                  d6ejN                  d7ejP                  d8ejR                  d9ejT                  d:ejV                  d;ejX                  d<ejZ                  d=ej\                  iZPej                  ejx                  ej                  ej                  ej                  ej                  ej                  ej                  d>ZQi d?d@d@d@d
dAdddBdBddBdddddCdCdddddddddDdDdEdDdFdFdGdGi dHdHdIdIdJdJdAdAdKdKdLdLdMdMdNdNdOdOdPdPdQdQdRdRdSdSdddTdTddZRdUdVdRddWdXZSdYdZd[d\d]d^d_d`ZT G da db      ZUdceddefdeZVdceddefdfZWdge	eef   ddefdhZXdiee   ddefdjZYddefdkZZdce[ddefdlZ\dce]ddefdmZ^dce]ddefdnZ_dceddefdoZ`dceaddefdpZbdcecddefdqZddceddefdrZedsefdteddefduZgdvefddeffdwZh G dx dy      Ziyz){zExpression Parser.    )AnyCallableDictIterableListOptionalSequenceUnion   )DbDoc)
BYTE_TYPESget_item_or_attrMessagemysqlxpb_enum)BuildExprTypesBuildScalarTypesMessageTypeProtobufMessageCextTypeProtobufMessageType
StrOrBytesc                   t   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdDZFdEZGdFZHdGZIdHZJdIZKdJZLdKZMdLZNdMZOdNZPdOZQdPZRdQZSdRZTdSZUdTZVdUZWdVZXdWZYdXZZdYZ[dZZ\y[)\	TokenTypezToken types class.r                        	   
                                                                      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   N)]__name__
__module____qualname____doc__NOTANDORXORISLPARENRPAREN
LSQBRACKET
RSQBRACKETBETWEENTRUENULLFALSEINLIKEINTERVALREGEXPESCAPEIDENTLSTRINGLNUMDOTDOLLARCOMMAEQNEGTGELTLEBITANDBITORBITXORLSHIFTRSHIFTPLUSMINUSMULDIVHEXBINNEGBANGMICROSECONDSECONDMINUTEHOURDAYWEEKMONTHQUARTERYEAREROTEME
DOUBLESTARMODCOLONORORANDANDLCURLYRCURLYCASTDOTSTARORDERBY_ASCORDERBY_DESCASARROWQUOTEBINARYDATETIMETIMECHARDATEDECIMALSIGNEDINTEGERUNSIGNEDJSONSECOND_MICROSECONDMINUTE_MICROSECONDMINUTE_SECONDHOUR_MICROSECONDHOUR_SECONDHOUR_MINUTEDAY_MICROSECOND
DAY_SECOND
DAY_MINUTEDAY_HOUR
YEAR_MONTHOVERLAPS     L/var/www/html/delta-backend/venv/lib/python3.12/site-packages/mysqlx/expr.pyr   r   /   s   
C
C	
B
C	
BFFJJGDDE	BDHFFEGD
CFE	B	B	B	B	B	BFEFFFDE
C
C
C
C
CDKFFD
CDEGDGJ
CEDFFFDGKL	BEEFHDDDGFGHDMKKOJJHJHr   r   andorxorisnotlikeinoverlapsregexpbetweenintervalescapecastdivhexbintruefalsenullsecondminutehourdayweekmonthquarteryearmicrosecondascdescasbinarydatetimetimechardatedecimalsignedunsignedintegerjsonsecond_microsecondminute_microsecondminute_secondhour_microsecondhour_secondhour_minuteday_microsecond
day_second
day_minuteday_hour
year_month)r   r   r   r   r   r   r   r   ===&&||^!=<>>>=<<=&|<<>>+-*/~%cont_in	sign_plus
sign_minus!)r  r  r  r   r  is_notnot_between
not_regexpnot_likenot_innot_cont_innot_overlaps)r   r   r   r   r   r  r   c            	       B    e Zd ZdZd
dedededdfdZdefdZdefd	Zy)TokenzToken representation class.
token_typevaluelengthreturnNc                 .    || _         || _        || _        y N)r(  r)  r*  )selfr(  r)  r*  s       r   __init__zToken.__init__#  s    )
!r   c                 "    | j                         S r-  )__str__r.  s    r   __repr__zToken.__repr__(  s    ||~r   c                     | j                   t        j                  t        j                  t        j                  fv r| j                    d| j
                   dS | j                    S )N())r(  r   r   r   r   r)  r2  s    r   r1  zToken.__str__+  sU    ??OONN
 

 oo&a

|155//"#r   )r   )	rr   rs   rt   ru   intstrr/  r3  r1  r   r   r   r'  r'     s>    %"3 "s "C " "
# $ $r   r'  r)  r+  c                    t        d      }t        | t               r| S t        | t              r| j                  d      S t        | t        t
        f      r,t        d      |d<   t        |       j                         |d<   |S t        | t        t        f      r,t        d      |d<   t        |       j                         |d<   |S t        d	      |d<   t        |       j                         |d
<   |S )NMysqlx.Expr.ExprT)reparseMysqlx.Expr.Expr.Type.OBJECTtypeobjectMysqlx.Expr.Expr.Type.ARRAYarrayMysqlx.Expr.Expr.Type.LITERALliteral)r   
isinstance
ExprParserexprdictr   r   build_objectget_messagelisttuplebuild_arraybuild_scalarr)  msgs     r   
build_exprrO  8  s    
$
%C%'#%*&zz$z''%$'#$BCF$U+779H J 
ED%=	)#$ABF"5)557G J $$CDF%e,88:IJr   c                 V   t        | t              rt        |       S t        | t              rt	        |       S t        | t
              rt        |       S t        | t              rt        |       S t        | t              rt        |       S | 
t               S t        dt        |              )NzUnsupported data type: )rC  r8  build_string_scalarr   build_bytes_scalarboolbuild_bool_scalarr7  build_int_scalarfloatbuild_double_scalarbuild_null_scalar
ValueErrorr=  r)  s    r   rL  rL  J  s    %"5))%$!%((% ''%&&%"5))} ""
.tE{m<
==r   objc                 t   t        | t              rt        | j                        S t	        d      }| j                         D ]t  \  }}t	        d      }t        |t              r|j                         n||d<   t        |      j                         |d<   |d   j                  |j                         g       v |S )NMysqlx.Expr.ObjectMysqlx.Expr.Object.ObjectFieldkeyr)  fld)rC  r   rG  __dict__r   itemsr8  encoderO  rH  extend)r[  rN  r_  r)  pairs        r   rG  rG  Z  s    #uCLL))
&
'Ciik 0
U78&0c&:cjjlU"5)557WE
4++-./	0
 Jr   r@  c                     t        d      }|d   j                  | D cg c]  }t        |      j                          c}       |S c c}w )NMysqlx.Expr.Arrayr)  )r   rd  rO  rH  )r@  rN  r)  s      r   rK  rK  g  sC    
%
&CLeLUE*668LMJ Ms    Ac                  8    t        d      } t        d      | d<   | S )NMysqlx.Datatypes.Scalarz#Mysqlx.Datatypes.Scalar.Type.V_NULLr=  r   rN  s    r   rX  rX  m  s!    
+
,C EFCKJr   c                 B    t        d      }t        d      |d<   | |d<   |S )Nri  z%Mysqlx.Datatypes.Scalar.Type.V_DOUBLEr=  v_doubler   rM  s     r   rW  rW  s  s*    
+
,C GHCKC
OJr   c                 B    t        d      }t        d      |d<   | |d<   |S )Nri  z#Mysqlx.Datatypes.Scalar.Type.V_SINTr=  v_signed_intr   rM  s     r   rU  rU  z  s+    
+
,C EFCKCJr   c                 B    t        d      }t        d      |d<   | |d<   |S )Nri  z#Mysqlx.Datatypes.Scalar.Type.V_UINTr=  v_unsigned_intr   rM  s     r   build_unsigned_int_scalarrq    s,    
+
,C EFCK!CJr   c                     t        | t              rt        t        | d            } t	        d      }t        d      |d<   t	        d|       |d<   |S )Nzutf-8ri  z%Mysqlx.Datatypes.Scalar.Type.V_STRINGr=  zMysqlx.Datatypes.Scalar.StringrZ  v_string)rC  r8  bytes	bytearrayr   r   rM  s     r   rQ  rQ    sM    %iw/0
+
,C GHCK>eLC
OJr   c                 B    t        d      }t        d      |d<   | |d<   |S )Nri  z#Mysqlx.Datatypes.Scalar.Type.V_BOOLr=  v_boolr   rM  s     r   rT  rT    s*    
+
,C EFCKCMJr   c                 X    t        d      }t        d      |d<   t        d|       |d<   |S )Nri  z%Mysqlx.Datatypes.Scalar.Type.V_OCTETSr=  zMysqlx.Datatypes.Scalar.OctetsrZ  v_octetsr   rM  s     r   rR  rR    s2    
+
,C GHCK>eLC
OJr   c                 B    t        d      }t        d      |d<   | |d<   |S )Nr:  rA  r=  rB  r   rM  s     r   build_literal_exprr{    s*    
$
%C ?@CKC	NJr   nameparamc                     t        d      }t        |    |d<   |j                         g|d<   t        d      }t        d      |d<   |j                         |d<   |S )NMysqlx.Expr.Operatorr|  r}  r:  Mysqlx.Expr.Expr.Type.OPERATORr=  operator)r   _UNARY_OPERATORSrH  r   )r|  r}  r  rN  s       r   build_unary_opr    sc    -.H'-HV**,-HW
$
%C @ACK**,C
OJr   stringc                 &    | j                  dd      S )N"z"")replacer  s    r   escape_literalr    s    >>#t$$r   c                   l   e Zd ZdZdGdededdfdZdefdZdHdZd	e	d
edefdZ
de	defdZdIde	dedefdZd	e	defdZdHdZde	ddfdZde	defdZde	defdZde	defdZde	defdZde	de	defdZde	defdZdeeeef      fdZdefdZdefdZdefdZdefd Z defd!Z!deeeef      fd"Z"defd#Z#defd$Z$de	ddfd%Z%defd&Z&defd'Z'defd(Z(defd)Z)d*edefd+Z*defd,Z+defd-Z,dId.ede-e   fd/Z.e/defd0       Z0defd1Z1de2e	   d2e3g ef   defd3Z4defd4Z5defd5Z6defd6Z7defd7Z8defd8Z9defd9Z:defd:Z;defd;Z<defd<Z=defd=Z>dId>edefd?Z?dId>edefd@Z@defdAZAdeBfdBZCdee   fdCZDdeeeef      fdDZEdeeeef      fdEZFdeeeef      fdFZGy)JrD  zExpression parser class.r  allow_relationalr+  Nc                     || _         g | _        g | _        d| _        || _        i | _        d| _        | j                          | j                          y Nr   )	r  tokenspath_name_queuepos_allow_relational_columnsplaceholder_name_to_positionpositional_placeholder_countclean_expressionlex)r.  r  r  s      r   r/  zExprParser.__init__  sL    !#%*,/?&<>)12)
r   c                 "    d| j                    dS )Nz<mysqlx.ExprParser 'z'>r  r2  s    r   r1  zExprParser.__str__  s    %dkk]"55r   c                    t        | j                  t              st        | j                        | _        | j                  j	                  d      | _        t        | j                        dkD  r&| j                  d   dk(  r| j                  dd | _        d| j                  dd j                         v r| j                  dd | _        d| j                  dd	 j                         v r| j                  d	d | _        yy)
zRemoves the keywords that does not form part of the expression.

        Removes the keywords "SELECT" and "WHERE" that does not form part of
        the expression itself.
         r   ;NSELECTr   WHEREr   )rC  r  r8  reprstriplenupperr2  s    r   r  zExprParser.clean_expression  s     $++s+t{{+DKkk'',t{{aDKKOs$:++cr*DKt{{2A,,..++ab/DKdkk"1o++--++ab/DK .r   r_  r   c                 f    |dz   t        | j                        k  xr | j                  |dz      |k(  S Nr   )r  r  )r.  r_  r   s      r   next_char_iszExprParser.next_char_is  s1    QwT[[))Jdkk#'.Bd.JJr   r  c                    |}d}|t        | j                        k  r| j                  |   j                         s| j                  |   dk(  rq| j                  |   dk(  r|du rt        d      d}|dz  }|t        | j                        k  r1| j                  |   j                         r^| j                  |   dk(  rq| j                  || }t	        t
        j                  |t        |            S )NF.Tz"Invalid number. Found multiple '.'r   )r  r  isdigitrY  r'  r   r   )r.  r  start	found_dotvals        r   
lex_numberzExprParser.lex_number  s    	C$$KK$$&$++c*:c*A{{33&$$%IJJ 	 1HC C$$KK$$&$++c*:c*A kk%$Y^^S#c(33r   iallow_spacec                 z   |}|t        | j                        k  r| j                  |   j                         s1| j                  |   dk(  s| j                  |   j                         rp|rn|dz  }|t        | j                        k  rQ| j                  |   j                         r;| j                  |   dk(  rN| j                  |   j                         r|rn| j                  || }	 |t        | j                        k  rN| j                  |   dk(  r<|j	                         t
        vr&t        t        j                  |t        |            }|S t        t        |j	                            |j	                         t        |            }	 |S # t        $ r( t        t        j                  |t        |            }Y |S w xY w)N_r   r5  )r  r  isalnumisspacelower%_SQL_FUNTION_RESERVED_WORDS_COLLISIONr'  r   r   _RESERVED_WORDSKeyError)r.  r  r  r  r  tokens         r   	lex_alphazExprParser.lex_alpha  sd   #dkk""KKN""${{1~$A&&([FA #dkk""KKN""${{1~$A&&([ kk%"
	:C$$KKNc)IIK'LLioosCH=
  ociik:CIIKSR   	:)//3C9E	:s   'A$F	 9F	 	-F:9F:c                    | j                   |   }d}|dz  }|}|t        | j                         k  r| j                   |   }||k(  r1|dz   t        | j                         k  r| j                   |dz      |k7  rn]||dfv r4|dz   t        | j                         k\  rn;|dz  }|| j                   |   z  }n||z  }|dz  }|t        | j                         k  r|t        | j                         k\  s| j                   |   |k7  rt        d|       |dk(  r't        t        j
                  |t        |      dz         S t        t        j                  |t        |      dz         S )N r   \z'Unterminated quoted string starting at `r   )r  r  rY  r'  r   r   r   )r.  r_  
quote_charr  r  r   s         r   lex_quoted_tokenzExprParser.lex_quoted_token  sU   [[%
qC$$;;s#D
"!Gc$++..KKa(J6 
D))7c$++..qt{{3''t1HC# C$$$ #dkk""dkk#&6*&DFugNOO#s3x!|<<Y&&SX\::r   c                    d}d}d}|t        | j                        k  r| j                  |   }|j                         r|dz  }>|j                         r| j	                  |      }n|j                         s|dk(  r| j                  ||      }n|dk(  rt        t        j                  |      }n|dk(  rt        t        j                  |      }n|dk(  rt        t        j                  |      }n|dk(  rt        t        j                  |      }ne|d	k(  rt        t        j                  |      }nD|d
k(  rO| j                  |d      r!|st        t        j                  dd      }d}nt        t        j                   |      }n|dk(  rK| j                  |d      rt        t        j"                  dd      }nt        t        j$                  |      }n|dk(  rt        t        j&                  |      }n|dk(  rt        t        j(                  |      }n^|dk(  rt        t        j*                  |      }n=|dk(  rL| j                  |d      rt        t        j,                  dd      }n	t        t        j,                  dd      }n|dk(  rK| j                  |d      rt        t        j.                  dd      }nt        t        j0                  |      }n|dk(  rt        t        j2                  |      }n{|dk(  rK| j                  |d      rt        t        j4                  dd      }nGt        t        j6                  |      }n+|dk(  rt        t        j8                  |      }n
|dk(  rt        t        j:                  |      }n|dk(  rt        t        j<                  |      }n|dk(  rt        t        j>                  |      }n|dk(  rt        t        j@                  |      }n|d k(  rt        t        jB                  |      }ne|d!k(  rK| j                  |d      rt        t        jD                  d"d      }n1t        t        jF                  |      }n|d#k(  r| j                  |d      rt        t        jD                  d$d      }n| j                  |d#      rt        t        jH                  d%d      }n| j                  |d      rt        t        jJ                  d&d      }nt        t        jL                  |      }ng|dk(  ry| j                  |d      rt        t        jN                  d'd      }n3| j                  |d      rt        t        jP                  d(d      }nt        t        jR                  |      }n|d)k(  r| j                  |d      rt        t        jT                  d*d      }n|dz   t        | j                        k  r2| j                  |dz      j                         r| j	                  |      }nit        t        jV                  |      }nN|d+v r&|r$t        t        jX                  |      }|sd}n)d}d}n$|d,v r| j[                  |      }nt]        d-|       | j^                  ja                  |       ||jb                  z  }|t        | j                        k  ry y ).Nr   Fr   r  ?:{}r  r  r  z->r   Tr  z**r  $r  r  r  r  r  r
  r  r	  r5  r6  []r  ,r  r  r  r  r  r  r  r  r  z.*)'r  )r  r  r  zUnknown character at )2r  r  r  r  r  isalphar  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  rY  r  appendr*  )r.  r  
arrow_lastinside_arrowr   r  s         r   r  zExprParser.lex  s'   
#dkk"";;q>D||~Q||~*43;q,7i//6ioot4i..5i..5innd3$$Q,Z!)//4;E!%J!)//48E$$Q,!)"6"6a@E!)--6EimmT2i..5immT2$$Q,!),,a8E!),,a8E$$Q,!)"2"2D!<E!)"2"2D9Ei..5$$Q,!)..$:E!)//48Ei..5i..5i22D9i22D9immT2ioot4$$Q,!),,a8E!)..$7E$$Q,!),,a8E&&q#.!)"2"2D!<E&&q#.!),,a8E!),,5E$$Q,!)"2"2D!<E&&q#.!),,a8E!),,5E$$Q,!)"3"3T1=EUS--$++a!e2D2L2L2N OOA.E!)--6E#
ioot4##'L!&J#(L(--a0 #8!<==KKu%AS #dkk""r   r(  c           
      P   | j                   t        | j                        k\  rt        d| d| j                    d      | j                  | j                      j                  |k7  rBt        d| d| j                    d| j                  | j                       d| j                         y )NExpected token type z at pos z but no tokens leftz but found type z, on tokens )r  r  r  rY  r(  r.  r(  s     r   assert_cur_tokenzExprParser.assert_cur_token  s    88s4;;''&zl(488* E   ;;txx ++z9&zl(488* EDHH-.l4;;-I  :r   c                 :    | j                  | j                  |      S r-  pos_token_type_isr  r  s     r   cur_token_type_iszExprParser.cur_token_type_is  s    %%dhh
;;r   typesc                     | j                   t        | j                        k  xr% | j                  | j                      j                  |v S r-  r  r  r  r(  r.  r  s     r   cur_token_type_inzExprParser.cur_token_type_in  s8    xx#dkk**Xt{{488/D/O/OSX/XXr   c                 @    | j                  | j                  dz   |      S r  r  r  s     r   next_token_type_iszExprParser.next_token_type_is  s    %%dhhlJ??r   c                     | j                   t        | j                        k  xr( | j                  | j                   dz      j                  |v S r  r  r  s     r   next_token_type_inzExprParser.next_token_type_in  s@    HHs4;;'' >DHHqL)44=	
r   c                 n    |t        | j                        k  xr | j                  |   j                  |k(  S r-  )r  r  r(  )r.  r  r(  s      r   r  zExprParser.pos_token_type_is  s/    S%%S$++c*:*E*E*SSr   c                     | j                  |       | j                  | j                     j                  }| xj                  dz  c_        |S r  )r  r  r  r)  )r.  r(  r)  s      r   consume_tokenzExprParser.consume_token  s:    j)DHH%++Ar   c                    g }d}| j                  t        j                         | j                  t        j                        s@| j                         j                         }t        |d      rI|j                  j                  r3| j                  j                  d|j                  j                         d}n;t        |d      s/d|v r+d|d   v r$| j                  j                  d|d   d          d}|j                  |       | j                  t        j                        rb| xj                  dz  c_        |j                  | j                         j                                | j                  t        j                        rb| j                  t        j                         |r| j                  j                          |S )z{Parse a paren-bounded expression list for function arguments or IN
        list and return a list of Expr objects.
        F
identifierr   Tr|  r   )r  r   r{   r  r|   _exprrH  hasattrr  r|  r  insertr  r   r  pop)r.  exprspath_name_addedmsg_exprs       r   paren_expr_listzExprParser.paren_expr_list  sW    9++,%%i&6&67zz|//1Hx.83F3F3K3K$$++Ax/B/B/G/GH"&Hl3 H,h|44$$++Ax/Ef/MN"&LL"((9ATZZ\5578 ((9 	9++,  $$&r   c                    | j                  t        j                         t        d      }| j	                  t        j
                        rA| j                  t        j                        |d<   | j                  t        j
                         | j                  | j                     j                  |d<   | xj                  dz  c_        |S )NzMysqlx.Expr.Identifierschema_namer|  r   )
r  r   r   r   r  r   r  r  r  r)  )r.  idents     r   r  zExprParser.identifier  s    ioo.01""9==1#'#5#5ioo#FE- y}}-DHH-33fAr   c                     t        d      }| j                         |d<   | j                         |d<   t        d      }t        d      |d<   |j	                         |d<   |S )NzMysqlx.Expr.FunctionCallr|  r}  r:  zMysqlx.Expr.Expr.Type.FUNC_CALLr=  function_call)r   r  r  r   rH  )r.  r  r  s      r   r  zExprParser.function_call  sd     :; $ 1f!%!5!5!7g-.()JK$1$=$=$?!r   c                    | j                  t        j                         | j                  | j                     }|j
                  t        j                  k(  rz|j                  j                  d      r3|j                  j                  d      rt        |j                   d      | j                  t        j                         |j                  }na|j
                  t        j                  k(  r,| j                  t        j                         |j                  }nt        d| j                         t        d      }t        d      |d<   ||d<   |S )Nr  z* is not a valid JSON/ECMAScript identifierz?Expected token type IDENT or LSTRING in JSON path at token pos Mysqlx.Expr.DocumentPathItem(Mysqlx.Expr.DocumentPathItem.Type.MEMBERr=  r)  )r  r   r   r  r  r(  r   r)  
startswithendswithrY  r   r   r   )r.  r  member_namedoc_path_items       r   docpath_memberzExprParser.docpath_member  s   9==)DHH%y.{{%%c*u{{/C/CC/H {{m#MN  y/++K!2!22y001++Kxxj"    >? -6!
f "-gr   c                    | j                  t        j                         | j                  t        j                        rY| j                  t        j                         | j                  t        j
                         t        d      }t        d      |d<   |S | j                  t        j                        rt        | j                  t        j                              }|dk  rt        d| j                         | j                  t        j
                         t        d      }t        d      |d<   ||d<   |S t        d| j                         )	Nr  z6Mysqlx.Expr.DocumentPathItem.Type.ARRAY_INDEX_ASTERISKr=  r   z"Array index cannot be negative at z-Mysqlx.Expr.DocumentPathItem.Type.ARRAY_INDEXindexzGException token type MUL or LNUM in JSON path array index at token pos )r  r   r}   r  r   r~   r   r   r   r7  
IndexErrorr  rY  )r.  r  r)  s      r   docpath_array_loczExprParser.docpath_array_loc  s   9//0!!)--0y}}-y334#$BCM$1H%M&! ! !!)..1**9>>:;Eqy #EdhhZ!PQQy334#$BCM$1?%M&! &+M'"  
$
 	
r   c                 |   | j                   st        d      | j                  t        j                        r| j                  t        j                         t        d      }| j                  t        j                        r^t        d      }t        d      |d<   | j                  t        j                        |d<   |d   j                  |j                         g       |d   j                  | j                                | j                  r| j                  d   |d	<   t        d
      }t        d      |d<   ||d<   |S )Nz-Empty string cannot be used as document fieldMysqlx.Expr.ColumnIdentifierr  r  r=  r)  document_pathr   r|  r:  Mysqlx.Expr.Expr.Type.IDENTr  )r  rY  r  r   r   r  r   r   r   rd  rH  r  r  )r.  col_idr  rE  s       r   document_fieldzExprParser.document_field  s   {{LMM!!)"2"23y//078!!)//2#$BCM$1:%M&! &*%7%7	%HM'"?#**M,E,E,G+HI&&t'9'9';<!11!4F6N)*$%BCV#\r   c                    g }	 | j                  t        j                        r/|j                  | j	                         j                                n<| j                  t        j                        rX| j                  t        j                         t        d      }t        d      |d<   |j                  |j                                n| j                  t        j                        r.|j                  | j                         j                                nx| j                  t        j                        rX| j                  t        j                         t        d      }t        d      |d<   |j                  |j                                nnt        |      }|dkD  r6t        ||dz
     d      t        d      k(  rt        d| j                          |S )zParse a JSON-style document path, like WL#7909, but prefix by @.
        instead of $. We parse this as a string because the protocol doesn't
        support it. (yet)
        r  z1Mysqlx.Expr.DocumentPathItem.Type.MEMBER_ASTERISKr=  z1Mysqlx.Expr.DocumentPathItem.Type.DOUBLE_ASTERISKr   r   z!JSON path may not end in '**' at )r  r   r   r  r  rH  r   r  r   r   r}   r  r   r  r   rY  r  )r.  doc_pathr  rb  s       r   r  zExprParser.document_path+  s    %%imm4 3 3 5 A A CD''	(9(9:""9#4#45 '(F G(5G)f%  9 9 ;<''	(<(<= 6 6 8 D D FG''	(<(<=""9#7#78 '(F G(5G)f%  9 9 ;<) * H19)(519*=vF-?K
 
 @
KLLr   c                    g }|j                  | j                  t        j                               | j	                  t        j
                        rm| j                  t        j
                         |j                  | j                  t        j                               | j	                  t        j
                        rmt        |      dkD  rt        d| j                         |j                          t        d      }t        dt        |            D ],  }|dk(  r	|d   |d<   |dk(  r	|d   |d<   |dk(  s%|d   |d	<   . d
}| j	                  t        j                        r5d}| j                  t        j                         | j                         |d<   n| j	                  t        j                        rd}| j                  t        j                         d
}| j	                  t        j                        r!d}| j                  t        j                         | j                  t        j                         | j                         |d<   |r| j                  t        j                         |rRt        |d         dk(  rAt        d      }t!        d      |d<   d|d<   |d   j#                  |j%                         g       t        d      }t!        d      |d<   ||d<   |S )Nr   z Too many parts to identifier at r  r   r|  r   
table_namer   r  FTr  r  r  r=  r  r)  r:  r  r  )r  r  r   r   r  r   r  rY  r  reverser   ranger   r  r   r   r   rd  rH  )r.  partsr  r  is_doc	is_quotedr  r  s           r   column_identifierzExprParser.column_identifierO  se   T''	89$$Y]]3y}}-LL++IOO<= $$Y]]3 u:>?zJKK78q#e*% 	1AAv!&qva',Qx|$a(-a}%	1 !!)"2"23Fy//0&*&8&8&:F?###IOO4Fy/I%%ioo6 	""9??3y//0&*&8&8&:F?#""9??3c&12a7#$BCM$1:%M&! &(M'"?#**M,E,E,G+HI-.()FG!'r   c                     | j                   t        | j                        k\  rt        d      | j                  | j                      }| xj                   dz  c_         |S )NzUnexpected end of token streamr   )r  r  r  rY  )r.  r  s     r   
next_tokenzExprParser.next_token  sG    88s4;;''=>>DHH%Ar   c                 ^    | j                         }|j                  |k7  rt        d|       y )Nr  )r  r(  rY  )r.  r(  r  s      r   expect_tokenzExprParser.expect_token  s4    !z)3J<@AA *r   c                 4    | j                   | j                     S r-  )r  r  r2  s    r   
peek_tokenzExprParser.peek_token  s    {{488$$r   c                 v    | j                   | j                     j                  }| xj                  dz  c_        |S r  )r  r  r)  )r.  r)  s     r   consume_any_tokenzExprParser.consume_any_token  s,    DHH%++Ar   c                    t        d      }| j                  t        | j                        k  r| j	                  t
        j                        s|d   j                  | j                         j                         g       | j	                  t
        j                        sna| j                  t
        j                         | j                  t        | j                        k  r | j	                  t
        j                        s| j                  t
        j                         t        d      }t        d      |d<   |j                         |d<   |S )zH
        jsonArray            ::=  "[" [ expr ("," expr)* ] "]"
        rg  r)  r:  r?  r=  r@  )r   r  r  r  r  r   r~   rd  r  rH  r   r  r   )r.  rN  rE  s      r   parse_json_arrayzExprParser.parse_json_array  s     )*hhT[[))$2H2H  3
 L!9!9!; <=)))//:y/ hhT[[))$2H2H  3
 	9//0)*$%BCV)Wr   c                 \   t        d      }| j                  t        | j                        k  r2| j	                  t
        j                        st        d      }| j                  t
        j                        |d<   | j                  t
        j                         | j                         j                         |d<   |d   j                  |j                         g       | j	                  t
        j                        snb| j                  t
        j                         | j                  t        | j                        k  r!| j	                  t
        j                        s| j                  t
        j                         t        d      }t        d      |d<   |j                         |d	<   |S )
z
        jsonDoc              ::=  "{" [jsonKeyValue ("," jsonKeyValue)*] "}"
        jsonKeyValue         ::=  STRING_DQ ":" expr
        r]  r^  r_  r)  r`  r:  r<  r=  r>  )r   r  r  r  r  r   r   r  r   r   r  rH  rd  r   r   )r.  rN  itemrE  s       r   parse_json_doczExprParser.parse_json_doc  sB   
 *+hhT[[))$2H2H3
 ;<D,,Y->->?DKy/ JJL446DMJt//123)))//:y/ hhT[[))$2H2H3
 	9++,)*$%CDV*Xr   r  c                    d}| j                  t        j                        r | j                  t        j                        }n| j                  t        j                        r | j                  t        j                        }nK|j
                  t        j                  k(  rt        | j                        }nt        d| j                         t        d      }t        d      |d<   || j                  v r| j                  |   |d<   |S | j                  |d<   | j                  | j                  |<   | xj                  dz  c_        |S )Nr  z&Invalid placeholder name at token pos r:  z!Mysqlx.Expr.Expr.Type.PLACEHOLDERr=  positionr   )r  r   r   r  r   r(  r   r8  r  rY  r  r   r   r  )r.  r  place_holder_namer  s       r   parse_place_holderzExprParser.parse_place_holder  s    !!)..1 $ 2 29>> B##IOO4 $ 2 29?? C!2!22 #D$E$E FEdhhZPQQ-.()LM A AA#'#D#DEV#WHZ   $(#D#DHZ  11 --! --2-r   c                 >   t        dd      }| j                  t        j                         |d   j	                  | j                         j                         g       | j                  t        j                         t        t        j                  | j                                     }|d   j	                  t        |      j                         g       | j                  t        j                         t        d|j                               }t        d      |d<   |S )	z2cast ::= CAST LPAREN expr AS cast_data_type RPARENr  r   r|  r}  r:  r  r  r=  )r   r  r   r{   rd  r  rH  r   rR  r8  rc  cast_data_typer{  r|   r   )r.  r  type_scalarrN  s       r   r   zExprParser.cast  s    1?9++,  $**,":":"<!=>9<<((D4G4G4I)JK  "4["A"M"M"O!PQ9++,(83G3G3IJ#$DEF
r   c           	         | j                         }|j                  t        j                  t        j                  t        j
                  t        j                  fv r.| j                         }|r|j                   | S |j                  S |j                  t        j                  u r/| j                  d      }|r|j                   | S |j                  S |j                  t        j                  t        j                  fv rJ| j                  t        j                        r| j                  t        j                         |j                  S |j                  t        j                  t        j                  t        j                   fv r|j                  S t#        d|j                   d| j$                   d|j                   d      )a  cast_data_type ::= ( BINARY dimension? ) |
        ( CHAR dimension? ) |
        ( DATE ) |
        ( DATETIME dimension? ) |
        ( TIME dimension? ) |
        ( DECIMAL dimension? ) |
        ( SIGNED INTEGER? ) |
        ( UNSIGNED INTEGER? ) |
        JSON
        TzUnknown token type z at position z (r6  )r  r(  r   r   r   r   r   cast_data_type_dimensionr)  r   r   r   r  r   r  r   r   rY  r  )r.  r  	dimensions      r   r  zExprParser.cast_data_type  su    !NNNN	 
 
 557I2;ekk]9+.LLy00055d;I2;ekk]9+.LL	 0 0)2D2DEE%%i&7&78""9#4#45;;NNNN 
 

 ;;!%"2"2!3=
 K}A
 	
r   r   c                 F   | j                  t        j                        syg }| j                  t        j                         |j	                  | j                  t        j
                               |rl| j                  t        j                        rM| j                  t        j                         |j	                  | j                  t        j
                               | j                  t        j                         t        |      dk(  r	d|d    dS d|d    d|d    dS )z*dimension ::= LPAREN LNUM (, LNUM)? RPARENNr   r5  r   r6  r  )	r  r   r{   r  r  r   r   r|   r  )r.  r   r"  s      r   r!  z#ExprParser.cast_data_type_dimension  s    %%i&6&67	9++,++INN;<t--ioo>y/T//	?@9++, 9~" 	!~Q	
 Yq\N!IaL>3	
r   c                  X    t        d      } t        d      | d<   t        dd      | d<   | S )Nr:  r  r=  r  r  r  r  r   rj  s    r   star_operatorzExprParser.star_operator  s2    ()#$DEF!"8sCJ
r   c                 
   | j                         }|j                  t        j                  t        j                  fv r| j                  |      S |j                  t        j                  k(  r| j                         S |j                  t        j                  k(  r| j                         S |j                  t        j                  k(  r| j                         S |j                  t        j                  k(  r1| j                         }| j                  t        j                         |S |j                  t        j                   t        j"                  fv r| j%                         }|j                  t        j&                  k(  rE|j(                  |j(                  z   | j*                  | j,                     _        | j/                         S t1        |j(                  | j/                               S |j                  t        j2                  t        j4                  t        j6                  fv r$t1        |j(                  | j/                               S |j                  t        j8                  k(  rt;        t=        |j(                              S |j                  t        j>                  k(  rt;        tA                     S |j                  t        j&                  k(  r\d|j(                  v r't;        tC        tE        |j(                                    S t;        tG        tI        |j(                                    S |j                  t        jJ                  t        jL                  fv r/t;        tO        |j                  t        jJ                  k(              S |j                  t        jP                  k(  r| jS                         S |j                  t        jT                  k(  r| jW                         S |j                  t        jX                  k(  r| j,                  dz
  | _        | j[                  t        j                        sy| j[                  t        j\                        rj| j_                  | j,                  dz   t        jX                        r=| j_                  | j,                  dz   t        j                        r| ja                         S | jb                  s| jS                         S | je                         S tg        d|j                   d| j,                         )z<Parse an atomic expression and return a protobuf Expr objectr  r   r   r   zUnknown token type = z&  when expecting atomic expression at )4r  r(  r   r   r   r  r   r  r}   r  r   r   r{   r  r  r|   r   r   r  r   r)  r  r  atomic_exprr  rv   r   r   r   r{  rQ  r   rX  rW  rV  rU  r7  r   r   rT  r   r  r   r%  r   r  r   r  r  r  r	  rY  )r.  r  rE  peeks       r   r'  zExprParser.atomic_expr%  s   !	 1 19??CC**511y///&&((y333((**y~~-99;y///::<Di../K		@@??$D)..0.3kkDJJ.FDHH%+''))!%++t/?/?/ABB	y}}innMM!%++t/?/?/ABBy000%&9%++&FGGy~~-%&7&9::y~~-ekk!)*=eEKK>P*QRR%&6s5;;7G&HII		@@%!%"2"2inn"DE  y///&&((y}},%%''y.xx!|DH&&y'7'78''	6**488a<I**488a<9I9IJ ))++ 55 ##% ++- #E$4$4#5 6!XXJ(
 	
r   inner_parserc                     |       }| j                   t        | j                        k  r| j                  | j                      j                  |v rt	        d      }t        d      |d<   t	        d      }t        | j                  | j                      j                     |d<   |j                         g|d<   | xj                   dz  c_         |d   j                   |       j                         g       ||d<   |}| j                   t        | j                        k  r&| j                  | j                      j                  |v r|S )	z}Given a `set' of types and an Expr-returning inner parser function,
        parse a left associate binary operator expressionr:  r  r=  r  r|  r}  r   r  )
r  r  r  r(  r   r   
_OPERATORSr)  rH  rd  )r.  r  r)  lhsrN  r  s         r   parse_left_assoc_binary_op_exprz*ExprParser.parse_left_assoc_binary_op_expra  s   
 nhhT[[))dkk$((.C.N.NRW.W,-C'(HICK56H)$++dhh*?*E*EFHV!$!2 3HWHHMHW$$ln&@&@&B%CD&C
OC hhT[[))dkk$((.C.N.NRW.W 
r   c                 ~   | j                         }| j                  t        j                  t        j                        r}| j                  t        j                        r]| j                         }t        d      }|d   j                  |j                         g       |j                  t        j                  u rdnd|d<   | j                  t        j                         |d   j                  | j                         j                         g        | j                  t         st        d| j                          t"        j%                  | j'                         j)                               }|d   j                  t+        t-        |            j                         g       t        d|      }t/        d	      |d
<   |S )Nr  r}  date_adddate_subr|  z#Expected interval type at position r:  r  r  r=  )r'  r  r   r   r   r  r   r  r   rd  rH  r(  r  bit_expr_INTERVAL_UNITSrY  r  r8  rc  r  r  r{  rR  r   )r.  r,  r  r  s       r   add_sub_intervalzExprParser.add_sub_intervalt  se    !!NNIOO
%%i&8&89OO%E56HW$$coo&7%89#..)..@
j V y112W$$dmmo&A&A&C%DE)4))?; #Ftxxj!QRRJJt557==?@EW$$#$6u$=>JJLM ,x@C'(HICK
r   c                     | j                  t        t        j                  t        j                  t        j
                  g      | j                        S r-  )r-  setr   r   r   r   r3  r2  s    r   mul_div_exprzExprParser.mul_div_expr  s9    33	y}}=>!!
 	
r   c                     | j                  t        t        j                  t        j                  g      | j
                        S r-  )r-  r5  r   r   r   r6  r2  s    r   add_sub_exprzExprParser.add_sub_expr  s2    3312D4E4E
 	
r   c                     | j                  t        t        j                  t        j                  g      | j
                        S r-  )r-  r5  r   r   r   r8  r2  s    r   
shift_exprzExprParser.shift_expr  s6    33!!9#3#345t7H7H
 	
r   c                     | j                  t        t        j                  t        j                  t        j
                  g      | j                        S r-  )r-  r5  r   r   r   r   r:  r2  s    r   r1  zExprParser.bit_expr  s;    33!!9??I4D4DEFOO
 	
r   c           
          | j                  t        t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      | j                        S r-  )
r-  r5  r   r   r   r   r   r   r   r1  r2  s    r   	comp_exprzExprParser.comp_expr  sU    33LLLLLLLLLLLL	 MM
 	
r   c                 	   g }| j                         }d}| j                  t        j                        r!d}| j	                  t        j                         | j
                  t        | j                        k  rt|j                  |j                                | j                  | j
                     j                  }| j                  t        j                        r| j	                  t        j                         | j                  t        j                        r!d}| j	                  t        j                         |j                  | j                         j                                n5| j                  t        j                        r| j	                  t        j                         | j                  t        j                        r!|j                  | j                                nd}|j                  | j                         j                                n| j                  t        j                         rN| j	                  t        j                          |j                  | j                         j                                n| j                  t        j"                        r| j	                  t        j"                         |j                  | j                         j                                | j                  t        j$                        r| j	                  t        j$                         |j                  | j                         j                                n@| j                  t        j&                        r| j	                  t        j&                         |j                  | j                         j                                | j	                  t        j(                         |j                  | j                         j                                n| j                  t        j*                        rM| j	                  t        j*                         |j                  | j                         j                                n|rt-        d| j
                         d }|rNt/        d      }|r	t0        |   n||d<   ||d<   t/        d      }t3        d	      |d
<   |j                         |d<   |}|S )NFTr  zUnknown token after NOT as pos r  r|  r}  r:  r  r=  r  )r=  r  r   rv   r  r  r  r  r  rH  r)  rz   r   r{   rd  r  r   r   r   r   rw   r   rY  r   	_NEGATIONr   )r.  paramsr,  r  op_namer  r  s          r   	ilri_exprzExprParser.ilri_expr  sX   nn!!)--0Fy}}-88c$++&&MM#//+,kk$((+11G%%ill3""9<<0)))--8!F&&y}}5dnn.::<=''	5""9<<0)))*:*:;MM$"6"6"89'GMM$.."2">">"@A''	(:(:;""9#5#56dnn.::<=''	7""9>>2dnn.::<=)))*:*:;&&y'7'78MM$.."2">">"@A''	(9(9:""9#4#45dnn.::<=""9==1dnn.::<=''	(8(89""9#3#34dnn.::<=$'Ftxxj%QRR"#9:9?9W#5W $*!"#56#01Q#R '/';';'=$
r   c                     | j                  t        t        j                  t        j                  g      | j
                        S r-  )r-  r5  r   rw   r   rB  r2  s    r   and_exprzExprParser.and_expr  s2    33	 0 012DNN
 	
r   c                 j    | j                  t        t        j                  g      | j                        S r-  )r-  r5  r   ry   rD  r2  s    r   xor_exprzExprParser.xor_expr  s$    33C4H$--XXr   c                     | j                  t        t        j                  t        j                  g      | j
                        S r-  )r-  r5  r   rx   r   rF  r2  s    r   or_exprzExprParser.or_expr  s0    33y~~./
 	
r   r;  c                 ~    |r,g | _         d| _        i | _        d| _        | j	                          | j                         S r  )r  r  r  r  r  rH  )r.  r;  s     r   r  zExprParser._expr  s8    DKDH02D-01D-HHJ||~r   c                 J   | j                  |      }| j                  }| j                  t        | j                        dz
  t
        j                        r|dz  }|t        | j                        k  r2t        d| j                  | j                  d   d| j                         |S )Nr   zUnused token types z" found in expression at position: )r  r  r  r  r  r   r   rY  )r.  r;  
expressionused_tokenss       r   rE  zExprParser.expr  s    ZZ(
hh!!#dkk"2Q"6	E1KT[[))%dkk$((*&=%> ?++/88*6  r   c                 V    t        d| j                  t        j                              S )NzMysqlx.Crud.Columnr  )r   r  r   r   r2  s    r   parse_table_insert_fieldz#ExprParser.parse_table_insert_field  s    +$2D2DY__2UVVr   c                 6    | j                         j                  S r-  )r	  r  r2  s    r   parse_table_update_fieldz#ExprParser.parse_table_update_field  s    %%'222r   c                    g }| j                   j                  d      }|j                          |r|j                         }|j	                  d      |j	                  d      k7  sF|j	                  d      |j	                  d      k7  s#|j	                  d      |j	                  d      k7  r|j                          d| }|j	                  d      |j	                  d      k7  r9|j	                  d      |j	                  d      k7  r]|j	                  d      |j	                  d      k7  r|j                  |j                                |r|S )Nr  r5  r6  r  r  r  r  )r  splitr  r  countr  r  )r.  fieldstempfields       r   _table_fieldszExprParser._table_fields  s   {{  %HHJEC EKK$44;;s#u{{3'77;;s#u{{3'7788:,aw/	 C EKK$44;;s#u{{3'77;;s#u{{3'77 MM%++-(  r   c                 V   g }d}| j                         }| j                  t        | j                        k  r|s| j	                  t
        j                         d}t        d| j                               }| j                  t
        j                        rB| j	                  t
        j                         | j	                  t
        j                        |d<   n|t        |         |d<   |j                  |j                                | j                  t        | j                        k  r|S )NTFzMysqlx.Crud.Projection)sourcealias)rW  r  r  r  r  r   r   r   r  r  r   r   r  rH  )r.  project_exprfirstrT  
projections        r   parse_table_select_projectionz(ExprParser.parse_table_select_projection%  s      ##%hhT[[))""9??3E !9$**,OJ%%ill3""9<<0&*&8&8&I
7#&,S->&?
7#
 6 6 89 hhT[[)) r   c                    g }d}| j                   t        | j                        k  r|s| j                  t        j
                         d}t        d| j                               }| j                  t        j                        r.t        d      |d<   | j                  t        j                         nL| j                  t        j                        r-t        d      |d<   | j                  t        j                         |j                  |j                                | j                   t        | j                        k  r|S )NTFzMysqlx.Crud.Order)rE  zMysqlx.Crud.Order.Direction.ASC	directionz Mysqlx.Crud.Order.Direction.DESC)r  r  r  r  r   r   r   r  r  r   r   r   r  rH  )r.  order_specsr\  orders       r   parse_order_speczExprParser.parse_order_spec9  s     hhT[[))""9??3E/djjlCE%%i&;&;<%23T%Uk"""9#8#89''	(>(>?%23U%Vk"""9#9#9:u0023 hhT[[)) r   c                 8   g }d}| j                   t        | j                        k  rs|s| j                  t        j
                         d}|j                  | j                         j                                | j                   t        | j                        k  rs|S )NTF)	r  r  r  r  r   r   r  r  rH  )r.  	expr_listr\  s      r   parse_expr_listzExprParser.parse_expr_listL  sy     	hhT[[))""9??3ETZZ\5578	 hhT[[))
 r   )T)r+  N)F)Hrr   rs   rt   ru   r8  rS  r/  r1  r  r7  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!  staticmethodr%  r'  r   r   r-  r3  r6  r8  r:  r1  r=  rB  rD  rF  rH  r  rE  rN  r   rP  rW  r^  rc  rf  r   r   r   rD  rD    s   "	s 	d 	d 	6 6*"K K3 K4 K4c 4e 4"3 T e .;C ;E ;:m^
3 
4 
<C <D <Y Y Y@S @T @
 
 
TS Tc Td T  	e')@@A	B<K {  4
; 
4 *"	e')@@A	B"H/; /bE Bs Bt B
%E %3 
+ & 0 + .k %
 %
N
 
# 
& ;  :
[ :
xc]2:2{?2K	&+ :
k 

k 


K 


+ 

; 
6; 6p
+ 

Y+ Y
 

T k 
D 
[ 
W+ W3# 3tCy 	e')@@A	B(	e')@@A	B&
	e')@@A	B
r   rD  N)jru   typingr   r   r   r   r   r   r	   r
   dbdocr   helpersr   r   protobufr   r   r  r   r   r   r   r   r   r   r5  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2  rw   rx   ry   rz   rv   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'  rO  rL  rG  rK  rX  rV  rW  r7  rU  rq  rQ  rS  rT  rt  rR  r{  r8  r  r  rD  r   r   r   <module>rl     s  :  Q Q Q  1 , [ [| $$$$""!!)45	9==5),,5 
9==5 	),,	5
 
9==5 INN5 	),,5 	""5 i5 y  5 	""5 i5 INN5 
9==5 
9==5  
9==!5" INN#5$ Y__%5& INN'5( i)5* i+5, INN-5. 
9==/50 INN152 Y__354 y  556 INN758 9((95: 
9  ;5< I""=5> 	),,?5@ iA5B 	""C5D INNE5F INNG5H INNI5J y  K5L iM5N 	""O5P y  Q5R INNS5T )66U5V )66W5X Y,,Y5Z 	22[5\ 9((]5^ 9((_5` y00a5b )&&c5d )&&e5f 	""g5h )&&i5p NNNNNN  NN""	) %""$" 
4" 
5	"
 	$" 	$" 
5" 
5" " 	$" y" 	$" F" 	$" 	$"  !"" 	$#"$ %"& 	$'"( )"* 	$+", -". 	$/"0 	$1"2 3"4 5"6 7"8 9": ;"< ="> F?"@ yA"B 
C"
J 
			  
	$ $0n  $>( >[ > 
eD%K( 
[ 
x/ K ; u  C K S [ z k T k e  k k  [ [ %3 %3 %b br   