§
    ¥”j|Ä  ã                   ól  — d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 ddl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 dd	lmZmZmZ dd
lmZ g d¢Z ej         e!¦  «        Z"ej#         G d„ dej$        ¦  «        ¦   «         Z% ed¬¦  «         G d„ d¦  «        ¦   «         Z& ed¬¦  «         G d„ d¦  «        ¦   «         Z'dee'         fd„Z(	 d;dej)        de*dee'         fd„Z+ej#         G d„ dej$        ¦  «        ¦   «         Z, ed¬¦  «         G d„ d¦  «        ¦   «         Z- G d„ d¦  «        Z. ed¬¦  «         G d„ d ¦  «        ¦   «         Z/d!e0d"e/d#ee/         fd$„Z1d%ee/         fd&„Z2d#ee/         fd'„Z3 G d(„ d)¦  «        Z4 G d*„ d+ej        ¦  «        Z5d,„ Z6d-„ Z7 G d.„ d/ej8        ¦  «        Z9d0„ Z:d1„ Z; G d2„ d3¦  «        Z<eee0e0f         ee0ee0e0f         f         f         Z=ej>        ej)        fZ? G d4„ d5¦  «        Z@d6„ ZAd7eee0e0f         e0f         fd8„ZB G d9„ d:ej)        ¦  «        ZCdS )<z�
Internal utilities to handle the processing of cross-reference data and
document trailer data.

This entire module is considered internal API.
é    N)Ú	dataclass)ÚBytesIO)Úchain)ÚDictÚIteratorÚListÚOptionalÚSetÚTupleÚUnion)ÚgenericÚmisc)ÚEncryptedObjAccessÚpdf_name)ÚPdfReadErrorÚPdfStrictReadErrorÚpeek)Ú
PdfHandler)ÚOBJSTREAM_FORBIDDENÚObjStreamRefÚObjectHeaderReadErrorÚObjectStreamÚPositionDictÚTrailerDictionaryÚXRefBuilderÚ	XRefCacheÚ	XRefEntryÚXRefSectionÚXRefSectionDataÚXRefSectionMetaInfoÚXRefSectionTypeÚ
XRefStreamÚXRefTypeÚparse_xref_streamÚparse_xref_tableÚread_object_headerÚwrite_xref_tablec                   óp   — e Zd ZdZ ej        ¦   «         Z	  ej        ¦   «         Z	  ej        ¦   «         ZdS )r#   z5
    Different types of cross-reference entries.
    N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚenumÚautoÚFREEÚSTANDARDÚIN_OBJ_STREAM© ó    úe/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/pyhanko/pdf_utils/xref.pyr#   r#   /   sU   € € € € € ðð ð ˆ4Œ9‰;Œ;€Dðð ˆtŒy‰{Œ{€Hðð �D”I‘K”K€Mðð r3   r#   T)Úfrozenc                   ó*   — e Zd ZU dZeed<   	 eed<   dS )r   z?
    Identifies an object that's part of an object stream.
    Úobj_stream_idÚix_in_streamN)r)   r*   r+   r,   ÚintÚ__annotations__r2   r3   r4   r   r   E   sA   € € € € € € ðð ð ÐÐÑðð ÐÐÑðð r3   r   c                   ób   — e Zd ZU dZeed<   	 eeee	f                  ed<   	 eed<   	 dZ
eed<   dS )r   zA
    Value type representing a single cross-reference entry.
    Ú	xref_typeÚlocationÚidnumr   Ú
generationN)r)   r*   r+   r,   r#   r:   r	   r   r9   r   r?   r2   r3   r4   r   r   V   sw   € € € € € € ðð ð ÐÐÑðð �u˜S ,Ð.Ô/Ô0Ð0Ð0Ñ0ðð €J€J�Jðð €J�ÐÐÑðð r3   r   Úreturnc           	   #   ót  K  — t          j        | ¦  «         |                      dt          j        ¦  «         	 t
          j                             | ¦  «        }t          j        | ¦  «         |                      dt          j        ¦  «         t
          j                             | ¦  «        }t          j        | ¦  «         |                      dt          j        ¦  «         t          d|¦  «        D �]#}|  	                    d¦  «        }|d         dv r?|                      dt          j        ¦  «         |  	                    d¦  «        }|d         dv °?|d         dv r |                      dt          j        ¦  «         |dd	…          
                    d
¦  «        \  }}}|dk    r:t          t          j        t          |¦  «        |t          |¦  «        ¬¦  «        V — n2|dk    r,t          t          j        d|t          |¦  «        ¬¦  «        V — |dz  }�Œ%t          j        | ¦  «         |                      dt          j        ¦  «         |  	                    d¦  «        }|dk    r6t          j        | ¦  «         |                      dt          j        ¦  «         dS |                      dt          j        ¦  «         �Œ‚)a  
    Parse a single cross-reference table and yield its entries one by one.

    This is internal API.

    :param stream:
        A file-like object pointed to the start of the cross-reference table.
    :return:
        A generator object yielding :class:`.XRefEntry` objects.
    éÿÿÿÿTr   é   s   
iíÿÿÿs   0123456789tNé   ó    ó   n)r<   r=   r>   r?   ó   fé   é   s   traileriùÿÿÿ)r   Úread_non_whitespaceÚseekÚosÚSEEK_CURr   ÚNumberObjectÚread_from_streamÚrangeÚreadÚsplitr   r#   r0   r9   r/   )	ÚstreamÚnumÚsizeÚcntÚlineÚoffsetr?   ÚmarkerÚ
trailertags	            r4   r%   r%   q   s„  è è € õ 	Ô˜VÑ$Ô$Ð$Ø
‡K‚K�•B”KÑ Ô Ð ð7)ÝÔ"×3Ò3°FÑ;Ô;ˆÝÔ  Ñ(Ô(Ð(Ø�Š�B�œÑ$Ô$Ð$ÝÔ#×4Ò4°VÑ<Ô<ˆÝÔ  Ñ(Ô(Ð(Ø�Š�B�œÑ$Ô$Ð$Ý˜˜D‘>”>ð %	ñ %	ˆCØ—;’;˜r‘?”?ˆDð �q”'˜[Ð(Ð(Ø—’˜G¥R¤[Ñ1Ô1Ð1Ø—{’{ 2‘”�ð �q”'˜[Ð(Ð(ð �BŒx˜>Ð)Ð)Ø—’˜B¥¤Ñ,Ô,Ð,à)-¨c¨r¨c¬¯ª¸Ñ)>Ô)>Ñ&ˆF�J Ø˜Š~ˆ~ÝÝ&Ô/Ý  ™[œ[ØÝ" :™œð	ñ ô ð ð ð ð ð ˜4’�ÝÝ&œmØ!ØÝ" :™œð	ñ ô ð ð ð ð �1‰HˆC‰CÝÔ  Ñ(Ô(Ð(Ø�Š�B�œÑ$Ô$Ð$Ø—[’[ ‘^”^ˆ
Ø˜Ò#Ð#åÔ$ VÑ,Ô,Ð,Ø�KŠK˜�BœKÑ(Ô(Ð(ØˆFð �KŠK˜�BœKÑ(Ô(Ð(ño7)r3   Úxref_streamÚstrictc              #   óŒ  ‡‡‡K  — t          | j        ¦  «        Š|                      dd|                      d¦  «        g¦  «        }|                      d¦  «        Šˆˆˆfd„}d}t          j        |¦  «        D �]\  }}||k    sJ ‚||z   }t          |||z   ¦  «        D ]æ} |d¦  «        }|dk    r6 |d¦  «        }	 |d¦  «        }
t          t          j        ||	|
¬¦  «        V — ŒI|dk    rE |d¦  «        } |d¦  «        }t          ||¦  «        }	t          t          j
        ||	¬	¦  «        V — Œ”|dk    r6 |d¦  «          |d¦  «        }t          t          j        ||d
¬¦  «        V — ŒÐ |d¦  «          |d¦  «         Œç�Œt          ‰                     d¦  «        ¦  «        dk    r‰rt          j        d¦  «        ‚d
S d
S )aQ  
    Parse a single cross-reference stream and yield its entries one by one.

    This is internal API.

    :param xref_stream:
        A :class:`~generic.StreamObject`.
    :param strict:
        Boolean indicating whether we're running in strict mode.
    :return:
        A generator object yielding :class:`.XRefEntry` objects.
    ú/Indexr   ú/Sizeú/Wc                 óø   •— ‰|          }|dk    rb‰                      |¦  «        }t          |¦  «        |k    rt          ||¦  «        S ‰r(t          j        d|› dt          |¦  «        › d�¦  «        ‚| dk    rdS dS )Nr   zBXRef stream ended prematurely; incomplete entry: expected to read z bytes, but only got ú.rH   )rQ   ÚlenÚconvert_to_intr   r   )ÚixÚentry_widthÚdÚentry_sizesÚstream_datar\   s      €€€r4   Ú	get_entryz$parse_xref_stream.<locals>.get_entryÏ   s§   ø€ ð " "”oˆØ˜Š?ˆ?Ø× Ò  Ñ-Ô-ˆAÝ�1‰vŒv˜Ò$Ð$Ý% a¨Ñ5Ô5Ð5Øð ÝÔ-ð!Ø(3ð!ð !å˜1‘v”vð!ð !ð !ñô ð ð �Š7ˆ7Ø�1à�1r3   rH   é   )r<   r>   r=   r?   )r<   r>   r=   N)r<   r>   r?   r=   z'Trailing data in cross-reference stream)r   ÚdataÚgetr   Ú	pair_iterrP   r   r#   r0   r   r1   r/   rc   rQ   r   )r[   r\   Ú	idx_pairsrj   Úlast_endÚstartrU   rT   r<   r=   r?   Ú
objstr_numÚ
objstr_idxÚnext_generationrh   ri   s    `            @@r4   r$   r$   ¹   sc  øøøè è € õ  ˜+Ô*Ñ+Ô+€Kð —’ ¨1¨k¯oªo¸gÑ.FÔ.FÐ*GÑHÔH€IØ—/’/ $Ñ'Ô'€Kðð ð ð ð ð ð ð. €HÝ”~ iÑ0Ô0ð *ñ *‰ˆˆtà˜Ò Ð Ð Ð Ø˜4‘<ˆÝ˜ ¨¡Ñ-Ô-ð &	ð &	ˆCà!˜	 !™œˆIà˜AŠ~ˆ~à$˜9 Q™<œ<�Ø&˜Y q™\œ\�
ÝÝ&Ô/ØØ%Ø)ð	ñ ô ð ð ð ð ð ˜a’�à&˜Y q™\œ\�
Ø&˜Y q™\œ\�
Ý'¨
°JÑ?Ô?�ÝÝ&Ô4ØØ%ðñ ô ð ð ð ð ð
 ˜a’�ð �	˜!‘”�Ø"+ )¨A¡,¤,�ÝÝ&œmØØ.Ø!ð	ñ ô ð ð ð ð ð �	˜!‘”�Ø�	˜!‘”��ñM&	õP ˆ;×Ò˜AÑÔÑÔ !Ò#Ð#¨Ð#ÝÔ%Ð&OÑPÔPÐPð $Ð#Ð#Ð#r3   c                   ó†   — e Zd Z ej        ¦   «         Z ej        ¦   «         Z ej        ¦   «         Z ej        ¦   «         ZdS )r!   N)	r)   r*   r+   r-   r.   r0   ÚSTREAMÚHYBRID_MAINÚHYBRID_STREAMr2   r3   r4   r!   r!     sB   € € € € € àˆtŒy‰{Œ{€HØˆTŒY‰[Œ[€FØ�$”)‘+”+€KØ�D”I‘K”K€M€M€Mr3   r!   c                   ól   — e Zd ZU eed<   	 eed<   	 eed<   	 eed<   	 eed<   	 eej                 ed<   dS )r    Úxref_section_typerU   Údeclared_startxrefÚstart_locationÚend_locationÚ
stream_refN)	r)   r*   r+   r!   r:   r9   r	   r   Ú	Referencer2   r3   r4   r    r      s†   € € € € € € à&Ð&Ð&Ñ&ðð €I€I�Iðð ÐÐÑðð ÐÐÑðð
 ÐÐÑðð ˜Ô*Ô+Ð+Ð+Ñ+ðð r3   r    c                   ó¬   — e Zd ZdZdd„Zdeej        ej        f         de	ee
ef                  fd„Zdee         defd	„Zdee         d
edefd„Zd„ ZdS )r   zn
    Internal class for bookkeeping on a single cross-reference section,
    independently of the others.
    Úselfc                 óŠ   — i | _         i | _        i | _        t          ¦   «         | _        t          ¦   «         | _        d | _        d S ©N)ÚfreedÚstandard_xrefsÚxrefs_in_objstmÚsetÚexplicit_refs_in_revisionÚobj_streams_usedÚhybrid©r�   s    r4   Ú__init__zXRefSectionData.__init__G  s>   € ð &(ˆŒ
Ø:<ˆÔØ8:ˆÔÝ?B¹u¼uˆÔ&Ý*-©%¬%ˆÔØ-1ˆŒˆˆr3   Úrefr@   c                 óÀ  — |j         dk    r#	 | j        |j                 S # t          $ r Y nw xY w| j                             |j        d ¦  «        }|�(|d         |j         k    r|d         S t          |¦  «        ‚| j                             |j        d ¦  «        }|�|j         |dz
  k    rd S | j        �| j        j         	                    |¦  «        S t          |¦  «        ‚)Nr   rH   )
r?   r†   r>   ÚKeyErrorr…   rm   r„   rŠ   Ú	xref_dataÚtry_resolve)r�   r�   Ústd_refÚfreed_next_generations       r4   r‘   zXRefSectionData.try_resolveQ  sø   € ð Œ>˜QÒÐðØÔ+¨C¬IÔ6Ð6øÝð ð ð Ø�ðøøøð Ô%×)Ò)¨#¬)°TÑ:Ô:ˆØÐà�qŒz˜Sœ^Ò+Ð+Ø˜q”zÐ!å˜s‘m”mÐ#à $¤
§¢¨s¬y¸$Ñ ?Ô ?Ðð
 "Ð-Ø”Ð"7¸!Ñ";Ò;Ð;ð
 �4ð Œ;Ð"Ø”;Ô(×4Ò4°SÑ9Ô9Ð9å˜3‘-”-Ðs   � Ÿ
,«,Úentriesr\   c                 óâ  — d}|D �]h}|j         }|j        }t          ||¦  «        }|dk    r|rt          d|› d|› d�¦  «        ‚Œ@|j         dk    rŒL|j        t
          j        k    rG|j        }t          |t          ¦  «        sJ ‚||f| j
        |<   | j                             ||f¦  «         Œ¨|j        t
          j        k    rm|dk    sJ ‚|j        }t          |t          ¦  «        sJ ‚|| j        |<   | j                             |j        ¦  «         | j                             |df¦  «         �Œ*|j        t
          j        k    r)|| j        |<   | j                             ||dz
  f¦  «         �Œj|S )Nr   iÿÿ  zIllegal generation z for object ID rb   rH   )r>   r?   Úmaxr   r<   r#   r0   r=   Ú
isinstancer9   r…   rˆ   Úaddr1   r   r†   r‰   r7   r/   r„   )	r�   r”   r\   Ú
highest_idÚ
xref_entryr>   r?   rX   Úlocs	            r4   Úprocess_entrieszXRefSectionData.process_entries~  s»  € Øˆ
Ø!ð 	Lñ 	LˆJØÔ$ˆEØ#Ô.ˆJÝ˜U JÑ/Ô/ˆJØ˜FÒ"Ð"Øð Ý,ð.¨jð .ð .Ø%*ð.ð .ð .ñô ð ð ØÔ 1Ò$Ð$ØØÔ#¥xÔ'8Ò8Ð8Ø#Ô,�Ý! &­#Ñ.Ô.Ð.Ð.Ð.Ø.8¸&Ð-A�Ô# EÑ*ØÔ.×2Ò2°E¸:Ð3FÑGÔGÐGÐGØÔ%­Ô)?Ò?Ð?Ø! Q’���Ø Ô)�Ý! #¥|Ñ4Ô4Ð4Ð4Ð4Ø.1�Ô$ UÑ+ØÔ%×)Ò)¨#Ô*;Ñ<Ô<Ð<ØÔ.×2Ò2°E¸1°:Ñ>Ô>Ð>Ñ>ØÔ%­¬Ò6Ð6Ø$.�”
˜5Ñ!ð Ô.×2Ò2°E¸:È¹>Ð3JÑKÔKÐKùØÐr3   Úxref_meta_infoc                 óz   — t          ¦   «         }|                     ||¬¦  «         t          ||¦  «        | _        d S )N©r\   )r   rœ   r   rŠ   )r�   r”   r�   r\   rŠ   s        r4   Úprocess_hybrid_entriesz&XRefSectionData.process_hybrid_entries   s=   € õ !Ñ"Ô"ˆØ×Ò˜w¨vÐÑ6Ô6Ð6Ý! .°&Ñ9Ô9ˆŒˆˆr3   c              #   óf   K  — | j                              ¦   «         D ]\  }\  }}|dk    r||fV — Œd S )Nr   )r…   Úitems)r�   r>   r?   Ú_s       r4   Úhigher_generation_refsz&XRefSectionData.higher_generation_refsª  sR   è è € Ø&*Ô&9×&?Ò&?Ñ&AÔ&Að 	(ð 	(Ñ"ˆE‘?�J Ø˜AŠ~ˆ~Ø˜ZÐ'Ð'Ð'Ð'øð	(ð 	(r3   N)r�   r   )r)   r*   r+   r,   rŒ   r   r   r   ÚIndirectObjectr	   r9   r   r‘   r   r   Úboolrœ   r    r    r¤   r2   r3   r4   r   r   A  sâ   € € € € € ðð ð
2ð 2ð 2ð 2ð+ Ø˜Ô*¨GÔ,BÐBÔCð+ à	�%˜˜\Ð)Ô*Ô	+ð+ ð + ð + ð + ðZ  x°	Ô':ð  ÀDð  ð  ð  ð  ðD:à˜)Ô$ð:ð ,ð:ð ð	:ð :ð :ð :ð(ð (ð (ð (ð (r3   r   c                   ó*   — e Zd ZU dZeed<   	 eed<   dS )r   zg
    Describes a cross-reference section and describes how it is serialised into
    the PDF file.
    Ú	meta_infor�   N)r)   r*   r+   r,   r    r:   r   r2   r3   r4   r   r   °  sA   € € € € € € ðð ð
 #Ð"Ð"Ñ"ðð ÐÐÑðð r3   r   re   ÚsectionÚall_sectionsc                 ó  — |j         j        }|rB|j        |j        f}|| dz   d …         D ]&}|j        }||j        v rt          j        d¦  «        ‚Œ'|j        j         	                    ¦   «         D �]\  }}|dk    r| dk    rt          j        d¦  «        ‚| t          |¦  «        dz
  k     r?|| dz            }	|	j        j        �|	j        j        j        nd }
|
�||
j        v s	||
j        v rŒ{d }|| dz   d …         D ]‰}|j        }||j        v rd}n0	 |j        |         \  }}|dk    s||k     r|}n# t          $ r Y nw xY w|�B|dk    rt          j        d|› d|› d�¦  «        ‚t          j        d|› d|› d	|dz
  › d
�¦  «        ‚ŒŠ�Œd S )NrH   z9XRef stream objects must not be clobbered in strict mode.r   ztIn strict mode, a free xref with next generation 0 is onlypermitted in an initial revision due to unclear semantics.úObject with id zA was listed as dead, but is reused later, with generation number rb   z and generation z was found after z was freed.)r¨   r~   r>   r?   r�   rˆ   r   r   r„   r¢   rc   rŠ   r…   r†   r�   )re   r©   rª   Úxstream_refÚas_tupleÚsection_rl   r>   Úexpected_next_generationÚnext_sectionrŠ   Úimproper_generationÚsuccrt   r£   s                  r4   Ú_check_freed_refsr´   Â  s–  € ð Ô#Ô.€KØð ØÔ% {Ô'=Ð>ˆØ$ R¨!¡V X XÔ.ð 	ð 	ˆHØÔ%ˆDØ˜4Ô9Ð9Ð9ÝÔ-ØOñô ð ð :ð ,3Ô+<Ô+B×+HÒ+HÑ+JÔ+Jð Uñ UÑ'ˆÐ'ð* $ qÒ(Ð(¨R°!ªV¨VÝÔ)ðMñô ð ð •�LÑ!Ô! AÑ%Ò%Ð%Ø'¨¨Q©Ô/ˆLð  Ô)Ô0Ð<ð Ô&Ô-Ô7Ð7àð ð
 Ð!à˜VÔ2Ð2Ð2Ø Ô 6Ð6Ð6ð à"ÐØ   a¡  Ô*ð !	ð !	ˆDØ”>ˆDà˜Ô,Ð,Ð,Ø&'Ð#Ð#ðØ)-Ô)<¸UÔ)CÑ&�O Qð 1°AÒ5Ð5Ø*Ð-EÒEÐEà.=Ð+øøÝð ð ð Ø�Dðøøøð #Ð.Ø+¨qÒ0Ð0ÝÔ1ð9¨%ð 9ð 9à"5ð9ð 9ð 9ñô ð õ Ô1ðE¨%ð Eð EØ.ðEð Eà3°aÑ7ðEð Eð Eñô ð ð /ñ+!	ðiUð Us   ÄD.Ä.
D;Ä:D;Úsectionsc              #   óP   K  — | D ] }|j         j        �|j         j        V — |V — Œ!d S rƒ   )r�   rŠ   )rµ   r©   s     r4   Ú_with_hybridsr·   .  sH   è è € Øð ð ˆØÔÔ#Ð/ØÔ#Ô*Ð*Ð*Ð*Øˆˆˆˆðð r3   c                 ó  — t          | ¦  «        D ]\  }}t          ||| ¦  «         Œt          t          | ¦  «        ¦  «        }d}t          |¦  «        D �]0\  }}t	          |j                             ¦   «         ¦  «        }|j        j        }|j        j	        }||k     r+|t          j        k    rt          j        d|› d|› d�¦  «        ‚t          ||¦  «        }|j        j	        t          j        k    }|D ]Ž\  }	}
t          |d |…         ¦  «        }|rt!          |¦  «        }|	|j        j        v r nR|D ]-}	 |j        j        |	         }||
k    r n2Œ# t$          $ r Y Œ*w xY wt          j        d|	› d|
› d|
dz
  › d�¦  «        ‚Œ��Œ2d S )	Nr   zEXRef section sizes must be nondecreasing; found XRef section of size z after section of size rb   r¬   z( has an orphaned generation: generation z7 was not preceded by a free instruction for generation rH   )Ú	enumerater´   Úlistr·   r‡   r�   r¤   r¨   rU   rz   r!   rx   r   r   r–   ÚreversedÚnextr„   r�   )rª   re   r©   Úexpanded_sectionsÚ	prev_sizeÚ
higher_genÚszr<   Úis_hybrid_streamr>   r?   Ú	precedingÚprecrt   s                 r4   Ú_check_xref_consistencyrÄ   5  s,  € õ ! Ñ.Ô.ð 5ð 5‰ˆˆGå˜"˜g |Ñ4Ô4Ð4Ð4å�]¨<Ñ8Ô8Ñ9Ô9ÐØ€IÝ Ð!2Ñ3Ô3ð 2ñ 2‰ˆˆGå˜Ô*×AÒAÑCÔCÑDÔDˆ
ØÔÔ#ˆØÔ%Ô7ˆ	Ø�	Š>ˆ>˜i­?Ô+HÒHÐHõ Ô)ðCØðCð CØ6?ðCð Cð Cñô ð õ ˜˜IÑ&Ô&ˆ	ð ÔÔ/µ?Ô3PÒPð 	ð ",ð 	ð 	ÑˆE�:Ý Ð!2°3°B°3Ô!7Ñ8Ô8ˆIð  ð Ý˜I‘”�ð ˜DœNÔ0Ð0Ð0Ø�Eà!ð ð �ðØ&*¤nÔ&:¸5Ô&A�OØ&¨*Ò4Ð4Ø˜ð 5øåð ð ð Ø�Hðøøøõ Ô-ð4 eð 4ð 4Ø.8ð4ð 4ð #-¨q¡.ð4ð 4ð 4ñô ð ð	 ùðS2ð 2s   Ä7EÅ
E	ÅE	c                   óJ   — e Zd ZdZdededefd„Zd„ Zdefd„Z	defd	„Z
d
„ ZdS )r   é
   Úhandlerr\   Úlast_startxrefc                 ó¼   — || _         || _        || _        || _        g | _        t          ¦   «         | _        t          j        |¦  «        | j        _	        d| _
        d S )NF)rÇ   rS   r\   rÈ   rµ   r   Útrailerr   ÚTrailerReferenceÚcontainer_refÚhas_xref_stream)r�   rÇ   rS   r\   rÈ   s        r4   rŒ   zXRefBuilder.__init__y  sX   € ð ˆŒØˆŒØˆŒØ,ˆÔØ+-ˆŒå(Ñ*Ô*ˆŒÝ%,Ô%=¸gÑ%FÔ%FˆŒÔ"Ø$ˆÔÐÐr3   c                 ó  — | j         }t          || j        ¬¦  «        \  }}t          j        ||| j        ¬¦  «        }t          j                             ||¦  «        }||_        | 	                    d¦  «        dk    sJ ‚||fS )NrŸ   ©Úpdfú/Typeú/XRef)
rS   r&   r\   r   r   rÇ   ÚStreamObjectrO   rÌ   Úraw_get)r�   rS   r>   r?   Úxrefstream_refÚ
xrefstreams         r4   Ú_read_xref_stream_objectz$XRefBuilder._read_xref_stream_object†  sŒ   € Ø”ˆÝ.¨v¸d¼kÐJÑJÔJÑˆˆzÝ Ô*¨5°*À$Ä,ÐOÑOÔOˆÝÔ)×:Ò:Ø�Nñ
ô 
ˆ
ð $2ˆ
Ô Ø×!Ò! 'Ñ*Ô*¨gÒ5Ð5Ð5Ð5Ø˜zÐ)Ð)r3   r{   c                 ó2  — | j         }|                     ¦   «         }|                      ¦   «         \  }}t          ¦   «         }|                     t          || j        ¬¦  «        | j        ¬¦  «         t          t          j	        t          |                     d¦  «        ¦  «        |||                     ¦   «         |¬¦  «        }| j                             t          ||¦  «        ¦  «         | j                             |¦  «         |                     d¦  «        S )NrŸ   r_   ©rz   rU   r{   r|   r}   r~   ú/Prev)rS   Útellr×   r   rœ   r$   r\   r    r!   rv   r9   rÔ   rµ   Úappendr   rÊ   Úadd_trailer_revisionrm   )r�   r{   rS   r|   rÕ   rÖ   Úxref_section_datar�   s           r4   Ú_read_xref_streamzXRefBuilder._read_xref_stream‘  s  € Ø”ˆØŸš™œˆØ%)×%BÒ%BÑ%DÔ%DÑ"ˆ˜
å+Ñ-Ô-ÐØ×)Ò)Ý˜j°´Ð=Ñ=Ô=Ø”;ð 	*ñ 	
ô 	
ð 	
õ -Ý-Ô4õ �Z×'Ò'¨Ñ0Ô0Ñ1Ô1Ø1Ø)ØŸš™œØ%ð	
ñ 	
ô 	
ˆð 	Œ×Ò�[¨Ð9JÑKÔKÑLÔLÐLàŒ×)Ò)¨*Ñ5Ô5Ð5Ø�~Š~˜gÑ&Ô&Ð&r3   c                 ó:  — | j         }|                     ¦   «         }t          ¦   «         }|                     t	          |¦  «        | j        ¬¦  «        }|                     ¦   «         }t          j                             |t          j	        | j
        ¦  «        ¦  «        }t          |t          j        ¦  «        sJ ‚t          |                     d¦  «        ¦  «        }| j        r$||k    rt          j        d|› d|dz
  › d�¦  «        ‚	 t          |                     d¦  «        ¦  «        }	n# t           t"          f$ r d }	Y nw xY w|	�Ý|                     ¦   «         }
|                     |	¦  «         |                      ¦   «         \  }}t)          t*          j        t          |                     d¦  «        ¦  «        |	|	|                     ¦   «         |¬¦  «        }|                     t1          |¦  «        || j        ¬¦  «         |                     |
¦  «         t*          j        }nd }t*          j        }t)          ||||||¬¦  «        }| j                             t;          ||¦  «        ¦  «         | j                             |¦  «         |                      d	¦  «        S )
NrŸ   r_   z9Xref table size mismatch: table allocated object with id z, but according to the trailer rH   z" is the maximal allowed object id.ú/XRefStmrÙ   rÚ   )!rS   rÛ   r   rœ   r%   r\   r   ÚDictionaryObjectrO   rË   rÇ   r—   r9   rÔ   r   r   r�   Ú
ValueErrorrK   r×   r    r!   rx   r    r$   rw   r0   rµ   rÜ   r   rÊ   rÝ   rm   )r�   r{   rS   Ú
xref_startrÞ   ÚhighestÚxref_endÚnew_trailerÚdeclared_sizeÚhybrid_xref_stm_locÚ
stream_posr~   rÖ   Úhybrid_stream_metar<   r�   s                   r4   Ú_read_xref_tablezXRefBuilder._read_xref_tableª  s´  € Ø”ˆØ—[’[‘]”]ˆ
Ý+Ñ-Ô-ÐØ#×3Ò3Ý˜VÑ$Ô$¨T¬[ð 4ñ 
ô 
ˆð —;’;‘=”=ˆåÔ.×?Ò?Ø•GÔ,¨T¬\Ñ:Ô:ñ
ô 
ˆõ ˜+¥wÔ'?Ñ@Ô@Ð@Ð@Ð@Ý˜K×/Ò/°Ñ8Ô8Ñ9Ô9ˆàŒ;ð 	˜7 mÒ3Ð3ÝÔ)ð5Øð5ð 5Ø;HÈ1Ñ;Lð5ð 5ð 5ñô ð ð	'Ý"% k×&9Ò&9¸*Ñ&EÔ&EÑ"FÔ"FÐÐøÝ�*Ð%ð 	'ð 	'ð 	'Ø"&ÐÐÐð	'øøøð Ð*ØŸš™œˆJð
 �KŠKÐ+Ñ,Ô,Ð,Ø%)×%BÒ%BÑ%DÔ%DÑ"ˆJ˜
õ "5Ý"1Ô"?Ý˜×+Ò+¨GÑ4Ô4Ñ5Ô5Ø#6Ø2Ø#Ÿ[š[™]œ]Ø%ð"ñ "ô "Ðð ×4Ò4Ý! *Ñ-Ô-Ø"Ø”{ð 5ñ ô ð ð
 �KŠK˜
Ñ#Ô#Ð#Ý'Ô3ˆIˆIàˆJÝ'Ô0ˆIå,Ø'ØØ1Ø%Ø!Ø!ð
ñ 
ô 
ˆð 	Œ×Ò�[¨Ð9JÑKÔKÑLÔLÐLàŒ×)Ò)¨+Ñ6Ô6Ð6Ø�Š˜wÑ'Ô'Ð's   Ä"D+ Ä+EÅ Ec                 óÐ  — | j         }| j        x}}d}|��™| j        r|s|| j        k    rt	          d¦  «        ‚|s|}|                     |¦  «         t          j        |¦  «        r.t           	                    d¦  «         | 
                    ¦   «         }|                     d¦  «        }|dk    rH|                     d¦  «        }|d d…         dk    rt          d	¦  «        ‚|                      |¦  «        }n³|                     ¦   «         rˆ|                     d
t          j        ¦  «         	 |                      |¦  «        }nI# t$          $ r<}t           	                    d|¬¦  «         t'          ||¦  «        }|dz  }Y d }~�Œpd }~ww xY wd| _        nt'          ||¦  «        }|dz  }�Œ—d}|�­™t+          t-          | j        ¦  «        ¦  «        }| j        rt1          |¦  «         |S )Nr   zFailed to locate xref sectionz>Encountered unexpected whitespace when looking for xref streamrH   ó   xé   é   s   refzxref table read errorrB   z;Failed to read xref stream header, attempting to correct...)Úexc_infoT)rS   rÈ   r\   Ú	err_limitr   rK   r   Úskip_over_whitespaceÚloggerÚdebugrÛ   rQ   r   rì   ÚisdigitrL   rM   rß   r   Ú_attempt_startxref_correctionrÍ   rº   r»   rµ   rÄ   )	r�   rS   r{   Ú	startxrefÚ	err_countÚxr�   ÚeÚchrono_sectionss	            r4   Ú
read_xrefszXRefBuilder.read_xrefsï  s&  € à”ˆØ)-Ô)<Ð<Ð˜Yð ˆ	ØÑ#Ø”ð J 	ð J¨i¸$¼.Ò.HÐ.HÝ(Ð)HÑIÔIÐIØð /Ø%.Ð"Ø�KŠK˜	Ñ"Ô"Ð"ÝÔ(¨Ñ0Ô0ð *õ —’ð&ñô ð ð #ŸKšK™MœM�	Ø—’˜A‘”ˆAØ�DŠyˆyà—k’k !‘n”n�Ø�r˜�r”7˜fÒ$Ð$Ý&Ð'>Ñ?Ô?Ð?Ø ×1Ò1Ð2DÑEÔE�	�	Ø—’‘”ð à—’˜B¥¤Ñ,Ô,Ð,ðØ $× 6Ò 6Ð7IÑ JÔ J�I�IøÝ,ð 	ð 	ð 	Ý—L’Lð%à!"ð !ñ ô ð õ !>¸fÀiÑ PÔ P�IØ ‘N�IØ�H�H�H‘Høøøøð	øøøð (,�Ô$Ð$å9¸&À)ÑLÔL�	Ø˜Q‘�	ÙØˆIðS Ñ#õZ �x¨¬Ñ6Ô6Ñ7Ô7ˆØŒ;ð 	5Ý# OÑ4Ô4Ð4ØÐs   Ä,E Å
FÅ1FÆFN)r)   r*   r+   rò   r   r¦   r9   rŒ   r×   rß   rì   rý   r2   r3   r4   r   r   v  sŸ   € € € € € Ø€Ið%Ø!ð%Ø37ð%ØILð%ð %ð %ð %ð	*ð 	*ð 	*ð'°Cð 'ð 'ð 'ð 'ð2C(°3ð C(ð C(ð C(ð C(ðJ7ð 7ð 7ð 7ð 7r3   r   c                   ó   — e Zd ZdS )r   N)r)   r*   r+   r2   r3   r4   r   r   )  s   € € € € € Ø€Dr3   r   c                 ó¸  — t          j        | ¦  «        }|t          j        | ¦  «        z  }t          j        | ¦  «        }t	          |¦  «        }|t          j        | ¦  «        z  }t          j        | ¦  «        }t	          |¦  «        }|                      d¦  «         t          j        | d¬¦  «         |r"|r t                               d|› d|› �¦  «         ||fS )Nrð   T)Ú	seek_backz.Superfluous whitespace found in object header ú )	r   ró   Úskip_over_commentsÚread_until_whitespacer9   rQ   rJ   rô   Úwarning)rS   r\   ÚextraÚidnum_bytesr>   Úgeneration_bytesr?   s          r4   Ú_read_object_headerr  -  sð   € õ
 Ô% fÑ-Ô-€EØ	�TÔ$ VÑ,Ô,Ñ,€EÝÔ,¨VÑ4Ô4€KÝ�ÑÔ€EØ	�TÔ& vÑ.Ô.Ñ.€EÝÔ1°&Ñ9Ô9ÐÝÐ%Ñ&Ô&€JØ
‡K‚K��N„N€NÝÔ˜V¨tÐ4Ñ4Ô4Ð4àð 
�ð 
Ý�Šð$Øð$ð $Ø!ð$ð $ñ	
ô 	
ð 	
ð �*ÐÐr3   c                 ó–   — |                       ¦   «         }	 t          | |¦  «        S # t          $ r}t          d|› �¦  «        |‚d }~ww xY w)Nz Failed to read object header at )rÛ   r  rã   r   )rS   r\   Úposrû   s       r4   r&   r&   D  sc   € Ø
�+Š+‰-Œ-€CðÝ" 6¨6Ñ2Ô2Ð2øÝð ð ð Ý#Ø4¨sÐ4Ð4ñ
ô 
àð	øøøøðøøøs   –& ¦
A°AÁAc                   óž   — e Zd ZdZh d£Zdd„Zdej        fd„Zd„ Z	e
j        dfd	e
fd
„Zd„ Zd„ Zddej        fd„Zd„ Zd„ Zd„ Zd„ Zdd„ZdS )r   z÷
    The standard mandates that each trailer shall contain
    at least all keys used in the preceding trailer, even if unmodified.
    Of course, we cannot trust documents to actually follow this rule, so
    this class implements fallbacks.
    >   ú/Filterú/Lengthú/DecodeParmsr`   rÑ   r^   rá   r�   c                 óD   — g | _         t          j        ¦   «         | _        d S rƒ   )Ú_trailer_revisionsr   râ   Ú_new_changesr‹   s    r4   rŒ   zTrailerDictionary.__init__b  s%   € ð CEˆÔÝ#Ô4Ñ6Ô6ˆÔÐÐr3   Útrailer_dictc                 ó:   — | j                              |¦  «         d S rƒ   )r  rÜ   )r�   r  s     r4   rÝ   z&TrailerDictionary.add_trailer_revisionh  s   € ØÔ×&Ò& |Ñ4Ô4Ð4Ð4Ð4r3   c                 óP   — |                       |¦  «                             ¦   «         S rƒ   )rÔ   Ú
get_object©r�   Úitems     r4   Ú__getitem__zTrailerDictionary.__getitem__k  s"   € ð �|Š|˜DÑ!Ô!×,Ò,Ñ.Ô.Ð.r3   NÚdecryptc                 ól  — | j         }|€,	 | j                             ||¦  «        S # t          $ r Y n#w xY wt	          |¦  «        dz
  |z
  }||d …         }|| j        v r|d                              ||¦  «        S |D ]*}	 |                     ||¦  «        c S # t          $ r Y Œ'w xY wt          |¦  «        ‚)NrH   r   )r  r  rÔ   r�   rc   Únon_trailer_keys)r�   Úkeyr  ÚrevisionÚ	revisionsr©   s         r4   rÔ   zTrailerDictionary.raw_getp  sû   € ð Ô+ˆ	ØÐðØÔ(×0Ò0°°gÑ>Ô>Ð>øÝð ð ð Ø�ðøøøõ ˜)‘n”n qÑ(¨8Ñ3ˆGØ! ' ( (Ô+ˆIà�$Ô'Ð'Ð'ð ˜Q”<×'Ò'¨¨WÑ5Ô5Ð5à!ð 	ð 	ˆHðØ×'Ò'¨¨WÑ5Ô5Ð5Ð5Ð5øÝð ð ð Ø�ðøøøå�s‰mŒmÐs   ‹& ¦
3²3Á?BÂ
B$Â#B$c                 ó   — || j         |<   d S rƒ   )r  )r�   r  Úvalues      r4   Ú__setitem__zTrailerDictionary.__setitem__�  s   € Ø"'ˆÔ˜$ÑÐÐr3   c                 ó\   — 	 | j         |= d S # t          $ r t          j        d¦  «        ‚w xY w)NzICannot remove existing entries from trailer dictionary, only update them.)r  r�   r   ÚPdfErrorr  s     r4   Ú__delitem__zTrailerDictionary.__delitem__�  sL   € ð	àÔ! $Ð'Ð'Ð'øÝð 	ð 	ð 	Ý”-ðñô ð ð	øøøs   ‚ Œ+r@   c                 ó  — | j         }|�|| dz
  d …         }t          j        d„ t          |¦  «        D ¦   «         ¦  «        }|€|                     | j        ¦  «         | j        D ]}|                     |d ¦  «         Œ|S )NrH   c                 óH   — i | ]}|                      ¦   «         D ]\  }}||“Œ	Œ S r2   )r¢   )Ú.0r  ÚkÚvs       r4   ú
<dictcomp>z-TrailerDictionary.flatten.<locals>.<dictcomp>Ÿ  sO   € ð ð ð àØ$ŸNšNÑ,Ô,ðð ñ �A�qð �1ðð ð ð r3   )r  r   râ   r»   Úupdater  r  Úpop)r�   r  Úrelevant_revisionsrÊ   r  s        r4   ÚflattenzTrailerDictionary.flattenš  sª   € Ø!Ô4ÐØÐØ!3°X°IÀ±M°O°OÔ!DÐÝÔ*ðð å (Ð);Ñ <Ô <ðñ ô ñ
ô 
ˆð ÐØ�NŠN˜4Ô,Ñ-Ô-Ð-ð Ô(ð 	#ð 	#ˆCØ�KŠK˜˜TÑ"Ô"Ð"Ð"Øˆr3   c                 ól   — 	 |                       |t          j        ¬¦  «         dS # t          $ r Y dS w xY w)N)r  TF)rÔ   r   ÚPROXYr�   r  s     r4   Ú__contains__zTrailerDictionary.__contains__®  sH   € ð	Ø�LŠL˜Õ'9Ô'?ˆLÑ@Ô@Ð@Ø�4øÝð 	ð 	ð 	Ø�5�5ð	øøøs   ‚!% ¥
3²3c                 óJ   — t          t          | j        g| j        ¢R Ž ¦  «        S rƒ   )Ú	frozensetr   r  r  r‹   s    r4   ÚkeyszTrailerDictionary.keysµ  s&   € Ý�˜tÔ0ÐK°4Ô3JÐKÐKÐKÑLÔLÐLr3   c                 óD   — t          |                      ¦   «         ¦  «        S rƒ   )Úiterr4  r‹   s    r4   Ú__iter__zTrailerDictionary.__iter__¸  s   € Ý�D—I’I‘K”KÑ Ô Ð r3   c                 óN   — |                       ¦   «                              ¦   «         S rƒ   )r.  r¢   r‹   s    r4   r¢   zTrailerDictionary.items»  s   € Ø�|Š|‰~Œ~×#Ò#Ñ%Ô%Ð%r3   c                 ó    — t          d¦  «        ‚)Nz3TrailerDictionary object cannot be written directly)ÚNotImplementedError)r�   rS   rÇ   rÌ   s       r4   Úwrite_to_streamz!TrailerDictionary.write_to_stream¾  s   € Ý!ØAñ
ô 
ð 	
r3   )r�   r   rƒ   ©NN)r)   r*   r+   r,   r  rŒ   r   râ   rÝ   r  r   ÚTRANSPARENTrÔ   r!  r$  r.  r1  r4  r7  r¢   r;  r2   r3   r4   r   r   N  s3  € € € € € ðð ðð ð Ðð7ð 7ð 7ð 7ð5°Ô1Ið 5ð 5ð 5ð 5ð/ð /ð /ð '9Ô&DØð	ð ð $ðð ð ð ð:(ð (ð (ðð ð ðð ¨Ô(@ð ð ð ð ð(ð ð ðMð Mð Mð!ð !ð !ð&ð &ð &ð
ð 
ð 
ð 
ð 
ð 
r3   r   c                 óv  — |                       dt          j        ¦  «         |                      d¦  «        }|                     d¦  «        }|dk    r|d|z
  z
  S d}|                       ||z
  ¦  «         |                      d|z  ¦  «        }|                     d¦  «        }|dk    r†|                       ||z
  |z   d	z
  ¦  «         t          j        | ¦  «         |                      ¦   «         }t          d¦  «        D ]0}|                      d	¦  «         
                    ¦   «         r||z   c S Œ1t          d
¦  «        ‚)NiõÿÿÿrC   s   xrefrB   rÆ   é   rk   ó   
rH   z/Could not find xref table at specified location)rK   rL   rM   rQ   ÚfindÚrfindr   ró   rÛ   rP   rö   r   )rS   rø   ÚtmpÚxref_locÚxrefstm_readbackÚnewline_locÚ
line_startÚlooks           r4   r÷   r÷   Ä  s?  € ð ‡K‚K�•R”[Ñ!Ô!Ð!Ø
�+Š+�b‰/Œ/€CØ�xŠx˜Ñ Ô €HØ�2‚~€~Ø˜B ™MÑ*Ð*ð ÐØ
‡K‚K�	Ð,Ñ,Ñ-Ô-Ð-Ø
�+Š+�aÐ*Ñ*Ñ
+Ô
+€CØ—)’)˜EÑ"Ô"€KØ�bÒÐØ�Š�IÐ 0Ñ0°;Ñ>ÀÑBÑCÔCÐCÝÔ! &Ñ)Ô)Ð)Ø—[’[‘]”]ˆ
Ý˜!‘H”Hð 	)ð 	)ˆDØ�{Š{˜1‰~Œ~×%Ò%Ñ'Ô'ð )à! DÑ(Ð(Ð(Ð(ð)õ
 ÐHÑ
IÔ
IÐIr3   c                 óÀ   ‡— ‰dk    r0t          d‰z
  ¦  «        }t          j        d|| z   ¦  «        d         S t          ˆfd„t	          | ¦  «        D ¦   «         ¦  «        S )Né   z>qr   c              3   ó:   •K  — | ]\  }}|d ‰|z
  dz
  z  z  V — ŒdS )é   rH   Nr2   )r'  re   ÚdigitrU   s      €r4   ú	<genexpr>z!convert_to_int.<locals>.<genexpr>æ  s9   øè è € ÐPÐP±i°b¸%�5˜3 4¨"¡9¨q¡=Ñ1Ñ1ÐPÐPÐPÐPÐPÐPr3   )ÚbytesÚstructÚunpackÚsumr¹   )rg   rU   Úpaddings    ` r4   rd   rd   á  s_   ø€ Øˆq‚y€yÝ˜˜D™‘/”/ˆÝŒ}˜T 7¨Q¡;Ñ/Ô/°Ô2Ð2åÐPÐPÐPÐPÅ9ÈQÁ<Ä<ÐPÑPÔPÑPÔPÐPr3   c                   ó$  — e Zd ZdZdee         fd„Zed„ ¦   «         Zde	j
        fd„Zd„ Zde	j
        fd„Zd	efd
„Zd	efd„Zd	ee	j
                 fd„Zd	ee	j
                 fd„Zd	efd„Zd	eeeef                  fd„Zd„ Zed	efd„¦   «         ZdS )r   a/  
    Internal class to parse & store information from the xref section(s) of a
    PDF document.

    Stores both the most recent status of all xrefs in addition to their
    historical values.

    All members of this class are considered internal API and are subject
    to change without notice.
    Úxref_sectionsc                 óD   — || _         || _        d„ |D ¦   «         | _        d S )Nc                 ó>   — h | ]}|j         j        ®|j         j        ’ŒS rƒ   )r¨   r~   ©r'  r©   s     r4   ú	<setcomp>z%XRefCache.__init__.<locals>.<setcomp>þ  s4   € ð !
ð !
ð !
àØÔ Ô+Ð7ð ÔÔ(à7Ð7Ð7r3   )ÚreaderÚ_xref_sectionsÚxref_stream_refs)r�   rZ  rU  s      r4   rŒ   zXRefCache.__init__õ  s8   € ØˆŒØ+ˆÔð!
ð !
à(ð!
ñ !
ô !
ˆÔÐÐr3   c                 ó*   — t          | j        ¦  «        S rƒ   )rc   r[  r‹   s    r4   Útotal_revisionszXRefCache.total_revisions  s   € å�4Ô&Ñ'Ô'Ð'r3   r�   c                 óú   — t          t          | j        ¦  «        ¦  «        D ]K\  }}	 |j                             |¦  «         t          | j        ¦  «        dz
  |z
  c S # t          $ r Y ŒHw xY wt          |¦  «        ‚©NrH   )r¹   r»   r[  r�   r‘   rc   r�   )r�   r�   re   r©   s       r4   Úget_last_changezXRefCache.get_last_change  s“   € Ý$¥X¨dÔ.AÑ%BÔ%BÑCÔCð 	ð 	‰KˆB�ðØÔ!×-Ò-¨cÑ2Ô2Ð2Ý˜4Ô.Ñ/Ô/°!Ñ3°bÑ8Ð8Ð8Ð8øÝð ð ð à�ðøøøõ �s‰mŒmÐs   ¨3AÁ
A+Á*A+c                 óN   ‡ — ‰ j         |         }ˆ fd„|j        j        D ¦   «         S )Nc                 óF   •— h | ]}t          j        |‰j        ¬ ¦  «        ’ŒS ©rÏ   ©r   r   rZ  )r'  Ú	objstm_idr�   s     €r4   rY  z3XRefCache.object_streams_used_in.<locals>.<setcomp>  s;   ø€ ð 
ð 
ð 
àõ Ô˜i¨T¬[Ð9Ñ9Ô9ð
ð 
ð 
r3   )r[  r�   r‰   ©r�   r  r©   s   `  r4   Úobject_streams_used_inz XRefCache.object_streams_used_in  sA   ø€ ØÔ% hÔ/ˆð
ð 
ð 
ð 
à$Ô.Ô?ð
ñ 
ô 
ð 	
r3   c                 ó¶   — t          | j        ¦  «        D ]6\  }}	 |j                             |¦  «        }|�|c S Œ'# t          $ r Y Œ3w xY wt	          |¦  «        ‚rƒ   )r¹   r[  r�   r‘   r�   )r�   r�   re   r©   Úresults        r4   Úget_introducing_revisionz"XRefCache.get_introducing_revision  s}   € Ý$ TÔ%8Ñ9Ô9ð 	ð 	‰KˆB�ðØ Ô*×6Ò6°sÑ;Ô;�ØÐ%Ø�I�I�Ið &øåð ð ð à�ðøøøõ �s‰mŒmÐs   ›<¼
A	ÁA	r@   c                 ó*   — | j         |         }|j        S rƒ   )r[  r¨   rg  s      r4   Úget_xref_container_infoz!XRefCache.get_xref_container_info$  ó   € ØÔ% hÔ/ˆØÔ Ð r3   c                 ó*   — | j         |         }|j        S rƒ   )r[  r�   rg  s      r4   Úget_xref_datazXRefCache.get_xref_data(  rn  r3   c                 ó¤   ‡ — ‰ j         |         }ˆ fd„|j        j        D ¦   «         }|j        j        }|�|ˆ fd„|j        j        D ¦   «         z  }|S )a  
        Look up the object refs for all objects explicitly added or overwritten
        in a given revision.

        :param revision:
            A revision number. The oldest revision is zero.
        :return:
            A set of Reference objects.
        c                 óN   •— h | ]!\  }}t          j        ||‰j        ¬ ¦  «        ’Œ"S rd  re  ©r'  r>   r?   r�   s      €r4   rY  z6XRefCache.explicit_refs_in_revision.<locals>.<setcomp>7  sA   ø€ ð 
ð 
ð 
á!��zõ Ô˜e Z°T´[ÐAÑAÔAð
ð 
ð 
r3   Nc                 óN   •— h | ]!\  }}t          j        ||‰j        ¬ ¦  «        ’Œ"S rd  re  rs  s      €r4   rY  z6XRefCache.explicit_refs_in_revision.<locals>.<setcomp>>  sA   ø€ ð ð ð á%�E˜:õ Ô! %¨¸¼ÐEÑEÔEðð ð r3   )r[  r�   rˆ   rŠ   )r�   r  r©   rj  rŠ   s   `    r4   rˆ   z#XRefCache.explicit_refs_in_revision,  s�   ø€ ð Ô% hÔ/ˆð
ð 
ð 
ð 
à%,Ô%6Ô%Pð
ñ 
ô 
ˆð Ô"Ô)ˆØÐàð ð ð ð à)/Ô)9Ô)Sðñ ô ñ ˆFð ˆr3   c                 ór   ‡ — ‰ j         |         }ˆ fd„|j        j                             ¦   «         D ¦   «         S )zö
        Look up the object refs for all objects explicitly freed
        in a given revision.

        :param revision:
            A revision number. The oldest revision is zero.
        :return:
            A set of Reference objects.
        c                 ó`   •— h | ]*\  }}|d k    ¯t          j        ||dz
  ‰j        ¬¦  «        ’Œ+S )r   rH   rÏ   re  )r'  r>   Úgenr�   s      €r4   rY  z3XRefCache.refs_freed_in_revision.<locals>.<setcomp>O  sF   ø€ ð 
ð 
ð 
á��sØ�QŠwˆwõ Ô˜e S¨1¡W°$´+Ð>Ñ>Ô>àˆwˆwr3   )r[  r�   r„   r¢   rg  s   `  r4   Úrefs_freed_in_revisionz XRefCache.refs_freed_in_revisionD  sO   ø€ ð Ô% hÔ/ˆð
ð 
ð 
ð 
à%Ô/Ô5×;Ò;Ñ=Ô=ð
ñ 
ô 
ð 	
r3   c                 ó4   — | j         |         }|j        j        S )a  
        Look up the location of the XRef table/stream associated with a specific
        revision, as indicated by startxref or /Prev.

        :param revision:
            A revision number. The oldest revision is zero.
        :return:
            An integer pointer
        )r[  r¨   r{   rg  s      r4   Úget_startxref_for_revisionz$XRefCache.get_startxref_for_revisionU  s   € ð Ô% hÔ/ˆØÔ Ô3Ð3r3   c                 ó¦   — t          | j        d|dz   …         ¦  «        D ]0}	 |j                             |¦  «        }|c S # t          $ r Y Œ-w xY wdS )ab  
        Look up the location of the historical value of an object.

        .. note::
            This method is not suitable for determining whether or not
            a particular object ID is available in a given revision, since
            it treats unused objects and freed objects the same way.

        :param ref:
            An object reference.
        :param revision:
            A revision number. The oldest revision is zero.
        :return:
            An integer offset, an object stream reference, or ``None`` if
            the reference does not resolve in the specified revision.
        NrH   )r»   r[  r�   r‘   r�   )r�   r�   r  r©   rj  s        r4   Úget_historical_refzXRefCache.get_historical_refb  sv   € õ&   Ô 3°N°hÀ±l°NÔ CÑDÔDð 	ð 	ˆGðØ Ô*×6Ò6°sÑ;Ô;�Ø���øÝð ð ð Ø�ðøøøð ˆts   £AÁ
AÁAc                 óX   — |                       |t          | j        ¦  «        dz
  ¦  «        S r`  )r|  rc   r[  )r�   r�   s     r4   r  zXRefCache.__getitem__~  s*   € ð ×&Ò& s­C°Ô0CÑ,DÔ,DÀqÑ,HÑIÔIÐIr3   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )z¦
        Determine if a file uses hybrid references anywhere.

        :return:
            ``True`` if hybrid references were detected, ``False`` otherwise.
        c              3   óJ   K  — | ]}|j         j        t          j        k    V — Œd S rƒ   )r¨   rz   r!   rw   rX  s     r4   rN  z1XRefCache.hybrid_xrefs_present.<locals>.<genexpr>‹  sD   è è € ð 
ð 
àð ÔÔ/µ?Ô3NÒNð
ð 
ð 
ð 
ð 
ð 
r3   )Úanyr[  r‹   s    r4   Úhybrid_xrefs_presentzXRefCache.hybrid_xrefs_presentƒ  s5   € õ ð 
ð 
àÔ.ð
ñ 
ô 
ñ 
ô 
ð 	
r3   N)r)   r*   r+   r,   r   r   rŒ   Úpropertyr^  r   r   ra  rh  rk  r    rm  r   rp  r
   rˆ   rx  r9   rz  r	   r   r   r|  r  r¦   r�  r2   r3   r4   r   r   é  s   € € € € € ð	ð 	ð
¨d°;Ô.?ð 
ð 
ð 
ð 
ð ð(ð (ñ „Xð(ð 7Ô#4ð ð ð ð ð
ð 
ð 
ð	¨GÔ,=ð 	ð 	ð 	ð 	ð!Ð3Fð !ð !ð !ð !ð!¨ð !ð !ð !ð !ð°S¸Ô9JÔ5Kð ð ð ð ð0
°#°gÔ6GÔ2Hð 
ð 
ð 
ð 
ð"4°cð 4ð 4ð 4ð 4ðà	�%˜˜\Ð)Ô*Ô	+ðð ð ð ð8Jð Jð Jð
 ð

 dð 

ð 

ð 

ñ „Xð

ð 

ð 

r3   r   c                   óV   — e Zd ZdZdd„Zd„ Zd„ Zdedej	        fd„Z
d	ej        fd
„ZdS )r   uæ  
    Utility class to collect objects into a PDF object stream.

    Object streams are mainly useful for space efficiency reasons.
    They allow related objects to be grouped & compressed together in a
    more flexible manner.


    .. warning::
        Object streams can only be used in files with a cross-reference
        stream, as opposed to a classical XRef table.
        In particular, this means that incremental updates to files with a
        legacy XRef table cannot contain object streams either.
        See Â§ 7.5.7 in ISO 32000-1 for further details.

    .. danger::
        Use :meth:`.BasePdfFileWriter.prepare_object_stream` to create instances
        of object streams. The `__init__` function is internal API.

    Tc                 ó0   — i | _         || _        d | _        d S rƒ   )Ú	_obj_refsÚcompressr�   )r�   r†  s     r4   rŒ   zObjectStream.__init__±  s   € ØˆŒØ ˆŒØˆŒˆˆr3   c                 ó*   — t          | j        ¦  «        S rƒ   )r¦   r…  r‹   s    r4   Ú__bool__zObjectStream.__bool__¶  s   € Ý�D”NÑ#Ô#Ð#r3   c                 óN   — t          | j                             ¦   «         ¦  «        S rƒ   )r6  r…  r¢   r‹   s    r4   r7  zObjectStream.__iter__¹  s   € Ý�D”N×(Ò(Ñ*Ô*Ñ+Ô+Ð+r3   r>   Úobjc                 ób   — t          |t          ¦  «        rt          d¦  «        ‚|| j        |<   dS )aÉ  
        Add an object to an object stream.
        Note that objects in object streams always have their generation number
        set to `0` by definition.

        :param idnum:
            The object's ID number.
        :param obj:
            The object to embed into the object stream.
        :raise TypeError:
            Raised if ``obj`` is an instance of :class:`~.generic.StreamObject`
            or :class:`~.generic.IndirectObject`.
        zJStream objects and bare references cannot be embedded into object streams.N)r—   r   Ú	TypeErrorr…  )r�   r>   rŠ  s      r4   Ú
add_objectzObjectStream.add_object¼  sB   € õ �cÕ.Ñ/Ô/ð 	Ýð"ñô ð ð !$ˆŒ�uÑÐÐr3   r@   c           
      óð  — t          ¦   «         }t          ¦   «         }| j                             ¦   «         D ]I\  }}|                     ¦   «         }|                     |d¦  «         |                     d||fz  ¦  «         ŒJ|                     ¦   «         }|                     d¦  «         |                     |¦  «        }||                     ¦   «         z   }t          j
        t          d¦  «        t          d¦  «        t          d¦  «        t          j        t          | j        ¦  «        ¦  «        t          d¦  «        t          j        |¦  «        i|¬¦  «        }	| j        r|	                     ¦   «          |	S )	zƒ
        Render the object stream to a PDF stream object

        :return: An instance of :class:`~.generic.StreamObject`.
        Ns   %d %d r   rÑ   z/ObjStmz/Nz/First)ri   )r   r…  r¢   rÛ   r;  ÚwriterK   rQ   Úgetvaluer   rÓ   r   rN   rc   r†  )
r�   Ústream_headerÚ	main_bodyr>   rŠ  rX   Úfirst_obj_offsetÚsh_bytesri   Ústream_objects
             r4   Úas_pdf_objectzObjectStream.as_pdf_objectÒ  s_  € õ  ™	œ	ˆÝ‘I”Iˆ	Øœ.×.Ò.Ñ0Ô0ð 	=ð 	=‰JˆE�3Ø—^’^Ñ%Ô%ˆFØ×Ò 	¨4Ñ0Ô0Ð0Ø×Ò 	¨U°F¨OÑ ;Ñ<Ô<Ð<Ð<à(×-Ò-Ñ/Ô/ÐØ×Ò˜1ÑÔÐØ ×%Ò%Ð&6Ñ7Ô7ˆØ ×!3Ò!3Ñ!5Ô!5Ñ5ˆÝÔ,å˜Ñ!Ô!¥8¨IÑ#6Ô#6Ý˜‘”¥Ô 4µS¸¼Ñ5HÔ5HÑ IÔ IÝ˜Ñ"Ô"¥GÔ$8Ð9IÑ$JÔ$Jðð
 $ð
ñ 
ô 
ˆð Œ=ð 	%Ø×"Ò"Ñ$Ô$Ð$ØÐr3   N©T)r)   r*   r+   r,   rŒ   rˆ  r7  r9   r   Ú	PdfObjectr�  rÓ   r–  r2   r3   r4   r   r   ›  s“   € € € € € ðð ð*ð ð ð ð
$ð $ð $ð,ð ,ð ,ð$ ð $¨'Ô*;ð $ð $ð $ð $ð,˜wÔ3ð ð ð ð ð ð r3   r   c              #   ó8  K  — d}g }|                       ¦   «         sdS t          |                       ¦   «         d„ ¬¦  «        }t          |¦  «        \  \  }}}|D ];}|\  }}|r||dz   k    r
||fV — g }|}|                     | |         |f¦  «         |}Œ<||fV — dS )zT
    Helper method to divide the XRef table (or stream) into contiguous chunks.
    Nc                 ó   — | d         S r`  r2   )Úts    r4   ú<lambda>z)_contiguous_xref_chunks.<locals>.<lambda>ü  s
   € ¸!¸A¼$€ r3   )r  rH   )r4  Úsortedr   rÜ   )	Úposition_dictÚprevious_idnumÚcurrent_chunkÚkey_iterr£   Úfirst_idnumre   r?   r>   s	            r4   Ú_contiguous_xref_chunksr£  ð  sï   è è € ð €NØ€Mà×ÒÑÔð àˆõ �m×(Ò(Ñ*Ô*°°Ð?Ñ?Ô?€HÝ!% h¡¤ÑÑ€Qˆ�hØð ð ˆØÑˆ
�Eð ð 	 ˜U n°qÑ&8Ò8Ð8Ø˜}Ð,Ð,Ð,Ð,ØˆMØˆKð 	×Ò˜m¨BÔ/°Ð<Ñ=Ô=Ð=Øˆˆð �}Ð
$Ð$Ð$Ð$Ð$Ð$r3   rž  c                 ó€  ‡ — ‰                       ¦   «         }‰                      d¦  «         t          |¦  «        }ˆ fd„}ˆ fd„}	 t          |¦  «        \  }}n'# t          $ r ‰                      d¦  «         |cY S w xY wd}|dk    r= |dt          |¦  «        dz   ¦  «         ‰                      |¦  «          ||¦  «         nN‰                      d¦  «         ‰                      |¦  «          ||t          |¦  «        ¦  «          ||¦  «         |D ])\  }} ||t          |¦  «        ¦  «          ||¦  «         Œ*|S )	Ns   xref
c                 óf   •— d| |fz  }‰                      |                     d¦  «        ¦  «         d S )Nz%d %d
Úascii©r�  Úencode)r>   ÚlengthÚheaderrS   s      €r4   Úwrite_headerz&write_xref_table.<locals>.write_header  s5   ø€ Ø˜e V˜_Ñ,ˆØ�Š�V—]’] 7Ñ+Ô+Ñ,Ô,Ð,Ð,Ð,r3   c                 óv   •— | D ]4\  }}d||fz  }‰                      |                     d¦  «        ¦  «         Œ5d S )Nz%010d %05d n 
r¦  r§  )ÚchunkÚpositionr?   ÚentryrS   s       €r4   Úwrite_subsectionz*write_xref_table.<locals>.write_subsection  sQ   ø€ Ø$)ð 	0ð 	0Ñ ˆH�jØ%¨°:Ð(>Ñ>ˆEØ�LŠL˜Ÿš gÑ.Ô.Ñ/Ô/Ð/Ð/ð	0ð 	0r3   s   0 0
s   0000000000 65535 f 
rH   r   s   0 1
)rÛ   r�  r£  r¼   ÚStopIterationrc   )	rS   rž  Úxref_locationÚsubsectionsr«  r°  r¢  Ú
subsectionÚnull_obj_refs	   `        r4   r'   r'     sŸ  ø€ Ø—K’K‘M”M€MØ
‡L‚L�ÑÔÐõ
 *¨-Ñ8Ô8€Kð-ð -ð -ð -ð -ð0ð 0ð 0ð 0ð 0ð
Ý"& {Ñ"3Ô"3Ñˆ�Z�ZøÝð ð ð à�Š�XÑÔÐØÐÐÐðøøøð ,€LØ�aÒÐàˆ�Q�˜J™œ¨!Ñ+Ñ,Ô,Ð,Ø�Š�\Ñ"Ô"Ð"ØÐ˜Ñ$Ô$Ð$Ð$ð 	�Š�XÑÔÐØ�Š�\Ñ"Ô"Ð"Øˆ�[¥# j¡/¤/Ñ2Ô2Ð2ØÐ˜Ñ$Ô$Ð$Ø#.ð %ð %Ñˆ�Zàˆ�[¥# j¡/¤/Ñ2Ô2Ð2ØÐ˜Ñ$Ô$Ð$Ð$àÐs   ÁA Á!A<Á;A<c                   ó0   ‡ — e Zd Zdefˆ fd„Zdˆ fd„	Zˆ xZS )r"   rž  c                 ó.  •— t          ¦   «                              ¦   «          || _        t          t          j        d¦  «        }|                      t          d¦  «        t	          j        |¦  «        t          d¦  «        t          d¦  «        i¦  «         d S )N)rH   rJ  rk   r`   rÑ   rÒ   )	ÚsuperrŒ   rž  Úmapr   rN   r+  r   ÚArrayObject)r�   rž  ÚwidthsÚ	__class__s      €r4   rŒ   zXRefStream.__init__C  s…   ø€ Ý‰Œ×ÒÑÔÐØ*ˆÔõ
 •WÔ)¨9Ñ5Ô5ˆØ�Šå˜‘”¥Ô 3°FÑ ;Ô ;Ý˜Ñ!Ô!¥8¨GÑ#4Ô#4ðñ	
ô 	
ð 	
ð 	
ð 	
r3   Nc                 ó–  •— ddg}t          | j        ¦  «        }t          ¦   «         }|                     d¦  «         |D �]\  }}||t	          |¦  «        gz  }|D ]ò\  }	}
t          |	t          ¦  «        rs|
dk    sJ ‚|	\  }}|                     d¦  «         |                     t          j        d|¦  «        ¦  «         |                     t          j        d|¦  «        ¦  «         Œ�|                     d¦  «         |                     t          j        d|	¦  «        ¦  «         |                     t          j        d|
¦  «        ¦  «         Œó�Œt          j
        t          t          j        |¦  «        ¦  «        }|| t          d¦  «        <   |                     ¦   «         | _        t!          ¦   «                              |d ¦  «         d S )	Nr   rH   s            ÿÿó   z>Qz>Hó   r^   )r£  rž  r   r�  rc   r—   ÚtuplerP  Úpackr   rº  r¹  rN   r   Ú	getbufferÚ_datar¸  r;  )r�   rS   rÇ   rÌ   Úindexr³  Ústream_contentr¢  r´  r®  r?   Úobj_stream_numre   Úindex_entryr¼  s                 €r4   r;  zXRefStream.write_to_streamR  s¿  ø€ ð �A�ˆÝ-¨dÔ.@ÑAÔAˆÝ ™œˆà×ÒÐ6Ñ7Ô7Ð7Ø'2ð 	Hñ 	HÑ#ˆK˜Ø�k¥3 z¡?¤?Ð3Ñ3ˆEØ(2ð Hð HÑ$�˜*Ý˜h­Ñ.Ô.ð 
Hà%¨š?˜?˜?˜?Ø)1Ñ&�N BØ"×(Ò(¨Ñ1Ô1Ð1Ø"×(Ò(­¬°T¸>Ñ)JÔ)JÑKÔKÐKØ"×(Ò(­¬°T¸2Ñ)>Ô)>Ñ?Ô?Ð?Ð?à"×(Ò(¨Ñ1Ô1Ð1Ø"×(Ò(­¬°T¸8Ñ)DÔ)DÑEÔEÐEØ"×(Ò(­¬°T¸:Ñ)FÔ)FÑGÔGÐGÐGñHõ Ô)­#­gÔ.BÀEÑ*JÔ*JÑKÔKˆà#.ˆ�X�hÑÔÑ Ø#×-Ò-Ñ/Ô/ˆŒ
Ý‰Œ×Ò ¨Ñ-Ô-Ð-Ð-Ð-r3   r<  )r)   r*   r+   r   rŒ   r;  Ú__classcell__)r¼  s   @r4   r"   r"   B  sb   ø€ € € € € ð
 lð 
ð 
ð 
ð 
ð 
ð 
ð.ð .ð .ð .ð .ð .ð .ð .ð .ð .r3   r"   r—  )Dr,   r-   ÚloggingrL   rP  Údataclassesr   Úior   Ú	itertoolsr   Útypingr   r   r   r	   r
   r   r   Úpyhanko.pdf_utilsr   r   Úpyhanko.pdf_utils.genericr   r   Úpyhanko.pdf_utils.miscr   r   r   Úpyhanko.pdf_utils.rw_commonr   Ú__all__Ú	getLoggerr)   rô   ÚuniqueÚEnumr#   r   r   r%   rÓ   r¦   r$   r!   r    r   r   r9   r´   r·   rÄ   r   r   r  r&   r˜  r   r÷   rd   r   r   r¥   r   r   r£  r'   r"   r2   r3   r4   ú<module>rÖ     s®  ððð ð €€€Ø €€€Ø 	€	€	€	Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ Dà +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 2Ð 2Ð 2Ð 2Ð 2Ð 2ðð ð €ð, 
ˆÔ	˜8Ñ	$Ô	$€ð „ðð ð ð ð ˆtŒyñ ô ñ „ðð* €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð  €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð4E) ¨Ô 3ð E)ð E)ð E)ð E)ðR 7;ð[Qð [QØÔ%ð[QØ/3ð[QàˆiÔð[Qð [Qð [Qð [Qð| „ð ð  ð  ð  ð  �d”iñ  ô  ñ „ð ð €�$ÐÑÔðð ð ð ð ñ ô ñ ÔððBl(ð l(ð l(ð l(ð l(ñ l(ô l(ð l(ð^ €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð"iØðiØ!ðiØ15°kÔ1Bðið ið ið iðX˜D Ô-ð ð ð ð ð>¨$¨{Ô*;ð >ð >ð >ð >ðBpð pð pð pð pñ pô pð pðf	ð 	ð 	ð 	ð 	˜DÔ-ñ 	ô 	ð 	ðð ð ð.ð ð ðs
ð s
ð s
ð s
ð s
˜Ô)ñ s
ô s
ð s
ðlJð Jð Jð:Qð Qð Qðe
ð e
ð e
ð e
ð e
ñ e
ô e
ð e
ðP �E˜#˜s˜(”O U¨3°°c¸3°h´Ð+?Ô%@Ð@ÔA€ð Ô-¨wÔ/CÐDÐ ðRð Rð Rð Rð Rñ Rô Rð Rðj%ð %ð %ðB.¨D°°s¸C°x´À#Ð1EÔ,Fð .ð .ð .ð .ðb+.ð +.ð +.ð +.ð +.�Ô%ñ +.ô +.ð +.ð +.ð +.r3   