
    Aei	                       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jT                  e+      Z, ejZ                  d      j\                  Z/dZ0dddddddddddd d!d"d#d$Z1 ejZ                  d%      Z2ejf                  Z4	 d&e4z  Z5	  G d' d(e	      Z6 G d) d*e	      Z7dWd+Z8dXdYd,Z9 G d- d.      Z: G d/ d0e;      Z< G d1 d2      Z= G d3 d4e      Z> G d5 d6e:      Z?dZd7Z@ G d8 d9ej&                        ZAd:d;d<d=d>d?d@d@d@dAdBdCdDdEdFdGZBd[dHZC G dI dJ      ZD G dK dL      ZEd\dMZF G dN dOe      ZG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d]dPZHd^dQZIeCdf	 	 	 	 	 	 	 	 	 	 	 d_dRZJd`dSZK ej                  eAj                  eAe@        ej                  eAj                  eJ        ej                  eAj                  eI        ej                  eAj                  dTdUg        ej                  eAj                  dV       y)a    )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                      e Zd ZdZ	 dZ	 dZy)Disposalr   r	   r'   N)__name__
__module____qualname__OP_NONEOP_BACKGROUNDOP_PREVIOUS     E/var/www/card/venv/lib/python3.12/site-packages/PIL/PngImagePlugin.pyr/   r/   n   s$    G M
 Kr7   r/   c                      e Zd ZdZ	 dZy)Blendr   r	   N)r0   r1   r2   	OP_SOURCEOP_OVERr6   r7   r8   r:   r:      s    I
 Gr7   r:   c                    t        j                         }|j                  | 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)sdobj	plaintextmsgs       r8   _safe_zlib_decompressrH      s>    D>2IMor7   c                4    t        j                  | |      dz  S )Nl    )r>   crc32)dataseeds     r8   _crc32rM      s    ::dD!J..r7   c                  ^    e Zd ZddZddZddZddZddZddZddZ	ddZ
dd	Zddd
Zy)ChunkStreamc                     || _         g | _        y N)fpqueue)selfrR   s     r8   __init__zChunkStream.__init__   s    $&:<
r7   c                   d}| j                   J | j                  r:| j                  j                         \  }}}| j                   j                  |       nE| j                   j	                  d      }|dd }| j                   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 ))rR   rS   popseekreadtelli32is_cidr   LOAD_TRUNCATED_IMAGESreprSyntaxError)rT   cidposlengthrD   rG   s         r8   rZ   zChunkStream.read   s    ww"""::#zz~~/CfGGLLQAAB%C'',,.CVFc{22/S	{!<!#&&Cr7   c                    | S rQ   r6   rT   s    r8   	__enter__zChunkStream.__enter__   s    r7   c                $    | j                          y rQ   )close)rT   argss     r8   __exit__zChunkStream.__exit__   s    

r7   c                     d x| _         | _        y rQ   )rS   rR   re   s    r8   rh   zChunkStream.close   s    ##
TWr7   c                \    | j                   J | j                   j                  |||f       y rQ   )rS   appendrT   ra   rb   rc   s       r8   pushzChunkStream.push   s+    zz%%%

3V,-r7   c                |    t         j                  d|||        t        | d|j                  d             ||      S )z"Call the appropriate chunk handlerzSTREAM %r %s %schunk_ascii)loggerdebuggetattrdecodern   s       r8   callzChunkStream.call   s>     	&S&9<wtvcjj&9%:;<S&IIr7   c                   t         j                  r|d   dz	  dz  r| j                  ||       y| j                  J 	 t	        |t	        |            }t        | j                  j                  d            }||k7  rdt        |       d}t        |      y# 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 rW   z(broken PNG file (incomplete checksum in )r   r^   crc_skiprR   rM   r\   rZ   r_   r`   structerror)rT   ra   rK   crc1crc2rG   es          r8   crczChunkStream.crc   s     **A!aMM#t$ww"""	*$s,Dtww||A'Dt|@c1M!#&&  || 	*<T#YKqICc")	*s   AB C
*CC
c                V    | j                   J | j                   j                  d       y)zRead checksumNr(   )rR   rZ   )rT   ra   rK   s      r8   rz   zChunkStream.crc_skip   s#     ww"""Qr7   c                4   g }| j                   J 	 	 | j                         \  }}}||k(  r	 |S | j                  |t        j                  | j                   |             |j                  |       _# t        j                  $ r}d}t	        |      |d }~ww xY w)Nztruncated PNG file)	rR   rZ   r{   r|   OSErrorr   r   
_safe_readrm   )rT   endchunkcidsra   rb   rc   r   rG   s           r8   verifyzChunkStream.verify   s     ww"""*#'99; S&
 h  HHS)..tww?@KK  << **cl)*s   A1 1BBBNrR   	IO[bytes]returnNone)r   ztuple[bytes, int, int])r   rO   )ri   objectr   r   r   r   )ra   bytesrb   intrc   r   r   r   )ra   r   rb   r   rc   r   r   r   )ra   r   rK   r   r   r   )   IEND)r   r   r   zlist[bytes])r0   r1   r2   rU   rZ   rf   rj   rh   ro   rw   r   rz   r   r6   r7   r8   rO   rO      s5    = *$.J**r7   rO   c                  J    e Zd ZU dZded<   ded<   e	 d	 	 	 	 	 	 	 dd       Zy)	iTXtzq
    Subclass of string to allow iTXt chunks to look like strings while
    keeping their extra information

    zstr | bytes | NonelangtkeyNc                N    t         j                  | |      }||_        ||_        |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__r   r   )clstextr   r   rT   s        r8   r   ziTXt.__new__
  s'     {{3%		r7   )NN)r   r   r   
str | Noner   r   r   r   )r0   r1   r2   __doc____annotations__staticmethodr   r6   r7   r8   r   r      sJ     
DH(7A	 r7   r   c                  b    e Zd ZdZddZdd	dZ	 	 	 d
	 	 	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 ddZy)PngInfoz<
    PNG chunk container (for use with save(pnginfo=))

    c                    g | _         y rQ   )chunksre   s    r8   rU   zPngInfo.__init__!  s	    79r7   c                @    | j                   j                  |||f       y)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   rm   )rT   ra   rK   
after_idats       r8   addzPngInfo.add$  s     	Cz23r7   c                   t        |t              s|j                  dd      }t        |t              s|j                  dd      }t        |t              s|j                  dd      }t        |t              s|j                  dd      }|r8| j                  d|dz   |z   dz   |z   dz   t	        j
                  |      z          y| j                  d|dz   |z   dz   |z   dz   |z          y)	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)
isinstancer   encoder   r>   compress)rT   keyvaluer   r   zips         r8   add_itxtzPngInfo.add_itxt0  s    $ #u%**Y1C%'LL(3E$&;;w1D$&;;w1DHHk!D(5047%?$--PUBVV
 HHWcIo4u<tCeKeSTr7   c                   t        |t              rL| j                  |||j                  |j                  nd|j                  |j                  |      S d|      S t        |t
              s	 |j                  dd      }t        |t
              s|j                  dd      }|r,| j                  d|dz   t        j                  |      z          y| j                  d|d	z   |z          y# t        $ r | j                  |||      cY S w xY w)
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

        Nr7   )r   r   r      zTXt        tEXtr   )r   r   r   r   r   r   r   UnicodeErrorr   r>   r   )rT   r   r   r   s       r8   add_textzPngInfo.add_textS  s    eT"==#jj4

##jj4

 !   ;> !   %':Y9 #u%**Y1CHHWcGmdmmE.BBCHHWcEkE12   :}}S%S}99:s   .C) )D	D	Nr   F)ra   r   rK   r   r   boolr   r   ) r   F)r   str | bytesr   r   r   r   r   r   r   r   r   r   )r   r   r   zstr | bytes | iTXtr   r   r   r   )r0   r1   r2   r   rU   r   r   r   r6   r7   r8   r   r     s    
:
4  !U!U !U 	!U
 !U !U 
!UH HM!3!3'9!3@D!3	!3r7   r   c                  ,    e Zd ZU ded<   ded<   ded<   y)_RewindStatez dict[str | tuple[int, int], Any]infozlist[ImageFile._Tile]tilez
int | Noneseq_numNr0   r1   r2   r   r6   r7   r8   r   r   {  s    
**
r7   r   c                       e Zd Zd fdZddZddZddZddZddZddZ	ddZ
dd	Zdd
ZddZddZddZddZddZddZddZddZddZddZddZ xZS )	PngStreamc                    t         |   |       i | _        i | _        d| _        d| _        g | _        d | _        d | _        d | _	        d | _
        t        i g d       | _        d| _        y )Nr   r   r   r   )superrU   im_infoim_textim_sizeim_modeim_tile
im_paletteim_custom_mimetypeim_n_frames_seq_numr   rewind_statetext_memory)rT   rR   	__class__s     r8   rU   zPngStream.__init__  sl     :<.0.048.2'+$((R6r7   c                    | xj                   |z  c_         | j                   t        kD  rd| j                    d}t        |      y )Nz%Too much memory used in text chunks: z>MAX_TEXT_MEMORY)r   MAX_TEXT_MEMORYrC   )rT   chunklenrG   s      r8   check_text_memoryzPngStream.check_text_memory  sN    H$o-7##$$46  S/! .r7   c                    t        | j                  j                         | j                  | j                        | _        y rQ   )r   r   copyr   r   r   re   s    r8   save_rewindzPngStream.save_rewind  s-    (LLLLMM
r7   c                    | j                   j                  j                         | _        | j                   j                  | _        | j                   j                  | _        y rQ   )r   r   r   r   r   r   r   r   re   s    r8   rewindzPngStream.rewind  sD    ((--224((--))11r7   c                   | j                   J t        j                  | j                   |      }|j                  d      }t        j                  d|d |        ||dz      }t        j                  d|       |dk7  rd| d}t        |      	 t        ||dz   d        }|| j                  d	<   |S # t        $ r t        j                  rd }n Y 0t        j                  $ r d }Y Fw xY w)
Nr   ziCCP profile name %rr	   zCompression method %sr   Unknown compression method z in iCCP chunkr'   icc_profile)rR   r   r   findrs   rt   r`   rH   rC   r^   r>   r|   r   )rT   rb   rc   rD   icomp_methodrG   r   s           r8   
chunk_iCCPzPngStream.chunk_iCCP  s    ww"""  &1 FF5M+QrU3Ah,k:!/}NKCc""	/!a%'
;K '2]#  	.."  zz 	K	s   B0 0C&C&%C&c                   | j                   J t        j                  | j                   |      }|dk  rt        j                  r|S d}t	        |      t        |d      t        |d      f| _        	 t        |d   |d   f   \  | _        | _	        |d   rd| j                  d	<   |d
   rd}t        |      |S # t        $ r Y 3w xY w)N   zTruncated IHDR chunkr   r(   r)   	      r	   	interlace   zunknown filter category)rR   r   r   r^   rC   r\   r   _MODESr   
im_rawmode	Exceptionr   r`   rT   rb   rc   rD   rG   s        r8   
chunk_IHDRzPngStream.chunk_IHDR  s    ww"""  &1B;..(CS/!1ay#a)+	,2AaD!A$<,@)DL$/ R5()DLL%R5+Cc""  		s   1B7 7	CCc                L   d| j                   v r1t        j                  d| j                   d   || j                        g}nK| j                  d| j                   d<   t        j                  dd| j
                  z   || j                        g}|| _        || _        d}t        |      )Nbboxr   Tdefault_imager   zimage data found)	r   r   _Tiler   r   r   r   im_idatEOFError)rT   rb   rc   r   rG   s        r8   
chunk_IDATzPngStream.chunk_IDAT  s    T\\!OOE4<<+?dooVWD+04_-OOE6DLL+@#tWXD smr7   c                    d}t        |      )Nzend of PNG image)r   )rT   rb   rc   rG   s       r8   
chunk_IENDzPngStream.chunk_IEND  s     smr7   c                    | j                   J t        j                  | j                   |      }| j                  dk(  r	d|f| _        |S )Nr!   r    )rR   r   r   r   r   rT   rb   rc   rD   s       r8   
chunk_PLTEzPngStream.chunk_PLTE  sD    ww"""  &1<<3#QhDOr7   c                @   | j                   J t        j                  | j                   |      }| j                  dk(  rMt        j                  |      r'|j                  d      }|dk\  r || j                  d<   |S || j                  d<   |S | j                  dk(  rt        |      rdnd| j                  d<   |S | j                  dv rt        |      | j                  d<   |S | j                  dk(  r/t        |      t        |d	      t        |d
      f| j                  d<   |S )Nr!   r   r   transparencyr      )r   r   r    r'   r(   )	rR   r   r   r   _simple_palettematchr   r   i16)rT   rb   rc   rD   r   s        r8   
chunk_tRNSzPngStream.chunk_tRNS  s   ww"""  &1<<3$$Q' FF5M634DLL0  01^,  \\S 25a&3aDLL(
 	 \\]*+.q6DLL(  \\U"+.q63q!9c!Qi+GDLL(r7   c                    | j                   J t        j                  | j                   |      }t        |      dz  | j                  d<   |S )N     j@gamma)rR   r   r   r\   r   r   s       r8   
chunk_gAMAzPngStream.chunk_gAMA	  sD    ww"""  &1 #A 1Wr7   c                    | j                   J t        j                  | j                   |      }t        j                  dt        |      dz   d|      }t        d |D              | j                  d<   |S )N>r(   Ic              3  &   K   | ]	  }|d z    yw)r  Nr6   ).0elts     r8   	<genexpr>z'PngStream.chunk_cHRM.<locals>.<genexpr>  s     ,PS8^,Ps   chromaticity)rR   r   r   r{   unpacklentupler   )rT   rb   rc   rD   raw_valss        r8   
chunk_cHRMzPngStream.chunk_cHRM  si     ww"""  &1==1SVq[M!3Q7',,Px,P'P^$r7   c                    | j                   J t        j                  | j                   |      }|dk  rt        j                  r|S d}t	        |      |d   | j
                  d<   |S )Nr	   zTruncated sRGB chunkr   srgb)rR   r   r   r^   rC   r   r   s        r8   
chunk_sRGBzPngStream.chunk_sRGB  se     ww"""  &1A:..(CS/! tVr7   c                P   | j                   J 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<   |S |dk(  r||f| j                  d	<   |S )
Nr   zTruncated pHYs chunkr   r(   r)   r	   
F%u?dpiaspect)rR   r   r   r^   rC   r\   r   )	rT   rb   rc   rD   rG   pxpyunitr  s	            r8   
chunk_pHYszPngStream.chunk_pHYs+  s    ww"""  &1A:..(CS/!QC1IBt19v+rF{*C"%DLL  QY%'VDLL"r7   c                ~   | j                   J t        j                  | j                   |      }	 |j                  dd      \  }}|rc|j                  dd      }|j                  dd      }|dk(  r|n|| j                  |<   || j                  |<   | j                  t        |             |S # t        $ r |}d}Y vw xY w)Nr   r	   r7   r   r   replaces   exif)
rR   r   r   splitrC   rv   r   r   r   r  )rT   rb   rc   rD   kvk_strv_strs           r8   
chunk_tEXtzPngStream.chunk_tEXt=  s    ww"""  &1	775!$DAq
 HHY1EHHY	2E'(G|!DLL"'DLL""3u:.  	AA	s   B, ,B<;B<c                @   | j                   J t        j                  | j                   |      }	 |j                  dd      \  }}|r|d   }nd}|dk7  rd| d}t        |      	 t        |dd        }|r\|j                  dd      }|j                  dd	      }	|	x| j                  |<   | j                  |<   | j                  t        |	             |S # t        $ r |}d}Y w xY w# t        $ r t        j                  rd}n Y t        j                  $ r d}Y w xY w)
Nr   r	   r7   r   r   z in zTXt chunkr   r   r  )rR   r   r   r  rC   r`   rH   r^   r>   r|   rv   r   r   r   r  )
rT   rb   rc   rD   r   r!  r   rG   r"  r#  s
             r8   
chunk_zTXtzPngStream.chunk_zTXtQ  s6   ww"""  &1	775!$DAq A$KK!/}NKCc""	%ae,A HHY1EHHY	2E8==DLL$,,u"5""3u:.7  	AA	  	..  zz 	A	s)   C &C' C$#C$'DDDc                F   | j                   J t        j                  | j                   |      x}}	 |j                  dd      \  }}t        |      dk  r|S |d   |d   |dd  }}}	 |j                  dd      \  }}	}
|dk7  r|dk(  r	 t        |
      }
n|S |dk(  r|
| j                  d<   	 |j                  dd      }|j                  d	d      }|	j                  d	d      }|
j                  d	d      }t        |||      x| j                  |<   | j                  |<   | j                  t        |             |S # t        $ r |cY S w xY w# t        $ r |cY S w xY w# t        $ r t        j                  r|cY S  t        j                  $ r |cY S w xY w# t        $ r |cY S w xY w)
Nr   r	   r'   r   s   XML:com.adobe.xmpxmpr   r   r   )rR   r   r   r  rC   r  rH   r^   r>   r|   r   rv   r   r   r   r   )rT   rb   rc   rrD   r   cfcmr   tkr!  r"  lang_strtk_strr#  s                  r8   
chunk_iTXtzPngStream.chunk_iTXtt  s   ww"""$$TWWf55A	775!$DAq q6A:HaD!A$!"B	''%+KD"a 7Qw-a0A $$"#DLL	HHY1E{{7H5HYYw1FHHWh/E 59&4QQUdll51s5z*G  	H	  	H	 "  66 zz H  	H	sN   D8 'E	 E +AF 8EE	EEF7FFF F c                    | j                   J t        j                  | j                   |      }d|z   | j                  d<   |S )N   Exif  exif)rR   r   r   r   r   s       r8   
chunk_eXIfzPngStream.chunk_eXIf  s@    ww"""  &1.2Vr7   c                   | j                   J t        j                  | j                   |      }|dk  rt        j                  r|S d}t	        |      | j
                  d | _        t        j                  d       |S t        |      }|dk(  s|dkD  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)rR   r   r   r^   rC   r   warningswarnr\   r   r   )rT   rb   rc   rD   rG   n_framess         r8   
chunk_acTLzPngStream.chunk_acTL  s    ww"""  &1A:..6CS/!'#DMMPQHq6q=Hz1MMPQH#"1ayV".r7   c                   | j                   J t        j                  | j                   |      }|dk  rt        j                  r|S d}t	        |      t        |      }| j                  |dk7  s| j                  | j                  |dz
  k7  rd}t        |      || _        t        |d      t        |d      }}t        |d      t        |d	      }	}| j                  \  }
}||z   |
kD  s|	|z   |kD  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)rR   r   r   r^   rC   r\   r   r`   r   r   r   float)rT   rb   rc   rD   rG   seqwidthheightr  r  im_wim_h	delay_num	delay_dens                 r8   
chunk_fcTLzPngStream.chunk_fcTL  s~   ww"""  &1B;..6CS/!!fMM!cQhMM%$--37*B7Cc""Aq	3q!9vQSBZB\\
d:Vd 20Cc"" "BU
BK@V"1bz3q":9	>I#(#3eI6F#F#MZ #$R5Z  !"Wr7   c                x   | j                   J |dk  r?t        j                  r"t        j                  | j                   |      }|S d}t	        |      t        j                  | j                   d      }t        |      }| j                  |dz
  k7  rd}t        |      || _        | j                  |dz   |dz
        S )Nr(   z"APNG contains truncated fDAT chunkr	   r<  )	rR   r   r^   r   rC   r\   r   r`   r   )rT   rb   rc   rD   rG   rG  s         r8   
chunk_fdATzPngStream.chunk_fdAT  s    ww"""A:..((&96CS/!  !,!f==C!G#7Cc""sQw
33r7   r   )r   r   r   r   r   )rb   r   rc   r   r   r   )rb   r   rc   r   r   r   )r0   r1   r2   rU   r   r   r   r   r   r   r   r   r   r  r  r  r  r$  r&  r/  r3  r9  rN  rP  __classcell__r   s   @r8   r   r     sn    ""
2
8*."$(!F)V*<4r7   r   c                ,    | j                  t              S rQ   )
startswith_MAGIC)prefixs    r8   _acceptrW    s    V$$r7   c                       e Zd ZdZdZddZedd       Zd fdZddZ	dddZ
ddZdd	Zdd
ZddZddZd fdZ xZS )PngImageFilePNGzPortable network graphicsc                b   | j                   J t        | j                   j                  d            sd}t        |      | j                   | _        d| _        g | _        t        | j                         | _        	 | j                  j                         \  }}}	 | j                  j                  |||      }| j                  j%                  ||       Y# t        $ r Y nvt        $ rk t        j                  d|||       t        j                  | j                   |      }|dd j!                         r| j                  j#                  ||f       Y w xY w| j                  j&                  | _        | j                  j*                  | _        | j                  j.                  | _        d | _        | j                  j4                  | _        | j                  j8                  | _        | j                  j<                  xs d| _        | j0                  jA                  dd      | _!        | j                  jD                  r4| j                  jD                  \  }}tG        jH                  ||      | _%        |d	k(  r|d
z
  | _&        n|| _&        | j                  j<                  d| _'        | j                  jQ                          | jL                  | _)        | j                  jU                         | _+        | jB                  r| xj>                  dz  c_        | jY                  d       | j>                  dkD  | _-        y )Nr)   znot a PNG filer   %r %s %s (unknown)r	   r'   r   F   fdATr(   ).rR   rW  rZ   r`   _fp_PngImageFile__frameprivate_chunksr   pngrw   r   AttributeErrorrs   rt   r   r   islowerrm   r   r   _moder   _sizer   r   _textr   r   r   custom_mimetyper   r8  getr   r   r   rawpalette_PngImageFile__prepare_idat!_close_exclusive_fp_after_loadingr   _PngImageFile__rewind_idatr[   _PngImageFile__rewind_seekis_animated)rT   rG   ra   rb   rc   rD   rawmoderK   s           r8   _openzPngImageFile._open  sx   ww"""tww||A'"Cc""77
 VX%.tww%7  $xx}}Cf9HHMM#sF3 HHLLa !   ! 913VD((&9q8##%''..Qx8	9 XX%%
XX%%
HH$$	37
HH$$	#xx::,,1!YY]]?EB88 HH//MGT'++GT:DL'>"(1*D"(D88+5:D2HH  "!%!4!4D HHMMODM!!"JJqM==1,s   C 	EA0EEc                   | j                   c| j                  r*| j                  }| j                  | j                  dz
         | j                          | j                  r| j                         | j                   J | j                   S )Nr	   )rf  rp  r_  rY   r8  load)rT   frames     r8   r   zPngImageFile.text>  so     :: 		$--!+,IIK		% zz%%%zzr7   c                4   | j                   d}t        |      | j                   j                  | j                  d   d   dz
         | j                  J | j                  j                          | j                  j                          t        |           y)zVerify PNG fileNz)verify must be called directly after openr   r'   r)   )rR   RuntimeErrorrY   r   ra  r   rh   r   )rT   rG   r   s     r8   r   zPngImageFile.verifyN  sw     77?=Cs## 	TYYq\!_q()xx###r7   c                H   | j                  |      sy || j                  k  r| j                  dd       | j                  }t        | j                  dz   |dz         D ]  }	 | j                  |        y # t        $ r$}| j                  |       d}t	        |      |d }~ww xY w)Nr   Tr	   zno more images in APNG file)_seek_checkr_  ro  ranger   rY   )rT   ru  
last_framefr   rG   s         r8   rY   zPngImageFile.seek^  s    &4<<JJq$\\
t||a'3 	+A+

1	+  +		*%3sm*+s    A44	B!=BB!c                
   | j                   J t        | j                  t              r| j                  j                  |  d }|dk(  r3|r| j                  j                  | j                         | j                   j                          | j                  | _	        d | _
        | j                   j                  | _        | j                   j                  | _        | j                  | _        d | _        d | _        | j                  j%                  dd      | _        | j                  j%                  d      | _        | j                  j%                  d      | _        | j                  j%                  d      }d| _        n_|| j,                  dz   k7  rd| }t/        |      | j1                          | j"                  r0| j2                  j5                  | j"                  | j6                         | j2                  j9                         | _        | j                  | _        | j                  r1t;        j<                  | j                  | j                         d| _	        d}	 | j                  j?                  d
       	 | j                   j?                         \  }}}|dk(  rd}tG        |      |dk(  r|rd}tE        |      d	}	 | j                   jI                  |||       |r|| _        | j                   2| j(                  tR        jT                  k(  rtR        jV                  | _        d | _        | j(                  tR        jT                  k(  rX| j                   rK| j                   j9                         | _        | jY                  | j"                  | j6                        | _        y y | j(                  tR        jV                  k(  retZ        j\                  j_                  | j`                  | jb                        | _        | jY                  | j"                  | j6                        | _        y y # t@        jB                  tD        f$ r Y nw xY w# tJ        $ r Y ntF        $ r9 |dk(  r|d
z  }|r	|| _	        Y njt;        j<                  | j                  |       Y tL        $ r< tN        jQ                  d|||       t;        j<                  | j                  |       Y w xY w|| _        | j                   j                  | _        | j                  j%                  d      | _        | j                  j%                  d      | _        | j                  j%                  d      }| j                  rd}tG        |      )Nr   r   FrC  rE  r   r	   zcannot seek to frame Tr(   r   zNo more images in APNG file   fcTLzAPNG missing frame datar]  r\  zimage not found in APNG frame)2ra  r   r^  r   exrY   rn  r   rm  rk  _imr   r   r   r   rR   _prev_imdisposerh  r   
dispose_opblend_opr_  rC   rt  impastedispose_extentr   r   r   rZ   r{   r|   r`   r   rw   UnicodeDecodeErrorrb  rs   rt   r/   r5   r4   _cropr
   corefillmodesize)	rT   ru  r   r  rG   frame_startra   rb   rc   s	            r8   ro  zPngImageFile._seekm  s   xx###dhh.((++A:dmm,!&*&8&8# HH,,	 HH,,	(( DMDL!%!FD"iimmJ7DO IIMM'2DM!YY]]62NDLq((-eW5 o% IIK||dllD,?,?@ GGLLNDMhhDG ""$$TWWd.A.AB&'#KQ'+xx}}$Cf '>7C"3-''>"7)#.."&K:HHMM#sF3' T ESD == T__8L8L%L&44DO??h222}}#}}113#zz$,,8K8KL  __ 6 66 ::??499dii@DL::dllD4G4GHDL 7c k2  *  :g~!&28D/!((&9% :LL!5sCH((&9: !DL((DI"iimmJ7DO IIMM'2DM!YY]]62N995sm#s7   6P! =Q  !P=<P= 	SS( SA SSc                    | j                   S rQ   )r_  re   s    r8   r[   zPngImageFile.tell  s    ||r7   c                    | j                   j                  d      r| j                  dz   | _        | j                  | _        t
        j
                  j                  |        y)z"internal: prepare to read PNG filer   )r	   N)r   rh  decoderconfigrk  _PngImageFile__idatr   load_preparere   s    r8   r  zPngImageFile.load_prepare  sH     99==%!%!3!3d!:D))((.r7   c                d   | j                   J | j                  J | j                  dk(  r| j                  j                  d       | j                   j                         \  }}}|dvr| j                   j	                  |||       y|dk(  r)	 | j                   j                  |||       |dz
  | _        n|| _        | j                  dk(  r|dk  r| j                  }nt        || j                        }| j                  |z
  | _        | j                  j                  |      S # t        $ r Y w xY w)zinternal: read more image datar   r(   )   IDATs   DDATr]  r7   r]  )ra  rR   r  rZ   ro   rw   r   min)rT   
read_bytesra   rb   rc   s        r8   	load_readzPngImageFile.load_read  s    xx###ww"""kkQ GGLLO#xx}}Cf55c3/g~HHMM#sF3 %qj$% kkQ* ?JZ5JkkJ.ww||J''   s   D# #	D/.D/c                $   | j                   J | j                  J | j                  dk7  r%| j                  j                  | j                         	 | j                  j                  d       	 | j                   j                         \  }}}|dk(  rnU|dk(  r1| j                  r%d| _        | j                   j                  |||       n	 | j                   j                  |||       | j                   j.                  | _        | j                  s"| j                   j3                          d| _         y| j4                  rO| j6                  t8        j:                  k(  r0| j=                  | j>                  | j@                        }| j>                  jB                  dk(  r.d| jD                  v r |jG                  d| jD                  d         }n| j>                  jB                  dk(  r`d| jD                  v rR| jD                  d   }tI        |tJ              r|jM                  |       n!tI        |tN              r|jQ                  |       |jS                  d      }| j4                  jU                  || j@                  |       | j4                  | _        yyy# t        j
                  t        f$ r Y w xY w# t        $ r Y t        $ rZ |dk(  r|dz  }	 t        j                  | j                  |       n*# t        $ r}t        j                   rY d}~Y &|d}~ww xY wY 4t"        $ rm t$        j'                  d|||       t        j                  | j                  |      }|d	d
 j)                         r| j*                  j-                  ||df       Y w xY w)z%internal: finished reading image dataNr   Tr(   r   r~  r]  r\  r	   r'   r    r   r&   r!   )+ra  rR   r  rZ   r{   r|   r`   rp  rk  ro   rw   r  r   r   r   r   r^   rb  rs   rt   rc  r`  rm   r   rf  rh   r  r  r:   r<   r  r  r  r  r   convert_transparentr   r   putpalettealphasr   putpalettealphaconvertr  )	rT   ra   rb   rc   r   rD   updatedmaskts	            r8   load_endzPngImageFile.load_end   s   xx###ww""";;!GGLL%GGLLO#'88==? S& g~D$4$4&'#c3/?c3/# F XX%%
HHNNDH}}%--!?**TWWd.A.AB77<<5(^tyy-H"66		. 9D ww||s*~/J IIn5%a/#44Q7'3/#33A6"??62D##GT-@-@$G-- "@}G LL+.  &  	 '>aKF ((&9   66	  : " ?13VD((&9q8##%''..Q~>	?sa   .J 	J- J*)J*-	N9N K-,N-	L6LNLLNA1NNc                    d| j                   vr| j                          d| j                   vrd| j                   vry | j                         j                         S )Nr2  zRaw profile type exif)r   rt  getexif_get_merged_dictre   s    r8   _getexifzPngImageFile._getexif?  sG    "IIK"'>dii'O||~..00r7   c                \    d| j                   vr| j                          t        |          S )Nr2  )r   rt  r   r  )rT   r   s    r8   r  zPngImageFile.getexifF  s%    "IIKw  r7   r   )r   zdict[str, str | iTXt])ru  r   r   r   r   )ru  r   r   r   r   r   )r   r   )r  r   r   r   )r   zdict[int, Any] | None)r   z
Image.Exif)r0   r1   r2   formatformat_descriptionrr  propertyr   r   rY   ro  r[   r  r  r  r  r  rQ  rR  s   @r8   rY  rY    s`    F4B-H   +bIH/!(F=(~1! !r7   rY  )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&   c                    dj                  |      }| j                  t        t        |            |z          | j                  |       t	        |t	        |            }| j                  t        |             y)z'Write a PNG chunk (including CRC field)r7   N)joinwriteo32r  rM   )rR   ra   rK   	byte_datar   s        r8   putchunkr  d  sW     IHHSY 3&'HHY
F3K
(CHHSXr7   c                      e Zd ZddZddZy)_idatc                     || _         || _        y rQ   )rR   chunk)rT   rR   r  s      r8   rU   z_idat.__init__r  s    
r7   c                >    | j                  | j                  d|       y )Nr  )r  rR   rT   rK   s     r8   r  z_idat.writev  s    

477GT*r7   N)rR   r   r  Callable[..., None]r   r   rK   r   r   r   r0   r1   r2   rU   r  r6   r7   r8   r  r  o  s    +r7   r  c                      e Zd ZddZddZy)_fdatc                .    || _         || _        || _        y rQ   )rR   r  r   )rT   rR   r  r   s       r8   rU   z_fdat.__init__}  s    
r7   c                    | j                  | j                  dt        | j                        |       | xj                  dz  c_        y )Nr]  r	   )r  rR   r  r   r  s     r8   r  z_fdat.write  s/    

477GS%6=r7   N)rR   r   r  r  r   r   r   r   r  r  r6   r7   r8   r  r  z  s    
r7   r  c                    |j                  dd      |j                  dd      |j                  dd      |j                  dd      f| _        y )NoptimizeFcompress_levelcompress_type
dictionaryr7   )rh  encoderconfig)r  encoderinfos     r8   _apply_encoderinfor    sE    
E*("-,c*	Br7   c                  ,    e Zd ZU ded<   ded<   ded<   y)_FrameImage.Imager  z tuple[int, int, int, int] | Noner   dict[str, Any]r  Nr   r6   r7   r8   r  r    s    O
**r7   r  c                   | j                   j                  d      }| j                   j                  d| j                  j                  dd            }| j                   j                  d| j                  j                  dt        j                              }	| j                   j                  d| j                  j                  dt
        j                              }
|rt        j                  |      }nt        j                  | g|      }g }d}|D ]  }t        j                  |      D ]  }|j                  |k(  r|j                         }n|j                  |      }| j                   j                         }t        |t        t         f      r	||   |d<   n"| d|j                  v r|j                  d   |d<   t        |	t        t         f      r|	|   |d<   t        |
t        t         f      r|
|   |d<   |dz  }|r|d   }|j                   j                  d      }|j                   j                  d      }|t        j"                  k(  rt%        |      dk  rt        j&                  }|t        j&                  k(  r|j(                  j                         }t*        j,                  j/                  d	| j0                  d
      }|j2                  }|r|j5                  |      }nd| j0                  z   }|j7                  ||       n/|t        j"                  k(  r|d   j(                  }n|j(                  }t9        j:                  |j                  d	      |j                  d	            }|j=                  d      }|sJ||j                  d      k(  r6||j                  d      k(  r"d|v r|j                   dxx   |d   z  cc<   d }|j?                  tA        |||               t%        |      dk(  r|s|d   j(                  S  ||dtC        t%        |            tC        |             |r| j                  |k(  r| n| j                  |      }tE        || j                          tG        jH                  |tK        tL        tN           tQ        ||            tG        jR                  dd| j0                  z   d|      g       d}tU        |      D ]<  \  }}|j(                  }|j2                  sd|j0                  z   }n|j2                  }|j5                  |      }|j0                  }|j                   }|j                  dd      }tW        |dz        jY                  d      }|jZ                  dkD  rd}t]        |      |j                  d|	      } |j                  d|
      }! ||dtC        |      tC        |d         tC        |d         tC        |d         tC        |d         t_        |jZ                        t_        |j`                        tc        |       tc        |!             |dz  }tE        || j                          |dk(  r^|s\tG        jH                  |tK        tL        tN           tQ        ||            tG        jR                  dd|j0                  z   d|      g       te        |||      }"tG        jH                  |tK        tL        tN           |"      tG        jR                  dd|j0                  z   d|      g       |"jf                  }? y )NrA  r5  r   rC  rE  r	   r  r'   r&   )r   r   r   r   r   F)
alpha_onlys   acTLr   r@    zcannot write durationr~  )4r  rh  r   r/   r3   r:   r;   	itertoolschainr   Iteratorr  r   r  r   listr  r5   r  r4   r  r
   r  r  r  r   cropr  r   subtract_modulogetbboxrm   r  r  r  r   _saver   r   r   r  r   	enumerater   limit_denominator	numeratorrC   o16denominatorr   r  r   )#r  rR   r  r  rq  r   append_imagesrA  r5  rC  rE  r  	im_framesframe_countim_seqim_framer  previousprev_disposal
prev_blendbase_imr  r   delta
default_imr   ru  
frame_datar  frame_durationdelayrG   frame_disposalframe_blendfdat_chunkss#                                      r8   _write_multiple_framesr    s    ~~!!*-H>>fbggkk&!&<=D~~!!*bggkk*hFVFV.WXHNNwGU__(MNE.m4 IK 3B%..v6 2	BH}}$#==?#++D1..--/K(T5M2*2;*?J'!jHMM&A*2--
*CJ'(T5M2*2;*?J'%$/',['9G$1K$R= ( 4 4 8 8 D%1155g>
 H$8$88S^a=O$,$:$:M H$:$::&kk..0G#jjoofbgg|LG#==D"),,t"4%/MM'40"h&:&::'m..G&kkG"22$$V,goof.E }}}6%)DD"koog&>>"k1((4J8OO4VHdK@Ae2	B3Bj 9~=| 

C	ND		 77d?R

40@
:r~~6EE"e,-__UFRWW$4aAB	
 G&y1 /*z==HMM)D??D}}T*H}} ,,$Q7$./AA%H??U")CS/!$X>!oogu5LQLQLQLQL !!"~{O	
 	18R^^4A:mOORYb% 01(>7KL  E73KOORY,(>7KL
 "))G_/*` r7   c                "    t        | ||d       y )NT)save_all)r  )r  rR   filenames      r8   	_save_allr  )  s    	"b(T*r7   c                  ( |r| j                   j                  d| j                  j                  d            }t               }t               (| j                   j                  dg       }t	        j
                  | g|      D ]R  }t        j                  |      D ]8  }	|j                  |	j                         (j                  |	j                         : T dD ]  }
|
|v s n |j                         }
t        (fdt        d      D              }n| j                  }| j                  }
|
}|
dk(  rd| j                   v rt        d| j                   d   z  d	      }nL| j                  r>t!        t        t#        | j                  j%                         d         d
z  d	      d      }nd	}|dk  r|dk  rd}n
|dk  rd}nd}|d| z  }	 t&        |   \  }}}|dk(  rt-        ddd       |j/                  t0                ||dt3        |d         t3        |d         ||ddd	       g d}| j                   j                  d| j                  j                  d            }|r8d}|dz   t5        j6                  |      z   } ||d|       |j9                  d       | j                   j                  d      }|rg d}|j:                  D ]o  }|d d \  }}||v r|j9                  |        ||||       +||v r ||||       :|dd j=                         sNt#        |      d
k(  xr |d   }|rf ||||       q | j                  dk(  rOd
z  }| j>                  jA                  d      d | }t#        |      |k  r|dz  }t#        |      |k  r ||d |       | j                   j                  d!| j                  j                  d!d             }|s|dk(  r| j                  dk(  rM} tC        |tD              r ||d"|d |         nt!        dt        d#|            }d$|z  dz   }! ||d"|!d |         n| j                  d%v r*t!        dt        d&|            } ||d"tG        |             n| j                  dk(  r2|\  }"}#}$ ||d"tG        |"      tG        |#      z   tG        |$      z          nrd!| j                   v rdd'}t+        |      | j                  dk(  rH| j>                  jI                         d(k(  r+| j>                  jA                  d(d)      }!}  ||d"|!d |         | j                   j                  d*      }%|%rB ||d+t3        tK        |%d   d,z  d-z               t3        tK        |%d   d,z  d-z               d.       |r=d/d0g}|j:                  D ]*  }|d d \  }}||v s|j9                  |        ||||       , | j                   j                  d1      }&|&rKtC        |&tL        jN                        r|&jQ                  d2      }&|&jS                  d3      r|&d4d  }& ||d5|&       | }'|rtU        | |||
|      }'|'rptW        |'| j                          tY        jZ                  |'t]        t^        tD           ta        ||            tY        jb                  d6d7|'j                  z   d|      g       |rO|j:                  D ]@  }|d d \  }}|dd j=                         st#        |      d
k(  xr |d   }|s7 ||||       B  ||d8d9       te        |d:      r|jg                          y y # t(        $ r}d|
 d}t+        |      |d }~ww xY w);Nr   r  )r&   r    r!   c              3  H   K   | ]  t        fd D                yw)c              3  (   K   | ]	  }|     y wrQ   r6   )r	  
frame_sizer   s     r8   r  z"_save.<locals>.<genexpr>.<genexpr>F  s     ?:A?s   N)max)r	  r   sizess    @r8   r  z_save.<locals>.<genexpr>F  s     RAS???Rs   "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   r    s   PLTEr   s   tRNSr      )r   r   r  r   r  z%cannot use transparency for this moder&   Ar  s   pHYsr  g      ?r  s   bKGDs   hISTr2  r)   r1  r,   s   eXIfr   r   r   r7   flush)4r  rh  r   setr  r  r   r  r   r  r  rX   r  rz  r  rj  r  r  getdata	_OUTMODESKeyErrorr   r   r  rU  r  r>   r   remover   rc  r  
getpaletter   r   r  getpalettemoder   r
   ExiftobytesrT  r  r  r   r  r   r   r  r   hasattrr  ))r  rR   r  r  r  r   modesr  r  r  r  r  outmodecolorsr  rq  	bit_depth
color_typer   rG   r   iccnamerK   r   chunks_multiple_allowed
info_chunkra   r   palette_byte_numberpalette_bytesr   alpha_bytesalpharedgreenbluer  r2  	single_imr  s)                                           @r8   r  r  -  s    **RWW[[9
 **?B?oordM: 	)F)226: )		(--(		(--()	) ) 	Du}	 99;DRqRRwwwwGs{ R^^#bnnV44c:F zzSRZZ%7%7%9!%<!=!BCH!LR<{14&z!G")27);&J #~/B
 HHV	
DGDG
 DF
..

]BGGKK,F
GC
 g~c 22b'4  	g>>i(D"F++ 	)J"2AICf}c"b#t$//b#t$Qq!!# _1Cjm
!"c4(	) 
ww#~$qj((/0D1DE- #66U"M - #66b'=)>>%%nbggkk.RV6WXL|q(77c> K,.b'<#=>"1c#|&<=,.6b'5+#67WW//q#e\":;L"gs<01WW+C"gs3x#e*4s4y@A/ >cl"77c>bee224>EE$$VS1E K"gu\k23
..

U
#C
CFVOc)*+CFVOc)*+	
 7#++ 	%J"2AICf}c"b#t$		% >>f%DdEJJ'<<?D???+8Db'4 $&I*E4-
	 9bnn5EE"e,-__UFY^^$;QHI	
 ++ 	)J"2AIC1Qx! _1Cjm
"c4(	) 
"gsr7

 a  ""4&0cl!"s   \ 	\>'\99\>c                p    ddl m} g dfd} |       }	 || _        t        | |d|       | `S # | `w xY w)z4Return a list of PNG chunks representing this image.r   )BytesIOc                    dj                  |      }t        t        |t        |                  }j                  |||f       y )Nr7   )r  r  rM   rm   )rR   ra   rK   r  r   r   s        r8   rm   zgetchunks.<locals>.append  s8    HHTN	&F3K01sIs+,r7   r   rR   r   ra   r   rK   r   r   r   )ior$  r  r  )r  paramsr$  rm   rR   r   s        @r8   	getchunksr)    sF    F-
 
Bb"b&!NM Ns   1 5z.pngz.apngz	image/png)rD   r   r   r   )r   )rK   r   rL   r   r   r   )rV  r   r   r   r&  )r  r  r  r  r   r   )r  r  rR   r   r  r  r  r   rq  r   r   Image.Image | Noner  zlist[Image.Image]r   r*  )r  r  rR   r   r  r   r   r   )r  r  rR   r   r  r   r  r  r  r   r   r   )r  r  r(  r   r   z list[tuple[bytes, bytes, bytes]])R
__future__r   r  loggingrer{   r6  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   	getLoggerr0   rs   compiler   r]   rU  r   r   	SAFEBLOCKrA   r   r/   r:   rH   rM   rO   r   r   r   r   r   rW  rY  r
  r  r  r  r  r  r  r  r  r)  register_openr  register_saveregister_save_allregister_extensionsregister_mimer6   r7   r8   <module>r>     s  B #   	      ' ' G G ! !  ! ! !  ($			8	$	L	!	'	' 
 !+
2 "**01$$
 ~%w *G /[ [|3 6Y3 Y3@: f4 f4Z%T!9&& T!x
 
!$$$	 
"	$'($$$	 $&!	(+ +
 
 Z  PPP P 	P
 P &P %P Pf+ "*III I 	I
 I 
I`2   L''w ?   L'' /   ++Y 7   ,--/@ A   L'' 5r7   