
    Rf                       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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  ej        e          Z ej        d          j        ZdZ ddddddddddddddddZ! ej        d          Z"ej#        Z$	 de$z  Z%	  G d d e	          Z& G d! d"e	          Z'd# Z(dKd$Z) G d% d&          Z* G d' d(e+          Z, G d) d*          Z- G d+ d,e*          Z.d- Z/ G d. d/ej                  Z0d0d1d2d3d4d5d6d6d6d7d8d9d:d;d<d=Z1d> Z2 G d? d@          Z3 G dA dB          Z4dC Z5dD Z6e2dEfdFZ7dG Z8 ej9        e0j:        e0e/            ej;        e0j:        e7            ej<        e0j:        e6            ej=        e0j:        dHdIg            ej>        e0j:        dJ           dS )L    )annotationsN)IntEnum   )Image
ImageChops	ImageFileImagePaletteImageSequence)i16be)i32be)o8)o16be)o32bes   \w\w\w\ws   PNG

)1r   )LL;2)r   L;4)r   r   )I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                      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     D/var/www/html/env/lib/python3.11/site-packages/PIL/PngImagePlugin.pyr%   r%   c   s1        G M
 K r-   r%   c                      e Zd ZdZ	 dZdS )Blendr   r   N)r&   r'   r(   	OP_SOURCEOP_OVERr,   r-   r.   r0   r0   x   s%        I
 G r-   r0   c                    t          j                    }|                    | t                    }|j        rd}t          |          |S )NzDecompressed Data Too Large)zlibdecompressobj
decompressMAX_TEXT_CHUNKunconsumed_tail
ValueError)sdobj	plaintextmsgs       r.   _safe_zlib_decompressr>      sE    D>22I +oor-   c                2    t          j        | |          dz  S )Nl    )r4   crc32)dataseeds     r.   _crc32rC      s    :dD!!J..r-   c                  L    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 ZddZdS )ChunkStreamc                "    || _         g | _        d S N)fpqueue)selfrH   s     r.   __init__zChunkStream.__init__   s    


r-   c                   d}| j         r8| j                                         \  }}}| j                            |           nL| j                            d          }|dd         }| j                                        }t          |          }t          |          s.t          j	        s"dt          |           d}t          |          |||fS )z.Fetch a new chunk. Returns header information.Nr   r   zbroken PNG file (chunk ))rI   poprH   seekreadtelli32is_cidr   LOAD_TRUNCATED_IMAGESreprSyntaxError)rJ   cidposlengthr:   r=   s         r.   rP   zChunkStream.read   s    : 	#z~~//CfGLLQAABB%C',,..CVVFc{{ 	'2 '<S		<<<!#&&&Cr-   c                    | S rG   r,   rJ   s    r.   	__enter__zChunkStream.__enter__   s    r-   c                .    |                                   d S rG   )close)rJ   argss     r.   __exit__zChunkStream.__exit__   s    

r-   c                "    d x| _         | _        d S rG   )rI   rH   r[   s    r.   r^   zChunkStream.close   s    ##
TWWWr-   c                @    | j                             |||f           d S rG   )rI   appendrJ   rW   rX   rY   s       r.   pushzChunkStream.push   s%    
3V,-----r-   c                    t                               d|||            t          | d|                    d          z             ||          S )z"Call the appropriate chunk handlerzSTREAM %r %s %schunk_ascii)loggerdebuggetattrdecoderd   s       r.   callzChunkStream.call   sJ     	&S&999<wtX

7(;(;;<<S&IIIr-   c                   t           j        r&|d         dz	  dz  r|                     ||           dS 	 t          |t          |                    }t	          | j                            d                    }||k    r"dt          |           d}t          |          dS # t          j
        $ r(}dt          |           d}t          |          |d}~ww xY w)	zRead and verify checksumr      r   Nr   z(broken PNG file (bad header checksum in rM   z(broken PNG file (incomplete checksum in )r   rT   crc_skiprC   rR   rH   rP   rU   rV   structerror)rJ   rW   rA   crc1crc2r=   es          r.   crczChunkStream.crc   s     * 	A!a 	MM#t$$$F	*$s,,Dtw||A''Dt||McMMM!#&&& | | 	* 	* 	*IT#YYIIICc"")	*s   A,B" "C1#CCc                :    | j                             d           dS )zRead checksumr   N)rH   rP   )rJ   rW   rA   s      r.   rp   zChunkStream.crc_skip   s     	Qr-      IENDc                (   g }	 	 |                                  \  }}}n)# t          j        $ r}d}t          |          |d }~ww xY w||k    rnD|                     |t          j        | j        |                     |                    |           |S )NTztruncated PNG file)	rP   rq   rr   OSErrorrv   r   
_safe_readrH   rc   )rJ   endchunkcidsrW   rX   rY   ru   r=   s           r.   verifyzChunkStream.verify   s     
	*#'99;; S&&< * * **cll)* hHHS).tw??@@@KK
	 s    A?AN)rx   )r&   r'   r(   rK   rP   r\   r`   r^   re   rm   rv   rp   r~   r,   r-   r.   rE   rE      s               (    $ $ $. . .J J J* * *(  
     r-   rE   c                  *    e Zd ZdZedd            ZdS )iTXtzq
    Subclass of string to allow iTXt chunks to look like strings while
    keeping their extra information

    Nc                X    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
        )str__new__langtkey)clstextr   r   rJ   s        r.   r   ziTXt.__new__   s*     {{3%%		r-   )NN)r&   r'   r(   __doc__staticmethodr   r,   r-   r.   r   r      s>             \  r-   r   c                  0    e Zd ZdZd Zd	dZd
dZd	dZdS )PngInfoz<
    PNG chunk container (for use with save(pnginfo=))

    c                    g | _         d S rG   )chunksr[   s    r.   rK   zPngInfo.__init__  s    r-   Fc                    ||g}|r|                     d           | j                             t          |                     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

        TN)rc   r   tuple)rJ   rW   rA   
after_idatchunks        r.   addzPngInfo.add  sI     d 	LL5<<(((((r-    c                *   t          |t                    s|                    dd          }t          |t                    s|                    dd          }t          |t                    s|                    dd          }t          |t                    s|                    dd          }|r<|                     d|dz   |z   dz   |z   dz   t	          j        |          z              dS |                     d|dz   |z   dz   |z   dz   |z              dS )	zAppends 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)
isinstancebytesencoder   r4   compress)rJ   keyvaluer   r   zips         r.   add_itxtzPngInfo.add_itxt  s)    #u%% 	2**Y11C%'' 	4LL(33E$&& 	2;;w11D$&& 	2;;w11D 	UHHk!D(5047%?$-PUBVBVV    
 HHWcIo4u<tCeKeSTTTTTr-   c                   t          |t                    r$|                     |||j        |j        |          S t          |t
                    s@	 |                    dd          }n(# t          $ r |                     |||          cY S w xY wt          |t
                    s|                    dd          }|r0|                     d|dz   t          j
        |          z              dS |                     d|dz   |z              dS )	zAppends 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

        )r   r   r      zTXt        tEXtr   N)r   r   r   r   r   r   r   UnicodeErrorr   r4   r   )rJ   r   r   r   s       r.   add_textzPngInfo.add_text:  s    eT"" 	N==eUZ=MMM %'' 	::Y99 : : :}}S%S}99999: #u%% 	2**Y11C 	3HHWcGmdmE.B.BBCCCCCHHWcEkE122222s   A' '"BBNF)r   r   F)r&   r'   r(   r   rK   r   r   r   r,   r-   r.   r   r     sm         
  ) ) ) )U U U U83 3 3 3 3 3r-   r   c                       e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )	PngStreamc                    t                                          |           i | _        i | _        d| _        d | _        d | _        d | _        d | _        d | _	        d | _
        d | _        d| _        d S )Nr   r   r   )superrK   im_infoim_textim_sizeim_modeim_tile
im_paletteim_custom_mimetypeim_n_frames_seq_numrewind_statetext_memory)rJ   rH   	__class__s     r.   rK   zPngStream.__init__[  st     "& r-   c                z    | xj         |z  c_         | 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_MEMORYr9   )rJ   chunklenr=   s      r.   check_text_memoryzPngStream.check_text_memoryl  sY    H$o--6#6 6 6  S//! .-r-   c                ^    | j                                         | j        | j        d| _        d S )N)infotileseq_num)r   copyr   r   r   r[   s    r.   save_rewindzPngStream.save_rewindu  s2    L%%''L}
 
r-   c                r    | j         d         | _        | j         d         | _        | j         d         | _        d S )Nr   r   r   )r   r   r   r   r[   s    r.   rewindzPngStream.rewind|  s3    (0(0))4r-   c                   t          j        | j        |          }|                    d          }t                              d|d |                    t                              d||                    ||         }|dk    rd| d}t          |          	 t          ||dz   d                    }n2# t          $ r t           j	        rd }n Y nt          j        $ r d }Y nw xY w|| j        d<   |S )	Nr   ziCCP profile name %rzCompression method %sr   Unknown compression method z in iCCP chunkr   icc_profile)r   r{   rH   findri   rj   rV   r>   r9   rT   r4   rr   r   )rJ   rX   rY   r:   icomp_methodr=   r   s           r.   
chunk_iCCPzPngStream.chunk_iCCP  s    &11 FF5MM+QrrU333,ad333d!KKKKCc"""	/!a%''
;;KK 	 	 	. "  z 	 	 	KKK	&1]#s   B3 3C"C"!C"c                   t          j        | j        |          }|dk     rt           j        r|S d}t	          |          t          |d          t          |d          f| _        	 t          |d         |d         f         \  | _        | _	        n# t          $ r Y nw xY w|d         r
d| j        d	<   |d
         rd}t          |          |S )N   zTruncated IHDR chunkr   r   r   	      r   	interlace   zunknown filter category)r   r{   rH   rT   r9   rR   r   _MODESr   
im_rawmode	Exceptionr   rV   rJ   rX   rY   r:   r=   s        r.   
chunk_IHDRzPngStream.chunk_IHDR  s     &11B;;. (CS//!1ayy#a))+	,2AaD!A$<,@)DL$// 	 	 	D	R5 	*()DL%R5 	#+Cc"""s   &(B 
BBc                    d| j         v rd| j         d         || j        fg}n%| j        
d| j         d<   dd| j        z   || j        fg}|| _        || _        d}t          |          )Nbboxr   Tdefault_imager   zimage data found)r   r   r   r   r   im_idatEOFError)rJ   rX   rY   r   r=   s        r.   
chunk_IDATzPngStream.chunk_IDAT  sy    T\!!DL0#tGHDD+04_-FT\13HID smmr-   c                $    d}t          |          )Nzend of PNG image)r   )rJ   rX   rY   r=   s       r.   
chunk_IENDzPngStream.chunk_IEND  s     smmr-   c                b    t          j        | j        |          }| j        dk    r	d|f| _        |S )Nr   r   )r   r{   rH   r   r   rJ   rX   rY   r:   s       r.   
chunk_PLTEzPngStream.chunk_PLTE  s3     &11<3#QhDOr-   c                   t          j        | j        |          }| j        dk    rKt                              |          r&|                    d          }|dk    r
|| j        d<   nm|| j        d<   nb| j        dv rt          |          | j        d<   nA| j        dk    r6t          |          t          |d          t          |d          f| j        d<   |S )	Nr   r   r   transparencyr   r   r   r   r   r   )	r   r{   rH   r   _simple_palettematchr   r   i16)rJ   rX   rY   r:   r   s        r.   
chunk_tRNSzPngStream.chunk_tRNS  s     &11<3$$Q'' 	1 FF5MM6634DL0 01^,,\_,,+.q66DL((\U""+.q663q!99c!Qii+GDL(r-   c                n    t          j        | j        |          }t          |          dz  | j        d<   |S )N     j@gamma)r   r{   rH   rR   r   r   s       r.   
chunk_gAMAzPngStream.chunk_gAMA  s2     &11 #A 1Wr-   c                    t          j        | j        |          }t          j        dt          |          dz  z  |          }t          d |D                       | j        d<   |S )Nz>%dIr   c              3      K   | ]	}|d z  V  
dS )r   Nr,   ).0elts     r.   	<genexpr>z'PngStream.chunk_cHRM.<locals>.<genexpr>  s&      ,P,PS8^,P,P,P,P,P,Pr-   chromaticity)r   r{   rH   rq   unpacklenr   r   )rJ   rX   rY   r:   raw_valss        r.   
chunk_cHRMzPngStream.chunk_cHRM  s`      &11=3q66Q;!7;;',,P,Px,P,P,P'P'P^$r-   c                    t          j        | j        |          }|dk     rt           j        r|S d}t	          |          |d         | j        d<   |S )Nr   zTruncated sRGB chunkr   srgb)r   r{   rH   rT   r9   r   r   s        r.   
chunk_sRGBzPngStream.chunk_sRGB  sW      &11A::. (CS//! tVr-   c                .   t          j        | j        |          }|dk     rt           j        r|S d}t	          |          t          |d          t          |d          }}|d         }|dk    r|dz  |dz  f}|| j        d<   n|dk    r||f| j        d	<   |S )
Nr   zTruncated pHYs chunkr   r   r   r   
F%u?dpiaspect)r   r{   rH   rT   r9   rR   r   )	rJ   rX   rY   r:   r=   pxpyunitr   s	            r.   
chunk_pHYszPngStream.chunk_pHYs  s     &11A::. (CS//!QC1IIBt199v+rF{*C"%DLQYY%'VDL"r-   c                p   t          j        | j        |          }	 |                    dd          \  }}n# t          $ r |}d}Y nw xY w|rj|                    dd          }|                    dd          }|dk    r|n|| j        |<   || j        |<   |                     t          |                     |S )Nr   r   r-   r   r   replaceexif)
r   r{   rH   splitr9   rl   r   r   r   r   )rJ   rX   rY   r:   kvv_strs          r.   
chunk_tEXtzPngStream.chunk_tEXt  s     &11	775!$$DAqq 	 	 	AAAA	  	/H--AHHY	22E#$;;aaEDLO#DLO""3u::...s   6 AAc                F   t          j        | j        |          }	 |                    dd          \  }}n# t          $ r |}d}Y nw xY w|r	|d         }nd}|dk    rd| d}t          |          	 t          |dd                    }n2# t          $ r t           j        rd}n Y nt          j	        $ r d}Y nw xY w|rb|
                    dd          }|
                    dd	          }|x| j        |<   | j        |<   |                     t          |                     |S )
Nr   r   r-   r   r   z in zTXt chunkr   r   r  )r   r{   rH   r  r9   rV   r>   rT   r4   rr   rl   r   r   r   r   )rJ   rX   rY   r:   r  r  r   r=   s           r.   
chunk_zTXtzPngStream.chunk_zTXt  sw    &11	775!$$DAqq 	 	 	AAAA	  	A$KKK!KKKKCc"""	%ae,,AA 	 	 	.   z 	 	 	AAA	  	+H--AI..A011DLOdl1o""3q66***s'   6 AA3B B:'B:9B:c                T   t          j        | j        |          x}}	 |                    dd          \  }}n# t          $ r |cY S w xY wt          |          dk     r|S |d         |d         |dd          }}}	 |                    dd          \  }}	}
n# t          $ r |cY S w xY w|dk    rJ|dk    rB	 t          |
          }
n3# t          $ r t           j        r|cY S  t          j	        $ r |cY S w xY w|S 	 |
                    dd          }|
                    dd          }|	
                    dd          }	|

                    dd          }
n# t          $ r |cY S w xY wt          |
||	          x| j        |<   | j        |<   |                     t          |
                     |S )Nr   r   r   r   r   r   r   )r   r{   rH   r  r9   r   r>   rT   r4   rr   rl   r   r   r   r   r   )rJ   rX   rY   rr:   r  cfcmr   tkr  s              r.   
chunk_iTXtzPngStream.chunk_iTXtA  s   $TWf555A	775!$$DAqq 	 	 	HHH	q66A::HaD!A$!""B	''%++KD"aa 	 	 	HHH	77Qww-a00AA!    6  z   HHH 	H--A;;w11D7H--B(++AA 	 	 	HHH	 -1D",=,==Q$,q/s1vv&&&sL   8 AA:B B$#B$4C C2C21C28AE E E c                T    t          j        | j        |          }d|z   | j        d<   |S )N   Exif  r  )r   r{   rH   r   r   s       r.   
chunk_eXIfzPngStream.chunk_eXIfi  s,     &11.2Vr-   c                z   t          j        | j        |          }|dk     rt           j        r|S d}t	          |          | j        d | _        t          j        d           |S t          |          }|dk    s|dk    rt          j        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)r   r{   rH   rT   r9   r   warningswarnrR   r   r   )rJ   rX   rY   r:   r=   n_framess         r.   
chunk_acTLzPngStream.chunk_acTLo  s     &11A::. 6CS//!'#DMPQQQHq66q==Hz11MPQQQH#"1ayyV".r-   c                   t          j        | j        |          }|dk     rt           j        r|S d}t	          |          t          |          }| j        |dk    s| j        | j        |dz
  k    rd}t          |          || _        t          |d          t          |d          }}t          |d          t          |d	          }	}| j        \  }
}||z   |
k    s	|	|z   |k    rd
}t          |          ||	||z   |	|z   f| j	        d<   t          |d          t          |d          }}|dk    rd}t          |          t          |          z  dz  | 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)r   r{   rH   rT   r9   rR   r   rV   r   r   r   float)rJ   rX   rY   r:   r=   seqwidthheightr   r   im_wim_h	delay_num	delay_dens                 r.   
chunk_fcTLzPngStream.chunk_fcTL  s    &11B;;. 6CS//!!ffM!cQhhM%$-37*B*B7Cc"""Aq		3q!99vQSBZZB\
d:Vd 2 20Cc""" "BU
BK@V"1bzz3q"::9	>>I#(#3#3eI6F6F#F#MZ #$R5Z  !"Wr-   c                V   |dk     r9t           j        rt          j        | j        |          }|S d}t	          |          t          j        | j        d          }t          |          }| j        |dz
  k    rd}t          |          || _        |                     |dz   |dz
            S )Nr   z"APNG contains truncated fDAT chunkr   r  )	r   rT   r{   rH   r9   rR   r   rV   r   )rJ   rX   rY   r:   r=   r)  s         r.   
chunk_fdATzPngStream.chunk_fdAT  s    A::. (&996CS//! !,,!ff=C!G##7Cc"""sQw
333r-   )r&   r'   r(   rK   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r  r0  r2  __classcell__r   s   @r.   r   r   Z  sf           "" " "
 
 
5 5 5
  6  (        (         "  &     D& & &P    (  :4 4 4 4 4 4 4r-   r   c                (    | d d         t           k    S )Nr   )_MAGIC)prefixs    r.   _acceptr8    s    "1":r-   c                  z     e Zd ZdZdZd Zed             Zd Zd Z	ddZ
d	 Zd
 Zd Zd Zd Z fdZd Z xZS )PngImageFilePNGzPortable network graphicsc                |   t          | j                            d                    sd}t          |          | j        | _        d| _        g | _        t          | j                  | _        	 | j                                        \  }}}	 | j        	                    |||          }n# t          $ r Y nt          $ rr t                              d|||           t          j        | j        |          }|dd                                         r| j                            ||f           Y nw xY w| j                            ||           | j        j        | _        | j        j        | _        | j        j        | _        d | _        | j        j        | _        | j        j        | _        | j        j        pd| _        | j                             dd	          | _!        | j        j"        r)| j        j"        \  }}tG          j$        ||          | _%        |d
k    r|dz
  | _&        n|| _&        | j        j        vd	| _'        | j        (                                 | j&        | _)        | j        *                                | _+        | j!        r| xj        dz  c_        | ,                    d           | j        dk    | _-        d S )Nr   znot a PNG filer   T%r %s %s (unknown)r   r   r   F   fdATr   ).r8  rH   rP   rV   _fp_PngImageFile__frameprivate_chunksr   pngrm   r   AttributeErrorri   rj   r   r{   islowerrc   rv   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_idatrQ   _PngImageFile__rewind_seekis_animated)rJ   r=   rW   rX   rY   r:   rawmoderA   s           r.   _openzPngImageFile._open  s   tw||A'' 	#"Cc"""7
 !TW%%	!  $x}}Cf9HMM#sF33   ! 9 9 913VDDD(&99qs8##%% 9'..Qx888	9 HLLa   !	!2 X%
X%
H$	
H$	#x:,1!Y]]?EBB8 	; H/MGT'+GT::DL'>>"(1*D"(D8+5:D2H  """!%!4D HMMOODM! #"JJqMMM=1,s   B( (
D/4A8D/.D/c                    | j         [| j        r$| j        }|                     | j        dz
             |                                  | j        r|                     |           | j         S )Nr   )rG  rQ  r@  rO   r  load)rJ   frames     r.   r   zPngImageFile.text  sk     :  -		$-!+,,,IIKKK !		%   zr-   c                D   | j         d}t          |          | j                             | j        d         d         dz
             | j                                         | j                                         | j        r| j                                          d| _         dS )zVerify PNG fileNz)verify must be called directly after openr   r   r   )rH   RuntimeErrorrO   r   rB  r~   r^   _exclusive_fp)rJ   r=   s     r.   r~   zPngImageFile.verify  s     7?=Cs### 	TYq\!_q())) 	GMMOOOr-   c                ^   |                      |          sd S || j        k     r|                     dd           | j        }t          | j        dz   |dz             D ]Q}	 |                     |           # t          $ r,}|                     |           d}t	          |          |d }~ww xY wd S )Nr   Tr   zno more images in APNG file)_seek_checkr@  rP  ranger   rO   )rJ   rV  
last_framefru   r=   s         r.   rO   zPngImageFile.seek#  s    && 	F4<JJq$\
t|a'33 	+ 	+A+

1 + + +		*%%%3smm*+	+ 	+s   A44
B*>'B%%B*Fc                :	   |dk    r|r| j                             | j                   | j                                         | j        | _        d | _        | j        rd | _        | j        j	        | _
        | j        j        | _        | j         | _        d | _        d | _        | j
                            dd          | _        | j
                            d          | _        | j
                            d          | _        | j
                            d          | _        d| _        n}|| j        dz   k    rd| }t-          |          |                                  | j        r%| j                            | j        | j                   | j                                        | _        | j         | _        | j        r&t5          j        | j        | j                   d| _        d}	 | j                            d
           	 | j                                        \  }}}n# t:          j        t>          f$ r Y nw xY w|dk    rd}tA          |          |dk    r|rd}t?          |          d	}	 | j        !                    |||           n# tD          $ r Y nt@          $ r3 |dk    r|d
z  }|r	|| _        Y ndt5          j        | j        |           Y nFtF          $ r: tH          %                    d|||           t5          j        | j        |           Y nw xY w4|| _        | j        j        | _        | j
                            d          | _        | j
                            d          | _        | j
                            d          | _        | j        sd}tA          |          | j        &| j        tL          j'        k    rtL          j(        | _        | j        tL          j'        k    rE| j                                        | _        | )                    | j        | j                  | _        d S | j        tL          j(        k    rVtT          j+        ,                    | j-        | j.                  | _        | )                    | j        | j                  | _        d S d | _        d S )Nr   r   Fr%  r'  r   r   zcannot seek to frame Tr   rx   zNo more images in APNG file   fcTLzAPNG missing frame datar>  r=  zimage not found in APNG frame)/r?  rO   rO  rB  r   rN  rL  impyaccessr   r   r   r   rH   _prev_imdisposerI  r   
dispose_opblend_opdispose_extentr@  r9   rU  paster   r   r{   rP   rq   rr   rV   r   rm   UnicodeDecodeErrorrC  ri   rj   r%   r+   r*   _cropr   corefillmodesize)rJ   rV  r   r=   frame_startrW   rX   rY   s           r.   rP  zPngImageFile._seek2  sC   A:: 	#dm,,,!!!&*&8#= )$(DM H,	 H,	( DMDL!%!F!FD"immJ77DO IMM'22DM"&)--"7"7DDLLq(((5e55 oo% IIKKK| AdlD,?@@@ GLLNNDMhDG " ($TWd.ABBB&'#K:Q'+x}}$Cffk2   E '>>7C"3--''>>" /7)#..."&K:HMM#sF3333)   E : : :g~~!& "28D/!E(&99999% : : :LL!5sCHHH(&99999:;:B !DL(DI"immJ77DO IMM'22DM"&)--"7"7D9 $5smm# = T_8L%L%L&4DO?h222=--//DL::dlD4GHHDLLL_ 666 :??49di@@DL::dlD4GHHDLLLDLLLs7   <H H32H3)J 
LL1LA LLc                    | j         S rG   )r@  r[   s    r.   rQ   zPngImageFile.tell  s
    |r-   c                    | j                             d          r| j        dz   | _        | j        | _        t
          j                            |            dS )z"internal: prepare to read PNG filer   )r   N)r   rI  decoderconfigrL  _PngImageFile__idatr   load_preparer[   s    r.   rt  zPngImageFile.load_prepare  sQ     9==%% 	;!%!3d!:D)((.....r-   c                   | j         dk    r| j                            d           | j                                        \  }}}|dvr| j                            |||           dS |dk    r9	 | j                            |||           n# t          $ r Y nw xY w|dz
  | _         n|| _         | j         dk    |dk    r| j         }nt          || j                   }| j         |z
  | _         | j                            |          S )zinternal: read more image datar   r   )   IDATs   DDATr>  r-   r>  )rs  rH   rP   rB  re   rm   r   min)rJ   
read_bytesrW   rX   rY   s        r.   	load_readzPngImageFile.load_read  s    kQ GLLOOO#x}}Cf555c3///sg~~HMM#sF3333   D$qj$% kQ* ??JJZ55JkJ.w||J'''s   ,B	 	
BBc                >   | j         dk    r| j                            | j                    	 | j                            d           	 | j                                        \  }}}n# t          j        t          f$ r Y nw xY w|dk    rn|dk    r+| j        r$d| _        | j        	                    |||           n	 | j        
                    |||           n# t          $ r Y nt          $ r( |dk    r|dz  }t          j        | j        |           Y nt          $ rs t                               d|||           t          j        | j        |          }|dd	                                         r| j                            ||df           Y nw xY wj| j        j        | _        | j        s"| j                                         d
| _        d
S | j        r| j        t4          j        k    r|                     | j        | j                  }| j        j        dk    r+d| j         v r"|!                    d| j         d                   }n|"                    d          }| j        #                    || j        |           | j        | _        | j$        rd
| _$        d
S d
S d
S d
S )z%internal: finished reading image datar   Tr   rx   r`  r>  r=  r   r   Nr   r   r   )%rs  rH   rP   rB  rq   rr   rV   rQ  rL  re   rm   ri  r   r   r{   rC  ri   rj   rD  rA  rc   r   rG  r^   rc  rf  r0   r2   rj  ra  rg  rm  r   convert_transparentconvertrh  rb  )rJ   rW   rX   rY   r:   updatedmasks          r.   load_endzPngImageFile.load_end  s   ;!GLL%%%	?GLLOOO#'8==?? S&&L+.    g~~D$4&'#c3///?c3////%    6 6 6'>>aKF$TWf55555! ? ? ?13VDDD(&99qs8##%% ?'..Q~>>>	?1	?: X%
 	)HNNDHHH} )%-!?!?**TWd.ABB7<5((^ty-H-H"66	. 9 DD #??622D##GT-@$GGG-= )$(DMMM) )!?!?) )s1   A% %A?>A?<C 
F%.FA9FFc                    d| j         vr|                                  d| j         vrd| j         vrd S |                                                                 S )Nr  zRaw profile type exif)r   rU  getexif_get_merged_dictr[   s    r.   _getexifzPngImageFile._getexif  sU    ""IIKKK""'>di'O'O4||~~..000r-   c                ~    d| j         vr|                                  t                                                      S )Nr  )r   rU  r   r  )rJ   r   s    r.   r  zPngImageFile.getexif  s1    ""IIKKKww   r-   c                X    d| j         v r |                     | j         d                   ni S )z
        Returns a dictionary containing the XMP tags.
        Requires defusedxml to be installed.

        :returns: XMP tags in a dictionary.
        zXML:com.adobe.xmp)r   _getxmpr[   s    r.   getxmpzPngImageFile.getxmp  s5     #di// LL#67888	
r-   r   )r&   r'   r(   formatformat_descriptionrS  propertyr   r~   rO   rP  rQ   rt  ry  r  r  r  r  r3  r4  s   @r.   r:  r:    s       F4A- A- A-F   X  "+ + +\  \  \  \ |  / / /( ( (B1) 1) 1)f1 1 1! ! ! ! !
 
 
 
 
 
 
r-   r:  )r       )L;1r  )r   s    )r   s    )r   s    )r   s   )r   s    )r   s   )r   s   )r   s   )r   s   )r   s   )r   s   )r   r  r   r   r   r   r   zI;16r   r   r   r   r   r   r   c                <   d                     |          }|                     t          t          |                    |z              |                     |           t	          |t	          |                    }|                     t          |                     dS )z'Write a PNG chunk (including CRC field)r-   N)joinwriteo32r   rC   rH   rW   rA   rv   s       r.   putchunkr  "  sx     88D>>DHHST^^c!"""HHTNNN
vc{{
#
#CHHSXXr-   c                      e Zd Zd Zd ZdS )_idatc                "    || _         || _        d S rG   )rH   r   )rJ   rH   r   s      r.   rK   z_idat.__init__0  s    


r-   c                >    |                      | j        d|           d S )Nrv  )r   rH   rJ   rA   s     r.   r  z_idat.write4  s     

47GT*****r-   Nr&   r'   r(   rK   r  r,   r-   r.   r  r  -  s2          + + + + +r-   r  c                      e Zd Zd Zd ZdS )_fdatc                0    || _         || _        || _        d S rG   )rH   r   r   )rJ   rH   r   r   s       r.   rK   z_fdat.__init__;  s    
r-   c                    |                      | j        dt          | j                  |           | xj        dz  c_        d S )Nr>  r   )r   rH   r  r   r  s     r.   r  z_fdat.write@  s:    

47GS%6%6===r-   Nr  r,   r-   r.   r  r  8  s2          
    r-   r  c                   | j                             d| j                            dd                    }| j                             d| j                            dd                    }| j                             d| j                            dt          j                            }| j                             d| j                            dt
          j                            }	|rt          j        |          }
nt          j        | g|          }
g }d}|
D ]}t          j
        |          D ]}|j        |k    r|                                }n|                    |          }| j                                         }t          |t          t           f          r||         |d<   t          |t          t           f          r||         |d<   t          |	t          t           f          r|	|         |d<   |dz  }|r|d         }|d                             d          }|d                             d          }|t          j        k    rt%          |          d	k     rt          j        }|t          j        k    r|d
                                         }t(          j                            d| j        d          }|d         }|r|                    |          }n
d| j        z   }|                    ||           n'|t          j        k    r|d         d
         }n|d
         }t5          j        |                    d          |                    d                    }|                    d          }|s^||                    d          k    rE||                    d          k    r,|d         dxx         |                    d|          z  cc<   nd }d|vr||d<   |                    |||d           ːt%          |          dk    r|s|d         d
         S  ||dt=          t%          |                    t=          |                     |rQ| j        |k    r|                     |          } t?          j         | tC          ||          dd| j        z   d|fg           d}tE          |          D ]\  }}|d
         }|d         sd|j        z   }n|d         }|                    |          }|j        }|d         }tG          tI          |d                             }|                    d|          }|                    d|	          } ||dt=          |          t=          |d                   t=          |d                   t=          |d                   t=          |d                   tK          |          tK          d          tM          |          tM          |                     |dz  }|dk    r5|s3t?          j         |tC          ||          dd|j        z   d|fg           }tO          |||          }t?          j         ||dd|j        z   d|fg           |j(        }d S )Nr#  r   r  r%  r'  r   encoderinfor   ra  r   )r   r   r   r   r   r   F)
alpha_only)ra  r   r  s   acTLr   r`  r"  ))r  rI  r   r%   r)   r0   r1   	itertoolschainr
   Iteratorrm  r   r|  r   listr   r+   r   r*   r   rk  rl  rn  croprh  r   subtract_modulogetbboxrc   r  r   _saver  	enumerateintroundo16r   r  r   )ra  rH   r   rR  r   append_imagesr#  r  r%  r'  r  	im_framesframe_countim_seqim_framer  previousprev_disposal
prev_blendbase_imrd  r   deltar   rV  
frame_datarn  frame_durationframe_disposalframe_blendfdat_chunkss                                  r.   _write_multiple_framesr  E  si   ~!!*bgkk*a.H.HIIH>fbgkk&!&<&<==D~!!*bgkk*hFV.W.WXXHNwGU_(M(MNNE 5..m44IK 4Y 4Y%.v66 3	Y 3	YH}''#==??#++G44.--//K(T5M22 @*2;*?J'(T5M22 @*2;*?J'%$// :',['9G$1K "$R= ( 7 ; ;J G G%m488AA
 H$888S^^a=O=O$,$:M H$:::&tn1133G#joofbg|LLG#F+D 0"),,t"4"4%/MM'40000"h&:::'mD1GG&tnG"2$$V,,goof.E.E  }}}66%)D)DDD"koog&>&>>>]+J777;??"H< < 777 ,,*2J'Hd;WWXXXXg3	Yj 9~~=|D!! 
E
C	NND			    W7gG$$BE"e,,v7GG/T.UVVVG&y11 ** **zd#&! 	+HM)DDf%D}}T**H} /U;z#:;;<<$X>>!oogu55LLQLLQLLQLLQLLII~{OO	
 	
 	
 	1A::m:Ob%  (-/G<=     E733KO(-/G<=  
 ")GGU** **r-   c                ,    t          | ||d           d S )NT)save_all)r  )ra  rH   filenames      r.   	_save_allr    s    	"b(T******r-   Fc                d   |r| j                             d| j                            d                    }t                      }| j                             dg           }t	          j        | g|          D ]3}t          j        |          D ]}	|                    |	j	                   4dD ]}
|
|v r n	|
                                }
n| j	        }
|
dk    rd| j         v rt          d| j         d         z  d          }nU| j        rLt          t          t          | j                                        d                   dz  d          d          }nd}|d	k    r|d
k    rd}n|dk    rd
}nd}|
 d| }
| j                             dd          | j                             dd          | j                             dd          | j                             dd          f| _        	 t"          |
         \  }}
n(# t$          $ r}d|
 d}t'          |          |d }~ww xY w|                    t*                      ||dt-          | j        d                   t-          | j        d                   |
ddd           g d}| j                             d| j                            d                    }|r>d}|dz   t1          j        |          z   } ||d|           |                    d           | j                             d          }|rg d }|j        D ]}}|d d
         \  }}||v r#|                    |            ||||           6||v r ||||           H|dd
                                         r|d
d         }|s ||||           ~| j	        dk    r_|dz  }| j                            d!          d |         }t          |          |k     r|dz  }t          |          |k      ||d"|           | j                             d#| j                            d#d                     }|s|dk    r| j	        dk    rk|}t?          |t@                    r ||d$|d |                    n@t          dt          d%|                    }d&|z  dz   } ||d$|d |                    n| j	        d'v r9t          dt          d(|                    } ||d$tC          |                     n| j	        d!k    rA|\  }}}  ||d$tC          |          tC          |          z   tC          |           z              nud#| j         v rd)}t'          |          nZ| j	        dk    rO| j        "                                d*k    r2| j                            d*d+          }|} ||d$|d |                    | j                             d,          }!|!r[ ||d-t-          tG          |!d         d.z  d/z                       t-          tG          |!d         d.z  d/z                       d0           |rAd1d2g}|j        D ]5}|d d
         \  }}||v r"|                    |            ||||           6| j                             d3          }"|"r[t?          |"tH          j%                  r|"&                    d4          }"|"'                    d5          r
|"d6d          }" ||d7|"           |rtQ          | |||||          } | r1tS          j*        | tW          ||          d8d9| j        z   d|fg           |rL|j        D ]D}|d d
         \  }}|dd
                                         r|d
d         }|r ||||           E ||d:d           tY          |d;          r|-                                 d S d S )<Nr   r  )r   r   r   r   bitsr      r!   r    r   r   ;optimizeFcompress_levelr  compress_type
dictionaryr-   zcannot write mode z as PNGs   IHDRr   r   )s   cHRMs   gAMAs   sBIT   sRGBs   tIMEr   s   ICC Profiler   s   iCCPr  pnginfo)s   sPLTr   r   r   r   s   PLTEr   s   tRNS      r   i  z%cannot use transparency for this moder   Ar   s   pHYsr   g      ?   s   bKGDs   hISTr  r   r  r"   s   eXIfr   r   rx   flush).r  rI  r   setr  r  r
   r  r   rm  rN   rw  rK  maxr   getdataencoderconfig	_OUTMODESKeyErrorrz   r  r6  r  rn  r4   r   remover   rD  ra  
getpaletter   r   r  getpalettemoder  r   Exiftobytes
startswithr  r   r  r  hasattrr  )#ra  rH   r  r   r  r   modesr  r  r  rm  colorsr  rR  ru   r=   r   iccnamerA   r   chunks_multiple_allowed
info_chunkrW   r   palette_byte_numberpalette_bytesr   alpha_bytesalpharedgreenbluer   r  s#                                      r.   r  r    s     **RW[[99
 
 **?B??ordM:: 	) 	)F)26:: ) )		(-(((()( 	 	Du}}  99;;Dws{{ R^##bnV44c::FF z SRZ%7%7%9%9!%<!=!=!BCHH!LLR<<{{1##T##D 	:u--
+R00
?B//
<--	B"!$ " " "04000cll!" HHV	E
BGAJBGAJ	 	 	 ;::F
.

]BGKK,F,F
G
GC
  g~c 2 22b'4    	g>i((D )"F"F"F+ 	) 	)J"2A2ICf}}c"""b#t$$$$///b#t$$$$QqS!!## )'!_
! )E"c4(((	w#~~$qj((//0D1D0DE-  #666U"M -  #666b'=)))>%%nbgkk.RV6W6WXXL 4|q((7c>> K,.. 8b'<#=>>>>"1c#|&<&<==,.6b'5+#67777W''q#e\":":;;LE"gs<001111W+CE"gs3xx#e**4s4yy@AAAA// >cll"	 0 7c>>be2244>>E$$VS11E KE"gu\k\2333
.

U
#
#C
 
CFVOc)**++CFVOc)**++	
 	
 	
  %7#+ 	% 	%J"2A2ICf}}c"""b#t$$$>f%%D !dEJ'' 	#<<??D???++ 	8Db'4    
#E7M=
 
 
 WE"e,,v7GG/T.UVVV )+ 	) 	)J"2A2IC1Q3x!! )'!_
 )E"c4(((	E"gsr7 





 s   $G5 5
H?HHc                     G d d          }d } |            }	 || _         t          | |d|           | ` n# | ` w xY w|j        S )z4Return a list of PNG chunks representing this image.c                      e Zd Zg Zd Zd ZdS )getchunks.<locals>.collectorc                    d S rG   r,   r  s     r.   r  z"getchunks.<locals>.collector.write  s    Dr-   c                :    | j                             |           d S rG   )rA   rc   )rJ   r   s     r.   rc   z#getchunks.<locals>.collector.append  s    IU#####r-   N)r&   r'   r(   rA   r  rc   r,   r-   r.   	collectorr    s7        	 	 		$ 	$ 	$ 	$ 	$r-   r  c                    d                     |          }t          t          |t          |                              }|                     |||f           d S )Nr-   )r  r  rC   rc   r  s       r.   rc   zgetchunks.<locals>.append  sM    xx~~&vc{{++,,
		3c"#####r-   N)r  r  rA   )ra  paramsr  rc   rH   s        r.   	getchunksr    s    $ $ $ $ $ $ $ $$ $ $
 
Bb"dF###NNBN7Ns   8 <z.pngz.apngz	image/png)r   )?
__future__r   r  loggingrerq   r  r4   enumr   r   r   r   r   r	   r
   _binaryr   r   r   rR   r   r   r  r   r  	getLoggerr&   ri   compiler   rS   r6  r   r   	SAFEBLOCKr7   r   r%   r0   r>   rC   rE   r   r   r   r   r8  r:  r  r  r  r  r  r  r  r  register_openr  register_saveregister_save_allregister_extensionsregister_mimer,   r-   r.   <module>r     sp  B # " " " " "      				          G G G G G G G G G G G G G G ! ! ! ! ! ! ! ! ! ! ! !       ! ! ! ! ! ! ! ! ! ! ! !		8	$	$	L	!	!	' 
 !+
 
2 "*011$
 ~%    w   *    G     / / / /V V V V V V V Vr    3   ,M3 M3 M3 M3 M3 M3 M3 M3hS4 S4 S4 S4 S4 S4 S4 S4t
     L
 L
 L
 L
 L
9& L
 L
 L
h
 
	
	"#	!! 	(  + + + + + + + +
 
 
 
 
 
 
 
* * *D+ + + #+U } } } }H  >  L'w ? ? ?  L' / / /  +Y 7 7 7  ,-/@ A A A  L' 5 5 5 5 5r-   