
    Z?iM                    $   d Z dZddlZddlZddlZddlmZmZ ddlm	Z	 ddl
mZ ddlmZmZmZmZmZ dd	lmZmZmZ dd
lmZmZmZmZmZmZmZmZ ddlm Z m!Z!m"Z" ddlm#Z$ ddlm%Z& ddlm'Z( ddlm)Z* ddl+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< ddl=m>Z>m?Z?m@Z@mAZAmBZB ddlmCZCmDZD ej                  dk\  rddlmFZF nddlGmFZF  ej                  eI      ZJ ej                  d      ZL G d deMe   e8      ZN G d deOeef   e8      ZP G d deP      ZQded dfd!ZR G d" d#eP      ZS G d$ d%eS      ZT G d& d'eS      ZUd(ZV G d) d*eT      ZW	 d3d+ed,ee   d-edeXeMeX   eOeYeXf   f   d ee8eYeXeWf   fd.ZZ G d/ d0eQ      Z[ G d1 d2eQ      Z\y)4zMathieu Fenniakzbiziqe@mathieu.fenniak.net    N)IterableSequence)BytesIO)ceil)AnyCallableOptionalUnioncast   )PdfReaderProtocolPdfWriterProtocolXmpInformationProtocol)WHITESPACES
StreamTypedeprecation_no_replacementlogger_warningread_non_whitespaceread_until_regexread_until_whitespaceskip_over_comment)CheckboxRadioButtonAttributesFieldDictionaryAttributesOutlineFontFlag)FilterTypes)StreamAttributes)TypArguments)TypFitArguments)STREAM_TRUNCATED_PREMATURELYLimitReachedErrorPdfReadErrorPdfStreamError   )
BooleanObjectByteStringObjectFloatObjectIndirectObject
NameObject
NullObjectNumberObject	PdfObjectTextStringObjectis_null_or_none)Fit)extract_inline__ascii85_decode extract_inline__ascii_hex_decodeextract_inline__dct_decode!extract_inline__run_length_decodeextract_inline_default)read_hex_string_from_streamread_string_from_stream)      )Selfs   [+-]?(\d+)\s+(\d+)\s+R[^a-zA-Z]c                   "   e Zd Zdedd fdZ	 	 ddededeeee	e
f         dd fdZde
fdZdee   fdZd	edee   fd
Zd	edd fdZd	edefdZd	edefdZ	 ddedede	ef   ddfdZe	 ddedee   dede	ee	   ee
e	f   f   dd fd       Zy)ArrayObjectpdf_destreturnc                     t        d| j                  t               |d            }| D ]@  }t        |d      r!|j	                  |j                  |             0|j	                  |       B |S )Nr:   F	replicate)r   _reference_cloner:   hasattrappendr>   )selfr;   arrdatas       T/var/www/html/qr/venv/lib/python3.12/site-packages/pypdf/generic/_data_structures.pyr>   zArrayObject.replicated   sh     !!+-5A
  	!Dt[)

4>>(34

4 		!
 
    force_duplicateignore_fieldsc                    	 | j                   j                  |k(  r|s| S t        d| j	                  t               |d            }| D ]  }t        |t              r@|j	                  |j                  |||      ||      }|j                  |j                          Tt        |t              rat        |j                         x}t              rA|j	                  |j                  |d|      ||      }|j                  |j                          t        |d      r#|j                  |j                  |||             |j                  |        |S # t        $ r Y >w xY w)Clone object into pdf_dest.r:   T)rG   )rG   rH   clone)indirect_referencepdf	Exceptionr   r?   r:   
isinstanceStreamObjectrK   rA   r'   
get_objectr@   )rB   r;   rG   rH   rC   rD   dupresolveds           rE   rK   zArrayObject.clones   sD   	&&**h6 !!+-4!P
  	!D$-++JJx-H#
 

3112D.1jT__M^A^`l6m++NN8TQ^N_#
 

3112w'

4::hOP

4 %	!& 
3  		s   E 	EEc                 P    t        | j                  t        d | D              f      S )q
        Used to detect modified object.

        Returns:
            Hash considering type and value.

        c              3   <   K   | ]  }|j                           y wNhash_bin).0xs     rE   	<genexpr>z'ArrayObject.hash_bin.<locals>.<genexpr>   s     *FA1::<*Fs   )hash	__class__tuplerB   s    rE   rY   zArrayObject.hash_bin   s#     T^^U*F*F%FGHHrF   c                     t        |       S )z:Emulate DictionaryObject.items for a list (index, object).)	enumerater`   s    rE   itemszArrayObject.items   s    rF   lstc                    t        |t        t        t        f      r	 |S t        |t              r|g}|S t        |t
              r$|d   dk(  rt        |      g}|S t        |      g}|S t        |t              rt        |      g}|S |g}|S )Nr   /)
rO   listr_   setr+   strr(   r,   bytesr%   rB   rd   s     rE   _to_lstzArrayObject._to_lst   s    cD%-. 
 Y'%C 
 S!1v}!#' 
 (,-
 
	 U##C()C 
 %C
rF   c                 \    t        |       }|j                  | j                  |             |S )a  
        Allow extension by adding list or add one element only

        Args:
            lst: any list, tuples are extended the list.
            other types(numbers,...) will be appended.
            if str is passed it will be converted into TextStringObject
            or NameObject (if starting with "/")
            if bytes is passed it will be converted into ByteStringObject

        Returns:
            ArrayObject with all elements

        )r:   extendrl   )rB   rd   temps      rE   __add__zArrayObject.__add__   s(     4 DLL%&rF   c                 F    | j                  | j                  |             | S )a  
         Allow extension by adding list or add one element only

        Args:
            lst: any list, tuples are extended the list.
            other types(numbers,...) will be appended.
            if str is passed it will be converted into TextStringObject
            or NameObject (if starting with "/")
            if bytes is passed it will be converted into ByteStringObject

        )rn   rl   rk   s     rE   __iadd__zArrayObject.__iadd__   s     	DLL%&rF   c                 z    | j                  |      D ]  }	 | j                  |      }| |=  | S # t        $ r Y 'w xY w)zAllow to remove items)rl   index
ValueError)rB   rd   r[   rt   s       rE   __isub__zArrayObject.__isub__   sN    c" 	A

1K	   s   .	::Nstreamencryption_keyc                     |t        dd       |j                  d       | D ]$  }|j                  d       |j                  |       & |j                  d       y )N/the encryption_key parameter of write_to_stream5.0.0   [    s    ])r   writewrite_to_stream)rB   rw   rx   rD   s       rE   r   zArrayObject.write_to_stream   s\     %&A7 	T 	)DLL  (	) 	UrF   rM   forced_encodingc                    t               }| j                  d      }|dk7  rt        d      	 | j                  d      }|j                         r"| j                  d      }|j                         r"|dk(  r	 |S |dk(  r| j	                  dd       t        |        o| j	                  dd       | j                  d      }|dk(  r	 |S | j	                  dd       |j                  t        | ||             )Nr#   r|   zCould not read arrayrF      %   ])r:   readr!   isspaceseekr   rA   read_object)rw   rM   r   rC   tmptok
peek_aheads          rE   read_from_streamzArrayObject.read_from_stream   s     mkk!n$;566++a.C++-kk!n ++-cz 
 d{B"!&)KKAQJT! 
 KKAJJ{63@A% rF   F rW   )__name__
__module____qualname__r   r>   boolr	   r   r
   ri   intrK   rY   r   r   rc   rg   rl   rp   r8   rr   rv   r   rj   r   staticmethodr   dictr   r   rF   rE   r:   r:   c   s\   # 
$ !&=?	### #  sCx 9:	#
 
#JI# Ix} 3 49 "3 = &C D C D  MQ 27c58H2I	  HL'( tS$s)T#s(^CD 
	 rF   r:   c                      e Zd Zdedd fdZ	 	 d dededeeee	e
f         dd fdZdd dededeeee	e
f         deee
e
f      dd	fd
Zde
fdZdedefdZd!de	dedefdZdededefdZd!dedee   defdZdedefdZedee   fd       Z	 d!deded	e	ef   dd	fdZede
de
dee
   dede
f
d       Z edededefd       Z!e"	 d!dedee   ded	e	ee	   e#e
e	f   f   dd fd       Z$y	)"DictionaryObjectr;   r<   c                     t        d| j                  | j                         |d            }| j                         D ]6  \  }}t	        |d      r|j                  |      n|||j                  |      <   8 |S )Nr   Fr>   )r   r?   r^   rc   r@   r>   )rB   r;   d__kvs        rE   r>   zDictionaryObject.replicate  sv     !!$.."2HeD
 JJL 	DAq)0K)@H%a H%&	 
rF   rG   rH   c                 4   	 | j                   j                  |k(  r|s| S t               }t	        d| j                  | j                         ||            }|g }t        |j                               dk(  r|j                  | ||||       |S # t        $ r Y ww xY w)rJ   r   r   )
rL   rM   rN   rh   r   r?   r^   lenkeys_clonerB   r;   rG   rH   visitedr   s         rE   rK   zDictionaryObject.clone  s    	&&**h6 ),!!$.."2HoN
  Msxxz?aJJtXwO
  		s   B 	BBsrcr   Nc           
      &   J t              d}|t              k  rQt        |   t              r*t	        t        |         dk  r|= |= >|xx   dz  cc<   |dz  }|t              k  rQt        fddD              rt              dD ]  }|D ]  }g }	|v s|| vst        j                  |      t              s0t        |   t              sDj                  dd      Zt	        t        |         j                  dd      7j                  dd      t	        t        |         j                  dd      k(  st	        d|         }
| }|
t	        d|
j                  |
j                         ||            }|j                  H|j                  j                  }|j                  j                  }||f|v rd}
n_|j                  ||f       |	j!                  |
|f       |J |j                  |t#        |      <   |}	 |
k(  rd}
nt	        d|
|         }
|
|	D ]  \  }}|j'                  ||||          j)                         D ]  \  }}|vst        |t*              rSt-        |d	      sd|_        |j/                  ||      }|j                  J |j                  | |j/                  |      <   n|| vsst-        |d
      r|j/                  ||      n|| t#        |      <    y# t$        $ r d}
Y w xY w)z
        Update the object from src.

        Args:
            src: "DictionaryObject":
            pdf_dest:
            force_duplicate:
            ignore_fields:

        Nr   r#   c              3     K   | ]  }|vxr |v xr t        j                  |      t              xr t        |   t              xrs j	                  d d      du xs] t        t        |         j	                  d d      du xs6 j	                  d d      t        t        |         j	                  d d      k(    yw)/TypeN)rO   raw_getr'   r   getr   )rZ   fieldrH   r   s     rE   r\   z*DictionaryObject._clone.<locals>.<genexpr>W  s      
  & 		3;;u-~>	 3u:'78	
 &$. I(#e*599'4HDPI777D)(#e*599'4HI	
s   B?C)/Next/Prev/N/V))r   r   )r   r   r   r   rL   rK   )rg   r   rO   r   r   anyr   r'   r   r   r?   r^   rL   idnum
generationaddrA   r(   rN   r   rc   rP   r@   rK   )rB   r   r;   rG   rH   r   r[   rd   r   objscur_objprev_objclonr   r   scr   vvs    `  `              rE   r   zDictionaryObject._clone7  s`   ( (((]+#m$$-*C0]1-.!3%a(%a(a A% FA #m$$  
 8
 
 !/M9 2 1ADSTM&s{{1~~F&s1v/?@  GGGT2:#$4c!f=AA'4PX"www5#$4c!f=AA'4P Q ?C.A? @D%1#' 2 ' 8 8$+$5$5$7?!"$D  $66B(,(?(?(E(E-1-D-D-O-O
$):#6'#A.2G$) 'UJ,? @ KK$8#+#77#76:6M6MHZ]3'+H/#*c>.2G.23Ewqz.RG/ &14 %) DAqHH !8_mW]12h IIK 	DAq%a."1&:;/3,?MJB00<<<.0.C.CD*+d] #1g. /=I A'	 $- /*./s   LLLc                 l    t        | j                  t        d | j                         D              f      S )rU   c              3   F   K   | ]  \  }}||j                         f  y wrW   rX   )rZ   r   r   s      rE   r\   z,DictionaryObject.hash_bin.<locals>.<genexpr>  s     #O$!QQ

$5#Os   !)r]   r^   r_   rc   r`   s    rE   rY   zDictionaryObject.hash_bin  s.     ^^U#O$**,#OPQ
 	
rF   keyc                 .    t         j                  | |      S rW   )r   __getitem__rB   r   s     rE   r   zDictionaryObject.raw_get  s    c**rF   defaultc                     || v r| |   S 	 d| vr|S t        d      # t         $ r0 t        d| d   j                               j                  ||      cY S w xY w)a>  
        Returns the value of a key or from the parent if not found.
        If not found returns default.

        Args:
            key: string identifying the field to return

            default: default value to return

        Returns:
            Current key or inherited one, otherwise default value.

        /ParentzNot presentr   )KeyErrorr   rQ   get_inherited)rB   r   r   s      rE   r   zDictionaryObject.get_inherited  sn     $;9	$=)) 	*DO,F,F,HIWWW 	s     6AAvaluec                     t        |t              st        d      t        |t              st        d      t        j	                  | ||      S NzKey must be a PdfObjectzValue must be a PdfObject)rO   r+   ru   r   __setitem__rB   r   r   s      rE   r   zDictionaryObject.__setitem__  sC    #y)677%+899c511rF   c                     t        |t              st        d      t        |t              st        d      t        j	                  | ||      S r   )rO   r+   ru   r   
setdefaultr   s      rE   r   zDictionaryObject.setdefault  sA    #y)677%+899tS%00rF   c                 J    t         j                  | |      j                         S rW   )r   r   rQ   r   s     rE   r   zDictionaryObject.__getitem__  s    c*5577rF   c                     ddl m} | j                  dd      }t        |      ry|J d       |j	                         } ||      S )u  
        Retrieve XMP (Extensible Metadata Platform) data relevant to this
        object, if available.

        See Table 347 — Additional entries in a metadata stream dictionary.

        Returns:
          Returns a :class:`~pypdf.xmp.XmpInformation` instance
          that can be used to access XMP metadata from the document. Can also
          return None if no metadata was found on the document root.

        r   )XmpInformationz	/MetadataNmypy)xmpr   r   r-   rQ   )rB   r   metadatas      rE   xmp_metadatazDictionaryObject.xmp_metadata  sL     	)88K.8$#+V+#&&(h''rF   rw   rx   c                 \   |t        dd       |j                  d       | j                         D ]i  \  }}t        |      dkD  r|d   dk(  r	|d   dk(  r%|j	                  ||       |j                  d       |j	                  |       |j                  d	       k |j                  d
       y )Nrz   r{      <<
r   r#   %r   r}      
   >>)r   r~   rc   r   r   )rB   rw   rx   r   r   s        rE   r   z DictionaryObject.write_to_stream  s     %&A7 	W**, 	 JC3x!|A##b'S.7LL!!&)LL	  	UrF   position_beforeposition_endgenerationsrM   c                     |}|D ]L  }|j                   |   }|j                         D cg c]  }||cxk  r|k  sn n| }	}|	sAt        |g|	 }N |S c c}w rW   )xrefvaluesmin)
clsr   r   r   rM   outr   locationr[   r   s
             rE   _get_next_object_positionz*DictionaryObject._get_next_object_position	  sk     % 	(Jxx
+H!)!2ZAo6Y\6YaZFZ#''		(
 
 [s
   AAc                 `   | j                  |j                         dt        |j                        |      dz
  }|j                         }|j	                  ||j                         z
        }|j                  d      }|dk  rt        d| d      |j                  ||z   dz          |d |dz
   S )	Nl        )r   r   r   rM   r#   	   endstreamr   z6Unable to find 'endstream' marker for obj starting at .	   )r   tellrg   r   r   findr!   r   )r   rw   rM   object_positioncurrent_position
read_valueendstream_positions          rE   _read_unsized_from_streamz*DictionaryObject._read_unsized_from_stream  s     77"KKMTRURZRZ^ad 8 
 ";;=[[6;;=!@A
'__\:!HIYHZZ[\  	$'99A=>2.233rF   r   c           	      
   | j                  d      }|dk7  r&t        dt        | j                                d      i }	 t	        |       }|dk(  r|dk(  r| j                  dd       t        |        5|st        t              |d	k(  r| j                  d       n| j                  dd       	 	 t        | |      }t        |t              rnt        |t              st        d
|      	 t	        |       }| j                  dd       t        | ||      }|j-                  |      s|||<   nHdt        | j                                d| }
||j                  rt        |
      t        |
t                7| j                         }t	        |       }|dk(  r| j                  d      dk(  r| j                  d      }|dk(  r| j                  d      }|dk(  r|dvrt        d      |dk(  r&| j                  d      dk7  r| j                  dd       t.        j0                  |vr_||j                  rt        d      t        d| j                          t                t3        d      |t        t.        j0                        <   |t.        j0                     }t        |t4              r<| j                         }|J d       |j7                  |      }| j                  |d       |d}| j                         }|dk\  r/ddlm} ||kD  rt%        d| d      | j                  |      |d<   n"t=        | t?        j@                  d            |d<   t	        |       }| j                  d      }||z   dk7  r| j                         }| j                  dd       | j                  d       }|dk(  r|d   d d |d<   n|H|j                  s<| j                  |d       t(        jC                  | |      |d<   | j                         }nP| j                  |d       t        d!t        | j                                d"|d#|d$      | j                  |d       d|v rtD        jG                  |      S t)               }	|	j+                  |       |	S # t        $ r8}||j                  r t        |j                         t                Y d }~d }~ww xY w# t"        t$        f$ r}t        |j                               d }~wt&        $ rl}|%|j                  rt        |j                               t        |j                         t                t)               }	|	j+                  |       |	cY d }~S d }~ww xY w)%Nr      <<zDictionary read error at byte z: stream must begin with '<<'    r   r   r#      >z)Expecting a NameObject for key but found z+Multiple definitions in dictionary at byte z	 for key    s   s   treamr}   )r      z)Stream data must be followed by a newliner   r   zStream length not definedzStream length not defined @pos=r   r   )MAX_DECLARED_STREAM_LENGTHzDeclared stream length of z  exceeds maximum allowed length.__streamdata__r      ir   z7Unable to find 'endstream' marker after stream at byte z (nd='z', end='z').)$r   r!   hexr   r   r   r   r"   r   r   rO   r)   r(   strictr   __repr__r   RecursionErrorr    rN   r   updater   SALENGTHr*   r'   rQ   filtersr   r   recompiler   rP   initialize_from_dictionary)rw   rM   r   r   rD   r   r   excr   retvalmsgposr   eollengthtpstartr   endstreamends                        rE   r   z!DictionaryObject.read_from_stream(  s	    kk!n%<0V[[]1C0D E. .   "%f-Cg~d{B"!&)$%ABBd{AKKA%fc2C!#z2%c:6*GwO  7 *&1B"#FCA 88C=!S	 B6;;=)*)C5:  ?szz&s++sH-i l kkm'9Q83++a.C +kk!n +.($%PQQe|A% 7B"yy$?szz()DEE5fkkm_Ex /;2.>Z		*+"))_F&.1KKM../Aq!~[[]F{@66+.HPp,qrr)/V)<%&)9BJJ|4*%& $F+A{{1~HH- kkmC#kk!n,&-12B-CCR-HD)*_SZZKK*-=-W-WX^`c-dD)* ++-CKKQ'&Qv{{}-.fXLsT 
 KKQt#::4@@!#dI $ 3::"3<<>8<	 #$56 3"3<<>22 ?szz&s||~66s||~x8)+d#sU   0R R ++S
 	S-S<S
 SS
 
U*S22U*>A!U%U*%U*r   rW   )%r   r   r   r   r>   r   r	   r   r
   ri   r   rK   rh   r_   r   rY   r   r   r   r   r   r+   r   propertyr   r   r   rj   r   classmethodrg   r   r   r   r   r   r   r   rF   rE   r   r     sj   # 
" !&=?	#   sCx 9:	
 
0oo $o 	o
  sCx 9:o U38_%o 
ob

# 

+3 +3 + s c 22s 23 23 21c 1(3- 13 18s 8y 8 (h'=> ( (. MQ 27c58H2I	" 	"%	58	GKCy	Wh			 	 4#4*;4	4 4$  HLHH'(H tS$s)T#s(^CDH 
	H HrF   r   c                      e Zd Zddee   ddfdZdefdZdefdZ	de
e   fdZded	eddfd
Zdeded f   deddfdZdeded f   deddfdZ	 ddeded	edeedef      def
dZdededededdf
dZdeddfdZddZddZy)
TreeObjectNdctr<   c                 V    t         j                  |        |r| j                  |       y y rW   )r   __init__r   )rB   r  s     rE   r  zTreeObject.__init__  s$    !!$'KK rF   c                 
    d| v S )N/Firstr   r`   s    rE   has_childrenzTreeObject.has_children  s    4rF   c                 "    | j                         S rW   )childrenr`   s    rE   __iter__zTreeObject.__iter__  s    }}rF   c              #     K   | j                         sy | t        d         }| t        d         }|j                         }t               }	 t	        |      }||v rt        d| t               y |j                  |       | ||k(  ry |j                  t        d            }t        |      ry |j                         }uw)Nr  /Lastz(Detected cycle in outline structure for r   )
r  r(   rQ   rh   idr   r   r   r   r-   )rB   	child_reflastchildr   child_ids         rE   r  zTreeObject.children  s       "H-.	Jw'($$&E%yH7"!I%QS[\KK!K}		*W"56Iy)((*E s   B>C r  rM   c                 *    | j                  |d |       y rW   )insert_child)rB   r  rM   s      rE   	add_childzTreeObject.add_child  s    %s+rF   parentnc                 ,   t        |      ry |J d       t        d|j                               }d|v rat        t	        dt        t
        |t        d               |z               |t        d      <   | j                  |j                  dd       |       y y )Nr   r  /Countr   r   )	r-   r   rQ   r*   maxr   r(   inc_parent_counter_defaultr   )rB   r#  r$  s      rE   r(  z%TreeObject.inc_parent_counter_default  s     6"!)6)!lF$5$5$78v+7AtC
8(<!=>BC,F:h'( ++FJJy$,GK	 rF   c                 x   t        |      ry |J d       t        d|j                               }|j                  dd      dk(  }t        t        |j                  dd            }|dk  rt        |      }t        ||z   |rdndz        |t        d      <   |sy | j                  |j                  d	d       |       y )
Nr   r  z
/%is_open%Tr&  r   r#   r   r   )	r-   r   rQ   r   r   absr*   r(   inc_parent_counter_outline)rB   r#  r$  opnr   s        rE   r+  z%TreeObject.inc_parent_counter_outline  s     6"!)6)!lF$5$5$78jjt,4fjj1-.q5AA'3QUCqR4P'Qz(#$''

9d(CQGrF   beforeinc_parent_counter.c                    || j                   }|j                         }|j                  }d| vrt|| t        d      <   t	        d      | t        d      <   || t        d      <   | j                  |t        d      <    || |j                  dd             d|v r|d= d|v r|d= |S t        d	| d         }|j                  |k7  rd|v rt        d
|d         }nxt        d
|      |t        d      <   |j                  |t        d      <   | j                  |t        d      <   d|v r|d= || t        d      <    || |j                  dd             |S |j                  |k7  r	 t        |d   t              sJ ||d   t        d      <   |d   |t        d      <   ||t        d      <   ||t        d      <   | j                  |t        d      <    || |j                  dd             |S # t        $ r |d= Y ]w xY w)Nr  r   r&  r  r   r#   r   r   r   r  )
r(  rQ   rL   r(   r*   r   r   rO   r   rN   )rB   r  r-  rM   r.  	child_objprevs          rE   r!  zTreeObject.insert_child  s     %!%!@!@$$&	(( 4).DH%&)5aDH%&(-DG$%/3/F/FIj+,tY]]8Q%?@)#g&)#g&L&W6%%/$L$w-8,0u,EZ()151H1H	*W-.373J3J	*Y/0i'!'*,1Z()"4x)CD %%/	#d7m-=>>>16DM*W-.-1']Ij)* *.	*W%&$)Z !+/+B+B	*Y'(4x!;<  	#'"	#s   7G$ $G32G3r1  prev_refcurr  c                 L   |j                  t        d      d      }||rQ|j                         }|t        d      = || t        d      <   t        | t        d         dz
        | t        d      <   yt        d      | t        d      <   | t        d      = t        d      | v r| t        d      = yy|r-|j                         }||t        d      <   ||t        d      <   n!||k(  sJ |t        d      = || t        d      <   t        | t        d         dz
        | t        d      <   y)	z
        Adjust the pointers of the linked list and tree node count.

        Args:
            prev:
            prev_ref:
            cur:
            last:

        r   Nr   r  r&  r#   r   r  )r   r(   rQ   r*   )rB   r1  r2  r3  r  next_refnext_objs          rE   _remove_node_from_treez!TreeObject._remove_node_from_tree+  s1    77:g.5<#..0Z01-5Z)*-9H-.2.Z)* .:!_Z)*H-.g&$.Z01 / #..008G,-,4Z() d{"{G,-,4Z())5d:h;O6PST6T)UDH%&rF   c                    |j                         }|j                  }t        d      |vrt        d      |t        d         | k7  rt        d      d}d }d }| t        d         }|j                         }| t        d         }|j                         }	|S||k(  r| j	                  ||||	       d}n7|}|}t        d      |v r|t        d         }|j                         }nd }d }|S|st        d	      t        |       y )
Nr   /Removed child does not appear to be a tree itemz*Removed child is not a member of this treeFr  r  Tr   z"Removal couldn't find item in tree)rQ   rL   r(   ru   r7  _reset_node_tree_relationship)
rB   r  r0  foundr2  r1  cur_refr3  last_refr  s
             rE   remove_childzTreeObject.remove_childV  s$   $$&	,,i 	1NOOZ	*+t3IJJ!%j&:!;(/(:(:(<
7+,""$oi++D(CF HD'"c)j12((* o  ABB%i0rF   c                 p    t        d      | vrt        d      t        d| d         j                  |        y)z)Remove the object from the tree it is in.r   r9  r  N)r(   ru   r   r>  r`   s    rE   remove_from_treezTreeObject.remove_from_tree{  s4    i ,NOO\4	?+88>rF   c                     | D ]  }|j                         }t        |        t        d      | v r| t        d      = t        d      | v r| t        d      = t        d      | v r| t        d      = y y )Nr&  r  r  )rQ   r:  r(   )rB   r  r0  s      rE   
empty_treezTreeObject.empty_tree  s|     	5E((*I))4	5 h4'Z)*h4'Z)*g$&Z() 'rF   rW   r<   N)r   r   r   r	   r   r  r   r  r   r  r   r  r   r"  r
   r'   r   r(  r+  r   r!  r7  r>  r@  rB  r   rF   rE   r  r    sT   H%56 $ 
 d  # +(3- +0,s ,): ,t ,LD.,>?LDGL	LHD.,>?HDGH	H, <@00 0 	0
 %Xc3h%780 
0d)V)V#&)V-0)V8;)V	)VV#1# #1$ #1J?
*rF   r  r0  r<   c                     | t        d      = t        d      | v r| t        d      = t        d      | v r| t        d      = yy)z
    Call this after a node has been removed from a tree.

    This resets the nodes attributes in respect to that tree.

    Args:
        child_obj:

    r   r   r   N)r(   )r0  s    rE   r:  r:    sJ     	*Y'('i'j)*'i'j)* (rF   c                   8    e Zd ZddZdedd fdZdedededee	e
eef         d	eeeef      ddf fd
Zdef fdZdefdZdeddfdZdef fdZ	 ddede
deef   ddfdZedeeef   de
d   fd       ZddeddfdZdde
eeef   df   defdZ xZS )rP   r<   Nc                      d| _         d | _        y NrF   )_datadecoded_selfr`   s    rE   r  zStreamObject.__init__  s    
;?rF   r;   c                    t        d| j                  | j                         |d            }| j                  |_        	 | j                  }|d | _        n t        d|j                  |            | _        | j                         D ]6  \  }}t        |d      r|j                  |      n|||j                  |      <   8 |S # t        $ r Y Vw xY w)NrP   FDecodedStreamObjectr>   )	r   r?   r^   rH  rI  r>   rN   rc   r@   rB   r;   r   rI  r   r   s         rE   r>   zStreamObject.replicate  s     !!$.."2HeD
 JJ			,,L#$(!$()<+A+A(+K%!
 JJL 	DAq)0K)@H%a H%&	 
  		s   6B? ?	C
Cr   rG   rH   r   c                    t        d|      j                  | _        	 t        d|      j                  }|d| _        n"t        d|j                  |||            | _        t
        |   |||||       y# t        $ r Y w xY w)
        Update the object from src.

        Args:
            src:
            pdf_dest:
            force_duplicate:
            ignore_fields:

        rP   NrK  )r   rH  rI  rK   rN   superr   )rB   r   r;   rG   rH   r   rI  r^   s          rE   r   zStreamObject._clone  s    $ .#.44

	4AAL#$(!$() &&x-P%! 	sHo}gN  		s   AA4 4	B ?B c                 J    t        t        | 	         | j                  f      S )rU   )r]   rO  rY   rH  )rB   r^   s    rE   rY   zStreamObject.hash_bin  s!     UW%'455rF   c                     | j                   S rW   rH  r`   s    rE   get_datazStreamObject.get_data  s    zzrF   rD   c                     || _         y rW   rR  )rB   rD   s     rE   set_datazStreamObject.set_data  s	    
rF   c                 J    t         |          }|| j                         z  }|S rW   )rO  hash_value_datarS  rB   rD   r^   s     rE   rW  zStreamObject.hash_value_data  s%    w&(rF   rw   rx   c                 X   |t        dd       t        t        | j                              | t	        t
        j                        <   t        j                  | |       | t
        j                  = |j                  d       |j                  | j                         |j                  d       y )Nrz   r{   s   
stream
s
   
endstream)
r   r*   r   rH  r(   r   r   r   r   r~   )rB   rw   rx   s      rE   r   zStreamObject.write_to_stream  s|     %&A7 '33tzz?&CZ		"#((v6O]#TZZ ^$rF   )EncodedStreamObjectrK  c                     t         j                  | v rt               }n
t               }| d   |_        | d= t         j
                  | v r| t         j
                  = |j                  |        |S )Nr   )r   FILTERrZ  rK  rH  r   r   )rD   r  s     rE   r   z'StreamObject.initialize_from_dictionary  s^    
 99(*F(*F,-!"99RYYdrF   levelrZ  c           	         ddl m} t        j                  | v r| t        j                     }t	        |t
              rct        t        t        j                        g|      }	 t        t               g| j                  t        j                  t                           }n{t        t        t        j                        |g      }t        t               | j                  t        j                  t                     g      }nt        t        j                        }d }t               }|j                  |        ||t        t        j                        <   |||t        t        j                        <   |j                  | j                   |      |_        |S # t        $ r> t        t               | j                  t        j                  t                     g      }Y w xY w)Nr   FlateDecode)r   r`  r   r\  rO   r:   r(   FTFLATE_DECODEr)   r   DECODE_PARMS	TypeErrorrZ  r   encoderH  )rB   r]  r`  fparamsr  s         rE   flate_encodezStreamObject.flate_encode  sW   )99RYYA![)BOO!< Aq AB(#Q+-(PQF  BOO!<a @A$\488BOOZ\#JK 2??+AF$&d()z"))$%28F:boo./"))$**e<' ! (#txx'OPFs   "<F AGGpillow_parametersc                     ddl m} | j                  dd      dk7  r 	 | j                   d}t        |t                || |      \  }}}|y|S # t        $ r | j                          d}Y @w xY w)	a  
        Try to decode the stream object as an image

        Args:
            pillow_parameters: parameters provided to Pillow Image.save() method,
                cf. <https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.save>

        Returns:
            a PIL image if proper decoding has been found
        Raises:
            Exception: Errors during decoding will be reported.
                It is recommended to catch exceptions to prevent
                stops in your program.

        r#   )_xobj_to_imagez/Subtype z/Imagez does not seem to be an Imagez$ object does not seem to be an ImageN)_image_xobjectrk  r   rL   AttributeErrorr   r   r   )rB   ri  rk  r  	extension_imgs          rE   decode_as_imagezStreamObject.decode_as_image1  s      	388J#x/O0011NO 3)*41BC	1c
 " O))MNOs   A A-,A-rC  rW   )r   )r   r   r   r  r   r>   r   r   r	   r   r
   ri   r   rh   r_   r   rY   rj   rS  rU  rW  r   r   r   r   r   r   rh  rr  __classcell__r^   s   @rE   rP   rP     sZ   @# 
2OO $O 	O
  sCx 9:O U38_%O 
O@	6# 	6% U t   MQ% %27c58H2I%	% 38n	;	< # /D @tCH~t7K1L X[ rF   rP   c                       e Zd Zy)rK  N)r   r   r   r   rF   rE   rK  rK  O  s    rF   rK  c                   <     e Zd ZddZdefdZdeddf fdZ xZS )rZ  r<   Nc                     d | _         y rW   )rI  r`   s    rE   r  zEncodedStreamObject.__init__T  s
    ;?rF   c                 h   ddl m} | j                  | j                  j                         S t	               }|j                   ||              | j                         D ]<  \  }}|t        j                  t        j                  t        j                  fvs8|||<   > || _        |j                         S )Nr   )decode_stream_data)r   ry  rI  rS  rK  rU  rc   r   r   r\  rc  )rB   ry  decodedr   r   s        rE   rS  zEncodedStreamObject.get_dataX  s    0($$--// &'+D12**, 	%JC299biiAA$	% $!!rF   rD   c                    ddl m} | j                  t        j                  d      t
        j                  t
        j                  gfv rt        |t              st        d      | j                  | j                          | j                  J d       | j                  j                  |       t        | 1  |j                  |             y t        d      )Nr   r_  rl  zData must be bytesr   zJStreams encoded with a filter different from FlateDecode are not supported)r   r`  r   r   r\  ra  rb  rO   rj   rd  rI  rS  rU  rO  re  r!   )rB   rD   r`  r^   s      rE   rU  zEncodedStreamObject.set_datai  s    )88BIIr"r8I&JJdE* 455  ($$08&80&&t,G[//56\ rF   rC  )r   r   r   r  rj   rS  rU  rs  rt  s   @rE   rZ  rZ  S  s-    @"% ""U t  rF   rZ  i'  c                       e Zd ZdZ	 ddedededeee   ee	ef   f   ddf fdZ
dedd fd	Z	 	 dded
edeeeee	f         dd fdZdeded
edeeeee	f         deee	e	f      ddf fdZdeddfdZdedeeef   fdZdefdZdeddf fdZedeeeef      fd       Zej:                  deeeef      ddfd       ZddZ	 ddededeef   ddf fdZ xZ S )ContentStreama  
    In order to be fast, this data structure can contain either:

    * raw data in ._data
    * parsed stream operations in ._operations.

    At any time, ContentStream object can either have both of those fields defined,
    or one field defined and the other set to None.

    These fields are "rebuilt" lazily, when accessed:

    * when .get_data() is called, if ._data is None, it is rebuilt from ._operations.
    * when .operations is called, if ._operations is None, it is rebuilt from ._data.

    Conversely, these fields can be invalidated:

    * when .set_data() is called, ._operations is set to None.
    * when .operations is set, ._data is set to None.
    Nrw   rM   r   r<   c                    || _         g | _        |t        |   d       || _        y |j	                         }t        |t              rddlm} t        |      x}t        kD  rt        d| dt         d      t               }d}|D ]  }|j	                         }	t        |	t              r$t        |	t              s(t        dt!        |	      j"                   dt"               n:|	j%                         }
|t        |
      z  }||kD  rt        d	| d| d
      ||
z  }t        |      dk(  s	|d   dk7  s|dz  }|dz  } t        |   t'        |             || _        y |j%                         }|J t        |   |       || _        y )NrF   r   )$MAX_ARRAY_BASED_STREAM_OUTPUT_LENGTHzArray-based stream has z > z
 elements.zExpected StreamObject, got z instead. Data might be wrong.z Array-based stream has at least z output bytes.r   r   r#   )rM   _operationsrO  rU  rQ   rO   r:   pypdf.filtersr  r   CONTENT_STREAM_ARRAY_MAX_LENGTHr    	bytearrayr)   rP   r   typer   rS  rj   r   )rB   rw   rM   r   r  stream_lengthrD   r  r   
s_resolvednew_datastream_datar^   s               rE   r  zContentStream.__init__  s    46 >GS!R  /O &&(F&+.N%([0M4SS+1-DcCddno  !{ &A!"J!*j9 %j,? '9$z:J:S:S9TTrs$
 $.#6#6#8#h-/!$HH"3"B6(##G"H!X#  (4yA~bU):!/&0  t-
  / %oo/"... -.rF   r;   c           	         t        d| j                  | j                  d d       |d            }| j                  |_        	 | j                  }|d | _        n t        d|j                  |            | _        | j                         D ]6  \  }}t        |d      r|j                  |      n|||j                  |      <   8 |S # t        $ r Y Vw xY w)Nr}  FrK  r>   )r   r?   r^   rH  rI  r>   rN   rc   r@   rU  rM   rg   r  r   rL  s         rE   r>   zContentStream.replicate  s     !!$..t"<hN
 JJ			,,L#$(!$()<+A+A(+K%!
 JJL 	DAq)0K)@H%a H%&	 
  		s    6C 	CCrG   rH   c           	          	 | j                   j                  |k(  r|s| S t               }t	        d| j                  | j                  dd      ||            }|g }|j                  | ||||       |S # t        $ r Y ]w xY w)z
        Clone object into pdf_dest.

        Args:
            pdf_dest:
            force_duplicate:
            ignore_fields:

        Returns:
            The cloned ContentStream

        r}  N)rL   rM   rN   rh   r   r?   r^   r   r   s         rE   rK   zContentStream.clone  s    $	&&**h6 ),!!tT*Ho
  M

4?M7K
  		s   A1 1	A=<A=r   r   c                     t        d|      }t        | 	  |j                         || _        t        |j                        | _        |j                  | _        y)rN  r}  N)r   rO  rU  rH  rM   rg   r  r   )rB   r   r;   rG   rH   r   src_csr^   s          rE   r   zContentStream._clone  sJ    $ os+& 2 23%55rF   c                    |j                  dd       g }	 t        |      }|dv ry |j                  dd       |j                         s|dv rut        |t        j
                        }|dk(  r6|g k(  sJ | j                  |      }| j                  j                  |df       nf| j                  j                  ||f       g }nF|dk(  r|d	vr=|j                  d      }|d	vrn&|j                  t        |d | j                               )
Nr   )rF   r   r   r#   )   '   "   BI   INLINE IMAGEr   )r   r   rF   )r   r   isalphar   r(   delimiter_pattern_read_inline_imager  rA   r   r   r   )rB   rw   operandspeekoperatoriis         rE   _parse_content_streamz#ContentStream._parse_content_stream%  s   Aq57&v.DxKKA||~!5+FJ4P4PQu$ $r>)>008B$$++R,AB$$++Xx,@A!H "55!;;q>D "55 FD$:N:N OP3 rF   c           	      P   t               }	 t        |      }|j                  dd       |dk(  rnOt        || j                        }t        |      }|j                  dd       t        || j                        }|||<   r|j                  d      }|d d dk(  sJ |j                  d|j                  dd	            }|j                         }t        |t              r|d
   }d|v sd|v rt        |      }	nd|v sd|v rt        |      }	nd|v sd|v rt        |      }	nd|v sd|v rt        |      }	n|d	k(  r|j                  dd      }
t        |
t              r|
d
   }
d|
v rd}n7d|
v rd}n0|j                  d|
dv rdnd      }|d
kD  r|dz  }nt        |      }	d}|d
kD  rB|j                  t        t!        t"        |d         |z        t!        t"        |d         z        }	t        |      }|j                  dd       nt        |      }	|j                  d      }|j                  dd       |d d dk7  s|dd t$        vra|j                  |d
       t        |      }	|j                  d      }|j                  dd       |d d dk7  s|dd t$        vrt'        d|      |	d S )!Nr   r#      Ir6   r   s   ID/Fz/Filterznot setr   AHxASCIIHexDecodeA85ASCII85DecodeRLRunLengthDecodeDCT	DCTDecodez/CSrl  RGBCMYK   z/BPC>   /G/I/Indexed/DeviceGrayr   g       @z/Wz/H   EIzHCould not extract inline image, even using fallback. Expected 'EI', got )settingsrD   )r   r   r   r   rM   r   r   r   rO   rg   r0   r/   r2   r1   r3   r   r   r   r   r"   )rB   rw   r  r   r   r   r   filtrsavposrD   cslcsbitseis                 rE   r  z ContentStream._read_inline_imageD  s    $%%f-CKKAd{fdhh/C%f-CKKA1E!HSM  kk!n2Aw%T8<<	9#EFeT"!HEE>-63F;De^%71&9DU]/584V<De^{e3-f5DieR(B"d#U{2||FFAB !8*C1&9DCQw{{c8D>2S89Dhtn<UU %V,BKKA)&1D[[^Bbq6U?b1g[8KK")&1DQBKKA"1v"Qq'"< %^_a^de  %d33rF   c                 J   | j                   st               }| j                  D ]  \  }}|dk(  r|j                  d       t               }|d   j	                  |       |j                  |j                         dd        |j                  d       |j                  |d          |j                  d       n:|D ]$  }|j	                  |       |j                  d	       & |j                  |       |j                  d
        |j                         | _         | j                   S )Nr  r  r  r   s   ID rD   r  r}   r   )rH  r   r  r~   r   getvalue)rB   r  r  r  	dict_textops         rE   rS  zContentStream.get_data  s    zzyH&*&6&6 &"(.NN5) '	IZ(88CNN9#5#5#7"#=>NN6*NN8F#34NN5)& -**84 t,- NN8,u%& "**,DJzzrF   rD   c                 2    t         |   |       g | _        y rW   )rO  rU  r  rX  s     rE   rU  zContentStream.set_data  s    rF   c                     | j                   s7| j                  r+| j                  t        | j                               d| _        | j                   S rG  )r  rH  r  r   r`   s    rE   
operationszContentStream.operations  s;    DJJ&&wtzz':;DJrF   r  c                      || _         d| _        y rG  )r  rH  )rB   r  s     rE   r  zContentStream.operations  s    %
rF   c                     | j                   r<| j                   j                  dg df       | j                   j                  g df       y | j                  rd| j                  z   dz   | _        y y )Nr      q   Qs   q
s   
Q
)r  insertrA   rH  r`   s    rE   isolate_graphics_statez$ContentStream.isolate_graphics_state  s^    ##ADz2##RJ/ZZ$**,x7DJ rF   rx   c                 v    | j                   s| j                  r| j                          t        |   ||       y rW   )rH  r  rS  rO  r   )rB   rw   rx   r^   s      rE   r   zContentStream.write_to_stream  s,     zzd..MMO7rF   rW   r   rC  )!r   r   r   __doc__r   r
   ri   rg   r   r   r  r   r>   r   r	   r   rK   r   rh   r_   r   r   r  r  rj   rS  rU  r  r  setterr  r   rs  rt  s   @rE   r}  r}  }  s   0 HL	5/5/ 5/ tS$s)T#s(^CD	5/
 
5/n# 
B !&=?	"" "  sCx 9:	"
 
"H66 $6 	6
  sCx 9:6 U38_%6 
64QJ Q4 Q>I4 I4S#X I4X% ,U t   DsEz!23     T%U
*;%<   8 MQ8 827c58H2I8	8 8rF   r}  rw   rM   r   c                 R   | j                  d      }| j                  dd       |dk(  rt        j                  | |      S |dk(  rK| j                  d      }| j                  dd       |dk(  rt        j                  | ||      S t        | |      S |dk(  rt        j                  | ||      S |d	v rt        j                  |       S |d
k(  rt        | |      S |dk(  r| j                  d      dk(  r
t               S |dk(  rt        j                  |       S |dk(  r5t        |        t        |       }| j                  dd       t        | ||      S |dv rv| j                  d      }| j                  t        |       d       t        j                  |      |J d       t!        j                  | |      S t#        j                  |       S | j%                         }| j                  dd       | j                  d      }| j                  |       t'        |        t)        d|d| d|      )Nr#   r      /   <r   r  r   r|   )   t   f   (   e   s   endobj   nr   s   0123456789+-.   r   iP   z(Invalid Elementary Object starting with z @z: )r   r   r(   r   r   r4   r:   r$   r5   r)   r   r   r   r   IndirectPatternmatchr'   r*   r   r   r!   )rw   rM   r   r   r  r  stream_extracts          rE   r   r     s   
 ++a.C
KKA
d{**6377
d{{{1~B5=#44VS/RR*6?CC
d{++FCII
l--f55
d{&v??
d{v{{1~2|
d{**622
d{&!!&)B6388
{{2SYJ"  &2?*F*?!2263??,,V44
++-C
KKQ[[_N
KK&!

23'C5>BTU rF   c                   8   e Zd ZdZdeddfdZedee   fd       Z	edee   fd       Z
eded   fd	       Zedee   fd
       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zy)Fieldz
    A class representing a field dictionary.

    This class is accessed through
    :meth:`get_fields()<pypdf.PdfReader.get_fields>`
    rD   r<   Nc                    t         j                  |        t        j                         t	        j                         z   }|j
                  | _        |D ]  }	 ||   | t        |      <    t        | j                  d      t              rst        t        | t        d               j                         }t        |t              r|j                         }n|d}nt        d      t!        |      | t        d      <   y y # t        $ r Y w xY w)Nr   rl  zShould never happen)r   r  r   
attributesr   rL   r(   r   rO   r   rZ  r   rS  rj   decoderN   r,   )rB   rD   field_attributesattrdd_strs         rE   r  zField.__init__   s    !!$'%002+6689 	 #'"9"9$ 	D)-dZ%&	
 dhhtn&9:($z$/?*@AJJLA!U#
 566%5e%<DD!" ;  s   C<<	DDc                 @    | j                  t        j                        S )z4Read-only property accessing the type of this field.)r   r   ra  r`   s    rE   
field_typezField.field_type       xx14455rF   c                 @    | j                  t        j                        S )z6Read-only property accessing the parent of this field.)r   r   Parentr`   s    rE   r#  zField.parent  s     xx18899rF   r:   c                 @    | j                  t        j                        S )z4Read-only property accessing the kids of this field.)r   r   Kidsr`   s    rE   kidsz
Field.kids!  s     xx16677rF   c                 @    | j                  t        j                        S )z4Read-only property accessing the name of this field.)r   r   Tr`   s    rE   namez
Field.name&  s     xx13344rF   c                 @    | j                  t        j                        S )z>Read-only property accessing the alternate name of this field.)r   r   TUr`   s    rE   alternate_namezField.alternate_name+  r  rF   c                 @    | j                  t        j                        S )z
        Read-only property accessing the mapping name of this field.

        This name is used by pypdf as a key in the dictionary returned by
        :meth:`get_fields()<pypdf.PdfReader.get_fields>`
        )r   r   TMr`   s    rE   mapping_namezField.mapping_name0       xx14455rF   c                 @    | j                  t        j                        S )z
        Read-only property accessing the field flags, specifying various
        characteristics of the field (see Table 8.70 of the PDF 1.7 reference).
        )r   r   Ffr`   s    rE   flagszField.flags:  s     xx14455rF   c                 @    | j                  t        j                        S )zs
        Read-only property accessing the value of this field.

        Format varies based on field type.
        )r   r   Vr`   s    rE   r   zField.valueB  s     xx13344rF   c                 @    | j                  t        j                        S )z=Read-only property accessing the default value of this field.)r   r   DVr`   s    rE   default_valuezField.default_valueK  r  rF   c                 @    | j                  t        j                        S )z
        Read-only property accessing the additional actions dictionary.

        This dictionary defines the field's behavior in response to trigger
        events. See Section 8.5.2 of the PDF 1.7 reference.
        )r   r   AAr`   s    rE   additional_actionszField.additional_actionsP  r  rF   )r   r   r   r  r   r  r  r	   r(   r  r#  r  ri   r  r  r  r   r  r   r   r  r  r   rF   rE   r  r    sW   =- =$ =. 6HZ0 6 6 :!12 : : 8h}- 8 8 5hsm 5 5 6 6 6 6hsm 6 6 6x} 6 6 5x} 5 5 6x} 6 6 6H-=$> 6 6rF   r  c                      e Zd ZU dZdZee   ed<   dee	e
f   deeeeef   deddfdZedd
       Z	 ddedede	e
f   ddfdZedee	   fd       Zedee   fd       Zedee	   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zeded	   fd       Zedee   fd       Z edee   fd       Z!y)Destinationa  
    A class representing a destination within a PDF file.

    See section 12.3.2 of the PDF 2.0 reference.

    Args:
        title: Title of this destination.
        page: Reference to the page of this destination. Should
            be an instance of :class:`IndirectObject<pypdf.generic.IndirectObject>`.
        fit: How the destination is displayed.

    Raises:
        PdfReadError: If destination type is invalid.

    Nnodetitlepagefitr<   c                    g | _         |j                  }|j                  }t        j	                  |        t        |      | t        d      <   || t        d      <   || t        d      <   |dk(  rt        |      dk  r|j                  t        d             t        |      dk  r|j                  t        d             t        |      dk  r|j                  t        d             |\  | t        t        j                        <   | t        t        j                        <   | t        d	      <   y t        |      d
k(  ry |t        j                  k(  rp|\  | t        t        j                        <   | t        t        j                        <   | t        t        j                         <   | t        t        j                        <   y |t        j"                  t        j$                  fv r 	 |\  | t        t        j                        <   y |t        j*                  t        j,                  fv r 	 |\  | t        t        j                        <   y |t        j.                  t        j0                  fv ry t3        d|      # t&        $ r' t)               | t        t        j                        <   Y y w xY w# t&        $ r' t)               | t        t        j                        <   Y y w xY w)N/Title/Pager   z/XYZr#   g        r   r6   /Zoomr   zUnknown Destination Type: )_filtered_childrenfit_typefit_argsr   r  r,   r(   r   rA   r*   TALEFTTOPTFFIT_RBOTTOMRIGHTFIT_HFIT_BHrN   r)   FIT_VFIT_BVFITFIT_Br!   )rB   r  r  r  typargss         rE   r  zDestination.__init__p  s5    .0ll||!!$'%5e%<Z!"$(Z !$'Z ! &=4y1}L-.4y1}L-.4y1}L-.
 	Z()Z'(Z()Y!^BHH_ Z()Z		*+Z)*Z'(RXXryy))>.2+j() RXXryy))?/3,j)* RVVRXX&&!;C7CDD  >/9|j()>
  ?0:j)*?s$   !I3 #J& 3-J#"J#&-KKr:   c                 z    t        | j                  d      | d   gdD cg c]  }|| v r| |    c}z         S c c}w )Nr  r   )/Left/Bottom/Right/Topr  )r:   r   )rB   r[   s     rE   
dest_arrayzDestination.dest_array  sR    \\'"DM2 I9 Q
 	
s   8
rw   rx   c                    |t        dd       |j                  d       t        d      }|j                  |       |j                  d       | j                  }|j                  |       t        d      }|j                  |       |j                  d       t        d      }|j                  |       |j                  d       |j                  d	       y )
Nrz   r{   r   z/Dr}   z/Sz/GoTor   r   )r   r~   r(   r   r  )rB   rw   rx   r   r   value_ss         rE   r   zDestination.write_to_stream  s     %&A7 	WF#Tf%F#TW%'UUrF   c                 $    | j                  d      S )z3Read-only property accessing the destination title.r   r   r`   s    rE   r  zDestination.title  s     xx!!rF   c                 $    | j                  d      S )zHRead-only property accessing the IndirectObject of the destination page.r  r  r`   s    rE   r  zDestination.page       xx  rF   c                 $    | j                  d      S )z2Read-only property accessing the destination type.r   r  r`   s    rE   r  zDestination.typ  r   rF   c                 &    | j                  dd      S )z-Read-only property accessing the zoom factor.r  Nr  r`   s    rE   zoomzDestination.zoom       xx&&rF   c                 &    | j                  dd      S )z<Read-only property accessing the left horizontal coordinate.r  Nr  r`   s    rE   leftzDestination.left  r$  rF   c                 &    | j                  dd      S )z=Read-only property accessing the right horizontal coordinate.r  Nr  r`   s    rE   rightzDestination.right  s     xx$''rF   c                 &    | j                  dd      S )z9Read-only property accessing the top vertical coordinate.r  Nr  r`   s    rE   topzDestination.top  s     xx%%rF   c                 &    | j                  dd      S )z<Read-only property accessing the bottom vertical coordinate.r  Nr  r`   s    rE   bottomzDestination.bottom  s     xx	4((rF   c           
      t    | j                  dt        t        d      t        d      t        d      g            S )zHRead-only property accessing the color in (R, G, B) with values 0.0-1.0.z/Cr   )r   r:   r&   r`   s    rE   colorzDestination.color  s2     xx+{1~{1~{1~NO
 	
rF   c                 &    | j                  dd      S )z_
        Read-only property accessing the font type.

        1=italic, 2=bold, 3=both
        r  r   r  r`   s    rE   font_formatzDestination.font_format  s     xxa  rF   c                 &    | j                  dd      S )z
        Read-only property accessing the outline count.

        positive = expanded
        negative = collapsed
        absolute value = number of visible descendants at all levels
        r&  Nr  r`   s    rE   outline_countzDestination.outline_count  s     xx$''rF   )r<   r:   rW   )"r   r   r   r  r  r	   r   __annotations__r
   ri   rj   r*   r'   r)   r.   r  r  r  r   r   r  r  r  r   r#  r&   r&  r(  r*  r,  r.  r   r0  r2  r   rF   rE   r  r  [  s	   $ 	 	( 3ES%Z 3E L.*>NNO3E 	3E
 
3Ej 
 
 MQ 27c58H2I	. "x} " " !h~. ! ! !Xc] ! ! 'hsm ' ' 'h{+ ' ' (x, ( ( &Xk* & & )- ) ) 
x. 
 
 !Xo6 ! ! (x} ( (rF   r  rW   )]
__author____author_email__loggingr   syscollections.abcr   r   ior   mathr   typingr   r   r	   r
   r   
_protocolsr   r   r   _utilsr   r   r   r   r   r   r   r   	constantsr   r   r   r   ra  r   r   r   r  r   r	  errorsr   r    r!   r"   _baser$   r%   r&   r'   r(   r)   r*   r+   r,   r-   _fitr.   _image_inliner/   r0   r1   r2   r3   r4   r5   version_infor8   typing_extensions	getLoggerr   loggerr   r  rg   r:   r   r   r  r:  rP   rK  rZ  r  r}  ri   r   r   r  r  r   rF   rE   <module>rG     s  : 
/   	 
 .    V U	 	 	 
 * . * - b b     Iw&			8	$"**@Aj$s)Y jZatCH~y aHW*! W*t+S +T +"m# m`	, 	$, $N #) F8' F8X
 DH//	#	$/ 4d3ic3h?@/ 9c3-.	/d`6J `6Fm(* m(rF   