/var/opt/nydus/ops/mysql/connector/__pycache__
NameSizeModeActions
abstracts.cpython-312.pyc1263050644editdlrm
authentication.cpython-312.pyc148150644editdlrm
charsets.cpython-312.pyc102270644editdlrm
connection.cpython-312.pyc705380644editdlrm
connection_cext.cpython-312.pyc485700644editdlrm
constants.cpython-312.pyc482270644editdlrm
conversion.cpython-312.pyc315540644editdlrm
cursor.cpython-312.pyc587990644editdlrm
cursor_cext.cpython-312.pyc497900644editdlrm
custom_types.cpython-312.pyc13400644editdlrm
dbapi.cpython-312.pyc30230644editdlrm
errorcode.cpython-312.pyc907520644editdlrm
errors.cpython-312.pyc133090644editdlrm
logger.cpython-312.pyc3390644editdlrm
network.cpython-312.pyc319440644editdlrm
optionfiles.cpython-312.pyc145250644editdlrm
pooling.cpython-312.pyc273930644editdlrm
protocol.cpython-312.pyc471850644editdlrm
tls_ciphers.cpython-312.pyc78190644editdlrm
types.cpython-312.pyc25860644editdlrm
utils.cpython-312.pyc281810644editdlrm
version.cpython-312.pyc6900644editdlrm
_decorating.cpython-312.pyc39980644editdlrm
_scripting.cpython-312.pyc157000644editdlrm
__init__.cpython-312.pyc17090644editdlrm
Edit: /var/opt/nydus/ops/mysql/connector/__pycache__/cursor_cext.cpython-312.pyc (49790B)
N jdZddlmZddlZddlZddlmZmZmZm Z m Z m Z m Z m Z mZmZmZmZddlmZddlmZddlmZmZmZmZmZmZmZmZmZdd l m!Z!dd l"m#Z#m$Z$dd l%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.dd l/m0Z0m1Z1m2Z2m3Z3m4Z4erdd l5m6Z6dZ7GddZ8Gdde$Z9Gdde9Z:Gdde9Z;Gdde:Z<Gdde9Z=Gdde:Z>Gdde9Z?Gdd e=e?Z@y)!z%Cursor classes using the C Extension.) annotationsN) TYPE_CHECKINGAnyDict GeneratorIteratorListNoReturnOptionalSequenceTupleUnioncast)MySQLInterfaceError) deprecated) CextEofPacketTypeCextResultTypeDescriptionTypeParamsSequenceOrDictTypeParamsSequenceType RowItemTypeRowType StrOrBytesAny WarningType)split_multi_statement)CMySQLPrepStmtMySQLCursorAbstract) RE_PY_PARAMRE_SQL_COMMENTRE_SQL_FIND_PARAMRE_SQL_INSERT_STMTRE_SQL_INSERT_VALUESRE_SQL_ON_DUPLICATE RE_SQL_PYTHON_CAPTURE_PARAM_NAMERE_SQL_PYTHON_REPLACE_PARAM_bytestr_format_dict)ErrorInterfaceErrorNotSupportedErrorProgrammingErrorget_mysql_exception)CMySQLConnectionzNo result set to fetch fromc2eZdZdZddZddZeddZy) _ParamSubstitutorz4 Substitutes parameters into SQL statement. c ||_d|_y)Nr)paramsindex)selfr1s L/opt/nydus/tmp/pip-target-a90h98xg/lib/python/mysql/connector/cursor_cext.py__init__z_ParamSubstitutor.__init__gs'-  c|j}|xjdz c_ |j|S#t$r tddwxYw)Nrz+Not enough parameters for the SQL statement)r2r1 IndexErrorr+)r3matchobjr2s r4__call__z_ParamSubstitutor.__call__ksN  a  ;;u% % "=  s 2AcFt|j|jz S)z8Returns number of parameters remaining to be substituted)lenr1r2r3s r4 remainingz_ParamSubstitutor.remainingus4;;$**,,r6N)r1zSequence[bytes]returnNone)r9objectr?bytesr?int)__name__ __module__ __qualname____doc__r5r:propertyr>r6r4r/r/bs%--r6r/ceZdZdZ d!fd Zd"d#fd Z d$ d%dZed&dZejd'dZed&dZ e jd'dZ d(d Z d)d Z d(d Z d*d Zd(d Zd(dZ d+ d,dZ d-dZ d.dZed/dZed0dZd1dZ d2 d3dZd4dZd5dZd6d7dZd8dZd9dZedd:dZd;dZed CMySQLCursorz;Default cursor for interacting with MySQL using C Extensionct||d|_d|_d|_t d|j |_y) InitializeFr-N)superr5_affected_rows_raw_as_string _bufferedr _connectionr3 connection __class__s r4r5zCMySQLCursor.__init__~s? $#%$)$-12DdFVFV-Wr6cd|_d|_d|_d|_d|_d|_d|_d|_d|_|r&|jr|jjt|)y)NrOr) _rowcount_nextrowrQ_last_insert_id_warning_count _warnings _descriptionrT free_resultrPresetr3freerWs r4r`zCMySQLCursor.resetsm  $%#$6:=A D$$    ( ( *  r6cr|s#d|_g|_d|_d|_d|_|j |y)aResets the cursor to default. This method is similar to `reset()`. Unlike `reset()`, this hidden method allows to customize the reset. Args: free: If `True`, the result will be freed. preserve_last_executed_stmt: If `False`, the last executed statement value is reset. Otherwise, such a value is preserved. NFrb) _executed_executed_list_stmt_partitions_stmt_partition_stmt_map_resultsr`)r3rbpreserve_last_executed_stmts r4 _reset_resultzCMySQLCursor._reset_results<+!DN"$D $(D !#'D %*D "  r6ctd)Nz The use of read_timeout after the connection has been established is unsupported in the C-Extension r+r=s r4 read_timeoutzCMySQLCursor.read_timeout   r6ctd)Nz Changes in read_timeout after the connection has been established is unsupported in the C-Extension rmr3timeouts r4rnzCMySQLCursor.read_timeoutror6ctd)Nz The use of write_timeout after the connection has been established is unsupported in the C-Extension rmr=s r4 write_timeoutzCMySQLCursor.write_timeoutror6ctd)Nz Changes in write_timeout after the connection has been established is unsupported in the C-Extension rmrqs r4rtzCMySQLCursor.write_timeoutror6c:|jtty)zsCheck if the statement has been executed. Raises an error if the statement has not been executed. N)rer)ERR_NO_RESULT_TO_FETCHr=s r4_check_executedzCMySQLCursor._check_executeds >> ! !78 8 "r6cg} |jj|jjd}|jj|jd}|jj|r|Sy#t $rS}t |dr-t|j|j|j|tt||d}~wt$r}td|dd}~wwxYw)aFetch warnings Fetch warnings doing a SHOW WARNINGS. Can be called after getting the result. Returns a result set or None when there were no warnings. Raises Error (or subclass) on errors. Returns list of tuples or None. z SHOW WARNINGSrawrerrnomsgsqlstateNzFailed getting warnings; )rTconsume_results cmd_queryget_rows_rawrhasattrr,r|r~rr)str Exception)r3warns_errs r4_fetch_warningszCMySQLCursor._fetch_warningss N    , , .  **?;A$$--$))-rrgnextrhrirfpopleftrerrrrSrRrrr,r|r~rr))r3 operationr1rrstmtpreparedpsubs r4executezCMySQLCursor.execute,su  M##t'7'7'A'A'C&&(D --/  6)S) ''(8(8(G(GHE9- ''99&AH(D)+D(;HtUm4(2"tT2>>Q&*K!6{!  $D$9$9:!,"22>B   0 8 8 :%%o6   4     **((9 !^^"&"5"5 + m!.1 M"#.remove_commentsws {{1~;;q> !r6rzAFailed rewriting statement for multi-row INSERT. Check SQL syntaxrrr,N Failed executing the operation; )rzre.Matchr?r)rerr$r searchr#r)rrrTrrrrr'rrBrrr/rr>r+appendreplacejoinrerrrr) r3r seq_paramsrtmpmatchesfmtvaluesrr1rrrs r4 _batch_insertzCMySQLCursor._batch_insertps "ff   FF>?I >  ))0#6 S mmA%%d&6&6&E&EF U##D$4$4$C$CDD$++==fEh-.tE3/?JC4-8,X6D%//$4C~~*.O c"%d{||C6):A>!% "$67 6"3s8,# 5 U #CC5!IJPT T Us%DFG!,G G! GG!c|r|sy |jst |jjt |t t fs tdtjt|rD|sd|_ y|j||}|&||_ |jtt|Sd} |D]m}|j|||j r&|jj"r|j%||j&r |jn |j(z }o ||_ y#ttf$r}td|d}~wwxYw#t*t,f$r}t/d|dd}~wwxYw)aExecute the given operation multiple times The executemany() method will execute the operation iterating over the list of parameters in seq_params. Example: Inserting 3 new employees and their phone number data = [ ('Jane','555-001'), ('Joe', '555-001'), ('John', '555-003') ] stmt = "INSERT INTO employees (name, phone) VALUES ('%s','%s)" cursor.executemany(stmt, data) INSERT statements are optimized by batching the data, that is using the MySQL multiple rows syntax. Results are discarded! If they are needed, consider looping over data using the execute() method. Nrz+Parameters for query must be list or tuple.rr)rTr+rrrrrrrr"rYrrerrr with_rows unread_resultfetchall descriptionrQ ValueError TypeErrorr))r3rrrrrowcntr1s r4 executemanyzCMySQLCursor.executemanysi4  G##&&$ --/*tUm4"#PQ Q 88& 2!"%%i>d&6&6&D&DMMOD,<,<$..$BUBUU % C!.1 G"#<=3 F G:I& U #CC5!IJPT T Us0D16A2E1E E  EE7#E22E7c|jS)z*Returns description of columns in a result)r^r=s r4rzCMySQLCursor.descriptions   r6cP|jdk(r |jS|jS)z/Returns the number of rows produced or affectedrO)rYrQr=s r4rowcountzCMySQLCursor.rowcounts& >>R && &~~r6cn|jsy|jjd|_d|_y)z$rt@$r}tCd|dd}~wwxYw)z1Calls a stored procedure with the given argumentszprocname must be a stringzargs must be a sequencez@_{name}_arg{index}.rOr)namer2z CAST(z AS )r,c3&K|] }|d yw)z=%sNrJ).0args r4 z(CMySQLCursor.callproc..)s'Hx3%s xzSET zCALL ()r{rz (a result of z@_zSELECT zFailed calling stored routine; N)"rrrrr_stored_resultssplit enumerateformatrrrrTrrrRresult_set_availablefetch_eof_columnsCMySQLCursorDictCMySQLCursorBufferedDictCMySQLCursorBufferedRawCMySQLCursorBufferedget_selfrer next_resultrr`ziplstripfetchoner(rr))r3procnameargsargfmtargnamesargtypes procname_abs argvaluesidxrargname placeholderscallrresults cursor_classcurraliasselectrs r4callproczCMySQLCursor.callprocs z(C889 9$ .67 7&!B THH $>>#.r2L )$HC$mmS1WmMGOOG,!#u- & c!fXQ(GH!((Q0 0!((-!0 #xx'Hx'HH  tL>2I>8*Achhx&8%9;D%%//$))43F3F0FG""77));;=d%57O$PQ#;LYY#:L#7L"4#3#3#<#<#>?"/vQ 7 ""6*s#  ,,.""77$+D     (+ x"Hx3::d#3x"H(( efD(( #388D>"23 V$}}&7N#I   T #B3%!HIt S TsC HL3LL ) L3L 7L< L LL7#L22L7c8|jjr|jdd|jjs*|j |jj n)|j |jj |jS|jrG|jdstjdy|jdj|_ y|j t|j|_ |jdj|_ |j |jj|jd|j |j"|j$y|jd y#t&$rS}t)|dr-t+|j,|j.|j0 |t3t5||d}~wwxYw#t6$rY}wxYw) NFT)rbrjrzOMappingWarning: Number of result sets greater than number of single statements.rrr|r}rd)rTrrkrrfetch_eof_statusrrgrirhrrrrerrrrSrRrrr,r|r~rr)r StopIterationrs r4nextsetzCMySQLCursor.nextsetYs    ' ' )   Et  L##88##D$4$4$E$E$GH##D$4$4$F$F$HI$$0T5K5K++N;MM0 &*%9%9.%I%Q%Q%SDN  ,  '+D,A,A'B$"&!5!5n!E!M!M!O<''((22 00A $ %)^^*.*=*= 3 %+<sG,1II377S\\"#)S2; .s4#3aQqT#3r)rrr=s r4 column_nameszCMySQLCursor.column_namess'44#3#3444r6c|jryy)zReturns whether the cursor could have rows returned This property returns True when column descriptions are available and possibly also rows, which will need to be fetched. Returns True or False. TF)rr=s r4rzCMySQLCursor.with_rowss   r6c d}|jr3 |jjd}t|dkDr |dddz}nd}|j |j j |S#t$r|j}YWwxYw)Nz{class_name}: {stmt}zutf-8(z..z(Nothing executed yet)) class_namer)redecodeAttributeErrorr<rrWrE)r3rexecuteds r4__str__zCMySQLCursor.__str__)s$ >> *>>0098}r!#CR=4//HzzT^^%<%<8zLL" *>> *sA++BBrVr-r?r@Trbboolr?r@)TF)rbr:rjr:r?r@)r?zOptional[float])rrrDr?r@r?r@)r?zOptional[List[WarningType]])rz(Union[CextEofPacketType, CextResultType]r?r@)rJF)rrr1rrr:r?r@)rrr"Sequence[ParamsSequenceOrDictType]r?zOptional[bytes])rrrr<r?r@)r?zOptional[List[DescriptionType]]rCr?r:)rJ)rrrr r?z0Optional[Union[Dict[str, RowItemType], RowType]])r?zOptional[bool]r? List[RowType]rrrDr?r?r?Optional[RowType])r?zIterator[RowType])r?z#Generator[CMySQLCursor, None, None])r?r)r?zTuple[str, ...])r?r)$rErFrGrHr5r`rkrIrnsetterrtrxrrrrrrrrrrrrrrrrr&rr(r*r.rr6 __classcell__rWs@r4rLrL{sE X$ X  X  FK>B 0        9B.( $"+,.! BB)B B  BH8U8U78U  8UtAA7A  AF!!  QTQTQT : QTf;z,$L*) + "  "  5 5   Mr6rLcreZdZdZ d fd Zd dZd d fd ZddZddZdddZ ddZ e dd Z xZ S)rz*Cursor using C Extension buffering resultsc@t||d|_d|_y)rNNr)rPr5_rows _next_rowrUs r4r5zCMySQLCursorBuffered.__init__;s $.2 r6c|jj|jd|_d|_t |j|_|jy)rrzrN)rTrrrIrJr<rYrr=s r4rz&CMySQLCursorBuffered._handle_resultsetEsH%%..499.=a@ !$**o r6cBd|_d|_t| |y)Nrrd)rIrJrPr`ras r4r`zCMySQLCursorBuffered.resetLs   4  r6cd} |j|j}|xjdz c_|S#t$rYywxYw)QReturns the next row in the result set Returns a tuple or None. Nr)rIrJr8r"s r4 _fetch_rowzCMySQLCursorBuffered._fetch_rowQsI  **T^^,C !   s4 AAc|j|jgS|j|jd}t|j|_|S)rN)rxrIrJr<)r3ress r4rzCMySQLCursorBuffered.fetchall^sH  :: Ijj)*TZZ r6c|jg}|xs |j}|dkDr2|dz}|j}|r|j|n |S|dkDr2|Srrr)rx arraysizerOrr3rrQcntr#s r4rzCMySQLCursorBuffered.fetchmanykse $dnnAg 1HC//#C 3 Ag r6cB|j|jS)r!rxrOr=s r4rzCMySQLCursorBuffered.fetchones   r6c|jduS)zReturns whether the cursor could have rows returned This property returns True when rows are available, which will need to be fetched. Returns True or False. N)rIr=s r4rzCMySQLCursorBuffered.with_rowsszz%%r6rVr-r;r8r9rBr>r@rAr=)rErFrGrHr5rr`rOrrrrIrrErFs@r4rr8sE4 $ !  ,!&&r6rc,eZdZdZ dfd ZxZS)CMySQLCursorRawz+Cursor using C Extension return raw resultsc2t||d|_yNTrPr5rrUs r4r5zCMySQLCursorRaw.__init__ $ r6r7rErFrGrHr5rErFs@r4r\r\s"5$ r6r\c(eZdZdZ dfd ZxZS)rz.Cursor using C Extension buffering raw resultsc2t||d|_yr^r_rUs r4r5z CMySQLCursorBufferedRaw.__init__r`r6rZrarFs@r4rrs8$r6rc>eZdZdZdfd Zddfd Zdfd ZxZS) rz7Cursor using C Extension returning rows as dictionariescft|}|rtt|j|SdS)zyReturn next row of a query result set. Returns: dict or None: A dict from query result set. N)rPrrrr.r3r#rWs r4rzCMySQLCursorDict.fetchones1 g 47tC))3/0ATAr6c t||}|Dcgc]!}tt|j|#c}Scc}w)aReturn the next set of rows of a query result set. When no more rows are available, it returns an empty list. The number of rows returned can be specified using the size argument, which defaults to one. Returns: list: The next set of rows of a query result set represented as a list of dictionaries where column names are used as keys. )r)rPrrrr.)r3rrQr#rWs r4rzCMySQLCursorDict.fetchmanysAgT*=@AScS**C01SAAAs&?c t|}|Dcgc]!}tt|j|#c}Scc}w)zReturn all rows of a query result set. Returns: list: A list of dictionaries with all rows of a query result set where column names are used as keys. rPrrrr.r3rQr#rWs r4rzCMySQLCursorDict.fetchalls<g =@AScS**C01SAAA&=r?z Optional[Dict[str, RowItemType]]r@)rrDr?List[Dict[str, RowItemType]]r?rm)rErFrGrHrrrrErFs@r4rrsAB BBBr6rc0eZdZdZdfd Zdfd ZxZS)rzECursor using C Extension buffering and returning rows as dictionariescdt|}|rtt|j|SyN)rPrOrrr.rfs r4rOz#CMySQLCursorBufferedDict._fetch_rows.g " D--s34 4r6c t|}|Dcgc]!}tt|j|#c}Scc}w)rrirjs r4rz!CMySQLCursorBufferedDict.fetchalls< g =@AScS**C01SAAArkrlrn)rErFrGrHrOrrErFs@r4rrsO BBr6rceZdZdZ d fd ZddZdddZdddZdfd Zddfd Z d ddZ dd Z dd Z ddd Z dd ZxZS)CMySQLCursorPreparedz&Cursor using MySQL Prepared Statementscjt||d|_d|_d|_d|_d|_y)NrT)rPr5rIrYrJ_binary_stmtrUs r4r5zCMySQLCursorPrepared.__init__s5 $.2 ! /3 r6c2d|_|jy)zHandle EOF packetrN)rZrr=s r4rz CMySQLCursorPrepared._handle_eofs$  r6c||jr|jjsyd}|jdk(rA|jj |j |j ||j\}}n|j\}}|r|jj |j |j ||j|_|jd}||d|_|j|jdk(rd|_ n|xjdz c_ |r|d|_|j|S)rNNr)binaryrr{ prep_stmtrrrO) rwhave_result_setrZrTrrvrr\rrY)r3r{r#eofs r4rOzCMySQLCursorPrepared._fetch_rows zz!;!; ==L ())11||((** 2JS#JS#  ,,44||((** 5DM --"C&)/&:#  "~~#!"!# "%o"6D      r6ct)zRCalls a stored procedue Not supported with CMySQLCursorPrepared. )r*)r3rrs r4rzCMySQLCursorPrepared.callprocs  !!r6c|jr<|j|jj|jd|_t|y)zzClose the cursor This method will try to deallocate the prepared statement and close the cursor. N)rwr`rTcmd_stmt_closerPr)r3rWs r4rzCMySQLCursorPrepared.close&s= :: JJL    + +DJJ 7DJ  r6c|jr%|jj|jt||y)aFResets the prepared statement. Args: free: If `True`, the result will be freed. preserve_last_executed_stmt: If `False`, the last executed statement value is reset. Otherwise, such a value is preserved. rdN)rwrTcmd_stmt_resetrPr`ras r4r`zCMySQLCursorPrepared.reset2s2 ::    + +DJJ 7  4  r6cJ|r td|sy |jr|jjrt |jj d|jj }|dk(rd}t |ts |j|}t trJtjt|} tfd |Dtj t"d |}||j$ur|j&r%|jj)|j&||_ |j+|}d |vrtj t.d |} |jj1||_|jj5|j&|j&j6dkDrsyrlt tt8fs'tddt;j<dd|j&j6t?k7r tddd|jj@|j&g}|r|jC|yy#ttf$r}tdd|d}~wwxYw#t$r}tt||d}~wwxYw#t$r}td |d}~wwxYw#t,$r}tt||d}~wwxYw#t2$rd|_d|_wxYw)a)Prepare and execute a MySQL Prepared Statement This method will prepare the given operation and execute it using the given parameters. If the cursor instance already had a prepared statement, it is first closed. Note: argument "multi" is unused. z@Multi statement execution not supported for prepared statements.NrrT)rutf8mb4utf8c3(K|] }| ywrqrJ)rkeyr1s r4rz/CMySQLCursorPrepared.execute..msG6Fsvc{6Fsz6Not all placeholders were found in the parameters dict?s%s?rizIncorrect type of argument: rzP), it must be of type tuple or list the argument given to the prepared statement)r|r~z:Incorrect number of arguments executing prepared statementrJ)"r+rTrrrcharsetrrr3rrrfindallr%rKeyErrorrr&rerwrrrr!cmd_stmt_preparer(r param_countrtyperEr<cmd_stmt_executer)r3rr1rrrreplacement_keysrQs ` r4rzCMySQLCursorPrepared.execute?s "R   M##t'7'7'A'A'C&&(D --t-<""** i G)S) :%,,W5  fd #!zz*JIV  G6FGG :CKI DNN *zz  // ;&DN :%,,W5  !FF#4dIF  !-->>yI '' 3 :: ! !A %f  fudm4&6tF|7L7L6MQvhW-- zz%%V4&T >F/d// DVD     $ K!.1 M"#>K K  KK # L,LL L"cd} |D]?}|j|||jr|j||jz }A ||_y#tt f$r}t d||d}~wwxYw)aPrepare and execute a MySQL Prepared Statement many times This method will prepare the given operation and execute with each tuple found the list seq_params. If the cursor instance already had a prepared statement, it is first closed. rrN)rrrrYrrr))r3rrrr1rs r4rz CMySQLCursorPrepared.executemanys} T$ Y/>>MMO$..( % I& T #CC5!IJPS S TsAAA4 A//A4cJ|j|jxsdS)r!NrXr=s r4rzCMySQLCursorPrepared.fetchones"  (D(r6c|jg}|xs |j}|dkDrZ|jjrD|dz}|j }|r|j ||dkDr|jjrD|SrS)rxrTrwr|rOrrUs r4rzCMySQLCursorPrepared.fetchmanysu $dnnAg$**44 1HC//#C 3 Ag$**44  r6c|j|jjsgS|jj |j}|j r1|j dr"|dj d|j d|ds|jgS|xjt|dz c_|j|dS)r)r{r) rxrwr|rTrrZrrrYr<rs r4rzCMySQLCursorPrepared.fetchalls zz))I((4::(> ==T]]1- GNN1dmmA. /Aw    I #d1g,& Awr6rZr;)F)r{r:r?rCrq)rrrrr?r r8r9)NF)rrr1z"Optional[ParamsSequenceOrDictType]rr:r?r@)rrrzSequence[ParamsSequenceType]r?r@rB)rz Optional[int]r?r?r>)rErFrGrHr5rrOrrr`rrrrrrErFs@r4rtrts0 4$ 4 &P"  ! 6:! a% a%3a% a%  a%F  *F  ,)(r6rtceZdZdZy)CMySQLCursorPreparedDictaThis class is a blend of features from CMySQLCursorDict and CMySQLCursorPrepared Multiple inheritance in python is allowed but care must be taken when assuming methods resolution. In the case of multiple inheritance, a given attribute is first searched in the current class if it's not found then it's searched in the parent classes. The parent classes are searched in a left-right fashion and each class is searched once. Based on python's attribute resolution, in this case, attributes are searched as follows: 1. CMySQLCursorPreparedDict (current class) 2. CMySQLCursorDict (left parent class) 3. CMySQLCursorPrepared (right parent class) 4. CMySQLCursor (base class) N)rErFrGrHrJr6r4rrsr6r)ArH __future__rrrtypingrrrrrr r r r r rr_mysql_connectorr _decoratingrtypesrrrrrrrrr _scriptingr abstractsrrcursorrr r!r"r#r$r%r&r'errorsr(r)r*r+r,connection_cextr-rwr/rLrr\rrrrtrrJr6r4rs>,"      1#   .:   16--2z M&z Mz[&<[&|l2"B|"BJB3B&E<EP/1Er6