o
    üÞh*|  ã                   @  s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZmZ ddl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ZerhddlmZ dÚdd„Z dÚdd„Z!dÚdd„Z"dÚdd„Z#dÚdd„Z$i ddd e#f“d!d"d#e#f“d$d%d&e#f“d'd(d)e#f“d*d+d,e f“d-d.d/e#f“d0d1d2e#f“d3d4d5e#f“d6d7“d8d9d:e#f“d;d<d=e#f“d>d?d@e#f“dAdBdCe f“dDdEdFe#f“dGdHdIe#f“dJdKdLe#f“dMdN“i dOdP“dQdR“dSdT“dUdV“dWdX“dYdZ“d[d\“d]d^“d_d`“dadbdce f“ddddee$f“dfdgdhe f“didjdke f“dldmdne#f“dodpdqe f“drdsdte!f“dudvdwe!f“¥i dxdydze!f“d{d|d}e!f“d~dd€e!f“d�d‚dƒe!f“d„d…d†e!f“d‡dˆd‰e!f“dŠd‹dŒe!f“d�dŽd�e!f“d�d‘d’e!f“d“d”d•e!f“d–d—d˜e!f“d™dšd›e!f“dœd�dže!f“dŸd d¡e!f“d¢d£“d¤d¥“d¦d§“¥d¨d©dªd«d¬d­d®d¯d°d±d²dd³e"fd´œ¥Z%dÛd¸d¹„Z&G dºd„ dejƒZ'dÜd¼d½„Z(dÜd¾d¿„Z)dÀdÀdÁdÁdÂdÃdÄœZ*dÅZ+d ddÆdÇœZ,dÝdÊdË„Z-dÞdÐdÑ„Z.dÞdÒdÓ„Z/	dßdàdÖd×„Z0e 1e'j2e0e&¡ e 3e'j2e.¡ e 4e'j2g dØ¢¡ e 5e'j2dÙ¡ dS )áé    )ÚannotationsN)ÚIOÚAnyé   )ÚImageÚ	ImageFile)Úi16be)Úi32be)Úo8)Úo16be)Ú	deprecate)ÚpresetsF©ÚMpoImageFileÚselfÚJpegImageFileÚmarkerÚintÚreturnÚNonec                 C  s&   t | j d¡ƒd }t | j|¡ d S )Né   )Úi16ÚfpÚreadr   Ú
_safe_read)r   r   Ún© r   úS/var/www/html/premium_crap/venv/lib/python3.10/site-packages/PIL/JpegImagePlugin.pyÚSkip?   s   r   c                 C  s   t | j d¡ƒd }t | j|¡}d|d@ › �}|| j|< | j ||f¡ |dkr�| d¡r�t |dƒ | j	d< }t
|dƒ| j	d	< z|d
 }t |dƒt |dƒf}W n
 tyZ   Y d S w |dkre|| j	d< n|dkrutdd„ |D ƒƒ| j	d< || j	d< || j	d< d S |dkr¯| d¡r¯d| j	v rž| j	d  |dd … 7  < d S || j	d< | j ¡ | d | _d S |dkrÅ| d¡rÅ| dd¡d | j	d< d S |dkrÕ| d¡rÕ|| j	d< d S |dkræ| d¡ræ| j |¡ d S |dk�r~| d¡�r~d }| j	 d!i ¡}	|||d" … d#k�r|z]|d"7 }t ||ƒ}
|d7 }|| }|d| 7 }||d@ 7 }t||ƒ}|d"7 }|||| … }|
d$k�rSt|d%ƒd& t |d"ƒt|dƒd& t |d'ƒd(œ|	|
< n||	|
< ||7 }||d@ 7 }W n tj�yn   Y d S w |||d" … d#k�sd S d S |d)k�rª| d*¡�rªt |dƒ| j	d+< z|d, }W n t�y¢   Y d S w || j	d-< d S |dk�rÌ| d.¡�rÎ|d"d … | j	d/< | j ¡ | d" | j	d0< d S d S d S )1Nr   ÚAPPé   éàÿ  s   JFIFé   Újfifé   Újfif_versioné   é   é
   r   Údpic                 s  s   � | ]}|d  V  qdS )çR¸…ëQ@Nr   )Ú.0Údr   r   r   Ú	<genexpr>`   s   € zAPP.<locals>.<genexpr>Ú	jfif_unitÚjfif_densityéáÿ  s   Exif  Úexifé   ó   http://ns.adobe.com/xap/1.0/ ó    Úxmpéâÿ  s   FPXR Úflashpixó   ICC_PROFILE éíÿ  s   Photoshop 3.0 é   Ú	photoshopé   s   8BIMií  r   i   é   )ÚXResolutionÚDisplayedUnitsXÚYResolutionÚDisplayedUnitsYéîÿ  s   AdobeÚadobeé   Úadobe_transforms   MPF ÚmpÚmpoffset)r   r   r   r   r   ÚappÚapplistÚappendÚ
startswithÚinfoÚdivmodÚ	ExceptionÚtupleÚtellÚ_exif_offsetÚsplitÚicclistÚ
setdefaultÚi32ÚstructÚerrorÚ
IndexError)r   r   r   ÚsrH   Úversionr.   r/   Úoffsetr;   ÚcodeÚname_lenÚsizeÚdatarE   r   r   r   r   D   sŒ   
ÿ





üÿæÿûr   c                 C  sJ   t | j d¡ƒd }t | j|¡}|| jd< || jd< | j d|f¡ d S )Nr   ÚcommentÚCOM)	r   r   r   r   r   rL   rH   rI   rJ   )r   r   r   rY   r   r   r   ra   ®   s
   

ra   c           	      C  s‚  t | j d¡ƒd }t | j|¡}t |dƒt |dƒf| _|d | _| jdkr1d| j› d�}t|ƒ‚|d | _| jdkr?d	| _	n| jdkrHd
| _	n| jdkrQd| _	nd| j› d�}t|ƒ‚|dv rjd | j
d< | j
d< | jr–| j ¡  | jd d t| jƒkrŒdd„ | jD ƒ}d |¡}nd }|| j
d< g | _tdt|ƒdƒD ] }|||d … }| j |d |d d |d d@ |d f¡ qžd S )Nr   é   r   r   r'   zcannot handle z-bit layersr"   ÚLÚRGBr<   ÚCMYKz-layer images)éÂÿ  éÆÿ  éÊÿ  éÎÿ  ÚprogressiveÚprogressioné   c                 S  s   g | ]}|d d… ‘qS )r:   Nr   )r+   Úpr   r   r   Ú
<listcomp>Ü   s    zSOF.<locals>.<listcomp>ó    Úicc_profiler2   é   r    )r   r   r   r   r   Ú_sizeÚbitsÚSyntaxErrorÚlayersÚ_moderL   rS   ÚsortÚlenÚjoinÚrangeÚlayerrJ   )	r   r   r   rY   ÚmsgÚprofilerp   ÚiÚtr   r   r   ÚSOF¹   s<   







.ýr€   c                   sÜ   t | j d¡ƒd }t | j|¡}t|ƒrl|d }|d dkr!dnd}d|d  }t|ƒ|k r5d}t|ƒ‚t |dkr=dnd|d|… ¡‰ tj	d	krR|dkrRˆ  
¡  ‡ fd
d„tD ƒ| j|d@ < ||d … }t|ƒsd S d S )Nr   r   rq   r   é@   zbad quantization table markerÚBÚHÚlittlec                   s   g | ]}ˆ | ‘qS r   r   )r+   r~   ©r_   r   r   rn   ý   ó    zDQT.<locals>.<listcomp>r    )r   r   r   r   r   rx   rt   ÚarrayÚsysÚ	byteorderÚbyteswapÚzigzag_indexÚquantization)r   r   r   rY   ÚvÚ	precisionÚ	qt_lengthr|   r   r…   r   ÚDQTé   s    õr�   iÀÿ  ÚSOF0zBaseline DCTiÁÿ  ÚSOF1zExtended Sequential DCTrf   ÚSOF2zProgressive DCTiÃÿ  ÚSOF3zSpatial losslessiÄÿ  ÚDHTzDefine Huffman tableiÅÿ  ÚSOF5zDifferential sequential DCTrg   ÚSOF6zDifferential progressive DCTiÇÿ  ÚSOF7zDifferential spatialiÈÿ  )ÚJPGÚ	ExtensionNiÉÿ  ÚSOF9zExtended sequential DCT (AC)rh   ÚSOF10zProgressive DCT (AC)iËÿ  ÚSOF11zSpatial lossless DCT (AC)iÌÿ  ÚDACz%Define arithmetic coding conditioningiÍÿ  ÚSOF13z Differential sequential DCT (AC)ri   ÚSOF14z!Differential progressive DCT (AC)iÏÿ  ÚSOF15zDifferential spatial (AC)iÐÿ  )ÚRST0z	Restart 0NiÑÿ  )ÚRST1z	Restart 1NiÒÿ  )ÚRST2z	Restart 2NiÓÿ  )ÚRST3z	Restart 3NiÔÿ  )ÚRST4z	Restart 4NiÕÿ  )ÚRST5z	Restart 5NiÖÿ  )ÚRST6z	Restart 6Ni×ÿ  )ÚRST7z	Restart 7NiØÿ  )ÚSOIzStart of imageNiÙÿ  )ÚEOIzEnd of imageNéÚÿ  ÚSOSzStart of scaniÛÿ  zDefine quantization tableiÜÿ  ÚDNLzDefine number of linesiÝÿ  ÚDRIzDefine restart intervaliÞÿ  ÚDHPzDefine hierarchical progressionißÿ  ÚEXPzExpand reference componentr!   ÚAPP0zApplication segment 0r0   ÚAPP1zApplication segment 1r6   ÚAPP2zApplication segment 2iãÿ  ÚAPP3zApplication segment 3iäÿ  ÚAPP4zApplication segment 4iåÿ  ÚAPP5zApplication segment 5iæÿ  ÚAPP6zApplication segment 6içÿ  ÚAPP7zApplication segment 7ièÿ  ÚAPP8zApplication segment 8iéÿ  ÚAPP9zApplication segment 9iêÿ  ÚAPP10zApplication segment 10iëÿ  ÚAPP11zApplication segment 11iìÿ  ÚAPP12zApplication segment 12r9   ÚAPP13zApplication segment 13rB   ÚAPP14zApplication segment 14iïÿ  ÚAPP15zApplication segment 15iðÿ  )ÚJPG0zExtension 0Niñÿ  )ÚJPG1zExtension 1Niòÿ  )ÚJPG2zExtension 2N)ÚJPG3zExtension 3N)ÚJPG4zExtension 4N)ÚJPG5zExtension 5N)ÚJPG6zExtension 6N)ÚJPG7zExtension 7N)ÚJPG8zExtension 8N)ÚJPG9zExtension 9N)ÚJPG10zExtension 10N)ÚJPG11zExtension 11N)ÚJPG12zExtension 12N)ÚJPG13zExtension 13NÚComment)ióÿ  iôÿ  iõÿ  iöÿ  i÷ÿ  iøÿ  iùÿ  iúÿ  iûÿ  iüÿ  éýÿ  iþÿ  ÚprefixÚbytesÚboolc                 C  s
   |   d¡S )Ns   ÿØÿ)rK   )rÒ   r   r   r   Ú_acceptG  s   
rÕ   c                      s„   e Zd ZdZdZd'dd„Zd(d
d„Zd)‡ fdd„Zd*‡ fdd„Zd+dd„Z	d,dd„Z
d'dd„Zd-d!d"„Zd'd#d$„Zd-d%d&„Z‡  ZS ).r   ÚJPEGzJPEG (ISO 10918)r   r   c                 C  sJ  | j  d¡}t|ƒsd}t|ƒ‚d}d | _| _d| _g | _i | _i | _	i | _
i | _g | _g | _	 |d }|dkrF|| j  d¡ }t|ƒ}n| j  d¡}q0|tv r†t| \}}}|d ura|| |ƒ |dkr| j}| jd	krod
}t dd| j d|df¡g| _n | j  d¡}n|dv r�d}n|dkr˜| j  d¡}nd}t|ƒ‚q1|  ¡  d S )Nrb   znot a JPEG fileó   ÿr   Téÿ   r   r¬   re   úCMYK;IÚjpeg©r   r   Ú >   éÿÿ  r   i ÿ  zno marker found)r   r   rÕ   rt   rs   ru   rQ   r{   Ú_huffman_dcÚ_huffman_acrŒ   rH   rI   rS   r   ÚMARKERÚmoder   Ú_Tiler^   ÚtileÚ_read_dpi_from_exif)r   rY   r|   r~   ÚnameÚdescriptionÚhandlerÚrawmoder   r   r   Ú_openT  sR   


ÿá!zJpegImageFile._openrå   Ústrr   c                 C  s(   |dv rt |dƒ t| d| ƒS t|ƒ‚)N)Ú
huffman_acÚ
huffman_dcr=   Ú_)r   ÚgetattrÚAttributeError)r   rå   r   r   r   Ú__getattr__Œ  s   
zJpegImageFile.__getattr__ú	list[Any]c                   s   t ƒ  ¡ | j| jg S ©N)ÚsuperÚ__getstate__ru   r{   ©r   ©Ú	__class__r   r   rô   ’  s   zJpegImageFile.__getstate__Ústatec                   s$   |dd … \| _ | _tƒ  |¡ d S )Nr2   )ru   r{   ró   Ú__setstate__)r   rø   rö   r   r   rù   •  s   zJpegImageFile.__setstate__Ú
read_bytesr   rÓ   c                 C  s.   | j  |¡}|stjrt| dƒsd| _dS |S )z›
        internal: read more image data
        For premature EOF and LOAD_TRUNCATED_IMAGES adds EOI marker
        so libjpeg can finish decoding
        Ú_endedTs   ÿÙ)r   r   r   ÚLOAD_TRUNCATED_IMAGESÚhasattrrû   )r   rú   rY   r   r   r   Ú	load_read™  s
   zJpegImageFile.load_readrá   ú
str | Noner^   útuple[int, int] | Noneú0tuple[str, tuple[int, int, float, float]] | Nonec                 C  s~  t | jƒdkr	d S | jrd S | jd \}}}}d}| j}t|tƒs#J ‚|d dkr4|dv r4|| _|df}|r�t| jd |d  | jd |d  ƒ}dD ]}	||	krS nqK|d usZJ ‚|d |d |d |d  |	 d |	 |d  |d |d  |	 d |	 |d  f}| jd |	 d |	 | jd |	 d |	 f| _|	}t	 
||||¡g| _|df| _dd|d | |d | f}
| j|
fS )	Nr   r   rd   )rc   ÚYCbCrrÜ   )r'   r<   r   r   r   rb   )rx   rã   Údecoderconfigr^   Ú
isinstancerO   rv   Úminrr   r   râ   rá   )r   rá   r^   r,   ÚeÚoÚaÚscaleÚoriginal_sizerY   Úboxr   r   r   Údraft©  s:   &ÿ""ü.

zJpegImageFile.draftc                 C  s  t  ¡ \}}t |¡ tj | j¡rt dd|| jg¡ nzt 	|¡ W n	 t
y-   Y nw d}t|ƒ‚z/t |¡�}| ¡  |j| _W d   ƒ n1 sMw   Y  W zt 	|¡ W n t
yc   Y nw zt 	|¡ W w  t
yt   Y w w | jj| _| jj| _g | _d S )NÚdjpegú-outfilezInvalid Filename)ÚtempfileÚmkstempÚosÚcloseÚpathÚexistsÚfilenameÚ
subprocessÚ
check_callÚunlinkÚOSErrorÚ
ValueErrorr   ÚopenÚloadÚimrá   rv   r^   rr   rã   )r   Úfr  r|   Ú_imr   r   r   Ú
load_djpegÑ  s<   
ÿ
þ€ÿþÿ


zJpegImageFile.load_djpegúdict[int, Any] | Nonec                 C  ó   t | ƒS rò   )Ú_getexifrõ   r   r   r   r#  ð  ó   zJpegImageFile._getexifc                 C  sÈ   d| j v s
d| j vrd S zA|  ¡ }|d }|d }zt|d ƒ|d  }W n ty0   |}Y nw t |¡r<d}t|ƒ‚|dkrD|d	9 }||f| j d< W d S  tjt	t
tttfyc   d
| j d< Y d S w )Nr)   r1   i(  i  r   r   zDPI is not a numberrb   r*   )éH   r%  )rL   ÚgetexifÚfloatÚ	TypeErrorÚmathÚisnanr  rV   rW   ÚKeyErrorrt   ÚZeroDivisionError)r   r1   Úresolution_unitÚx_resolutionr)   r|   r   r   r   rä   ó  s6   ÿ

úøz!JpegImageFile._read_dpi_from_exifc                 C  r"  rò   )Ú_getmprõ   r   r   r   r/    r$  zJpegImageFile._getmp)r   r   )rå   rê   r   r   )r   rñ   )rø   rñ   r   r   )rú   r   r   rÓ   )rá   rÿ   r^   r   r   r  )r   r!  )Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionré   rð   rô   rù   rþ   r  r   r#  rä   r/  Ú__classcell__r   r   rö   r   r   P  s    

8


(

r!  c                 C  s   d| j vrd S |  ¡  ¡ S )Nr1   )rL   r&  Ú_get_merged_dictrõ   r   r   r   r#    s   
r#  c              
   C  s  z| j d }W n
 ty   Y d S w t |¡}| d¡}| d¡r#dnd}ddlm} z| |¡}| 	|j
¡ | |¡ t|ƒ}W n tyT } zd}	t|	ƒ|‚d }~ww z|d	 }
W n tyn } zd
}	t|	ƒ|‚d }~ww g }z€|d }t|
ƒD ]p}t |› d�||d ¡}d}tt||ƒƒ}t|d d@ ƒt|d d@ ƒt|d d@ ƒ|d d@ d? |d d@ d? |d d@ dœ}|d dkrÇd|d< nd}	t|	ƒ‚dddd d!d"d#d$œ}| |d% d&¡|d%< ||d< | |¡ qz||d< W |S  t�y } zd'}	t|	ƒ|‚d }~ww )(NrF   r'   s   MM *ú>ú<r   )ÚTiffImagePluginz)malformed MP Index (unreadable directory)é°  z(malformed MP Index (no number of images)i°  ÚLLLHHrq   )Ú	AttributeÚSizeÚ
DataOffsetÚEntryNo1ÚEntryNo2r<  l        i   @i    i   é   i   é   iÿÿÿ )ÚDependentParentImageFlagÚDependentChildImageFlagÚRepresentativeImageFlagÚReservedÚImageDataFormatÚMPTyperG  r   rÖ   z!unsupported picture format in MPOÚ	Undefinedz Large Thumbnail (VGA Equivalent)z$Large Thumbnail (Full HD Equivalent)zMulti-Frame Image (Panorama)zMulti-Frame Image: (Disparity)z Multi-Frame Image: (Multi-Angle)zBaseline MP Primary Image)r   i  i  i  i  i  i   rH  ÚUnknownz!malformed MP Index (bad MP Entry))rL   r+  ÚioÚBytesIOr   rK   rÜ   r9  ÚImageFileDirectory_v2ÚseekÚnextr  ÚdictrN   rt   rz   rV   Úunpack_fromÚziprÔ   ÚgetrJ   )r   r_   Úfile_contentsÚheadÚ
endiannessr9  rL   rF   r  r|   ÚquantÚ	mpentriesÚrawmpentriesÚentrynumÚunpackedentryÚlabelsÚmpentryÚmpentryattrÚ	mptypemapr   r   r   r/    s€   ÿ




€þ
€þÿ
ú
ù	
ú
€þr/  rc   rd   rÙ   r  )Ú1rc   rd   ÚRGBXre   r  )@r   r   r"   r2   r:   r    rA  é   r   r<   r&   rl   rq   é   é   é*   rb   r'   r=   é   é   é   é)   é+   é	   rD   é   rB  é   é(   é,   é5   r(   é   é   é    é'   é-   é4   é6   é   é   é!   é&   é.   é3   é7   é<   é   é"   é%   é/   é2   é8   é;   é=   é#   é$   é0   é1   é9   é:   é>   é?   r   ))r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r  úImage.Imagec                 C  sZ   t | tƒr
| jdv rdS | jd dd… | jd dd…  | jd dd…  }t |d¡S )N)r   r<   éÿÿÿÿr   r   rb   r   )r  r   ru   r{   Ú	samplingsrS  )r  Úsamplingr   r   r   Úget_sampling†  s   6r”  r   ú	IO[bytes]r  ústr | bytesc                 C  sx  | j dks
| jdkrd}t|ƒ‚zt| j }W n ty/ } zd| j› d�}t|ƒ|‚d }~ww | j}dd„ | dd¡D ƒ}| d	d
¡}| dd
¡}	| d¡}
|dkrZd
}d}	d}
n=|t	v rpt	| }d
}| dd
¡}	| d¡}
n't
|tƒs{d}t|ƒ‚|	t	v r‡t	|	  dd
¡}	t
|
tƒr—|
t	v r—t	|
  d¡}
|	dkržd}	n(|	dkr¥d}	n!|	dkr¬d}	n|	dkr³d}	n|	dkrÆ| jdkrÂd}t|ƒ‚t| ƒ}	d:dd„}|
dkrà| jdkrÚd}t|ƒ‚t| dd ƒ}
||
ƒ}
| dd¡}d}| d ¡ }�rd!}|| }t|ƒ|k�rd"}t|ƒ‚td| t|ƒ ƒ}|d#| d$ | 7 }| d%¡ }�rjd&}|| }g }|�r@| |d |… ¡ ||d … }|�s.d}|D ]%}td| t|ƒ ƒ}|d'| d( t|ƒ tt|ƒƒ | 7 }|d7 }�qD| d)| j d)¡¡}| d*d+¡�p€| d,d+¡}| d-d+¡}| d.d¡}t
|tjƒ�r˜| ¡ }t|ƒ|k�r¥d/}t|ƒ‚||| d0d¡|| d1d+¡| d2d¡||	| d3d¡| d4d¡|
|||f| _|�sÐ|�r| jd5k�rãd6| jd  | jd  }n!|d7k�sí|d
k�rúd| jd  | jd  }n
| jd | jd  }|�r|t|ƒd8 7 }|�r|t|ƒd 7 }ntt|ƒd8 t|ƒd ƒ}t | |t d9d| j d|¡g|¡ d S );Nr   z cannot write empty image as JPEGzcannot write mode z as JPEGc                 S  s   g | ]}t |ƒ‘qS r   )Úround)r+   Úxr   r   r   rn   ¡  r†   z_save.<locals>.<listcomp>r)   rÛ   Úqualityr‘  ÚsubsamplingÚqtablesÚkeeprŒ   zInvalid quality settingz4:4:4z4:2:2r   z4:2:0r   z4:1:1rÖ   z3Cannot use 'keep' when original image is not a JPEGúKstr | tuple[list[int], ...] | list[list[int]] | dict[int, list[int]] | Noner   úlist[list[int]] | Nonec                   sV  ˆd u rˆS t ˆtƒr9zdd„ ˆ ¡ D ƒ‰ W n ty) } zd}t|ƒ|‚d }~ww ‡ fdd„tdtˆ ƒdƒD ƒ‰t ˆtttfƒr©t ˆtƒrT‡fdd„ttˆƒƒD ƒ‰n	t ˆtƒr]tˆƒ‰dtˆƒ  k ridk spn d	}t|ƒ‚t	ˆƒD ]2\}}zt|ƒdkr…d}t
|ƒ‚t d
|¡}W n t
yŸ } zd}t|ƒ|‚d }~ww t|ƒˆ|< qtˆS d S )Nc                 S  s.   g | ]}|  d d¡d   ¡ D ]}t|ƒ‘qqS )ú#r   r   )rR   r   )r+   ÚlineÚnumr   r   r   rn   Ò  s    ýþÿz3_save.<locals>.validate_qtables.<locals>.<listcomp>zInvalid quantization tablec                   s   g | ]
}ˆ ||d  … ‘qS )r�   r   )r+   rY   )Úlinesr   r   rn   Û  s    r   r�   c                   s   g | ]
}|ˆ v rˆ | ‘qS r   r   )r+   Úkey)r›  r   r   rn   Þ  s    r"   z$None or too many quantization tablesrƒ   )r  rê   Ú
splitlinesr  rz   rx   rO   ÚlistrP  Ú	enumerater(  r‡   )r›  r  r|   ÚidxÚtableÚtable_arrayr   )r¢  r›  r   Úvalidate_qtablesÉ  sJ   

þ
€þ


ÿ

€þëz_save.<locals>.validate_qtablesÚextraro   rÑ   r5   rd  zXMP data is too longs   ÿár3   rp   r:   s   ÿâr8   r`   rj   Frk   Úoptimizer1   zEXIF data is too longÚsmoothÚkeep_rgbÚ
streamtypeÚrestart_marker_blocksÚrestart_marker_rowsre   r<   é_   r"   rÚ   )r›  r�  r   rž  )ÚwidthÚheightr  ÚRAWMODErá   r+  r  ÚencoderinforS  r   r  r   rê   r3  r”  rî   rx   Úo16rJ   r
   rL   r   ÚExifÚtobytesÚencoderconfigr^   Úmaxr   Ú_saverâ   )r  r   r  r|   rè   r  rL   r)   r™  rš  r›  Úpresetrª  r«  ÚMAX_BYTES_IN_MARKERr5   Úoverhead_lenÚmax_data_bytes_in_markerr^   rp   Úmarkersr~   r   r`   rj   r¬  r1   Úbufsizer   r   r   r¼  ”  sú   
€þ



*
þÿþý
üûÿ




ò€ÿr¼  c                 C  s@   |   ¡ }t dd||g¡ zt |¡ W d S  ty   Y d S w )NÚcjpegr  )Ú_dumpr  r  r  r  r  )r  r   r  r  r   r   r   Ú_save_cjpegW  s   ÿrÅ  ústr | bytes | NoneúJpegImageFile | MpoImageFilec              	   C  s°   t | |ƒ}z8| ¡ }|d ur8|d dkr;|jD ]\}}|dkr(d|v r(|  W S qddlm} | ||¡}W |S W |S W |S  ttfyI   Y |S  tyW   t	 
d¡ Y |S w )Nr:  r   r³   s    hdrgm:Version="r   zTImage appears to be a malformed MPO file, it will be interpreted as a base JPEG file)r   r/  rI   ÚMpoImagePluginr   Úadoptr(  rX   rt   ÚwarningsÚwarn)r   r  r  ÚmpheaderÚsegmentÚcontentr   r   r   r   Újpeg_factoryc  s0   

€	îîøûÿûrÏ  )z.jfifz.jpez.jpgz.jpegz
image/jpeg)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Ç  )6Ú
__future__r   r‡   rK  r)  r  rV   r  rˆ   r  rÊ  Útypingr   r   rÜ   r   r   Ú_binaryr   r   r	   rU   r
   r   r·  Ú
_deprecater   ÚJpegPresetsr   ÚTYPE_CHECKINGrÈ  r   r   r   ra   r€   r�   rà   rÕ   r   r#  r/  rµ  r‹   r’  r”  r¼  rÅ  rÏ  Úregister_openr3  Úregister_saveÚregister_extensionsÚregister_mimer   r   r   r   Ú<module>   sR  !


j

0
ÿ
þ
ý
ü
û
ú
ù
ø	÷

ö
õ
ô
ó
ò
ñ
ðïîíìëêéèçæ
å
ä
ã
â
á
 à
!ß
"Þ
#Ý
$Ü
%Û
&Ú
'Ù
(Ø
)×
*Ö
+Õ
,Ô
-Ó
.Ò
/Ñ
0Ð1Ï2Î3Í4Á
C	 
E
Pú
ý

 
Dÿ