o
    »ÙøiÊ  ã                   @  sâ  d dl m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	 d dl
mZ d dlmZmZmZ ddlmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddl m!Z! ddl"m#Z# dZ$e$r„d dl%m&Z& d dlm'Z'm(Z( ddlm)Z) e *e+¡Z,e -d¡j.Z/dZ0dddddddddddd d!d"d#d$œZ1e -d%¡Z2ej3Z4	 d&e4 Z5	 G d'd(„ d(e	ƒZ6G d)d*„ d*e	ƒZ7dd.d/„Z8d€d�d3d4„Z9G d5d6„ d6ƒZ:G d7d8„ d8e;ƒZ<G d9d:„ d:ƒZ=G d;d<„ d<eƒZ>G d=d>„ d>e:ƒZ?d‚dAdB„Z@G dCdD„ dDejƒZAdEdFdGdHdIdJdKdKdKdLdMdNdOdPdQdRœZBdƒdWdX„ZCG dYdZ„ dZƒZDG d[d\„ d\ƒZEd„dadb„ZFG dcdd„ ddeƒZGd…dndo„ZHd†drds„ZIeCdfd‡dudv„ZJdˆdzd{„ZKe LeAjMeAe@¡ e NeAjMeJ¡ e OeAjMeI¡ e PeAjMd|d}g¡ e QeAjMd~¡ dS )‰é    )ÚannotationsN)ÚIntEnum)ÚFraction)ÚIOÚ
NamedTupleÚcasté   )ÚImageÚ
ImageChopsÚ	ImageFileÚImagePaletteÚImageSequence)Úi16be)Úi32be)Úo8)Úo16be)Úo32be)Ú	deprecate)ÚDeferredErrorF)ÚCallable)ÚAnyÚNoReturn)Ú_imagings   \w\w\w\ws   ‰PNG

)Ú1r   )ÚLúL;2)r   úL;4)r   r   )úI;16úI;16B)ÚRGBr   )r   zRGB;16B)ÚPúP;1)r    úP;2)r    úP;4)r    r    )ÚLAr$   )ÚRGBAzLA;16B)r%   r%   )r%   zRGBA;16B))r   r   )é   r   )é   r   )é   r   )é   r   )r(   r&   )r)   r&   )r   é   )r&   r*   )r'   r*   )r(   r*   )r(   r'   )r)   r'   )r(   é   )r)   r+   s   ^ÿ* ÿ*$é@   c                   @  s   e Zd ZdZ	 dZ	 dZdS )ÚDisposalr   r   r&   N)Ú__name__Ú
__module__Ú__qualname__ÚOP_NONEÚOP_BACKGROUNDÚOP_PREVIOUS© r4   r4   ú_/home/develop/edictos_py/central_edictos/env/lib/python3.10/site-packages/PIL/PngImagePlugin.pyr-   n   s    r-   c                   @  s   e Zd ZdZ	 dZdS )ÚBlendr   r   N)r.   r/   r0   Ú	OP_SOURCEÚOP_OVERr4   r4   r4   r5   r6   ƒ   s
    r6   ÚsÚbytesÚreturnc                 C  s*   t  ¡ }| | t¡}|jrd}t|ƒ‚|S )Nz=Decompressed data too large for PngImagePlugin.MAX_TEXT_CHUNK)ÚzlibÚdecompressobjÚ
decompressÚMAX_TEXT_CHUNKÚunconsumed_tailÚ
ValueError)r9   ÚdobjÚ	plaintextÚmsgr4   r4   r5   Ú_safe_zlib_decompress‘   s   rE   ÚdataÚseedÚintc                 C  s   t  | |¡d@ S )Nl   ÿÿ )r<   Úcrc32)rF   rG   r4   r4   r5   Ú_crc32š   ó   rJ   c                   @  sr   e Zd Zd&dd„Zd'dd	„Zd(d
d„Zd)dd„Zd*dd„Zd+dd„Zd,dd„Z	d-dd„Z
d-dd„Zd.d/d#d$„Zd%S )0ÚChunkStreamÚfpú	IO[bytes]r;   ÚNonec                 C  s   || _ g | _d S ©N)rM   Úqueue©ÚselfrM   r4   r4   r5   Ú__init__£   ó   
zChunkStream.__init__útuple[bytes, int, int]c                 C  s�   d}| j dus	J ‚| jr| j ¡ \}}}| j  |¡ n| j  d¡}|dd… }| j  ¡ }t|ƒ}t|ƒsCtj	sCdt
|ƒ› d�}t|ƒ‚|||fS )z.Fetch a new chunk. Returns header information.Nr(   r'   zbroken PNG file (chunk ú))rM   rQ   ÚpopÚseekÚreadÚtellÚi32Úis_cidr   ÚLOAD_TRUNCATED_IMAGESÚreprÚSyntaxError)rS   ÚcidÚposÚlengthr9   rD   r4   r4   r5   rZ   §   s   

zChunkStream.readc                 C  s   | S rP   r4   ©rS   r4   r4   r5   Ú	__enter__¼   s   zChunkStream.__enter__ÚargsÚobjectc                 G  s   |   ¡  d S rP   )Úclose)rS   rf   r4   r4   r5   Ú__exit__¿   s   zChunkStream.__exit__c                 C  s   d  | _ | _d S rP   )rQ   rM   rd   r4   r4   r5   rh   Â   rK   zChunkStream.closera   r:   rb   rH   rc   c                 C  s$   | j d usJ ‚| j  |||f¡ d S rP   )rQ   Úappend©rS   ra   rb   rc   r4   r4   r5   ÚpushÅ   s   zChunkStream.pushc                 C  s,   t  d|||¡ t| d| d¡› �ƒ||ƒS )z"Call the appropriate chunk handlerzSTREAM %r %s %sÚchunk_Úascii)ÚloggerÚdebugÚgetattrÚdecoderk   r4   r4   r5   ÚcallÉ   s   zChunkStream.callrF   c              
   C  s®   t jr|d d? d@ r|  ||¡ dS | jdusJ ‚z"t|t|ƒƒ}t| j d¡ƒ}||kr:dt|ƒ› d�}t|ƒ‚W dS  t	j
yV } zdt|ƒ› d�}t|ƒ|‚d}~ww )	zRead and verify checksumr   é   r   Nr'   z(broken PNG file (bad header checksum in rW   z(broken PNG file (incomplete checksum in )r   r^   Úcrc_skiprM   rJ   r\   rZ   r_   r`   ÚstructÚerror)rS   ra   rF   Úcrc1Úcrc2rD   Úer4   r4   r5   ÚcrcÏ   s    þ
€þzChunkStream.crcc                 C  s   | j dusJ ‚| j  d¡ dS )zRead checksumNr'   )rM   rZ   )rS   ra   rF   r4   r4   r5   ru   ä   s   zChunkStream.crc_skipó   IENDÚendchunkúlist[bytes]c              
   C  s€   g }| j d us	J ‚	 z	|  ¡ \}}}W n tjy' } zd}t|ƒ|‚d }~ww ||kr/	 |S |  |t | j |¡¡ | |¡ q
)NTztruncated PNG file)	rM   rZ   rv   rw   ÚOSErrorr{   r   Ú
_safe_readrj   )rS   r}   Úcidsra   rb   rc   rz   rD   r4   r4   r5   Úverifyê   s    
€þý
özChunkStream.verifyN©rM   rN   r;   rO   )r;   rV   )r;   rL   )rf   rg   r;   rO   ©r;   rO   )ra   r:   rb   rH   rc   rH   r;   rO   )ra   r:   rb   rH   rc   rH   r;   r:   )ra   r:   rF   r:   r;   rO   )r|   )r}   r:   r;   r~   )r.   r/   r0   rT   rZ   re   ri   rh   rl   rs   r{   ru   r‚   r4   r4   r4   r5   rL   ¢   s    








rL   c                   @  s4   e Zd ZU dZded< ded< e	ddd
d„ƒZdS )ÚiTXtzq
    Subclass of string to allow iTXt chunks to look like strings while
    keeping their extra information

    zstr | bytes | NoneÚlangÚtkeyNÚtextÚstrú
str | Noner;   c                 C  s   t  | |¡}||_||_|S )zÇ
        :param cls: the class to use when creating the instance
        :param text: value for this key
        :param lang: language code
        :param tkey: UTF-8 version of the key name
        )r‰   Ú__new__r†   r‡   )Úclsrˆ   r†   r‡   rS   r4   r4   r5   r‹   
  s   ziTXt.__new__)NN)rˆ   r‰   r†   rŠ   r‡   rŠ   r;   r…   )r.   r/   r0   Ú__doc__Ú__annotations__Ústaticmethodr‹   r4   r4   r4   r5   r…      s   
 ÿr…   c                   @  sF   e Zd ZdZddd„Zdddd„Z			dddd„Z	dd dd„ZdS )!ÚPngInfoz<
    PNG chunk container (for use with save(pnginfo=))

    r;   rO   c                 C  s
   g | _ d S rP   ©Úchunksrd   r4   r4   r5   rT   !  ó   
zPngInfo.__init__Fra   r:   rF   Ú
after_idatÚboolc                 C  s   | j  |||f¡ dS )a"  Appends an arbitrary chunk. Use with caution.

        :param cid: a byte string, 4 bytes long.
        :param data: a byte string of the encoded data
        :param after_idat: for use with private chunks. Whether the chunk
                           should be written after IDAT

        N)r’   rj   )rS   ra   rF   r”   r4   r4   r5   Úadd$  s   
zPngInfo.addÚ Úkeyústr | bytesÚvaluer†   r‡   Úzipc                 C  s²   t |tƒs| dd¡}t |tƒs| dd¡}t |tƒs!| dd¡}t |tƒs,| dd¡}|rE|  d|d | d | d t |¡ ¡ dS |  d|d | d | d | ¡ dS )	zùAppends an iTXt chunk.

        :param key: latin-1 encodable text key name
        :param value: value for this key
        :param lang: language code
        :param tkey: UTF-8 version of the key name
        :param zip: compression flag

        úlatin-1Ústrictúutf-8ó   iTXts     ó    s      N)Ú
isinstancer:   Úencoder–   r<   Úcompress)rS   r˜   rš   r†   r‡   r›   r4   r4   r5   Úadd_itxt0  s   



 þ(zPngInfo.add_itxtústr | bytes | iTXtc                 C  sÒ   t |tƒr"| j|||jdur|jnd|jdur|j|d�S d|d�S t |tƒsAz| dd¡}W n ty@   | j|||d� Y S w t |tƒsL| dd¡}|r]|  d|d t	 
|¡ ¡ dS |  d|d	 | ¡ dS )
zæAppends a text chunk.

        :param key: latin-1 encodable text key name
        :param value: value for this key, text or an
           :py:class:`PIL.PngImagePlugin.iTXt` instance
        :param zip: compression flag

        Nó    )r›   rœ   r�   ó   zTXtó     ó   tEXtr    )r¡   r…   r¤   r†   r‡   r:   r¢   ÚUnicodeErrorr–   r<   r£   )rS   r˜   rš   r›   r4   r4   r5   Úadd_textS  s,   
ûû
	ÿ
zPngInfo.add_textNr„   ©F)ra   r:   rF   r:   r”   r•   r;   rO   )r—   r—   F)r˜   r™   rš   r™   r†   r™   r‡   r™   r›   r•   r;   rO   )r˜   r™   rš   r¥   r›   r•   r;   rO   )r.   r/   r0   r�   rT   r–   r¤   r«   r4   r4   r4   r5   r�     s    
ú$ÿr�   c                   @  ó&   e Zd ZU ded< ded< ded< dS )Ú_RewindStatez dict[str | tuple[int, int], Any]Úinfozlist[ImageFile._Tile]Útilez
int | NoneÚseq_numN©r.   r/   r0   rŽ   r4   r4   r4   r5   r®   {  ó   
 r®   c                      sæ   e Zd Zd5‡ fdd„Zd6d	d
„Zd7dd„Zd7dd„Zd8dd„Zd8dd„Zd9dd„Z	d9dd„Z
d8dd„Zd8dd„Zd8dd „Zd8d!d"„Zd8d#d$„Zd8d%d&„Zd8d'd(„Zd8d)d*„Zd8d+d,„Zd8d-d.„Zd8d/d0„Zd8d1d2„Zd8d3d4„Z‡  ZS ):Ú	PngStreamrM   rN   r;   rO   c                   sZ   t ƒ  |¡ i | _i | _d| _d| _g | _d | _d | _d | _	d | _
ti g d ƒ| _d| _d S )N©r   r   r—   r   )ÚsuperrT   Úim_infoÚim_textÚim_sizeÚim_modeÚim_tileÚ
im_paletteÚim_custom_mimetypeÚim_n_framesÚ_seq_numr®   Úrewind_stateÚtext_memoryrR   ©Ú	__class__r4   r5   rT   ‚  s   
zPngStream.__init__ÚchunklenrH   c                 C  s2   |  j |7  _ | j tkrd| j › d�}t|ƒ‚d S )Nz%Too much memory used in text chunks: z>MAX_TEXT_MEMORY)rÁ   ÚMAX_TEXT_MEMORYrA   )rS   rÄ   rD   r4   r4   r5   Úcheck_text_memory“  s   
ÿÿûzPngStream.check_text_memoryc                 C  s   t | j ¡ | j| jƒ| _d S rP   )r®   r·   Úcopyr»   r¿   rÀ   rd   r4   r4   r5   Úsave_rewindœ  s
   
ýzPngStream.save_rewindc                 C  s&   | j j ¡ | _| j j| _| j j| _d S rP   )rÀ   r¯   rÇ   r·   r°   r»   r±   r¿   rd   r4   r4   r5   Úrewind£  s   
zPngStream.rewindrb   rc   r:   c                 C  sÌ   | j d usJ ‚t | j |¡}| d¡}t d|d |… ¡ ||d  }t d|¡ |dkr7d|› d�}t|ƒ‚zt||d d … ƒ}W n tyS   tj	rPd }n‚ Y n t
jy^   d }Y nw || jd	< |S )
Nr    ziCCP profile name %rr   zCompression method %sr   úUnknown compression method z in iCCP chunkr&   Úicc_profile)rM   r   r€   Úfindro   rp   r`   rE   rA   r^   r<   rw   r·   )rS   rb   rc   r9   ÚiÚcomp_methodrD   rË   r4   r4   r5   Ú
chunk_iCCP¨  s*   
þÿ
zPngStream.chunk_iCCPc                 C  s®   | j d usJ ‚t | j |¡}|dk rtjr|S d}t|ƒ‚t|dƒt|dƒf| _zt|d |d f \| _| _	W n	 t
yA   Y nw |d rKd| jd	< |d
 rUd}t|ƒ‚|S )Né   zTruncated IHDR chunkr   r'   r(   é	   é   r   Ú	interlaceé   zunknown filter category)rM   r   r€   r^   rA   r\   r¹   Ú_MODESrº   Ú
im_rawmodeÚ	Exceptionr·   r`   ©rS   rb   rc   r9   rD   r4   r4   r5   Ú
chunk_IHDRÄ  s&    ÿ
zPngStream.chunk_IHDRr   c                 C  sl   d| j v rt d| j d || j¡g}n| jd urd| j d< t dd| j || j¡g}|| _|| _d}t|ƒ‚)NÚbboxr›   TÚdefault_imagerµ   zimage data found)	r·   r   Ú_TilerÖ   r¾   r¹   r»   Úim_idatÚEOFError)rS   rb   rc   r°   rD   r4   r4   r5   Ú
chunk_IDATÙ  s   


zPngStream.chunk_IDATc                 C  s   d}t |ƒ‚)Nzend of PNG image)rÞ   )rS   rb   rc   rD   r4   r4   r5   Ú
chunk_IENDæ  s   zPngStream.chunk_IENDc                 C  s4   | j d usJ ‚t | j |¡}| jdkrd|f| _|S )Nr    r   )rM   r   r€   rº   r¼   ©rS   rb   rc   r9   r4   r4   r5   Ú
chunk_PLTEê  s
   

zPngStream.chunk_PLTEc                 C  sÌ   | j d usJ ‚t | j |¡}| jdkr/t |¡r(| d¡}|dkr&|| jd< |S || jd< |S | jdkrAt|ƒr:dnd| jd< |S | jdv rOt|ƒ| jd< |S | jdkrdt|ƒt|d	ƒt|d
ƒf| jd< |S )Nr    r    r   Útransparencyr   éÿ   )r   r   r   r&   r'   )	rM   r   r€   rº   Ú_simple_paletteÚmatchrÌ   r·   Úi16)rS   rb   rc   r9   rÍ   r4   r4   r5   Ú
chunk_tRNSò  s&   




ù
ú
ü
þ zPngStream.chunk_tRNSc                 C  s2   | j d usJ ‚t | j |¡}t|ƒd | jd< |S )Nç     jø@Úgamma)rM   r   r€   r\   r·   rá   r4   r4   r5   Ú
chunk_gAMA	  s   zPngStream.chunk_gAMAc                 C  sT   | j d usJ ‚t | j |¡}t dt|ƒd › d�|¡}tdd„ |D ƒƒ| jd< |S )Nú>r'   ÚIc                 s  s   � | ]}|d  V  qdS )ré   Nr4   )Ú.0Úeltr4   r4   r5   Ú	<genexpr>  ó   € z'PngStream.chunk_cHRM.<locals>.<genexpr>Úchromaticity)rM   r   r€   rv   ÚunpackÚlenÚtupler·   )rS   rb   rc   r9   Úraw_valsr4   r4   r5   Ú
chunk_cHRM  s
   zPngStream.chunk_cHRMc                 C  sL   | j d usJ ‚t | j |¡}|dk rtjr|S d}t|ƒ‚|d | jd< |S )Nr   zTruncated sRGB chunkr   Úsrgb)rM   r   r€   r^   rA   r·   rØ   r4   r4   r5   Ú
chunk_sRGB  s   zPngStream.chunk_sRGBc           	      C  s˜   | j d usJ ‚t | j |¡}|dk rtjr|S d}t|ƒ‚t|dƒt|dƒ}}|d }|dkr?|d |d f}|| jd< |S |dkrJ||f| jd	< |S )
NrÑ   zTruncated pHYs chunkr   r'   r(   r   ç¦
F%uš?ÚdpiÚaspect)rM   r   r€   r^   rA   r\   r·   )	rS   rb   rc   r9   rD   ÚpxÚpyÚunitrû   r4   r4   r5   Ú
chunk_pHYs+  s    
þzPngStream.chunk_pHYsc                 C  sš   | j d usJ ‚t | j |¡}z
| dd¡\}}W n ty%   |}d}Y nw |rK| dd¡}| dd¡}|dkr:|n|| j|< || j|< |  t	|ƒ¡ |S )Nr    r   r¦   rœ   r�   Úreplaces   exif)
rM   r   r€   ÚsplitrA   rr   r·   r¸   rÆ   rô   )rS   rb   rc   r9   ÚkÚvÚk_strÚv_strr4   r4   r5   Ú
chunk_tEXt=  s   ý
zPngStream.chunk_tEXtc           
      C  s  | j d usJ ‚t | j |¡}z
| dd¡\}}W n ty%   |}d}Y nw |r-|d }nd}|dkr=d|› d�}t|ƒ‚z
t|dd … ƒ}W n tyW   tjrTd}n‚ Y n tj	yb   d}Y nw |r‚| 
dd¡}| 
dd	¡}	|	 | j|< | j|< |  t|	ƒ¡ |S )
Nr    r   r¦   r   rÊ   z in zTXt chunkrœ   r�   r  )rM   r   r€   r  rA   r`   rE   r^   r<   rw   rr   r·   r¸   rÆ   rô   )
rS   rb   rc   r9   r  r  rÎ   rD   r  r  r4   r4   r5   Ú
chunk_zTXtQ  s<   þ
þÿzPngStream.chunk_zTXtc                 C  sŒ  | j d usJ ‚t | j |¡ }}z
| dd¡\}}W n ty%   | Y S w t|ƒdk r.|S |d |d |dd … }}}z| dd¡\}}	}
W n tyT   | Y S w |dkr€|dkr~zt|
ƒ}
W n tyr   tjrq| Y S ‚  tj	y}   | Y S w |S |dkr‰|
| j
d< z| dd¡}| d	d¡}|	 d	d¡}|
 d	d¡}W n ty®   | Y S w t|||ƒ | j
|< | j|< |  t|ƒ¡ |S )
Nr    r   r&   r   s   XML:com.adobe.xmpÚxmprœ   r�   rž   )rM   r   r€   r  rA   rô   rE   r^   r<   rw   r·   rr   rª   r…   r¸   rÆ   )rS   rb   rc   Úrr9   r  ÚcfÚcmr†   Útkr  r  Úlang_strÚtk_strr  r4   r4   r5   Ú
chunk_iTXtt  sP   ÿ ÿÿ
ÿzPngStream.chunk_iTXtc                 C  s.   | j d usJ ‚t | j |¡}d| | jd< |S )Nó   Exif  Úexif)rM   r   r€   r·   rá   r4   r4   r5   Ú
chunk_eXIfŸ  s   zPngStream.chunk_eXIfc                 C  sž   | j d usJ ‚t | j |¡}|dk rtjr|S d}t|ƒ‚| jd ur,d | _t d¡ |S t|ƒ}|dks8|dkr?t d¡ |S || _t|dƒ| j	d< d| _
|S )	Nr(   z"APNG contains truncated acTL chunkz4Invalid APNG, will use default PNG image if possibler   l        r'   Úloopz
image/apng)rM   r   r€   r^   rA   r¾   ÚwarningsÚwarnr\   r·   r½   )rS   rb   rc   r9   rD   Ún_framesr4   r4   r5   Ú
chunk_acTL¦  s&   


zPngStream.chunk_acTLc                 C  sN  | j d usJ ‚t | j |¡}|dk rtjr|S d}t|ƒ‚t|ƒ}| jd u r*|dks6| jd ur<| j|d kr<d}t|ƒ‚|| _t|dƒt|dƒ}}t|dƒt|d	ƒ}}	| j\}
}|| |
ksf|	| |krld
}t|ƒ‚||	|| |	| f| j	d< t
|dƒt
|dƒ}}|dkrŠd}t|ƒt|ƒ d | j	d< |d | j	d< |d | j	d< |S )Né   z"APNG contains truncated fcTL chunkr   r   ú#APNG contains frame sequence errorsr'   r(   rÒ   r)   zAPNG contains invalid framesrÚ   é   é   éd   éè  Údurationé   Údisposalé   Úblend)rM   r   r€   r^   rA   r\   r¿   r`   r¹   r·   rç   Úfloat)rS   rb   rc   r9   rD   ÚseqÚwidthÚheightrý   rþ   Úim_wÚim_hÚ	delay_numÚ	delay_denr4   r4   r5   Ú
chunk_fcTL»  s6   
zPngStream.chunk_fcTLc                 C  s„   | j d usJ ‚|dk rtjrt | j |¡}|S d}t|ƒ‚t | j d¡}t|ƒ}| j|d kr5d}t|ƒ‚|| _|  |d |d ¡S )Nr'   z"APNG contains truncated fDAT chunkr   r  )	rM   r   r^   r€   rA   r\   r¿   r`   rß   )rS   rb   rc   r9   rD   r%  r4   r4   r5   Ú
chunk_fdATÙ  s   zPngStream.chunk_fdATrƒ   )rÄ   rH   r;   rO   r„   )rb   rH   rc   rH   r;   r:   )rb   rH   rc   rH   r;   r   )r.   r/   r0   rT   rÆ   rÈ   rÉ   rÏ   rÙ   rß   rà   râ   rè   rë   r÷   rù   r   r  r  r  r  r  r,  r-  Ú__classcell__r4   r4   rÂ   r5   r´   �  s,    

	














#
+

r´   Úprefixr•   c                 C  s
   |   t¡S rP   )Ú
startswithÚ_MAGIC)r/  r4   r4   r5   Ú_acceptî  r“   r2  c                      s”   e Zd ZdZdZd%dd„Zed&dd	„ƒZd%‡ fd
d„Zd'dd„Z	d(d)dd„Z
d*dd„Zd%dd„Zd+dd„Zd%dd„Zd,d d!„Zd-‡ fd#d$„Z‡  ZS ).ÚPngImageFileÚPNGzPortable network graphicsr;   rO   c              	   C  sÒ  | j d usJ ‚t| j  d¡ƒsd}t|ƒ‚| j | _d| _g | _t| j ƒ| _	 | j ¡ \}}}z
| j 	|||¡}W n0 t
yA   Y n0 tyh   t d|||¡ t | j |¡}|dd…  ¡ rf| j ||f¡ Y nw | j ||¡ q&| jj| _| jj| _| jj| _d | _| jj| _| jj| _| jjp’d| _| j  dd	¡| _!| jj"r­| jj"\}}t# $||¡| _%|d
kr·|d | _&n|| _&| jjd urád	| _'| j (¡  | j&| _)| j *¡ | _+| j!rÜ|  jd7  _|  ,d¡ | jdk| _-d S )Nr(   znot a PNG filer   Tú%r %s %s (unknown)r   r&   rÛ   Fó   fdATr'   ).rM   r2  rZ   r`   Ú_fpÚ_PngImageFile__frameÚprivate_chunksr´   Úpngrs   rÞ   ÚAttributeErrorro   rp   r   r€   Úislowerrj   r{   rº   Ú_moder¹   Ú_sizer·   r¯   Ú_textr»   r°   r½   Úcustom_mimetyper¾   r  ÚgetrÛ   r¼   r   ÚrawÚpaletteÚ_PngImageFile__prepare_idatÚ!_close_exclusive_fp_after_loadingrÈ   Ú_PngImageFile__rewind_idatr[   Ú_PngImageFile__rewindÚ_seekÚis_animated)rS   rD   ra   rb   rc   r9   ÚrawmoderF   r4   r4   r5   Ú_openú  s\   €üð






zPngImageFile._openúdict[str, str | iTXt]c                 C  sR   | j d u r| jr| j}|  | jd ¡ |  ¡  | jr|  |¡ | j d us&J ‚| j S )Nr   )r?  rI  r8  rY   r  Úload)rS   Úframer4   r4   r5   rˆ   >  s   

zPngImageFile.textc                   s`   | j du rd}t|ƒ‚| j  | jd d d ¡ | jdusJ ‚| j ¡  | j ¡  tƒ  ¡  dS )zVerify PNG fileNz)verify must be called directly after openr   r&   r(   )rM   ÚRuntimeErrorrY   r°   r:  r‚   rh   r¶   )rS   rD   rÂ   r4   r5   r‚   N  s   


zPngImageFile.verifyrN  rH   c              
   C  s†   |   |¡sd S || jk r|  dd¡ | j}zt| jd |d ƒD ]}|  |¡ q W d S  tyB } z|  |¡ d}t|ƒ|‚d }~ww )Nr   Tr   zno more images in APNG file)Ú_seek_checkr8  rH  ÚrangerÞ   rY   )rS   rN  Ú
last_frameÚfrz   rD   r4   r4   r5   rY   ^  s   

ÿ

€ýzPngImageFile.seekFrÉ   r•   c           	   	   C  s4  | j d usJ ‚t| jtƒr| jj‚|  d }|dkrb|r<| j | j¡ | j  ¡  | j| _	d | _
| j j| _| j j| _| j| _d | _d | _| j dd¡| _| j d¡| _| j d¡| _| j d¡}d| _nâ|| jd krrd|› �}t|ƒ‚|  ¡  | jr‚| j | j| j¡ | j ¡ | _| j| _| j	ršt | j| j	¡ d| _	d}	 | j d
¡ z
| j  ¡ \}}}W n t j!t"fy¹   Y new |dkrÄd}t#|ƒ‚|dkrÒ|rÐd}t"|ƒ‚d	}z
| j  $|||¡ W n@ t%yå   Y n9 t#�y   |dkrû|d
8 }|rû|| _	Y n#t | j|¡ Y n t&�y   t' (d|||¡ t | j|¡ Y nw q�|| _| j j| _| j d¡| _| j d¡| _| j d¡}| j�sDd}t#|ƒ‚|�rJ|| _| jd u �r[| jt)j*k�r[t)j+| _d | _| jt)j*k�r|| j�rz| j ¡ | _|  ,| j| j¡| _d S d S | jt)j+k�r˜t-j. /| j0| j1¡| _|  ,| j| j¡| _d S d S )Nr   rÛ   Fr!  r#  rÚ   r   zcannot seek to frame Tr'   r|   zNo more images in APNG fileó   fcTLzAPNG missing frame datar6  r5  zimage not found in APNG frame)2r:  r¡   r7  r   ÚexrY   rG  rÉ   rF  rD  Ú_imr·   r¯   r»   r°   rM   Ú_prev_imÚdisposerA  rÛ   Ú
dispose_opÚblend_opr8  rA   rM  ÚimÚpasteÚdispose_extentrÇ   r   r€   rZ   rv   rw   r`   rÞ   rs   ÚUnicodeDecodeErrorr;  ro   rp   r-   r3   r2   Ú_cropr	   ÚcoreÚfillÚmodeÚsize)	rS   rN  rÉ   r]  rD   Úframe_startra   rb   rc   r4   r4   r5   rH  m  s¬   



ÿþã!
þþzPngImageFile._seekc                 C  s   | j S rP   )r8  rd   r4   r4   r5   r[   Ñ  s   zPngImageFile.tellc                 C  s0   | j  d¡r| jd | _| j| _tj | ¡ dS )z"internal: prepare to read PNG filerÓ   )r   N)r¯   rA  ÚdecoderconfigrD  Ú_PngImageFile__idatr   Úload_preparerd   r4   r4   r5   rg  Ô  s   zPngImageFile.load_prepareÚ
read_bytesr:   c                 C  sÞ   | j dusJ ‚| jdusJ ‚| jdkrU| j d¡ | j  ¡ \}}}|dvr/| j  |||¡ dS |dkrMz
| j  |||¡ W n	 tyF   Y nw |d | _n|| _| jdks|dkr]| j}nt|| jƒ}| j| | _| j |¡S )zinternal: read more image dataNr   r'   )ó   IDATs   DDATr6  r¦   r6  )r:  rM   rf  rZ   rl   rs   rÞ   Úmin)rS   rh  ra   rb   rc   r4   r4   r5   Ú	load_readÝ  s,   
ÿ
îzPngImageFile.load_readc           	      C  st  | j dusJ ‚| jdusJ ‚| jdkr| j | j¡ 	 | j d¡ z
| j  ¡ \}}}W n tjtfy7   Y nˆw |dkr=n‚|dkrP| jrPd| _| j  	|||¡ noz
| j  
|||¡ W nc tyc   Y n\ ty•   |dkrq|d8 }z	t | j|¡ W n ty’ } ztjrŒW Y d}~Y n3|‚d}~ww Y n) ty½   t d|||¡ t | j|¡}|d	d
…  ¡ r»| j ||df¡ Y nw q| j j| _| jsÑ| j  ¡  d| _ dS | j�r6| jtjk�r8|  | j| j ¡}| jj!dkrùd| j"v rù| #d| j"d ¡}n.| jj!dk�r"d| j"v �r"| j"d }t$|t%ƒ�r| &|¡ nt$|t'ƒ�r"| (|¡ | )d¡}| j *|| j |¡ | j| _dS dS dS )z%internal: finished reading image dataNr   Tr'   r|   rT  r6  r5  r   r&   r   rã   r%   r    )+r:  rM   rf  rZ   rv   rw   r`   rI  rD  rl   rs   r^  rÞ   r   r€   r   r^   r;  ro   rp   r<  r9  rj   r¸   r?  rh   rW  rZ  r6   r8   r_  r[  r]  rb  r¯   Úconvert_transparentr¡   r:   ÚputpalettealphasrH   ÚputpalettealphaÚconvertr\  )	rS   ra   rb   rc   rz   r9   ÚupdatedÚmaskÚtr4   r4   r5   Úload_end   sz   
ÿ€üÿ€üâ
#


ÿ


ñzPngImageFile.load_endúdict[int, Any] | Nonec                 C  s6   d| j vr	|  ¡  d| j vrd| j vrd S |  ¡  ¡ S )Nr  zRaw profile type exif)r¯   rM  ÚgetexifÚ_get_merged_dictrd   r4   r4   r5   Ú_getexif?  s
   
zPngImageFile._getexifú
Image.Exifc                   s   d| j vr	|  ¡  tƒ  ¡ S )Nr  )r¯   rM  r¶   ru  rd   rÂ   r4   r5   ru  F  s   

zPngImageFile.getexifr„   )r;   rL  )rN  rH   r;   rO   r¬   )rN  rH   rÉ   r•   r;   rO   )r;   rH   )rh  rH   r;   r:   )r;   rt  )r;   rx  )r.   r/   r0   ÚformatÚformat_descriptionrK  Úpropertyrˆ   r‚   rY   rH  r[   rg  rk  rs  rw  ru  r.  r4   r4   rÂ   r5   r3  ö  s    
D

d

	
#
?r3  )r   ó   r    )úL;1r|  r    )r   ó   r    )r   ó   r    )r   ó   r    )r$   r€  r  )r   ó   r    )r!   r|  ó   )r"   r~  r‚  )r#   r  r‚  )r    r€  r‚  )r   r€  r~  )r%   r€  ó   )r   r}  r   r   r   r$   rí   r   r   r!   r"   r#   r    r   r%   rM   rN   ra   rO   c                 G  sJ   d  |¡}|  tt|ƒƒ| ¡ |  |¡ t|t|ƒƒ}|  t|ƒ¡ dS )z'Write a PNG chunk (including CRC field)r¦   N)ÚjoinÚwriteÚo32rô   rJ   ©rM   ra   rF   Ú	byte_datar{   r4   r4   r5   Úputchunkd  s
   

r‰  c                   @  s    e Zd Zddd„Zddd„ZdS )Ú_idatrM   rN   ÚchunkúCallable[..., None]r;   rO   c                 C  s   || _ || _d S rP   )rM   r‹  )rS   rM   r‹  r4   r4   r5   rT   r  rU   z_idat.__init__rF   r:   c                 C  s   |   | jd|¡ d S )Nri  )r‹  rM   ©rS   rF   r4   r4   r5   r…  v  ó   z_idat.writeN)rM   rN   r‹  rŒ  r;   rO   ©rF   r:   r;   rO   ©r.   r/   r0   rT   r…  r4   r4   r4   r5   rŠ  o  s    
rŠ  c                   @  s    e Zd Zdd	d
„Zddd„ZdS )Ú_fdatrM   rN   r‹  rŒ  r±   rH   r;   rO   c                 C  s   || _ || _|| _d S rP   )rM   r‹  r±   )rS   rM   r‹  r±   r4   r4   r5   rT   }  s   
z_fdat.__init__rF   r:   c                 C  s*   |   | jdt| jƒ|¡ |  jd7  _d S )Nr6  r   )r‹  rM   r†  r±   r�  r4   r4   r5   r…  ‚  s   z_fdat.writeN)rM   rN   r‹  rŒ  r±   rH   r;   rO   r�  r�  r4   r4   r4   r5   r‘  z  s    
r‘  r[  úImage.ImageÚencoderinfoúdict[str, Any]c                 C  s2   |  dd¡|  dd¡|  dd¡|  dd¡f| _d S )NÚoptimizeFÚcompress_leveléÿÿÿÿÚcompress_typeÚ
dictionaryr¦   )rA  Úencoderconfig)r[  r“  r4   r4   r5   Ú_apply_encoderinfo‡  s
   




ür›  c                   @  r­   )Ú_Framer’  r[  z tuple[int, int, int, int] | NonerÚ   r”  r“  Nr²   r4   r4   r4   r5   rœ  �  r³   rœ  r‹  rŒ  rb  r‰   rJ  rÛ   úImage.Image | NoneÚappend_imagesúlist[Image.Image]c           #      C  s�  | j  d¡}| j  d| j dd¡¡}| j  d| j dtj¡¡}	| j  d| j dtj¡¡}
|r4t |¡}nt | g|¡}g }d}|D ]õ}t	 
|¡D ]í}|j|krT| ¡ }n| |¡}| j  ¡ }t|ttfƒrl|| |d< n|d u r|d|jv r||jd |d< t|	ttfƒr‰|	| |d< t|
ttfƒr–|
| |d< |d7 }|�r*|d }|j  d¡}|j  d¡}|tjkr»t|ƒdk r»tj}|tjkrå|j ¡ }tj d	| jd
¡}|j}|rÙ| |¡}nd| j }| ||¡ n|tjkrð|d j}n|j}t | d	¡| d	¡¡}|jdd�}|�s)|| d¡k�r)|| d¡k�r)d|v �r)|j d  |d 7  < qHnd }| t |||ƒ¡ qHqAt|ƒdk�rF|�sF|d jS ||dt!t|ƒƒt!|ƒƒ |�r‚| j|k�r^| n|  |¡}t"|| j ƒ t# $|t%t&t' t(||ƒƒt# )dd| j d|¡g¡ d}t*|ƒD ]½\}}|j}|j�s™d|j }n|j}| |¡}|j}|j }| dd¡}t+|d ƒ ,d¡}|j-dk�rÂd}t.|ƒ‚| d|	¡} | d|
¡}!||dt!|ƒt!|d ƒt!|d ƒt!|d ƒt!|d ƒt/|j-ƒt/|j0ƒt1| ƒt1|!ƒƒ |d7 }t"|| j ƒ |dk�r%|�s%t# $|t%t&t' t(||ƒƒt# )dd|j d|¡g¡ �qˆt2|||ƒ}"t# $|t%t&t' |"ƒt# )dd|j d|¡g¡ |"j3}�qˆd S )Nr  r  r   r!  r#  r   r—  r&   r%   )r   r   r   r   rµ   éþÿÿÿF)Ú
alpha_onlys   acTLr›   r  éÿÿ  zcannot write durationrT  )4r“  rA  r¯   r-   r1   r6   r7   Ú	itertoolsÚchainr   ÚIteratorrb  rÇ   ro  r¡   Úlistrõ   r3   rô   r2   r[  r	   r`  ra  rc  rÚ   Úcropr\  r
   Úsubtract_moduloÚgetbboxrj   rœ  r†  r›  r   Ú_saver   r   r:   rŠ  rÜ   Ú	enumerater   Úlimit_denominatorÚ	numeratorrA   Úo16Údenominatorr   r‘  r±   )#r[  rM   r‹  rb  rJ  rÛ   rž  r  r  r!  r#  r¤  Ú	im_framesÚframe_countÚim_seqÚim_framer“  ÚpreviousÚprev_disposalÚ
prev_blendÚbase_imrX  rÚ   ÚdeltaÚ
default_imr±   rN  Ú
frame_datarc  Úframe_durationÚdelayrD   Úframe_disposalÚframe_blendÚfdat_chunksr4   r4   r5   Ú_write_multiple_frames–  sê   	







ÿÿ
€Î4

üý




õýý
rÀ  Úfilenamer™   c                 C  s   t | ||dd� d S )NT)Úsave_all)rª  )r[  rM   rÁ  r4   r4   r5   Ú	_save_all)  rŽ  rÃ  rÂ  c           )   
     sJ  |rU| j  d| j d¡¡}tƒ }tƒ ‰ | j  dg ¡}t | g|¡D ]}t |¡D ]}	| |	j	¡ ˆ  |	j
¡ q(q!dD ]}
|
|v rB nq:| ¡ }
t‡ fdd„tdƒD ƒƒ}n| j
}| j	}
|
}g }| jrh|  ¡ pgg }|
dkr©d| j v r|td	| j d > d
ƒ}n| jrŒttt|ƒd d
ƒd	ƒ}nd
}|dkr©|dkr™d	}n	|dkr d}nd}|d|› �7 }z	t| \}}}W n tyÉ } zd|
› d�}t|ƒ|‚d }~ww |dkrÕtdddd� | t¡ ||dt|d ƒt|d	 ƒ||dddƒ	 g d¢}| j  d| j d¡¡ }�rd}|d t |¡ }||d|ƒ | d¡ | j  d¡ }�rng d¢}|jD ]G}|d d… \}}||v �rB| |¡ ||||ƒ �q&||v �rO||||ƒ �q&|d	d…  ¡ �rlt|ƒdk�ob|d }|�sl||||ƒ �q&| j	dk�r˜|d }t|d |… ƒ}t|ƒ|k �r’|d7 }t|ƒ|k �s‡||d |ƒ | j  d!| j d!d ¡¡} | �s¬| dk�r| j	dk�rÞ|}!t | tƒ�rÅ||d"| d |!… ƒ nztdtd#| ƒƒ} d$|  d }"||d"|"d |!… ƒ na| j	d%v �rõtdtd&| ƒƒ} ||d"t!| ƒƒ nJ| j	d'k�r| \}#}$}%||d"t!|#ƒt!|$ƒ t!|%ƒ ƒ n.d!| j v �rd(}t|ƒ‚n!| j	dk�r?| j" #¡ d)k�r?| j" d)d*¡}"|}!||d"|"d |!… ƒ | j  d+¡ }&�rd||d,tt$|&d d- d. ƒƒtt$|&d	 d- d. ƒƒd/ƒ |�rŠd0d1g}|jD ]}|d d… \}}||v �rˆ| |¡ ||||ƒ �qn| j  d2¡ }'�r±t |'t%j&ƒ�rŸ|' 'd3¡}'|' (d4¡�r«|'d5d … }'||d6|'ƒ | }(|�rÀt)| |||
|||ƒ}(|(�rât*|(| j ƒ t+ ,|(t-t.t t/||ƒƒt+ 0d7d8|(j
 d|¡g¡ |�r|jD ](}|d d… \}}|d	d…  ¡ �rt|ƒdk�o|d }|�r||||ƒ �qè||d9d:ƒ t1|d;ƒ�r#| 2¡  d S d S )<NrÛ   rž  )r%   r   r    c                 3  s&   � | ]‰ t ‡ fd d„ˆD ƒƒV  qdS )c                 3  s   � | ]}|ˆ  V  qd S rP   r4   )rî   Ú
frame_size©rÍ   r4   r5   rð   F  rñ   z"_save.<locals>.<genexpr>.<genexpr>N)Úmax)rî   ©ÚsizesrÅ  r5   rð   F  s   €$ z_save.<locals>.<genexpr>r&   r    Úbitsr   é   r*   r)   r'   ú;zcannot write mode z as PNGrí   zSaving I mode images as PNGrÐ   )Ú
stacklevels   IHDRr   r    )s   cHRMs   cICPs   gAMAs   sBITó   sRGBs   tIMErË   s   ICC Profiler¨   s   iCCPrÍ  Úpnginfo)s   sPLTrŸ   r©   r§   s   PLTErã   s   tRNSrä   ó   ÿ)r   r   rí   r   r¢  r   z%cannot use transparency for this moder%   ÚArû   s   pHYsrú   g      à?r|  s   bKGDs   hISTr  r(   r  r+   s   eXIfr›   rµ   r|   r¦   Úflush)3r“  rA  r¯   Úsetr£  r¤  r   r¥  r–   rb  rc  rX   rõ   rQ  rC  Ú
getpaletterj  rÆ  rô   Ú	_OUTMODESÚKeyErrorr   r   r…  r1  r†  r<   r£   Úremover’   r<  r:   r¡   r®  r[  ÚgetpalettemoderH   r	   ÚExifÚtobytesr0  rÀ  r›  r   rª  r   r   rŠ  rÜ   ÚhasattrrÑ  ))r[  rM   rÁ  r‹  rÂ  rÛ   Úmodesrž  r²  r³  rb  rc  ÚoutmoderC  ÚcolorsrÉ  rJ  Ú	bit_depthÚ
color_typerz   rD   r’   ÚiccÚnamerF   r¯   Úchunks_multiple_allowedÚ
info_chunkra   r”   Úpalette_byte_numberÚpalette_bytesrã   Úalpha_bytesÚalphaÚredÚgreenÚbluerû   r  Ú	single_imr4   rÇ  r5   rª  -  s4  	ÿþÿ

€þ


÷




€ÿ
"üû


€
ÿý
€ÿrª  Úparamsr   ú list[tuple[bytes, bytes, bytes]]c                   sJ   ddl m} g ‰ d‡ fd
d„}|ƒ }z|| _t| |d|ƒ W | `ˆ S | `w )z4Return a list of PNG chunks representing this image.r   )ÚBytesIOrM   rN   ra   r:   rF   r;   rO   c                   s0   d  |¡}tt|t|ƒƒƒ}ˆ  |||f¡ d S )Nr¦   )r„  r†  rJ   rj   r‡  r‘   r4   r5   rj     s   
zgetchunks.<locals>.appendr—   N©rM   rN   ra   r:   rF   r:   r;   rO   )Úiorî  r“  rª  )r[  rì  rî  rj   rM   r4   r‘   r5   Ú	getchunksü  s   þrñ  z.pngz.apngz	image/png)r9   r:   r;   r:   )r   )rF   r:   rG   rH   r;   rH   )r/  r:   r;   r•   rï  )r[  r’  r“  r”  r;   rO   )r[  r’  rM   rN   r‹  rŒ  rb  r‰   rJ  r‰   rÛ   r�  rž  rŸ  r;   r�  )r[  r’  rM   rN   rÁ  r™   r;   rO   )r[  r’  rM   rN   rÁ  r™   r‹  rŒ  rÂ  r•   r;   rO   )r[  r’  rì  r   r;   rí  )RÚ
__future__r   r£  ÚloggingÚrerv   r  r<   Úenumr   Ú	fractionsr   Útypingr   r   r   r—   r	   r
   r   r   r   Ú_binaryr   rç   r   r\   r   r   r®  r   r†  Ú
_deprecater   Ú_utilr   ÚTYPE_CHECKINGÚcollections.abcr   r   r   r   Ú	getLoggerr.   ro   Úcompileræ   r]   r1  rÕ   rå   Ú	SAFEBLOCKr?   rÅ   r-   r6   rE   rJ   rL   r‰   r…   r�   r®   r´   r2  r3  rÔ  r‰  rŠ  r‘  r›  rœ  rÀ  rÃ  rª  rñ  Úregister_openry  Úregister_saveÚregister_save_allÚregister_extensionsÚregister_mimer4   r4   r4   r5   Ú<module>   sÀ    
ë

	^`  
o  ^ð

	
 
û 
P