Uname:Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64

403WebShell
403Webshell
Server IP : 3.111.61.48  /  Your IP : 216.73.216.67
Web Server : Apache
System : Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64
User : ubuntu ( 1000)
PHP Version : 8.2.31
Disable Function : exec,passthru,shell_exec,system
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/lib/python3/dist-packages/PIL/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib/python3/dist-packages/PIL/__pycache__/PngImagePlugin.cpython-310.pyc
o

Z#�at��@s$ddlZddlZddlZddlZddlZddlZddlmZmZm	Z	m
Z
mZddlm
ZddlmZddlmZddlmZddlmZe�e�Ze�d	�jZd
Zddd
ddddddddddddd�Ze�d�Ze	jZ 	de Z!	dZ"	dZ#	dZ$	dZ%	dZ&	dd�Z'dNd d!�Z(Gd"d#�d#�Z)Gd$d%�d%e*�Z+Gd&d'�d'�Z,Gd(d)�d)e)�Z-d*d+�Z.Gd,d-�d-e	j	�Z/d.d/d0d1d2d3d4d4d5d6d7d8d9d:d;�Z0d<d=�Z1Gd>d?�d?�Z2Gd@dA�dA�Z3dBdC�Z4dDdE�Z5e1dFfdGdH�Z6dIdJ�Z7e�8e/j9e/e.�e�:e/j9e6�e�;e/j9e5�e�<e/j9dKdLg�e�=e/j9dM�dS)O�N�)�Image�
ImageChops�	ImageFile�ImagePalette�
ImageSequence)�i16be)�i32be)�o8)�o16be)�o32bes\w\w\w\ws�PNG

)�1r
)�L�L;2)r�L;4)rr)�I�I;16B)�RGBr)rzRGB;16B)�P�P;1)r�P;2)r�P;4)rr)�LAr)�RGBAzLA;16B)rr)rzRGBA;16B))rr)�r)�r)�r)�r)rr)rr)r�)rr)rr)rr)rr)rr)r�)rrs^�*�*$�@rcCs&t��}|�|t�}|jrtd��|S)NzDecompressed Data Too Large)�zlib�
decompressobj�
decompress�MAX_TEXT_CHUNK�unconsumed_tail�
ValueError)�s�dobj�	plaintext�r*�4/usr/lib/python3/dist-packages/PIL/PngImagePlugin.py�_safe_zlib_decompress�s
r,cCst�||�d@S)Nl��)r!�crc32)�data�seedr*r*r+�_crc32��r0c@s^eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zddd�ZdS)�ChunkStreamcCs||_g|_dS�N)�fp�queue��selfr4r*r*r+�__init__�s
zChunkStream.__init__cCs~d}|jr|j��\}}}|j�|�n|j�d�}|dd�}|j��}t|�}t|�s:tj	s:t
dt|��d���|||fS)z.Fetch a new chunk. Returns header information.Nrrzbroken PNG file (chunk �))r5�popr4�seek�read�tell�i32�is_cidr�LOAD_TRUNCATED_IMAGES�SyntaxError�repr)r7�cid�pos�lengthr'r*r*r+r<�s

zChunkStream.readcCs|Sr3r*�r7r*r*r+�	__enter__��zChunkStream.__enter__cGs|��dSr3)�close)r7�argsr*r*r+�__exit__�szChunkStream.__exit__cCsd|_|_|_dSr3)r5�crcr4rFr*r*r+rI�szChunkStream.closecCs|j�|||f�dSr3)r5�append�r7rCrDrEr*r*r+�push�szChunkStream.pushcCs*t�d|||�t|d|�d��||�S)z"Call the appropriate chunk handlerzSTREAM %r %s %s�chunk_�ascii)�logger�debug�getattr�decoderNr*r*r+�call�szChunkStream.callc
Cs�tjr|dd?d@r|�||�dSz t|t|��}t|j�d��}||kr1tdt|��d���WdSt	j
yK}ztdt|��d��|�d}~ww)	zRead and verify checksumr�rNrz(broken PNG file (bad header checksum in r9z(broken PNG file (incomplete checksum in )rr@�crc_skipr0r>r4r<rArB�struct�error)r7rCr.�crc1�crc2�er*r*r+rL�s&������zChunkStream.crccCs|j�d�dS)z3Read checksum.  Used if the C module is not presentrN)r4r<)r7rCr.r*r*r+rX�szChunkStream.crc_skip�IENDc
Csng}	z	|��\}}}Wntjy}ztd�|�d}~ww||kr&	|S|�|t�|j|��|�|�q)NTztruncated PNG file)	r<rYrZ�OSErrorrLr�
_safe_readr4rM)r7�endchunk�cidsrCrDrEr]r*r*r+�verify�s
���
�zChunkStream.verifyN)r^)
�__name__�
__module__�__qualname__r8r<rGrKrIrOrVrLrXrcr*r*r*r+r2�sr2c@seZdZdZeddd��ZdS)�iTXtzq
    Subclass of string to allow iTXt chunks to look like strings while
    keeping their extra information

    NcCst�||�}||_||_|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�textrjrkr7r*r*r+ri�s	ziTXt.__new__)NN)rdrerf�__doc__�staticmethodrir*r*r*r+rg�srgc@s6eZdZdZdd�Zd
dd�Zddd	�Zd
d
d�ZdS)�PngInfoz<
    PNG chunk container (for use with save(pnginfo=))

    cCs
g|_dSr3)�chunksrFr*r*r+r8	s
zPngInfo.__init__FcCs*||g}|r|�d�|j�t|��dS)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)rMrq�tuple)r7rCr.�
after_idat�chunkr*r*r+�adds

zPngInfo.add�cCs�t|t�s|�dd�}t|t�s|�dd�}t|t�s!|�dd�}t|t�s,|�dd�}|rE|�d|d|d|dt�|��dS|�d|d|d|d|�dS)	z�Appends an iTXt chunk.

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

        �latin-1�strict�utf-8�iTXts�sN)�
isinstance�bytes�encoderur!�compress)r7�key�valuerjrk�zipr*r*r+�add_itxts



 �(zPngInfo.add_itxtcCs�t|t�r|j|||j|j|d�St|t�s0z|�dd�}Wnty/|j|||d�YSwt|t�s;|�dd�}|rL|�d|dt	�
|��dS|�d|d|�dS)	z�Appends a text chunk.

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

        )r�rwrx�zTXt��tEXtr{N)r|rgr�rjrkr}r~�UnicodeErrorrur!r)r7r�r�r�r*r*r+�add_text7s
	
�
zPngInfo.add_textN�F)rvrvF)rdrerfrnr8rur�r�r*r*r*r+rps

rpcs�eZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Z�ZS)+�	PngStreamcsRt��|�i|_i|_d|_d|_d|_d|_d|_d|_	d|_
d|_d|_dS)N�rrr)
�superr8�im_info�im_text�im_size�im_mode�im_tile�
im_palette�im_custom_mimetype�im_n_frames�_seq_num�rewind_state�text_memoryr6��	__class__r*r+r8Xs
zPngStream.__init__cCs.|j|7_|jtkrtd|j�d���dS)Nz%Too much memory used in text chunks: z>MAX_TEXT_MEMORY)r��MAX_TEXT_MEMORYr&)r7�chunklenr*r*r+�check_text_memoryis
���zPngStream.check_text_memorycCs|j��|j|jd�|_dS)N)�info�tile�seq_num)r��copyr�r�r�rFr*r*r+�save_rewindqs�zPngStream.save_rewindcCs(|jd|_|jd|_|jd|_dS)Nr�r�r�)r�r�r�r�rFr*r*r+�rewindxszPngStream.rewindcCs�t�|j|�}|�d�}t�d|d|��t�d||�||}|dkr.td|�d���zt||dd��}WntyJtj	rGd}n�Ynt
jyUd}Ynw||jd<|S)	Nr{ziCCP profile name %rzCompression method %sr�Unknown compression method z in iCCP chunkr�icc_profile)
rr`r4�findrRrSrAr,r&r@r!rZr�)r7rDrEr'�i�comp_methodr�r*r*r+�
chunk_iCCP}s&
��
zPngStream.chunk_iCCPcCs~t�|j|�}t|d�t|d�f|_zt|d|df\|_|_Wn	ty+Ynw|dr5d|j	d<|dr=t
d	��|S)
Nrrr�	�r�	interlace�zunknown filter category)rr`r4r>r��_MODESr��
im_rawmode�	Exceptionr�rA�r7rDrEr'r*r*r+�
chunk_IHDR�s �
zPngStream.chunk_IHDRcCs\d|jvrd|jd||jfg}n|jdurd|jd<dd|j||jfg}||_||_t�)N�bboxr�T�
default_imager�)r�r�r�r�r��im_idat�EOFError)r7rDrEr�r*r*r+�
chunk_IDAT�s


zPngStream.chunk_IDATcCst�r3)r�)r7rDrEr*r*r+�
chunk_IEND��zPngStream.chunk_IENDcCs&t�|j|�}|jdkrd|f|_|S)Nrr)rr`r4r�r�r�r*r*r+�
chunk_PLTE�s

zPngStream.chunk_PLTEcCs�t�|j|�}|jdkr(t�|�r!|�d�}|dkr||jd<|S||jd<|S|jdvr6t|�|jd<|S|jdkrKt|�t|d�t|d�f|jd<|S)	Nrr{r�transparency�r
rrrrr)	rr`r4r��_simple_palette�matchr�r��i16)r7rDrEr'r�r*r*r+�
chunk_tRNS�s



	
�
�
� zPngStream.chunk_tRNScCs$t�|j|�}t|�d|jd<|S)N�j�@�gamma�rr`r4r>r�r�r*r*r+�
chunk_gAMA�szPngStream.chunk_gAMAcCsBt�|j|�}t�dt|�d|�}tdd�|D��|jd<|S)Nz>%dIrcss�|]}|dVqdS)r�Nr*)�.0�eltr*r*r+�	<genexpr>�s�z'PngStream.chunk_cHRM.<locals>.<genexpr>�chromaticity)rr`r4rY�unpack�lenrrr�)r7rDrEr'�raw_valsr*r*r+�
chunk_cHRM�szPngStream.chunk_cHRMcCs t�|j|�}|d|jd<|S)Nr�srgb�rr`r4r�r�r*r*r+�
chunk_sRGB�szPngStream.chunk_sRGBcCslt�|j|�}t|d�t|d�}}|d}|dkr)|d|df}||jd<|S|dkr4||f|jd<|S)Nrrrr�
F%u�?�dpi�aspectr�)r7rDrEr'�px�py�unitr�r*r*r+�
chunk_pHYs�s
�zPngStream.chunk_pHYscCs�t�|j|�}z
|�dd�\}}Wn
ty|}d}Ynw|rD|�dd�}|�dd�}|dkr3|n||j|<||j|<|�t	|��|S)Nr{r�rwrx�replace�exif)
rr`r4�splitr&rUr�r�r�r�)r7rDrEr'�k�v�v_strr*r*r+�
chunk_tEXt�s�
zPngStream.chunk_tEXtcCs�t�|j|�}z
|�dd�\}}Wn
ty|}d}Ynw|r&|d}nd}|dkr4td|�d���z
t|dd��}WntyNtjrKd}n�Yntj	yYd}Ynw|ry|�
dd�}|�
dd	�}||j|<|j|<|�
t|��|S)
Nr{rr�rr�z in zTXt chunkrwrxr�)rr`r4r�r&rAr,r@r!rZrUr�r�r�r�)r7rDrEr'r�r�r�r*r*r+�
chunk_zTXts8�
��zPngStream.chunk_zTXtcCslt�|j|�}}z
|�dd�\}}Wnty|YSwt|�dkr'|S|d|d|dd�}}}z|�dd�\}}	}
WntyM|YSw|dkry|dkrwzt|
�}
Wntyktjrj|YS�tj	yv|YSw|Sz|�
dd�}|�
dd�}|	�
dd�}	|
�
dd�}
Wnty�|YSwt|
||	�|j
|<|j|<|�t|
��|S)Nr{rrrrwrxry)rr`r4r�r&r�r,r@r!rZrUr�rgr�r�r�)r7rDrE�rr'r��cf�cmrj�tkr�r*r*r+�
chunk_iTXt3sJ� ���zPngStream.chunk_iTXtcCs t�|j|�}d||jd<|S)N�Exifr�r�r�r*r*r+�
chunk_eXIf\szPngStream.chunk_eXIfcCsrt�|j|�}|jdurd|_t�d�|St|�}|dks"|dkr)t�d�|S||_t|d�|jd<d|_|S)Nz4Invalid APNG, will use default PNG image if possiblerlr�loopz
image/apng)	rr`r4r��warnings�warnr>r�r�)r7rDrEr'�n_framesr*r*r+�
chunk_acTLbs


zPngStream.chunk_acTLc
Cst�|j|�}t|�}|jdur|dks |jdur$|j|dkr$td��||_t|d�t|d�}}t|d�t|d�}}|j\}	}
|||	ksN|||
krRtd��||||||f|jd	<t|d
�t|d�}}|dkrpd}t	|�t	|�d
|jd<|d|jd<|d|jd<|S)Nrr�#APNG contains frame sequence errorsrrr�rzAPNG contains invalid framesr����d���duration��disposal��blend)
rr`r4r>r�rAr�r�r��float)
r7rDrEr'�seq�width�heightr�r��im_w�im_h�	delay_num�	delay_denr*r*r+�
chunk_fcTLqs&
zPngStream.chunk_fcTLcCsFt�|jd�}t|�}|j|dkrtd��||_|�|d|d�S)Nrrr�)rr`r4r>r�rAr�)r7rDrEr'r�r*r*r+�
chunk_fdAT�szPngStream.chunk_fdAT)rdrerfr8r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��
__classcell__r*r*r�r+r�Ws,
	
")r�cCs|dd�tkS)Nr)�_MAGIC)�prefixr*r*r+�_accept�r1rcs�eZdZdZdZdd�Zedd��Zdd�Zd	d
�Z	ddd
�Z
dd�Zdd�Zdd�Z
dd�Zdd�Z�fdd�Zdd�Zdd�Z�ZS)�PngImageFile�PNGzPortable network graphicsc	Cs�t|j�d��std��|j|_d|_g|_t|j�|_	|j��\}}}z
|j�	|||�}Wn0t
y8Yn0ty_t�
d|||�t�|j|�}|dd���r]|j�||f�Ynw|j�||�q|jj|_|jj|_|jj|_d|_|jj|_|jj|_|jjp�d|_|j� dd	�|_!|jj"r�|jj"\}}t#�$||�|_%|d
kr�|d|_&n||_&|jjdur�d	|_'|j�(�|j&|_)|j�*�|_+|j!r�|jd7_|�,d�|jdk|_-dS)Nrznot a PNG filerT�%r %s %s (unknown)rrr�F�fdATr).rr4r<rA�_PngImageFile__fp�_PngImageFile__frame�private_chunksr��pngrVr��AttributeErrorrRrSrr`�islowerrMrLr��moder��_sizer�r��_textr�r�r��custom_mimetyper�r��getr�r�r�raw�palette�_PngImageFile__prepare_idat�!_close_exclusive_fp_after_loadingr��_PngImageFile__rewind_idatr=�_PngImageFile__rewind�_seek�is_animated)r7rCrDrEr'�rawmoder.r*r*r+�_open�sX���






zPngImageFile._opencCsD|jdur|jr|j}|�|jd�|��|jr|�|�|jS)Nr)rrrr;r��load)r7�framer*r*r+rm�s

zPngImageFile.textcCsZ|jdur	td��|j�|jddd�|j��|j��|jr(|j��d|_dS)zVerify PNG fileNz)verify must be called directly after openrrr)r4�RuntimeErrorr;r�r
rcrI�
_exclusive_fprFr*r*r+rc�s




zPngImageFile.verifycCs�|�|�sdS||jkr|�dd�|j}t|jd|d�D]}z|�|�Wqty>}z
|�|�td�|�d}~wwdS)NrTrzno more images in APNG file)�_seek_checkrr�ranger�r;)r7r�
last_frame�fr]r*r*r+r;s



���zPngImageFile.seekFc	Cs�|dkrT|r-|j�|j�|j��|j|_d|_|jrd|_|jj	|_
|jj|_|j|_
d|_d|_|j
�dd�|_|j
�d�|_|j
�d�|_|j
�d�|_d|_n�||jdkrbtd|����|��|jrr|j�|j|j�|j��|_|j|_
|jr�t�|j
|j�d|_d}	|j
�d
�z
|j��\}}}Wntjtfy�Yn`w|dkr�t d��|d
kr�|r�td��d	}z
|j�!|||�Wn?t"y�Yn8t y�|dkr�|d
8}|r�||_Yn#t�|j
|�Ynt#�yt$�%d|||�t�|j
|�Ynwq�||_|jj|_|j
�d�|_|j
�d�|_|j
�d�|_|j�s,t �|jdu�r;|jt&k�r;t'|_|jt&k�rR|j��|_|�(|j|j�|_dS|jt'k�rmt)j*�+|j,|j-�|_|�(|j|j�|_dSd|_dS)Nrr�Fr�r�r�rzcannot seek to frame Trr^zNo more images in APNG file�fcTLzAPNG missing frame datarr).rr;rr
r�rr�im�pyaccessr�r�r�r�r4�_prev_im�disposerr��
dispose_op�blend_op�dispose_extentrr&r�paster�rr`r<rYrZrAr�rV�UnicodeDecodeErrorrrRrS�APNG_DISPOSE_OP_PREVIOUS�APNG_DISPOSE_OP_BACKGROUND�_cropr�core�fillr
�size)r7rr��frame_startrCrDrEr*r*r+rs�


���

zPngImageFile._seekcCs|jSr3)rrFr*r*r+r=lszPngImageFile.tellcCs0|j�d�r|jd|_|j|_tj�|�dS)z"internal: prepare to read PNG filer�)rN)r�r�
decoderconfigr�_PngImageFile__idatr�load_preparerFr*r*r+r7oszPngImageFile.load_preparecCs�|jdkrG|j�d�|j��\}}}|dvr!|j�|||�dS|dkr?z
|j�|||�Wn	ty8Ynw|d|_n||_|jdks|dkrO|j}nt||j�}|j||_|j�|�S)zinternal: read more image datarr)�IDATsDDATrr�r)r6r4r<r
rOrVr��min)r7�
read_bytesrCrDrEr*r*r+�	load_readxs(
�
�zPngImageFile.load_readc	Cs�|jdkr|j�|j�	|j�d�z
|j��\}}}Wntjtfy)Ynmw|dkr/ng|dkrB|jrBd|_|j�	|||�nTz
|j�
|||�WnHtyUYnAtyl|dkrc|d8}t
�|j|�Yn)ty�t�d|||�t
�|j|�}|dd	���r�|j�||df�Ynwq
|jj|_|js�|j��d
|_d
S|jr�|jtkr�|�|j|j�}|j�||j|�d��|j|_|j r�d
|_ d
Sd
Sd
Sd
S)z%internal: finished reading image datarTrr^r$rrrrNr)!r6r4r<r
rYrZrArrrOrVr-r�rr`rrRrSrr	rMr�rrIr'r*�APNG_BLEND_OP_OVERr0r%r+r,�convertr&)r7rCrDrEr'�updatedr*r*r+�load_end�sZ
����


�
�zPngImageFile.load_endcCs6d|jvr	|��d|jvrd|jvrdS|����S)Nr�zRaw profile type exif)r�r�getexif�_get_merged_dictrFr*r*r+�_getexif�s

zPngImageFile._getexifcsd|jvr	|��t���S)Nr�)r�rr�r@rFr�r*r+r@�s

zPngImageFile.getexifcCsd|jvr
|�|jd�SiS)z�
        Returns a dictionary containing the XMP tags.
        Requires defusedxml to be installed.
        :returns: XMP tags in a dictionary.
        zXML:com.adobe.xmp)r��_getxmprFr*r*r+�getxmp�s

���zPngImageFile.getxmpcCsPz#z
|j|jkr
|j��Wn	tyYnwWd|_dSWd|_dSd|_wr3)rr4rIrrFr*r*r+�
_close__fp�s
���
�zPngImageFile._close__fpr�)rdrerf�format�format_descriptionr�propertyrmrcr;rr=r7r;r?rBr@rDrEr�r*r*r�r+r�s"D

Z	!/r)r
�)�L;1rI)rs)rs)rs)rs)rs)rs)rs)rr�)rs)rs)rs)r
rJrrrrrzI;16rrrrrrcGsJd�|�}|�tt|��|�|�|�t|t|��}|�t|��dS)z'Write a PNG chunk (including CRC field)r�N)�join�write�o32r�r0�r4rCr.rLr*r*r+�putchunks


rOc@�eZdZdd�Zdd�ZdS)�_idatcCs||_||_dSr3)r4rt)r7r4rtr*r*r+r8s
z_idat.__init__cCs|�|jd|�dS)Nr8)rtr4�r7r.r*r*r+rL�z_idat.writeN�rdrerfr8rLr*r*r*r+rQsrQc@rP)�_fdatcCs||_||_||_dSr3)r4rtr�)r7r4rtr�r*r*r+r8s
z_fdat.__init__cCs*|�|jdt|j�|�|jd7_dS)Nrr)rtr4rMr�rRr*r*r+rLsz_fdat.writeNrTr*r*r*r+rUsrUcCs.|j�d|j�d��}|j�d|j�dd��}|j�d|j�dd��}|j�d|j�dt��}|j�d|j�dt��}|rHt�|j�dg��}	nt�|g|j�dg��}	g}
d}|	D]�}t�|�D]�}
|
�	�}
|
j
|j
kr�|j
dkr||
j|j
|jd	�}
n|
�|j
�}
|j�	�}t
|ttf�r�|||d<t
|ttf�r�|||d<t
|ttf�r�|||d<|d
7}|
�rE|
d}|d�d�}|d�d�}|tkr�t|
�d
kr�t}|tkr�|d}tj�d|jd�}|d}|r�|�|�}nd|j}|�||�n|tk�r|
dd}n|d}t�|
�d�|�d��}|��}|�sD||�d�k�rD||�d�k�rDt
|ttf��rC|dd|d7<qand}|
�|
||d��qaqZ||dtt|
��t|��|�rtt�|t ||�dd|jd|fg�d}t!|
�D]�\}}|d}
|d�s�d|
j}n	|d}|
�|�}
|
j}|d}t"t#|�d|���}|�d|�}|�d|�}||dt|�t|d�t|d
�t|d�t|d
�t$|�t$d�t%|�t%|��|d
7}|dk�r�|�s�t�|
t ||�dd|
jd|fg��qzt&|||�}t�|
|dd|
jd|fg�|j'}�qzdS)Nr�r�rr�r�r��
append_imagesr)rr����encoderinforr%r)rrrrr�r����r)r%r�rXsacTLr�r$r�)(rXrr��APNG_DISPOSE_OP_NONE�APNG_BLEND_OP_SOURCE�	itertools�chainr�Iteratorr�r
r=rr|�listrrr.r�r/rr1r2r3�cropr,r�subtract_modulo�getbboxrMrMr�_saverQ�	enumerate�int�round�o16r
rUr�)r%r4rtrr�r�r�r�r�r]�	im_frames�frame_count�im_seq�im_framerX�previous�
prev_disposal�
prev_blend�base_imr(r��deltar�r�
frame_datar3�frame_duration�frame_disposal�frame_blend�fdat_chunksr*r*r+�_write_multiple_frames$s��



����5
�$





�
��
�rvcCst|||dd�dS)NT)�save_all)rc)r%r4�filenamer*r*r+�	_save_all�rSryFc
Csh|j}|dkrId|jvrtd|jd>d�}n|jr,ttt|j��d�dd�d�}nd}|dkrI|dkr9d}n	|dkr@d}nd}|�d	|��}|j�d
d�|j�dd
�|j�dd
�|j�dd�f|_zt	|\}}Wnt
y�}	z	td|�d��|	�d}	~	ww|�t
�||dt|jd�t|jd�|ddd�gd�}
|j�d|j�d��}|r�d}|dt�|�}
||d|
�|
�d�|j�d�}|�rgd�}|jD]=}|dd�\}}
||
vr�|
�|�||||
�q�||vr�||||
�q�|dd����r|dd�}|�s||||
�q�|jdk�r=|d}|j�d�d|�}t|�|k�r7|d7}t|�|k�s,||d|�|j�d |j�d d��}|�sQ|dk�r�|jdk�r�|}t|t��rj||d!|d|��nxtdtd"|��}d#|d}||d!|d|��n_|jd$v�r�tdtd%|��}||d!t|��nH|jdk�r�|\}}}||d!t|�t|�t|��n,d |jv�r�td&��n!|jdk�r�|j��d'k�r�|j�d'd(�}|}||d!|d|��|j�d)�}|�r||d*tt|dd+d,��tt|dd+d,��d-�|�r-d.d/g}
|jD]}|dd�\}}
||
v�r+|
�|�||||
��q|j�d0|j�d0��}|�rYt|tj��rG|�d1�}|� d2��rS|d3d�}||d4|�|�rdt!||||�nt"�#|t$||�d5d6|jd|fg�|�r�|jD]#}|dd�\}}
|dd����r�|dd�}|�r�||||
��q|||d7d�t%|d8��r�|�&�dSdS)9Nr�bitsr�rrrr�;�optimizeF�compress_levelrW�
compress_type�
dictionaryr�zcannot write mode z as PNGsIHDRrr{)scHRMsgAMAssBIT�sRGBstIMEr�sICC Profiler�siCCPr��pnginfo)ssPLTrzr�r�rsPLTEr�stRNS���r�i��z%cannot use transparency for this moder�Ar�spHYsr�g�?�sbKGDshISTr�rr�rseXIfr�r�r^�flush)'r
rXr9r�maxr��getdatar�
encoderconfig�	_OUTMODES�KeyErrorr_rLrrMr3r�r!r�removerqrr%�
getpaletter|r}rg�getpalettemoderer�Exif�tobytes�
startswithrvrrcrQ�hasattrr�)r%r4rxrtrwr
�colorsrzrr]rq�icc�namer.r��chunks_multiple_allowed�
info_chunkrCrs�palette_byte_number�
palette_bytesr��alpha_bytes�alpha�red�green�bluer�r�r*r*r+rc�s�
$���
�


��
"��


�
$
��rccKsDGdd�d�}dd�}|�}z||_t||d|�W|`|jS|`w)z4Return a list of PNG chunks representing this image.c@s eZdZgZdd�Zdd�ZdS)zgetchunks.<locals>.collectorcSsdSr3r*rRr*r*r+rL_rHz"getchunks.<locals>.collector.writecSs|j�|�dSr3)r.rM)r7rtr*r*r+rMbr1z#getchunks.<locals>.collector.appendN)rdrerfr.rLrMr*r*r*r+�	collector\sr�cWs0d�|�}tt|t|���}|�|||f�dS)Nr�)rKrMr0rMrNr*r*r+rMes
zgetchunks.<locals>.appendN)rXrcr.)r%�paramsr�rMr4r*r*r+�	getchunksYs	�r�z.pngz.apngz	image/png)r)>r\�logging�rerYr�r!rvrrrrr�_binaryrr�r	r>r
rrgrrM�	getLoggerrdrR�compiler�r?rr�r��	SAFEBLOCKr$r�rZr/r.r[r<r,r0r2rhrgrpr�rrr�rOrQrUrvryrcr��
register_openrF�
register_save�register_save_all�register_extensions�
register_mimer*r*r*r+�<module>s�!
�

\T?V�
3

Youez - 2016 - github.com/yon3zu
LinuXploit