§
    ¥”j ã            	       ó   — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
mZ ddlmZmZmZ ddlmZ ddlmZmZmZmZmZmZ ddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z" ej#        rdd	l$m%Z% g d
¢Z&dZ'dZ( ej)        d *                    d¦  «        ¦  «        Z+ ej,        e-¦  «        Z. G d„ dej/        ¦  «        Z0de0fd„Z1 G d„ d¦  «        Z2 G d„ de2¦  «        Z3 e
d¬¦  «         G d„ de2¦  «        ¦   «         Z4ej5         G d„ dej/        ¦  «        ¦   «         Z6de6j7        fddde8d e6d!d"fd#„Z9 G d$„ d"¦  «        Z: G d%„ d&e:¦  «        Z; G d'„ d(e:¦  «        Z< G d)„ d*e:¦  «        Z= G d+„ d,e>e:¦  «        Z? G d-„ d.e:e2¦  «        Z@ G d/„ d0ejA        e:¦  «        ZB G d1„ d2eCe:¦  «        ZDd3eeEeFeGf         d!ed4         fd5„ZHd6ZId!ed4         fd7„ZJd!eFfd8„ZKd!ed4         fd9„ZL G d:„ d;eFe:¦  «        ZM G d<„ d=ej/        ¦  «        ZNd>eeFeGf         d!eNfd?„ZO G d@„ dAeEe:¦  «        ZPdB„ ZQdCeFd!dDfdE„ZR G dF„ dDeEe:¦  «        ZSdG„ ZTdH„ ZU G dI„ dJeVe:¦  «        ZW G dK„ dLeW¦  «        ZXdM„ ZYdN„ ZZdOZ[ e\e[¦  «        dPk    sJ ‚dQ„  e]e[¦  «        D ¦   «         Z^eSZ_ePeMeWe?fZ`dR„ Za G dS„ dTe:¦  «        ZbdUZcdVed!ePfdW„Zd ej)        dX¦  «        Ze ej)        dY¦  «        Zf ej)        dZ¦  «        Zg ej)        d[¦  «        Zhd_d\eEd]e8d!efd^„ZidS )`zÔ
Implementation of PDF object types and other generic functionality.
The internals were imported from PyPDF2, with modifications.

See :ref:`here <pypdf2-license>` for the original license
of the PyPDF2 project.
é    N)Ú	dataclassÚfield)ÚdatetimeÚ	timedeltaÚtimezone)ÚBytesIO)ÚAnyÚCallableÚIteratorÚOptionalÚTupleÚUnioné   )ÚIndirectObjectExpectedÚPdfErrorÚPdfReadErrorÚPdfStreamErrorÚPdfStrictReadErrorÚPdfWriteErrorÚis_regular_characterÚread_non_whitespaceÚread_until_delimiterÚread_until_regexÚskip_over_whitespace©ÚSecurityHandler)ÚArrayObjectÚBooleanObjectÚByteStringObjectÚDecryptedObjectProxyÚDereferenceableÚDictionaryObjectÚEncryptedObjAccessÚFloatObjectÚIndirectObjectÚ
NameObjectÚ
NullObjectÚNumberObjectÚ	PdfObjectÚ	ReferenceÚStreamObjectÚTextStringEncodingÚTextStringObjectÚTrailerReferenceÚpdf_dateÚpdf_nameÚ
pdf_stringÚread_objectÚOperatorLiterals   /<[tf(n%s   +-.z(\d+)\s+(\d+)\s+R[^a-zA-Z]Úasciic                   ó"   — e Zd ZdZdZ	 dZ	 dZdS )r#   zt
    Defines what to do when an encrypted object is encountered when retrieving
    an object from a container.
    r   r   é   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚPROXYÚTRANSPARENTÚRAW© ó    úh/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/pyhanko/pdf_utils/generic.pyr#   r#   H   s=   € € € € € ðð ð
 €Eðð
 €Kð	ð €Cðð r?   r#   Úeoac                 óŒ   — t          | t          ¦  «        r.|t          j        k    r| j        S |t          j        k    r| j        S | S ©N)Ú
isinstancer    r#   r<   Ú	decryptedr=   Ú
raw_object)ÚobjrA   s     r@   Ú_deproxy_decryptrH   g   sH   € Ý�#Õ+Ñ,Ô,ð "ØÕ$Ô0Ò0Ð0Ø”=Ð ØÕ&Ô*Ò*Ð*Ø”>Ð!Ø€Jr?   c                   ó    — e Zd ZdZdd„Zd„ ZdS )r!   aD  
    Represents an opaque reference to a PDF object associated with
    a PDF Handler (see :class:`PdfHandler <.rw_common.PdfHandler>`).

    This can either be a reference to an object with an object ID
    (see :class:`.Reference`) or a reference to the trailer of a PDF document
    (see :class:`.TrailerReference`).
    Úreturnr)   c                 ó   — t           ‚)zgRetrieve the PDF object backing this dereferenceable.

        :return: A :class:`.PdfObject`.
        ©ÚNotImplementedError©Úselfs    r@   Ú
get_objectzDereferenceable.get_objectz   ó
   € õ
 "Ð!r?   c                 ó   — t           ‚)zzReturn the PDF handler associated with this dereferenceable.

        :return: a :class:`~.rw_common.PdfHandler`.
        rL   rN   s    r@   Úget_pdf_handlerzDereferenceable.get_pdf_handler�   rQ   r?   N©rJ   r)   )r7   r8   r9   r:   rP   rS   r>   r?   r@   r!   r!   p   sA   € € € € € ðð ð"ð "ð "ð "ð"ð "ð "ð "ð "r?   r!   c                   ó&   — e Zd ZdZd„ Zdd„Zd„ ZdS )	r.   ao  
    A reference to the trailer of a PDF document.

    .. warning::
       Since the trailer does not have a well-defined object ID in files with
       "classical" cross-reference tables (as opposed to cross-reference
       streams), this is not a subclass of :class:`.Reference`.

    :param reader:
        a :class:`~pyhanko.pdf_utils.reader.PdfFileReader`
    c                 ó   — || _         d S rC   ©Úreader)rO   rX   s     r@   Ú__init__zTrailerReference.__init__–   s   € ØˆŒˆˆr?   rJ   r)   c                 ó   — | j         j        S rC   )rX   ÚtrailerrN   s    r@   rP   zTrailerReference.get_object™   s   € ØŒ{Ô"Ð"r?   c                 ó   — | j         S rC   rW   rN   s    r@   rS   z TrailerReference.get_pdf_handlerœ   s
   € ØŒ{Ðr?   NrT   )r7   r8   r9   r:   rY   rP   rS   r>   r?   r@   r.   r.   ‰   sP   € € € € € ð
ð 
ðð ð ð#ð #ð #ð #ðð ð ð ð r?   r.   T)Úfrozenc                   óh   — e Zd ZU dZeed<   	 dZeed<   	  edddd¬¦  «        Ze	ed<   	 dd„Z
d„ ZdS )r*   a   
    A reference to an object with a certain ID and generation number, with
    a PDF handler attached to it.

    .. warning::
       Contrary to what one might expect, the generation number does *not*
       indicate the document revision in which the object was modified. In fact,
       nonzero generation numbers are exceedingly rare these days; in most
       real-world PDF files, objects are simply overridden without ever
       increasing the generation number.

       Except in very specific circumstances, dereferencing a
       :class:`.Reference` will return the most recent version of the object
       with the stated object ID and generation number.
    Úidnumr   Ú
generationFN)ÚreprÚhashÚcompareÚdefaultÚpdfrJ   r)   c                 ó¾   — | j         €t          ¦   «         S ddlm} t	          | j         |¦  «        sJ ‚| j                              | ¦  «                             ¦   «         S )Nr   ©Ú
PdfHandler)re   r'   Úpyhanko.pdf_utils.rw_commonrh   rD   rP   )rO   rh   s     r@   rP   zReference.get_objectÇ   s`   € ØŒ8ÐÝ‘<”<ÐØ:Ð:Ð:Ð:Ð:Ð:å˜$œ( JÑ/Ô/Ð/Ð/Ð/ØŒx×"Ò" 4Ñ(Ô(×3Ò3Ñ5Ô5Ð5r?   c                 ó   — | j         S rC   )re   rN   s    r@   rS   zReference.get_pdf_handlerÏ   s	   € ØŒxˆr?   rT   )r7   r8   r9   r:   ÚintÚ__annotations__r`   r   re   ÚobjectrP   rS   r>   r?   r@   r*   r*       s”   € € € € € € ðð ð  €J€J�Jðð €J�ÐÐÑðð �%˜U¨¸ÀtÐLÑLÔL€CˆÐLÐLÑLðð6ð 6ð 6ð 6ðð ð ð ð r?   r*   c                   ó&   — e Zd ZdZdZdZd„ Zd„ ZdS )ÚContentOpReadingr   r6   é   c                 ó"   — | t           j        k    S rC   )ro   ÚNOrN   s    r@   Ú__bool__zContentOpReading.__bool__Ù   s   € ØÕ'Ô*Ò*Ð*r?   c                 ó6   — | st           j        S t           j        S rC   )ro   rr   Ú	IN_OBJECTrN   s    r@   ÚnestzContentOpReading.nestÜ   s   € Øð 	.Ý#Ô&Ð&å#Ô-Ð-r?   N)r7   r8   r9   rr   ÚGRAPHIC_OPSru   rs   rv   r>   r?   r@   ro   ro   Ó   sA   € € € € € à	
€BØ€KØ€Ið+ð +ð +ð.ð .ð .ð .ð .r?   ro   FÚcontainer_refÚas_metadata_streamÚin_content_streamrJ   r)   c                 ód  — |                       d¦  «        }|                      dt          j        ¦  «         t                               |¦  «        }|dk    rt                               | ¦  «        }�n7|dk    r~|                       d¦  «        }|                      dt          j        ¦  «         |dk    r2t                               | ||| 	                    ¦   «         ¬¦  «        }�nÄt          | ¦  «        }�n³|dk    r1t                               | || 	                    ¦   «         ¬¦  «        }�n||d	k    s|d
k    rt                               | ¦  «        }�nT|dk    rt          | ¦  «        }�n=|dk    r^|dvr|                       d¦  «        }|dv°t          | ¦  «         |                      dt          j        ¦  «         t          | |¦  «        }�nÙ|t           j        k    r—|                     ¦   «         rƒt'          | ¦  «        }|                     ¦   «         st+          d|›d�¦  «        ‚|dk    rt-          ¦   «         S |dk    rt+          d¦  «        ‚t/          |                     d¦  «        ¦  «        }�n2|dk    rt,                               | ¦  «        }�n|t2          v rt4                               | ¦  «        }nì|                     ¦   «         r±|rt4                               | ¦  «        }n»|                       d¦  «        }|                      t9          |¦  «         t          j        ¦  «         t:                               |¦  «        �t>                               | |¦  «        }nBt4                               | ¦  «        }n't+          d|› d|                       ¦   «         › �¦  «        ‚||_!        |S )aJ  
    Read a PDF object from an input stream.

    .. note::
       The `container_ref` parameter tells the API which reference to register
       when the returned object is modified in an incremental update.
       See also here :ref:`here <container-ref-example>` for further
       information.

    :param stream:
        An input stream.
    :param container_ref:
        A reference to an object containing this one.

        *Note:* It is perfectly possible (and common) for `container_ref` to
        resolve to the return value of this function.
    :param as_metadata_stream:
        Whether to dereference the object as an XMP metadata stream.
    :param in_content_stream:
        Whether we are parsing inside a content stream (where
        certain kinds of object cannot occur).
    :return:
        A :class:`.PdfObject`.
    r   éÿÿÿÿr   r6   éþÿÿÿó   <<)ry   rz   ©rz   rp   é   é   é   )ó   ó   
zFailed to parse z as operator literaló   nulló   Rz+Indirect object reference in content streamr4   é   é   NzUnexpected byte 'z' at position )"ÚreadÚseekÚosÚSEEK_CURÚOBJECT_PREFIXESÚfindr&   Úread_from_streamr"   rv   Úread_hex_string_from_streamr   r   Úread_string_from_streamr   r2   ro   rw   Úisalphar   Úisasciir   r'   r3   ÚdecodeÚNUMBER_SIGNSr(   ÚisdigitÚlenÚINDIRECT_PATTERNÚmatchr%   Útellrx   )	Ústreamrx   ry   rz   ÚtokÚidxÚresultÚpeekÚliterals	            r@   r2   r2   ã   sp  € ð> �+Š+�a‰.Œ.€CØ
‡K‚K�•B”KÑ Ô Ð Ý
×
Ò
˜sÑ
#Ô
#€CØ
ˆa‚x€xå×,Ò,¨VÑ4Ô4ˆ‰Ø	�Šˆà�{Š{˜1‰~Œ~ˆØ�Š�B�œÑ$Ô$Ð$Ø�5Š=ˆ=Ý%×6Ò6ØØØ#5Ø"3×"8Ò"8Ñ":Ô":ð	 7ñ ô ˆF‰Fõ 1°Ñ8Ô8ˆF‰FØ	�Šˆå×-Ò-Ø�MÐ5F×5KÒ5KÑ5MÔ5Mð .ñ 
ô 
ˆ‰ð 
�Šˆ�S˜A’X�Xå×/Ò/°Ñ7Ô7ˆ‰Ø	�Šˆå(¨Ñ0Ô0ˆ‰Ø	�Šˆà˜Ð'Ð'Ø—+’+˜a‘.”.ˆCð ˜Ð'Ð'å˜FÑ#Ô#Ð#Ø�Š�B�œÑ$Ô$Ð$Ý˜V ]Ñ3Ô3ˆ‰Ø	Õ.Ô:Ò	:Ð	:¸s¿{º{¹}¼}Ð	:å& vÑ.Ô.ˆØ�ŠÑ Ô ð 	NÝØB 7ÐBÐBÐBñô ð ð ˜ÒÐÝ‘<”<ÐØ˜Š_ˆ_ÝÐLÑMÔMÐMÝ  §¢°Ñ!8Ô!8Ñ9Ô9ˆ‰Ø	�Šˆå×,Ò,¨VÑ4Ô4ˆ‰Ø	•Ð	Ð	Ý×.Ò.¨vÑ6Ô6ˆˆØ	�Š‰Œð 
Øð 		?Ý!×2Ò2°6Ñ:Ô:ˆFˆFð —;’;˜r‘?”?ˆDØ�KŠK�˜T™œ˜
¥B¤KÑ0Ô0Ð0Ý×%Ò% dÑ+Ô+Ð7Ý'×8Ò8¸ÀÑOÔO��å%×6Ò6°vÑ>Ô>��åØB ÐBÐB°6·;²;±=´=ÐBÐBñ
ô 
ð 	
ð )€FÔØ€Mr?   c                   óp   — e Zd ZU dZdZee         ed<   	 defd„Zd„ Z		 	 d
ded         dee
         fd	„ZdS )r)   zSuperclass for all PDF objects.Nrx   rJ   c                 ó6   — | j         }|€t          d¦  «        ‚|S )z”
        Return a reference to the closest parent object containing this object.
        Raises an error if no such reference can be found.
        NzONo container reference available. This object probably wasn't read from a file.)rx   r   )rO   Úrefs     r@   Úget_container_refzPdfObject.get_container_refj  s/   € ð
 Ô ˆØˆ;Ýð,ñô ð ð ˆ
r?   c                 ó   — | S )zpResolves indirect references.

        :return: `self`, unless an instance of :class:`.IndirectObject`.
        r>   rN   s    r@   rP   zPdfObject.get_objectw  s	   € ð
 ˆr?   Úhandlerr   c                 ó   — t           ‚)z÷
        Abstract method to render this object to an output stream.

        :param stream:
            An output stream.
        :param container_ref:
            Local encryption key.
        :param handler:
            Security handler
        rL   ©rO   r›   r¦   rx   s       r@   Úwrite_to_streamzPdfObject.write_to_stream~  s
   € õ  "Ð!r?   ©NN)r7   r8   r9   r:   rx   r   r!   rl   r¤   rP   r*   r©   r>   r?   r@   r)   r)   L  s    € € € € € € Ø)Ð)à/3€M�8˜OÔ,Ð3Ð3Ñ3ðð4 ?ð ð ð ð ðð ð ð 04Ø-1ð	"ð "ð Ð+Ô,ð"ð   	Ô*ð	"ð "ð "ð "ð "ð "r?   c                   ó&   — e Zd Zdefd„Zd„ Zd„ ZdS )r3   r    c                 ó   — || _         d S rC   )r    )rO   r    s     r@   rY   zOperatorLiteral.__init__’  s   € ØˆŒˆˆr?   c                 óL   — t          |t          ¦  «        o| j        |j        k    S rC   )rD   r3   r    ©rO   Úothers     r@   Ú__eq__zOperatorLiteral.__eq__•  s"   € å�u�oÑ.Ô.ÐP°4´<À5Ä=Ò3Pð	
r?   c                 ó.   — t          d| j        f¦  «        S )NÚop)rb   r    rN   s    r@   Ú__hash__zOperatorLiteral.__hash__š  s   € Ý�T˜4œ<Ð(Ñ)Ô)Ð)r?   N)r7   r8   r9   ÚstrrY   r°   r³   r>   r?   r@   r3   r3   ‘  sM   € € € € € ð ð ð ð ð ð
ð 
ð 
ð
*ð *ð *ð *ð *r?   r3   c                   óX   — e Zd ZdZ	 	 d
ded         fd„Zed„ ¦   «         Zd„ Zd„ Z	d	„ Z
dS )r'   zO
    PDF `null` object.

    All instances are treated as equal and falsy.
    Nr¦   r   c                 ó0   — |                      d¦  «         d S )Nr…   )Úwriter¨   s       r@   r©   zNullObject.write_to_stream¥  s   € ð 	�Š�WÑÔÐÐÐr?   c                 ór   — |                       d¦  «        }|dk    rt          d¦  «        ‚t          ¦   «         S )Nr€   r…   zCould not read Null object)r‰   r   r'   )r›   Únulltxts     r@   r�   zNullObject.read_from_stream­  s5   € à—+’+˜a‘.”.ˆØ�gÒÐÝÐ;Ñ<Ô<Ð<Ý‰|Œ|Ðr?   c                 ó4   — | |u pt          |t          ¦  «        S rC   )rD   r'   r®   s     r@   r°   zNullObject.__eq__´  s   € Ø�uˆ}Ð=¥
¨5µ*Ñ =Ô =Ð=r?   c                 ó    — t          d ¦  «        S rC   )rb   rN   s    r@   r³   zNullObject.__hash__·  s   € Ý�D‰zŒzÐr?   c                 ó   — dS )NFr>   rN   s    r@   rs   zNullObject.__bool__º  s   € Øˆur?   rª   )r7   r8   r9   r:   r   r©   Ústaticmethodr�   r°   r³   rs   r>   r?   r@   r'   r'   ž  s—   € € € € € ðð ð 04Øð	ð ð Ð+Ô,ðð ð ð ð ðð ñ „\ðð>ð >ð >ðð ð ðð ð ð ð r?   r'   c                   ód   — e Zd ZdZd„ Z	 	 dded         fd„Zed„ ¦   «         Zd„ Z	d	„ Z
d
„ Zd„ ZdS )r   zPDF boolean value.c                 ó   — || _         d S rC   )Úvalue)rO   rÀ   s     r@   rY   zBooleanObject.__init__Á  s   € ØˆŒ
ˆ
ˆ
r?   Nr¦   r   c                 ól   — | j         r|                     d¦  «         d S |                     d¦  «         d S )Nó   trues   false)rÀ   r·   r¨   s       r@   r©   zBooleanObject.write_to_streamÄ  s>   € ð Œ:ð 	#Ø�LŠL˜Ñ!Ô!Ð!Ð!Ð!à�LŠL˜Ñ"Ô"Ð"Ð"Ð"r?   c                 óÐ   — |                       d¦  «        }|dk    rt          d¦  «        S |dk    r(|                       d¦  «        dk    rt          d¦  «        S t          d¦  «        ‚)	Nr€   rÂ   Ts   falsr   ó   eFzCould not read Boolean object)r‰   r   r   )r›   Úwords     r@   r�   zBooleanObject.read_from_streamÏ  sc   € à�{Š{˜1‰~Œ~ˆØ�7Š?ˆ?Ý  Ñ&Ô&Ð&Ø�WŠ_ˆ_Ø�{Š{˜1‰~Œ~ Ò%Ð%Ý$ UÑ+Ô+Ð+ÝÐ:Ñ;Ô;Ð;r?   c                 ó*   — t          | j        ¦  «        S rC   )ÚboolrÀ   rN   s    r@   rs   zBooleanObject.__bool__Ù  s   € Ý�D”JÑÔÐr?   c                 óz   — t          |t          t          f¦  «        ot          | ¦  «        t          |¦  «        k    S rC   )rD   r   rÇ   r®   s     r@   r°   zBooleanObject.__eq__Ü  s<   € Ý˜%¥-µÐ!6Ñ7Ô7ð 
½DÀ¹J¼JÍ$ØñK
ô K
ò =
ð 	
r?   c                 ó:   — t          t          | ¦  «        ¦  «        S rC   )r´   rÇ   rN   s    r@   Ú__str__zBooleanObject.__str__á  s   € Ý•4˜‘:”:‰ŒÐr?   c                 ó    — t          | ¦  «        S rC   )r´   rN   s    r@   Ú__repr__zBooleanObject.__repr__ä  s   € Ý�4‰yŒyÐr?   rª   )r7   r8   r9   r:   rY   r   r©   r½   r�   rs   r°   rÊ   rÌ   r>   r?   r@   r   r   ¾  s±   € € € € € ØÐðð ð ð 04Øð		#ð 	#ð Ð+Ô,ð	#ð 	#ð 	#ð 	#ð ð<ð <ñ „\ð<ð ð  ð  ð
ð 
ð 
ð
ð ð ðð ð ð ð r?   r   c                   ó”   — e Zd ZdZd„ Zej        fdefd„Zej        fdefd„Z	 	 dde	d         fd	„Z
eej        fd
efd„¦   «         ZdS )r   a‚  
    PDF array object. This class extends from Python's list class,
    and supports its interface.

    .. warning::
        Contrary to the case of dictionary objects, PyPDF2 does not
        transparently dereference array entries when accessed using
        :meth:`__getitem__`.
        For usability & consistency reasons, I decided to depart from that
        and dereference automatically.
        This makes the behaviour of :class:`.ArrayObject` consistent with
        :class:`.DictionaryObject`.

        That said, some vestiges of the old PyPDF2 behaviour may linger in
        the codebase. I'll fix those as I get to them.
    c                 óP   — |                       |¦  «                             ¦   «         S rC   )Úraw_getrP   )rO   Úindexs     r@   Ú__getitem__zArrayObject.__getitem__ú  s    € Ø�|Š|˜EÑ"Ô"×-Ò-Ñ/Ô/Ð/r?   Údecryptc              #   óx   K  — t          t          | ¦  «        ¦  «        D ]}|                      ||¦  «        V — Œd S rC   )Úranger—   rÏ   )rO   rÒ   Úixs      r@   ÚiteratezArrayObject.iterateý  sL   è è € õ �˜D™	œ	Ñ"Ô"ð 	,ð 	,ˆBØ—,’,˜r 7Ñ+Ô+Ð+Ð+Ð+Ð+ð	,ð 	,r?   c                 óX   — t                                | |¦  «        }t          ||¦  «        S )ay  
        .. versionchanged:: 0.14.0

            ``decrypt`` parameter is no longer boolean

        Get a value from an array without dereferencing.
        In other words, if the value corresponding to the given key is of type
        :class:`.IndirectObject`, the indirect reference will not be resolved.

        :param index:
            Key to look up in the dictionary.
        :param decrypt:
            What to do when retrieving encrypted objects; see
            :class:`.EncryptedObjAccess`. The default is
            :attr:`.EncryptedObjAccess.TRANSPARENT`.
        :return:
            A :class:`.PdfObject`.
        )ÚlistrÑ   rH   )rO   rÐ   rÒ   Úvals       r@   rÏ   zArrayObject.raw_get  s)   € õ0 ×Ò˜t UÑ+Ô+ˆÝ  WÑ-Ô-Ð-r?   Nr¦   r   c                 ó¾   — |                      d¦  «         | D ]/}|                      d¦  «         |                     |||¬¦  «         Œ0|                      d¦  «         d S )Nó   [ó    )r¦   rx   s    ])r·   r©   )rO   r›   r¦   rx   Údatas        r@   r©   zArrayObject.write_to_stream  sz   € ð 	�Š�TÑÔÐØð 	ð 	ˆDØ�LŠL˜ÑÔÐØ× Ò Ø °}ð !ñ ô ð ð ð 	�Š�UÑÔÐÐÐr?   rz   c                 ó0  — t          ¦   «         }|                      d¦  «        }|dk    rt          d¦  «        ‚	 t          | ¦  «        }|dk    rnF|                      dt
          j        ¦  «         |                     t          | ||¬¦  «        ¦  «         Œ\|S )Nr   rÛ   zCould not read arrayTó   ]r|   r   )	r   r‰   r   r   rŠ   r‹   rŒ   Úappendr2   )r›   rx   rz   ÚarrÚtmpÚ	peekaheads         r@   r�   zArrayObject.read_from_stream,  s¦   € õ ‰mŒmˆØ�kŠk˜!‰nŒnˆØ�$Š;ˆ;ÝÐ5Ñ6Ô6Ð6ð	å+¨FÑ3Ô3ˆIØ˜DÒ Ð ØØ�KŠK˜�BœKÑ(Ô(Ð(à�JŠJÝØ˜MÐ=Nðñ ô ñô ð ð	ð ˆ
r?   rª   )r7   r8   r9   r:   rÑ   r#   r<   rÖ   rÏ   r   r©   r½   ro   rr   r�   r>   r?   r@   r   r   è  sé   € € € € € ðð ð"0ð 0ð 0ð -?Ô,Jð,ð ,Ø)ð,ð ,ð ,ð ,ð '9Ô&Dð.ð .ð $ð.ð .ð .ð .ð< 04Øð	ð ð Ð+Ô,ðð ð ð ð ð /?Ô.Aðð ð ,ðð ð ñ „\ðð ð r?   r   c                   ó¤   — e Zd ZdZd„ Zd„ Zd„ Zedefd„¦   «         Z	ed„ ¦   «         Z
d„ Zd	„ Zd
„ Zd„ Z	 	 dded         fd„Zedd„¦   «         ZdS )r%   aÙ  
    Thin wrapper around a :class:`.Reference`, implementing both the
    :class:`.Dereferenceable` and :class:`.PdfObject` interfaces.

    .. warning::
        For many purposes, this class is functionally interchangeable with
        :class:`.Reference`, with one important exception:
        :class:`.IndirectObject` instances pointing to the same reference
        but occurring at different locations in the file may have distinct
        `container_ref` values.
    c                 ó2   — t          |||¦  «        | _        d S rC   )r*   Ú	reference)rO   r_   r`   re   s       r@   rY   zIndirectObject.__init__R  s   € Ý" 5¨*°cÑ:Ô:ˆŒˆˆr?   c                 óŠ   — | j                              ¦   «         }t          |t          ¦  «        r|                     ¦   «         n|S )zC
        :return: The PDF object this reference points to.
        )ræ   rP   rD   r%   )rO   rG   s     r@   rP   zIndirectObject.get_objectU  s=   € ð Œn×'Ò'Ñ)Ô)ˆõ
 $.¨cµ>Ñ#BÔ#BÐKˆs�~Š~ÑÔÐÈÐKr?   c                 ó4   — | j                              ¦   «         S rC   )ræ   rS   rN   s    r@   rS   zIndirectObject.get_pdf_handler`  s   € ØŒ~×-Ò-Ñ/Ô/Ð/r?   rJ   c                 ó   — | j         j        S )z;
        :return: the object ID of this reference.
        )ræ   r_   rN   s    r@   r_   zIndirectObject.idnumc  s   € ð
 Œ~Ô#Ð#r?   c                 ó   — | j         j        S )zC
        :return: the generation number of this reference.
        )ræ   r`   rN   s    r@   r`   zIndirectObject.generationj  s   € ð
 Œ~Ô(Ð(r?   c                 ó(   — d| j         ›d| j        ›d�S )NzIndirectObject(z, ú))r_   r`   rN   s    r@   rÌ   zIndirectObject.__repr__q  s   € € Ø+/¬:¨:¨:°t´°°ÐGÐGr?   c                 ó8   — t          | j        | j        f¦  «        S rC   )rb   r_   r`   rN   s    r@   r³   zIndirectObject.__hash__w  s   € Ý�T”Z ¤Ð1Ñ2Ô2Ð2r?   c                 óT   — |d uo$t          |t          ¦  «        o| j        |j        k    S rC   )rD   r%   ræ   r®   s     r@   r°   zIndirectObject.__eq__z  s2   € à˜Ðð 2Ý˜5¥.Ñ1Ô1ð2à” %¤/Ò1ð	
r?   c                 ó.   — |                       |¦  «         S rC   )r°   r®   s     r@   Ú__ne__zIndirectObject.__ne__�  s   € Ø—;’;˜uÑ%Ô%Ð%Ð%r?   Nr¦   r   c                 óN   — |                      d| j        | j        fz  ¦  «         d S )Ns   %d %d R)r·   r_   r`   r¨   s       r@   r©   zIndirectObject.write_to_stream„  s*   € ð 	�Š�Z 4¤:¨t¬Ð"?Ñ?Ñ@Ô@Ð@Ð@Ð@r?   rx   r!   c                 ó  — d}	 |                       d¦  «        }|st          d¦  «        ‚|                     ¦   «         r|sŒ>n||z  }ŒDd}	 |                       d¦  «        }|st          d¦  «        ‚|                     ¦   «         r|sŒ>n||z  }ŒDt          | ¦  «        }|dk    r3t	          |                      ¦   «         ¦  «        }t          d|z  ¦  «        ‚	 t          |¦  «        t          |¦  «        }}|dk    r|dk    st          ‚nA# t          $ r4 t	          |                      ¦   «         ¦  «        }t          d|› �¦  «        ‚w xY wt          t          |¦  «        t          |¦  «        | 
                    ¦   «         ¦  «        S )	Nr?   Tr   úStream has ended unexpectedlyr†   z2Error reading indirect object reference at byte %sr   z0Parse error on indirect object reference around )r‰   r   Úisspacer   Úhexrš   r   rk   Ú
ValueErrorr%   rS   )	r›   rx   Ú	idnum_strrœ   Úgeneration_strÚrÚposr_   r`   s	            r@   r�   zIndirectObject.read_from_streamŒ  sÁ  € àˆ	ð		Ø—+’+˜a‘.”.ˆCØð Få$Ð%DÑEÔEÐEØ�{Š{‰}Œ}ð Ø ð ØØØ˜ÑˆIð		ð ˆð		"Ø—+’+˜a‘.”.ˆCØð Få$Ð%DÑEÔEÐEØ�{Š{‰}Œ}ð Ø%ð ØØØ˜cÑ!ˆNð		"õ   Ñ'Ô'ˆØ�Š9ˆ9Ý�f—k’k‘m”mÑ$Ô$ˆCÝØDÀsÑJñô ð ð	Ý # I¡¤µ°NÑ0CÔ0C�:ˆEØ˜A’I�I *°¢/ /Ý Ð ð #2øåð 	ð 	ð 	Ý�f—k’k‘m”mÑ$Ô$ˆCÝØHÀ3ÐHÐHñô ð ð	øøøõ
 Ý�	‰NŒN�C Ñ/Ô/°×1NÒ1NÑ1PÔ1Pñ
ô 
ð 	
s   Ã1D
 Ä
>Erª   )rx   r!   )r7   r8   r9   r:   rY   rP   rS   Úpropertyrk   r_   r`   rÌ   r³   r°   rð   r   r©   r½   r�   r>   r?   r@   r%   r%   E  s&  € € € € € ð
ð 
ð;ð ;ð ;ð	Lð 	Lð 	Lð0ð 0ð 0ð ð$�sð $ð $ð $ñ „Xð$ð ð)ð )ñ „Xð)ðHð Hð Hð3ð 3ð 3ð
ð 
ð 
ð&ð &ð &ð 04Øð	Að Að Ð+Ô,ðAð Að Að Að ð(
ð (
ð (
ñ „\ð(
ð (
ð (
r?   r%   c                   óD   — e Zd ZdZd
d„Zd„ Zd„ Z	 	 dded         fd	„ZdS )r$   z‹
    PDF Float object.

    Internally, these are treated as decimals (and therefore actually
    fixed-point objects, to be precise).
    Ú0c                 ó\   — t           j                             | t          |¦  «        ¦  «        S rC   )ÚdecimalÚDecimalÚ__new__r´   )ÚclsrÀ   s     r@   r  zFloatObject.__new__À  s    € ÝŒ×&Ò& s­C°©J¬JÑ7Ô7Ð7r?   c                 ó¸   — | |                       ¦   «         k    r4t          |                      t          j        d¦  «        ¦  «        ¦  «        S t          | ¦  «        S )Nr   )Úto_integralr´   Úquantizerÿ   r   rN   s    r@   rÌ   zFloatObject.__repr__Ã  sI   € Ø�4×#Ò#Ñ%Ô%Ò%Ð%Ý�t—}’}¥W¤_°QÑ%7Ô%7Ñ8Ô8Ñ9Ô9Ð9å�t‘9”9Ðr?   c                 ó    — t          | ¦  «        S )zD
        :return: a Python ``float`` value for this object.
        )ÚfloatrN   s    r@   Ú
as_numericzFloatObject.as_numericÉ  s   € õ �T‰{Œ{Ðr?   Nr¦   r   c                 óp   — |                      t          | ¦  «                             d¦  «        ¦  «         d S ©Nr4   ©r·   ra   Úencoder¨   s       r@   r©   zFloatObject.write_to_streamÏ  ó0   € ð 	�Š•T˜$‘Z”Z×&Ò& wÑ/Ô/Ñ0Ô0Ð0Ð0Ð0r?   )rý   rª   )	r7   r8   r9   r:   r  rÌ   r  r   r©   r>   r?   r@   r$   r$   ¸  s�   € € € € € ðð ð8ð 8ð 8ð 8ðð ð ðð ð ð 04Øð	1ð 1ð Ð+Ô,ð1ð 1ð 1ð 1ð 1ð 1r?   r$   c                   óv   — e Zd ZdZ ej        d¦  «        ZdZd„ Zd„ Z		 	 dde
d         fd	„Zed
„ ¦   «         ZdS )r(   zE
    PDF number object. This is the PDF type for integer values.
    s	   [^+-.0-9]ó   .c                 óV   — t          |¦  «        }t                                | |¦  «        S rC   )rk   r  )r  rÀ   rÙ   s      r@   r  zNumberObject.__new__á  s!   € Ý�%‰jŒjˆÝ�{Š{˜3 Ñ$Ô$Ð$r?   c                 ó    — t          | ¦  «        S )zB
        :return: a Python ``int`` value for this object.
        )rk   rN   s    r@   r  zNumberObject.as_numericå  s   € õ �4‰yŒyÐr?   Nr¦   r   c                 óp   — |                      t          | ¦  «                             d¦  «        ¦  «         d S r
  r  r¨   s       r@   r©   zNumberObject.write_to_streamë  r  r?   c                 ó  — t          | t          j        d¬¦  «        }|                     t          j        ¦  «        dk    r"t          |                     d¦  «        ¦  «        S t          |                     d¦  «        ¦  «        S )NT)ÚregexÚ
ignore_eofr|   r4   )r   r(   ÚNumberPatternrŽ   ÚByteDotr$   r”   )r›   Únums     r@   r�   zNumberObject.read_from_streamó  sr   € åØÝÔ,àð	
ñ 
ô 
ˆð �8Š8•LÔ(Ñ)Ô)¨RÒ/Ð/Ý˜sŸzšz¨'Ñ2Ô2Ñ3Ô3Ð3å §
¢
¨7Ñ 3Ô 3Ñ4Ô4Ð4r?   rª   )r7   r8   r9   r:   ÚreÚcompiler  r  r  r  r   r©   r½   r�   r>   r?   r@   r(   r(   Ø  s    € € € € € ðð ð �B”J˜|Ñ,Ô,€MØ€Gð%ð %ð %ðð ð ð 04Øð	1ð 1ð Ð+Ô,ð1ð 1ð 1ð 1ð ð
5ð 
5ñ „\ð
5ð 
5ð 
5r?   r(   Ústring)r   r-   c                 óT  — t          | t          ¦  «        rt          | ¦  «        S t          | t          t          f¦  «        rZt          | ¦  «        }	 t          |                     | ¦  «        ¦  «        }||_        |S # t          $ r t          | ¦  «        cY S w xY wt          d¦  «        ‚)z¢
    Encode a string as a :class:`.TextStringObject` if possible,
    or a :class:`.ByteStringObject` otherwise.

    :param string:
        A Python string.
    z'pdf_string should have str or bytes arg)rD   r´   r-   ÚbytesÚ	bytearrayÚ_guess_enc_by_bomr”   Úautodetected_encodingÚUnicodeDecodeErrorr   Ú	TypeError)r  ÚguessedÚretvals      r@   r1   r1     sµ   € õ �&�#ÑÔð CÝ Ñ'Ô'Ð'Ý	�F�U¥IÐ.Ñ	/Ô	/ð 	CÝ# FÑ+Ô+ˆð	,Ý% g§n¢n°VÑ&<Ô&<Ñ=Ô=ˆFØ+2ˆFÔ(ØˆMøÝ!ð 	,ð 	,ð 	,Ý# FÑ+Ô+Ð+Ð+Ð+ð	,øøøõ ÐAÑBÔBÐBs   Á*A< Á<BÂBs   0123456789abcdefABCDEFc                 óÊ   ‡ ‡— ‰                       d¦  «         dŠˆˆ fd„}t          j        d                      |¦   «         ¦  «        ‰rdndz   ¦  «        }t	          |¦  «        S )zp
    Read a hex string from a stream into a PDF string object.

    :param stream:
        An input stream.
    r   Fc               3   ó˜   •K  — 	 t          ‰¦  «        } | dk    rd S | t          vrt          dt          | ¦  «        z   ¦  «        ‚| V — ‰ ŠŒG)NTó   >z Unexpected token in hex string: )r   Ú
HEX_DIGITSr   ra   )rœ   Úoddr›   s    €€r@   Úread_tokensz0read_hex_string_from_stream.<locals>.read_tokens,  si   øè è € ð		Ý% fÑ-Ô-ˆCØ�dŠ{ˆ{Ø�Ø�JÐ&Ð&Ý$Ø6½¸c¹¼ÑBñô ð ð ˆIˆIˆIØ�'ˆCð		r?   r?   ó   0)r‰   ÚbinasciiÚ	unhexlifyÚjoinr1   )r›   r*  rž   r)  s   `  @r@   r�   r�     s   øø€ ð ‡K‚K��N„N€Nà
€Cðð ð ð ð ð õ ÔØ�Š��‘”ÑÔ¨3Ð#7 4 4°CÑ8ñô €Fõ �fÑÔÐr?   c                 óÄ  — |                       d¦  «         d}t          ¦   «         }	 |                       d¦  «        }|st          d¦  «        ‚|dk    r|dz  }�n]|dk    r|dz  }|dk    r�na�nH|dk    �rA|                       d¦  «        }|dv r�n&|d	k    rd
}�n|dk    rd}�n|dk    rd}�n|dk    rd}nÿ|dk    rd}nö|                     ¦   «         rƒt	          d¦  «        D ]Q}|                       d¦  «        }|                     ¦   «         r||z  }Œ1|                      dt          j        ¦  «          t          |d¬¦  «        }t          |f¦  «        }n_|dv r<|                       d¦  «        }|dvr |                      dt          j        ¦  «         d}nt          dt          |¦  «        z   ¦  «        ‚|                     |¦  «         �Œ§|                     ¦   «         S )Nr   Tró   ó   (ó   )r   ó   \s   () /%<>[]#_&$\ó   nr„   ó   rrƒ   ó   tó   	ó   bó   ó   fó   r6   r|   é   )Úbases   
r?   zUnexpected escaped string: )r‰   r   r   r–   rÔ   rŠ   r‹   rŒ   rk   r  r   ra   r·   Úgetvalue)r›   ÚparensÚtxtrœ   ÚiÚntokÚoctals          r@   Ú_read_string_literal_bytesrC  ?  s  € Ø
‡K‚K��N„N€NØ€FÝ
‰)Œ)€Cð6Ø�kŠk˜!‰nŒnˆØð 	Bå Ð!@ÑAÔAÐAØ�$Š;ˆ;Ø�a‰KˆF‰FØ�DŠ[ˆ[Ø�a‰KˆFØ˜Š{ˆ{Ùñ à�EŠ\‰\Ø—+’+˜a‘.”.ˆCØÐ(Ð(Ð(ÙØ˜’�Ø�‘Ø˜’�Ø�‘Ø˜’�Ø�‘Ø˜’�Ø��Ø˜’�Ø��Ø—’‘”ð Nõ ˜q™œð ð �AØ!Ÿ;š; q™>œ>�DØ—|’|‘~”~ð Ø˜t™˜˜ð Ÿš B­¬Ñ4Ô4Ð4ØÝ˜C aÐ(Ñ(Ô(�å˜U˜H‘o”o��Ø˜��ð —k’k !‘n”n�Ø˜gÐ%Ð%Ø—K’K ¥B¤KÑ0Ô0Ð0ð ��å"Ð#@Å4ÈÁ9Ä9Ñ#LÑMÔMÐMØ�	Š	�#‰Œˆñm6ðn �<Š<‰>Œ>Ðr?   c                 ó:   — t          t          | ¦  «        ¦  «        S )zã
    Read a PDF string literal from a stream. Attempt to decode it into a text
    string by autodetecting the encoding, or failing that, return it as a byte
    string instead.

    :param stream:
        An input stream.
    )r1   rC  )r›   s    r@   r‘   r‘   }  s   € õ Õ0°Ñ8Ô8Ñ9Ô9Ð9r?   c                   óJ   — e Zd ZdZ ed„ ¦  «        Z	 	 	 dded         fd„ZdS )r   zPDF bytestring class.c                 ó   — | S rC   r>   rN   s    r@   ú<lambda>zByteStringObject.<lambda>�  s   € ¨4€ r?   Nr¦   r   c                 óH  — | }|�L|�J|                      ¦   «         }|                     |j        |j        ¦  «        }|                     ||¦  «        }|                     d¦  «         |                     t          j        |¦  «        ¦  «         |                     d¦  «         d S )Nó   <r'  )Úget_string_filterÚderive_object_keyr_   r`   Úencryptr·   r,  Úhexlify)rO   r›   r¦   rx   ÚbytearrÚcfÚ	local_keys          r@   r©   z ByteStringObject.write_to_stream”  s¡   € ð ˆØÐ =Ð#<Ø×*Ò*Ñ,Ô,ˆBØ×,Ò,ØÔ# ]Ô%=ñô ˆIð —j’j ¨GÑ4Ô4ˆGØ�Š�TÑÔÐØ�Š•XÔ% gÑ.Ô.Ñ/Ô/Ð/Ø�Š�TÑÔÐÐÐr?   rª   )r7   r8   r9   r:   rû   Úoriginal_bytesr   r©   r>   r?   r@   r   r   Œ  sc   € € € € € ØÐà�XÐ/Ð/Ñ0Ô0€Nðð 04Øð	ð ð Ð+Ô,ðð ð ð ð ð r?   r   c                   ó„   — e Zd ZdZdZ	 ej        dfZ	 ej        dfZ		 ej
        dfZ	 dedefd„Zdeeef         defd	„ZdS )
r,   z)
    Encodings for PDF text strings.
    Núutf-16bezutf-8zutf-16ler  rJ   c                 ó„   — | t           j        k    rt          |¦  «        S | j        \  }}||                     |¦  «        z   S )z–
        Encode a string with BOM.

        :param string:
            The string to encode.
        :return:
            The encoded string.
        )r,   ÚPDF_DOCÚencode_pdfdocencodingrÀ   r  )rO   r  ÚbomÚencs       r@   r  zTextStringEncoding.encodeÄ  sC   € ð Õ%Ô-Ò-Ð-Ý(¨Ñ0Ô0Ð0à”z‰HˆC�Ø˜Ÿš sÑ+Ô+Ñ+Ð+r?   c                 ó´   — | t           j        k    rt          |¦  «        S | t           j        k    r|                     d¦  «        S |                     d¦  «        S )zß
        Decode a string with BOM.

        :param string:
            The string to encode.
        :return:
            The encoded string.
        :raise UnicodeDecodeError:
            Raised if decoding fails.
        z	utf-8-sigzutf-16)r,   rU  Údecode_pdfdocencodingÚUTF8r”   )rO   r  s     r@   r”   zTextStringEncoding.decodeÓ  sT   € ð Õ%Ô-Ò-Ð-Ý(¨Ñ0Ô0Ð0ØÕ'Ô,Ò,Ð,Ø—=’= Ñ-Ô-Ð-à—=’= Ñ*Ô*Ð*r?   )r7   r8   r9   r:   rU  ÚcodecsÚBOM_UTF16_BEÚUTF16BEÚBOM_UTF8r[  ÚBOM_UTF16_LEÚUTF16LEr´   r  r  r   r  r”   r>   r?   r@   r,   r,   ¦  s³   € € € € € ðð ð €Gðð Ô" JÐ/€Gðð ŒO˜WÐ%€Dðð Ô" JÐ/€Gðð,˜Sð , Uð ,ð ,ð ,ð ,ð+˜U 5¨)Ð#3Ô4ð +¸ð +ð +ð +ð +ð +ð +r?   r,   Úencodedc                 ó  — |                       t          j        ¦  «        rt          j        S |                       t          j        ¦  «        rt          j        S |                       t          j        ¦  «        rt          j        S t          j	        S rC   )
Ú
startswithr\  r]  r,   r^  r`  ra  r_  r[  rU  )rb  s    r@   r  r  æ  sr   € Ø×Ò�&Ô-Ñ.Ô.ð *Ý!Ô)Ð)Ø	×	Ò	�FÔ/Ñ	0Ô	0ð 	*Ý!Ô)Ð)Ø	×	Ò	�FœOÑ	,Ô	,ð *Ý!Ô&Ð&õ "Ô)Ð)r?   c                   ó€   — e Zd ZU dZdZee         ed<   	 dZee         ed<   	 e	d„ ¦   «         Z
	 	 d	ded         fd„ZdS )
r-   z!
    PDF text string object.
    Nr   Úforce_output_encodingc                 ób   — | j         r| j                              | ¦  «        S t          d¦  «        ‚)z¶
        Retrieve the original bytes of the string as specified in the
        source file.

        This may be necessary if this string was misidentified as a text string.
        z#No information about original bytes)r   r  r   rN   s    r@   rQ  zTextStringObject.original_bytes  s6   € ð Ô%ð 	BØÔ-×4Ò4°TÑ:Ô:Ð:åÐ@ÑAÔAÐAr?   r¦   r   c                 óö  — | j         �| j                              | ¦  «        }nC	 t          | ¦  «        }n2# t          $ r% t          j        |                      d¦  «        z   }Y nw xY wd }|�*|�(|j        j        }|dk    rd n|                     ¦   «         }|�\| 	                    |j
        |j        ¦  «        }|                     ||¦  «        }t          |¦  «        }|                     |¦  «         d S |                     d¦  «         |D ]Z}	t!          |	g¦  «        }
|
                     ¦   «         s|	dk    r|                     d|	z  ¦  «         ŒE|                     |
¦  «         Œ[|                     d¦  «         d S )NrS  ú	/Identityr0  é    s   \%03or1  )rf  r  rV  ÚUnicodeEncodeErrorr\  r]  Úcrypt_filter_configÚstring_filter_namerJ  rK  r_   r`   rL  r   r©   r·   r  Úisalnum)rO   r›   r¦   rx   rb  rO  Úcf_namerP  rG   ÚcÚc_s              r@   r©   z TextStringObject.write_to_stream  s¡  € ð Ô%Ð1ØÔ0×7Ò7¸Ñ=Ô=ˆGˆGð
HÝ/°Ñ5Ô5��øÝ%ð Hð Hð Hõ !Ô-°·²¸JÑ0GÔ0GÑG���ðHøøøð
 ˆØÐ =Ð#<ØÔ1ÔDˆGà  KÒ/Ð/��°W×5NÒ5NÑ5PÔ5PˆBàˆ>Ø×,Ò,ØÔ# ]Ô%=ñô ˆIð —j’j ¨GÑ4Ô4ˆGÝ" 7Ñ+Ô+ˆCØ×Ò Ñ'Ô'Ð'Ð'Ð'à�LŠL˜ÑÔÐØð %ð %�Ý˜A˜3‘Z”Z�Ø—z’z‘|”|ð %¨¨Tª	¨	Ø—L’L ¨Q¡Ñ/Ô/Ð/Ð/à—L’L Ñ$Ô$Ð$Ð$Ø�LŠL˜ÑÔÐÐÐs   ¤4 ´,A#Á"A#rª   )r7   r8   r9   r:   r   r   r,   rl   rf  rû   rQ  r©   r>   r?   r@   r-   r-   õ  s«   € € € € € € ðð ð ;?Ð˜8Ð$6Ô7Ð>Ð>Ñ>ðð ;?Ð˜8Ð$6Ô7Ð>Ð>Ñ>ðð
 ðBð Bñ „XðBð* 04Øð	)ð )ð Ð+Ô,ð)ð )ð )ð )ð )ð )r?   r-   c                 óž   — d| cxk    rdk    rn n| dz
  S d| cxk    rdk    rn n| dz
  S d| cxk    rdk    rn n| dz
  S t          d	¦  «        ‚)
Né0   é9   éA   éF   é7   éa   éf   éW   z6Numeric escape in PDF name must use hexadecimal digits)r   )Ú
ascii_chars    r@   Ú_as_hex_digitr|  D  sž   € ØˆzÐ!Ð!Ò!Ð!˜TÒ!Ð!Ð!Ð!Ð!Ø˜DÑ Ð Ø	�Ð	#Ð	#Ò	#Ð	#˜tÒ	#Ð	#Ð	#Ð	#Ð	#Ø˜DÑ Ð Ø	�Ð	#Ð	#Ò	#Ð	#˜tÒ	#Ð	#Ð	#Ð	#Ð	#Ø˜DÑ Ð åØDñ
ô 
ð 	
r?   Ú
name_bytesr&   c                 óÖ  — t          ¦   «         }|                     d¦  «         t          | ¦  «        }	 	 t          |¦  «        }|dk    rc	 t          |¦  «        }t          |¦  «        }n # t          $ r t          d| ›�¦  «        ‚w xY wt          |¦  «        dz  t          |¦  «        z   }n3d|cxk    rdk    rn nt          |¦  «        st          d|d	›d
�¦  «        ‚|                     t          |f¦  «        ¦  «         ŒÏ# t          $ r Y nw xY w| 	                    ¦   «         } d}d}|D ])}	 |  
                    |¦  «        } n# t          $ r Y Œ&w xY w|€J ‚t          |¦  «        S )zu
    Decode the bytes that make up a name object (minus the initial /), expanding
    all escapes along the way.
    ó   /Té#   z!Unterminated escape in PDF name /é   é!   é~   zByte (0xÚ02xz) must be escaped in a PDF name)Úutf8Úlatin1N)r   r·   ÚiterÚnextÚStopIterationr   r|  r   r  r=  r”   rö   r&   )	r}  rž   Ú	name_iterÚcur_byteÚdigit1Údigit2Úencodings_to_tryÚname_strrX  s	            r@   Ú_decode_namer�  Q  sç  € õ
 ‰YŒY€FØ
‡L‚L�ÑÔÐÝ�ZÑ Ô €Iðð	-Ý˜I‘”ˆHØ˜4ÒÐðÝ! )™_œ_�FÝ! )™_œ_�F�FøÝ$ð ð ð Ý&ØJ¸JÐJÐJñô ð ðøøøõ
 )¨Ñ0Ô0°2Ñ5½ÀfÑ8MÔ8MÑM��Ø˜hÐ.Ð.Ò.Ð.¨$Ò.Ð.Ð.Ð.Ð.Õ7KØñ8ô 8Ð.õ #ØL˜xÐLÐLÐLÐLñô ð ð �LŠL� ˜{Ñ+Ô+Ñ,Ô,Ð,ð'	-øõ( ð ð ð Øˆðøøøà—’Ñ"Ô"€Jð *Ðð €HØð ð ˆð	Ø!×(Ò(¨Ñ-Ô-ˆHØˆEøÝð 	ð 	ð 	ØˆDð	øøøàÐÐÐÝ�hÑÔÐs<   ´D ÁA* Á)D Á*BÂA=D Ä
DÄDÄ1EÅ
EÅEc                   óF   — e Zd ZdZ	 	 dded         fd„Zed„ ¦   «         ZdS )r&   z¦
    PDF name object. These are valid Python strings, but names and strings
    are treated differently in the PDF specification, so proper care is
    required.
    Nr¦   r   c                 óÖ  — t          |                      d¦  «        ¦  «        }t          |¦  «        dk    st          d| ›d�¦  «        ‚|                     d¦  «         |D ]ˆ}|dk    sd|cxk    rdk    rn nt          |¦  «        s<|                     d	                     |¦  «                             d
¦  «        ¦  «         Œct          |f¦  «        }|                     |¦  «         Œ‰d S )Nr…  é/   z Could not serialise name object z, must start with /r  r€  r‚  rƒ  z#{:X}r4   )r‡  r  rˆ  r   r·   r   Úformatr  )rO   r›   r¦   rx   Ú	byte_iterr‹  Úas_bytess          r@   r©   zNameObject.write_to_streamŽ  s  € õ ˜Ÿš VÑ,Ô,Ñ-Ô-ˆ	Ý�I‰Œ $Ò&Ð&ÝØN°4ÐNÐNÐNñô ð ð 	�Š�TÑÔÐØ!ð 
	'ð 
	'ˆHà˜DÒ Ð Ø Ð0Ð0Ò0Ð0¨DÒ0Ð0Ð0Ð0Ð0Ý+¨HÑ5Ô5ð 1ð —’˜WŸ^š^¨HÑ5Ô5×<Ò<¸WÑEÔEÑFÔFÐFÐFõ ! ( Ñ-Ô-�Ø—’˜XÑ&Ô&Ð&Ð&ð
	'ð 
	'r?   c                 ó’   — |                       d¦  «        }|dk    rt          d¦  «        ‚t          | ¦  «        }t          |¦  «        S )Nr   r  zName object should start with /)r‰   r   r   r�  )r›   Ú
name_startr}  s      r@   r�   zNameObject.read_from_stream¦  sF   € à—[’[ ‘^”^ˆ
Ø˜ÒÐÝÐ@ÑAÔAÐAÝ)¨&Ñ1Ô1ˆ
Ý˜JÑ'Ô'Ð'r?   rª   )r7   r8   r9   r:   r   r©   r½   r�   r>   r?   r@   r&   r&   ‡  sj   € € € € € ðð ð 04Øð	'ð 'ð Ð+Ô,ð'ð 'ð 'ð 'ð0 ð(ð (ñ „\ð(ð (ð (r?   c                 ó–   — t          | t          ¦  «        s3t          | t          ¦  «        rt          | ¦  «        S t          d¦  «        ‚| S )Nzkey must be a name object)rD   r&   r´   rö   )Úkeys    r@   Ú_normalise_keyr›  ¯  sF   € Ý�c�:Ñ&Ô&ð :Ý�c�3ÑÔð 	:Ý˜c‘?”?Ð"åÐ8Ñ9Ô9Ð9Ø€Jr?   c                 ó*  — |                       ¦   «         }t          | d¬¦  «        }d }|dk    �rO|                      d¦  «        dk    �r5t          | d¬¦  «         |t	          d¦  «                 }t          |t          ¦  «        r>|                       ¦   «         }|                     |¦  «        }|                      |¦  «         |                      |¦  «        }t          | ¦  «        }|                      d¦  «        }	||	z   d	k    ry|                       ¦   «         }
|                      d
t          j
        ¦  «         |                      d¦  «        }|d	k    r|d d…         }n5t          dt          |
¦  «        z  ¦  «        ‚n|                      |¦  «         |S )NT)Ú	allow_eofó   sr�   s   tream)Ústop_after_eolú/Lengthr;  s	   endstreamiöÿÿÿé	   r|   z:Unable to find 'endstream' marker after stream at byte %s.)rš   r   r‰   r   r0   rD   r%   rP   rŠ   r‹   rŒ   r   rõ   )r›   rÝ   r¦   rú   ÚsÚstream_dataÚlengthÚtÚeÚndstreamÚorig_endstream_posÚends               r@   Ú_maybe_read_stream_payloadrª  ¸  s  € Ø
�+Š+‰-Œ-€CÝ˜F¨dÐ3Ñ3Ô3€AØ€KØˆD‚y�y�V—[’[ ‘^”^ xÒ/Ñ/õ 	˜V°DÐ9Ñ9Ô9Ð9à•h˜yÑ)Ô)Ô*ˆÝ�f�nÑ-Ô-ð 	Ø—’‘”ˆAØ×'Ò'¨Ñ/Ô/ˆFØ�KŠK˜‰NŒNˆNØ—k’k &Ñ)Ô)ˆÝ Ñ'Ô'ˆØ—;’;˜q‘>”>ˆØ�‰L˜\Ò)Ð)ð "(§¢¡¤ÐØ�KŠK˜�Rœ[Ñ)Ô)Ð)Ø—+’+˜a‘.”.ˆCØ�lÒ"Ð"à)¨#¨2¨#Ô.��å"ð)Ý+.Ð/AÑ+BÔ+BñCñô ð ð *ð& 	�Š�CÑÔÐØÐr?   c                   óì   ‡ — e Zd ZdZdˆ fd„	Zej        fdeee	f         defd„Z
d„ Zdd„Zd	„ Zd
ddœdeegef         fd„Zddefd„Z	 	 dded         fd„Zed
ej        fdddedefd„¦   «         Zˆ xZS )r"   zî
    A PDF dictionary object.

    Keys in a PDF dictionary are PDF names, and values are PDF objects.

    When accessing a key using the standard :meth:`__getitem__` syntax,
    :class:`.IndirectObject` references will be resolved.
    Nc                 óÊ   •— |�?t          ¦   «                              d„ |                     ¦   «         D ¦   «         ¦  «         d S t          ¦   «                              ¦   «          d S )Nc                 ó4   — i | ]\  }}t          |¦  «        |“ŒS r>   )r›  )Ú.0ÚkÚvs      r@   ú
<dictcomp>z-DictionaryObject.__init__.<locals>.<dictcomp>î  s&   € ÐDÐDÐD©$¨!¨Q• Ñ"Ô" AÐDÐDÐDr?   )ÚsuperrY   Úitems)rO   Ú	dict_dataÚ	__class__s     €r@   rY   zDictionaryObject.__init__ë  sh   ø€ ØÐ Ý‰GŒG×ÒØDÐD°)·/²/Ñ2CÔ2CÐDÑDÔDñô ð ð ð õ ‰GŒG×ÒÑÔÐÐÐr?   rš  rÒ   c                 óX   — t                                | |¦  «        }t          ||¦  «        S )a{  
        .. versionchanged:: 0.14.0

            ``decrypt`` parameter is no longer boolean

        Get a value from a dictionary without dereferencing.
        In other words, if the value corresponding to the given key is of type
        :class:`.IndirectObject`, the indirect reference will not be resolved.

        :param key:
            Key to look up in the dictionary.
        :param decrypt:
            What to do when retrieving encrypted objects; see
            :class:`.EncryptedObjAccess`. The default is
            :attr:`.EncryptedObjAccess.TRANSPARENT`.
        :return:
            A :class:`.PdfObject`.
        )ÚdictrÑ   rH   )rO   rš  rÒ   rÙ   s       r@   rÏ   zDictionaryObject.raw_getó  s)   € õ. ×Ò˜t SÑ)Ô)ˆÝ  WÑ-Ô-Ð-r?   c                 óÆ   — t          |¦  «        }t          |t          ¦  «        st          d¦  «        ‚| j        �| j        |_        t
                               | ||¦  «        S ©Nzvalue must be PdfObject)r›  rD   r)   rö   rx   r·  Ú__setitem__©rO   rš  rÀ   s      r@   rº  zDictionaryObject.__setitem__  s\   € Ý˜SÑ!Ô!ˆÝ˜%¥Ñ+Ô+ð 	8ÝÐ6Ñ7Ô7Ð7ØÔÐ)Ø"&Ô"4ˆEÔÝ×Ò  c¨5Ñ1Ô1Ð1r?   c                 óÆ   — t          |¦  «        }t          |t          ¦  «        st          d¦  «        ‚| j        �| j        |_        t
                               | ||¦  «        S r¹  )r›  rD   r)   rö   rx   r·  Ú
setdefaultr»  s      r@   r½  zDictionaryObject.setdefault  sZ   € Ý˜SÑ!Ô!ˆÝ˜%¥Ñ+Ô+ð 	8ÝÐ6Ñ7Ô7Ð7ØÔÐ)Ø"&Ô"4ˆEÔÝ�Š˜t S¨%Ñ0Ô0Ð0r?   c                 ór  — t                                | |¦  «        }|dk    r]t          |t          ¦  «        rHddlm} |                     ¦   «         }t          ||¦  «        sJ ‚|                     |j        d¬¦  «        S |                     ¦   «         }t          |t          ¦  «        rt          |¦  «        ‚|S )Nz	/Metadatar   rg   T)ry   )r·  rÑ   rD   r%   ri   rh   rS   rP   ræ   r'   ÚKeyError)rO   rš  Úraw_objrh   r¦   Ú	deref_objs         r@   rÑ   zDictionaryObject.__getitem__  sÆ   € Ý×"Ò" 4¨Ñ-Ô-ˆØ�+ÒÐ¥*¨WµnÑ"EÔ"EÐØ>Ð>Ð>Ð>Ð>Ð>à×-Ò-Ñ/Ô/ˆGÝ˜g zÑ2Ô2Ð2Ð2Ð2Ø×%Ò%ØÔ!°dð &ñ ô ð ð  ×*Ò*Ñ,Ô,ˆIÝ˜)¥ZÑ0Ô0ð !Ý˜s‘m”mÐ#à Ð r?   F)Úrawrd   Úfunctionc                ó~   — 	 |r|                       |¦  «        n| |         }n# t          $ r |cY S w xY w ||¦  «        S rC   ©rÏ   r¿  )rO   rš  rÃ  rÂ  rd   rÀ   s         r@   Úget_and_applyzDictionaryObject.get_and_apply.  sZ   € ð	Ø),Ð;�D—L’L Ñ%Ô%Ð%°$°s´)ˆEˆEøÝð 	ð 	ð 	ØˆNˆNˆNð	øøøàˆx˜‰ŒÐs   ‚" ¢1°1rJ   c                 óR   — d„ }|                       ||d¬¦  «        }|€	|st          ‚|S )Nc                 óH   — t          | t          ¦  «        r| j        S t          ‚rC   )rD   r%   ræ   r   )rG   s    r@   Úas_refz7DictionaryObject.get_value_as_reference.<locals>.as_ref=  s"   € Ý˜#�~Ñ.Ô.ð %Ø”}Ð$Ý(Ð(r?   T)rÂ  )rÆ  r¿  )rO   rš  ÚoptionalrÉ  rÀ   s        r@   Úget_value_as_referencez'DictionaryObject.get_value_as_reference<  s@   € ð	)ð 	)ð 	)ð
 ×"Ò" 3¨°DÐ"Ñ9Ô9ˆØˆ= ˆ=ÝˆNØˆr?   r¦   r   c                 óX  — |                      d¦  «         t          |                      ¦   «         ¦  «        D ]]\  }}|                     |||¦  «         |                      d¦  «         |                     |||¦  «         |                      d¦  «         Œ^|                      d¦  «         d S )Ns   <<
rÜ   r„   s   >>)r·   rØ   r³  r©   )rO   r›   r¦   rx   rš  rÀ   s         r@   r©   z DictionaryObject.write_to_streamG  s¨   € ð 	�Š�WÑÔÐÝ˜tŸzšz™|œ|Ñ,Ô,ð 	 ð 	 ‰JˆC�Ø×Ò ¨°Ñ?Ô?Ð?Ø�LŠL˜ÑÔÐØ×!Ò! &¨'°=ÑAÔAÐAØ�LŠL˜ÑÔÐÐØ�Š�UÑÔÐÐÐr?   rx   r!   ry   rz   c                 ó  — |                       d¦  «        }|dk    r1t          dt          |                      ¦   «         ¦  «        z  ¦  «        ‚i }|                     ¦   «         }	 t          | ¦  «        }|dk    r|                       d¦  «         �n$|                      dt          j        ¦  «         	 t           
                    | ¦  «        }nD# t          $ r7}	t          dt          |                      ¦   «         ¦  «        z  ¦  «        |	‚d }	~	ww xY wt          | ¦  «         |                      dt          j        ¦  «         t          | ||¬	¦  «        }
||vr|
||<   nWd
t          |                      ¦   «         ¦  «        ›d|›�}|j        rt          |¦  «        ‚t                               |¦  «         �ŒP|rd }nt#          | ||¦  «        }|�0t$          }|r	 ddlm} |}n# t*          $ r Y nw xY w |||¬¦  «        S t-          |¦  «        S )Nr6   r~   z?Dictionary read error at byte 0x%s: stream must begin with '<<'Tr'  r   r|   z=Failed to read dictionary key at byte 0x%s; expected PDF namer   z+Multiple definitions in dictionary at byte z	 for key r   )ÚMetadataStream)Úencoded_data)r‰   r   rõ   rš   rS   r   rŠ   r‹   rŒ   r&   r�   Ú	Exceptionr2   Ústrictr   ÚloggerÚwarningrª  r+   Ú"pyhanko.pdf_utils.metadata.xmp_xmlrÎ  ÚImportErrorr"   )r›   rx   ry   rz   râ   rÝ   r¦   rœ   rš  ÚexrÀ   Úerrr£  Ústm_clsrÎ  s                  r@   r�   z!DictionaryObject.read_from_streamU  sq  € ð �kŠk˜!‰nŒnˆØ�%Š<ˆ<Ýð.Ý03°F·K²K±M´MÑ0BÔ0BñCñô ð ð ˆØ×/Ò/Ñ1Ô1ˆð	(Ý% fÑ-Ô-ˆCØ�dŠ{ˆ{Ø—’˜A‘”�ÙØ�KŠK˜�BœKÑ(Ô(Ð(ðÝ ×1Ò1°&Ñ9Ô9��øÝð ð ð Ý"ØSÝ˜&Ÿ+š+™-œ-Ñ(Ô(ñ)ñô ð ðøøøøðøøøõ
   Ñ'Ô'Ð'Ø�KŠK˜�BœKÑ(Ô(Ð(ÝØ˜Ð9Jðñ ô ˆEð ˜$ˆˆØ!��S‘	�	ð õ
 (+¨6¯;ª;©=¬=Ñ'9Ô'9Ð'9Ð'9¸3¸3ð@ð ð ”>ð (Ý,¨SÑ1Ô1Ð1å—N’N 3Ñ'Ô'Ð'ñ9	(ð< ð 	LØˆKˆKå4°V¸TÀ7ÑKÔKˆKØÐ"õ #ˆGØ!ð 	ððð ð ð ð ð ð -�G�GøÝ"ð ð ð Ø�Dðøøøà�7˜4¨kÐ:Ñ:Ô:Ð:å# DÑ)Ô)Ð)s*   Â1C Ã
DÃ2DÄDÇG Ç
G,Ç+G,rC   )Frª   )r7   r8   r9   r:   rY   r#   r<   r   r&   r´   rÏ   rº  r½  rÑ   r
   r)   r	   rÆ  r*   rË  r   r©   r½   ro   rr   rÇ   r�   Ú__classcell__©rµ  s   @r@   r"   r"   á  sš  ø€ € € € € ðð ðð ð ð ð ð ð '9Ô&Dð.ð .à�:˜s�?Ô#ð.ð $ð.ð .ð .ð .ð42ð 2ð 2ð1ð 1ð 1ð 1ð!ð !ð !ð, Øðð ð ð ˜I˜;¨Ð+Ô,ðð ð ð ð	ð 	¸Yð 	ð 	ð 	ð 	ð 04Øð	ð ð Ð+Ô,ðð ð ð ð ð $)Ø.>Ô.Að	@*ð @*à(ð@*ð !ð@*ð ,ð	@*ð @*ð @*ñ „\ð@*ð @*ð @*ð @*ð @*r?   r"   c            
       óž  ‡ — e Zd ZdZ	 	 	 	 ddee         dee         dee         ded         fˆ fd„Zd	ed
efd„Z	e
defd„¦   «         Z ed¦  «        ddfded         fd„Zdeeeee         f                  fd„Zd„ Zd„ Ze
defd„¦   «         Ze
defd„¦   «         Z	 ddee         fd„Zd„ Ze
d„ ¦   «         Z	 	 dded         fˆ fd„Zˆ xZS )r+   aâ  
    PDF stream object.

    Essentially, a PDF stream is a dictionary object with a binary blob of
    data attached. This data can be encoded by various filters (not all of which
    are currently supported, see :mod:`.filters`).

    A stream object can be initialised with encoded or decoded data.
    The former is used by :class:`.reader.PdfFileReader` to provide on-demand
    decoding, with :class:`.writer.BasePdfFileWriter` and its subclasses working
    the other way around.

    .. note::
        The :class:`.StreamObject` class manages some of its dictionary
        keys by itself. This is partly the case for the various ``/Filter``
        and ``/DecodeParms`` entries, but also for the ``/Length`` entry.
        The latter will be overwritten as necessary.

    :param dict_data:
        The dictionary data for this stream object.
    :param stream_data:
        The (unencoded) stream data.
    :param encoded_data:
        The encoded stream data.

        .. warning::
            Ordinarily, a stream can be initialised either from decoded and from
            encoded data.

            If both `stream_data` and `encoded_data` are provided, the caller
            is responsible for making sure that both are compatible given the
            currently relevant filter configuration.
    :param handler:
        A reference to the currently active
        :class:`.pyhanko.pdf_utils.crypt.SecurityHandler`.
        This is only necessary if the stream requires crypt filters.
    Nr´  r£  rÏ  r¦   r   c                 ót   •— t          ¦   «                              |¦  «         || _        || _        || _        d S rC   )r²  rY   Ú_dataÚ_encoded_dataÚ_handler)rO   r´  r£  rÏ  r¦   rµ  s        €r@   rY   zStreamObject.__init__À  s7   ø€ õ 	‰Œ×Ò˜Ñ#Ô#Ð#Ø ˆŒ
Ø)ˆÔØˆŒˆˆr?   r£   Údecrypted_entriesc                 ó8  — |�|| _         | j        r| j        }nk| j        r|                     ¦   «         }n|                     ¦   «         }|                     |j        |j        ¦  «        }| 	                    || j        ¦  «        }|  
                    |||¬¦  «        S )aJ  
        Internal method to handle decrypting streams that are encrypted
        with the document's default encryption handler for streams and/or
        embedded files (i.e. not with any custom crypt filters).

        This routine is called deep in the object fetching stack, and you should
        never invoke it yourself. It's defined as a method in
        :class:`.StreamObject` because it needs to be able to preserve the
        type (subclass) of the stream object on which it is called, in order
        to properly feed into the logic surrounding metadata streams.
        N)rÏ  r¦   )rß  Ú_has_crypt_filterrÏ  Úis_embedded_file_streamÚget_embedded_file_filterÚget_stream_filterrK  r_   r`   rÒ   rµ  )rO   r¦   r£   rà  Údecrypted_datarO  rP  s          r@   Ú _implicit_decrypt_stream_contentz-StreamObject._implicit_decrypt_stream_contentÌ  s©   € ð ÐØ#ˆDŒMàÔ!ð 	Fð "Ô.ˆNˆNàÔ+ð 1Ø×5Ò5Ñ7Ô7��à×.Ò.Ñ0Ô0�Ø×,Ò,¨S¬Y¸¼ÑGÔGˆIØŸZšZ¨	°4Ô3DÑEÔEˆNà�~Š~Ø¨NÀGð ñ 
ô 
ð 	
r?   rJ   c                 óB   — dd„ |                       ¦   «         D ¦   «         v S )Nú/Cryptc              3   ó    K  — | ]	\  }}|V — Œ
d S rC   r>   )r®  ÚnameÚ_s      r@   ú	<genexpr>z1StreamObject._has_crypt_filter.<locals>.<genexpr>ô  s&   è è € Ð@Ð@¡W T¨1˜DÐ@Ð@Ð@Ð@Ð@Ð@r?   )Ú_filtersrN   s    r@   râ  zStreamObject._has_crypt_filterò  s$   € àÐ@Ð@°·²±´Ð@Ñ@Ô@Ð@Ð@r?   ri  c                 ó  — |�|| _         | j         €t          d¦  «        ‚|| j         j        vrt          d|› d�¦  «        ‚|pt          ¦   «         }t	          d¦  «        |d<   ||d<   |                      t	          d¦  «        |d¬	¦  «         d S )
Nz#There is no security handler aroundzThe crypt filter z& is not known to the security handler.z/CryptFilterDecodeParmsú/Typeú/Nameré  T)ÚparamsÚallow_duplicates)rß  r   rl  r"   r0   Úapply_filter)rO   rë  rò  r¦   s       r@   Úadd_crypt_filterzStreamObject.add_crypt_filterö  s¼   € ð ÐØ#ˆDŒMàŒ=Ð Ý Ð!FÑGÔGÐGà�t”}Ô8Ð8Ð8Ý ØP DÐPÐPÐPñô ð ð Ð-Õ+Ñ-Ô-ˆÝ"Ð#<Ñ=Ô=ˆˆw‰Øˆˆw‰Ø×ÒÝ�XÑÔ vÀð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   c              #   ón  K  — 	 | t          d¦  «                 }n# t          $ r Y d S w xY wt          |t          ¦  «        r|f}n$t          |t          ¦  «        st          d¦  «        ‚	 | t          d¦  «                 }t          |t          ¦  «        r|g}t          |t          ¦  «        r:t          |¦  «        t          |¦  «        z
  }|dk    r|t          ¦   «         g|z  z  }n/# t          $ r" t          ¦   «         gt          |¦  «        z  }Y nw xY wt          |d„ |D ¦   «         ¦  «        E d {V —† d S )Nú/Filterz5/Filter should be a name object or an array of names.ú/DecodeParmsr   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S rC   )rP   )r®  Ú	param_sets     r@   rí  z(StreamObject._filters.<locals>.<genexpr>+  s.   è è € ÐOÐO°I˜×-Ò-Ñ/Ô/ÐOÐOÐOÐOÐOÐOr?   )r0   r¿  rD   r&   r   r   r"   rØ   r—   r'   Úzip)rO   Ú
filter_arrÚdecode_paramsÚlendiffs       r@   rî  zStreamObject._filters  s„  è è € ð	Ø�h yÑ1Ô1Ô2ˆJˆJøÝð 	ð 	ð 	ØˆFˆFð	øøøõ �j¥*Ñ-Ô-ð 	à$˜ˆJˆJÝ˜J­Ñ4Ô4ð 	Ý ØGñô ð ð	=Ø ¥¨.Ñ!9Ô!9Ô:ˆMÝ˜-Õ)9Ñ:Ô:ð 0à!. �Ý˜-­Ñ.Ô.ð >Ý˜j™/œ/­C°Ñ,>Ô,>Ñ>�à˜Q’;�;Ø!¥j¡l¤l ^°gÑ%=Ñ=�MøøÝð 	=ð 	=ð 	=Ý'™\œ\˜N­S°©_¬_Ñ<ˆMˆMˆMð	=øøøõ
 ØÐOÐOÀÐOÑOÔOñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
s   „ š
(§(Á)A<C& Ã&)DÄDc              #   ó’  K  — ddl m} |                      ¦   «         D ]©\  }}	 |�t          |t          ¦  «        ri }|dk    rI|                     dd¦  «        dk    rŒ@| j        }|€t          d¦  «        ‚|                     |¦  «        }n| 	                    |¦  «        }||fV — ŒŠ# t          $ r t          d|z  ¦  «        ‚w xY wd S )Nr   )Úfiltersré  rñ  ri  zFPDF streams require a security handler to use explicit /Crypt filters.z%Filters of type %s are not supported.)Ú r   rî  rD   r'   Úgetrß  r   ÚCryptFilterDecoderÚget_generic_decoderr¿  rM   )rO   r   Úfilter_typerò  ÚshÚdecoders         r@   Ú_stream_decoderszStreamObject._stream_decoders.  s  è è € ØÐÐÐÐÐà#'§=¢=¡?¤?ð 	ð 	ÑˆK˜ðØ�>¥Z°½
Ñ%CÔ%C�>Ø�FØ (Ò*Ð*ð —z’z '¨;Ñ7Ô7¸;ÒFÐFØ ð œ�BØ�zÝ,ð7ñô ð ð &×8Ò8¸Ñ<Ô<�G�Gà%×9Ò9¸+ÑFÔF�GØ˜v�oÐ%Ð%Ð%Ð%øÝð ð ð Ý)Ø;¸kÑIñô ð ðøøøð+	ð 	s   £9B'ÁA	B'Â'Cc                 ó¸   — | j         x| _        | _        |                      t	          d¦  «        d¦  «         |                      t	          d¦  «        d¦  «         dS )zG
        Ensure the stream is decoded, and remove any filters.
        r÷  Nrø  )rÝ   rÝ  rÞ  Úpopr0   rN   s    r@   Ústrip_filterszStreamObject.strip_filtersK  sS   € ð
 +/¬)Ð3ˆŒ
�TÔ'Ø�Š•˜)Ñ$Ô$ dÑ+Ô+Ð+Ø�Š•˜.Ñ)Ô)¨4Ñ0Ô0Ð0Ð0Ð0r?   c                 ó   — | j         €x| j        }|€t          d¦  «        ‚|                      ¦   «         D ]\  }}|                     ||¦  «        }Œt          |t          ¦  «        r|                     ¦   «         }|| _         | j         €J ‚| j         S )zß
        Return the decoded stream data as bytes.
        If the stream hasn't been decoded yet, it will be decoded on-the-fly.

        :raises .misc.PdfStreamError:
            If the stream could not be decoded.
        NúNo data available.)rÝ  rÞ  r   r  r”   rD   Ú
memoryviewÚtobytes)rO   rÝ   Ú
filter_clsrý  s       r@   rÝ   zStreamObject.dataT  s›   € ð Œ:ÐØÔ%ˆDØˆ|Ý$Ð%9Ñ:Ô:Ð:Ø-1×-BÒ-BÑ-DÔ-Dð >ð >Ñ)�
˜MØ!×(Ò(¨¨}Ñ=Ô=��Ý˜$¥
Ñ+Ô+ð &Ø—|’|‘~”~�ØˆDŒJØŒzÐ%Ð%Ð%ØŒzÐr?   c                 ó  — | j         €k| j        }|€t          d¦  «        ‚t          |                      ¦   «         ¦  «        }t          |¦  «        D ]\  }}|                     ||¦  «        }Œ|| _         | j         €J ‚| j         S )zß
        Return the encoded stream data as bytes.
        If the stream hasn't been encoded yet, it will be encoded on-the-fly.

        :raises .misc.PdfStreamError:
            If the stream could not be encoded.
        Nr  )rÞ  rÝ  r   Útupler  Úreversedr  )rO   rÝ   Údecodersr  rý  s        r@   rÏ  zStreamObject.encoded_datai  s”   € ð ÔÐ%Ø”:ˆDØˆ|Ý$Ð%9Ñ:Ô:Ð:Ý˜T×2Ò2Ñ4Ô4Ñ5Ô5ˆHÝ-5°hÑ-?Ô-?ð >ð >Ñ)�
˜MØ!×(Ò(¨¨}Ñ=Ô=��Ø!%ˆDÔØÔ!Ð-Ð-Ð-ØÔ!Ð!r?   Tró  c                 ó”  ‡‡— | j         }|€| j        �| j        }t          |                      ¦   «         ¦  «        }t          |t          ¦  «        st          |¦  «        }‰�$t          ‰t          ¦  «        st          ‰¦  «        Š|s'|| t          d¦  «        <   ‰r‰| t          d¦  «        <   nŒt          |Ž \  }Š|s||v r|du rt          d|› d�¦  «        ‚dS t          |g|¢R ¦  «        | t          d¦  «        <   ‰st          ‰¦  «        r-ˆˆfd„}t           |¦   «         ¦  «        | t          d¦  «        <   d| _        || _         dS )a¤  
        Apply a new filter to this stream. This filter will be prepended
        to any existing filters.
        This means that is is placed *last* in the encoding order, but *first*
        in the decoding order.

        *Note:* Calling this method on an encoded stream will first cause the
        stream to be decoded using the filters already present.
        The cached value for the encoded stream data will be cleared.

        :param filter_name:
            Name of the filter
            (see :const:`~pyhanko.pdf_utils.filters.DECODERS`)
        :param params:
            Parameters to the filter (will be written to ``/DecodeParms`` if
            not ``None``)
        :param allow_duplicates:
            If ``None``, silently ignore duplicate filters.
            If ``False``, raise ValueError when attempting to add a duplicate
            filter. If ``True`` (default), duplicate filters are allowed.
        Nr÷  rø  FzFilter z) has already been applied to this stream.c               3   ó^   •K  — ‰pt          ¦   «         V — ‰D ]} | pt          ¦   «         V — Œd S rC   )r'   )rú  Ú
param_setsrò  s    €€r@   Ú_paramsz*StreamObject.apply_filter.<locals>._params¼  sM   øè è € Ø Ð0¥J¡L¤LÐ0Ð0Ð0Ø%/ð 8ð 8˜	Ø'Ð7­:©<¬<Ð7Ð7Ð7Ð7ð8ð 8r?   )rÝ  rÞ  rÝ   rØ   rî  rD   r&   r0   r"   rû  r   r   Úany)	rO   Úfilter_namerò  ró  rÝ   Úcur_filtersÚfilter_namesr  r  s	     `     @r@   rô  zStreamObject.apply_filter}  s¥  øø€ ð4 ŒzˆØˆ<˜DÔ.Ð:Ø”9ˆDõ ˜4Ÿ=š=™?œ?Ñ+Ô+ˆå˜+¥zÑ2Ô2ð 	0Ý" ;Ñ/Ô/ˆKØÐ¥j°Õ9IÑ&JÔ&JÐÝ% fÑ-Ô-ˆFØð 	Hà(3ˆD•˜)Ñ$Ô$Ñ%Øð 8Ø17�•X˜nÑ-Ô-Ñ.øõ (+¨KÐ'8Ñ$ˆL˜*Ø#ð ¨°|Ð(CÐ(CØ# uÐ,Ð,Ý'ð( +ð (ð (ð (ñô ð ð �Fõ )4ØÐ,˜|Ð,Ð,ñ)ô )ˆD•˜)Ñ$Ô$Ñ%ð ð H�˜Z™œð Hð8ð 8ð 8ð 8ð 8ð 8õ
 2=¸W¸W¹Y¼YÑ1GÔ1G�•X˜nÑ-Ô-Ñ.Ø!ˆÔØˆŒ
ˆ
ˆ
r?   c                 óN   — |                       t          d¦  «        d¬¦  «         dS )zÕ
        Convenience method to add a ``/FlateDecode`` filter with default
        settings, if one is not already present.

        *Note:* compression is not actually applied until the stream is written.
        z/FlateDecodeN)ró  )rô  r0   rN   s    r@   ÚcompresszStreamObject.compressÅ  s+   € ð 	×Ò�( >Ñ2Ô2ÀTÐÑJÔJÐJÐJÐJr?   c                 óX   — 	 |                       d¦  «        dk    S # t          $ r Y dS w xY w)Nrð  z/EmbeddedFileFrÅ  rN   s    r@   rã  z$StreamObject.is_embedded_file_streamÎ  s@   € ð	Ø—<’< Ñ(Ô(¨OÒ;Ð;øÝð 	ð 	ð 	Ø�5�5ð	øøøs   ‚ ›
)¨)c                 óâ  •— | j         }|�S|�Q| j        sJ|                     ¦   «         }|                     |j        |j        ¦  «        }|                     ||¦  «        }t          t          |¦  «        ¦  «        | t          d¦  «        <   t          ¦   «                              |||¦  «         | d= |                     d¦  «         |                     |¦  «         |                     d¦  «         d S )Nr   s   
stream
s
   
endstream)rÏ  râ  rå  rK  r_   r`   rL  r(   r—   r&   r²  r©   r·   )rO   r›   r¦   rx   rÝ   rO  rP  rµ  s          €r@   r©   zStreamObject.write_to_streamÕ  së   ø€ ð Ô ˆàÐØÐ)ØÔ*ð *ð ×*Ò*Ñ,Ô,ˆBØ×,Ò,ØÔ# ]Ô%=ñô ˆIð —:’:˜i¨Ñ.Ô.ˆDÝ&2µ3°t±9´9Ñ&=Ô&=ˆ�Z˜	Ñ"Ô"Ñ#å‰Œ×Ò ¨°Ñ?Ô?Ð?Ø�ˆOØ�Š�]Ñ#Ô#Ð#Ø�Š�TÑÔÐØ�Š�^Ñ$Ô$Ð$Ð$Ð$r?   )NNNN)NTrª   )r7   r8   r9   r:   r   r·  r  rY   r*   rç  rû   rÇ   râ  r&   rõ  r   r   r´   rî  r  r  rÝ   rÏ  rô  r  rã  r©   rÙ  rÚ  s   @r@   r+   r+   ™  sX  ø€ € € € € ð$ð $ðP %)Ø'+Ø(,Ø/3ð
 ð 
 à˜D”>ð
 ð ˜e”_ð
 ð ˜u”oð	
 ð
 Ð+Ô,ð
 ð 
 ð 
 ð 
 ð 
 ð 
 ð$
Ø%ð$
Ø:>ð$
ð $
ð $
ð $
ðL ðA 4ð Að Að Añ „XðAð
 ˆZ˜Ñ$Ô$ØØ/3ð	
ð 
ð Ð+Ô,ð	
ð 
ð 
ð 
ð.
˜( 5¨¨h°t¬nÐ)<Ô#=Ô>ð 
ð 
ð 
ð 
ðBð ð ð:1ð 1ð 1ð ð�eð ð ð ñ „Xðð( ð"˜eð "ð "ð "ñ „Xð"ð( LPðFð FØ:BÀ4¼.ðFð Fð Fð FðPKð Kð Kð ðð ñ „Xðð 04Øð	%ð %ð Ð+Ô,ð%ð %ð %ð %ð %ð %ð %ð %ð %ð %r?   r+   c                 ó<   ‡ — ˆ fd„}t           |¦   «         ¦  «        S )Nc            	   3   óx   •K  — ‰D ]3} 	 t           |          V — Œ# t          $ r t          d| ddd¦  «        ‚w xY wd S )NÚpdfdocencodingr|   ú#does not exist in translation table)Ú_pdfDocEncoding_revr¿  rk  )rp  Úunicode_strings    €r@   Ú_buildz%encode_pdfdocencoding.<locals>._buildð  su   øè è € Øð 
	ð 
	ˆAð	Ý)¨!Ô,Ð,Ð,Ð,Ð,øÝð ð ð Ý(Ø$ØØØØ9ñô ð ðøøøð
	ð 
	s   ‰™7)r  )r&  r'  s   ` r@   rV  rV  ï  s0   ø€ ðð ð ð ð õ ��‘”‰?Œ?Ðr?   c                 óH   ‡ — ˆ fd„}d                       |¦   «         ¦  «        S )Nc               3   ó†   •K  — ‰D ]:} t           |          }|dk    r!t          dt          | f¦  «        ddd¦  «        ‚|V — Œ;d S )Nú r#  r|   r$  )Ú_pdfDocEncodingr!  r  )Úbrp  Ú
byte_arrays     €r@   r'  z%decode_pdfdocencoding.<locals>._build  si   øè è € Øð 
	ð 
	ˆAÝ Ô"ˆAØ�HŠ}ˆ}Ý(Ø$Ý˜1˜$‘K”KØØØ9ñô ð ð ˆGˆGˆGˆGð
	ð 
	r?   r  )r.  )r-  r'  s   ` r@   rZ  rZ     s6   ø€ ðð ð ð ð ð �7Š7�6�6‘8”8ÑÔÐr?   (   r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  u   Ë˜u   Ë‡u   Ë†u   Ë™u   Ë�u   Ë›u   Ëšu   Ëœú ú!ú"ú#ú$ú%ú&ú'ú(rì   Ú*ú+ú,ú-ú.ú/rý   Ú1Ú2Ú3Ú4Ú5Ú6Ú7Ú8Ú9ú:ú;ú<ú=ú>ú?ú@ÚAÚBÚCÚDÚEÚFÚGÚHÚIÚJÚKÚLÚMÚNÚOÚPÚQÚRÚSÚTÚUÚVÚWÚXÚYÚZú[ú\ú]ú^rì  ú`Úar,  rp  Údr¦  ÚfÚgÚhr@  Újr¯  ÚlÚmÚnÚoÚpÚqrù   r¢  r¥  Úur°  ÚwÚxÚyÚzÚ{ú|Ú}ú~r*  u   â€¢u   â€ u   â€¡u   â€¦u   â€”u   â€“u   Æ’u   â�„u   â€¹u   â€ºu   âˆ’u   â€°u   â€žu   â€œu   â€�u   â€˜u   â€™u   â€šu   â„¢u   ï¬�u   ï¬‚u   Å�u   Å’u   Å u   Å¸u   Å½u   Ä±u   Å‚u   Å“u   Å¡u   Å¾r*  u   â‚¬õ   Â¡õ   Â¢õ   Â£õ   Â¤õ   Â¥õ   Â¦õ   Â§õ   Â¨õ   Â©õ   Âªõ   Â«õ   Â¬r*  õ   Â®õ   Â¯õ   Â°õ   Â±õ   Â²õ   Â³õ   Â´õ   Âµõ   Â¶õ   Â·õ   Â¸õ   Â¹õ   Âºõ   Â»õ   Â¼õ   Â½õ   Â¾õ   Â¿õ   Ã€õ   Ã�õ   Ã‚õ   Ãƒõ   Ã„õ   Ã…õ   Ã†õ   Ã‡õ   Ãˆõ   Ã‰õ   ÃŠõ   Ã‹õ   ÃŒõ   Ã�õ   ÃŽõ   Ã�õ   Ã�õ   Ã‘õ   Ã’õ   Ã“õ   Ã”õ   Ã•õ   Ã–õ   Ã—õ   Ã˜õ   Ã™õ   Ãšõ   Ã›õ   Ãœõ   Ã�õ   Ãžõ   ÃŸõ   Ã õ   Ã¡õ   Ã¢õ   Ã£õ   Ã¤õ   Ã¥õ   Ã¦õ   Ã§õ   Ã¨õ   Ã©õ   Ãªõ   Ã«õ   Ã¬õ   Ã­õ   Ã®õ   Ã¯õ   Ã°õ   Ã±õ   Ã²õ   Ã³õ   Ã´õ   Ãµõ   Ã¶õ   Ã·õ   Ã¸õ   Ã¹õ   Ãºõ   Ã»õ   Ã¼õ   Ã½õ   Ã¾õ   Ã¿é   c                 ó   — i | ]\  }}||“Œ	S r>   r>   )r®  rÕ   Úchars      r@   r±  r±    s   € ÐKÐKÐK¡H B¨�t˜RÐKÐKÐKr?   c                 óP   — t          | t          ¦  «        rt          | |¦  «        S | S rC   )rD   Ú	PROXYABLEr    )Úencrypted_objr¦   s     r@   Úproxy_encrypted_objrå    s*   € Ý�-¥Ñ+Ô+ð Ý# M°7Ñ;Ô;Ð;àÐr?   c                   óˆ   — e Zd ZU dZeed<   	 defd„Zedefd„¦   «         Z	 	 dde	d         fd	„Z
d
„ Zed„ ¦   «         Zd„ ZdS )r    a¬  
    Internal proxy class that allows transparent on-demand encryption
    of objects.

    .. warning::
        Most public-facing APIs won't leave you to deal with these *directly*
        (that's half the reason this class exists in the first place), and
        the API of this class is considered internal.

        However, for reasons related to the historical PyPDF2 codebase from
        which pyHanko's object handling code ultimately derives, there are
        some Python builtins that might cause these wrapper objects to
        inadvertently "leak". Please `tell us about such cases
        <https://github.com/MatthiasValvekens/pyHanko/discussions>`_ so we can
        make those types of access more convenient and robust.

    .. danger::
        The ``__eq__`` implementation on this class is not safe for general use,
        due to the fact that certain structures in PDF are exempt from
        encryption. Only compare proxy objects with ``==`` in areas of the
        document where these exemptions don't apply.

    :param raw_object:
        A raw object, typically as-parsed from a PDF file.
    :param handler:
        The security handler governing this object.
    rF   c                 ó0   — || _         d | _        || _        d S rC   )rF   Ú
_decryptedr¦   )rO   rF   r¦   s      r@   rY   zDecryptedObjectProxy.__init__E  s   € Ø$ˆŒØ/3ˆŒØˆŒˆˆr?   rJ   c                 ór  ‡	— | j         �| j         S ddlm} | j        }| j        Š	|j        }t          |t          ¦  «        st          d|› d�¦  «        ‚t          |t          ¦  «        st          |t          ¦  «        r]‰	                     ¦   «         }|                     |j        |j        ¦  «        }t          |                     ||j        ¦  «        ¦  «        }nÊt          |t$          ¦  «        r]ˆ	fd„|                     ¦   «         D ¦   «         }t          |t(          ¦  «        r|                     ‰	||¦  «        }nht%          |¦  «        }nXt          |t,          ¦  «        r#t/          ˆ	fd„|¦  «        }t-          |¦  «        }n t1          dt3          |¦  «        › d	�¦  «        ‚|j        |_        || _         |S )
aG  
        The decrypted PDF object exposed as a property.

        If this object is a container object, its constituent parts will be
        wrapped in :class:`.DecryptedObjectProxy` as well, in order to defer
        further decryption until the values are requested through a getter
        method on the container.
        Nr   r   zPProxyable objects must have a container ref pointing to a numbered object, not 'z'.c                 ó8   •— i | ]\  }}|t          |‰¦  «        “ŒS r>   ©rå  )r®  ÚdictkeyrÀ   r¦   s      €r@   r±  z2DecryptedObjectProxy.decrypted.<locals>.<dictcomp>m  s:   ø€ ð !ð !ð !á"�G˜Uð Õ,¨U°GÑ<Ô<ð!ð !ð !r?   c                 ó$   •— t          | ‰¦  «        S rC   rë  )r°  r¦   s    €r@   rG  z0DecryptedObjectProxy.decrypted.<locals>.<lambda>x  s   ø€ Õ*=¸aÀÑ*IÔ*I€ r?   zObject of type z is not proxyable.)rè  Úcryptr   rF   r¦   rx   rD   r*   rö   r   r-   rJ  rK  r_   r`   r1   rÒ   rQ  r"   r³  r+   rç  r   Úmapr"  Útype)
rO   r   rG   rx   rO  rP  rE   rà  Údecrypted_mapr¦   s
            @r@   rE   zDecryptedObjectProxy.decryptedJ  sû  ø€ ð Œ?Ð&Ø”?Ð"à*Ð*Ð*Ð*Ð*Ð*ð ŒoˆØ#'¤<ˆØÔ)ˆÝ˜-­Ñ3Ô3ð 	Ýð;Ø)6ð;ð ;ð ;ñô ð õ �cÕ+Ñ,Ô,ð 	Mµ
ØÕ!ñ1
ô 1
ð 	Mð ×*Ò*Ñ,Ô,ˆBØ×,Ò,ØÔ# ]Ô%=ñô ˆIõ # 2§:¢:¨i¸Ô9KÑ#LÔ#LÑMÔMˆIˆIÝ˜Õ-Ñ.Ô.ð 	Mð!ð !ð !ð !à&)§i¢i¡k¤kð!ñ !ô !Ðõ ˜#�|Ñ,Ô,ð @Ø×@Ò@Ø˜]Ð,=ñô �	�	õ -Ð->Ñ?Ô?�	�	Ý˜�[Ñ)Ô)ð 	MÝÐ IÐ IÐ IÐ IÈ3ÑOÔOˆMÝ# MÑ2Ô2ˆIˆIåÐK­d°3©i¬iÐKÐKÐKÑLÔLÐLØ"%Ô"3ˆ	ÔØ#ˆŒØÐr?   Nr¦   r   c                 ó>   — | j                              |||¦  «         d S rC   )rE   r©   r¨   s       r@   r©   z$DecryptedObjectProxy.write_to_stream€  s$   € ð 	Œ×&Ò& v¨w¸ÑFÔFÐFÐFÐFr?   c                 ó4   — | j                              ¦   «         S rC   )rE   rP   rN   s    r@   rP   zDecryptedObjectProxy.get_objectŒ  s   € ØŒ~×(Ò(Ñ*Ô*Ð*r?   c                 ó   — | j         j        S rC   )rF   rx   rN   s    r@   rx   z"DecryptedObjectProxy.container_ref�  s   € àŒÔ,Ð,r?   c                 óL   — t          |t          ¦  «        o|j        | j        k    S rC   )rD   r    rE   r®   s     r@   r°   zDecryptedObjectProxy.__eq__“  s(   € õ �uÕ2Ñ3Ô3ð 2Ø” 4¤>Ò1ð	
r?   rª   )r7   r8   r9   r:   r)   rl   rY   rû   rE   r   r©   rP   rx   r°   r>   r?   r@   r    r    #  sæ   € € € € € € ðð ð8 ÐÐÑðð 9ð ð ð ð ð
 ð3˜9ð 3ð 3ð 3ñ „Xð3ðp 04Øð	
Gð 
Gð Ð+Ô,ð
Gð 
Gð 
Gð 
Gð+ð +ð +ð ð-ð -ñ „Xð-ð
ð 
ð 
ð 
ð 
r?   r    zD:%Y%m%d%H%M%SÚdtc                 ó2  — |                       t          ¦  «        }d}|                      ¦   «         }|�T|                     ¦   «         }|sd}n;d}|dk     rd}t	          |¦  «        }t          |d¦  «        \  }}|dz  }|d	||fz  z   }t          ||z   ¦  «        S )
a  
    Convert a datetime object into a PDF string.
    This function supports both timezone-aware and naive datetime objects.

    :param dt:
        The datetime object to convert.
    :return:
        A :class:`TextStringObject` representing the datetime passed in.
    r  Nrf  r8  r   r:  i  é<   z
%02d'%02d')ÚstrftimeÚASN_DT_FORMATÚ	utcoffsetÚtotal_secondsÚabsÚdivmodr-   )rö  Úbase_dtÚutc_offset_stringÚ
utc_offsetÚ
tz_secondsÚsignÚhrsÚminss           r@   r/   r/   ¡  s¶   € ð �kŠk�-Ñ(Ô(€GØÐØ—’‘”€JØÐà×-Ò-Ñ/Ô/ˆ
Øð 	DØ #ÐÐàˆDØ˜AŠ~ˆ~Ø�Ý  ™_œ_�
Ý$ Z°Ñ6Ô6‰OˆC�Ø Ñ#ˆDð
 !%¨¸¸T°{Ñ(BÑ CÐå˜GÐ&7Ñ7Ñ8Ô8Ð8r?   z
^D:(\d{4})z^(?:D:)?(\d{4})z^(\d\d)z(\d\d)(?:'(\d\d))?'?Údate_strrÑ  c           
      óÆ  — t          | t          ¦  «        s't          dt          | ¦  «        j        › d| ›�¦  «        ‚|                      ¦   «         } |rt          nt                               | ¦  «        }|st          | › d�¦  «        ‚t          | 
                    d¦  «        ¦  «        }| |                     d¦  «        d …         }g d¢}t          d¦  «        D ]O}t                               |¦  «        }|s n0t          | 
                    d¦  «        ¦  «        ||<   |dd …         }ŒP|\  }}}	}
}d }|ró|d         }|d	k    r#t          |¦  «        dk    rt          d¦  «        }n³|d
v rœ|dd …         }t                                |¦  «        }|st          d| › d|› �¦  «        ‚t          | 
                    d¦  «        ¦  «        }t          | 
                    d¦  «        pd¦  «        }t          ||¬¦  «        }|dk    r| }nt          d| › d�¦  «        ‚t%          |¦  «        }	 t'          ||||	|
|d|¬¦  «        S # t(          $ r}t          d|¦  «        ‚d }~ww xY w)Nz'Date string must be a text string, got z: z% does not appear to be a date string.r   r   )r   r   r   r   r   r�   r6   rf  )r8  r:  z#Improper timezone specification in )ÚhoursÚminutesr:  z Improper trailing characters in r;  )ÚyearÚmonthÚdayÚhourÚminuteÚsecondÚmicrosecondÚtzinfozImproper date value)rD   r´   r   rð  r7   ÚrstripÚMIN_DATE_REGEXÚMIN_DATE_REGEX_LENIENTr™   rk   Úgroupr©  rÔ   ÚTWO_DIGIT_STARTr—   r   Ú
UTC_OFFSETÚ	fullmatchr   r   rö   )r  rÑ  rs  r
  Údate_remainingÚlower_orderrÕ   r  r  r  r  r  Útz_infoÚsgnÚ	tz_offsetÚtz_specÚtz_matchÚtz_hoursÚ
tz_minutesr¦  s                       r@   Úparse_pdf_dater"  Ë  sÆ  € Ý�h¥Ñ$Ô$ð 
Ýðµd¸8±n´nÔ6Mð ð Øðð ñ
ô 
ð 	
ð �ŠÑ Ô €HØ!Ð	=�ˆÕ'=×DÒDÀXÑNÔN€AØð OÝ˜hÐMÐMÐMÑNÔNÐNÝˆq�wŠw�q‰zŒz‰?Œ?€Dð ˜aŸeše A™hœh˜j˜jÔ)€NØ!�/�/€Kå�A‰hŒhð ,ð ,ˆÝ×!Ò! .Ñ1Ô1ˆØð 	ØˆEÝ˜aŸgšg a™jœj™/œ/ˆ�B‰Ø'¨¨¨Ô+ˆˆð (3Ñ$€Eˆ3��f˜fð €GØð &Ø˜QÔˆØ�#Š:ˆ:�#˜nÑ-Ô-°Ò2Ð2Ý! !™œˆIˆIØ�JÐÐØ$ Q R RÔ(ˆGÝ!×+Ò+¨GÑ4Ô4ˆHØð Ý"ØO¸(ÐOÐOÀgÐOÐOñô ð õ ˜8Ÿ>š>¨!Ñ,Ô,Ñ-Ô-ˆHÝ˜XŸ^š^¨AÑ.Ô.Ð3°!Ñ4Ô4ˆJÝ!¨¸*ÐEÑEÔEˆIØ�cŠzˆzØ&˜J�	øåÐMÀ(ÐMÐMÐMÑNÔNÐNÝ˜9Ñ%Ô%ˆð5ÝØØØØØØØØð	
ñ 	
ô 	
ð 		
øõ ð 5ð 5ð 5ÝÐ0°!Ñ4Ô4Ð4øøøøð5øøøs   È*I É
I ÉIÉI )T)jr:   r,  r\  rÿ   ÚenumÚloggingr‹   r  ÚtypingÚdataclassesr   r   r   r   r   Úior   r	   r
   r   r   r   r   Úmiscr   r   r   r   r   r   r   r   r   r   r   ÚTYPE_CHECKINGÚ	crypt.apir   Ú__all__r�   r•   r  r  r˜   Ú	getLoggerr7   rÒ  ÚEnumr#   rH   r!   r.   r*   Úuniquero   rr   rÇ   r2   r)   r3   r'   r   rØ   r   r%   r   r$   rk   r(   r´   r  r  r1   r(  r�   rC  r‘   r   r,   r  r-   r|  r�  r&   r›  rª  r·  r"   r+   rV  rZ  r+  r—   Ú	enumerater%  r0   rã  rå  r    rú  r/   r  r  r  r  r"  r>   r?   r@   ú<module>r0     sQ  ððð ð €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø Ð Ð Ð Ð Ð Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 
Ôð +Ø*Ð*Ð*Ð*Ð*Ð*ðð ð €ð4 €Ø€Ø�2”:Ð;×BÒBÀ7ÑKÔKÑLÔLÐ à	ˆÔ	˜8Ñ	$Ô	$€ðð ð ð ð ˜œñ ô ð ð>Ð1ð ð ð ð ð"ð "ð "ð "ð "ñ "ô "ð "ð2ð ð ð ð �ñ ô ð ð. €�$ÐÑÔð/ð /ð /ð /ð /�ñ /ô /ñ Ôð/ðd „ð.ð .ð .ð .ð .�t”yñ .ô .ñ „ð.ð$  %Ø*:Ô*=ð	fð fà$ðfð ðfð (ð	fð
 ðfð fð fð fðRB"ð B"ð B"ð B"ð B"ñ B"ô B"ð B"ðJ
*ð 
*ð 
*ð 
*ð 
*�iñ 
*ô 
*ð 
*ðð ð ð ð �ñ ô ð ð@'ð 'ð 'ð 'ð '�Iñ 'ô 'ð 'ðTZð Zð Zð Zð Z�$˜	ñ Zô Zð Zðzp
ð p
ð p
ð p
ð p
�Y ñ p
ô p
ð p
ðf1ð 1ð 1ð 1ð 1�'”/ 9ñ 1ô 1ð 1ð@&5ð &5ð &5ð &5ð &5�3˜	ñ &5ô &5ð &5ðXCØ�#�u˜iÐ'Ô(ðCà
Ð1Ô2ðCð Cð Cð Cð0 '€
ðà
Ð1Ô2ðð ð ð ð@;¨%ð ;ð ;ð ;ð ;ð|:à
Ð1Ô2ð:ð :ð :ð :ðð ð ð ð �u˜iñ ô ð ð4=+ð =+ð =+ð =+ð =+˜œñ =+ô =+ð =+ð@*˜u U¨IÐ%5Ô6ð *Ð;Mð *ð *ð *ð *ðLð Lð Lð Lð L�s˜Iñ Lô Lð Lð^

ð 

ð 

ð3 ˜Uð 3  |ð 3 ð 3 ð 3 ð 3 ðl%(ð %(ð %(ð %(ð %(��iñ %(ô %(ð %(ðPð ð ð&ð &ð &ðRu*ð u*ð u*ð u*ð u*�t˜Yñ u*ô u*ð u*ðpS%ð S%ð S%ð S%ð S%Ð#ñ S%ô S%ð S%ðl
ð ð ð"ð ð ð"A€ðF €sˆ?ÑÔ˜sÒ"Ð"Ð"Ð"àKÐK°	°	¸/Ñ0JÔ0JÐKÑKÔKÐ à€ØÐ/Ð1AÀ;ÐO€	ðð ð ðx
ð x
ð x
ð x
ð x
˜9ñ x
ô x
ð x
ðv !€ð 9�ð  9Ð.ð  9ð  9ð  9ð  9ðH �”˜MÑ*Ô*€Ø#˜œÐ$6Ñ7Ô7Ð Ø�"”*˜ZÑ(Ô(€ØˆRŒZÐ/Ñ0Ô0€
ð>5ð >5˜Sð >5¨$ð >5¸(ð >5ð >5ð >5ð >5ð >5ð >5r?   