Ë
    @Øïiþ‹  ã                   óð   — U d Z ddlZddlZddlmZmZ ddlmZmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZ ddlmZmZmZmZmZ dd	lmZmZmZmZ dd
lmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( dZ)e*e+d<    G d„ d«      Z,y)z,Implements the MySQL Client/Server protocol.é    N)ÚDecimalÚDecimalException)ÚAnyÚDictÚListÚOptionalÚSequenceÚTupleÚUnioné   )Úutils)Úget_auth_plugin)ÚPARAMETER_COUNT_AVAILABLEÚ
ClientFlagÚ	FieldFlagÚ	FieldTypeÚ	ServerCmd)ÚDatabaseErrorÚInterfaceErrorÚProgrammingErrorÚget_exception)ÚConnAttrsTypeÚDescriptionTypeÚEofPacketTypeÚHandShakeTypeÚOkPacketTypeÚ%ParseValueFromBinaryResultPacketTypesÚQueryAttrTypeÚ
SocketTypeÚStatsPacketTypeÚ
StrOrBytesÚ!SupportedMysqlBinaryProtocolTypesé
   ÚPROTOCOL_VERSIONc                   óB  — e Zd ZdZededee   defd„«       Z	ededee
   dee   dee   ded	ed
ee   dedefd„«       Z	 	 	 	 	 	 	 	 	 	 dGdee   dee
   dee   dee   dedededed	ee   dee   dee   defd„Zededefd„«       Ze	 dHdedededefd„«       ZedIdedee   defd„«       ZedJdededefd„«       Z	 	 	 	 	 	 	 	 	 dKdedee
   dee   dee   dededed	ee   dee   dee   defd„Zededefd„«       Zededeeef   fd„«       Zededefd„«       Zededee   fd „«       ZedLded!edefd"„«       Zdedefd#„ZedMded$ede fd%„«       Z!	 dJd&e"d'eed(f   d)edee#eee   d(f      ee   f   fd*„Z$eded+edeeef   fd,„«       Z%eded+edeee&f   fd-„«       Z'e	 dNdededeee(f   fd.„«       Z)eded/edeeee*e+jX                  e+jV                  f      f   fd0„«       Z-ededeee+j\                  f   fd1„«       Z/	 dLd2e#e   dededee0d(f   fd3„Z1	 	 dOd&e"d4e#e   d)ededee#ee0d(f      ee   f   f
d5„Z2edede3eef   fd6„«       Z4ed7edeeeef   fd8„«       Z5ed7e*e+jX                  e+jV                  f   deeef   fd9„«       Z6ed7e*e+j\                  e+jn                  f   deeef   fd:„«       Z8ed;ed<ed=edefd>„«       Z9	 	 	 	 	 	 	 dPded=e:e;   d?e:e<   d@edAee3eee   f      dedBee=   dCedefdD„Z>ededeeef   fdE„«       Z?ededefdF„«       Z@y)QÚMySQLProtocolzRImplements MySQL client/server protocol

    Create and parses MySQL packets.
    Úclient_flagsÚdatabaseÚreturnc                 óV   — | t         j                  z  r|r|j                  d«      dz   S y)z.Prepare database string for handshake responseÚutf8ó    )r   ÚCONNECT_WITH_DBÚencode)r'   r(   s     úR/var/www/html/aiagents/fe/lib/python3.12/site-packages/mysql/connector/protocol.pyÚ_connect_with_dbzMySQLProtocol._connect_with_dbH   s+   € ð œ*×4Ñ4Ò4¹Ø—?‘? 6Ó*¨WÑ4Ð4Øó    ÚusernameÚpasswordÚauth_plugin_classÚauth_pluginÚ	auth_dataÚssl_enabledc                 ó$  — |sy	  t        ||«      |||||¬«      }|j                  «       }	| t        j
                  z  r&t        |	«      }t        j                  d|«      |	z   }|S |	dz   }|S # t        t        f$ r}
t        d|
› �«      |
‚d}
~
ww xY w)z#Prepare the authentication responser,   )r2   r3   r(   r7   zFailed authentication: Nú<B)	r   Úauth_responseÚ	TypeErrorr   r   ÚSECURE_CONNECTIONÚlenÚstructÚpack)r'   r2   r3   r(   r4   r5   r6   r7   ÚauthÚplugin_auth_responseÚerrÚresplenr:   s                r/   Ú_auth_responsezMySQLProtocol._auth_responseO   s½   € ñ Øð	KØB”? ;Ð0AÓBØØ!Ø!Ø!Ø'ôˆDð $(×#5Ñ#5Ó#7Ð ð œ*×6Ñ6Ò6ÜÐ.Ó/ˆGÜ"ŸK™K¨¨gÓ6Ð9MÑMˆMð Ðð 1°7Ñ:ˆMØÐøô œ>Ð*ò 	KÜ Ð#:¸3¸%Ð!@ÓAÀsÐJûð	Kús   …'A, Á,BÁ;B
Â
BNÚ	handshakeÚcharsetÚmax_allowed_packetÚ
conn_attrsc                 ó&  — |€i }	 |d   }|	xs |d   }	|sd}	 |j                  d«      }d}t        |«      }t        j                  d	|› |› d
�||||«      }|| j                  ||||||	||«      z  }|| j                  ||«      z  }|t        j                  z  r||	j                  d«      dz   z  }|t        j                  z  r|
�|| j                  |
«      z  }|S # t         t        f$ r}t        d|› d�«      d‚d}~ww xY w# t        $ r |}Y Œåw xY w)z"Make a MySQL Authentication packetNr6   r5   ú&Handshake misses authentication info (ú)r1   r+   Úxxxxxxxxxxxxxxxxxxxxxxz<IIHÚsxr,   )r;   ÚKeyErrorr   r.   ÚAttributeErrorr=   r>   r?   rD   r0   r   ÚPLUGIN_AUTHÚCONNECT_ARGSÚmake_conn_attrs)ÚselfrE   r2   r3   r(   rF   r'   rG   r7   r5   rH   r4   r6   rB   Úusername_bytesÚfillerÚusername_lenÚpackets                     r/   Ú	make_authzMySQLProtocol.make_autht   sm  € ð ÐØˆIð	Ø)2°;Ñ)?ˆIØ%ÒA¨°=Ñ)AˆKñ ØˆHð	&Ø%Ÿ_™_¨VÓ4ˆNð
 ˆÜ˜>Ó*ˆä—‘Ø�6�(˜<˜.¨Ð+ØØØØó
ˆð 	�$×%Ñ%ØØØØØØØØó	
ñ 		
ˆð 	�$×'Ñ'¨°hÓ?Ñ?ˆàœ*×0Ñ0Ò0Ø�k×(Ñ(¨Ó0°7Ñ:Ñ:ˆFàœ:×2Ñ2Ò2¸
Ð8NØ�d×*Ñ*¨:Ó6Ñ6ˆFàˆøôW œ8Ð$ò 	Ü"Ø8¸¸¸QÐ?óàðûð	ûô ò 	&à%ŠNð	&ús(   †C ™D ÃC?Ã*C:Ã:C?ÄDÄDc           	      óÚ  ‡ — ‰ D ]  }‰ |   �Œ	d‰ |<   Œ t        ˆ fd„‰ D «       «      t        ‰ j                  «       «      z   t        ‰ j                  «       «      z   }t	        j
                  d|«      }‰ D ]t  }|t	        j
                  dt        |«      «      z  }||j                  d«      z  }|t	        j
                  dt        ‰ |   «      «      z  }|‰ |   j                  d«      z  }Œv |S )z Encode the connection attributesÚ c              3   óR   •K  — | ]  }t        |«      t        ‰|   «      z   –— Œ  y ­w©N)r=   )Ú.0ÚxrH   s     €r/   ú	<genexpr>z0MySQLProtocol.make_conn_attrs.<locals>.<genexpr>¼   s#   øè ø€ Ò@°”�A“œ˜Z¨™]Ó+Õ+Ñ@ùs   ƒ$'r9   r+   )Úsumr=   ÚkeysÚvaluesr>   r?   r.   )rH   Ú	attr_nameÚconn_attrs_lenÚconn_attrs_packets   `   r/   rR   zMySQLProtocol.make_conn_attrsµ   sÿ   ø€ ð $ò 	+ˆIØ˜)Ñ$Ñ,Ø(*�
˜9Ò%ð	+ô Ó@°ZÔ@Ó@Ü�*—/‘/Ó#Ó$ñ%ä�*×#Ñ#Ó%Ó&ñ'ð 	ô #ŸK™K¨¨nÓ=ÐØ#ò 	FˆIØ¤§¡¨T´3°y³>Ó!BÑBÐØ ×!1Ñ!1°&Ó!9Ñ9ÐØ¤§¡¨T´3°zÀ)Ñ7LÓ3MÓ!NÑNÐØ ¨IÑ!6×!=Ñ!=¸fÓ!EÑEÑð		Fð
 !Ð r1   c                 óŠ   — t        j                  |«      t        j                  |«      z   t        j                  | «      z   dz   S )z Make a SSL authentication packets                         ©r   Ú	int4storeÚ	int2store)rF   r'   rG   s      r/   Úmake_auth_sslzMySQLProtocol.make_auth_sslÉ   sB   € ô �O‰O˜LÓ)Ü�o‰oÐ0Ó1ñ2ä�o‰o˜gÓ&ñ'ð ñð	
r1   ÚcommandÚargumentc                 ó>   — t        j                  | «      }|�||z  }|S )z(Make a MySQL packet containing a command)r   Ú	int1store)rk   rl   Údatas      r/   Úmake_commandzMySQLProtocol.make_commandÕ   s'   € ô �‰˜wÓ'ˆØÐØ�HÑˆDØˆr1   Ústatement_idÚrowsc                 óX   — t        j                  | «      t        j                  |«      z   S )z0Make a MySQL packet with Fetch Statement command)r   rh   )rq   rr   s     r/   Úmake_stmt_fetchzMySQLProtocol.make_stmt_fetchÝ   s!   € ô �‰˜|Ó,¬u¯©¸tÓ/DÑDÐDr1   c                 ób  — 	 |d   }|xs |d   }|sd}	 |j                  d«      }t        |«      }t        j                  d|› d	�t        j                  |«      }|| j                  |||||
|||«      z  }|| j                  ||«      z  }|t        j                  d
|«      z  }|t        j                  z  r||j                  d«      dz   z  }|t        j                  z  r|	�|| j                  |	«      z  }|S # t         t        f$ r}t        d|› d�«      d‚d}~ww xY w# t        $ r |}Y �Œw xY w)z0Make a MySQL packet with the Change User commandr6   r5   rJ   rK   Nr1   r+   r9   rM   ú<Hr,   )r;   rN   r   r.   rO   r=   r>   r?   r   ÚCHANGE_USERrD   r0   r   rP   rQ   rR   )rS   rE   r2   r3   r(   rF   r'   r7   r5   rH   r4   r6   rB   rT   rV   rW   s                   r/   Úmake_change_userzMySQLProtocol.make_change_userâ   sl  € ð	Ø)2°;Ñ)?ˆIØ%ÒA¨°=Ñ)AˆKñ ØˆHð	&Ø%Ÿ_™_¨VÓ4ˆNô
 ˜>Ó*ˆÜ—‘Ø��˜bÐ!Ü×!Ñ!Øó
ˆð 	�$×%Ñ%ØØØØØØØØó	
ñ 		
ˆð 	�$×'Ñ'¨°hÓ?Ñ?ˆà”&—+‘+˜d GÓ,Ñ,ˆàœ*×0Ñ0Ò0Ø�k×(Ñ(¨Ó0°7Ñ:Ñ:ˆFàœ:×2Ñ2Ò2¸
Ð8NØ�d×*Ñ*¨:Ó6Ñ6ˆFàˆøôS œ8Ð$ò 	Ü"Ø8¸¸¸QÐ?óàðûð	ûô ò 	&à%‹Nð	&ús(   ‚C8 •D Ã8DÄDÄDÄD.Ä-D.rW   c           	      óþ  — i }t        j                  d| dd «      d   |d<   |d   t        k7  rt        d|d   › dt        › �«      ‚t	        j
                  | dd d¬	«      \  } |d
<   t        j                  d| dd «      \  |d<   }}|d<   |d<   }}|d
   j                  «       |d
<   | dd } t	        j                  ||z   «      }d}|t        j                  z  r*|rt        d|dz
  «      nd}| d| }| |d } |d   dk(  r|dd }|t        j                  z  rVd| vr|d
   j                  d«      r	d| c} |d<   nt	        j
                  | d¬	«      \  } |d<   |d   j                  d«      |d<   nd|d<   ||z   |d<   ||d<   |S )zParse a MySQL Handshake-packetú<xxxxBr   é   Úprotocolz$Protocol mismatch; server version = z, client version = Nr,   ©ÚendÚserver_version_originalz<I8sx2sBH2sBxxxxxxxxxxé   Úserver_threadidrF   Úserver_statusr1   é   é   éÿÿÿÿz5.5.8r5   úutf-8Úmysql_native_passwordr6   Úcapabilities)r>   Úunpackr$   r   r   Úread_stringÚdecodeÚintreadr   r<   ÚminrP   Ú
startswith)	rW   ÚresÚ
auth_data1Úcapabilities1Úcapabilities2Úauth_data_lengthrˆ   Ú
auth_data2Úsizes	            r/   Úparse_handshakezMySQLProtocol.parse_handshake  sò  € ð ˆÜ Ÿ-™-¨°&¸¸1°+Ó>¸qÑAˆˆJ‰Øˆz‰?Ô.Ò.ÜØ6°s¸:±Ð6Gð H$Ü$4Ð#5ð7óð ô 27×1BÑ1BØ�1�2ˆJ˜Gô2
Ñ.ˆ�Ð-Ñ.ô �M‰MÐ2°F¸1¸R°LÓAñ	
ØÐ!Ñ"ØØØ�	‰NØ�Ñ ØØà),Ð-FÑ)G×)NÑ)NÓ)PˆÐ%Ñ&à˜˜�ˆä—}‘} ]°]Ñ%BÓCˆØˆ
Øœ*×6Ñ6Ò6Ù4D”3�rÐ+¨aÑ/Ô0È"ˆDØ  $˜ˆJØ˜D˜E�]ˆFØ˜"‰~ Ò"Ø'¨¨˜_�
àœ*×0Ñ0Ò0Ø˜fÑ$¨Ð-FÑ)G×)RÑ)RØô*ð 14°VÐ,�˜˜]Ò+ä/4×/@Ñ/@ÀÈWÔ/UÑ,�˜˜]Ñ+Ø!$ ]Ñ!3×!:Ñ!:¸7Ó!CˆC�Òà!8ˆC�Ñà%¨
Ñ2ˆˆKÑØ*ˆˆNÑØˆ
r1   c                 ó®   — t        j                  | d«      \  } }|dk7  rt        d«      ‚t        j                  | d¬«      \  } }| |j	                  d«      fS )z$Parse a MySQL AuthNextFactor packet.r   é   z.Failed parsing AuthNextFactor packet (invalid)r,   r}   r†   )r   Úread_intr   rŠ   r‹   )rW   Ústatusr5   s      r/   Úparse_auth_next_factorz$MySQLProtocol.parse_auth_next_factorS  sX   € ô Ÿ™¨°Ó2‰ˆ�Ø�QŠ;Ü Ð!QÓRÐRÜ#×/Ñ/°¸GÔDÑˆ�Ø�{×)Ñ)¨'Ó2Ð2Ð2r1   c                 óÒ  — | d   dk(  st        d«      ‚i }	 t        j                  d| dd «      d   |d<   t        j                  | dd «      \  } |d<   t        j                  | «      \  } |d	<   t        j                  d
| dd «      \  |d<   |d<   | dd } | r2t        j
                  | «      \  } |d<   |d   j                  d«      |d<   |S # t        $ r}t        d«      |‚d}~ww xY w)zParse a MySQL OK-packeté   r   z#Failed parsing OK packet (invalid).rz   r{   Úfield_countNÚaffected_rowsÚ	insert_idz<HHÚstatus_flagÚwarning_countÚinfo_msgr†   zFailed parsing OK packet.)r   r>   r‰   r   Úread_lc_intÚread_lc_stringr‹   Ú
ValueError)rW   Ú	ok_packetrB   s      r/   Úparse_okzMySQLProtocol.parse_ok\  s  € ð �a‰y˜AŠ~Ü Ð!FÓGÐGàˆ	ð	GÜ'-§}¡}°X¸vÀaÈ¸{Ó'KÈAÑ'NˆI�mÑ$Ü16×1BÑ1BÀ6È!È"À:Ó1NÑ.ˆF�I˜oÑ.Ü-2×->Ñ->¸vÓ-FÑ*ˆF�I˜kÑ*ô —‘˜e V¨A¨a [Ó1ñØ˜-Ñ(Ø˜/Ñ*à˜A˜B�ZˆFÙÜ05×0DÑ0DÀVÓ0LÑ-�˜	 *Ñ-Ø(1°*Ñ(=×(DÑ(DÀWÓ(M�	˜*Ñ%ð Ðøô ò 	GÜ Ð!<Ó=À3ÐFûð	Gús   —B3C Ã	C&ÃC!Ã!C&c                 ó˜   — 	 t        j                  | dd «      d   }|S # t        j                  t        f$ r}t        d«      |‚d}~ww xY w)z=Parse a MySQL packet with the number of columns in result setr�   Nr   zFailed parsing column count)r   r¤   r>   Úerrorr¦   r   )rW   ÚcountrB   s      r/   Úparse_column_countz MySQLProtocol.parse_column_counts  sQ   € ð	IÜ×%Ñ% f¨Q¨R jÓ1°!Ñ4ˆEØˆLøÜ—‘œjÐ)ò 	IÜ Ð!>Ó?ÀSÐHûð	Iús   ‚ ŸA	¸AÁA	Úencodingc           	      ó   — t        j                  | dd «      \  } }t        j                  | «      \  } }t        j                  | «      \  } }t        j                  | «      \  } }t        j                  | «      \  } }t        j                  | «      \  } }	 t        j                  d| «      \  }}}}}|j                  |«      |dddd| t        j                  z  ||f	S # t        j                  $ r t        d«      d‚w xY w)zParse a MySQL column-packetr�   Nz	<xHIBHBxxz!Failed parsing column information)	r   r¥   r>   r‰   rª   r   r‹   r   ÚNOT_NULL)rW   r­   Ú_ÚnamerF   Úcolumn_typeÚflagss          r/   Úparse_columnzMySQLProtocol.parse_column|  s  € ô ×(Ñ(¨°°¨Ó4‰	ˆ�Ü×(Ñ(¨Ó0‰	ˆ�Ü×(Ñ(¨Ó0‰	ˆ�Ü×(Ñ(¨Ó0‰	ˆ�Ü×+Ñ+¨FÓ3‰ˆ�Ü×(Ñ(¨Ó0‰	ˆ�ð		Pô —‘˜k¨6Ó2ñØØØØØð �K‰K˜Ó!ØØØØØØˆF”Y×'Ñ'Ñ'ØØð

ð 
	
øô �|‰|ò 	PÜ Ð!DÓEÈ4ÐOð	Pús   ÂC Ã C=c                 ó  — |d   dk(  r| j                  |«      S d}i }	 t        j                  d|«      }|d   dk(  rt        |«      dk  st	        |«      ‚|d	   |d
<   |d   |d<   |S # t        j                  $ r}t	        |«      |‚d}~ww xY w)zParse a MySQL EOF-packetr�   r   zFailed parsing EOF packet.z<xxxBBHHNr   éþ   é	   r˜   r¢   é   r¡   )r¨   r>   r‰   rª   r   r=   )rS   rW   Úerr_msgr�   ÚunpackedrB   s         r/   Ú	parse_eofzMySQLProtocol.parse_eof�  s£   € à�!‰9˜Š>à—=‘= Ó(Ð(à.ˆØˆð	3Ü—}‘} Z°Ó8ˆHð ˜‘˜sÒ"¤s¨6£{°aÒ'7Ü  Ó)Ð)à'¨™{ˆˆOÑØ% a™[ˆˆMÑØˆ
øô �|‰|ò 	3Ü  Ó)¨sÐ2ûð	3ús   ŸA( Á(BÁ;BÂBÚwith_headerc                 ó$  — d}i }dg}d}|r| dd j                  d«      }n| j                  d«      }|D ]T  }	 |j                  dd«      D �cg c]  }|j                  «       ‘Œ c}\  }}|j	                  d«      }	 t        |«      ||<   ŒV |S c c}w # t        $ r}	t        |«      |	‚d}	~	ww xY w# t        t        f$ rQ 	 t        |j	                  d«      «      ||<   n/# t        $ r#}	t        |› d	|› d
t        |«      › d�«      |	‚d}	~	ww xY wY ŒÚw xY w)zParse the statistics packetz)Failed getting COM_STATISTICS informationr1   r�   Ns     ó   :r˜   r†   z (ú:rK   )
ÚsplitÚstripr¦   r   r‹   ÚintrN   r   r   Úrepr)
rW   r¼   Úerrmsgr�   ÚpairsÚlblÚpairÚvÚvalrB   s
             r/   Úparse_statisticszMySQLProtocol.parse_statistics±  s8  € ð =ˆØ.0ˆà!˜UˆØˆÙØ˜1˜2�J×$Ñ$ [Ó1‰Eà—L‘L Ó-ˆEØò 	SˆDð6Ø/3¯z©z¸$ÀÓ/BÖC¨!˜AŸG™G�IÒC‘��Sð
 —*‘*˜WÓ%ˆCðSÜ˜s›8��C’ð	Sð ˆ
ùò DøÜò 6Ü$ VÓ,°#Ð5ûð6ûô œjÐ)ò SðSÜ& s§z¡z°'Ó':Ó;�C˜’HøÜ'ò SÜ(¨F¨8°2°c°U¸!¼DÀ»I¸;ÀaÐ)HÓIÈsÐRûðSúñ ðSús_   ¸BÁBÁ#BÁ;B/ÂBÂ	B,ÂB'Â'B,Â/DÂ?CÃDÃ	D	Ã&DÄD	Ä	DÄDÚsockÚversion.r«   c                 ó„  — |}g }d}d}d}	 |s||k(  r	 ||fS |j                  «       }	|	j                  d«      rŸ|	dd g}
|j                  «       }	|	j                  d«      r6|
j                  |	dd «       |j                  «       }	|	j                  d«      rŒ6|
j                  |	dd «       t        j                  t        d«      j                  |
«      «      }n>|	d   dk(  r|	d   dk  r| j                  |	«      }d}nd}t        j                  |	dd «      }|€|�|j                  |«       n|€|€t        |	«      ‚|dz  }�Œ6)	z¶Read MySQL text result

        Reads all or given number of rows from the socket.

        Returns a tuple with 2 elements: a list with all rows and
        the EOF packet.
        Nr   s   ÿÿÿr�   r1   r¶   é   r   )	ÚrecvrŽ   Úappendr   Úread_lc_string_listÚ	bytearrayÚjoinr»   r   )rS   rË   rÌ   r«   r°   rr   ÚeofÚrowdataÚirW   Údatass              r/   Úread_text_resultzMySQLProtocol.read_text_resultÎ  sU  € ð ˆØˆØˆØˆØˆØÙ�a˜5’jØð* �SˆyÐð) —Y‘Y“[ˆFØ× Ñ  Ô1Ø  ˜˜�ØŸ™›�Ø×'Ñ'¨Ô8Ø—L‘L ¨¨ Ô,Ø!ŸY™Y›[�Fð ×'Ñ'¨Õ8ð —‘˜V A B˜ZÔ(Ü×3Ñ3´I¸c³N×4GÑ4GÈÓ4NÓO‘Ø˜‘˜cÒ! f¨Q¡i°!¢mØ—n‘n VÓ,�Ø‘à�Ü×3Ñ3°F¸1¸2°JÓ?�Øˆ{˜wÐ2Ø—‘˜GÕ$Ø�  Ü# FÓ+Ð+Ø�‰FˆAñ- r1   Úfieldc                 ó„  — |d   t         j                  k(  rd}d}n_|d   t         j                  k(  rd}d}nD|d   t         j                  t         j                  fv rd}d}n|d   t         j
                  k(  rd}d}|d	   t        j                  z  rj                  «       }| d
 t        j                  | d| «      d   fS )z%Parse an integer from a binary packetr   ú<bú<hr˜   ú<ir�   ú<qr„   rÎ   Nr   )r   ÚTINYÚSHORTÚINT24ÚLONGÚLONGLONGr   ÚUNSIGNEDÚupperr>   r‰   )rW   rÙ   Úformat_Úlengths       r/   Ú_parse_binary_integerz#MySQLProtocol._parse_binary_integer÷  s¼   € ð
 �‰8”y—~‘~Ò%ØˆGØ‰FØ�1‰XœŸ™Ò(ØˆGØ‰FØ�1‰Xœ)Ÿ/™/¬9¯>©>Ð:Ñ:ØˆGØ‰FØ�1‰Xœ×+Ñ+Ò+ØˆGØˆFà�‰8”i×(Ñ(Ò(Ø—m‘m“oˆGà�v�w�¤§¡¨w¸¸qÀÐ8HÓ!IÈ!Ñ!LÐMÐMr1   c                 ó‚   — |d   t         j                  k(  rd}d}nd}d}| |d t        j                  || d| «      d   fS )z)Parse a float/double from a binary packetr   r„   ú<dr�   z<fNr   )r   ÚDOUBLEr>   r‰   )rW   rÙ   rç   ræ   s       r/   Ú_parse_binary_floatz!MySQLProtocol._parse_binary_float  sR   € ð
 �‰8”y×'Ñ'Ò'ØˆFØ‰GàˆFØˆGà�v�w�¤§¡¨w¸¸qÀÐ8HÓ!IÈ!Ñ!LÐMÐMr1   c                 ój   — t        j                  | «      \  } }| t        |j                  |«      «      fS )z(Parse a New Decimal from a binary packet)r   r¥   r   r‹   )rW   rF   Úvalues      r/   Ú_parse_binary_new_decimalz'MySQLProtocol._parse_binary_new_decimal  s1   € ô
  ×.Ñ.¨vÓ6‰ˆ�Øœ §¡¨WÓ 5Ó6Ð7Ð7r1   Ú
field_typec           	      ó  — | d   }d}|dk(  rzt        j                  d| dd «      d   }| d   }| d   }|t        j                  t        j                  fv rt        j
                  |||¬«      }n‰t        j                  |||¬«      }np|dk\  rkd}|d	k(  rt        j                  d
| d|dz    «      d   }t        j
                  t        j                  d| dd «      d   | d   | d   | d   | d   | d   |¬«      }| |dz   d |fS )z&Parse a timestamp from a binary packetr   Nr�   rv   r   r¸   )ÚyearÚmonthÚdayrÎ   é   ú<Ir„   r{   é   )rò   ró   rô   ÚhourÚminuteÚsecondÚmicrosecond)r>   r‰   r   ÚDATETIMEÚ	TIMESTAMPÚdatetimeÚdate)rW   rð   rç   rî   rò   ró   rô   Úmcss           r/   Ú_parse_binary_timestampz%MySQLProtocol._parse_binary_timestamp$  s  € ð ˜‘ˆØˆØ�QŠ;Ü—=‘=  v¨a° {Ó3°AÑ6ˆDØ˜1‘IˆEØ˜‘)ˆCØœi×0Ñ0´)×2EÑ2EÐFÑFÜ ×)Ñ)¨t¸5ÀcÔJ‘ä Ÿ™¨4°uÀ#ÔF‘Ø�qŠ[ØˆCØ˜Š|Ü—m‘m D¨&°°V¸a±ZÐ*@ÓAÀ!ÑD�Ü×%Ñ%Ü—]‘] 4¨°°!¨Ó5°aÑ8Ø˜Q‘iØ˜1‘IØ˜A‘YØ˜a‘yØ˜a‘yØôˆEð �v ‘z�|Ð$ eÐ,Ð,r1   c                 óD  — | d   }|s| dd t        j                  «       fS | d|dz    }d}|dkD  rt        j                  d|dd «      d   }t        j                  d|dd «      d   }|d   dk(  r|dz  }t        j                  ||d   ||d	   |d   ¬
«      }| |dz   d |fS )z'Parse a time value from a binary packetr   r   Nr„   rö   r{   r…   rÎ   r÷   )ÚdaysÚsecondsÚmicrosecondsÚminutesÚhours)rþ   Ú	timedeltar>   r‰   )rW   rç   ro   r   r  Útmps         r/   Ú_parse_binary_timez MySQLProtocol._parse_binary_timeD  sÓ   € ð ˜‘ˆÙØ˜1˜2�J¤× 2Ñ 2Ó 4Ð5Ð5Ø�a˜& 1™*Ð%ˆØˆØ�AŠ:Ü—-‘-  d¨1¨2 hÓ/°Ñ2ˆCÜ�}‰}˜T 4¨¨! 9Ó-¨aÑ0ˆØ�‰7�aŠ<Ø�B‰JˆDÜ× Ñ ØØ˜‘GØØ˜‘GØ�q‘'ô
ˆð �v ‘z�|Ð$ cÐ*Ð*r1   Úfieldsc                 ó0  — t        |«      dz   dz   dz  }|d| D �cg c]  }t        |«      ‘Œ }}||d }g }d}t        |«      D �]  \  }	}
|t        |	dz   dz  «         d|	dz   dz  z  z  r|j                  d«       Œ9|
d   t        j
                  t        j                  t        j                  t        j                  t        j                  fv r'| j                  ||
«      \  }}|j                  |«       Œ²|
d   t        j                  t        j                  fv r'| j                  ||
«      \  }}|j                  |«       Œþ|
d   t        j                  t        j                  fv r(| j!                  ||«      \  }}|j                  |«       �ŒK|
d   t        j"                  t        j$                  t        j&                  fv r+| j)                  ||
d   «      \  }}|j                  |«       �Œª|
d   t        j*                  k(  r'| j-                  |«      \  }}|j                  |«       �Œçt/        j0                  |«      \  }}	 |j                  |j3                  |«      «       �Œ" t7        |«      S c c}w # t4        $ r |j                  |«       Y �ŒPw xY w)z(Parse values from a binary result packetrÎ   r˜   r„   r   Nr   )r=   rÂ   Ú	enumeraterÐ   r   rß   rà   rá   râ   rã   rè   rë   ÚFLOATrì   ÚDECIMALÚ
NEWDECIMALrï   rü   ÚDATErý   r  ÚTIMEr
  r   r¥   r‹   ÚUnicodeDecodeErrorÚtuple)rS   r  rW   rF   Únull_bitmap_lengthrÖ   Únull_bitmaprb   rî   ÚposrÙ   s              r/   Ú_parse_binary_valuesz"MySQLProtocol._parse_binary_values[  sZ  € ô " &›k¨A™o°Ñ1°aÑ7ÐØ'-¨aÐ0BÐ'CÖD !”s˜1•vÐDˆÐDØÐ*Ð+Ð,ˆàˆØˆÜ# FÓ+ó "	)‰JˆC�Øœ3  a¡¨1™}Ó-Ñ.°!¸¸a¹À1±}Ñ2DÒEØ—‘˜dÔ#ØØ�Q‰xÜ—‘Ü—‘Ü—‘Ü—‘Ü×"Ñ"ðñ ð !%× :Ñ :¸6À5Ó I‘�˜Ø—‘˜eÕ$Ø�q‘œi×.Ñ.´	·±Ð@Ñ@Ø $× 8Ñ 8¸ÀÓ G‘�˜Ø—‘˜eÕ$Ø�q‘œi×/Ñ/´×1EÑ1EÐFÑFØ $× >Ñ >¸vÀwÓ O‘�˜Ø—‘˜eÖ$Ø�q‘Ü×"Ñ"Ü—‘Ü×#Ñ#ðñ ð
 #'×">Ñ">¸vÀuÈQÁxÓ"P‘�˜Ø—‘˜eÖ$Ø�q‘œYŸ^™^Ò+Ø"&×"9Ñ"9¸&Ó"A‘�˜Ø—‘˜eÖ$ä"'×"6Ñ"6°vÓ">‘�˜ð)Ø—M‘M %§,¡,¨wÓ"7Ö8ðA"	)ôH �V‹}ÐùòS EøôL *ò )Ø—M‘M %×(ð)ús   œI2É I7É7JÊJÚcolumnsc                 ó$  — g }d}d}d}	 |�	 ||fS ||k(  r	 ||fS |j                  «       }	|	d   dk(  r| j                  |	«      }d}n |	d   dk(  rd}| j                  ||	dd |«      }|€|�|j                  |«       n|€|€t	        |	«      ‚|dz  }Œˆ)zwRead MySQL binary protocol result

        Reads all or given number of binary resultset rows from the socket.
        Nr   r�   r¶   r{   r   )rÏ   r»   r  rÐ   r   )
rS   rË   r  r«   rF   rr   rÔ   rb   rÖ   rW   s
             r/   Úread_binary_resultz MySQLProtocol.read_binary_resultŽ  sÕ   € ð ˆØˆØˆØˆØØˆØð �cˆ{Ðð �EŠzØð �cˆ{Ðð —Y‘Y“[ˆFØ�a‰y˜CÒØ—n‘n VÓ,�Ø‘Ø˜‘˜a’Ø�Ø×2Ñ2°7¸FÀ1À2¸JÈÓP�Øˆ{˜vÐ1Ø—‘˜FÕ#Ø�  Ü# FÓ+Ð+Ø�‰FˆAð! r1   c                 ó\  — | d   dk(  st        d«      ‚i }	 t        j                  | dd d«      \  } |d<   t        j                  | d«      \  } |d<   t        j                  | d«      \  } |d	<   | d
d } t        j                  | d«      \  } |d<   |S # t        $ r}t        d«      |‚d}~ww xY w)z'Parse a MySQL Binary Protocol OK packetr�   r   zFailed parsing Binary OK packetr{   Nrq   r˜   Únum_columnsÚ
num_paramsr   r¢   )r   r   r™   r¦   )rW   Úok_pktrB   s      r/   Úparse_binary_prepare_okz%MySQLProtocol.parse_binary_prepare_ok³  sÈ   € ð �a‰y˜AŠ~Ü Ð!BÓCÐCàˆð	MÜ-2¯^©^¸FÀ1À2¸JÈÓ-JÑ*ˆF�F˜>Ñ*Ü,1¯N©N¸6À1Ó,EÑ)ˆF�F˜=Ñ)Ü+0¯>©>¸&À!Ó+DÑ(ˆF�F˜<Ñ(Ø˜A˜B�ZˆFÜ.3¯n©n¸VÀQÓ.GÑ+ˆF�F˜?Ñ+ð ˆøô ò 	MÜ Ð!BÓCÈÐLûð	Mús   —A8B Â	B+ÂB&Â&B+rî   c                 ó´  — d}d}| dk  r[| dk\  rd}t         j                  }nŸ| dk\  rd}t         j                  }n‡| dk\  rd}t         j                  }nod	}t         j                  }n\d
}| dk  rd}t         j                  }nB| dk  rd}t         j                  }n*| dk  rd}t         j                  }nt         j                  }d}t        j                  || «      ||fS )z0Prepare an integer for the MySQL binary protocolNr   i€ÿÿÿrÛ   i €ÿÿrÜ   i   €rÝ   rÞ   é€   éÿ   r9   iÿÿ  rv   l   ÿÿ rö   z<Q)r   rß   rà   râ   rã   r>   r?   )rî   rð   r³   ræ   s       r/   Úprepare_binary_integerz$MySQLProtocol.prepare_binary_integerÅ  sÒ   € ð ˆ
ØˆØ�1Š9Ø˜Š}Ø�Ü&Ÿ^™^‘
Ø˜&’Ø�Ü&Ÿ_™_‘
Ø˜+Ò%Ø�Ü&Ÿ^™^‘
à�Ü&×/Ñ/‘
àˆEØ˜Š|Ø�Ü&Ÿ^™^‘
Ø˜%’Ø�Ü&Ÿ_™_‘
Ø˜*Ò$Ø�Ü&Ÿ^™^‘
ä&×/Ñ/�
Ø�Ü—‘˜G UÓ+¨Z¸Ð?Ð?r1   c                 ó&  — t        | t        j                  «      rt        j                  }n6t        | t        j                  «      rt        j
                  }nt        d«      ‚t        j                  | j                  «      t        j                  | j                  «      z   t        j                  | j                  «      z   }t        | t        j                  «      r“|t        j                  | j                  «      z   t        j                  | j                  «      z   t        j                  | j                  «      z   }| j                   dkD  r"|t        j"                  | j                   «      z  }t        j                  t%        |«      «      |z   }||fS )aƒ  Prepare a timestamp object for the MySQL binary protocol

        This method prepares a timestamp of type datetime.datetime or
        datetime.date for sending over the MySQL binary protocol.
        A tuple is returned with the prepared value and field type
        as elements.

        Raises ValueError when the argument value is of invalid type.

        Returns a tuple.
        z2Argument must a datetime.datetime or datetime.dater   )Ú
isinstancerþ   r   rü   rÿ   r  r¦   r   ri   rò   rn   ró   rô   rø   rù   rú   rû   rh   r=   )rî   rð   Úpackeds      r/   Úprepare_binary_timestampz&MySQLProtocol.prepare_binary_timestampç  s)  € ô �eœX×.Ñ.Ô/Ü"×+Ñ+‰JÜ˜œxŸ}™}Ô-Ü"Ÿ™‰JäÐQÓRÐRô �O‰O˜EŸJ™JÓ'Ü�o‰o˜eŸk™kÓ*ñ+ä�o‰o˜eŸi™iÓ(ñ)ð 	ô �eœX×.Ñ.Ô/àÜ—/‘/ %§*¡*Ó-ñ.ä—/‘/ %§,¡,Ó/ñ0ô —/‘/ %§,¡,Ó/ñ0ð ð × Ñ  1Ò$Øœ%Ÿ/™/¨%×*;Ñ*;Ó<Ñ<�ä—‘¤ V£Ó-°Ñ6ˆØ˜
Ð#Ð#r1   c                 óè  — t        | t        j                  t        j                  f«      st	        d«      ‚t
        j                  }d}d}d}t        | t        j                  «      r³| j                  dk  rd}t        | j                  d«      \  }}t        |d«      \  }}|t        j                  t        | j                  «      «      t        j                  |«      z   t        j                  |«      z   t        j                  |«      z   z  }| j                  }n„|t        j                  d«      t        j                  | j                  «      z   t        j                  | j                   «      z   t        j                  | j"                  «      z   z  }| j$                  }|r|t        j                  |«      z  }t        j                  |«      |z   }t        j                  t'        |«      «      |z   }||fS )a�  Prepare a time object for the MySQL binary protocol

        This method prepares a time object of type datetime.timedelta or
        datetime.time for sending over the MySQL binary protocol.
        A tuple is returned with the prepared value and field type
        as elements.

        Raises ValueError when the argument value is of invalid type.

        Returns a tuple.
        z3Argument must a datetime.timedelta or datetime.timer   Nr1   r   i  é<   )r&  rþ   r  Útimer¦   r   r  r  Údivmodr  r   rh   Úabsrn   r  rø   rù   rú   rû   r=   )	rî   rð   Únegativer   r'  r  Ú	remainderÚminsÚsecss	            r/   Úprepare_binary_timez!MySQLProtocol.prepare_binary_time  s•  € ô ˜%¤(×"4Ñ"4´h·m±mÐ!DÔEÜÐRÓSÐSä—^‘^ˆ
ØˆØˆØˆä�eœX×/Ñ/Ô0Ø�z‰z˜AŠ~Ø�Ü!'¨¯©°tÓ!<ÑˆU�IÜ! )¨RÓ0‰LˆT�4ØÜ—‘¤ E§J¡J£Ó0Ü—/‘/ %Ó(ñ)ä—/‘/ $Ó'ñ(ô —/‘/ $Ó'ñ(ñˆFð ×$Ñ$‰CàÜ—‘ Ó"Ü—/‘/ %§*¡*Ó-ñ.ä—/‘/ %§,¡,Ó/ñ0ô —/‘/ %§,¡,Ó/ñ0ñˆFð ×#Ñ#ˆCÙØ”e—o‘o cÓ*Ñ*ˆFä—‘ Ó*¨VÑ3ˆÜ—‘¤ V£Ó-°Ñ6ˆà˜
Ð#Ð#r1   Ú	statementÚparamro   c                 ób   — t        j                  | «      t        j                  |«      z   |z   }|S )zMPrepare long data for prepared statements

        Returns a string.
        rg   )r3  r4  ro   rW   s       r/   Úprepare_stmt_send_long_dataz)MySQLProtocol.prepare_stmt_send_long_dataC  s+   € ô "ŸO™O¨IÓ6¼¿¹ÈÓ9OÑOÐRVÑVˆØˆr1   Ú
parametersr³   Úlong_data_usedÚquery_attrsÚconverter_str_fallbackc	           
      óV  — d}	dgt        |«      dz   dz  z  }
g }g }d}t        |«      }g }|s|n|t        z   }|dk(  rd}|€i }|r;t        |«      }|D ]  \  }}|j                  |«       Œ dgt        |«      dz   dz  z  }
|s|�r)|t        |«      k7  rt	        d«      ‚t        |«      D �]  \  }}d}|€_|
|dz  xx   d|dz  z  z  cc<   |j                  t        j                  t        j                  «      t        j                  |«      z   «       Œj||v r,||   d   rt        j                  }�nèt        j                  }�nÖt        |t        «      r(| j                  |«      \  }}}|j                  |«       �nžt        |t        «      rS|j!                  |«      }|j                  t        j"                  t        |«      «      |z   «       t        j$                  }�n;t        |t&        «      rB|j                  t        j"                  t        |«      «      |z   «       t        j                  }�nét        |t(        «      rr|j                  t        j"                  t        t        |«      j!                  |«      «      «      t        |«      j!                  |«      z   «       t        j*                  }�ngt        |t,        «      r7|j                  t/        j0                  d	|«      «       t        j2                  }�n t        |t4        j4                  t4        j6                  f«      r&| j9                  |«      \  }}|j                  |«       nÐt        |t4        j:                  t4        j<                  f«      r&| j?                  |«      \  }}|j                  |«       n€|r[t        |«      j!                  |«      }|j                  t        j"                  t        |«      «      |z   «       t        j                  }n#tA        d
|jB                  jD                  › d�«      ‚|j                  t        j                  |«      t        j                  |«      z   «       |s�Œ®|dz   |kD  s�Œ¸|||z
     d   j!                  |«      }|j                  t        j"                  t        |«      «      |z   «       �Œ t        jF                  |«      t        j                  |«      z   t        jF                  |	«      z   }|�|t        |«      z   }n|}|r |�|t        j"                  |«      z  }|djI                  |
D �cg c]  }t/        j0                  d|«      ‘Œ c}«      t        j                  d«      z   z  }d}|D ]'  }||z  }|�|dz   |kD  r||||z
     z  }n|dz  }|dz  }Œ) |D ]  }||z  }Œ	 |S c c}w )z6Make a MySQL packet with the Statement Execute commandr   r   rÎ   r„   r1   Úutf8mb4r+   zTFailed executing prepared statement: data values does not match number of parametersrê   z&MySQL binary protocol can not handle 'z	' objectsÚBr,   )%r=   r   ÚlistrÐ   r   r  r   rn   r   ÚNULLÚBLOBÚSTRINGr&  rÂ   r$  Ústrr.   Úlc_intÚVARCHARÚbytesr   r  Úfloatr>   r?   rë   rþ   rÿ   r(  r  r+  r2  r   Ú	__class__Ú__name__rh   rÓ   )rS   rq   ro   r7  r³   r8  rF   r9  r:  Úiteration_countr  rb   Útypesr'  Údata_lenÚquery_attr_namesr°   Úattr_valr  rî   Ú_flagsrð   r±   rW   Úparameter_countÚbitr«   Úa_typeÚa_values                                r/   Úmake_stmt_executezMySQLProtocol.make_stmt_executeN  s  € ð ˆØ�cœc $›i¨!™m°Ñ1Ñ2ˆØˆØˆØˆÜ�t“9ˆØÐÙ(‘¨eÔ6OÑ.OˆØ�iÒØˆGØÐ!ØˆNÙÜ˜“:ˆDØ*ò &‘��8Ø—‘˜HÕ%ð&à˜#¤# d£)¨a¡-°AÑ!5Ñ6ˆKÙšØœ3˜z›?Ò*Ü$ð2óð ô (¨›oó 8L‘
��UØ�Ø�=Ø ¨¡Ó+¨q°S¸1±W©~Ñ=Ó+Ø—L‘LÜŸ™¬	¯©Ó7¼%¿/¹/È&Ó:QÑQôð Ø˜.Ñ(Ø% cÑ*¨1Ò-ä%.§^¡^š
ô &/×%5Ñ%5š
Ü ¤sÔ+ð
 ×3Ñ3°EÓ:ñ	ØØ"Øà—M‘M &Ö)Ü ¤sÔ+Ø!ŸL™L¨Ó1�EØ—M‘M¤%§,¡,¬s°5«zÓ":¸UÑ"BÔCÜ!*×!2Ñ!2’JÜ ¤uÔ-Ø—M‘M¤%§,¡,¬s°5«zÓ":¸UÑ"BÔCÜ!*§¡’JÜ ¤wÔ/Ø—M‘MÜŸ™¤S¬¨U«×):Ñ):¸7Ó)CÓ%DÓEÜ˜e›*×+Ñ+¨GÓ4ñ5ôô "+×!2Ñ!2’JÜ ¤uÔ-Ø—M‘M¤&§+¡+¨d°EÓ":Ô;Ü!*×!1Ñ!1’JÜ ¬×(9Ñ(9¼8¿=¹=Ð'IÔJØ+/×+HÑ+HÈÓ+OÑ(�V˜ZØ—M‘M &Õ)Ü ¬×(:Ñ(:¼H¿M¹MÐ'JÔKØ+/×+CÑ+CÀEÓ+JÑ(�V˜ZØ—M‘M &Õ)Ù+Ü ›J×-Ñ-¨gÓ6�EØ—M‘M¤%§,¡,¬s°5«zÓ":¸UÑ"BÔCÜ!*×!1Ñ!1‘Jä*ðØ!ŸO™O×4Ñ4Ð5°Yð@óð ð —‘œUŸ_™_¨ZÓ8¼5¿?¹?È6Ó;RÑRÔSÛ 3¨¡7¨XÔ#5Ø& s¨X¡~Ñ6°qÑ9×@Ñ@ÀÓI�DØ$×+Ñ+¬E¯L©L¼¸T»Ó,CÀdÑ,JÖKðq8Lôt �O‰O˜LÓ)Ü�o‰o˜eÓ$ñ%ä�o‰o˜oÓ.ñ/ð 	ð Ð"Ø&¬¨[Ó)9Ñ9‰Oà&ˆOÙàÐ&Øœ%Ÿ,™, Ó7Ñ7�à�c—h‘hØ2=Ö>¨3”—‘˜S #Õ&Ò>óä—‘ Ó"ñ#ñ #ˆFð ˆEØò �Ø˜&Ñ �ð
 Ð*Ø˜q‘y 8Ò+ØÐ"2°5¸8Ñ3CÑ"DÑD™à 'Ñ)˜Ø˜‘
‘ðð "ò "�Ø˜'Ñ!‘ð"ð ˆùò' ?s   Ô.V&
c                 ó¦   — | d   dk(  st        d«      ‚t        j                  | dd d¬«      \  } }| r| d   d	k(  r| dd } |j                  d
«      | fS )z&Parse a MySQL AuthSwitchRequest-packetr�   r¶   z'Failed parsing AuthSwitchRequest packetr{   Nr,   r}   r…   r   r+   )r   r   rŠ   r‹   )rW   Úplugin_names     r/   Úparse_auth_switch_requestz'MySQLProtocol.parse_auth_switch_requestÑ  sg   € ð �a‰y˜CÒÜ Ð!JÓKÐKä#×/Ñ/°°q°r°
ÀÔHÑˆ�Ù�f˜R‘j A’oØ˜C˜R�[ˆFà×!Ñ! &Ó)¨6Ð1Ð1r1   c                 ó2   — | d   dk(  st        d«      ‚| dd S )z!Parse a MySQL AuthMoreData-packetr�   r   z"Failed parsing AuthMoreData packetr{   N)r   )rW   s    r/   Úparse_auth_more_dataz"MySQLProtocol.parse_auth_more_dataÝ  s'   € ð �a‰y˜AŠ~Ü Ð!EÓFÐFà�a�bˆzÐr1   )
NNNé-   r   é   @FNNN)rY  r   rZ  r\   )r   )	NNNrY  r   FNNN)r†   )T)r+   )r   r†   )© r[  r   Nr+   NF)ArH  Ú
__module__Ú__qualname__Ú__doc__ÚstaticmethodrÂ   r   rB  rE  r0   r!   ÚboolrD   r   r   rX   rR   rÒ   rj   rp   rt   rx   r–   r
   r›   r   r¨   r¬   r   r´   r   r»   r    rÊ   r   r   rØ   rè   rF  rì   r   rï   r   rþ   rÿ   r  r  r
  r   r  r  r   r   r$  r(  r+  r2  r6  r	   r"   r   r   rS  rV  rX  r[  r1   r/   r&   r&   B   sù  „ ñð
 ð sð °h¸s±mð Èò ó ðð ð"Øð"à˜:Ñ&ð"ð ˜3‘-ð"ð ˜3‘-ð	"ð
 ð"ð ð"ð ˜E‘?ð"ð ð"ð 
ò"ó ð"ðN *.Ø"&Ø"&ØØØ",Ø!Ø%)Ø.2Ø+/ñ?à˜MÑ*ð?ð ˜:Ñ&ð?ð ˜3‘-ð	?ð
 ˜3‘-ð?ð ð?ð ð?ð  ð?ð ð?ð ˜c‘]ð?ð ˜]Ñ+ð?ð $ C™=ð?ð 
ó?ðB ð! Mð !°eò !ó ð!ð& àLVñ	
Øð	
Ø),ð	
ØFIð	
à	ò	
ó ð	
ð ñ˜cð ¨X°e©_ð È	ò ó ðð ñE cð E°ð E¸Yò Eó ðEð *.Ø"&Ø"&ØØØ!Ø%)Ø.2Ø+/ñ;à ð;ð ˜:Ñ&ð;ð ˜3‘-ð	;ð
 ˜3‘-ð;ð ð;ð ð;ð ð;ð ˜c‘]ð;ð ˜]Ñ+ð;ð $ C™=ð;ð 
ó;ðz ð1 ð 1¨-ò 1ó ð1ðf ð3 uð 3°°u¸c°zÑ1Bò 3ó ð3ð ð˜ð  <ò ó ðð, ðI 5ð I¨X°c©]ò Ió ðIð ñ
˜Uð 
¨cð 
Àò 
ó ð
ð@ ð ¨-ó ð( ñ ð °Tð À_ò ó ðð: HIñ'Øð'Ø).¨s°C¨x©ð'ØADð'à	ˆt�E˜( 5™/¨3Ð.Ñ/Ñ0°(¸=Ñ2IÐJÑ	Kó'ðR ðNØðNØ-ðNà	ˆu�cˆzÑ	òNó ðNð, ðNØðNØ-ðNà	ˆu�eˆ|Ñ	òNó ðNð à&,ñ8Øð8Ø #ð8à	ˆu�gˆ~Ñ	ò8ó ð8ð ð-Øð-àð-ð 
ˆu�h˜u X§]¡]°H×4EÑ4EÐ%EÑFÑGÐGÑ	Hò-ó ð-ð> ð+ 5ð +¨U°5¸(×:LÑ:LÐ3LÑ-Mò +ó ð+ð4 ñ	1à�_Ñ%ð1ð ð1ð ð	1ð
 
Ð4°cÐ9Ñ	:ó1ðn Øñ#àð#ð �oÑ&ð#ð ð	#ð
 ð#ð 
ØˆUÐ8¸#Ð=Ñ>Ñ?Ø�Ñð	!ñ
ó#ðJ ð¨ð °$°s¸C°x±.ò ó ðð" ð@ cð @¨e°E¸3À°OÑ.Dò @ó ð@ðB ð&$Ø�X—]‘] H×$5Ñ$5Ð5Ñ6ð&$à	ˆy˜#ˆ~Ñ	ò&$ó ð&$ðP ð0$Ø�X×'Ñ'¨¯©Ð6Ñ7ð0$à	ˆy˜#ˆ~Ñ	ò0$ó ð0$ðd ðØðØ"ðØ*/ðà	òó ðð =?Ø$&ØØ;?ØØ/3Ø',ñAàðAð Ð8Ñ9ðAð ˜S‘Mð	Að
 ðAð !  c¨5°©;Ð&6Ñ!7Ñ8ðAð ðAð ˜mÑ,ðAð !%ðAð 
óAðF ð	2¨%ð 	2°E¸#¸u¸*Ñ4Eò 	2ó ð	2ð ð Uð ¨uò ó ñr1   r&   )-r^  rþ   r>   Údecimalr   r   Útypingr   r   r   r   r	   r
   r   rZ   r   Úauthenticationr   Ú	constantsr   r   r   r   r   Úerrorsr   r   r   r   rJ  r   r   r   r   r   r   r   r   r    r!   r"   r$   rÂ   Ú__annotations__r&   r[  r1   r/   ú<module>rg     sb   ðò> 3ã Û ç -ß D× DÑ Då Ý +÷õ ÷ SÓ R÷÷ ÷ ñ ð Ð �#Ó ÷aò ar1   