
     hj                        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 ddl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" 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7 ddlm8Z8m9Z9  ej:        e;          Z<dZ= ej>        d          Z? G d de@e4          ZA G d deBe4          ZC G d deC          ZDdeddfdZE G d deC          ZF G d  d!eF          ZG G d" d#eF          ZH G d$ d%eG          ZI	 d.d&ed'ee         d(edeJe
eJ         eeKeJf         f         dee4eKeJeIf         fd)ZL G d* d+eD          ZM G d, d-eD          ZNdS )/zMathieu Fenniakzbiziqe@mathieu.fenniak.net    N)BytesIO)AnyDictIterableListOptionalTupleUnioncast   )PdfReaderProtocolPdfWriterProtocol)
WHITESPACES
StreamTypeb_deprecate_with_replacementdeprecation_with_replacementhex_strlogger_warningread_non_whitespaceread_until_regexskip_over_comment)CheckboxRadioButtonAttributesFieldDictionaryAttributesOutlineFontFlag)FilterTypes)StreamAttributes)TypArguments)TypFitArguments)STREAM_TRUNCATED_PREMATURELYPdfReadErrorPdfStreamError   )BooleanObjectFloatObjectIndirectObject
NameObject
NullObjectNumberObject	PdfObjectTextStringObject)Fit)read_hex_string_from_streamread_string_from_streams   +-s   [+-]?(\d+)\s+(\d+)\s+R[^a-zA-Z]c                   J   e Zd Z	 	 ddededeeedf         ee         df         dd f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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dS )ArrayObjectF pdf_destforce_duplicateignore_fields.Nreturnc                 2   	 | 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+|	                    |                    |||                     |	                    |           t          d|          S )Clone object into pdf_dest.r0   clone)indirect_referencepdf	Exceptionr   _reference_cloner0   
isinstanceStreamObjectr8   appendhasattr)selfr2   r3   r4   arrdatadups          Z/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/pypdf/generic/_data_structures.pyr8   zArrayObject.cloneO   s5   	&*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    M3'''    
$$c                      t          |           S )z:Emulate DictionaryObject.items for a list (index, object).)	enumeraterA   s    rE   itemszArrayObject.itemsm   s        streamencryption_keyc                     |                     d           | D ]-}|                     d           |                    ||           .|                     d           d S )N   [    s    ])writewrite_to_stream)rA   rL   rM   rC   s       rE   rR   zArrayObject.write_to_streamq   sh     	T 	9 	9DLL  8888UrK   c                 T    t          ddd           |                     ||           d S NwriteToStreamrR   3.0.0r   rR   rA   rL   rM   s      rE   rU   zArrayObject.writeToStreamz   3     	%_6GQQQV^44444rK   r:   forced_encodingc                    t                      }|                     d          }|dk    rt          d          	 |                     d          }|                                r)|                     d          }|                                )|                     dd           |                     d          }|dk    rn;|                     dd           |                    t          | ||                     |S )Nr#   rO   zCould not read arrayT   ])r0   readr!   isspaceseekr?   read_object)rL   r:   rZ   rB   tmptok
peek_aheads          rE   read_from_streamzArrayObject.read_from_stream   s     mmkk!nn$;;5666	B++a..C++-- %kk!nn ++-- %KKAQJT!!KKAJJ{63@@AAA	B 
rK   c                 Z    t          ddd           t                              | |          S NreadFromStreamre   rV   )r   r0   re   rL   r:   s     rE   rh   zArrayObject.readFromStream   s.     	%%57I7SSS++FC888rK   Fr1   N)__name__
__module____qualname__r   boolr
   r	   strr   r8   r   r   rJ   r   bytesrR   rU   staticmethodr   r   r   intre   rh   r1   rK   rE   r0   r0   N   s        !&AC	( (#( ( U38_d3i=>	(
 
( ( ( (<x}     27c58H2I	   5 527c58H2I5	5 5 5 5  HL '( tS$s)T#s(^CD 
	   \0 99!29	9 9 9 \9 9 9rK   r0   c                   8   e Zd Z	 	 ddededeeedf         ee         df         dd fd	Z	d
d dededeeedf         ee         f         ddf
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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dS )DictionaryObjectFr1   r2   r3   r4   .Nr5   c                 B   	 | j         j        |k    r|s| S n# t          $ r Y nw xY wt          d|                     |                                 ||                    }|g }t          |                                          dk    r|                    | |||           |S )r7   ru   Nr   )	r9   r:   r;   r   r<   	__class__lenkeys_clonerA   r2   r3   r4   d__s        rE   r8   zDictionaryObject.clone   s    	&*h666 	 	 	D	 !!$.."2"2HoNN
 
  Msxxzz??aJJtXFFF
rF   srcc           
      v   t          fddD                       rt                    dD ]}|D ]}g }|v r|| vrt                              |          t                    rt          |         t
                    rf                    dd          vt          t
          |                                       dd          G                    dd          t          t
          |                                       dd          k    rt          d|                   }| }	|t          d|                    |	                                ||                    }
|
                    ||
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:
        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)r=   raw_getr&   ru   getr   ).0fieldr4   r}   s     rE   	<genexpr>z*DictionaryObject._clone.<locals>.<genexpr>   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
 
 
 
 
 
rK   )/Next/Prev/N/V))r   r   )r   r   r   Nru   r9   r8   )anylistr=   r   r&   ru   r   r   r<   rw   r?   r9   r'   r;   rz   rJ   r>   r@   r8   )rA   r}   r2   r3   r4   lstkobjscur_objprev_objclonscvvvs    `  `          rE   rz   zDictionaryObject._clone   sR   "  
 
 
 
 
 8
 
 
 
 
 6	R !//M9 (R (R 'R 'R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 AE.AA A BF%1#' 2 ' 8 8$+$5$5$7$7?!" !"$ $D !KK$888#+#7#7#76:6MHZ]]3'+H/#*c>>.2GG.23Ewqz.R.RG#, / / /*./! &1$ %) R RDAqHHQ/=QQQQO'RR IIKK 	 	DAq%%a.. "1&:;; 4/3,?MJJB0<<<.0.CD**++d]] #1g../=III A'	 	s   F<<G
Gkeyc                 8    t                               | |          S rk   )dict__getitem__rA   r   s     rE   r   zDictionaryObject.raw_get  s    c***rK   valuec                     t          |t                    st          d          t          |t                    st          d          t                              | ||          S Nzkey must be PdfObjectzvalue must be PdfObject)r=   r*   
ValueErrorr   __setitem__rA   r   r   s      rE   r   zDictionaryObject.__setitem__  s\    #y)) 	64555%++ 	86777c5111rK   c                     t          |t                    st          d          t          |t                    st          d          t                              | ||          S r   )r=   r*   r   r   
setdefaultr   s      rE   r   zDictionaryObject.setdefault  sZ    #y)) 	64555%++ 	86777tS%000rK   c                 \    t                               | |                                          S rk   )r   r   
get_objectr   s     rE   r   zDictionaryObject.__getitem__"  s$    c**55777rK   c                     ddl m} |                     dd          }|dS |                                }t	          ||          s ||          }|| t          d          <   |S )u  
        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.
        See Table 315 – Additional entries in a metadata stream dictionary

        Returns:
          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)xmpr   r   r   r=   r'   )rA   r   metadatas      rE   xmp_metadatazDictionaryObject.xmp_metadata%  s}     	)(((((88K..4&&(((N33 	5%~h//H,4DK(()rK   c                 2    t          ddd           | j        S )S
        Use :meth:`xmp_metadata` instead.

        .. deprecated:: 1.28.3
        getXmpMetadatar   rV   r   r   rI   s    rE   r   zDictionaryObject.getXmpMetadata?  s      	%%5~wOOO  rK   c                 2    t          ddd           | j        S )r   xmpMetadatar   rV   r   rI   s    rE   r   zDictionaryObject.xmpMetadataJ       	%]NGLLL  rK   rL   rM   c                 T   |                     d           t          |                                           D ][\  }}|                    ||           |                     d           |                    ||           |                     d           \|                     d           d S )N   <<
rP      
   >>)rQ   r   rJ   rR   )rA   rL   rM   r   r   s        rE   rR   z DictionaryObject.write_to_streamT  s     	Wtzz||,, 	  	 JC777LL!!&.999LLUrK   c                 T    t          ddd           |                     ||           d S rT   rW   rX   s      rE   rU   zDictionaryObject.writeToStream_  rY   rK   r:   rZ   c           
         dt           dt           dt          t                    dt          dt           f
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          |           }| 
                    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&                     |                                 }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           t.          j        |vrk||j        rt          d          t%          d|                                  t&                     t3          d          |t5          t.          j                  <   |t.          j                 }t7          |t8                    rC|                                 }|J |                    |          }| 
                    |d           |                                 }|dk    r|                     |          |d <   n%t=          | t?          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tB          "                    |          S t)                      }
|
                    |           |
S ))Npp1rem_gensr:   r5   c                     |j         |d                  }|D ]"}|||         k    r| ||         k     r||         }#t          |          dk    r|S  | ||dd          |          S )Nr   r#   )xrefrx   )r   r   r   r:   locoget_next_obj_poss         rE   r   z;DictionaryObject.read_from_stream.<locals>.get_next_obj_posk  s|     (8A;'C    A;;1s1v::QB8}}!!	''2x|SAAArK   rL   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 .	   )tellr   r   r^   findr!   r`   )rL   r:   eoncurrrwr   r   s         rE   read_unsized_from_steamzBDictionaryObject.read_from_stream.<locals>.read_unsized_from_steamw  s     #"6;;==%chMMPQQC;;==DS6;;==011B%%A1uu"TTTTT   KKq1%%%gAg;rK   r      <<zDictionary read error at byte z: stream must begin with '<<'T       %r\   r#      >z+Multiple definitions in dictionary at byte z	 for key    s   s   treamrP   )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').)#rs   r   r   r   rq   r^   r!   r   r   r   r`   r   r"   r    ra   r;   strict__repr__r   rl   ru   updater   SALENGTHr)   r'   r=   r&   r   r   recompiler>   initialize_from_dictionary)rL   r:   rZ   r   rb   rC   rc   r   r   excretvalmsgposr   eollengthtpstartendstreamendr   s                        @rE   re   z!DictionaryObject.read_from_streame  s3   
	B
	B
	B'+Cy
	B7H
	B
	B 
	B 
	B 
	B 
	B 
	B		%6		 	 	 	 	 	 kk!nn%<<.1G1G . . .    "&	.%f--Cg~~B"""!&))) C$%ABBBd{{AKKA!&#..)&11B"""#FCAA   ?sz?&s||~~666s||~~x888)++d### 88C== 
.!S		>v{{}}--> >8;> >  ?sz?&s+++sH---M&	.P 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***-D-DVS-Q-QD)* ++--CCKKQ'''&X"6;;==11X X9AX XMPX X X  ' .0 KKQt##::4@@@%''FMM$Ms    -AE4 4
G>>A5G93G>9G>c                 Z    t          ddd           t                              | |          S rg   )r   ru   re   ri   s     rE   rh   zDictionaryObject.readFromStream  s.     	%%57I7SSS00===rK   rj   rk   ) rl   rm   rn   r   ro   r
   r	   rp   r   r8   rz   r   r   r   r   r   r*   r   propertyr   r   r   r   rq   rR   rU   rr   r   r   rs   re   rh   r1   rK   rE   ru   ru      s        !&AC	 #  U38_d3i=>	
 
   .VV $V 	V
 U38_d3i78V 
V V V Vp+3 +3 + + + +2s 23 23 2 2 2 21 1c 1(3- 13 1 1 1 18s 8y 8 8 8 8 hy1    X2	!	)		! 	! 	! 	! !Xi0 ! ! ! X!	 	27c58H2I			 	 	 	5 527c58H2I5	5 5 5 5  HLQ QQ'(Q tS$s)T#s(^CDQ 
	Q Q Q \Qf >>!2>	> > > \> > >rK   ru   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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dS )
TreeObjectr5   Nc                 :    t                               |            d S rk   )ru   __init__rI   s    rE   r   zTreeObject.__init__  s    !!$'''''rK   c                 L    t          ddd           |                                 S )NhasChildrenhas_children4.0.0)r   r   rI   s    rE   r   zTreeObject.hasChildren  s&    "=.'JJJ  """rK   c                 
    d| v S )N/Firstr1   rI   s    rE   r   zTreeObject.has_children	  s    4rK   c                 *    |                                  S rk   )childrenrI   s    rE   __iter__zTreeObject.__iter__  s    }}rK   c              #   :  K   |                                  sd S | t          d                   }|                                }	 |V  || t          d                   k    rd S |                    t          d                    }|d S |                                }Z)Nr   T/Lastr   )r   r'   r   r   )rA   	child_refchilds      rE   r   zTreeObject.children  s        "" 	FH--.	$$&&	+KKKZ00111		*W"5"566I ((**E	+rK   r   r:   c                 T    t          ddd           |                     ||           d S )NaddChild	add_childrV   )r   r   rA   r   r:   s      rE   r   zTreeObject.addChild  s.    $ZgFFFuc"""""rK   c                 4    |                      |d |           d S rk   )insert_childr   s      rE   r   zTreeObject.add_child"  s     %s+++++rK   beforec                    dt           d t          t          f         dt          dd ffd|                                }|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= 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
                     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
                     d S )Nparentnr5   c           	      0   | d S t          d|                                           } d| v rjt          t          t          | t	          d                             |z             | t	          d          <    |                     dd           |           d S d S )Nr   /Count/Parent)r   r   r)   rs   r'   r   )r   r  inc_parent_counters     rE   r  z3TreeObject.insert_child.<locals>.inc_parent_counter&  s     ~,(9(9(;(;<<F6!!/;fZ%9%9:;;a?0 0z(++, #"6::i#>#>BBBBB	 "!rK   r   r   r  r   r  r#   r   r   ru   r   )r
   r&   r   rs   r   r9   r'   r)   r   r   r=   ru   r;   )rA   r   r   r:   	child_objprevr  s         @rE   r   zTreeObject.insert_child%  s   
	C$
:;
	C@C
	C
	C 
	C 
	C 
	C 
	C 
	C $$&&	( 4).DH%%&)5aDH%%&(-DG$$%/3/FIj++,tY]]8Q%?%?@@@)##g&)##g&F*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G3 3HHc                 R    t          ddd           |                     |           d S )NremoveChildremove_childrV   )r   r
  )rA   r   s     rE   r	  zTreeObject.removeChild[  s.    $]NGLLL%     rK   r  prev_refcurlastc                 "   |                     t          d          d          }||rm|                                }|t          d          = || t          d          <   t          | t          d                   dz
            | t          d          <   dS | t          d                   dk    sJ | 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)   )rA   r  r  r  r  next_refnext_objs          rE   _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))*** Jx001Q6666H--.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%%&&&rK   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   r9   r'   r   r  _reset_node_tree_relationship)
rA   r   r  foundr  r  cur_refr  last_refr  s
             rE   r
  zTreeObject.remove_child  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0rK   c                     t          d          | vrt          d          t          d| d                                       |            dS )z)Remove the object from the tree it is in.r  r  r   N)r'   r   r   r
  rI   s    rE   remove_from_treezTreeObject.remove_from_tree  sL    i  ,,NOOOtI//<<TBBBBBrK   c                 P    t          ddd           |                                  d S )N	emptyTree
empty_treer   )r   r  rI   s    rE   r  zTreeObject.emptyTree  s*    ";gFFFrK   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   r  r'   )rA   r   r  s      rE   r  zTreeObject.empty_tree  s     	5 	5E((**I))4444h4''Z))*h4''Z))*g$&&Z(())) '&rK   r5   N)rl   rm   rn   r   ro   r   r   r   r   r   r   r   r   r   r   r	  r  r
  r  r  r  r1   rK   rE   r   r     s       ( ( ( (#T # # # # d        #    +(3- + + + +#c # # # # # #,s ,): ,t , , , ,4=# 4=s 4=9J 4=t 4= 4= 4= 4=l! ! ! ! ! !)V)V#&)V-0)V8;)V	)V )V )V )VV#1# #1$ #1 #1 #1 #1JC C C C   
* 
* 
* 
* 
* 
*rK   r   r  r5   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    rE   r  r    sh     	*Y''('i''j))*'i''j))*** ('rK   c                       e Zd ZddZdedededeee	df         e
e	         f         ddf
 f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>   r5   Nc                 "    d | _         d | _        d S rk   )_StreamObject__datadecoded_selfrI   s    rE   r   zStreamObject.__init__  s    %)=ArK   r}   r2   r3   r4   .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:
        r>   NDecodedStreamObject)r   _datar#  r8   r;   superrz   )rA   r}   r2   r3   r4   r#  rw   s         rE   rz   zStreamObject._clone  s      .#..4

	44AL#$(!!$() &&x-PP% %!  	 	 	D	sHo}EEEEEs   A	A' '
A43A4c                 v    t                                                      }|t          | j                  z  }|S rk   )r(  hash_value_datar   r'  )rA   rC   rw   s     rE   r*  zStreamObject.hash_value_data  s/    ww&&((4:rK   r&  c                 2    t          ddd           | j        S NdecodedSelfr#  rV   r   r#  rI   s    rE   r-  zStreamObject.decodedSelf      $]NGLLL  rK   r   c                 6    t          ddd           || _        d S r,  r.  rA   r   s     rE   r-  zStreamObject.decodedSelf  "    $]NGLLL!rK   c                     | j         S rk   r"  rI   s    rE   r'  zStreamObject._data	  s
    {rK   c                     || _         d S rk   r4  r1  s     rE   r'  zStreamObject._data  s    rK   rL   rM   c                    t          t          | j                            | t          t          j                  <   t                              | ||           | t          j        = |                    d           | j        }|rddl	m
}  |||          }|                    |           |                    d           d S )Ns   
stream
r   )RC4_encrypts
   
endstream)r)   rx   r'  r'   r   r   ru   rR   rQ   	_securityr7  )rA   rL   rM   rC   r7  s        rE   rR   zStreamObject.write_to_stream  s     '33tz??&C&CZ	""#((v~FFFO]###z 	5//////;~t44DT^$$$$$rK   rC   )EncodedStreamObjectr&  c                 6    t                               |           S rk   )r>   r   )rC   s    rE   initializeFromDictionaryz%StreamObject.initializeFromDictionary   s     66t<<<rK   c                     t           j        | v rt                      }nt                      }| d         |_        | d= | t           j        = |                    |            |S )Nr   )r   FILTERr9  r&  r'  r   r   )rC   r   s     rE   r   z'StreamObject.initialize_from_dictionary&  s_    
 9(**FF(**F,-!"OdrK   r9  c                 L    t          ddd           |                                 S )NflateEncodeflate_encoderV   )r   r@  rI   s    rE   r?  zStreamObject.flateEncode5  s&    $]NGLLL  """rK   c                    ddl m} t          j        | v r| t          j                 }t	          |t
                    r.|                    dt          t          j	                             nWt                      }|
                    t          d                     |
                    |           |}nt          d          }t                      }||t          t          j                  <   |                    | j                  |_        |S )Nr   )FlateDecoder   z/FlateDecode)filtersrB  r   r=  r=   r0   insertr'   FTFLATE_DECODEr?   r9  encoder'  )rA   rB  fnewfr   s        rE   r@  zStreamObject.flate_encode9  s    ))))))9RYA![)) Jr778888"}}J~66777A>**A$&&()z")$$%"))$*55rK   r  )r   r&  r5   N)r5   r9  )rl   rm   rn   r   ru   r   ro   r
   r	   rp   r   rz   rq   r*  r   r   r-  setterr   r'  r   rR   rr   r   r;  r   r?  r@  __classcell__)rw   s   @rE   r>   r>     sO       B B B BFF $F 	F
 U38_d3i78F 
F F F F F F<      
 !X&;< ! ! ! X! " " " " s    X \3 4    \% %27c58H2I%	% % % % =38n=	;	<= = = \=
 38n	;	<   \# # # #       rK   r>   c                   F    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dS )r&  r5   c                     | j         S rk   r'  rI   s    rE   get_datazDecodedStreamObject.get_dataN  s
    zrK   rC   c                     || _         d S rk   rN  rA   rC   s     rE   set_datazDecodedStreamObject.set_dataQ  s    


rK   c                 2    t          ddd           | j        S NgetDatarO  rV   )r   r'  rI   s    rE   rU  zDecodedStreamObject.getDataT  s    $Y
GDDDzrK   Nc                 R    t          ddd           |                     |           d S NsetDatarR  rV   r   rR  rQ  s     rE   rX  zDecodedStreamObject.setDataX  s,    $Y
GDDDdrK   )rl   rm   rn   r   rO  rR  rU  rX  r1   rK   rE   r&  r&  M  s        #    S S        C D      rK   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dS )r9  r5   Nc                     d | _         d S rk   )r#  rI   s    rE   r   zEncodedStreamObject.__init__^  s    =ArK   r&  c                 2    t          ddd           | j        S r,  r.  rI   s    rE   r-  zEncodedStreamObject.decodedSelfa  r/  rK   r   c                 6    t          ddd           || _        d S r,  r.  r1  s     rE   r-  zEncodedStreamObject.decodedSelff  r2  rK   c                 H   ddl m} | j        | j                                        S t	                      } ||           |_        t          |                                           D ]/\  }}|t          j	        t          j
        t          j        fvr|||<   0|| _        |j        S )Nr   )decode_stream_data)rC  r_  r#  rO  r&  r'  r   rJ   r   r   r=  DECODE_PARMS)rA   r_  decodedr   r   s        rE   rO  zEncodedStreamObject.get_datak  s    000000($--/// *++G..t44GM"4::<<00 ) )
Ury")R_EEE#(GCL 'D= rK   c                 L    t          ddd           |                                 S rT  )r   rO  rI   s    rE   rU  zEncodedStreamObject.getData|  s"    $Y
GDDD}}rK   rC   c                      t          d          )Nz7Creating EncodedStreamObject is not currently supported)r!   rQ  s     rE   rR  zEncodedStreamObject.set_data  s    TUUUrK   c                 N    t          ddd           |                     |          S rW  rY  rQ  s     rE   rX  zEncodedStreamObject.setData  s&    $Y
GDDD}}T"""rK   r  )rl   rm   rn   r   r   r   r-  rJ  r&  r
   rp   rq   rO  rU  r   rR  rX  r1   rK   rE   r9  r9  ]  s$       B B B B !X&;< ! ! ! X! "!4 " " " " "!%c5 01 ! ! ! !"tS%/0    VS VT V V V V#C #D # # # # # #rK   r9  c                   t   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d	ed
e
deeedf         ee         df         dd fdZded	ed
e
deeedf         ee         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dS )ContentStreamNrL   r:   rZ   r5   c                    || _         g | _        ||                                }t          |t                    rqd}|D ]\}|t          |                                                                          z  }t          |          dk    s|d         dk    r|dz  }]t          |          }n6|                                }|J t          |          }t          |          }|| _	        | 
                    |           d S d S )NrK   r   r\   r   )r:   
operationsr   r=   r0   r   rO  rx   r   rZ   $_ContentStream__parse_content_stream)	rA   rL   r:   rZ   rC   r   stream_bytesstream_datastream_data_bytess	            rE   r   zContentStream.__init__  s    
 24 &&((F&+.. : & &ABq||~~6688999D4yyA~~bU):):&t}}$oo//"...$&{OO!&'899#2D ''55555 rK   Fr1   r2   r3   r4   .c           	          	 | j         j        |k    r|s| S n# t          $ r Y nw xY wt          d|                     |                     dd          ||                    }|g }|                    | |||           |S )z
        Clone object into pdf_dest.

        Args:
            pdf_dest:
            force_duplicate:
            ignore_fields:

        Returns:
            The cloned ContentStream
        rf  N)r9   r:   r;   r   r<   rw   rz   r{   s        rE   r8   zContentStream.clone  s    "	&*h666 	 	 	D	 !!tT**Ho 
 
  M

4?MBBB
rF   r}   c                     || _         t          t          d|          j                  | _        t          d|          j        | _        dS )r%  rf  N)r:   r   r   rh  rZ   )rA   r}   r2   r3   r4   s        rE   rz   zContentStream._clone  sB      tOS99DEE#OS99IrK   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   TrK   r\   r#   )   '   "   BI   INLINE IMAGEr   r   r   )r`   r   isalphar   r'   delimiter_pattern_read_inline_imagerh  r?   r^   ra   rZ   )rA   rL   operandspeekoperatoriis         rE   __parse_content_streamz$ContentStream.__parse_content_stream  sN   Aq57	Q&v..Ds{{daiiKKA||~~ Q!5!5+FJ4PQQu$$ $r>>>>0088BO**B+@AAAAO**Hh+?@@@!HH .00!;;q>>D .00 FD$:N O OPPP3	QrK   c                    t                      }	 t          |          }|                    dd           |dk    rnUt          || j                  }t          |          }|                    dd           t          || j                  }|||<   |                    d          }|d d         dk    sJ t                      }	 |                    d          }|st          d	          |                    d
          }	|	dk    r|	                    |           n|	                    |d|	                    |                    |	t          |          z
  d           |                    d          }|                    d          }
|
dk    r,|                    dd           |	                    |           ||
z   }|                    d          }|t          vr,|                    dd           |	                    |           n||	dz
  |	         t          v r>|t          v r|                    d          }|t          v |                    dd           n|t          v r#||z  }|                    d          }|t          v #|                    dd           |dk    rnP|d
k    r3|                    d          }|                    dd           |dk    rnn|	                    |           1||                                dS )NTr\   r#      I   r   s   IDi    zUnexpected end of stream   Er      Qs   EMC)settingsrC   )ru   r   r`   ra   r:   r^   r   r!   r   rQ   rx   r   getvalue)rA   rL   r  rc   r   r   rb   rC   bufr   tok2infotok3opes                 rE   rw  z ContentStream._read_inline_image   s    $%%
	"%f--CKKAd{{fdh//C%f--CKKA11E!HSM
	" kk!nn2A2w%yy7	)++d##C ?"#=>>>(( C byy

3 

3qu:&&& C#c((NA...kk!nn{{1~~4<<KKA&&&JJsOOOTz{{  {**KKA&&&JJsOOOOq3';66+--%{{1~~ +-- KKA&&& +--%{{1~~ +-- KKA&&&t||$kk!nnB***&==! ) 

4(((o7	)p %dmmoo>>>rK   c                    t                      }| j        D ]'\  }}|dk    r|                    d           t                      }|d                             |d            |                    |                                dd                    |                    d           |                    |d                    |                    d           nR|D ]-}|                    |d            |                    d	           .|                    t          |                     |                    d
           )|                                S )Nrs  rr  r  r   r  s   ID rC   s   EIrP   r   )r   rh  rQ   rR   r  r   )rA   new_datarx  rz  	dict_textops         rE   r'  zContentStream._dataN  s@   99"&/ 	" 	"Hh?**u%%%#II	$44YEEEy1133AbD9:::v&&&x/000u%%%%" ) )B&&x666NN4((((r(||,,,NN5!!!!  """rK   r   c                 d    |                      t          t          |                               d S rk   )ri  r   r   r1  s     rE   r'  zContentStream._datab  s*    ##GBuII$6$677777rK   rk   rj   )rl   rm   rn   r   r
   rp   r   r   rs   r   ro   r	   r8   ru   r   rz   r   ri  rw  r   rq   r'  rJ  r1   rK   rE   rf  rf    s       
 HL	6 66 6 tS$s)T#s(^CD	6
 
6 6 6 6F !&AC	       U38_d3i=>	 
 
       DJJ $J 	J
 U38_d3i78J 
J J J J,QZ QD Q Q Q Q>L? L?S#X L? L? L? L?\ #u # # # X#& \85e, 8 8 8 8 \8 8 8rK   rf  rL   r:   rZ   c           
         |                      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    ru|dvr;|                      d          }t          |          dk    rt          d          |dv;t          |           }|                     dd           t          | ||          S |dv r|                      d          }|                     t          |           d           t                              |          |J t!          j        | |          S t#          j        |           S |                     dd           t%          d|d|                                  d|                      d                                                     )Nr#   r\      /   <r   r  r   rO      t   f   (   e   s   endobji   nr   rt  r   zFile ended unexpectedly.s   0123456789+-.   iz(Invalid Elementary Object starting with z @z: P   )r^   r`   r'   re   ru   r-   r0   r$   r.   r(   rx   r"   r   ra   IndirectPatternmatchr&   r)   r!   r   r   )rL   r:   rZ   rc   ry  s        rE   ra   ra   g  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	''++a..C 3xx1}}$%?@@@ '' "&))B63888	 	 	 {{2SYYJ"""  &&2???!263???0888CmsmmmmQWQ\Q\]_Q`Q`QiQiQkQkmm
 
 	
rK   c                   z   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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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>`
    rC   r5   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}t          |          | t          d          <   d S d S )Nr    )ru   r   r   
attributesr   r9   r'   KeyErrorr=   r   r9  r   rO  rq   decoder+   )rA   rC   field_attributesattrds        rE   r   zField.__init__  s-   !!$'''%022+6889 	 #'"9$ 	 	D)-dZ%%&&   dhhtnn&9:: 	9($z$/?/?*@AAJJLLA!U## HHJJ%5a%8%8DD!!"""	9 	9s   A,,
A98A9c                 @    |                      t          j                  S )z4Read-only property accessing the type of this field.)r   r   rE  rI   s    rE   
field_typezField.field_type       xx14555rK   c                 2    t          ddd           | j        S )zT
        Use :py:attr:`field_type` instead.

        .. deprecated:: 1.28.3
        	fieldTyper  rV   )r   r  rI   s    rE   r  zField.fieldType  s     	%[,HHHrK   c                 @    |                      t          j                  S )z6Read-only property accessing the parent of this field.)r   r   ParentrI   s    rE   r   zField.parent  s     xx18999rK   r0   c                 @    |                      t          j                  S )z4Read-only property accessing the kids of this field.)r   r   KidsrI   s    rE   kidsz
Field.kids  s     xx16777rK   c                 @    |                      t          j                  S )z4Read-only property accessing the name of this field.)r   r   TrI   s    rE   namez
Field.name  s     xx13444rK   c                 @    |                      t          j                  S )z>Read-only property accessing the alternate name of this field.)r   r   TUrI   s    rE   alternate_namezField.alternate_name  r  rK   c                 2    t          ddd           | j        S )zX
        Use :py:attr:`alternate_name` instead.

        .. deprecated:: 1.28.3
        altNamer  rV   )r   r  rI   s    rE   r  zField.altName  s      	%Y0@'JJJ""rK   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   TMrI   s    rE   mapping_namezField.mapping_name       xx14555rK   c                 2    t          ddd           | j        S )zV
        Use :py:attr:`mapping_name` instead.

        .. deprecated:: 1.28.3
        mappingNamer  rV   )r   r  rI   s    rE   r  zField.mappingName  r   rK   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   FfrI   s    rE   flagszField.flags  s     xx14555rK   c                 @    |                      t          j                  S )zs
        Read-only property accessing the value of this field.

        Format varies based on field type.
        )r   r   VrI   s    rE   r   zField.value  s     xx13444rK   c                 @    |                      t          j                  S )z=Read-only property accessing the default value of this field.)r   r   DVrI   s    rE   default_valuezField.default_value  r  rK   c                 2    t          ddd           | j        S )zW
        Use :py:attr:`default_value` instead.

        .. deprecated:: 1.28.3
        defaultValuer  rV   )r   r  rI   s    rE   r  zField.defaultValue  s     	%^_gNNN!!rK   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   AArI   s    rE   additional_actionszField.additional_actions  r  rK   c                 2    t          ddd           | j        S )z\
        Use :py:attr:`additional_actions` instead.

        .. deprecated:: 1.28.3
        additionalActionsr  rV   )r   r  rI   s    rE   r  zField.additionalActions&  s"     	%%8:NPWXXX&&rK   )rl   rm   rn   __doc__ru   r   r   r   r'   r  r  r   r  rp   r  r  r  r  r  rs   r  r   r   r  r  r  r  r1   rK   rE   r  r    s        9- 9$ 9 9 9 9* 6HZ0 6 6 6 X6 8J/    X :!12 : : : X: 8h}- 8 8 8 X8 5hsm 5 5 5 X5 6 6 6 6 X6 ## # # # X# 6hsm 6 6 6 X6 !Xc] ! ! ! X! 6x} 6 6 6 X6 5x} 5 5 5 X5 6x} 6 6 6 X6 "hsm " " " X" 6H-=$> 6 6 6 X6 '8,<#= ' ' ' X' ' 'rK   r  c                   r   e Zd ZU dZdZee         ed<   g 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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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 8.2.1 of the PDF 1.6 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childstitlepagefitr5   c                    |j         }|j        }t                              |            t	          |          | t          d          <   || t          d          <   || t          d          <   |dk    rL|\  | t          t          j                  <   | t          t          j                  <   | t          d          <   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 t+          d|          )N/Title/Pager   z/XYZ/ZoomzUnknown Destination Type: )fit_typefit_argsru   r   r+   r'   TALEFTTOPTFFIT_RBOTTOMRIGHTFIT_HFIT_BHr;   r(   FIT_VFIT_BVFITFIT_Br!   )rA   r  r  r  typargss         rE   r   zDestination.__init__F  s*    l|!!$'''%5e%<%<Z!!"$(Z  !$'Z  ! &==
 	Z(()Z''(Z(()))BH__ Z(()Z	**+Z))*Z''(((RXry)))>.2+j(())) > > >/9||j(())))>RXry)))?/3,j))*** ? ? ?0:j))****?RVRX&&&DCCCCDDDs$   E: :2F0/F0G. .2H$#H$r0   c                 v     t                               d           d         g fddD             z             S )Nr  r   c                 (    g | ]}|v |         S r1   r1   )r   xrA   s     rE   
<listcomp>z*Destination.dest_array.<locals>.<listcomp>u  s.       99 Q99rK   )/Left/Bottom/Right/Topr  )r0   r   rI   s   `rE   
dest_arrayzDestination.dest_arrayq  sX    \\'""DM2   H  
 
 	
rK   c                 2    t          ddd           | j        S )zT
        Use :py:attr:`dest_array` instead.

        .. deprecated:: 1.28.3
        getDestArrayr  rV   )r   r  rI   s    rE   r  zDestination.getDestArray|  s     	%^\7KKKrK   rL   rM   c                    |                     d           t          d          }|                    ||           |                     d           | j        }|                    ||           t          d          }|                    ||           |                     d           t          d          }|                    ||           |                     d           |                     d           d S )Nr   z/DrP   z/Sz/GoTor   r   )rQ   r'   rR   r  )rA   rL   rM   r   r   value_ss         rE   rR   zDestination.write_to_stream  s     	WFN333Tfn555FN333TW%%777UUrK   c                 ,    |                      d          S )z3Read-only property accessing the destination title.r  r   rI   s    rE   r  zDestination.title  s     xx!!!rK   c                 ,    |                      d          S )z9Read-only property accessing the destination page number.r  r  rI   s    rE   r  zDestination.page       xx   rK   c                 ,    |                      d          S )z2Read-only property accessing the destination type.r   r  rI   s    rE   r  zDestination.typ  r  rK   c                 .    |                      dd          S )z-Read-only property accessing the zoom factor.r  Nr  rI   s    rE   zoomzDestination.zoom       xx&&&rK   c                 .    |                      dd          S )z<Read-only property accessing the left horizontal coordinate.r  Nr  rI   s    rE   leftzDestination.left  r  rK   c                 .    |                      dd          S )z=Read-only property accessing the right horizontal coordinate.r  Nr  rI   s    rE   rightzDestination.right  s     xx$'''rK   c                 .    |                      dd          S )z9Read-only property accessing the top vertical coordinate.r  Nr  rI   s    rE   topzDestination.top  s     xx%%%rK   c                 .    |                      dd          S )z<Read-only property accessing the bottom vertical coordinate.r  Nr  rI   s    rE   bottomzDestination.bottom  s     xx	4(((rK   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   r0   r%   rI   s    rE   colorzDestination.color  s@     xx+{1~~{1~~{1~~NOO
 
 	
rK   c                 .    |                      dd          S )z_
        Read-only property accessing the font type.

        1=italic, 2=bold, 3=both
        z/Fr   r  rI   s    rE   font_formatzDestination.font_format  s     xxa   rK   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  rI   s    rE   outline_countzDestination.outline_count  s     xx$'''rK   )r5   r0   )&rl   rm   rn   r  r  r   ru   __annotations__r  r   r   rp   r
   r)   r&   r(   r,   r   r   r  r  r   rq   rR   r  rs   r  r  r  r%   r  r  r  r  r	  r   r  r  r1   rK   rE   r  r  1  s         " 	 	(    FDI)E)E L.*>NNO)E 	)E
 
)E )E )E )EV 
 
 
 X
    27c58H2I	   & "x} " " " X" !hsm ! ! ! X! !Xc] ! ! ! X! 'hsm ' ' ' X' 'h{+ ' ' ' X' (x, ( ( ( X( &Xk* & & & X& )- ) ) ) X) 
x. 
 
 
 X
 !Xo6 ! ! ! X! (x} ( ( ( X( ( (rK   r  rk   )O
__author____author_email__loggingr   ior   typingr   r   r   r   r   r	   r
   r   
_protocolsr   r   _utilsr   r   r   r   r   r   r   r   r   r   	constantsr   r   r   r   rE  r   r   r   r  r   r  errorsr    r!   r"   _baser$   r%   r&   r'   r(   r)   r*   r+   _fitr,   r-   r.   	getLoggerrl   loggerNumberSignsr   r  r   r0   r   ru   r   r  r>   r&  r9  rf  rp   rs   ra   r  r  r1   rK   rE   <module>r     s  : 
/   				       J J J J J J J J J J J J J J J J J J J J = = = = = = = =                                
 * ) ) ) ) ) . . . . . . * * * * * * - - - - - - O O O O O O O O O O	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	       H H H H H H H H		8	$	$"*@AAP9 P9 P9 P9 P9$	 P9 P9 P9f]> ]> ]> ]> ]>tY ]> ]> ]>@C* C* C* C* C*! C* C* C*L+S +T + + + + s s s s s# s s sl    ,    (# (# (# (# (#, (# (# (#V\8 \8 \8 \8 \8' \8 \8 \8D DH4
 4
4
	#	$4
 4d3ic3h?@4
 9c3-.	4
 4
 4
 4
nP' P' P' P' P'J P' P' P'fh( h( h( h( h(* h( h( h( h( h(rK   