+
    icR                         R t ^ RIHt ^ RIt^ RIt^ RIHt ^RI5 RtRt	Rt
RtRtRt ! R R]4      t ! R R	]4      tR
 t ! R R]4      tRR lt]P*                  3R ltR# )z
Implements the minimal functionality required
to extract a "Workbook" or "Book" stream (as one big string)
from an OLE2 Compound Document file.
)print_functionN)unpack)*s   ࡱc                       ] tR t^tRtR# )CompDocError N)__name__
__module____qualname____firstlineno____static_attributes__r       U/Users/mibo/.openclaw/workspace/.venv-ak/lib/python3.14/site-packages/xlrd/compdoc.pyr   r      s    r   r   c                   L   a  ] tR t^ t o ^ ]P
                  3R ltRR ltRtV t	R# )DirNodec                   Wn         W@n        \        R VR,          4      w  qPn        V n        V n        V n        V n        \        RVR,          4      w  V n        V n	        V^ 8X  d   \        R4      V n        M\        V^ V^,
           R4      V n        . V n        R	V n        \        RVR,          4      V n        V'       d   V P!                  V4       R# R# )
z<HBBiii:@   P   Nz<ii:t   |   N 	utf_16_lez<IIII:d   r   NN)DIDlogfiler   etypecolourleft_DID	right_DIDroot_DID	first_SIDtot_sizeUNICODE_LITERALnameunicodechildrenparenttsinfodump)selfr   dentDEBUGr   cbufsizes   &&&&& r   __init__DirNode.__init__"   s     9d5k*	:t{DM4> 5$w-( 	(q='+DIQxz 2K@DIWd7m4IIe r   c                d   \        V P                  R V P                  V P                  V P                  V P
                  V P                  V P                  V P                  V P                  V P                  V P                  4       V^8X  d%   \        RV P                  V P                  R7       R# R# )zbDID=%d name=%r etype=%d DIDs(left=%d right=%d root=%d parent=%d kids=%r) first_SID=%d tot_size=%d
ztimestamp infofileN)fprintfr   r   r$   r   r   r   r    r'   r&   r!   r"   printr(   )r*   r,   s   &&r   r)   DirNode.dump5   sx    LLqHHdiiT]]NNDMM4;;t~~W[WdWd		
 A:"DKKdllC r   )r   r&   r   r   r!   r   r   r$   r'   r   r    r"   r(   N)   )
r   r	   r
   r   sysstdoutr.   r)   r   __classdictcell____classdict__s   @r   r   r       s     ()3:: &	D 	Dr   r   c                 N   V^ 8  d   R# \        WW,          P                  4       W,          P                  P                  V4       WV,          n        \        WW,          P
                  4       W,          P                  ^8X  d   \        WW,          P                  4       R# R# )    N)_build_family_treer   r&   appendr'   r   r   r    )dirlist
parent_DID	child_DIDs   &&&r   r>   r>   @   s|    1}fwG,>,G,GH  ''	2 *IwG,>,H,HI1$7w/A/J/JK %r   c                   n   a  ] tR t^Jt o Rt]P                  ^ R3R ltRR ltRR lt	R t
R tR	 tR
tV tR# )CompDocz
Compound document handler.

:param mem:
  The raw contents of the file, as a string, or as an :class:`mmap.mmap`
  object. The only operation it needs to support is slicing.
Fc                   W n         W@n        W0n        VR ,          \        8w  d   \	        R4      hVR,          R8w  d   \	        RVR,          ,          4      h\        RVR,          4      w  rVV'       d   \        RWe3,          VR7       Wn        \        RVR	,          4      w  rxV^8  d   \        R
V,          VR7       ^	pW8  d   \        RV,          VR7       ^p^V,          ;V n        p	^V,          V n	        V P                  R8w  g   V P                  ^@8w  d+   \        RV P                  V P                  3,          VR7       \        RVR,          4      w  qn
        qn        rr\        V4      R,
          p\        VV	4      w  ppV'       d)   V^,          p\        R\        V4      V	3,          VR7       VV n        VV n        \         P                   ! R^ .4      V,          ;pV n        V'       d   \        RWxWP                  VR7       \        RVV3,          VR7       \        RWP                  V P                  3,          VR7       \        RW3,          VR7       \        RW3,          VR7       V	^,          pRV,          p^ p\%        \        RVR,          4      4      pVV,           ^,
          V,          p\'        ^ V^m,
          V,           ^,
          V^,
          ,          4      p^ pV^ 8X  d   V\(        \*        ^ 39   d   EM"TpV\(        \*        \,        39  Ed
   V^8  d   \        RVV3,          VR7       VV8  d,   RVV3,          pV^8  d   \        VVR7       M\	        V4      hV^ 8  d   \	        RV,          4      hVV,          '       d   \	        RVVV,          3,          4      h^VV&   V^,          pV'       d   VV8  d   \        RVVVVVVR7       RV	V,          ,           pVP/                  \        VVVVV	,            4      4       VP1                  4       pEK   V'       d   VV8w  d   \        RVVVVVVR7       V'       d%   \        R \        V4      VR7       \3        V^
V4       . V n        ^ p^ p\7        \        V4      4       EF  p VV ,          p!V!\*        \(        39   d   K   V!V8  d;   V'       g&   \        R!VR7       \        R"V!V3,          VR7       ^p\8        VV &   ^pKa  V!R18  d   \	        R#V!,          4      hVV!,          '       d   \	        R$V!VV!,          3,          4      h^VV!&   V^,          pV'       d   VV8  d   \        R%VVVVVVV!VR7	       RV	V!,          ,           pV P4                  P/                  \        VVVVV	,            4      4       EK  	  V'       dE   \        R&\        V P4                  4      VR7       \3        V P4                  ^
V4       \        VR7       V'       d   V'       d   \        R \        V4      VR7       \3        V^
V4       \7        V\        V P4                  4      4       F  p"\8        V P4                  V"&   K  	  \        R&\        V P4                  4      VR7       \3        V P4                  ^
V4       V P;                  V P                  RV P4                  V P                  V P                  R'^R(7      p#. p$R2p%\7        ^ \        V#4      ^4       F3  p&V%^,          p%V$P=                  \?        V%V#V&V&^,            ^ V4      4       K5  	  V$V n         \C        V$^ V$^ ,          PD                  4       V'       d   V$ F  p'V'PG                  V4       K  	  V P@                  ^ ,          p(V(PH                  ^8X  g   Q hV(PJ                  ^ 8  g   V(PL                  ^ 8X  d	   R)V n'        MFV P;                  V P                  RV P4                  V	V(PJ                  V(PL                  R*^R(7      V n'        . V n(        V^ 8  d   V(PL                  ^ 8X  d   \        R+VR7       V(PL                  ^ 8  d   TpTp)V^ 8  d   V)^ 8  d   VV,          '       d   \	        R,VVV,          3,          4      h^VV&   V)^,          p)RVV	,          ,           p*\%        \        VVV*V*V	,            4      4      p+V PP                  P/                  V+4       V P4                  V,          pK  V'       d   \        R-VV)3,          VR7       V)^ 8X  d   V\(        8X  g   Q hV'       d%   \        R.VR7       \3        V PP                  ^
V4       V'       d   \        R/VR7       \3        V^V4       R0# R0# )3:r=      NzNot an OLE2 compound document:      Ns   z)Expected "little-endian" marker, found %rz<HH:   rG   Nz/
CompDoc format: version=0x%04x revision=0x%04xr1   :rH   "   NzMWARNING: sector size (2**%d) is preposterous; assuming 512 and continuing ...zYWARNING: short stream sector size (2**%d) is preposterous; assuming 64 and continuing ...   z"@@@@ sec_size=%d short_sec_size=%dz	<iiiiiiii:,   L   NzAWARNING *** file size (%d) not 512 + multiple of sector size (%d)Bz	sec sizesz mem data: %d bytes == %d sectorsz=SAT_tot_secs=%d, dir_first_sec_sid=%d, min_size_std_stream=%dz'SSAT_first_sec_sid=%d, SSAT_tot_secs=%dz)MSATX_first_sec_sid=%d, MSATX_tot_secs=%dz<%diz<109i:rM   i   NzMSATX: sid=%d (0x%08X)z7MSAT extension: accessing sector %d but only %d in filez%MSAT extension: invalid sector id: %dzMSAT corruption: seen[%d] == %dz	[1]===>>>z	[2]===>>>zMSAT: len =z8WARNING *** File is truncated, or OLE2 MSAT is corrupt!!z6INFO: Trying to access sector %d but only %d availablezMSAT: invalid sector id: %dz)MSAT extension corruption: seen[%d] == %dz	[3]===>>>z
SAT: len =	directoryr$   seen_idr   SSCSzHWARNING *** OLE2 inconsistency: SSCS size is 0 but SSAT size is non-zerozSSAT corruption: seen[%d] == %dz&SSAT last sid %d; remaining sectors %dSSATseenNr   ))r   ignore_workbook_corruptionr,   	SIGNATUREr   r   r4   memsec_sizeshort_sec_sizedir_first_sec_sidmin_size_std_streamlendivmodmem_data_secsmem_data_lenarrayrT   listmaxEOCSIDFREESIDMSATSIDextendpop	dump_listSATxrangeEVILSID_get_streamr?   r   r@   r>   r    r)   r   r!   r"   rR   rS   ),r*   rX   r   r,   rV   revisionversionsszssszrY   SAT_tot_secs_unusedSSAT_first_sec_sidSSAT_tot_secsMSATX_first_sec_sidMSATX_tot_secsr`   r_   	left_overrT   nentfmttrunc_warnedMSATSAT_sectors_reqdexpected_MSATX_sectorsactual_MSATX_sectorssidmsgoffsetactual_SAT_sectors
dump_againmsidxmsidsatxdbytesr@   didposdsscs_dirnsecs	start_posnewss,   &&&&&                                       r   r.   CompDoc.__init__T   s   *D'
s8y >??u:$JSQVZWXX"5#e*5DGZZahi5#e*-	8a#%C:m$&D#$8+4i==C4#6#6"#<6$--I\I\9]]dkl
 ;E
+		
0';S3x#~#),#A yQMUs8X&'-46*( ;;sQC0=@@ty+s(4G4GgV4m7TT[bcQ!7!79Q9QSTZac;?Q>bbipq=AT@ffmtu1}tm F7CK01)D014=!$Q)9C)?$)F)JPTWXPX(Y!Z Q#667A:N#N %Cfgw77 192c3Z?gN-'SWZ\iVjjCqyc0&s++1W&'NQT'TUU99&'HCQUVYQZK['[\\S	$)$14JJ+}d<LNdfz  BI  Jx#~-F3F6(?(CDEhhj)-CC+}d4DF\^r  zA  B-T9dB( 
CI&E;D(( }$#T[bcR/06=?#$L%U
"#@4#GHHDzz"#NRVX\]aXbQc#cddDJ!#+.>>k=$8HJ`bv  yK  MQ  X_  `8d?*FHHOOF3F6(?(CDE1 '4 ,DHHG<dhhG,
 wZ-T9dB(}c$((m<!( =,DHHG<dhhG, !!HHc488T]]D4J4Ja " ) !S[#.C1HCNN73s3s7(;QHI / 7Awqz':':;u 
 <<?~~"""!X%6%6!%; DI((#txx83E3E!! ) ;DI 	1!2!2a!7\cjkq $C!E(uqy99&'HCQUVYQZK['[\\S	
#.0	F3Ii6H(IJK		  &hhsmeDU|SZabA:#-//&w'diiW-&w'dB( r   Nc	                   . p	Tp
Vf   V
^ 8  d   VeM   V P                   V
,          '       d&   \        RWzV P                   V
,          3,          4      hWP                   V
&   W*V,          ,           pV	P                  WW,            4        W:,          p
K  V
\        8X  g   Q hMTpV
^ 8  d   VeM   V P                   V
,          '       d&   \        RWzV P                   V
,          3,          4      hWP                   V
&   W*V,          ,           pTpW8  d   TpW,          pV	P                  WW,            4        W:,          p
K  V
\        8X  g   Q hV^ 8w  d   \        V P                  RWvWl,
          4       RP                  V	4      #   \         d    \        RYz3,          4      hi ; i  \         d    \        RYz3,          4      hi ; i)N%s corruption: seen[%d] == %dz:OLE2 stream %r: sector allocation table invalid entry (%d)z=WARNING *** OLE2 stream %r: expected size %d, actual size %d
r   )rT   r   r?   
IndexErrorrd   r3   r   join)r*   rX   basesatrY   	start_sidsizer$   rQ   sectorssr   todograbs   &&&&&&&&&     r   rm   CompDoc._get_stream  s   <q&&yy||*+JdW[W`W`abWcMd+dee#*IIaL x</	sY-?@AA ;;Dq&&yy||*+JdW[W`W`abWcMd+dee#*IIaL x</	;DsY^<=A ;;qyT- xx  A " &T	" * " &T	" s   	F 5F$ F!$Gc                   V^ ,          pVR,          pV P                   pWR,          P                   F  pWV,          P                  P                  4       VP                  4       8X  g   K8  WV,          P                  pV^8X  d   WV,          u # V^8X  d'   V'       g   \        R4      hV P                  WF4      u # WV,          P                  ^4       \        R4      h	  R# )r=   :r6   NNz"Requested component is a 'storage'z'Requested stream is not a 'user stream'N)r@   r&   r$   lowerr   r   _dir_searchr)   )r*   pathstorage_DIDheadtaildlchildets   &&&     r   r   CompDoc._dir_searchN  s    AwBx\\_--Ey~~##%5Y__79$7*+OPP++D88	q!"#LMM . r   c                   V P                  VP                  R4      4      pVf   R# VP                  V P                  8  d\   V P	                  V P
                  RV P                  V P                  VP                  VP                  WP                  ^,           R7      # V P	                  V P                  ^ V P                  V P                  VP                  VP                  VR,           RR7      # )z
Interrogate the compound document's directory; return the stream as a
string if found, otherwise return ``None``.

:param qname:
  Name of the desired stream e.g. ``'Workbook'``.
  Should be in Unicode or convertible thereto.
/NrK   rP    (from SSCS))r   splitr"   r\   rm   rX   rj   rY   r!   r   rR   rS   rZ   )r*   qnamer   s   && r   get_named_streamCompDoc.get_named_streama  s     U[[-.9::111###txx

a $ 9 9 ##		1dii)<)<akk

!7 $ G Gr   c                   V P                  VP                  R4      4      pVf   R# VP                  V P                  8  d)   \	        RWP                  V P                  3,          4      hVP                  V P
                  8  d   V P                  V P                  RV P                  V P                  VP                  VP                  WP                  ^,           4      pV P                  '       d9   \        RV P                  R7       \        V P                   ^V P                  4       V# V P#                  V P$                  ^ V P&                  V P(                  VP                  VP                  VR,           R4      ^ VP                  3# )	a  
Interrogate the compound document's directory.

If the named stream is not found, ``(None, 0, 0)`` will be returned.

If the named stream is found and is contiguous within the original
byte sequence (``mem``) used when the document was opened,
then ``(mem, offset_to_start_of_stream, length_of_stream)`` is returned.

Otherwise a new string is built from the fragments and
``(new_string, 0, length_of_stream)`` is returned.

:param qname:
  Name of the desired stream e.g. ``'Workbook'``.
  Should be in Unicode or convertible thereto.
r   Nz7%r stream length (%d bytes) > file data size (%d bytes)rK   z
seenr1   r   )Nr=   r=   )r   r   r"   r`   r   r\   _locate_streamrX   rj   rY   r!   r   r,   r4   r   ri   rT   rm   rR   rS   rZ   )r*   r   r   results   &&  r   locate_named_streamCompDoc.locate_named_streamv  s4   " U[[-.9::)))X**d&7&78 9 : :::111((#txx

E557,F zzzhT\\2$))R6M   IIq$))T-@-@!++JJ 6> 

 r   c	                ^  a Tp	V	^ 8  d   \        RV,          4      hRp
R	pR
p. p^ pWd,           ^,
          V,          pV	^ 8  Ed   V P                  V	,          '       dw   V P                  '       ge   \        RV,          V P                  R7       \        V P                  ^V P                  4       \        RWyV P                  V	,          3,          4      hWP                  V	&   V^,          pW8  d   \        RWV,          3,          4      hW^,           8X  d
   W,          pM0V
^ 8  d   VP                  W34       W)V,          ,           pW,           pT	p
W9,          p	EK!  V	\        8X  g   Q hW8X  g   Q hV'       g   SW3# VP                  W34       RP                  V3R lV 4       4      ^ V3# )r=   z%_locate_stream: start_sid (%d) is -vez_locate_stream(%s): seenr1   r   z,%s: size exceeds expected %d bytes; corrupt?r   c              3   0   <"   T F  w  rSW x  K  	  R # 5i)Nr   ).0r   end_posrX   s   &  r   	<genexpr>)CompDoc._locate_stream.<locals>.<genexpr>  s     Q&4FIY/&s   iiiH)	r   rT   rV   r4   r   ri   r?   rd   r   )r*   rX   r   r   rY   r   expected_stream_sizer   rQ   r   pr   r   slices	tot_foundfound_limits   &f&&&&&&&       r   r   CompDoc._locate_stream  s   q5FRSS		+6:xG1fyy||6664u<4<<PR[\`\e\egikokwkwRx&'F%TXT]T]^_T`Ia'abb"IIaLNI&"BH456  aCx# 6MM9"67 x</	#.AAF{{'''99y*+Q&QQSTVjkkr   )r,   rj   rS   rR   r[   r@   rV   r   rX   r`   r_   r\   rY   rT   rZ   )Nr   Nr=   )r   r	   r
   r   __doc__r7   r8   r.   rm   r   r   r   r   r   r9   r:   s   @r   rD   rD   J   sB      %(JJaTY G)R/!b&G*&P,l ,lr   rD   c                     \        R VRV,          3,          RVR7       WW1,             F  p\        \        V4      RVR7       K  	  \        VR7       R# z%5d%sz = )endr2   r1   Nr4   str)aliststridefdposequalvalues   &&&&& r   x_dump_liner     sD    	'T4;'
'Sq9DM*c%jc* +	qMr   c                 D  a aa RV VV3R llpRpRp\        ^ \        S 4      S4       FV  pVf   V! V4       TpK  S WDS,            S WUS,            8w  g   K.  WE,
          S8  d   V! VS,
          ^R7       V! V4       TpKX  	  Ve   Ve   WE8w  d   V! V^R7       R# R# R# R# )r=   c                    < \        R V RV,          3,          RSR7       SW S,             F  p\        \        V4      RSR7       K  	  \        SR7       R# r   r   )r   r   r   r   r   r   s   && r   
_dump_linedump_list.<locals>._dump_line  sG    gtE{++1=4v.E#e*#A. /1r   N)r   r   )rk   r]   )r   r   r   r   r   oldposs   fff   r   ri   ri     s     
 CFaUV,>sOF36z"eF&=&AA|f$3<q1sOF - co#-3a  3@or   rU   r   r   )r   
__future__r   ra   r7   structr   timemachinerW   rd   re   SATSIDrf   rl   	Exceptionr   objectr   r>   rD   r   r8   ri   r   r   r   <module>r      s   
 &  
   0		
	

	9 	Df D@L@lf @lF  #zz !r   