+
     ic  c                  s   ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
HtHtHtHt R R lt/ ^Rb^Rb^Rb^R	b^R
b^Rb^Rb^Rb^Rb^Rb^Rb^Rb^Rb^Rb^Rb^Rb^Rb/ ^Rb^Rb^Rb^Rb^Rb^Rb^Rb^Rb^Rb^R b^R!b^R"b^R#b^R$b^R%b^R&b^R'bC^R(^R)^R*^R+^R,^R-^R./CtR/ R0 lt ! R1 R2]4      tR3 R4 lt ! R5 R6]4      t ! R7 R8]4      t ! R9 R:]4      t ! R; R<4      t ! R= R>4      t ! R? R@]],          4      tRAt]'       d    ]P:                  ]]]3,          ]3,          t M]P:                  t  ! RB RC] 4      t! ! RD RE4      t" ! RF RG4      t#RH RI lt$ ! RJ RK4      t%R# )L    )annotationsN)IOAny
NamedTupleUnionc                    V ^8  d   QhRRRR/# )   sstrreturnbytes format   "4/usr/lib64/python3.14/site-packages/PIL/PdfParser.py__annotate__r      s     7 73 75 7    c                sN    \         P                  V P                  R 4      ,           # )	utf_16_be)codecsBOM_UTF16_BEencode)r      &r   encode_textr      s    +!666r   Zu   ˘u   ˇu   ˆu   ˙u   ˝u   ˛u   ˚u   ˜u   •u   †u   ‡u   …u   —u   –u   ƒu   ⁄u   ‹u   ›u   −u   ‰u   „u   “u   ”u   ‘u   ’u   ‚u   ™u   ﬁu   ﬂu   Łu   Œu   Šu   Ÿu   Žu   ıu   łu   œu   šu   žu   €c               r   )r   br   r
   r	   r   r   r   r   r   r   A   s     J J5 JS Jr   c                s    V R \        \        P                  4       \        P                  8X  d,   V \        \        P                  4      R  P                  R4      # RP	                  R V  4       4      # )Nr   Z c              3  s`   "   T F$  p\         P                  V\        V4      4      x  K&  	  R # 5iN)PDFDocEncodinggetZchr).0Zbyte   & r   	<genexpr>Zdecode_text.<locals>.<genexpr>E   s$     Iqt~))$D	::qs   ,.)lenr   r   decodejoin)r   r   r   decode_textr#   A   s\    	#3v""#$(;(;;V(()+,33K@@wwIqIIIr   c                  s    ] tR t^HtRtRtR# )PdfFormatErrorzXAn error that probably indicates a syntactic or semantic error in the
PDF file structurer   N)__name__
__module____qualname____firstlineno____doc____static_attributes__r   r   r   r$   r$   H   s     	r   r$   c               $    V ^8  d   QhRRRRRR/# )r   	conditionboolerror_messager	   r
   Noner   r   r   r   r   r   O   s!     , ,d ,3 ,4 ,r   c                s,    V '       g   \        V4      hR # r   )r$   )r,   r.      &&r   check_format_conditionr1   O   s    ]++ r   c                  s,    ] tR t^Tt$ R]R&   R]R&   RtR# )IndirectReferenceTupleint	object_id
generationr   N)r%   r&   r'   r(   __annotations__r*   r   r   r   r2   r2   T   s    NOr   r2   c                  sR    ] tR t^YtR R ltR R ltR R ltR R ltR	 R
 ltRt	R# )IndirectReferencec                   V ^8  d   QhRR/# r   r
   r	   r   r   r   r   r   IndirectReference.__annotate__Z   s     7 7 7r   c                	:    V P                    R V P                   R2# ) z Rr4   r5   selfr   r   __str__ZIndirectReference.__str__Z   s    ..!4??"3266r   c               r8   r   r
   r   r   r   r   r   r   r:   ]   s     1 15 1r   c                	s@    V P                  4       P                  R 4      # us-ascii)r@   r   r>   r   r   	__bytes__ZIndirectReference.__bytes__]   s    ||~$$Z00r   c               r   r   otherobjectr
   r-   r   r   r   r   r   r:   `   s     Y YF Yt Yr   c                	s    V P                   VP                   Jd   R # \        V\        4      '       g   Q hVP                  V P                  8H  ;'       d    VP                  V P                  8H  # F)	__class__
isinstancer7   r4   r5   r?   rF   r0   r   __eq__ZIndirectReference.__eq__`   sS    >>0%!23333$..0XXU5E5E5XXr   c               r   rE   r   r   r   r   r   r:   f   s     # #F #t #r   c                	s    W8X  * # r   r   rK   r0   r   __ne__ZIndirectReference.__ne__f   s    ""r   c               r8   r   r
   r3   r   r   r   r   r   r:   i   s     7 7# 7r   c                	sD    \        V P                  V P                  34      # r   )hashr4   r5   r>   r   r   __hash__ZIndirectReference.__hash__i   s    T^^T__566r   r   N)
r%   r&   r'   r(   r@   rD   rL   rM   rP   r*   r   r   r   r7   r7   Y   s!    71Y#7 7r   r7   c                  s"    ] tR t^mtR R ltRtR# )IndirectObjectDefc               r8   r9   r   r   r   r   r   ZIndirectObjectDef.__annotate__n   s     9 9 9r   c                	r;   )r<   z objr=   r>   r   r   r@   ZIndirectObjectDef.__str__n   s    ..!4??"3488r   r   N)r%   r&   r'   r(   r@   r*   r   r   r   rQ   rQ   m   s    9 9r   rQ   c                  sv    ] tR t^rtR R ltR R ltR R ltR R ltR	 R
 ltR R lt	R R lt
R R ltRtR# )	XrefTablec               r8   r   r
   r/   r   r   r   r   r   XrefTable.__annotate__s   s     & &$ &r   c                	sB    / V n         / V n        ^ R/V n        RV n        R# )r    i   FN)existing_entriesnew_entriesdeleted_entriesreading_finishedr>   r   r   __init__ZXrefTable.__init__s   s0     	  	 !"5z %r   c               r+   )r   keyr3   valuetuple[int, int]r
   r/   r   r   r   r   r   rT   }   s!     * *s *? *t *r   c                	s    V P                   '       d   W P                  V&   MW P                  V&   WP                  9   d   V P                  V R # R # r   )rX   rV   rU   rW   r?   rZ   r[      &&&r   __setitem__ZXrefTable.__setitem__}   sI       $)S!).!!#&&&&$$S) 'r   c               r   )r   rZ   r3   r
   r\   r   r   r   r   r   rT      s     . .s . .r   c                	sr     V P                   V,          #   \         d    T P                  T,          u # i ; ir   )rV   KeyErrorrU   r?   rZ   r0   r   __getitem__ZXrefTable.__getitem__   s8    	.##C(( 	.((--	.s    66c               r   )r   rZ   r3   r
   r/   r   r   r   r   r   rT      s     " "s "t "r   c                	s   WP                   9   d?   V P                   V,          ^,          ^,           pV P                   V W P                  V&   R# WP                  9   d2   V P                  V,          ^,          ^,           pW P                  V&   R# WP                  9   d   V P                  V,          pR# RV R2p\        V4      h)   z
object ID z+ cannot be deleted because it doesn't existN)rV   rW   rU   
IndexError)r?   rZ   r5   msgs   &&  r   __delitem__ZXrefTable.__delitem__   s    """))#.q1A5J  %(2  %)))..s3A6:J(2  %(((--c2Jse#NOCS/!r   c               r   )r   rZ   r3   r
   r-   r   r   r   r   r   rT      s     G G G Gr   c                	sJ    WP                   9   ;'       g    WP                  9   # r   )rU   rV   ra   r0   r   __contains__ZXrefTable.__contains__   s"    +++FFs6F6F/FFr   c               r8   rN   r   r   r   r   r   rT      s     
 
 
r   c                	s    \        \        V P                  P                  4       4      \        V P                  P                  4       4      ,          \        V P
                  P                  4       4      ,          4      # r   )r    setrU   keysrV   rW   r>   r   r   __len__ZXrefTable.__len__   s^    %%**,-$""'')*+$&&++-./
 	
r   c               r8   )r   r
   zset[int]r   r   r   r   r   rT      s     ) )h )r   c                	s    \        V P                  P                  4       4      \        V P                  P                  4       4      ,
          \        V P                  P                  4       4      ,          # r   )rh   rU   ri   rW   rV   r>   r   r   ri   ZXrefTable.keys   sS    %%**,-D4H4H4M4M4O0PP  %%'() 	)r   c               r   )r   f	IO[bytes]r
   r3   r   r   r   r   r   rT      s     % %y %S %r   c                	s   \        \        V P                  P                  4       4      \        V P                  P                  4       4      ,          4      p\        \        V P                  P                  4       4      4      pVP                  4       pVP                  R 4       V'       Ed   Rp\        V4       F$  w  rgVe   V^,           V8X  d   TpK  VRV pW&R p M	  Tp. pVP                  RV^ ,          \        V4      3,          4       V F  p	WP                  9   d,   VP                  RV P                  V	,          ,          4       K>  VP                  ^ 4      p
\        W8H  RV	 RV
 24        V^ ,          pVP                  RWP                  V	,          3,          4       K  	  EK  V#   \         d    ^ p LBi ; i)s   xref
Ns   %d %d
s   %010d %05d n 
z*expected the next deleted object ID to be z, instead found s   %010d %05d f 
)Zsortedrh   rV   ri   rW   tellwrite	enumerater    popr1   rd   )r?   rk   ri   Zdeleted_keysZ	startxrefZprevZindexrZ   Zcontiguous_keysr4   Zthis_deleted_object_idZnext_in_linked_lists   &&          r   rn   ZXrefTable.write   s   c$**//12S9M9M9R9R9T5UUVc$"6"6";";"=>?FFH			d#D'o
<4!8s?D&*6ElO<D . #'GGJ/!"4c/6J!KKL,	 0 00GG.1A1A)1LLM-9-=-=a-@**!;DYK P))?(@B
0.:1o+ GG*.0D0DY0OPQ -$  & 0./+0s   4	F00G ?G )rW   rU   rV   rX   N)r%   r&   r'   r(   rY   r_   rb   rf   rg   rj   ri   rn   r*   r   r   r   rR   rR   r   s0    &*."G
)
% %r   rR   c                  s    ] tR t^t$ R]R&   R R ltR R ltR R ltR	 R
 ltR R lt	]
R R l4       t]! ]! ^!^4      4      R U u0 uF  p \        V 4      kK  	  up ,
          tR R ltRtR# u up i )PdfNamer   namec               r   )r   rr   zPdfName | bytes | strr
   r/   r   r   r   r   r   PdfName.__annotate__   s     0 02 0t 0r   c                	s    \        V\        4      '       d   VP                  V n        R# \        V\        4      '       d	   Wn        R# VP	                  R 4      V n        R# )rC   N)rJ   rq   rr   r   r   )r?   rr   r0   r   rY   ZPdfName.__init__   s<    dG$$		DIe$$IJ/DIr   c               r8   r9   r   r   r   r   r   rs      s     , ,S ,r   c                	s8    V P                   P                  R 4      # rB   )rr   r!   r>   r   r   name_as_strZPdfName.name_as_str   s    yy
++r   c               r   rE   r   r   r   r   r   rs      s        F  t  r   c                	s    \        V\        4      ;'       d"    VP                  V P                  8H  ;'       g    WP                  8H  # r   )rJ   rq   rr   rK   r0   r   rL   ZPdfName.__eq__   s:    ug&BB5::+B   ii	 r   c               r8   rN   r   r   r   r   r   rs      s      # r   c                	s,    \        V P                  4      # r   )rO   rr   r>   r   r   rP   ZPdfName.__hash__   s    DIIr   c               r8   r9   r   r   r   r   r   rs      s     ? ?# ?r   c                	s`    V P                   P                   R \        V P                  4       R2# )Z())rI   r%   reprrr   r>   r   r   __repr__ZPdfName.__repr__   s)    ..))*!DO+<A>>r   c               r   )r   datar   r
   rq   r   r   r   r   r   rs      s     3 35 3W 3r   c                	s8    V ! \         P                  V4      4      # r   )	PdfParserinterpret_name)clsrx   r0   r   from_pdf_streamZPdfName.from_pdf_stream   s    9++D122r   z#%/()<>[]{}c               r8   rA   r   r   r   r   r   rs      s      5 r   c                	s    \        R 4      pV P                   F>  pW P                  9   d   VP                  V4       K&  VP	                  RV,          4       K@  	  \        V4      # )s   /s   #%02X)	bytearrayrr   allowed_charsappendextendr   )r?   resultr   s   &  r   rD   ZPdfName.__bytes__   sM    4A&&&a hl+	 
 V}r   )rr   N)r%   r&   r'   r(   r6   rY   rt   rL   rP   rw   classmethodr|   rh   rangeordr~   rD   r*   )Zc   0r   rq   rq      sn    
K0, 
? 3 3 b#'=*I=a3q6=*IIM  +Js   A/rq   c                  s"    ] tR t^tR R ltRtR# )PdfArrayc               r8   rA   r   r   r   r   r   ZPdfArray.__annotate__   s     D D5 Dr   c                	sN    R RP                  R V  4       4      ,           R,           # )s   [     c              3  s8   "   T F  p\        V4      x  K  	  R # 5ir   )pdf_repr)r   xr   r   r   Z%PdfArray.__bytes__.<locals>.<genexpr>   s      ;d!ds   s    ])r"   r>   r   r   rD   ZPdfArray.__bytes__   s!    tyy ;d ;;;eCCr   r   N)r%   r&   r'   r(   rD   r*   r   r   r   r   r      s    D Dr   r   Fc                  s:    ] tR tRtR R ltR R ltR R ltRtR	# )
PdfDicti  c               r+   )r   rZ   r	   r[   r   r
   r/   r   r   r   r   r   PdfDict.__annotate__  s!     1 1s 13 14 1r   c                	s~    VR 8X  d#   \         P                  P                  WV4       R# W VP                  R4      &   R# )rx   rC   N)collectionsUserDict__setattr__r   r]   r^   r   r   ZPdfDict.__setattr__  s0    &=  ,,T>+0J'(r   c               r   )r   rZ   r	   r
   zstr | time.struct_timer   r   r   r   r   r     s      s '= r   c                	s     WP                  R 4      ,          p\        T\        4      '       d   \        T4      pTP                  R4      '       Ed   TP                  R4      '       d
   TR,          pRp\        T4      ^8  dL   T^,          p\        TR,          4      ^<,          p\        T4      ^8  d   T\        TR,          4      ,          pRR\        T4      ^,
           p\        P                  ! TR\        T4      ^,            T4      pTR
9   dK   X^<,          pTR	8X  d
   TR,          p\        P                  ! \        P                  ! T4      T,           4      pT#   \         d   p\        T4      ThRp?ii ; i)rC   NZDatezD::r   NNZZ:i   i   N:i   i   Nz%Y%m%d%H%M%S+)r   Z-)r   r`   ZAttributeErrorrJ   r   r#   ZendswithZ
startswithr    r3   timeZstrptimeZgmtimecalendarZtimegm)r?   rZ   r[   ZeZrelationshipoffsetr   s   &&     r   __getattr__ZPdfDict.__getattr__  s;   	-J/0E eU##&E<<%%b	L5zB$RyU5\*R/u:?c%,//F#$4c%j1n5FMM%(9#f+/":FCEz)"3&bLFHOOE$:V$CD-  	- %1,	-s   E! !E=,E88E=c               r8   rA   r   r   r   r   r   r   '  s      5 r   c                	sP   \        R 4      pV P                  4        Fl  w  r#Vf   K  \        V4      pVP                  R4       VP                  \	        \        V4      4      4       VP                  R4       VP                  V4       Kn  	  VP                  R4       \	        V4      # )   <<   
r   s   
>>)r}   itemsr   r   r   rq   )r?   ZoutrZ   r[      &   r   rD   ZPdfDict.__bytes__'  s    **,JC}UOEJJuJJuWS\*+JJtJJu ' 	

7Szr   r   N)r%   r&   r'   r(   r   r   rD   r*   r   r   r   r   r     s    16 r   r   c                  .    ] tR tRtR R ltR R ltRtR# )	PdfBinaryi5  c               r   )r   rx   zlist[int] | bytesr
   r/   r   r   r   r   r   PdfBinary.__annotate__6  s      . 4 r   c                	s    Wn         R # r   rx   )r?   rx   r0   r   rY   ZPdfBinary.__init__6  s    	r   c               r8   rA   r   r   r   r   r   r   9  s     B B5 Br   c                	sT    R RP                  R V P                   4       4      ,          # )s   <%s>r   c              3  s4   "   T F  pR V,          x  K  	  R# 5i)s   %02XNr   r   r   r   r   r   Z&PdfBinary.__bytes__.<locals>.<genexpr>:  s     !Ay!'A++ys   )r"   rx   r>   r   r   rD   ZPdfBinary.__bytes__9  s     !Atyy!AAAAr   r   N)r%   r&   r'   r(   rY   rD   r*   r   r   r   r   r   5  s    B Br   r   c                  r   )	PdfStreami=  c               r+   )r   
dictionaryr   bufr   r
   r/   r   r   r   r   r   PdfStream.__annotate__>  s!      7  4 r   c                	s    Wn         W n        R # r   )r   r   )r?   r   r   r^   r   rY   ZPdfStream.__init__>  s    $r   c               r8   rA   r   r   r   r   r   r   B  s     + + +r   c                	sl    V P                   R ,          pTR8X  d@    T P                   R,          p\        P                  ! T P                  \        T4      R7      # R\        T4       R2p\        T4      h  \         d    T P                  u # i ; i  \         d    T P                   R,          p Li ; i)s   Filters   FlateDecodes   DL   Length)Zbufsizezstream filter z unknown/unsupported)r   r`   r   zlibZ
decompressr3   rv   ZNotImplementedError)r?   ZfilterZexpected_lengthre   r   r   r!   ZPdfStream.decodeB  s    	__Y/F ^#="&//%"8 ??488S5IJJ"4<.0DEC%c**  	88O	
  ="&//)"<=s"   A5 B 5BBB32B3)r   r   N)r%   r&   r'   r(   rY   r!   r*   r   r   r   r   r   =  s    + +r   r   c               r   )r   r   r   r
   r   r   r   r   r   r   r   R  s        r   c                sn   V R J d   R# V RJ d   R# V f   R# \        V \        \        \        \        34      '       d   \        V 4      # \        V \        \        34      '       d   \        V 4      P                  R4      # \        V \        P                  4      '       d5   R\        P                  ! RV 4      P                  R4      ,           R,           # \        V \        4      '       d   \        \        V 4      4      # \        V \        4      '       d   \        \        V 4      4      # \        V \        4      '       d   \        \!        V 4      4      # \        V \
        4      '       dG   V P#                  R	R
4      p V P#                  RR4      p V P#                  RR4      p RV ,           R,           # \        V 4      # )Ts   trueFs   falses   nullrC   s   (D:z%Y%m%d%H%M%SZ   )   \s   \\   (   \(s   \))rJ   rq   r   r   r   r   r3   floatr	   r   r   Zstruct_timeZstrftimeZdictlistr   r   Zreplace)r   r   r   r   r   R  sB   Dy	
e	
	A(I>	?	?Qx	AU|	$	$1v}}Z((	At''	(	(oq9@@LLtSS	At		WQZ  	At		Xa[!!	As		A''	Au		IIeW%IIdF#IIdF#ax$Qxr   c                  s    ] tR tRtRtRpR R lltR R ltR R	 ltR
 R ltR R lt	R R lt
R R ltR R ltR R ltR R ltR R ltRqR R lltR R ltR R ltR  R! lt]R" R# l4       tR$ R% ltRqR& R' lltR(tR)tR*tR+t]R,,           t]R-,           tR.tR/t]],           ],           t ]!PD                  ! ]R0,           ],           R1,           ] ,           R2,           ] ,           R3,           ] ,           R4,           ],           R5,           ]!PF                  4      t$]!PD                  ! ]R0,           ],           R6,           ] ,           R2,           ] ,           R3,           ] ,           R4,           ],           ]!PF                  4      t%R7 R8 lt&R9 R: lt']!PD                  ! ]4      t(]!PD                  ! ]R;,           ],           R<,           4      t)]!PD                  ! ]R=,           4      t*]!PD                  ! ]R>,           ],           4      t+],R? R@ l4       t-]!PD                  ! RA4      t.],RrRB RC ll4       t/]!PD                  ! ]RD,           ],           R<,           4      t0]!PD                  ! ]RE,           ],           R<,           4      t1]!PD                  ! ]RF,           ],           R<,           4      t2]!PD                  ! ]RG,           ],           R<,           4      t3]!PD                  ! ]RH,           ],           R<,           4      t4]!PD                  ! ]RI,           4      t5]!PD                  ! ]RJ,           4      t6]!PD                  ! ]RK,           ],           RL,           4      t7]!PD                  ! ]RM,           4      t8]!PD                  ! ]RN,           ],           RN,           ],           RO,           ],           R<,           4      t9]!PD                  ! ]RN,           ],           RN,           ],           RP,           ],           R<,           4      t:]!PD                  ! ]RQ,           ],           R<,           4      t;]!PD                  ! RR],           RS,           ] ,           RT,           4      t<]!PD                  ! ]RU,           4      t=]!PD                  ! ]RV,           ],           R<,           4      t>],RsRW RX ll4       t?]!PD                  ! RY4      t@/ RZR[bR\R]bR^R_bR`RabRbRcbRRRRbR<R<bRdRdb]A! RZ4      R[b]A! R\4      R]b]A! R^4      R_b]A! R`4      Rab]A! Rb4      Rcb]A! RR4      RRb]A! R<4      R<b]A! Rd4      RdbtB],Re Rf l4       tC]!PD                  ! ]Rg,           ] ,           4      tD]!PD                  ! ]R3,           ],           R3,           ],           ],           4      tE]!PD                  ! Rh4      tFRi Rj ltGRtRk Rl lltHRqRm Rn lltIRotJR# )ury   io  zpBased on
https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf
Supports PDF up to 1.4
Nc               s0    V ^8  d   QhRRRRRRRRR	R
RR/# )r   filenamez
str | Nonerk   zIO[bytes] | Noner   zbytes | bytearray | Nonestart_offsetr3   moder	   r
   r/   r   r   r   r   r   PdfParser.__annotate__u  sF     / // / &	/
 / / 
/r   c                	s   V'       d   V'       d   R p\        V4      hWn        W0n        W n        W@n        RV n        RV n        Ve   Vf   \        W4      ;V n        pRV n        VeI   V P                  V4      V n        RV n        V'       g$   \        VR4      '       d   VP                  V n        / V n        V  V  V  V  V P                  '       d   V P                  4        M{^ ;V n        V n        \        4       V n        RV n        \        4       V n        RV n        \        4       V n        . V n        . V n        RV n        RV n        / V n        \5        4       V n        RV P6                  n        V'       d   V P;                  4        R# R# )z4specify buf or f or filename, but not both buf and fFNTrr   )RuntimeErrorr   r   rk   r   should_close_bufshould_close_fileZopenget_buf_from_filehasattrrr   cached_objectsread_pdf_infofile_size_totalfile_size_thisr   rootroot_refinfoinfo_refpage_tree_rootpages
orig_pages	pages_reflast_xref_section_offsettrailer_dictrR   
xref_tablerX   seek_end)r?   r   rk   r   r   r   re   s   &&&&&& r   rY   ZPdfParser.__init__u  sH    1HCs## 9<( %!&AIh--DFQ%)D"=--a0DH$(D!6 2 2 !<>888 9::D 4#6	DI DM	DI DM"))D24DJ79DO!DN,0D)24D'kDO+/(MMO r   c               r8   )r   r
   ry   r   r   r   r   r   r     s      9 r   c                	s    V # r   r   r>   r   r   	__enter__ZPdfParser.__enter__  s    r   c               r   )r   argsrG   r
   r/   r   r   r   r   r   r     s      f  r   c                	s&    V P                  4        R # r   )close)r?   r   s   &*r   __exit__ZPdfParser.__exit__  s    

r   c               r8   rS   r   r   r   r   r   r     s      t r   c                	sF    V P                  4        V P                  4        R # r   )	close_bufr   r>   r   r   start_writingZPdfParser.start_writing  s    r   c               r8   rS   r   r   r   r   r   r     s      4 r   c                	s    \        V P                  \        P                  4      '       d   V P                  P                  4        R V n        R # r   )rJ   r   mmapr   r>   r   r   r   ZPdfParser.close_buf  s,    dhh		**HHNNr   c               r8   rS   r   r   r   r   r   r     s      t r   c                	s    V P                   '       d   V P                  4        V P                  e8   V P                  '       d$   V P                  P	                  4        R V n        R # R # R # r   )r   r   rk   r   r   r>   r   r   r   ZPdfParser.close  sI       NN66$"8"8"8FFLLNDF #9r   c               r8   rS   r   r   r   r   r   r     s     $ $$ $r   c                	sz    V P                   f   Q hV P                   P                  ^ \        P                  4       R # r   )rk   ZseekosZSEEK_ENDr>   r   r   r   ZPdfParser.seek_end  s(    vv!!!Ar{{#r   c               r8   rS   r   r   r   r   r   r     s     $ $d $r   c                	s\    V P                   f   Q hV P                   P                  R4       R # )Ns	   %PDF-1.4
)rk   rn   r>   r   r   write_headerZPdfParser.write_header  s"    vv!!!]#r   c               r   )r   r   r	   r
   r/   r   r   r   r   r   r     s     * *s *t *r   c                	s    V P                   f   Q hV P                   P                  RV R2P                  4       4       R # )Nz% Z
)rk   rn   r   )r?   r   r0   r   write_commentZPdfParser.write_comment  s3    vv!!!r!BZ&&()r   c               r8   )r   r
   r7   r   r   r   r   r   r     s      0 r   c                	s   V P                   f   Q hV P                  4        V P                  V P                   P                  4       4      V n        V P                  ^ 4      V n        V P                  4        V P                  V P                  \        R4      V P
                  R7       V P                  V P
                  \        R4      \        V P                  4      V P                  R7       V P                  # )N   Catalog)TypeZPages   Pages)r   ZCountZKids)rk   del_rootnext_object_idrm   r   r   rewrite_pages	write_objrq   r    r   r>   r   r   write_catalogZPdfParser.write_catalog  s    vv!!!++DFFKKM:,,Q/t}}7:+>dnnUNN"djj/	 	 	
 }}r   c               r8   rS   r   r   r   r   r   r     s      t r   c                	s   . p\        V P                  4       F  w  r#V P                  V,          pV P                  VP                   VP                  V\        R 4      ,          4       W0P                  9  d   Kb  / pVP                  4        F  w  rgWuVP                  4       &   K  	  V P                  VR&   V P                  ! R/ VB p\        V P                  4       F  w  rW8X  g   K  WP                  V	&   K  	  K  	  V Fd  pV'       g   K  V P                  V,          pVP                  V P                  9   d   V P                  VP                   VP                  R R4      pKc  	  . V n        R# )s   ParentParentNr   )ro   r   r   r   r4   r   rq   r   r   rt   r   
write_pager   )r?   Zpages_tree_nodes_to_deleteiZpage_refZ	page_infoZstringified_page_inforZ   r[   Znew_page_refZjZcur_page_refZpages_tree_node_refZpages_tree_nodes   &            r   r   ZPdfParser.rewrite_pages  s:   %'"$T__5KA++H5I 2 23&--i	8J.KLzz)$&!'oo/
;@coo&78 0 /3nn!(+??I3HIL#,TZZ#8+$0JJqM $9 6& $>%%"&"5"56I"J&00DOOC(;(E(EF&5&9&9)T&J# $> r   c               r   )r   new_root_refIndirectReference | Noner
   r/   r   r   r   r   r   r     s     
 
4
	
r   c                	sh   V P                   f   Q hV'       d   V P                  4        Wn        V P                  '       d"   V P	                  R V P                  4      V n        V P                  P                  V P                   4      p\        V P                  4      pRV P                  RV/pV P                  e   V P                  VR&   V P                  '       d   V P
                  VR&   W n	        V P                   P                  R\        \        V4      4      ,           RV,          ,           4       R # )N   Root   Size   Prev   Infos   trailer
s   
startxref
%d
%%%%EOF)rk   r   r   r   r   r   r   rn   r    r   r   r   )r?   r   Z
start_xrefZnum_entriesr   s   &&   r   write_xref_and_trailerZ PdfParser.write_xref_and_trailer  s     vv!!!MMO(M999 NN4;DM__**4662
$//*T]][0
 ((4$($A$AL!999$(MML!(2%GL)*+)J67	
r   c               (    V ^8  d   QhRRRRRRRR/# )r   refzint | IndirectReference | Noneobjsr   dict_objr
   r7   r   r   r   r   r   r     s,     : :1::=:KN:	:r   c                	s    \        V\        4      '       d   V P                  V,          MTpR V9  d   \        R4      VR &   RV9  d   V P                  VR&   V P
                  ! V.VO5/ VB # )r      Pager   )rJ   r3   r   rq   r   r   )r?   r   r   r   Zobj_refs   &&*, r   r   ZPdfParser.write_page  se     &0S%9%9$**S/s!&w/HV8#!%HX~~g9999r   c               r   )r   r   r   r   r   r   r
   r7   r   r   r   r   r   r     s,      +47EH	r   c                	s   V P                   f   Q hV P                   pVf!   V P                  VP                  4       4      pM3VP                  4       VP                  3V P                  VP
                  &   VP                  \        \        V!  4      4       VP                  RR 4      pVe   \        V4      VR&   V'       d   VP                  \        V4      4       V F  pVP                  \        V4      4       K  	  Ve4   VP                  R4       VP                  V4       VP                  R4       VP                  R4       V# )NstreamZLengths   stream
s   
endstream
s   endobj
)rk   r   rm   r5   r   r4   rn   r   rQ   rp   r    r   )r?   r   r   r   rk   r   Zobjs   &&*,   r   r   ZPdfParser.write_obj  s     vv!!!FF;%%affh/C./ffh-GDOOCMM*	'-./h-!$VHXGGHX&'CGGHSM" GGK GGFOGG$%	
r   c               r8   rS   r   r   r   r   r   r   0  s     ; ;$ ;r   c                	s    V P                   f   R # V P                  V P                   P                   V P                  V P                  R,          P                   R # )Nr   )r   r   r4   r   r>   r   r   r   ZPdfParser.del_root0  s@    == OODMM334OODIIh/99:r   c               r   )r   rk   rl   r
   zbytes | mmap.mmapr   r   r   r   r   r   7  s     	 	Y 	+< 	r   c                	s   \        V R 4      '       d   V P                  4       # \        V R4      '       d   V P                  4       #  \        P                  ! V P	                  4       ^ \        P
                  R7      #   \         d     R# i ; i)	getbuffergetvalue)Zaccessr   )r   r   r   r   ZfilenoZACCESS_READ
ValueError)rk   r   r   r   ZPdfParser.get_buf_from_file6  sj    1k"";;= Q
##::<yyQt7G7GHH s   4A; ;B
	B
c               r8   rS   r   r   r   r   r   r   B  s     "( "(t "(r   c                	s   V P                   f   Q h\        V P                   4      V n        V P                  V P                  ,
          V n        V P                  4        \        V P                  P                  R4      R JR4       V P                  R,          V n	        V P                  f   Q hV P                  P                  RR 4      V n
        \        V P                  V P                  4      4      V n        V P                  f   \        4       V n        M)\        V P                  V P                  4      4      V n        \        RV P                  9   R4       \        V P                  R,          R8H  R4       \        V P                  P                  R4      R JR	4       \        \        V P                  R,          \         4      R
4       V P                  R,          V n        V P"                  f   Q hV P                  V P"                  4      V n        V P'                  V P$                  4      V n        V P(                  R,          V n        R # )Nr   zRoot is missingr      Typez/Type missing in Rootr   z/Type in Root is not /Catalogr   z/Pages missing in Rootz+/Pages in Root is not an indirect reference:NNN)r   r    r   r   r   read_trailerr1   r   r   r   r   r   read_indirectr   r   rJ   r7   r   r   linearize_page_treer   r   r>   r   r   r   ZPdfParser.read_pdf_infoB  s   xx###"488}"22T5F5FF!!'*$68I	
 ))'2}}((())--gt<D..t}}=>	== 	DI 2 24== ABDIw$))35LMIIg*,.M	
 	IIMM(#4/1I	
 	tyy*,=>9	
 8,~~)))"00@--d.A.AB
 **Q-r   c               r   )r   r   z
int | Noner
   r7   r   r   r   r   r   r   f  s      Z ;L r   c                	s     \        \        V P                  P                  4       4      ^,           ^ 4      pVe   V^ 3V P                  VP
                  &   V#   \         d    \        ^^ 4      p L:i ; i)rc   )r7   Zmaxr   ri   r   r4   )r?   r   Z	references   && r   r   ZPdfParser.next_object_idf  sm    	0)#doo.B.B.D*E*I1MI 4:A;DOOI//0	  	0)!Q/I	0s   4A A10A1s   [][()<>{}/%]s$   [][()<>{}/%\000\011\012\014\015\040]s   [\000\011\012\014\015\040]s#   [\000\011\012\014\015\0400-9a-fA-F]s   *s   +s   [\000\011\014\040]*s   [\r\n]+s   trailers   <<(.*>>)s	   startxrefs   ([0-9]+)s   %%EOFs   $s	   <<(.*?>>)c               r8   rS   r   r   r   r   r   r     s     ? ?d ?r   c                	s   V P                   f   Q h\        V P                   4      R,
          pWP                  8  d   V P                  pV P                  P	                  V P                   V4      p\        VR JR4       TpV'       d@   TpV P                  P	                  V P                   VP                  4       ^,           4      pKG  V'       g   TpVf   Q hVP                  ^4      p\        VP                  ^4      4      V n	        V P                  V4      V n        \        4       V n        V P                  V P                  R7       RV P                  9   d%   V P                  V P                  R,          4       R # R # )N @  ztrailer end not foundxref_section_offsetr   )r   r    r   re_trailer_endsearchr1   startgroupr3   r   interpret_trailerr   rR   r   read_xref_tableread_prev_trailer)r?   Zsearch_start_offsetmZ
last_matchtrailer_datas   &    r   r   ZPdfParser.read_trailer  s.   xx###!$((me3!2!22"&"3"3&&txx1DEq}.EF
J##**488QWWY^DAA}}wwqz(+AGGAJ% 22<@#+1N1NOd'''""4#4#4W#=> (r   c               r   )r   r   r3   r
   r/   r   r   r   r   r   r     s     : :S :T :r   c                	s   V P                   f   Q hV P                  VR7      pV P                  P                  V P                   W"R,            4      p\	        VR JR4       Vf   Q hVP                  ^4      p\	        \        VP                  ^4      4      V8H  R4       V P                  V4      pRV9   d   V P                  VR,          4       R # R # )Nr   r   zprevious trailer not foundzGxref section offset in previous trailer doesn't match what was expectedr   )	r   r   re_trailer_prevr   r1   r   r3   r   r   )r?   r   Ztrailer_offsetr   r   r      &&    r   r   ZPdfParser.read_prev_trailer  s    xx###--BU-V  ''HH^u&<=
 	q}.JK}}wwqz
O22U	
 --l;l"""<#89 #r   s   /([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=r   r   s   >>c               r   )r   r   r   r
   zdict[bytes, Any]r   r   r   r   r   r     s      U 7G r   c           	     	s   / p^ p V P                   P                  W4      pV'       ga   V P                  P                  W4      p\        VRJ;'       d    VP	                  4       \        V4      8H  R\        WR 4      ,           4       MfV P                  VP                  ^4      4      p\        V\        4      '       g   Q hV P                  WP	                  4       4      w  rgWbV&   Vf   MTpK  \        RV9   ;'       d    \        VR,          \        4      R4       \        RV9   ;'       d    \        VR,          \        4      R4       V# )r    Nz+name not found in trailer, remaining data: r   z&/Size not in trailer or not an integerr   z1/Root not in trailer or not an indirect reference)re_namematchre_dict_endr1   endr    rv   rz   r   rJ   r   	get_valuer3   r7   )r{   r   Ztrailerr   r   rZ   r[   Zvalue_offsets   &&      r   r   ZPdfParser.interpret_trailer  s*   !!,7AOO)),?&TMBBaeeg\1B&BA<012
 $$QWWQZ0Cc5))))"%--eeg"FE CL#!FwDD:gg.>#D4	
 	wRR:gg.>@Q#R?	
 r   s   ([^#]*)(#([0-9a-fA-F]{2}))?c               r+   )r   rawr   as_textr-   r
   zstr | bytesr   r   r   r   r   r     s!     
 
 
 
+ 
r   c                	s   R pV P                   P                  V4       F  pVP                  ^4      '       dR   W4P                  ^4      \        P	                  VP                  ^4      P                  R4      4      ,           ,          pKk  W4P                  ^4      ,          pK  	  V'       d   VP                  R4      # \        V4      # )r   rC   zutf-8)re_hashes_in_namefinditerr   r}   fromhexr!   r   )r{   r   r   rr   r   s   &&&  r   rz   ZPdfParser.interpret_name  s    &&//4Awwqzz
Y%6%6qwwqz7H7H7T%UUU
"	 5
 ;;w'';r   s   null(?=s   true(?=s   false(?=s   ([-+]?[0-9]+)(?=s)   ([-+]?([0-9]+\.[0-9]*|[0-9]*\.[0-9]+))(?=s   \[s   ]s   <(s   *)>r   s   ([-+]?[0-9]+)s   R(?=s   obj(?=s	   endobj(?=r   s	   %[^\r\n]*s   )*s   stream\r?\ns   endstream(?=c          
     s,    V ^8  d   QhRRRRRRRRRR	/# )
r   rx   bytes | bytearray | mmap.mmapr   r3   expect_indirectr   max_nestingr
   ztuple[Any, int | None]r   r   r   r   r   r   *  sC     I" I"+I" I" 2	I"
 I" 
 I"r   c                	s   V^ 8X  d   R# V P                   P                  W4      pV'       d   VP                  4       pV P                  P                  W4      pV'       Ed   \	        \        VP                  ^4      4      ^ 8  R4       \	        \        VP                  ^4      4      ^ 8  R4       \	        VRJ ;'       g@    V\        \        VP                  ^4      4      \        VP                  ^4      4      4      8H  R4       V P                  WP                  4       V^,
          R7      w  rgVf   VR3# V P                  P                  W4      p\	        VRJR4       Vf   Q hWeP                  4       3# \	        V'       * R4       V P                  P                  W4      pV'       d   \	        \        VP                  ^4      4      ^ 8  R4       \	        \        VP                  ^4      4      ^ 8  R	4       \        \        VP                  ^4      4      \        VP                  ^4      4      4      VP                  4       3# V P                  P                  W4      pV'       Ed   VP                  4       p/ pV P                  P                  W4      pTp	V'       gp   V	f   Q hV P                  WV^,
          R7      w  rV	f   VR3# V P                  WV^,
          R7      w  rWV
&   V	f   VR3# V P                  P                  W4      pKw  VP                  4       p	V P                  P                  W4      pV'       d   VP                  R
4      pVe   \        V\
        4      '       g   RV R2p\!        V4      hWP                  4       VP                  4       V,            pV P"                  P                  WP                  4       V,           4      p\	        VRJR4       Vf   Q hVP                  4       p	\%        \'        V4      V4      V	3# \'        V4      V	3# V P(                  P                  W4      pV'       d   VP                  4       p. pV P*                  P                  W4      pTp	V'       gY   V	f   Q hV P                  WV^,
          R7      w  rVP-                  V4       V	f   VR3# V P*                  P                  W4      pK`  WP                  4       3# V P.                  P                  W4      pV'       d   RVP                  4       3# V P0                  P                  W4      pV'       d   RVP                  4       3# V P2                  P                  W4      pV'       d   RVP                  4       3# V P4                  P                  W4      pV'       d:   \7        V P9                  VP                  ^4      4      4      VP                  4       3# V P:                  P                  W4      pV'       d+   \        VP                  ^4      4      VP                  4       3# V P<                  P                  W4      pV'       d+   \?        VP                  ^4      4      VP                  4       3# V P@                  P                  W4      pV'       d   \C        R VP                  ^4       4       4      p\E        V4      ^,          ^8X  d   VP-                  \G        R4      4       \B        PI                  VPK                  R4      4      VP                  4       3# V PL                  P                  W4      pV'       d    V PO                  WP                  4       4      # R\Q        WV^ ,            4       2p\!        V4      h)r    Nz<indirect object definition: object ID must be greater than 0z;indirect object definition: generation must be non-negativez2indirect object definition different than expected)r  z(indirect object definition end not foundz$indirect object definition not foundz;indirect object reference: object ID must be greater than 0z:indirect object reference: generation must be non-negativer   z&bad or missing Length in stream dict (ru   zstream end not foundTFc              3  s6   "   T F  qR 9   g   K  Vx  K  	  R# 5i)s   0123456789abcdefABCDEFNr   r   r   r   r   Z&PdfParser.get_value.<locals>.<genexpr>  s      #%a.G)G:s   
r   rC   zunrecognized object: )NN))
re_commentr   r   re_indirect_def_startr1   r3   r   r7   r   re_indirect_def_endre_indirect_referencere_dict_startr   re_stream_startr   rJ   r$   re_stream_endr   r   re_array_startre_array_endr   re_nullre_truere_falser   rq   rz   re_intre_realr   re_string_hexr}   r    r   r  r!   re_string_litget_literal_stringrv   )r{   rx   r   r  r  r   rG   Zobject_offsetr   Zcurrent_offsetrZ   r[   Z
stream_lenre   Zstream_dataZresultsZ
hex_strings   &&&&&            r   r   ZPdfParser.get_value)  sS    !NN  .UUWF%%++D91"AGGAJ!#N #AGGAJ1$M #4' G G"$S_c!''!*oFGD	 %(MMeeg;? %2 %!F $t|#''--dBA"I = =557?"!G	
 %%++D9"AGGAJ!#M #AGGAJ1$L %S_c!''!*oFOO##D11UUWF%'F%%d3A)/N%111&)mmkAo '4 '# ")!4<'(+kAo )6 )% $s!)!4<'OO))$?UUWN##))$?A#ZZ	2
%Z
C-H-HB:,aPC(--"557QUUWz-AB%%++D%%'J2FG&q}6LM}$}!" +>NN6?N22$$T2UUWFG  &&t4A#N%111(+kAo )6 )% u%!)"D=($$**4@EEG##KKd+= KKd+= LLt,!%%'>!KKd+3--aggaj9:AEEGCCJJT*qwwqz?AEEG++KKd+$aeeg--##D1" #771:# J :"a'!!#d),$$Z%6%6z%BCQUUWLL##D1))$88%d4"+E&F%GHS!!r   sF   (\\[nrtbf()\\])|(\\[0-9]{1,3})|(\\(\r\n|\r|\n))|(\r\n|\r|\n)|(\()|(\))s   nr   s   rs   s   ts   	s   bs      fs   r   c               r+   )r   rx   r  r   r3   r
   ztuple[bytes, int]r   r   r   r   r   r     s$     " "0":="	"r   c                	s   ^ p\        4       pV P                  P                  W4       EF  pVP                  WVP	                  4        4       VP                  ^4      '       d;   VP                  V P                  VP                  ^4      ^,          ,          4       EMVP                  ^4      '       d3   VP                  \        VP                  ^4      R,          ^4      4       MVP                  ^4      '       d   MVP                  ^4      '       d   VP                  R4       MVP                  ^4      '       d   VP                  R4       V^,          pMUVP                  ^4      '       d?   V^ 8X  d   \        V4      VP                  4       3u # VP                  R4       V^,          pVP                  4       pEK  	  Rp\        V4      h)r    :rc   NNr   r   r   zunfinished literal string)r}   re_lit_str_tokenr  r   r   r   escaped_charsr   r3   r   r   r$   )r{   rx   r   Znesting_depthr   r   re   s   &&&    r   r  ZPdfParser.get_literal_string  sG    %%..t<AMM$	23wwqzzc//
1>?c!''!*R.!45e$d#" A% =!%%'11d#"UUWF% =& *S!!r   s   xrefs+   ([0-9]{10}) ([0-9]{5}) ([fn])( \r| \n|\r\n)c               s     V ^8  d   QhRRRR/# )r   r   r3   r
   r   r   r   r   r   r     s      3 3 r   c                	s   V P                   f   Q hRpV P                  P                  V P                   WP                  ,           4      p\	        VR JR4       Vf   Q hVP                  4       p V P                  P                  V P                   V4      pV'       g   \	        VR4        V# RpVP                  4       p\        VP                  ^4      4      p\        VP                  ^4      4      p\        WUV,           4       F  pV P                  P                  V P                   V4      p\	        VR JR4       Vf   Q hVP                  4       pVP                  ^4      R8H  pV'       d   Kk  \        VP                  ^4      4      p	\        VP                  ^4      4      V	3p
WpP                  9  g   K  WP                  V&   K  	  EK^  )NFzxref section start not foundTzxref subsection start not foundzxref entry not foundr  )r   re_xref_section_startr   r   r1   r   re_xref_subsection_startr3   r   r   re_xref_entryr   )r?   r   Zsubsection_foundr   r   Zfirst_objectZnum_objectsr   Zis_freer5   Z	new_entrys   &&         r   r   ZPdfParser.read_xref_table  s   xx### &&,,HH),=,==
 	q}.LM}}--33DHHfEA&$&G     $UUWFqwwqz?Laggaj/K<)CD&&,,TXXv>&q}6LM}$}''!*,w!$QWWQZJ!$QWWQZ* =I/-6* Er   c               r+   )r   r   r7   r  r3   r
   r   r   r   r   r   r   r     s"      !2  c r   c                	sR   V P                   V^ ,          ,          w  r4\        WA^,          8H  RV^,           RV^ ,           RV RV 24       V P                  f   Q hV P                  V P                  W0P                  ,           \        V!  VR7      ^ ,          pWPP                  V&   V# )r    zexpected to find generation z for object ID z) in xref table, instead found generation z at offset )r  r  )r   r1   r   r   r   r7   r   )r?   r   r  r   r5   r[   s   &&&   r   r   ZPdfParser.read_indirect  s    !__SV4a& *3q6(/#a& J//9l+fXO	

 xx###HH&&&-s3#	  

  $)C r   c               r   )r   nodezPdfDict | Noner
   zlist[IndirectReference]r   r   r   r   r   r   $  s      "	 r   c                	s    Ve   TMV P                   p\        VR,          R8H  R4       . pVR,           FV  pV P                  V4      pVR,          R8X  d   VP                  V4       K5  VP	                  V P                  VR7      4       KX  	  V# )Nr   r   z%/Type of page tree node is not /Pagess   Kidsr   )r  )r   r1   r   r   r   r   )r?   r  Z	page_noder   ZkidZ
kid_objectr   r   r   ZPdfParser.linearize_page_tree$  s     !,D$2E2E	g(*,S	
 W%%C++C0J'"g-S!T55:5FG & r   )r   r   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )NNNr    Zrbr   rH   )Nr   )r   )Kr%   r&   r'   r(   r)   rY   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zstaticmethodr   r   r   Z	delimiterZdelimiter_or_wsZ
whitespaceZwhitespace_or_hexZwhitespace_optionalZwhitespace_mandatoryZwhitespace_optional_no_nlZnewline_onlyZnewlinereZcompileZDOTALLr   r   r   r   Zre_whitespace_optionalr   r  r   r   r   r  rz   r  r  r  r  r  r  r  r  r  r
  r  r	  r  r  r  r   r  r   r  r  r  r  r  r   r   r   r*   r   r   r   ry   ry   o  sC   
/b
$$*:
4:0; 	 	"(H !I>O/J?$t+%, 7L',69RRGZZ
	
	 	 		
 	 	 	 	 		 
	 	 			N jj
	
	 	 		
 	 	 	 	 		 
	 			O?.:"  ZZ(;<jj
-	.
	 	G JJ2V;<M**069<OOPK < 

#BC
 
 jj,{:_LuTUGjj,{:_LuTUGzz-<NQVVWHZZ22_DuLF jj
7	8
	 	G ZZ 3f <=N::1E9:LJJf$'887BM JJ2V;<MJJ
	
	 	 		
 	 	 		 JJ
	
	 	 		
 	 	 		 **m+o=E ##m3g=FJ jj!4!FGOJJ..@5HM I" I"V zzRee 	e 	e	
 	e 	d 	d 	u 	D	5 	D	5 	D	5 	D	5 	D	5 	D	4 	D	4  	E
E!M& " "6 JJ':X'E'OP!zz
	
	 	 		
 	  JJNOMB" r   ry   )&Z
__future__r   r   r   r   r   r   r  r   r   Ztypingr   r   r   r   r   r   r#   r   r$   r1   r2   r7   rQ   rR   rq   r   r   ZTYPE_CHECKINGr   r	   r   Z	_DictBaser   r   r   r   ry   r   r   r   <module>r      s   "     	 	   - -
7*(*(* 	(* 	(	*
 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(*  	(!*" 	(#*$ 	(%*& 	('*( 	()** 	(+*, 	(-*. 	(/*0 	(1*2 	(3*4 	(5*6 	(7*8 	(9*: 	(;*< 	(=*> 	(?*@ 	(A*B 	(C*D 	(E*F 	(((((((S*ZJ	\ 	,
Z 
7. 7(9) 9
[ [|& &RDtCy D
 $$U3:%6%;<I$$I-i -`B B+ +*:C Cr   