
    :Qg                        d Z dZddlZddl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 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 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$ ddl%m&Z&m'Z'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 ddlm2Z2m3Z3  ejh                  e5      Z6dZ7 ejp                  d      Z9 G d de:e0      Z; G d de<e0      Z= G d de=      Z>deddfdZ? G d de=      Z@ G d d e@      ZA G d! d"e@      ZB G d# d$eA      ZC	 d-d%ed&ed'edeDe
eD   eeEeDf   f   dee0eEeDeCf   fd(ZF G d) d*e>      ZG G d+ d,e>      ZHy).zMathieu Fenniakzbiziqe@mathieu.fenniak.net    N)BytesIO)AnyDictIterableListOptionalTupleUnioncast   )	WHITESPACES
StreamTypeb_deprecate_with_replacementhex_strlogger_warningread_non_whitespaceread_until_regexskip_over_comment)CheckboxRadioButtonAttributesFieldDictionaryAttributes)FilterTypes)OutlineFontFlag)StreamAttributes)TypArguments)TypFitArguments)STREAM_TRUNCATED_PREMATURELYPdfReadErrorPdfStreamError   )BooleanObjectFloatObjectIndirectObject
NameObject
NullObjectNumberObject	PdfObjectTextStringObject)read_hex_string_from_streamread_string_from_streams   +-s   [+-]?(\d+)\s+(\d+)\s+R[^a-zA-Z]c                       e Zd Zdee   fdZdededee	f   ddfdZ
dededee	f   ddfdZe	 ddeded	edeee   eeef   f   dd fd
       Zedededd fd       Zy)ArrayObjectreturnc                     t        |       S )zS
        Emulate DictionaryObject.items for a list
        (index, object)
        )	enumerateselfs    \/var/www/html/answerous/venv/lib/python3.12/site-packages/PyPDF2/generic/_data_structures.pyitemszArrayObject.itemsL   s    
     streamencryption_keyNc                     |j                  d       | D ]%  }|j                  d       |j                  ||       ' |j                  d       y )N   [    s    ])writewrite_to_stream)r1   r5   r6   datas       r2   r;   zArrayObject.write_to_streamS   sI     	T 	9DLL  8	9 	Ur4   c                 @    t        dd       | j                  ||       y NwriteToStreamr;   r   r;   r1   r5   r6   s      r2   r?   zArrayObject.writeToStream\        	#?4EFV^4r4   pdfforced_encodingc                    t               }| j                  d      }|dk7  rt        d      	 | j                  d      }|j                         r"| j                  d      }|j                         r"| j	                  dd       | j                  d      }|dk(  r	 |S | j	                  dd       |j                  t        | ||             )Nr    r8   zCould not read array   ])r,   readr   isspaceseekappendread_object)r5   rC   rD   arrtmptok	peekaheads          r2   read_from_streamzArrayObject.read_from_streamb   s     mkk!n$;566++a.C++-kk!n ++-KKAAID  
 KKAJJ{63@A r4   c                 F    t        dd       t        j                  | |      S NreadFromStreamrQ   )r   r,   rQ   r5   rC   s     r2   rT   zArrayObject.readFromStream{   s#     	##35GH++FC88r4   N)__name__
__module____qualname__r   r   r3   r   r
   strbytesr;   r?   staticmethodr   r   intrQ   rT    r4   r2   r,   r,   K   s    x}  27c58H2I	5 527c58H2I5	5  HL tS$s)T#s(^CD 
	 0 99!$9	9 9r4   r,   c                   H   e Zd Z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ee   fd
Ze
dee   fd       Zdededeef   ddfdZdededeef   ddfdZe	 ddedededeee   eeef   f   dd fd       Zedededd fd       Zy)DictionaryObjectkeyr-   c                 .    t         j                  | |      S rV   )dict__getitem__r1   ra   s     r2   raw_getzDictionaryObject.raw_get   s    c**r4   valuec                     t        |t              st        d      t        |t              st        d      t        j	                  | ||      S Nzkey must be PdfObjectzvalue must be PdfObject)
isinstancer'   
ValueErrorrc   __setitem__r1   ra   rg   s      r2   rl   zDictionaryObject.__setitem__   sC    #y)455%+677c511r4   Nc                     t        |t              st        d      t        |t              st        d      t        j	                  | ||      S ri   )rj   r'   rk   rc   
setdefaultrm   s      r2   ro   zDictionaryObject.setdefault   sA    #y)455%+677tS%00r4   c                 J    t         j                  | |      j                         S rV   )rc   rd   
get_objectre   s     r2   rd   zDictionaryObject.__getitem__   s    c*5577r4   c                     ddl m} | j                  dd      }|y|j                         }t	        ||      s ||      }|| t        d      <   |S )a  
        Retrieve XMP (Extensible Metadata Platform) data relevant to the
        this object, if available.

        Stability: Added in v1.12, will exist for all future v1.x releases.
        @return Returns a {@link #xmp.XmpInformation XmlInformation} 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)xmprs   getrq   rj   r$   )r1   rs   metadatas      r2   xmp_metadatazDictionaryObject.xmp_metadata   sV     	)88K.&&((N3%h/H,4DK()r4   c                 2    t        dd       | j                  S )W
        .. deprecated:: 1.28.3

            Use :meth:`xmp_metadata` instead.
        getXmpMetadatarw   r   rw   r0   s    r2   rz   zDictionaryObject.getXmpMetadata   s     	##3^D   r4   c                 2    t        dd       | j                  S )ry   xmpMetadatarw   r{   r0   s    r2   r}   zDictionaryObject.xmpMetadata        	#=.A   r4   r5   r6   c                    |j                  d       t        | j                               D ]K  \  }}|j                  ||       |j                  d       |j                  ||       |j                  d       M |j                  d       y )N   <<
r9      
   >>)r:   listr3   r;   )r1   r5   r6   ra   rg   s        r2   r;   z DictionaryObject.write_to_stream   st     	Wtzz|, 	 JC7LL!!&.9LL		 
 	Ur4   c                 @    t        dd       | j                  ||       y r>   r@   rA   s      r2   r?   zDictionaryObject.writeToStream   rB   r4   rC   rD   c           
         dt         dt         dt        t            dt        dt         f
fddt        dt        dt        ffd}| 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        |       }| j                  dd       t        | ||      }|j-                  |      s|||<   nHdt        | j                                d| }||j                   rt        |      t%        |t&               | 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t        d      |t.        j0                     }t3        |t4              r3| j                         }|j7                  |      }| j                  |d       | j                         }| j                  |      |d<   t        |       }| j                  d      }||z   d k7  r| j                         }| j                  d!d       | j                  d"      }|d k(  r|d   d d |d<   n|j                   s/| j                  |d        || |      |d<   | j                         }nP| j                  |d       t        d#t        | j                                d$|d%|d&      | j                  |d       d|v rt8        j;                  |      S t)               }
|
j+                  |       |
S # t        $ rl}	|%|j                   rt        |	j#                               t%        |	j#                         t&               t)               }
|
j+                  |       |
cY d }	~	S d }	~	ww xY w)'Npp1rem_gensrC   r-   c                     |j                   |d      }|D ]  }|||   kD  s| ||   k  s||   } t        |      dk(  r|S  | ||dd  |      S )Nr   r    )xreflen)r   r   r   rC   loget_next_obj_poss         r2   r   z;DictionaryObject.read_from_stream.<locals>.get_next_obj_pos   sn     !%A !9QqT1B 8}!	'2x|SAAr4   r5   c                 N    | 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    	   endstreamr   z6Unable to find 'endstream' marker for obj starting at .	   )tellr   r   rH   findr   rJ   )r5   rC   eoncurrrwr   r   s         r2   read_unsized_from_steamzBDictionaryObject.read_from_stream.<locals>.read_unsized_from_steam   s    "6;;=%chhMPQQC;;=DS6;;=01B%A1u"LTFRST  KKq1%gA;r4   r      <<zDictionary read error at byte z: stream must begin with '<<'       %rF   r       >z+Multiple definitions in dictionary at byte z	 for key    s   s   treamr9   )r      z)Stream data must be followed by a newliner   r   zStream length not definedr   __streamdata__   r   ir   z7Unable to find 'endstream' marker after stream at byte z (nd='z', end='z').)r]   r   r   r   r[   rH   r   r   r   r   rJ   r   r   r   rL   	Exceptionstrict__repr__r   rW   r`   updateru   SALENGTHrj   r#   rq   StreamObjectinitialize_from_dictionary)r5   rC   rD   r   rN   r<   rO   ra   rg   excretvalmsgposseollengthtpstartendstreamendr   s                        @r2   rQ   z!DictionaryObject.read_from_stream   s$   
	B
	B
	B'+Cy
	B7:
	B
	B	J 	S 	U 	 kk!n%<01G0H I. .   "%f-Cg~B"!&)$%ABBd{AKKA!&#.)&1B"#FCA 88C=!S	 Bv{{}-.iu>  ?szz&s++sH-M P kkm'9Q83++a.C +kk!n +.($%PQQe|;;q>U*KKA&yy$$%@AA"))_F&.1KKM/Aq![[]F%+[[%8D!"#F+A{{1~HH- kkmC#kk!n,&-12B-CCR-HD)*KK*-DVS-QD)* ++-CKKQ'&Q"6;;=12&HSGSVX 
 KKQt#::4@@%'FMM$MY  ?szz&s||~66s||~x8)+d#s   36O' '	Q0A!QQQc                 F    t        dd       t        j                  | |      S rS   )r   r`   rQ   rU   s     r2   rT   zDictionaryObject.readFromStream]  s#     	##35GH00==r4   rV   )rW   rX   rY   r   rf   rl   r   ro   r'   rd   propertyrw   rz   r}   r   r
   rZ   r[   r;   r?   r\   r   r   r]   rQ   rT   r^   r4   r2   r`   r`      s   +3 +3 +2s 23 23 21c 1(3- 13 18s 8y 8 hy1  ,	!	)		! !Xi0 ! !	 	27c58H2I			5 527c58H2I5	5  HLEEE tS$s)T#s(^CDE 
	E EN >>!$>	> >r4   r`   c            
           e Zd ZddZde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dfdZdedd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dZy)
TreeObjectr-   Nc                 .    t         j                  |        y rV   )r`   __init__r0   s    r2   r   zTreeObject.__init__f  s    !!$'r4   c                 <    t        ddd       | j                         S )NhasChildrenhas_children4.0.0)r   r   r0   s    r2   r   zTreeObject.hasChildreni  s    "=.'J  ""r4   c                 
    d| v S )N/Firstr^   r0   s    r2   r   zTreeObject.has_childrenm  s    4r4   c                 "    | j                         S rV   )childrenr0   s    r2   __iter__zTreeObject.__iter__p  s    }}r4   c              #      K   | j                         sy | t        d         }|j                         }	 | || t        d         k(  ry |j                  t        d            }|y |j                         }Dw)Nr   /Last/Next)r   r$   rq   ru   )r1   	child_refchilds      r2   r   zTreeObject.childrens  s~       "H-.	$$&KZ011		*W"56I ((*E s   A5A7r   rC   c                 @    t        dd       | j                  ||       y )NaddChild	add_child)r   r   )r1   r   rC   s      r2   r   zTreeObject.addChild  s    ":{;uc"r4   c                 4   |j                         }|j                  |      }t        |t              sJ d| vr(|| t	        d      <   t        d      | t	        d      <   d }nt        t        | d         }|| t	        d      <   t        | t	        d         dz         | t	        d      <   |r?|j                  |      }t        |t              sJ ||t	        d      <   ||t	        d      <   |j                  |       }t        |t              sJ ||t	        d      <   y )	Nr   r   /Countr   r    /Prevr   /Parent)rq   get_referencerj   r#   r$   r&   r   r`   )r1   r   rC   	child_objprevprev_ref
parent_refs          r2   r   zTreeObject.add_child  s   $$&	!!),%000 4).DH%&)5aDH%&D $w-D %*Z !%1$z(7K2Lq2P%QZ!"((.Hh777-5Ij)*(-DG$%&&t,
*n555+5	*Y'(r4   c                 >    t        dd       | j                  |       y )NremoveChildremove_child)r   r   )r1   r   s     r2   r   zTreeObject.removeChild  s    "=.A% r4   r   r   curlastc                 \   |j                  t        d      d      }||rQ|j                         }|t        d      = || t        d      <   t        | t        d         dz
        | t        d      <   y| t        d         dk(  sJ | 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.r   Nr   r   r   r    r   )ru   r$   rq   r&   )r1   r   r   r   r   next_refnext_objs          r2   _remove_node_from_treez!TreeObject._remove_node_from_tree  sC    77:g.5<#..0Z01-5Z)*-9H-.2.Z)* Jx01Q666H-.H-.g&$.Z01 / #..008G,-,4Z() d{"{G,-,4Z())5d:h;O6PST6T)UDH%&r4   c                    |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   r$   rk   r   _reset_node_tree_relationship)
r1   r   r   foundr   r   cur_refr   last_refr   s
             r2   r   zTreeObject.remove_child  s   $$&	i 	1NOOz),-5IJJ!%j&:!;(/(:(:(<
7+,""$oi++D(CF HD'"c)j12((* o  ABB%i0r4   c                 p    t        d      | vrt        d      t        d| d         j                  |        y)z:
        remove the object from the tree it is in
        r   r   r   N)r$   rk   r   r   r0   s    r2   remove_from_treezTreeObject.remove_from_tree  s6     i ,NOOtI/<<TBr4   c                 >    t        ddd       | j                          y )N	emptyTree
empty_treer   )r   r   r0   s    r2   r   zTreeObject.emptyTree  s    ";gFr4   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$   )r1   r   r   s      r2   r   zTreeObject.empty_tree  s|     	5E((*I))4	5 h4'Z)*h4'Z)*g$&Z() 'r4   r-   N)rW   rX   rY   r   boolr   r   r   r   r   r   r   r   r   r   r   r   r   r   r^   r4   r2   r   r   e  s    (#T # d  # +(3- +#c # # #6s 6 6 68! ! !!V!V#&!V-0!V8;!V	!VF"1# "1$ "1HC
*r4   r   r   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.
    r   r   r   N)r$   )r   s    r2   r   r     sJ     	*Y'('i'j)*'i'j)* (r4   c                   6    e Zd ZddZdef fdZeded   fd       Zej                  dd       Zede
fd	       Zej                  de
ddfd
       Z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edeee
f   ded   fd       ZddZddZ xZS )r   r-   Nc                      d | _         d | _        y rV   )_StreamObject__datadecoded_selfr0   s    r2   r   zStreamObject.__init__  s    %);?r4   c                 T    t         |          }|t        | j                        z  }|S rV   )superhash_value_datar   _data)r1   r<   	__class__s     r2   r   zStreamObject.hash_value_data  s'    w&(4::r4   DecodedStreamObjectc                 2    t        dd       | j                  S NdecodedSelfr   r   r   r0   s    r2   r   zStreamObject.decodedSelf      "=.A   r4   rg   c                 *    t        dd       || _        y r   r   r1   rg   s     r2   r   zStreamObject.decodedSelf#      "=.A!r4   c                     | j                   S rV   r   r0   s    r2   r   zStreamObject._data(  s    {{r4   c                     || _         y rV   r  r   s     r2   r   zStreamObject._data,  s	    r4   r5   r6   c                 d   t        t        | j                              | t        t        j
                        <   t        j                  | ||       | t        j
                  = |j                  d       | j                  }|rddl	m
}  |||      }|j                  |       |j                  d       y )Ns   
stream
r   )RC4_encrypts
   
endstream)r&   r   r   r$   r   r   r`   r;   r:   	_securityr  )r1   r5   r6   r<   r  s        r2   r;   zStreamObject.write_to_stream0  s     '33tzz?&CZ		"#((v~FO]#zz/~t4DT^$r4   r<   )EncodedStreamObjectr   c                 ,    t         j                  |       S rV   )r   r   )r<   s    r2   initializeFromDictionaryz%StreamObject.initializeFromDictionary?  s     66t<<r4   c                     t         j                  | v rt               }n
t               }| d   |_        | d= | t         j
                  = |j                  |        |S )Nr   )r   FILTERr  r   r   r   r   )r<   r   s     r2   r   z'StreamObject.initialize_from_dictionaryE  sR    
 99(*F(*F,-!"Odr4   c                 :    t        dd       | j                         S )NflateEncodeflate_encode)r   r  r0   s    r2   r  zStreamObject.flateEncodeT  s    "=.A  ""r4   c                    ddl m} t        j                  | v r| t        j                     }t	        |t
              r*|j                  dt        t        j                               nCt               }|j                  t        d             |j                  |       |}nt        d      }t               }||t        t        j                        <   |j                  | j                        |_        |S )Nr   )FlateDecoder   z/FlateDecode)filtersr  r   r
  rj   r,   insertr$   FTFLATE_DECODErK   r  encoder   )r1   r  fnewfr   s        r2   r  zStreamObject.flate_encodeX  s    )99RYYA![)Jr78"}J~67A>*A$&()z"))$%"))$**5r4   r   )rg   r   r-   N)r-   r  )rW   rX   rY   r   r[   r   r   r   r   setterr   r   r   r
   rZ   r;   r\   r   r  r   r  r  __classcell__)r   s   @r2   r   r     s(   @ 
 !X&;< ! ! " " s   \\3 4  % %27c58H2I%	% =38n=	;	<= =
 38n	;	< #r4   r   c                   D    e Zd ZdefdZdedefdZdefdZdeddfdZy)r   r-   c                     | j                   S rV   r   r0   s    r2   get_datazDecodedStreamObject.get_datam  s    zzr4   r<   c                     || _         y rV   r  r1   r<   s     r2   set_datazDecodedStreamObject.set_datap  s	    
r4   c                 2    t        dd       | j                  S NgetDatar  )r   r   r0   s    r2   r"  zDecodedStreamObject.getDatas  s    "9j9zzr4   Nc                 >    t        dd       | j                  |       y NsetDatar  r   r  r  s     r2   r%  zDecodedStreamObject.setDataw  s    "9j9dr4   )rW   rX   rY   r   r  r  r"  r%  r^   r4   r2   r   r   l  s@    # S S  C D r4   r   c                       e Zd ZddZeded   fd       Zej                  deddfd       Zde	de
ef   fdZde	de
ef   fd	Zd
eddfdZd
eddfdZy)r  r-   Nc                     d | _         y rV   )r   r0   s    r2   r   zEncodedStreamObject.__init__}  s
    ;?r4   r   c                 2    t        dd       | j                  S r   r   r0   s    r2   r   zEncodedStreamObject.decodedSelf  r   r4   rg   c                 *    t        dd       || _        y r   r   r   s     r2   r   zEncodedStreamObject.decodedSelf  r   r4   c                 ^   ddl m} | j                  | j                  j                         S t	               } ||       |_        t        | j                               D ]<  \  }}|t        j                  t        j                  t        j                  fvs8|||<   > || _        |j
                  S )Nr   )decode_stream_data)r  r,  r   r  r   r   r   r3   r   r   r
  DECODE_PARMS)r1   r,  decodedra   rg   s        r2   r  zEncodedStreamObject.get_data  s    0($$--// *+G.t4GM"4::<0 )
Uryy"))R__EE#(GCL) !(D== r4   c                 :    t        dd       | j                         S r!  )r   r  r0   s    r2   r"  zEncodedStreamObject.getData  s    "9j9}}r4   r<   c                     t        d      )Nz7Creating EncodedStreamObject is not currently supported)r   r  s     r2   r  zEncodedStreamObject.set_data  s    TUUr4   c                 <    t        dd       | j                  |      S r$  r&  r  s     r2   r%  zEncodedStreamObject.setData  s    "9j9}}T""r4   r   )rW   rX   rY   r   r   r   r   r  r   r
   rZ   r[   r  r"  r   r  r%  r^   r4   r2   r  r  |  s    @ !X&;< ! ! "!4 " " "!%c5 01 !"tS%/0 VS VT V#C #D #r4   r  c                       e Zd Z	 ddedededeee   eeef   f   ddfdZ	de
ddfdZde
deeef   fdZedefd	       Zej                   d
eeef   ddfd       Zy)ContentStreamNr5   rC   rD   r-   c                    || _         g | _        |j                         }t        |t              r[d}|D ]H  }|t        |j                         j                               z  }t        |      dk(  s	|d   dk7  sD|dz  }J t        |      }n*|j                         }|J t        |      }t        |      }|| _	        | j                  |       y )Nr4   r   rF   r   )rC   
operationsrq   rj   r,   r   r  r   r   rD   $_ContentStream__parse_content_stream)	r1   r5   rC   rD   r<   r   stream_bytesstream_datastream_data_bytess	            r2   r   zContentStream.__init__  s     
 24 ""$fk*D "1<<>22455t9>T"X%6EMD" #4=L //+K*** ";"#45L.##L1r4   c                    |j                  dd       g }	 t        |      }|dk(  s|dk(  ry |j                  dd       |j                         s|dv rvt        |t        j
                  d      }|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   Tr4   rF   r    )   '   "   BI   INLINE IMAGEr   r   r   )rJ   r   isalphar   r$   delimiter_pattern_read_inline_imager5  rK   rH   rL   rD   )r1   r5   operandspeekoperatoriis         r2   __parse_content_streamz$ContentStream.__parse_content_stream  s   Aq57&v.Ds{daiKKA||~!5+FJ4P4PRVWu$ $r>)>008BOO**B+@AOO**Hh+?@!H .0!;;q>D .0 FD$:N:N OP3 r4   c                    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 t               }	 |j                  d      }|st        d	      |j                  d
      }	|	dk(  r|j                  |       n|j                  |d|	        |j                  |	t        |      z
  d       |j                  d      }|j                  d      }
|
dk(  r||	dz
  |	 t        v rz|j                  d      }||
z   }d}|t        v r!d}||z  }|j                  d      }|t        v r!|r|j                  dd       nI|j                  dd       |j                  |       n#|j                  dd       |j                  |       M||j                         dS )NTrF   r       I   r   s   IDi    zUnexpected end of stream   Er   F)settingsr<   )r`   r   rJ   rL   rC   rH   r   r   r   r:   r   r   getvalue)r1   r5   rL  rO   ra   rg   rN   r<   bufloctok2tok3infohas_q_whitespaces                 r2   rB  z ContentStream._read_inline_image  s    $%%f-CKKAd{fdhh/C%f-CKKA1E!HSM  kk!n2Aw%y++d#C"#=>>((4.Cby

3 

3q:& C#c(NA.kk!n{{1~4<Ca#$6+$E!;;q>D:D',$+-+/(%{{1~ +- (B*B*

4(KKA&JJsOK L %dmmo>>r4   c                 $   t               }| j                  D ]  \  }}|dk(  r|j                  d       t               }|d   j                  |d        |j                  |j	                         dd        |j                  d       |j                  |d          |j                  d       nD|D ]%  }|j                  |d        |j                  d	       ' |j                  t        |             |j                  d
        |j	                         S )Nr>  r=  rL  r   s   ID r<   s   EIr9   r   )r   r5  r:   r;   rM  r   )r1   newdatarC  rE  dicttextops         r2   r   zContentStream._data!  s    )"&// 	!Hh?*e$"9$44XtDh//1!B78f%hv./e$" (B&&w5MM$'( bl+MM% 	! !!r4   rg   c                 J    | j                  t        t        |                   y rV   )r6  r   r   r   s     r2   r   zContentStream._data5  s    ##GBuI$67r4   rV   )rW   rX   rY   r   r
   rZ   r   r   r]   r   r   r6  rB  r   r[   r   r  r^   r4   r2   r3  r3    s    
 HL	22 2 tS$s)T#s(^CD	2
 
2>QZ QD Q<:? :?S#X :?x "u " "& \\85e, 8 8 8r4   r3  r5   rC   rD   c           
         | 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	k(  s|d
k(  rt        j                  |       S |dk(  rt        | |      S |dk(  r0| j                  d      dk(  r| j                  dd       t               S |dk(  rt        j                  |       S |dk(  r]|dvr/| j                  d      }t        |      dk  rt        d      |dvr/t        |       }| j                  dd       t        | ||      S |dv rm| j                  d      }| j                  t        |       d       t        j                  |      t!        j                  | |      S t#        j                  |       S | j                  dd       t%        d|d| j'                          d| j                  d      j)                                )Nr    rF      /   <r   rU  r   r8      t   f   (   e   s   endobji   nr   r?  r   zFile ended unexpectedly.s   0123456789+-.   iz(Invalid Elementary Object starting with z @z: P   )rH   rJ   r$   rQ   r`   r)   r,   r!   r*   r%   r   r   r   rL   IndirectPatternmatchr#   r&   r   r   r   )r5   rC   rD   rO   rD  s        r2   rL   rL   :  s+   
 ++a.C
KKA
d{**6377	{{1~B5=#44VS/RR.vGG	++FCII	t--f55	&v??	Q94B|	**622	'++a.C 3x1}$%?@@ ' "&)B6388	 	 {{2SYJ"  &2!2263??0088C6sgRbQWQ\Q\]_Q`QiQiQkPlm
 	
r4   c                      e Zd ZdZde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	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()<PyPDF2.PdfReader.get_fields>`
    r<   r-   Nc                     t         j                  |        t        j                         t	        j                         z   }|D ]  }	 ||   | t        |      <    y # t        $ r Y #w xY wrV   )r`   r   r   
attributesr   r$   KeyError)r1   r<   field_attributesattrs       r2   r   zField.__init__y  so    !!$'%002+6689 	 % 	D)-dZ%&	  s   A	A%$A%c                 @    | j                  t        j                        S )z4Read-only property accessing the type of this field.)ru   r   r  r0   s    r2   
field_typezField.field_type       xx14455r4   c                 2    t        dd       | j                  S )zX
        .. deprecated:: 1.28.3

            Use :py:attr:`field_type` instead.
        	fieldTypero  )r   ro  r0   s    r2   rr  zField.fieldType  s     	#;=r4   c                 @    | j                  t        j                        S )z6Read-only property accessing the parent of this field.)ru   r   Parentr0   s    r2   parentzField.parent  s     xx18899r4   c                 @    | j                  t        j                        S )z4Read-only property accessing the kids of this field.)ru   r   Kidsr0   s    r2   kidsz
Field.kids  s     xx16677r4   c                 @    | j                  t        j                        S )z4Read-only property accessing the name of this field.)ru   r   Tr0   s    r2   namez
Field.name  s     xx13344r4   c                 @    | j                  t        j                        S )z>Read-only property accessing the alternate name of this field.)ru   r   TUr0   s    r2   alternate_namezField.alternate_name  rp  r4   c                 2    t        dd       | j                  S )z\
        .. deprecated:: 1.28.3

            Use :py:attr:`alternate_name` instead.
        altNamer~  )r   r~  r0   s    r2   r  zField.altName  s     	#9.>?"""r4   c                 @    | j                  t        j                        S )z
        Read-only property accessing the mapping name of this field. This
        name is used by PyPDF2 as a key in the dictionary returned by
        :meth:`get_fields()<PyPDF2.PdfReader.get_fields>`
        )ru   r   TMr0   s    r2   mapping_namezField.mapping_name       xx14455r4   c                 2    t        dd       | j                  S )zZ
        .. deprecated:: 1.28.3

            Use :py:attr:`mapping_name` instead.
        mappingNamer  )r   r  r0   s    r2   r  zField.mappingName  r~   r4   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).
        )ru   r   Ffr0   s    r2   flagszField.flags  s     xx14455r4   c                 @    | j                  t        j                        S )zr
        Read-only property accessing the value of this field. Format
        varies based on field type.
        )ru   r   Vr0   s    r2   rg   zField.value  s     xx13344r4   c                 @    | j                  t        j                        S )z=Read-only property accessing the default value of this field.)ru   r   DVr0   s    r2   default_valuezField.default_value  rp  r4   c                 2    t        dd       | j                  S )z[
        .. deprecated:: 1.28.3

            Use :py:attr:`default_value` instead.
        defaultValuer  )r   r  r0   s    r2   r  zField.defaultValue  s     	#>?C!!!r4   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.
        )ru   r   AAr0   s    r2   additional_actionszField.additional_actions  r  r4   c                 2    t        dd       | j                  S )z`
        .. deprecated:: 1.28.3

            Use :py:attr:`additional_actions` instead.
        additionalActionsr  )r   r  r0   s    r2   r  zField.additionalActions  s     	##68LM&&&r4   )rW   rX   rY   __doc__r   rZ   r   r   r   r   r$   ro  rr  r`   ru  r,   rx  r{  r~  r  r  r  r]   r  rg   r  r  r  r  r^   r4   r2   rh  rh  q  s   
T#s(^ 
 
 6HZ0 6 6 8J/   :!12 : : 8h{+ 8 8 5hsm 5 5 6 6 6 ## # # 6hsm 6 6 !Xc] ! ! 6x} 6 6 5x} 5 5 6x} 6 6 "hsm " " 6H-=$> 6 6 '8,<#= ' 'r4   rh  c            
          e Zd ZdZdedeeeee	f   deeef   de
ddf
dZedefd	       Zdefd
Z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e   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 8.2.1 of the PDF 1.6 reference.

    :param str title: Title of this destination.
    :param IndirectObject page: Reference to the page of this destination. Should
        be an instance of :class:`IndirectObject<PyPDF2.generic.IndirectObject>`.
    :param str typ: How the destination is displayed.
    :param args: Additional arguments may be necessary depending on the type.
    :raises PdfReadError: If destination type is invalid.

    .. list-table:: Valid ``typ`` arguments (see PDF spec for details)
       :widths: 50 50

       * - /Fit
         - No additional arguments
       * - /XYZ
         - [left] [top] [zoomFactor]
       * - /FitH
         - [top]
       * - /FitV
         - [left]
       * - /FitR
         - [left] [bottom] [right] [top]
       * - /FitB
         - No additional arguments
       * - /FitBH
         - [top]
       * - /FitBV
         - [left]
    titlepagetypargsr-   Nc                 f   t         j                  |        t        |      | t        d      <   || t        d      <   || t        d      <   |dk(  rG|\  | t        t        j
                        <   | t        t        j                        <   | t        d      <   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        j$                  fv ry t'        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/Page/Typez/XYZ/ZoomzUnknown Destination Type: )r`   r   r(   r$   TALEFTTOPTFFIT_RBOTTOMRIGHTFIT_HFIT_BHr   r%   FIT_VFIT_BVFITFIT_Br   )r1   r  r  r  r  s        r2   r   zDestination.__init__  s    	!!$'%5e%<Z!"$(Z !$'Z ! &=
 	Z()Z'(Z()BHH_ Z()Z		*+Z)*Z'(RXXryy))>.2+j() RXXryy))?/3,j)* RVVRXX&&!;C7CDD  >/9|j()>
  ?0:j)*?s$   ;G =H  -G=<G= -H0/H0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,   rf   )r1   xs     r2   
dest_arrayzDestination.dest_arrayC  sR    \\'"DM2 I9 Q
 	
s   8
c                 2    t        dd       | j                  S )zX
        .. deprecated:: 1.28.3

            Use :py:attr:`dest_array` instead.
        getDestArrayr  )r   r  r0   s    r2   r  zDestination.getDestArrayN  s     	#><@r4   r5   r6   c                    |j                  d       t        d      }|j                  ||       |j                  d       | j                  }|j                  ||       t        d      }|j                  ||       |j                  d       t        d      }|j                  ||       |j                  d       |j                  d       y )Nr   z/Dr9   z/Sz/GoTor   r   )r:   r$   r;   r  )r1   r5   r6   ra   rg   value_ss         r2   r;   zDestination.write_to_streamW  s     	WFN3Tfn5FN3TW%7UUr4   c                 $    | j                  d      S )z3Read-only property accessing the destination title.r  ru   r0   s    r2   r  zDestination.titlej  s     xx!!r4   c                 $    | j                  d      S )z9Read-only property accessing the destination page number.r  r  r0   s    r2   r  zDestination.pageo       xx  r4   c                 $    | j                  d      S )z2Read-only property accessing the destination type.r  r  r0   s    r2   r  zDestination.typt  r  r4   c                 &    | j                  dd      S )z-Read-only property accessing the zoom factor.r  Nr  r0   s    r2   zoomzDestination.zoomy       xx&&r4   c                 &    | j                  dd      S )z<Read-only property accessing the left horizontal coordinate.r  Nr  r0   s    r2   leftzDestination.left~  r  r4   c                 &    | j                  dd      S )z=Read-only property accessing the right horizontal coordinate.r  Nr  r0   s    r2   rightzDestination.right  s     xx$''r4   c                 &    | j                  dd      S )z9Read-only property accessing the top vertical coordinate.r  Nr  r0   s    r2   topzDestination.top  s     xx%%r4   c                 &    | j                  dd      S )z<Read-only property accessing the bottom vertical coordinate.r  Nr  r0   s    r2   bottomzDestination.bottom  s     xx	4((r4   c           
      t    | j                  dt        t        d      t        d      t        d      g            S )zGRead-only property accessing the color in (R, G, B) with values 0.0-1.0z/Cr   )ru   r,   r"   r0   s    r2   colorzDestination.color  s2     xx+{1~{1~{1~NO
 	
r4   c                 &    | j                  dd      S )zDRead-only property accessing the font type. 1=italic, 2=bold, 3=bothz/Fr   r  r0   s    r2   font_formatzDestination.font_format  s     xxa  r4   c                 &    | j                  dd      S )z
        Read-only property accessing the outline count.
        positive = expanded
        negative = collapsed
        absolute value = number of visible descendents at all levels
        r   Nr  r0   s    r2   outline_countzDestination.outline_count  s     xx$''r4   )"rW   rX   rY   r  rZ   r
   r&   r#   r%   r`   r   r   r   r,   r  r  r   r[   r;   r   r  r]   r  r  r  r"   r  r  r  r  r  r   r  r  r^   r4   r2   r  r    s   @'E'E L.*>NNO'E 3$%	'E
 'E 
'ER 
K 
 
k  27c58H2I	& "x} " " !hsm ! ! !Xc] ! ! 'hsm ' ' 'h{+ ' ' (x, ( ( &Xk* & & )- ) ) 
x, 
 
 !Xo6 ! ! (x} ( (r4   r  rV   )I
__author____author_email__loggingreior   typingr   r   r   r   r   r	   r
   r   _utilsr   r   r   r   r   r   r   r   r   	constantsr   r   r   r  r   r   r   r   r  r   r  errorsr   r   r   _baser!   r"   r#   r$   r%   r&   r'   r(   r)   r*   	getLoggerrW   loggerNumberSignscompilere  r   r,   rc   r`   r   r   r   r   r  r3  rZ   r]   rL   rh  r  r^   r4   r2   <module>r     s~  : 
/   	  J J J
 
 
 * ' . * - O O	 	 	 I			8	$"**@A59$	 59p_>tY _>D_*! _*D
+S 
+T 
+U# Up,  (#, (#VP8' P8l DH4
4
	4
 4d3ic3h?@4
 9c3-.	4
nE'J E'Pm(* m(r4   