Ȯ$iddlmZddlZddlmZmZmZddlddlddl  ddl m Z ddlmZejZdZddlZd Zed \ZZZZZd Zd d dddddddddddddZiZiZej;D]\ZZe eZe eZeee<eee<![[[de!jDddddddddf dZ#Gdde$Z%Gd d!e$Z&d"Z'd&d#Z(d$Z)d%Z*y#e $r ddl m Z YwxYw)')print_functionN)compdoc formattingsheet)*) perf_counter)clockunpacki)PF2-(     )Consolidate_Area Auto_Open Auto_CloseExtractDatabaseCriteria Print_Area Print_TitlesRecorder Data_Form Auto_ActivateAuto_Deactivate Sheet_Title_FilterDatabaseTFc t} t} | j||||||||||  t} | | z | _| j t } | s t d| tvrt dt| z| | _ | dkr2|rt| jddx| _ }| jnx| dk(r2| j|rat| jddx| _ }nA| j| jDcgc]}dc}| _|s| j#t%| j | _| dk(r0| j&dkDr!t| jd | j&t}|| z | _|s| j+| Scc}w#| j+xYw) N) filename file_contentslogfile verbosityuse_mmapencoding_overrideformatting_info on_demand ragged_rowsignore_workbook_corruptionz#Can't determine file's BIFF versionz BIFF version %s is not supportedrz`*** WARNING: on_demand is not supported for this Excel version. *** Setting on_demand to False. Frrz|*** WARNING: Excel 4.0 workbook (.XLW) file contains %d worksheets. *** Book-level data will be that of the last worksheet. )r Book biff2_8_loadload_time_stage_1getbofXL_WORKBOOK_GLOBALS XLRDErrorSUPPORTED_VERSIONSbiff_text_from_num biff_versionfprintfr5r:fake_globals_get_sheet parse_globals _sheet_names _sheet_list get_sheetslennsheetsload_time_stage_2release_resources)r3r5r6r7r4r8r9r:r;r<t0bkt1rEsht2s O/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/xlrd/book.pyopen_workbook_xlsrV;s B B5 ]y8/+#'A  ^!Bwyy!45 AB B 1 12$\23 ' 2  89,10 y  % % ' R      %HI+00 y    -/__=rd=BN ( 2 "**q.  L   ^!Bw   I'>  sDF6 F1 A=F61F66G cheZdZdZdgZdZdZdZdZdZ dZ dZ dZ dZ dZedZdZdZdZdZd d Zy) Namez Information relating to a named reference, formula, macro, etc. .. note:: Name information is **not** extracted from files older than Excel 5.0 (``Book.biff_version < 50``) stackNrc<|j}|r|j}|j}|tk(rt |dk(r|d}d|j cxkr|j dz k(rnn|j|jdz k(rg|j|jdz k(rK|jj|j }|j|j|jS|j|jjddt!d)a: This is a convenience method for the frequent use case where the name refers to a single cell. :returns: An instance of the :class:`~xlrd.sheet.Cell` class. :raises xlrd.biffh.XLRDError: The name is not a constant absolute reference to a single cell. rr=== Dump of Name object ========== End of dump =======headerfooterz2Not a constant absolute reference to a single cell)resultkindvalueoREFrLshtxloshtxhirowxlorowxhicolxlocolxhibooksheet_by_indexcelldumpr5rB)selfresrdreref3drSs rUroz Name.cellskk 88DIIEt|E aa9)99  q(88  q(8811%,,?B775<<>> II  00  LMMr[c|j}|r|j}|j}|tk(rlt |dk(r]|d}d|j cxkr|j dz k(r5nn1|jj|j }|s/||j|j|j|jfSt|j|j}t|t|j|j}t|j|j } t| t|j|j } d|cxkr|cxkr|jksJJd| cxkr| cxkr|j ksJJ|||| | fS|j#|jj$ddt'd)a This is a convenience method for the use case where the name refers to one rectangular area in one worksheet. :param clipped: If ``True``, the default, the returned rectangle is clipped to fit in ``(0, sheet.nrows, 0, sheet.ncols)``. it is guaranteed that ``0 <= rowxlo <= rowxhi <= sheet.nrows`` and that the number of usable rows in the area (which may be zero) is ``rowxhi - rowxlo``; likewise for columns. :returns: a tuple ``(sheet_object, rowxlo, rowxhi, colxlo, colxhi)``. :raises xlrd.biffh.XLRDError: The name is not a constant absolute reference to a single area in a single sheet. rrr^r_r`zDNot a constant absolute reference to a single area in a single sheet)rcrdrerfrLrgrhrmrnrirjrkrlminnrowsmaxncolsrpr5rB) rqclippedrrrdrersrSrirjrkrls rUarea2dz Name.area2dsw$kk 88DIIEt|E aa 8 q(8811%,,?B"!5<<u||U\\YY rxx8F U\\288)DEF rxx8F U\\288)DEF<&d.Z?d/Z@d0ZAy)2r=z Contents of a "workbook". .. warning:: You should not instantiate this class yourself. You use the :class:`Book` object that was returned when you called :func:`~xlrd.open_workbook`. rNrrrZgct|jD]#}|j|r|j|%|jddS)zt :returns: A list of all sheets in the book. All sheets not already loaded will be loaded. N)xrangerMrJ get_sheetrqsheetxs rUsheetsz Book.sheetssI T\\* 'F##F+v& '""r[cF|j|xs|j|S)zr :param sheetx: Sheet index in ``range(nsheets)`` :returns: A :class:`~xlrd.sheet.Sheet`. )rJrrs rUrnzBook.sheet_by_indexs# 'A4>>&+AAr[c#fKt|jD]}|j|yw)z Makes iteration through sheets of a book a little more straightforward. Don't free resources after use since it can be called like `list(book)` N)rangerMrn)rqis rU__iter__z Book.__iter__s1 t||$ )A%%a( ( )s/1c |jj|}|j |S#t$rtd|zwxYw)zp :param sheet_name: Name of the sheet required. :returns: A :class:`~xlrd.sheet.Sheet`. No sheet named <%r>)rIindex ValueErrorrBrn)rq sheet_namers rU sheet_by_namezBook.sheet_by_namesU  @&&,,Z8F""6** @1J>? ? @s .Acft|tr|j|S|j|S)z Allow indexing with sheet name or index. :param item: Name or index of sheet enquired upon :return: :class:`~xlrd.sheet.Sheet`. ) isinstanceintrnr)rqitems rU __getitem__zBook.__getitem__s0 dC &&t, ,%%d+ +r[c |jddS)z :returns: A list of the names of all the worksheets in the workbook file. This information is available even when no sheets have yet been loaded. N)rIrqs rU sheet_nameszBook.sheet_namess  ##r[ct|tr|}n |jj|}t |j|S#t$rt d|zwxYw)z :param sheet_name_or_index: Name or index of sheet enquired upon :returns: ``True`` if sheet is loaded, ``False`` otherwise. .. versionadded:: 0.7.1 r)rrrIrrrBboolrJrqsheet_name_or_indexrs rU sheet_loadedzBook.sheet_loadedsn )3 /(F M**001DED$$V,-- M 58K KLL Ms AA ct|tr|}n |jj|}d|j |<y#t$rt d|zwxYw)zu :param sheet_name_or_index: Name or index of sheet to be unloaded. .. versionadded:: 0.7.1 rN)rrrIrrrBrJrs rU unload_sheetzBook.unload_sheetsh )3 /(F M**001DE$(  M 58K KLL Ms AAc d|_t|jdr|jjd|_t|jdr|jjd|_d|_d|_y)a_ This method has a dual purpose. You can call it to release memory-consuming objects and (possibly) a memory-mapped file (:class:`mmap.mmap` object) when you have finished loading sheets in ``on_demand`` mode, but still require the :class:`Book` object to examine the loaded sheets. It is also called automatically (a) when :func:`~xlrd.open_workbook` raises an exception and (b) if you are using a ``with`` statement, when the ``with`` block is exited. Calling this method multiple times on the same object has no ill effect. rcloseN)_resources_releasedhasattrmemrfilestr_sharedstrings_rich_text_runlist_maprs rUrOzBook.release_resources sd$% 488W % HHNN  4<< ) LL    "&*#r[c|SNrrs rU __enter__zBook.__enter__!s r[c$|jyr)rO)rqexc_type exc_valueexc_tbs rU__exit__z Book.__exit__$s  r[cg|_g|_g|_d|_g|_g|_i|_d|_d|_d|_ |jd|_ d|_ d|_ d|_g|_g|_g|_i|_i|_d|_g|_d|_g|_g|_i|_g|_g|_i|_d|_d|_y)NrFr\r[)rJrI_sheet_visibilityrM _sh_abs_posnrr raw_user_name_sheethdr_countbuiltinfmtcountinitialise_format_info_all_sheets_count_supbook_count_supbook_locals_inx_supbook_addins_inx_all_sheets_map_externsheet_info_externsheet_type_b57_extnsht_name_from_num_sheet_num_from_name_extnsht_count_supbook_typesraddin_func_names name_obj_list colour_mappalette_recordxf_liststyle_name_maprrrs rU__init__z Book.__init__5s!#  &(#" ! ##%!"#' #' !!#%'"&(#$&! #$ "    r[TFc ||_||_||_||_||_||_| |_|st|d5} | jdd| j} | jdd| dk(r td|jrAtj| j| tj|_| |_n/| j!|_t#|j|_dddn||_t#||_d|_|jddt&j(k7r|j|_nt'j,|j|j| } dD]=}| j/t1|\|_|_|_|j*s=n td ~ |j*|jur7t3|jd r|jj5d |_|j$|_t8rEt;d t=|j*|j$|jfz|j yy#1swYixYw)NrbrzFile size is 0 bytes)access)r5r<)Workbookr=z-Can't find workbook in OLE2 compound documentrr[zmem: %s, base: %d, len: %dfile)r5r6r7r8r9r:r;openseektellrBmmapfileno ACCESS_READr stream_lenreadrLbaser SIGNATURErCompDoclocate_named_streamrrr _positionDEBUGprinttype)rqr3r4r5r6r7r8r9r:r;r<fsizecdqnames rUr>zBook.biff2_8_loadVs  "  !2."&h% 8q! vvxq! 19#$:;;==#'99QXXZdFVFV#WDL&*DO#$668DL&)$,,&7DO 8 8)DL!-0DO << w00 0||DHt||O>OQUQbQbimiuiuv NN7 # $r[ctj|td}|g|_dg|_dg|_|j jd|jy)NzSheet 1r) rinitialise_bookrrIrrrJappendrK)rqfake_sheet_names rUrGzBook.fake_globals_get_sheetsW""4())4,-C"# % r[c f|j}|jtrt|jd|||dk(rVt |d|j d}d}t}t|jdk(r|j|jz}nVd}nStd|dd\}}}||jz}|tkrt |d|j d}nt|dd}ts|jd k\r%t|jd |j |||||xj dz c_|tk7ra|j"j%dd d d dj'|d}ts|jdk\rt|jd|||yyt|j(} |j"j%| |j(j%||jj%||j*j%|| |j,|<y)NzBOUNDSHEET: bv=%d data %r rrrlenlenr\z DNNa' DLLY&& J* V !# 0 0  ' ' + (c*i(  !+ X E3, t(()D  ' ' -    $ $Z 0    $ $X .  " " ) )* 548D % %j 1r[cptd|ddd}trt|jd|||_y)N encoding %r strialz/ERROR *** codepage %r -> encoding %r -> %s: %s .r\rrrF)r8r&codepagerErFr5r6encoding_from_codepagestrrunicode BaseExceptionrr|splitrr% user_namerstrip)rqr<r&estrgs rUr$zBook.derive_encodings  ! ! 22DM ]] "  2% [] , $ >>Q&DLL*_`}}H111(;(D(#h-/""b( $ &.X>H ,E &NPXZbc$DM ==D  $--0    DMM!LD;;=D"DN!&D }}!  FMM4==$q'2B2B2H2H2Mb2QSTV  s8F'' H 0AHH cVtd|ddd}||_|jy)Nr5rr)r r<r$)rqrr<s rUhandle_codepagezBook.handle_codepageEs,$Qq *1-   r[ctd|dd}|jrtd||j|jdk(s|j|k(sJ||_y)Nr rr z Countries:rr)r r6rr5 countries)rqrrIs rUhandle_countryzBook.handle_countryKsN5$q), >>5yt||L~~'4>>Y+FFF"r[ctd|ddd}ts |jrt|jd||dvsJ||_y)Nr5rrzDATEMODE: datemode %r )rr)r rr6rFr5datemode)rqrrLs rUhandle_datemodezBook.handle_datemodeRsH$Qq *1- DNN DLL";X F6!!!  r[c ^txs|jdk\}|jdk\rtd|dd\}}d}t ||d\}}||d}|j dt k(r|jj||r)t|jd|j d||||yyy) Nrrt|jd | | | |Yyt d |dd\}}|rmtd |j t!|dt ||jdddddj#|d}td|||fz|j |dk(rXt%|d|dz|j&}||j(|j<|r!t|j(|j d|cxkrdksnd}|j*j|y)Nrrrr5rr!z*INFO: EXTERNSHEET needs %d bytes, have %d z)Missing CONTINUE after EXTERNSHEET recordz -&&--d3q g;(8/ E48,FB) =dAs4yt||D$(49  #b-(  5R EDLLYQw$T!BqD\4==A CM++D,?,?@% ; ;$,,OLqL  & & - -b 1r[c|jdk\r|j}t|dt|dt |d||j dk\rvt d|dd\}|dk(r+t d|dd\}}t|d||td|d k(r0t d|d d \}|d k(rd }n |dk(rd }nd}t|d|td)Nrz FILEPASS: r)rrYrr5r z!weak XOR: key=0x%04x hash=0x%04x rr r!z BIFF8 stdz BIFF8 strongz** UNKNOWN ENCRYPTION METHOD **z%s zWorkbook is encrypted)r6r5rFr\rLrEr rB)rqrlogfkind1key hash_valuekind2captions rUhandle_filepasszBook.handle_filepasss >>Q <*>%?a H *D1L1L,MTU V ($t/H/H*IPQ R**+ 9% *E%%e,D   B&"44 !#')$+BT-A-A)BB'+';';KM'J$'2-+-((*$t((.B."11 !#')$!%!>Q  : Cy) @))%0 !$6$> ? @ : C 9% 3E%%e,D*Jtzz*C((T^^GM&* s #UD1IX%$++I6(1{$ 3==? 2CSME JJL+01aQqT1HSM 2#5  2s: Lc(td|dd\}}y)NrOr  r )rqrobj_typeobj_ids rU handle_objzBook.handle_obj7s"%a4&r[c |jjdtxs|jdk\}|r9t d|j t |dt||j td|ddd}|rt d|z|j |j}|xjdz c_ |dd d k(rht|jd <|jdz |_ |r>t d ||fz|j t d |j|j y|dd dk(rDt|jd <|jdz |_|rt d|z|j yt|dd\}}|dk(r.t |jd <|rt#|j d||yt$|jd <|rt#|j d||g}t'|D]K} t||d\} }|j| |s)t#|j d|t| | |My#t(j*$r-|jrt d|||fz|j YywxYw)NrzSUPBOOK:rrrXr5znum_sheets = %drr sr\z(SUPBOOK[%d]: internal 3D refs; %d sheetsz _all_sheets_maps:zSUPBOOK[%d]: add-in functionsrz#SUPBOOK[%d]: DDE/OLE document = %r zSUPBOOK[%d]: url = %r zK*** WARNING: unpack failure in sheet %d of %d in SUPBOOK record for file %rz- sheetx=%d namelen=%d name=%r (next pos=%d) )rrrr6rr5r\rLr rSUPBOOK_INTERNALrrrQrrPSUPBOOK_DDEOLErFSUPBOOK_EXTERNALrstructerror) rqrrR num_sheetssbnurlrrrshnames rUhandle_supbookzBook.handle_supbook>s_ ""4(+!+  *4<< 0 $3t94<< @D$q),Q/ (:5DLLI!! q  !9 #&6D   #'+':':Q'>D $@CCTT[_[g[gh+T-A-A U  !9+ +&3D   #'+':':Q'>D $U:S@t||T ,T1Q?S ?&4D   #WT\\+QSVX[\ "2B '@#sK z" zA 7c!L    v &WT\\+[]^`cdj`kmsuxy z<< >>ej#./!\\  s;I>!|c$i' '$,,(RT[]aclnxy ##% %:T=S=SSZ^ZfZfg % w51 % %d z SST processing took %.2f seconds)rrr5r rLr r6rFrr[runpack_SST_tablerr9r) rqrrPnbtstrlist uniquestringsr nb rt_runlistrRs rU handle_sstzBook.handle_ssts  " 6B$i&tT!AY/2 T^^q( DLL"=} M!>>{KND"d| 2ICz &PRTVYZ NN4 +;7M*R'Z   *4D ' B 4R{B V r[cd}|jdkr5|jsd|_||_yt |d|jd}n t |dd}|r,t|jdt||j||j}||_y#t $rt |jdd}YmwxYw)NrrTrrrz!WRITEACCESS: %d bytes; raw=%s %r ) rEr&rrBr%r*UnicodeDecodeErrorstriprFr5rLrC)rqrrrEs rUhandle_writeaccesszBook.handle_writeaccesss   r !==%)"!% q$--BD A%dAa8 '$,,(LcRViY]YkYkmqr{{} & A%djjlAa@ AsB%CCc2tj| |j\}}}trt d|z|j |t k(r|j|n|tk(s |tk(r|j|n|tk(r|j|no|tk(r|j|nS|tk(r|j!|n7|t"k(r|j%|n|t&k(r|j)|n|t*k(r|j-|n|t.k(r|j1|n|t2k(r|j5|n|t6k(r|j9|n|t:k(r|j=|ns|t>k(r|jA|nW|tBk(r|jE|n;|tFk(r|jI|n|tJk(r|jM|n|tNk(r|jQ|n|tRk(r|jU|n|dzdk(r7|jVr+tY|j d|jZ|z dz |||n|t\k(r|j_|ja|jc|jds|jg|jhdk(r(tr"t d|jZ|j y ) Nz$parse_globals: record code is 0x%04xr z5*** Unexpected BOF at posn %d: 0x%04x len=%d data=%r r rzglobal EOF: position)5rrrrrr5XL_SSTrXL_FONT XL_FONT_B3B4 handle_font XL_FORMAT handle_formatXL_XF handle_xf XL_BOUNDSHEETr3 XL_DATEMODErM XL_CODEPAGErG XL_COUNTRYrJ XL_EXTERNNAMErVXL_EXTERNSHEETrl XL_FILEPASSrtXL_WRITEACCESSrXL_SHEETSOFFSETr XL_SHEETHDRr XL_SUPBOOKrXL_NAMEr XL_PALETTEhandle_paletteXL_STYLE handle_styler6rFrXL_EOF xf_epiloguerpalette_epiloguer&r$rE)rqrcr rs rUrHzBook.parse_globalssy ""4(#446 BeBRGdll[V|%w" "4  &y""4(ut$ %&&t,{"$$T*{"$$T*z!##D)}$&&t,~%''-{"$$T*~%''-&((.{"$$T*z!##D)w  &z!##D)x!!$'daDNN &^NNV+a/VTC  "##%%%'}}((*$$*e$:DNNQUQ]Q]^ur[cP|j|||z}|t|z|_|Sr)rrLr)rqrr rs rUrz Book.reads*xxCJ's4y r[c trtd|z|jd}|j}|j }|t k(r|d|t vr|d|j||dzz|j }|t k(r|dd|cxkrd ksn|d ||fzd td t||z z}|j|j|}trt|jd |t||kr|d||z }|dz }td|d d\} } trtd|| | fz|j|jdz |z } trtd| |fz|jd x} x} }|dk(rGtd|dd\} }| dk(rd} n:| dk(r|dks| dvrd} n)d} n&ddddddj| d } n |dvr dddd|} | dk(r | tk(rd} ts|j dk\r td || | | || fz|j| t"k(xs| dk(xr | tk(}|t"k(r|s| |k(r| S| dkr | t$k(r| S| dk\r | d!k(r|d"|d#|| | | || fzy)$Nz reqd: 0x%04xrctd|z)Nz%Unsupported format, or corrupt file: )rB)rks rU bof_errorzBook.getbof..bof_errorsCcIJ Jr[z$Expected BOF record; met end of filezExpected BOF record; found %rrz)Incomplete BOF record[1]; met end of filer rz.Invalid length (%d) for BOF record type 0x%04xrz getbof(): data=%r z)Incomplete BOF record[2]; met end of filer z5getbof(): op=0x%04x version2=0x%04x streamtype=0x%04xz+getbof(): BOF found at offset %d; savpos=%dirii)il i i rrrrr)riii)r rrrrzHBOF: op=0x%04x vers=0x%04x stream=0x%04x buildid=%d buildyr=%d -> BIFF%dz%Workspace file -- no spreadsheet datazXBOF not workbook/worksheet: op=0x%04x vers=0x%04x strm=0x%04x build=%d year=%d -> BIFF%d)rrr5rrrbofcodesrrwboflenrrFrLr r+XL_WORKBOOK_GLOBALS_4Wr6rAr)rq rqd_streamrsavposopcoder paddingrversion1version2 streamtype bof_offsetversionbuildyear got_globalss rUr@z Book.getbofs %3$,,G K! V  < =  ! 5q8QQ R! V  A BV!r! @6"# $#a&!899yy0 '$,,(?F t9v  A B Q;%eT!AY7*  I8Z017;|| E^^a'&0  ?v&'-1\\ ;!"""%$ t  Qq 2KE46!V#$;%+="= G G  #h" + +r4X>G b=Z+AAG DNNa' \8ZgFGMQ\\ [ $77D rM Bj,BB  - -+*PZBZN R fxUD'B C r[r{)Br|r}r~rrMrLrErr<r&rIrrBrrrrrrrr?rNrrnrrrrrrrOrrrrrsysstdoutr>rrrrrrKrGr3r6r$rGrJrMrVrlrtrrrrrrrrrHrr@rr[rUr=r=sGH L MHHI #I I GKJ:N JN #B) + ,$. (+.!HB%) ZZ1t'+%*$!&05 7rr 4$ $*$29h/+Z #! T12f1.:xH!T5-z^.*" W2$>@ J r[r=cl|}|dzr |dk\r|dz}d}nd}|dz}|dzr |dk\r|dz}d}nd}||||fS) Niirrri@rr)inrowincoloutrowrelrowoutcolrelcols rUexpand_cell_addressrFsa F v~ U? eOF T\F v~ S= cMF 666 ))r[cj|dk\sJtd} t|d\}}|||z}|s|S|dz }!)NrrZr)rdivmod)colx_A2Zrquotrems rUcolnamerXsO 199 2 D 4$ cCy4Kax r[c|rdd|dkt|fz}n d|dzfz}|rdd|dkt|fz}||zSdt|z}||zS)Nz(*%s%d)z+-rz$%dr$)absr)rowxr rrrowpartcolparts rUdisplay_cell_addressrbsv tD1H~s4y9946)# tD1H~s4y99 W  % W r[c d}t|}|d}t|}d}g}|j}i} t} t} t} d} t |D]}| d|||dzd}|dz }| ||}|dz }d}d}|dzr| d|||dzd}|dz }|dzr| d|||dzd}|dz }t d }d} ||z }|dzr3| ||z dz |}|||d|zz} |t|d z }|d|zz }n(| ||z |}||||z}|t|| z }||z }||z }||k(rn#|dz }||}t|}| |d}d}|r_g}t |D]A}||k(rd}|dz }||}t|}|j| d |||dz|dz }C|| t|<||z }||k\r*||z }|dz }||kr||}t|}n ||dz k(sJ|||| fS#xYw) zReturn list of stringsrrlatin_1r5rrr rrZr9r )rLrr rurrrr?)datatabnstringsdatainxndatasrdatalenrstrings strappend richtext_runs local_unpack local_minlocal_BYTES_ORDr _unused_incharsoptionsrtcountphoszaccstrgcharsgot charsneed charsavailrawstrgrunsrunindexs rUrrmsG \F 1:D$iG CGIMLIOGH%F dDSUO4Q7 q!$s), q T>"4c#a%9! tCA7:E 1HC!"%)I~&# !';YG s3q|#34ww <277G44z!  "H6! qLG7#D$iG%d1g.GC?B D"7O '>CqLG"7+D!$iG LSQ@Aq +/M#g, ' u  '>-C qLGw'd) HqL000'MFN M !!_ s )G;;G>)ABCDEFGHIJKLMNOPQRSTUVWXYZ)+ __future__rrrZrrrbiffhformula timemachinetimer ImportErrorr r empty_cellrrrr SUPBOOK_UNKrrrQrrC_code_from_builtin_namercode_from_builtin_nameitems_bin_bicrrrrV BaseObjectrXr=rrrrrr[rUr@s` & ((+!       QVWXQYN /5 )//1(JD$ 4 D 4 D#'4 #'4 (  $'#!jjA$((,&+u%16 AHL`:L`^t :t p!*$ U"{*+*+sC C)(C)