
    Ngw                     ~   d Z dZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
mZmZ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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/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= ddl>m?Z? ddl@mAZAmBZBmCZCmDZDmEZE ddlmFZFmGZG ejH        dk    rddl	mIZI nddlJmIZI  ejK        eL          ZMdZN ejO        d          ZP G d dee
         e;          ZQ G d dee
e
f         e;          ZR G d deR          ZSde
d dfd!ZT G d" d#eR          ZU G d$ d%eU          ZV G d& d'eU          ZW G d( d)eV          ZX	 d2d*ed+ee         d,edeYeeY         eeZeYf         f         d ee;eZeYeXf         fd-Z[ G d. d/eS          Z\ G d0 d1eS          Z]dS )3zMathieu Fenniakzbiziqe@mathieu.fenniak.net    N)BytesIO)ceil)AnyCallableDictIterableListOptionalSequenceSetTupleUnioncast   )PdfReaderProtocolPdfWriterProtocolXmpInformationProtocol)	WHITESPACES
StreamTypedeprecation_no_replacementdeprecation_with_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PdfReadErrorPdfStreamError   )
BooleanObjectByteStringObjectFloatObjectIndirectObject
NameObject
NullObjectNumberObject	PdfObjectTextStringObjectis_null_or_none)Fit)extract_inline_A85extract_inline_AHxextract_inline_DCTextract_inline_defaultextract_inline_RL)read_hex_string_from_streamread_string_from_stream)      )Selfs   +-s   [+-]?(\d+)\s+(\d+)\s+R[^a-zA-Z]c                   f   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dS )ArrayObjectpdf_destreturnc                    t          d|                     t                      |d                    }| D ]P}t          |d          r)|                    |                    |                     ;|                    |           Q|S )Nr>   F	replicate)r   _reference_cloner>   hasattrappendrB   )selfr?   arrdatas       Z/var/www/html/ai-engine/env/lib/python3.11/site-packages/pypdf/generic/_data_structures.pyrB   zArrayObject.replicatej   s     !!+--5AA
 
  	! 	!Dt[)) !

4>>(334444

4    
    F force_duplicateignore_fieldsc                    	 | j         j        |k    r|s| S n# t          $ r Y nw xY wt          d|                     t                      ||                    }| D ]}t          |t                    rG|                    |                    |||          ||          }|	                    |j                    ^t          |d          r+|	                    |                    |||                     |	                    |           |S )Clone object into pdf_dest.r>   clone)indirect_referencepdf	Exceptionr   rC   r>   
isinstanceStreamObjectrP   rE   rD   )rF   r?   rL   rM   rG   rH   dups          rI   rP   zArrayObject.cloney   s*   	&*h666 	 	 	D	!!+--?KK
 
  	! 	!D$-- 
!++JJx-HH# 
 

312222w'' !

4::hOOPPPP

4    
    
$$c                 \    t          | j        t          d | D                       f          S )q
        Used to detect modified object.

        Returns:
            Hash considering type and value.

        c              3   >   K   | ]}|                                 V  d S Nhash_bin).0xs     rI   	<genexpr>z'ArrayObject.hash_bin.<locals>.<genexpr>   s*      *F*FA1::<<*F*F*F*F*F*FrJ   )hash	__class__tuplerF   s    rI   r]   zArrayObject.hash_bin   s0     T^U*F*F*F*F*F%F%FGHHHrJ   c                      t          |           S )z:Emulate DictionaryObject.items for a list (index, object).)	enumeraterd   s    rI   itemszArrayObject.items   s    rJ   lstc                 V   t          |t          t          t          f          rnt          |t                    r|g}nlt          |t
                    r.|d         dk    rt          |          g}n:t          |          g}n)t          |t                    rt          |          g}n|g}|S )Nr   /)
rT   listrc   setr/   strr,   r0   bytesr)   rF   rh   s     rI   _to_lstzArrayObject._to_lst   s    cD%-.. 	Y'' 
	%CCS!! 	1v}}!#'',,-U## 	#C(()CC%C
rJ   c                 t    t          |           }|                    |                     |                     |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>   extendrp   )rF   rh   temps      rI   __add__zArrayObject.__add__   s4     4  DLL%%&&&rJ   c                 V    |                      |                     |                     | 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

        )rr   rp   ro   s     rI   __iadd__zArrayObject.__iadd__   s'     	DLL%%&&&rJ   c                     |                      |          D ]+}	 |                     |          }| |= # t          $ r Y (w xY w| S )zAllow to remove items)rp   index
ValueError)rF   rh   r_   s      rI   __isub__zArrayObject.__isub__   s_    c"" 	 	AJJqMMGG   s   2
??Nstreamencryption_keyc                     |t          dd           |                    d           | D ],}|                    d           |                    |           -|                    d           d S )N/the encryption_key parameter of write_to_stream5.0.0   [    s    ])r   writewrite_to_stream)rF   r{   r|   rH   s       rI   r   zArrayObject.write_to_stream   s     %&A7   	T 	) 	)DLL  ((((UrJ   rR   forced_encodingc                 N   t                      }|                     d          }|dk    rt          d          	 |                     d          }|                                r)|                     d          }|                                )|dk    r&|                     dd           t          |            |                     dd           |                     d          }|dk    rn;|                     dd           |                    t          | ||                     |S )Nr'   r   zCould not read arrayT   %   ])r>   readr%   isspaceseekr   rE   read_object)r{   rR   r   rG   tmptok
peek_aheads          rI   read_from_streamzArrayObject.read_from_stream   s    mmkk!nn$;;5666	B++a..C++-- %kk!nn ++-- %d{{B"""!&)))KKAQJT!!KKAJJ{63@@AAA!	B" 
rJ   FrK   r[   )__name__
__module____qualname__r   rB   boolr
   r   r   rm   intrP   r]   r   r   rg   r	   rp   rt   r<   rv   rz   r   rn   r   staticmethodr   r   r   rK   rJ   rI   r>   r>   i   s       # 
   $ !&=?	 #   sCx 9:	
 
   <I# I I I Ix}    3 49    "3 =    &C D    C D     MQ  27c58H2I	     HL '( tS$s)T#s(^CD 
	   \  rJ   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dedee         dede	ee	         e e
e	f         f         dd fd            Z!dS )DictionaryObjectr?   r@   c                 "   t          d|                     |                                 |d                    }|                                 D ]B\  }}t	          |d          r|                    |          n|||                    |          <   C|S )Nr   FrB   )r   rC   rb   rg   rD   rB   )rF   r?   d__kvs        rI   rB   zDictionaryObject.replicate  s     !!$.."2"2HeDD
 
 JJLL 	 	DAq)0K)@)@GH%%%a H%%&& 
rJ   FrK   rL   rM   c                 `   	 | j         j        |k    r|s| S n# t          $ r Y nw xY wt                      }t	          d|                     |                                 ||                    }|g }t          |                                          dk    r|	                    | ||||           |S )rO   r   Nr   )
rQ   rR   rS   rl   r   rC   rb   lenkeys_clonerF   r?   rL   rM   visitedr   s         rI   rP   zDictionaryObject.clone  s    	&*h666 	 	 	D	 ),!!$.."2"2HoNN
 
  Msxxzz??aJJtXwOOO
rW   srcr   Nc           
         d}J t                    |t                    k     rit          |         t                    r6t	          t          |                   dk    r|= |= T|xx         dz  cc<   |dz  }|t                    k     it          fddD                       rt                    dD ]}|D ]}g }	|v r|| vrt                              |          t                    rt          |         t                    r	                    dd          wt	          t          |                   	                    dd          H	                    dd          t	          t          |                   	                    dd          k    rt	          d|                   }
| }|
t	          d|

                    |
                                ||                    }|j        8|j        j        }|j        j        }||f|v rd}
n|                    ||f           |	                    |
|f           |J |j        |t#          |          <   |}	 |
k    rd}
nt	          d|
|                   }
n# t$          $ r d}
Y nw xY w|
|	D ]\  }}|                    ||||                                           D ]\  }}|vrt          |t*                    rUt-          |d	          sd|_        |                    ||          }|j        J |j        | |                    |          <   s|| vr9t-          |d
          r|                    ||          n|| t#          |          <   dS )z
        Update the object from src.

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

        r   Nr'   c              3     K   | ]}|vo|v ot                              |          t                    ot          |         t                    o                    d d          du pwt          t          |                                       d d          du pF                    d d          t          t          |                                       d d          k    V  dS )/TypeN)rT   raw_getr+   r   getr   )r^   fieldrM   r   s     rI   r`   z*DictionaryObject._clone.<locals>.<genexpr>U  s
      
 
  & 		3;;u--~>>	 3u:'788	
 &&$. I(#e*5599'4HHDPI777D))(#e*5599'4HHI
 
 
 
 
 
rJ   )/Next/Prev/N/V))r   r   )r   r   r   r   rQ   rP   )rk   r   rT   r   r   anyr   r+   r   r   rC   rb   rQ   idnum
generationaddrE   r,   rS   r   rg   rU   rD   rP   )rF   r   r?   rL   rM   r   r_   rh   r   objscur_objprev_objclonr   r   scr   vvs    `  `              rI   r   zDictionaryObject._clone4  sR   ( (((]++#m$$$$-*C00 *]1-..!33%a(%a(!!$$$)$$$FA #m$$$$  
 
 
 
 
 8
 
 
 
 
 @	 !//M9 2 2 1 1ADSTMM&s{{1~~~FF *&s1v/?@@ *  GGGT22:#$4c!f==AA'4PPX"www55#$4c!f==AA'4PP Q  Q ?C.A? ? @D%1#' 2 ' 8 8$+$5$5$7$7?!" !"$ $D  $6B(,(?(E-1-D-O
$):#6'#A#A.2G$) 'UJ,? @ @ @ KK$888#+#7#7#76:6MHZ]]3'+H/#*c>>.2GG.23Ewqz.R.RG#, / / /*./1 &14 %)  DAqHH !8_mW   _1f IIKK 	 	DAq%%a.. "1&:;; 4/3,?MJJB0<<<.0.CD**++d]] #1g../=III A'	 	s   -JJJc                     t          | j        t          d |                                 D                       f          S )rY   c              3   H   K   | ]\  }}||                                 fV  d S r[   r\   )r^   r   r   s      rI   r`   z,DictionaryObject.hash_bin.<locals>.<genexpr>  s3      #O#O$!QQ

$5#O#O#O#O#O#OrJ   )ra   rb   rc   rg   rd   s    rI   r]   zDictionaryObject.hash_bin  s?     ^U#O#O$**,,#O#O#OPPQ
 
 	
rJ   keyc                 8    t                               | |          S r[   )dict__getitem__rF   r   s     rI   r   zDictionaryObject.raw_get  s    c***rJ   defaultc                     || v r| |         S 	 d| vr|S t          d          # t           $ r? t          d| d                                                                       ||          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   
get_objectget_inherited)rF   r   r   s      rI   r   zDictionaryObject.get_inherited  s     $;;9	$$=))) 	 	 	*DO,F,F,H,HIIWWW    	s   # # AA,+A,valuec                     t          |t                    st          d          t          |t                    st          d          t                              | ||          S NzKey must be a PdfObjectzValue must be a PdfObject)rT   r/   ry   r   __setitem__rF   r   r   s      rI   r   zDictionaryObject.__setitem__  s\    #y)) 	86777%++ 	:8999c5111rJ   c                     t          |t                    st          d          t          |t                    st          d          t                              | ||          S r   )rT   r/   ry   r   
setdefaultr   s      rI   r   zDictionaryObject.setdefault  sZ    #y)) 	86777%++ 	:8999tS%000rJ   c                 \    t                               | |                                          S r[   )r   r   r   r   s     rI   r   zDictionaryObject.__getitem__  s$    c**55777rJ   c                     ddl m} |                     dd          }t          |          rdS |                                }t          ||          s ||          }|| t          d          <   |S )u  
        Retrieve XMP (Extensible Metadata Platform) data relevant to the 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)xmpr   r   r1   r   rT   r,   )rF   r   metadatas      rI   xmp_metadatazDictionaryObject.xmp_metadata  s     	)(((((88K..8$$ 	4&&(((N33 	5%~h//H,4DK(()rJ   r{   r|   c                    |t          dd           |                    d           t          |                                           D ]\  }}t	          |          dk    r|d         dk    r|d         dk    r1|                    ||           |                    d           |                    |           |                    d	           |                    d
           d S )Nr~   r      <<
r   r'   %r   r      
   >>)r   r   rk   rg   r   r   )rF   r{   r|   r   r   s        rI   r   z DictionaryObject.write_to_stream  s     %&A7   	Wtzz||,, 	  	 JC3xx!||A##b'S..777LL!!&)))LLUrJ   rR   r   c           
         dt           dt           dt          t                    dt          dt           f
ddt          dt          dt          ffd}|                     d	          }|d
k    r2t          dt          |                                            d          i }	 t          |           }|dk    r|dk    r&| 
                    dd           t          |            C|st          t                    |dk    r|                     d           n| 
                    dd           	 	 t          | |          }t          |t                     rnt          |t"                    st          d|          nI# t          $ r<}||j        r t'          |                                t*                     Y d }~d }~ww xY wt          |           }| 
                    dd           t          | ||          }	n# t,          $ r}|(|j        r!t          |                                          t'          |                                t*                     t/                      }
|
                    |           |
cY d }~S d }~ww xY w|                    |          s|	||<   nTdt          |                                            d| }||j        rt          |          t'          |t*                     Z|                                 }t          |           }|dk    r|                     d          dk    r|                     d          }|dk    r|                     d          }|dk    |dvrt          d          |dk    r/|                     d          dk    r| 
                    dd           t4          j        |vrk||j        rt          d          t'          d|                                  t*                     t9          d          |t#          t4          j                  <   |t4          j                 }t          |t:                    rC|                                 }|J |                    |          }| 
                    |d            |d}|                                 }|d k    r|                     |          |d!<   n%t?          | tA          j!        d"                    |d!<   t          |           }|                     d#          }||z   d"k    r|                                 }| 
                    d$d           |                     d%          }|d"k    r|d!         d d         |d!<   n|A|j        s:| 
                    |d             || |          |d!<   |                                 }ne| 
                    |d            t          d&t          |                                            d'|d(|d)          n| 
                    |d            d!|v rtD          #                    |          S t/                      }
|
                    |           |
S )*Npp1rem_gensrR   r@   c           	           }|D ]\}|j         |         }	 t          |t           fd|                                D                                 }M# t          $ r Y Yw xY w|S )Nc                 4    g | ]}|cxk     rk    n n|S rK   rK   )r^   r_   r   r   s     rI   
<listcomp>zODictionaryObject.read_from_stream.<locals>.get_next_obj_pos.<locals>.<listcomp>  s.    'O'O'Oa1q;;;;B;;;;;;;;rJ   )xrefminvaluesry   )r   r   r   rR   outgenlocs   ``     rI   get_next_obj_posz;DictionaryObject.read_from_stream.<locals>.get_next_obj_pos  s     C  hsmc3'O'O'O'O'O3::<<'O'O'O#P#PQQCC!   DJs   <A
A! A!r{   c                     |                                  dt          |j                  |          dz
  }|                                  }|                     ||                                  z
            }|                    d          }|dk     rt          d| d          |                     ||z   dz              |d |dz
           S )Nl        r'   	   endstreamr   z6Unable to find 'endstream' marker for obj starting at .	   )tellrk   r   r   findr%   r   )r{   rR   eoncurrrwr   r   s         rI   read_unsized_from_streamzCDictionaryObject.read_from_stream.<locals>.read_unsized_from_stream  s     #"6;;==%chMMPQQC;;==DS6;;==011B%%A1uu"TTTTT   KKq1%%%gAg;rJ   r      <<zDictionary read error at byte z: stream must begin with '<<'T    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   __streamdata__r      ir   z7Unable to find 'endstream' marker after stream at byte z (nd='z', end='z').)$r   r	   r   r   rn   r   r%   hexr   r   r   r   r&   r$   r   rT   r-   r,   strictr   __repr__r   rS   r   updater   SALENGTHr.   r+   r   r   recompilerU   initialize_from_dictionary)r{   rR   r   r   r   rH   r   r   excr   retvalmsgposr   eollengthtpstartendstreamendr   s                        @rI   r   z!DictionaryObject.read_from_stream
  s   
	
	
	'+Cy
	7H
	
	 
	 
	 
			%6		 	 	 	 	 	 kk!nn%<<.V[[]]1C1C . . .    "2	.%f--Cg~~B"""!&))) C$%ABBBd{{AKKA%fc22C!#z22 %c:66 *OOO   $   3:"3<<>>8<<<HHHH	
 *&11B"""#FCAA   ?sz?&s||~~666s||~~x888)++d### 88C== 
.!S		:6;;==)): :47: :  ?sz?&s+++sH---e2	.h kkmm''99Q833++a..C ++kk!nn ++.(($%PQQQe||A% 7 7B"""y$$?sz?()DEEE"I&++--II8   /;2.>.>Z	**+")_F&.11 "KKMM//Aq!!!~[[]]Fzz)/V)<)<%&&)9BJ|44* *%& $F++A{{1~~HH-- kkmmC###kk!nn,&&-12B-CCRC-HD)**_SZ_KK***-E-Efc-R-RD)* ++--CCKKQ'''&Tv{{}}--T T5=T TILT T T  ' .0 KKQt##::4@@@%''FMM$MsI   ,%E; 'E; :G; ;
G1F<6G; <G9G; ;
JA5J :J Jr   r[   )"r   r   r   r   rB   r   r
   r   r   rm   r   rP   r   r   r   r]   r   r   r   r   r   r/   r   propertyr   r   r   rn   r   r   r   r	   r   r   rK   rJ   rI   r   r     s       # 
   " !&=?	 #   sCx 9:	
 
   0pp $p 	p
  sCx 9:p U38_%p 
p p p pd

# 

 

 

 

+3 +3 + + + +  s c    22s 23 23 2 2 2 21 1c 1(3- 13 1 1 1 18s 8y 8 8 8 8 h'=>    X4 MQ  27c58H2I	   "  HL_ __'(_ tS$s)T#s(^CD_ 
	_ _ _ \_ _ _rJ   r   c                   4   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dS )
TreeObjectNdctr@   c                 l    t                               |            |r|                     |           d S d S r[   )r   __init__r   )rF   r  s     rI   r  zTreeObject.__init__  s@    !!$''' 	KK	 	rJ   c                 
    d| v S )N/FirstrK   rd   s    rI   has_childrenzTreeObject.has_children  s    4rJ   c                 *    |                                  S r[   )childrenrd   s    rI   __iter__zTreeObject.__iter__  s    }}rJ   c              #   T  K   |                                  sd S | t          d                   }|                                }	 |V  || t          d                   k    rd S |                    t          d                    }t	          |          rd S |                                }g)Nr  T/Lastr   )r  r,   r   r   r1   )rF   	child_refchilds      rI   r  zTreeObject.children  s        "" 	FH--.	$$&&	+KKKZ00111		*W"5"566Iy)) ((**E	+rJ   r  rR   c                 4    |                      |d |           d S r[   )insert_child)rF   r  rR   s      rI   	add_childzTreeObject.add_child  s     %s+++++rJ   parentnc                    t          |          rd S |
J d            t          d|                                          }d|v rt          t	          dt          t
          |t          d                             |z                       |t          d          <   |                     |                    dd           |           d S d S )Nmypyr  /Countr   r   )	r1   r   r   r.   maxr   r,   inc_parent_counter_defaultr   )rF   r   r!  s      rI   r&  z%TreeObject.inc_parent_counter_default  s     6"" 	F!!6!!!lF$5$5$7$788v+7AtC
8(<(<!=>>BCC, ,F:h''( ++FJJy$,G,GKKKKK	 rJ   c                    t          |          rd S |
J d            t          d|                                          }|                    dd          dk    }t          t          |                    dd                    }|dk     rt          |          }t          ||z   |rdndz            |t          d          <   |sd S |                     |                    d	d           |           d S )
Nr#  r  z
/%is_open%Tr$  r   r'   r   r   )	r1   r   r   r   r   absr.   r,   inc_parent_counter_outline)rF   r   r!  opnr   s        rI   r)  z%TreeObject.inc_parent_counter_outline  s     6"" 	F!!6!!!lF$5$5$7$788jjt,,4fjj1--..q55AA'3QUC?OqqR4P'Q'Qz(##$ 	F''

9d(C(CQGGGGGrJ   beforeinc_parent_counter.c                    || j         }|                                }|j        }d| vr|| t          d          <   t	          d          | t          d          <   || t          d          <   | j        |t          d          <    || |                    dd                     d|v r|d= d|v r|d= |S t          d	| d                   }|j        |k    rd|v rt          d
|d                   }nt          d
|          |t          d          <   |j        |t          d          <   | j        |t          d          <   d|v r|d= || t          d          <    || |                    dd                     |S |j        |k    	 t          |d         t                    sJ ||d         t          d          <   |d         |t          d          <   n# t          $ r |d= Y nw xY w||t          d          <   ||t          d          <   | j        |t          d          <    || |                    dd                     |S )Nr  r   r$  r  r   r'   r   r   r   r  )
r&  r   rQ   r,   r.   r   r   rT   r   rS   )rF   r  r+  rR   r,  	child_objprevs          rI   r  zTreeObject.insert_child  s    %!%!@$$&&	( 4).DH%%&)5aDH%%&(-DG$$%/3/FIj++,tY]]8Q%?%?@@@)##g&)##g&L*DM::D%//$L$w-88,0u,E,EZ(()151H	*W--.373J	*Y//0i''!'*,1Z(()""4x)C)CDDD %//	#d7m-=>>>>>16DM*W--.-1']Ij))** 	# 	# 	#'"""	#)-	*W%%&$)Z  !+/+B	*Y''(4x!;!;<<<s   AG G"!G"r/  prev_refcurlastc                 
   |                     t          d          d          }||rm|                                }|t          d          = || t          d          <   t          | t          d                   dz
            | t          d          <   dS t          d          | t          d          <   | t          d          = t          d          | v r| t          d          = dS dS |r9|                                }||t          d          <   ||t          d          <   n*||k    sJ |t          d          = || t          d          <   t          | t          d                   dz
            | t          d          <   dS )	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,   r   r.   )rF   r/  r0  r1  r2  next_refnext_objs          rI   _remove_node_from_treez!TreeObject._remove_node_from_tree  s    77:g..55< 2#..00Z001-5Z))*-9H--.2. .Z))*** .:!__Z))*H--.g&&$..Z00111 /.  	5#..0008G,,-,4Z(()) d{{{{G,,-,4Z(())5d:h;O;O6PST6T)U)UDH%%&&&rJ   c                    |                                 }|j        }t          d          |vrt          d          |t          d                   | k    rt          d          d}d }d }| t          d                   }|                                 }| t          d                   }|                                 }	|f||k    r|                     ||||	           d}nE|}|}t          d          |v r*|t          d                   }|                                 }nd }d }|f|st          d	          t          |           d S )
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)r   rQ   r,   ry   r6  _reset_node_tree_relationship)
rF   r  r.  foundr0  r/  cur_refr1  last_refr2  s
             rI   remove_childzTreeObject.remove_childG  sn   $$&&	,i  	11NOOOz),,-55IJJJ!%j&:&:!;(/(:(:(<(<
7++,""$$oi++D(CFFF HD'""c))j112((** o   	CABBB%i00000rJ   c                     t          d          | vrt          d          t          d| d                                       |            dS )z)Remove the object from the tree it is in.r   r8  r  N)r,   ry   r   r=  rd   s    rI   remove_from_treezTreeObject.remove_from_treel  sL    i  ,,NOOOtI//<<TBBBBBrJ   c                     | D ]%}|                                 }t          |           &t          d          | v r| t          d          = t          d          | v r| t          d          = t          d          | v r| t          d          = d S d S )Nr$  r  r  )r   r9  r,   )rF   r  r.  s      rI   
empty_treezTreeObject.empty_trees  s     	5 	5E((**I))4444h4''Z))*h4''Z))*g$&&Z(())) '&rJ   r[   r@   N)r   r   r   r
   r   r  r   r  r   r  r   r  r   r  r   r+   r   r&  r)  r   r  r6  r=  r?  rA  rK   rJ   rI   r  r    s1        H%56 $    
 d        #    +(3- + + + +,s ,): ,t , , , ,LD.,>?LDGL	L L L LHD.,>?HDGH	H H H H, <@1 11 1 	1
 %Xc3h%781 
1 1 1 1f)V)V#&)V-0)V8;)V	)V )V )V )VV#1# #1$ #1 #1 #1 #1JC C C C
* 
* 
* 
* 
* 
*rJ   r  r.  r@   c                     | t          d          = t          d          | v r| t          d          = t          d          | v r| t          d          = dS dS )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,   )r.  s    rI   r9  r9    sh     	*Y''('i''j))*'i''j))*** ('rJ   c                       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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efdZ xZS )rU   r@   Nc                 "    d| _         d | _        d S NrJ   )_datadecoded_selfrd   s    rI   r  zStreamObject.__init__  s    
;?rJ   r?   c                    t          d|                     |                                 |d                    }| j        |_        	 | j        }|d | _        n(t          d|                    |                    | _        n# t          $ r Y nw xY w|                                 D ]B\  }}t          |d          r|                    |          n|||                    |          <   C|S )NrU   FDecodedStreamObjectrB   )	r   rC   rb   rG  rH  rB   rS   rg   rD   rF   r?   r   rH  r   r   s         rI   rB   zStreamObject.replicate  s    !!$.."2"2HeDD
 
 J			,L#$(!!$()<+A+A(+K+K% %!  	 	 	D	JJLL 	 	DAq)0K)@)@GH%%%a H%%&& 
s   9A? ?
BBr   rL   rM   r   c                 <   t          d|          j        | _        	 t          d|          j        }|d| _        n*t          d|                    |||                    | _        n# t          $ r Y nw xY wt                                          |||||           dS )
        Update the object from src.

        Args:
            src:
            pdf_dest:
            force_duplicate:
            ignore_fields:

        rU   NrJ  )r   rG  rH  rP   rS   superr   )rF   r   r?   rL   rM   r   rH  rb   s          rI   r   zStreamObject._clone  s    $ .#..4

	44AL#$(!!$() &&x-PP% %!  	 	 	D	sHo}gNNNNNs   A	A' '
A43A4c                 l    t          t                                                      | j        f          S )rY   )ra   rN  r]   rG  )rF   rb   s    rI   r]   zStreamObject.hash_bin  s*     UWW%%''4555rJ   c                     | j         S r[   rG  rd   s    rI   get_datazStreamObject.get_data  s
    zrJ   rH   c                     || _         d S r[   rQ  )rF   rH   s     rI   set_datazStreamObject.set_data  s    


rJ   c                 \    t                                                      }|| j        z  }|S r[   )rN  hash_value_datarG  rF   rH   rb   s     rI   rV  zStreamObject.hash_value_data  s)    ww&&((
rJ   r{   r|   c                 x   |t          dd           t          t          | j                            | t	          t
          j                  <   t                              | |           | t
          j        = |	                    d           |	                    | j                   |	                    d           d S )Nr~   r   s   
stream
s
   
endstream)
r   r.   r   rG  r,   r   r   r   r   r   )rF   r{   r|   s      rI   r   zStreamObject.write_to_stream  s     %&A7   '33tz??&C&CZ	""#((v666O]###TZ   ^$$$$$rJ   c                 (    t          ddd           d S )NinitializeFromDictionaryr  r   )r   )rH   s    rI   rZ  z%StreamObject.initializeFromDictionary  s&    $&(Dg	
 	
 	
 	
 	
rJ   )EncodedStreamObjectrJ  c                     t           j        | v rt                      }nt                      }| d         |_        | d= t           j        | v r| t           j        = |                    |            |S )Nr   )r   FILTERr[  rJ  rG  r   r   )rH   r  s     rI   r  z'StreamObject.initialize_from_dictionary  sl    
 9(**FF(**F,-!"9RYdrJ   r   levelr[  c           	      "   ddl m} t          j        | v ra| t          j                 }t	          |t
                    rt          t          t          j                  g|          }	 t          t                      g| 
                    t          j        t                                          }n# t          $ rJ t          t                      | 
                    t          j        t                                g          }Y nw xY wt          t          t          j                  |g          }t          t                      | 
                    t          j        t                                g          }nt          t          j                  }d }t                      }|                    |            ||t          t          j                  <   |||t          t          j                  <   |                    | j        |          |_        |S )Nr   FlateDecode)filtersra  r   r]  rT   r>   r,   FTFLATE_DECODEr-   r   DECODE_PARMS	TypeErrorr[  r   encoderG  )rF   r^  ra  fparamsr  s         rI   flate_encodezStreamObject.flate_encode	  s   ))))))9RYA![)) BO!<!< Aq ABB(#Q+--(P(PQ FF !   (#txx'O'OP FFF  BO!<!<a @AA$\\488BOZ\\#J#JK  2?++AF$&&d()z")$$%28F:bo../"))$*e<<s   'AB0 0ADDc                     ddl m} |                     dd          dk    rH	 | j         d}n'# t          $ r |                                  d}Y nw xY wt          |t                      ||           \  }}}|dS |S )	a~  
        Try to decode the stream object as an image

        Returns:
            a PIL image if proper decoding has been found
        Raises:
            Exception: (any)during decoding to to invalid object or
                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)rb  rl  r   rQ   AttributeErrorr   r   r   )rF   rl  r  	extensionbyte_streamimgs         rI   decode_as_imagezStreamObject.decode_as_image)  s     	-,,,,,88J##x//O0OOO! O O ONNNO3)))&4nT&:&:#	;4
s   
- !AArB  r[   )r   )r   r   r   r  r   rB   r   r   r
   r   r   rm   r   r   r   r   r]   rn   rR  rT  rV  r   r   r   r   r   rZ  r  rj  rr  __classcell__rb   s   @rI   rU   rU     sd       @ @ @ @# 
   2OO $O 	O
  sCx 9:O U38_%O 
O O O O O O@	6# 	6 	6 	6 	6 	6 	6%    U t           MQ% % %27c58H2I%	% % % % 
tCH~ 
$ 
 
 
 \

 38n	;	<   \ # /D    @        rJ   rU   c                       e Zd ZdS )rJ  N)r   r   r   rK   rJ   rI   rJ  rJ  D  s        DrJ   rJ  c                   <     e Zd ZddZdefdZdeddf fdZ xZS )r[  r@   Nc                     d | _         d S r[   )rH  rd   s    rI   r  zEncodedStreamObject.__init__I  s    ;?rJ   c                 ~   ddl m} | j        | j                                        S t	                      }|                     ||                      t          |                                           D ]/\  }}|t          j	        t          j
        t          j        fvr|||<   0|| _        |                                S )Nr   )decode_stream_data)rb  ry  rH  rR  rJ  rT  rk   rg   r   r   r]  re  )rF   ry  decodedr   r   s        rI   rR  zEncodedStreamObject.get_dataM  s    000000($--/// *++G//55666"4::<<00 ) )
Ury")R_EEE#(GCL 'D##%%%rJ   rH   c                    ddl m} |                     t          j        d          t
          j        t
          j        gfv rt          |t                    st          d          | j
        |                                  | j
        
J d            | j
                            |           t                                          |                    |                     d S t          d          )Nr   r`  rm  zData must be bytesr#  zJStreams encoded with a filter different from FlateDecode are not supported)rb  ra  r   r   r]  rc  rd  rT   rn   rf  rH  rR  rT  rN  rg  r%   )rF   rH   ra  rb   s      rI   rT  zEncodedStreamObject.set_data_  s    ))))))88BIr""r8I&JJJdE** 6 4555 ($00&000&&t,,,GG[//5566666\  rJ   rB  )r   r   r   r  rn   rR  rT  rs  rt  s   @rI   r[  r[  H  s~        @ @ @ @&% & & & &$U t          rJ   r[  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.
    Nr{   rR   r   r@   c                 D   || _         g | _        |"t                                          d           n|                                }t          |t                    rd}|D ]O}||                                                                z  }t          |          dk    s|d         dk    r|dz  }Pt                                          t          |                     n9|                                }|J t                                          |           || _
        d S )NrJ   r   r   r   )rR   _operationsrN  rT  r   rT   r>   rR  r   rn   r   )rF   r{   rR   r   rH   r   stream_datarb   s          rI   r  zContentStream.__init__  s    
 57 >GGS!!!!&&((F&+.. 
. & &AALLNN33555D4yyA~~bU):):  t----$oo//"...  ---.rJ   r?   c           	         t          d|                     |                     d d           |d                    }| j        |_        	 | j        }|d | _        n(t          d|                    |                    | _        n# t          $ r Y nw xY w|                                 D ]B\  }}t          |d          r|                    |          n|||                    |          <   C|S )Nr}  FrJ  rB   )r   rC   rb   rG  rH  rB   rS   rg   rD   rT  rR   rk   r  r   rK  s         rI   rB   zContentStream.replicate  s    !!$..t"<"<hNN
 
 J			,L#$(!!$()<+A+A(+K+K% %!  	 	 	D	JJLL 	 	DAq)0K)@)@GH%%%a H%%&& 
s   9B 
BBFrK   rL   rM   c           	         	 | j         j        |k    r|s| S n# t          $ r Y nw xY wt                      }t	          d|                     |                     dd          ||                    }|g }|                    | ||||           |S )z
        Clone object into pdf_dest.

        Args:
            pdf_dest:
            force_duplicate:
            ignore_fields:

        Returns:
            The cloned ContentStream

        r}  N)rQ   rR   rS   rl   r   rC   rb   r   r   s         rI   rP   zContentStream.clone  s    $	&*h666 	 	 	D	 ),!!tT**Ho 
 
  M

4?M7KKK
rW   r   r   c                     t          d|          }t                                          |j                   || _        t          |j                  | _        |j        | _        dS )rM  r}  N)r   rN  rT  rG  rR   rk   r  r   )rF   r   r?   rL   rM   r   src_csrb   s          rI   r   zContentStream._clone  sY    $ os++&&& 233%5rJ   c                 Z   |                     dd           g }	 t          |          }|dk    s|dk    rd S |                     dd           |                                s|dv ryt          |t          j                  }|dk    r:|g k    sJ |                     |          }| j                            |df           nl| j                            ||f           g }nM|d	k    r|d
vr|	                    d          }|d
vn)|                    t          |d | j                             )Nr   TrJ   r   r'   )   '   "   BI   INLINE IMAGEr   )r   r   rJ   )r   r   isalphar   r,   delimiter_pattern_read_inline_imager  rE   r   r   r   )rF   r{   operandspeekoperatoriis         rI   _parse_content_streamz#ContentStream._parse_content_stream  sR   Aq57	Q&v..Ds{{daiiKKA||~~ Q!5!5+FJ4PQQu$$ $r>>>>0088B$++R,ABBBB$++Xx,@AAA!HH "555!;;q>>D "555 FD$:N O OPPP3	QrJ   c           	         t                      }	 t          |          }|                    dd           |dk    rnUt          || j                  }t          |          }|                    dd           t          || j                  }|||<   |                    d          }|d d         dk    sJ |                    d|                    d	d
                    }|                                }t          |t                    r|d         }d|v sd|v rt          |          }	nBd|v sd|v rt          |          }	n)d|v sd|v rt          |          }	nd|v sd|v rt          |          }	n|d
k    r|                    dd          }
d|
v rd}n@d|
v rd}n9|                    d|
dv rdnd          }|dk    r|dz  }nt          |          }	d}|dk    rZ|                    t          t!          t"          |d                   |z            t!          t"          |d                   z            }	t          |          }|                    dd           nt          |          }	|                    d          }|                    dd           |dd         dk    s|dd         t$          vr%|                    |d           t          |          }	||	d S )!NTr   r'      Ir:   r   s   ID/Fz/Filterznot setr   AHxASCIIHexDecodeA85ASCII85DecodeRLRunLengthDecodeDCT	DCTDecodez/CSrm  RGBCMYK   z/BPC>   /G/I/Indexed/DeviceGrayr   g       @z/Wz/H   EI)settingsrH   )r   r   r   r   rR   r   r   r   rT   rk   r4   r3   r7   r5   r6   r   r   r   r   )rF   r{   r  r   r   r   r   filtrsavposrH   cslcsbitseis                 rI   r  z ContentStream._read_inline_image   s    $%%
	"%f--CKKAd{{fdh//C%f--CKKA11E!HSM
	" kk!nn2A2w%T8<<	9#E#EFFeT"" 	!HEE>>-66%f--DDe^^%77%f--DDU]]/588$V,,DDe^^{e33%f--DDieR((B{{2||FFFAAB  !88*CC1&99DCQww{{c8D>22S899Dhtn<U<UU  %V,,BKKA)&11D[[^^Bac7er!A#wk99KK""")&11D$d333rJ   c                    | j         sHt                      }| j        D ]\  }}|dk    r|                    d           t                      }|d                             |           |                    |                                dd                    |                    d           |                    |d                    |                    d           nD|D ],}|                    |           |                    d	           -|                    |           |                    d
           |                                | _         | j         S )Nr  r  r  r   s   ID rH   r  r   r   )rG  r   r  r   r   getvalue)rF   new_datar  r  	dict_textops         rI   rR  zContentStream.get_data_  sJ   z 	-yyH&*&6 & &"(..NN5))) '		IZ(88CCCNN9#5#5#7#7"#=>>>NN6***NN8F#3444NN5))))& - -**8444 t,,,,NN8,,,u%%%%!**,,DJzrJ   rH   c                 X    t                                          |           g | _        d S r[   )rN  rT  r  rW  s     rI   rT  zContentStream.set_datau  s)    rJ   c                     | j         s5| j        r.|                     t          | j                             d| _        | j         S rF  )r  rG  r  r   rd   s    rI   
operationszContentStream.operationsy  sD     	DJ 	&&wtz':':;;;DJrJ   r  c                 "    || _         d| _        d S rF  )r  rG  )rF   r  s     rI   r  zContentStream.operations  s    %


rJ   c                     | j         r;| j                             dg df           | j                             g df           d S | j        rd| j        z   dz   | _        d S d S )Nr      q   Qs   q
s   
Q
)r  insertrE   rG  rd   s    rI   isolate_graphics_statez$ContentStream.isolate_graphics_state  sv     	8##ADz222##RJ/////Z 	8$*,x7DJJJ	8 	8rJ   r|   c                     | j         s| j        r|                                  t                                          ||           d S r[   )rG  r  rR  rN  r   )rF   r{   r|   rb   s      rI   r   zContentStream.write_to_stream  sF     z 	d. 	MMOOO77777rJ   r[   r   rB  )!r   r   r   __doc__r   r   rm   r	   r   r   r  r   rB   r   r
   r   rP   r   r   r   r   r   r  r  rn   rR  rT  r  r  setterr  r   rs  rt  s   @rI   r}  r}  p  s        0 HL	/ // / tS$s)T#s(^CD	/
 
/ / / / / /@# 
   B !&=?	" "" "  sCx 9:	"
 
" " " "H66 $6 	6
  sCx 9:6 U38_%6 
6 6 6 6 6 64QJ Q4 Q Q Q Q><4 <4S#X <4 <4 <4 <4~%    ,U t        DsCx1       X  T%U
*;%<     8 8 8 8 MQ8 8 827c58H2I8	8 8 8 8 8 8 8 8 8 8rJ   r}  r{   rR   r   c                 R   |                      d          }|                     dd           |dk    rt          j        | |          S |dk    r]|                      d          }|                     dd           |dk    rt                              | ||          S t          | |          S |dk    rt                              | ||          S |d	k    s|d
k    rt          j        |           S |dk    rt          | |          S |dk    r=|                      d          dk    r$|                     dd           t                      S |dk    rt          j        |           S |dk    rEt          |            t          |           }|                     dd           t          | ||          S |dv r|                      d          }|                     t          |           d           t                              |          |J t!          j        | |          S t#          j        |           S |                                 }|                     dd           |                      d          }|                     |           t'          |            t)          d|d| d|          )Nr'   r      /   <r   r  r   r      t   f   (   e   s   endobji   nr   s   0123456789+-.   iP   z(Invalid Elementary Object starting with z @z: )r   r   r,   r   r   r8   r>   r(   r9   r-   r   r   r   r   IndirectPatternmatchr+   r.   r   r   r%   )r{   rR   r   r   r  r  stream_extracts          rI   r   r     s   
 ++a..C
KKA
d{{*63777	{{1~~B5==#44VS/RRR.vGGG	++FCIII	t-f555	&v???	Q944B||	*6222	&!!!!&))B63888	 	 	 {{2SYYJ"""  &&2???!263???0888kkmmCRCf%%%YsYYYY~YY
 
 	
rJ   c                      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dS )Fieldz
    A class representing a field dictionary.

    This class is accessed through
    :meth:`get_fields()<pypdf.PdfReader.get_fields>`
    rH   r@   Nc                 ~   t                               |            t          j                    t	          j                    z   }|j        | _        |D ]+}	 ||         | t          |          <   # t          $ r Y (w xY wt          | 	                    d          t                    rt          t          | t          d                                                             }t          |t                    r|                                }n|d}nt          d          t!          |          | t          d          <   d S d S )Nr   rm  zShould never happen)r   r  r   
attributesr   rQ   r,   r   rT   r   r[  r   rR  rn   decoderS   r0   )rF   rH   field_attributesattrdd_strs         rI   r  zField.__init__  s>   !!$'''%022+6889 	 #'"9$ 	 	D)-dZ%%&&   dhhtnn&9:: 	=($z$/?/?*@AAJJLLA!U## 7

 5666%5e%<%<DD!!"""	= 	=s   A,,
A98A9c                 @    |                      t          j                  S )z4Read-only property accessing the type of this field.)r   r   rc  rd   s    rI   
field_typezField.field_type       xx14555rJ   c                 @    |                      t          j                  S )z6Read-only property accessing the parent of this field.)r   r   Parentrd   s    rI   r   zField.parent  s     xx18999rJ   r>   c                 @    |                      t          j                  S )z4Read-only property accessing the kids of this field.)r   r   Kidsrd   s    rI   kidsz
Field.kids  s     xx16777rJ   c                 @    |                      t          j                  S )z4Read-only property accessing the name of this field.)r   r   Trd   s    rI   namez
Field.name  s     xx13444rJ   c                 @    |                      t          j                  S )z>Read-only property accessing the alternate name of this field.)r   r   TUrd   s    rI   alternate_namezField.alternate_name  r  rJ   c                 @    |                      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   TMrd   s    rI   mapping_namezField.mapping_name       xx14555rJ   c                 @    |                      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   Ffrd   s    rI   flagszField.flags  s     xx14555rJ   c                 @    |                      t          j                  S )zs
        Read-only property accessing the value of this field.

        Format varies based on field type.
        )r   r   Vrd   s    rI   r   zField.value  s     xx13444rJ   c                 @    |                      t          j                  S )z=Read-only property accessing the default value of this field.)r   r   DVrd   s    rI   default_valuezField.default_value  r  rJ   c                 @    |                      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   AArd   s    rI   additional_actionszField.additional_actions#  r  rJ   )r   r   r   r  r   r  r  r
   r,   r  r   r  rm   r  r  r  r   r  r   r   r  r  rK   rJ   rI   r  r    s        =- =$ = = = =. 6HZ0 6 6 6 X6 :!12 : : : X: 8h}- 8 8 8 X8 5hsm 5 5 5 X5 6 6 6 6 X6 6hsm 6 6 6 X6 6x} 6 6 6 X6 5x} 5 5 5 X5 6x} 6 6 6 X6 6H-=$> 6 6 6 X6 6 6rJ   r  c                   T   e Zd ZU dZdZee         ed<   de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!dS )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                              |            t          |          | t          d          <   || t          d          <   || t          d          <   |dk    rt          |          dk     r"|                    t          d                     t          |          dk     r"|                    t          d                     t          |          dk     r"|                    t          d                     |\  | t          t          j                  <   | t          t          j                  <   | t          d	          <   d S t          |          d
k    rd S |t          j        k    rq|\  | t          t          j                  <   | t          t          j                  <   | t          t          j                  <   | t          t          j                  <   d S |t          j        t          j        fv rZ	 |\  | t          t          j                  <   d S # t&          $ r, t)                      | t          t          j                  <   Y d S w xY w|t          j        t          j        fv rZ	 |\  | t          t          j                  <   d S # t&          $ r, t)                      | t          t          j                  <   Y d S w xY w|t          j        t          j        fv rd S t3          d|          )N/Title/Pager   z/XYZr'   g        r   r:   /Zoomr   zUnknown Destination Type: )_filtered_childrenfit_typefit_argsr   r  r0   r,   r   rE   r.   TALEFTTOPTFFIT_RBOTTOMRIGHTFIT_HFIT_BHrS   r-   FIT_VFIT_BVFITFIT_Br%   )rF   r  r  r  typargss         rI   r  zDestination.__init__C  s    .0l|!!$'''%5e%<%<Z!!"$(Z  !$'Z  ! &==4yy1}}L--...4yy1}}L--...4yy1}}L--...
 	Z(()Z''(Z(()))YY!^^DBH__ Z(()Z	**+Z))*Z''(((RXry)))>.2+j(())) > > >/9||j(())))>RXry)))?/3,j))*** ? ? ?0:j))****?RVRX&&&DCCCCDDDs$   H5 52I+*I+	J) )2KKr>   c                 v     t                               d           d         g fddD             z             S )Nr  r   c                 (    g | ]}|v |         S rK   rK   )r^   r_   rF   s     rI   r   z*Destination.dest_array.<locals>.<listcomp>|  s.       99 Q99rJ   )/Left/Bottom/Right/Topr  )r>   r   rd   s   `rI   
dest_arrayzDestination.dest_arrayx  sX    \\'""DM2   H  
 
 	
rJ   r{   r|   c                    |t          dd           |                    d           t          d          }|                    |           |                    d           | j        }|                    |           t          d          }|                    |           |                    d           t          d          }|                    |           |                    d           |                    d	           d S )
Nr~   r   r   z/Dr   z/Sz/GoTor   r   )r   r   r,   r   r  )rF   r{   r|   r   r   value_ss         rI   r   zDestination.write_to_stream  s    %&A7   	WF###Tf%%%F###TW%%'''UUrJ   c                 ,    |                      d          S )z3Read-only property accessing the destination title.r  r   rd   s    rI   r  zDestination.title  s     xx!!!rJ   c                 ,    |                      d          S )z9Read-only property accessing the destination page number.r  r  rd   s    rI   r  zDestination.page       xx   rJ   c                 ,    |                      d          S )z2Read-only property accessing the destination type.r   r  rd   s    rI   r  zDestination.typ  r  rJ   c                 .    |                      dd          S )z-Read-only property accessing the zoom factor.r  Nr  rd   s    rI   zoomzDestination.zoom       xx&&&rJ   c                 .    |                      dd          S )z<Read-only property accessing the left horizontal coordinate.r  Nr  rd   s    rI   leftzDestination.left  r  rJ   c                 .    |                      dd          S )z=Read-only property accessing the right horizontal coordinate.r  Nr  rd   s    rI   rightzDestination.right  s     xx$'''rJ   c                 .    |                      dd          S )z9Read-only property accessing the top vertical coordinate.r  Nr  rd   s    rI   topzDestination.top  s     xx%%%rJ   c                 .    |                      dd          S )z<Read-only property accessing the bottom vertical coordinate.r  Nr  rd   s    rI   bottomzDestination.bottom  s     xx	4(((rJ   c           
          |                      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*   rd   s    rI   colorzDestination.color  s@     xx+{1~~{1~~{1~~NOO
 
 	
rJ   c                 .    |                      dd          S )z_
        Read-only property accessing the font type.

        1=italic, 2=bold, 3=both
        r  r   r  rd   s    rI   font_formatzDestination.font_format  s     xxa   rJ   c                 .    |                      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  rd   s    rI   outline_countzDestination.outline_count  s     xx$'''rJ   )r@   r>   r[   )"r   r   r   r  r  r
   r   __annotations__rm   r   r.   r+   r-   r2   r  r  r  r   rn   r   r  r   r  r  r  r*   r   r"  r$  r&  r(  r   r*  r,  rK   rJ   rI   r  r  .  s         $ 	 	(   3E3E L.*>NNO3E 	3E
 
3E 3E 3E 3Ej 
 
 
 X
 MQ  27c58H2I	   . "x} " " " X" !hsm ! ! ! X! !Xc] ! ! ! X! 'hsm ' ' ' X' 'h{+ ' ' ' X' (x, ( ( ( X( &Xk* & & & X& )- ) ) ) X) 
x. 
 
 
 X
 !Xo6 ! ! ! X! (x} ( ( ( X( ( (rJ   r  r[   )^
__author____author_email__loggingr   sysior   mathr   typingr   r   r   r   r	   r
   r   r   r   r   r   
_protocolsr   r   r   _utilsr   r   r   r   r   r   r   r   r   	constantsr   r   r   r    rc  r!   r   r"   r  r#   r  errorsr$   r%   r&   _baser(   r)   r*   r+   r,   r-   r.   r/   r0   r1   _fitr2   _image_inliner3   r4   r5   r6   r7   r8   r9   version_infor<   typing_extensions	getLoggerr   loggerNumberSignsr   r  r>   r   r  r9  rU   rJ  r[  r}  rm   r   r   r  r  rK   rJ   rI   <module>rA     s  : 
/   				 



                                      V U U U U U U U U U
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
         
 * ) ) ) ) ) . . . . . . * * * * * * - - - - - - O O O O O O O O O O                                           I H H H H H H Hw&&&&&&		8	$	$"*@AAa a a a a$s)Y a a aH] ] ] ] ]tCH~y ] ] ]@P* P* P* P* P*! P* P* P*f+S +T + + + +"p p p p p# p p pf	 	 	 	 	, 	 	 	% % % % %, % % %Pb8 b8 b8 b8 b8' b8 b8 b8P	 DH3
 3
3
	#	$3
 4d3ic3h?@3
 9c3-.	3
 3
 3
 3
l`6 `6 `6 `6 `6J `6 `6 `6Fm( m( m( m( m(* m( m( m( m( m(rJ   