§
    ¢”j…¥  ã                  ó  — d dl m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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Zerd dl
mZm Z  ddlm!Z! ddl"m#Z#  G d„ de¦  «        Z$e$j%        Z&dPd„Z' G d„ dej        ¦  «        Z(ddddœZ)dQd„Z*e+e,z  e-e.         z  ej        z  Z/dRd#„Z0dSd'„Z1dTd+„Z2 G d,„ d-e¦  «        Z3dUd.„Z4dVd1„Z5	 dWdXd3„Z6dYd5„Z7dZd9„Z8dVd:„Z9dZ:d[d<„Z;d\d>„Z<d]d?„Z=d^d@„Z>d_dC„Z?d`dE„Z@dadG„ZA	 dbdcdJ„ZB	 dddedM„ZC ejD        e(jE        e(e'¦  «          ejF        e(jE        e6¦  «          ejG        e(jE        e5¦  «          ejH        e(jE        dN¦  «          ejI        e(jE        dO¦  «         dS )fé    )ÚannotationsN)ÚIntEnum)Úcached_property)ÚAnyÚ
NamedTupleÚcasté   )ÚImageÚ
ImageChopsÚ	ImageFileÚ	ImageMathÚImageOpsÚImagePaletteÚImageSequence)Úi16le)Úo8)Úo16le)ÚDeferredErrorF)ÚIOÚLiteral)Ú_imaging)ÚBufferc                  ó   — e Zd ZdZdZdZdZdS )ÚLoadingStrategyz.. versionadded:: 9.1.0r   r	   é   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚRGB_AFTER_FIRSTÚ RGB_AFTER_DIFFERENT_PALETTE_ONLYÚ
RGB_ALWAYS© ó    úa/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/PIL/GifImagePlugin.pyr   r   :   s$   € € € € € Ø!Ð!à€OØ'(Ð$Ø€J€J€Jr$   r   ÚprefixÚbytesÚreturnÚboolc                ó,   — |                       d¦  «        S )N)s   GIF87as   GIF89a)Ú
startswith)r&   s    r%   Ú_acceptr,   I   s   € Ø×ÒÐ3Ñ4Ô4Ð4r$   c                  óš   ‡ — e Zd ZdZdZdZdZdd„Zdd„Zdd„Z	e
dd„¦   «         Zedd„¦   «         Zdd„Zdd d„Zdˆ fd„Zdd„Zdd„Zˆ xZS )!ÚGifImageFileÚGIFzCompuserve GIFFNr(   úbytes | Nonec                ó    — | j         €J ‚| j                              d¦  «        }|r(|d         r | j                              |d         ¦  «        S d S )Nr	   r   )ÚfpÚread)ÚselfÚss     r%   ÚdatazGifImageFile.dataY   sQ   € ØŒwÐ"Ð"Ð"ØŒG�LŠL˜‰OŒOˆØð 	&��1”ð 	&Ø”7—<’<  !¤Ñ%Ô%Ð%Øˆtr$   Úpr'   r)   c                ó°   — t          dt          |¦  «        d¦  «        D ]6}|dz  ||         cxk    r||dz            cxk    r||dz            k    sn  dS Œ7dS )Nr   é   r	   r   TF)ÚrangeÚlen)r4   r7   Úis      r%   Ú_is_palette_neededzGifImageFile._is_palette_needed`   sy   € Ý�q�#˜a™&œ& !Ñ$Ô$ð 	ð 	ˆAØ˜‘F˜a œdÐ:Ð:Ò:Ð: a¨¨A©¤hÐ:Ð:Ò:Ð:°!°A¸±E´(Ò:Ð:Ð:Ð:Ø�t�tð ;àˆur$   ÚNonec                óz  — | j         €J ‚| j                              d¦  «        }t          |¦  «        sd}t          |¦  «        ‚|d d…         | j        d<   t          |d¦  «        t          |d¦  «        f| _        |d         }|dz  dz   }|d	z  re|d
         | j        d<   | j                              d|z  ¦  «        }|                      |¦  «        r#t          j	        d|¦  «        }|x| _
        | _        | j         | _        | j                              ¦   «         | _        d | _        |                      d¦  «         d S )Né   znot a GIF fileé   Úversioné   é
   é   r	   é€   é   Ú
backgroundr9   ÚRGBr   )r2   r3   r,   ÚSyntaxErrorÚinfoÚi16Ú_sizer=   r   ÚrawÚglobal_paletteÚpaletteÚ_fpÚtellÚ_GifImageFile__rewindÚ	_n_framesÚ_seek)r4   r5   ÚmsgÚflagsÚbitsr7   rP   s          r%   Ú_openzGifImageFile._openf   s(  € àŒwÐ"Ð"Ð"ØŒG�LŠL˜ÑÔˆÝ�q‰zŒzð 	#Ø"ˆCÝ˜cÑ"Ô"Ð"à   ! œuˆŒ	�)ÑÝ˜˜A‘Y”Y¥ A q¡	¤	Ð)ˆŒ
Ø�"”ˆØ˜‘	˜Q‰ˆà�3‰;ð 	=à&'¨¤eˆDŒI�lÑ#à”—’˜Q $™YÑ'Ô'ˆAØ×&Ò& qÑ)Ô)ð =Ý&Ô*¨5°!Ñ4Ô4�Ø5<Ð<�Ô# d¤là”7ˆŒØœŸš™œˆŒØ%)ˆŒØ�
Š
�1‰Œˆˆˆr$   Úintc                ó$  — | j         €ƒ|                      ¦   «         }	 	 |                      |                      ¦   «         dz   d¦  «         Œ,# t          $ r |                      ¦   «         dz   | _         Y nw xY w|                      |¦  «         | j         S )NTr	   F©rT   rR   rU   ÚEOFErrorÚseek)r4   Úcurrents     r%   Ún_frameszGifImageFile.n_frames�   s’   € àŒ>Ð!Ø—i’i‘k”kˆGð1ð7Ø—J’J˜tŸyšy™{œ{¨Q™°Ñ6Ô6Ð6ð7øåð 1ð 1ð 1Ø!%§¢¡¤¨q¡�”��ð1øøøà�IŠI�gÑÔÐØŒ~Ðs   �-A
 Á
&A3Á2A3c                óÜ   — | j         �| j         dk    S |                      ¦   «         }|rdS 	 |                      dd¦  «         d}n# t          $ r d}Y nw xY w|                      |¦  «         |S )Nr	   TFr\   )r4   r_   Úis_animateds      r%   rb   zGifImageFile.is_animated�   s�   € àŒ>Ð%Ø”> QÒ&Ð&à—)’)‘+”+ˆØð 	Ø�4ð	 Ø�JŠJ�q˜%Ñ Ô Ð ØˆKˆKøÝð 	 ð 	 ð 	 ØˆKˆKˆKð	 øøøð 	�	Š	�'ÑÔÐØÐs   ¬A ÁAÁAÚframec                ój  — |                       |¦  «        sd S || j        k     rd | _        |                      d¦  «         | j        }	 t	          | j        dz   |dz   ¦  «        D ]}|                      |¦  «         Œd S # t
          $ r,}|                      |¦  «         d}t          |¦  «        |‚d }~ww xY w)Nr   r	   úno more images in GIF file)Ú_seek_checkÚ_GifImageFile__frameÚ_imrU   r:   r]   r^   )r4   rc   Ú
last_frameÚfÚerV   s         r%   r^   zGifImageFile.seekŸ   sÏ   € Ø×Ò Ñ&Ô&ð 	ØˆFØ�4”<ÒÐØˆDŒHØ�JŠJ�q‰MŒMˆMà”\ˆ
ð	'Ý˜4œ<¨!Ñ+¨U°Q©YÑ7Ô7ð ð �Ø—
’
˜1‘”��ðð øåð 	'ð 	'ð 	'Ø�IŠI�jÑ!Ô!Ð!Ø.ˆCÝ˜3‘-”- QÐ&øøøøð	'øøøs   Á3A< Á<
B2Â'B-Â-B2TÚupdate_imagec                ó  ‡ — t          ‰ j        t          ¦  «        r‰ j        j        ‚|dk    rMd‰ _        d ‰ _        d‰ _        ‰ j                             ‰ j        ¦  «         d‰ _	        d‰ j
        v r‰ j
        d= n‰ j        r|r‰                      ¦   «          |‰ j        dz   k    rd|› �}t          |¦  «        ‚‰ j        ‰ _        ‰ j        rO‰ j                             ‰ j        ¦  «         ‰                      ¦   «         r	 ‰                      ¦   «         °d‰ _        ‰ j                             d¦  «        }|r|dk    rd}t#          |¦  «        ‚d }i }d }d }d }		 |s‰ j                             d¦  «        }|r|dk    r�n|d	k    �r…‰ j                             d¦  «        }‰                      ¦   «         }
|d         d
k    rA|
�?|
d         }|dz  r|
d         }t%          |
d¦  «        dz  |d<   d|z  }|dz	  }|r|‰ _	        nß|d         dk    r?d}|
r||
z  }‰                      ¦   «         }
|
°d|v r|dxx         d|z   z  cc<   n||d<   d}Œô|d         dk    rˆ|dk    r‚|
�€|
‰ j                             ¦   «         f|d<   |
                     d¦  «        rM‰                      ¦   «         }
|
r7t+          |
¦  «        dk    r$|
d         dk    rt%          |
d¦  «        ‰ j
        d<   ‰                      ¦   «         r	 ‰                      ¦   «         °�nŒ|dk    �r…‰ j                             d¦  «        }t%          |d¦  «        t%          |d¦  «        }}|t%          |d¦  «        z   |t%          |d¦  «        z   }}|‰ j        d         k    s|‰ j        d         k    rV|rTt/          |‰ j        d         ¦  «        t/          |‰ j        d         ¦  «        f‰ _        t3          j        ‰ j        ¦  «         ||||f}	|d         }|dz  dk    }|dz  rR|dz  dz   }‰ j                             d|z  ¦  «        }‰                      |¦  «        rt9          j        d|¦  «        }nd }‰ j                             d¦  «        d         }‰ j                             ¦   «         ‰ _        nd}�ŒB|€d!}t#          |¦  «        ‚|‰ _        |sd S g ‰ _        ‰ j        r%‰ j                             ‰ j        ‰ j         ¦  «         |�|n‰ j!        ‰ _"        |‰ _#        |dk    rl‰ j"        r)tH          tJ          j&        k    r|�d"nd‰ _'        nd#‰ _'        nd$‰ _'        |r|‰ _(        nñ‰ j!        rdd%l)m)}  |‰ j!        ¦  «        ‰ _(        nÎd ‰ _(        nÆ‰ j*        d#k    r»tH          tJ          j+        k    s|r¤d&‰ j
        v re‰ j         ,                    ‰ j
        d&         d¦  «         ‰ j         -                    d"t2          j.        j/        ¦  «        ‰ _        d"‰ _'        ‰ j
        d&= n6d‰ _'        ‰ j         -                    dt2          j.        j/        ¦  «        ‰ _        d1ˆ fd+„}d ‰ _        |	‰ _         ‰ j         �r€‰ j	        dk    �rt	 ‰ j	        dk    r»‰ j         \  }}}}||z
  ||z
  f}t3          j        |¦  «         d#}‰ j
         0                    d&|¦  «        }|�‰ j*        d,v rd"} ||¦  «        d-z   }n1‰ j
         0                    d.d¦  «        }‰ j*        d,v rd} ||¦  «        }t2          j1         2                    |||¦  «        ‰ _        nœ‰ j3        �&‰  4                    ‰ j        ‰ j         ¦  «        ‰ _        no|�m‰ j         \  }}}}||z
  ||z
  f}t3          j        |¦  «         d#}|}‰ j*        d,v rd"} ||¦  «        d-z   }t2          j1         2                    |||¦  «        ‰ _        n# tj          $ r Y nw xY w|�^d}|�1|dk    r tH          tJ          j&        k    r
|‰ j
        d&<   n‰ j*        d,vr|}tm          j7        d/||||f‰ j        |||f¦  «        g‰ _        | 0                    d¦  «        r|d         ‰ j
        d<   d0D ](}||v r||         ‰ j
        |<   Œ|‰ j
        v r‰ j
        |= Œ)d S )2Nr   éÿÿÿÿÚcommentr	   zcannot seek to frame ó   ;re   Tó   !éù   r9   rD   Údurationé   r   éþ   r$   ó   
éÿ   Ú	extensionó   NETSCAPE2.0Úloopó   ,é	   é   rA   rC   é@   rF   rE   rI   Fzimage not found in GIF frameÚRGBAÚPÚL)ÚcopyÚtransparencyÚcolorrZ   r(   útuple[int, int, int]c           	     ó  •— ‰j         rz| dz  dz   t          ‰j         j        ¦  «        k    rd} t          t          t
          t
          t
          f         t	          ‰j         j        | dz  | dz  dz   …         ¦  «        ¦  «        S | | | fS )Nr9   r   )Ú_frame_paletter;   rP   r   ÚtuplerZ   )r„   r4   s    €r%   Ú_rgbz GifImageFile._seek.<locals>._rgba  sŠ   ø€ ØÔ"ð -Ø˜1‘9˜q‘=¥3 tÔ':Ô'BÑ#CÔ#CÒCÐCØ�EÝÝ�#�s¥C˜-Ô(Ý˜$Ô-Ô5°e¸a±iÀ%È!Á)ÈaÁ-Ð6OÔPÑQÔQñô ð ð
 ˜u eÐ,Ð,r$   ©rI   r   )r   rH   Úgif)rs   rx   )r„   rZ   r(   r…   )8Ú
isinstancerQ   r   ÚexÚ_GifImageFile__offsetÚdisposerg   r^   rS   Údisposal_methodrK   ÚtileÚloadÚ
ValueErrorr2   r6   r3   r]   rL   rR   r+   r;   ÚsizeÚmaxrM   r
   Ú_decompression_bomb_checkr=   r   rN   ÚimÚpasteÚdispose_extentrO   r‡   Ú_frame_transparencyÚLOADING_STRATEGYr   r"   Ú_moderP   r‚   Úmoder!   ÚputpalettealphaÚconvertÚDitherÚFLOYDSTEINBERGÚgetÚcoreÚfillrh   Ú_cropÚAttributeErrorr   Ú_Tile)r4   rc   rl   rV   r5   rP   rK   Úframe_transparencyÚ	interlaceÚframe_dispose_extentÚblockrW   Údispose_bitsro   Úx0Úy0Úx1Úy1rX   r7   r‚   r‰   Údispose_sizeÚdispose_moder„   rƒ   Úks   `                          r%   rU   zGifImageFile._seek¯   si	  ø€ Ý�d”h¥Ñ.Ô.ð 	Ø”(”+ÐØ�AŠ:ˆ:àˆDŒMØ8<ˆDŒLØˆDŒLØŒH�MŠM˜$œ-Ñ(Ô(Ð(Ø#$ˆDÔ Ø˜DœIÐ%Ð%Ø”I˜iÐ(øð Œyð ˜\ð Ø—	’	‘”�à�D”L 1Ñ$Ò$Ð$Ø1¨%Ð1Ð1ˆCÝ˜S‘/”/Ð!à”(ˆŒØŒ=ð 	àŒG�LŠL˜œÑ'Ô'Ð'Ø—)’)‘+”+ð Øð —)’)‘+”+ð àˆDŒMàŒG�LŠL˜‰OŒOˆØð 	 �A˜’I�IØ.ˆCÝ˜3‘-”-ÐàEIˆà!ˆØ!ÐØˆ	Ø#ÐðY	Øð $Ø”G—L’L ‘O”O�Øð U˜˜Tš	˜	Ùà�d’‘ð ”G—L’L ‘O”O�ØŸ	š	™œ�Ø�Q”4˜3’;�; 5Ð#4ð " !œH�EØ˜q‘yð 6Ø-2°1¬XÐ*Ý'*¨5°!¡}¤}°rÑ'9�D˜Ñ$ð $.°Ñ#5�LØ#/°1Ñ#4�LØ#ð <ð
 0<˜Ô,øØ�q”T˜S’[�[ð "�Gð  ð ,Ø 5Ñ(˜Ø $§	¢	¡¤˜ð  ð ,ð ! DÐ(Ð(à˜Y˜˜œ¨5°7©?Ñ:˜˜™˜à*1˜˜Y™Ø�AØØ�q”T˜S’[�[ U¨a¢Z Z°EÐ4Eð ).¨t¬w¯|ª|©~¬~Ð(=�D˜Ñ%Ø×'Ò'¨Ñ7Ô7ð >Ø $§	¢	¡¤˜Ø ð >¥S¨¡Z¤Z°1¢_ _¸¸q¼ÀQº¸Ý03°E¸1±´˜DœI fÑ-Ø—i’i‘k”kð Øð —i’i‘k”kð ùð �d’‘ð ”G—L’L ‘O”O�õ ˜Q ™œ¥C¨¨1¡I¤I�B�Ø�c ! Q™iœi™¨­c°!°Q©i¬i©�B�Ø˜œ 1œÒ%Ð%¨¨d¬i¸¬lÒ):Ð):ÀÐ):Ý!$ R¨¬°1¬Ñ!6Ô!6½¸BÀÄ	È!ÄÑ8MÔ8MÐ!M�D”JÝÔ3°D´JÑ?Ô?Ð?Ø')¨2¨r°2 ~Ð$Ø˜!œ�à" R™Z¨AÒ-�	à˜3‘;ð (Ø! A™I¨™?�DØœŸš Q¨$¡YÑ/Ô/�AØ×.Ò.¨qÑ1Ô1ð (Ý".Ô"2°5¸!Ñ"<Ô"<˜˜à"'˜ð ”w—|’| A‘” qÔ)�Ø $¤§¢¡¤�”ØØˆAñsY	ðv ÐØ0ˆCÝ˜3‘-”-ÐàˆŒØð 	ØˆFàˆŒ	àŒ<ð 	=ØŒG�MŠM˜$œ,¨Ô(;Ñ<Ô<Ð<à)0Ð)<˜g˜gÀ$ÔBUˆÔØ#5ˆÔ Ø�AŠ:ˆ:ØÔ"ð !Ý#¥Ô'AÒAÐAØ+=Ð+I  Èu�D”J�Jà!$�D”J�Jà �”
àð $Ø&�”�ØÔ$ð $Ø%Ð%Ð%Ð%Ð%Ð%à#˜t DÔ$7Ñ8Ô8�”�à#�”�àŒy˜CÒÐå$­Ô(XÒXÐXØð Yð &¨¬Ð2Ð2Øœ×/Ò/°´	¸.Ô0IÈ1ÑMÔMÐMØ"&¤'§/¢/°&½%¼,Ô:UÑ"VÔ"V˜œØ%+˜œ
Ø œI nÐ5Ð5à%*˜œ
Ø"&¤'§/¢/°%½¼Ô9TÑ"UÔ"U˜œð		-ð 		-ð 		-ð 		-ð 		-ð 		-ð ˆŒØ@TˆÔØÔñ +	 4Ô#7¸1Ò#<Ñ#<ð*ØÔ'¨1Ò,Ð,ð &*Ô%8‘N�B˜˜B Ø$&¨¡G¨R°"©WÐ#5�LåÔ3°LÑAÔAÐAð $'�LØ œIŸMšM¨.Ð:LÑMÔM�EØÐ(Øœ9¨Ð7Ð7Ø+1˜LØ$( D¨¡K¤K°$Ñ$6˜Eøà $¤	§¢¨l¸AÑ >Ô >˜Øœ9¨Ð7Ð7Ø+0˜LØ$( D¨¡K¤K˜EÝ#(¤:§?¢?°<ÀÈuÑ#UÔ#U�D”L�Lð ”xÐ+à'+§z¢z°$´'¸4Ô;NÑ'OÔ'O˜œ˜Ø+Ð7Ø)-Ô)<™˜˜B  BØ(*¨R©°°b±Ð'9˜åÔ7¸ÑEÔEÐEØ'*˜Ø 2˜Øœ9¨Ð7Ð7Ø+1˜LØ$( DÐ);Ñ$<Ô$<¸tÑ$C˜EÝ',¤z§¢Ø(¨,¸ñ(ô (˜œøøõ "ð ð ð Ø�ðøøøð Ð ØˆLØ!Ð-Ø˜A’:�:Ý'­?Ô+EÒEÐEØ4F˜œ	 .Ñ1øØ”Y oÐ5Ð5Ø#5�Lå”ØØ˜˜R Ð$Ø”MØ˜9 lÐ3ñ	ô ðˆDŒIð �8Š8�IÑÔð 	3Ø#'¨	¤?ˆDŒI�iÑ Ø*ð 	!ð 	!ˆAØ�DˆyˆyØ# Aœw�”	˜!‘�Ø�d”i��Ø”I˜a�Løð		!ð 	!s   Ù%E"_ ß
_ß_c                óh  •— | j         rdnd}d | _        | j        dk    r8| j        �0t          j                             || j        | j        ¦  «        | _        n€| j	        dv rw| j        | _        | j         r]t          j                             d| j        | j        pd¦  «        | _         | j        j
        dg| j                              ¦   «         ¢R Ž  nd | _        | j        s¦| j        �Ÿ| j        | j        j        k    rŠt          j                             | j        j	        | j        ¦  «        }| j         r% |j
        dg| j                              ¦   «         ¢R Ž  |                     | j        d| j        j        z   ¦  «         || _        || _        d | _         t          ¦   «                              ¦   «          d S )Nr€   r�   r   rŠ   rI   ©r   r   )r‡   Ú_prev_imrg   rš   r
   r£   r¤   r”   r—   r�   Ú
putpaletteÚgetdatarh   r˜   rœ   ÚsuperÚload_prepare)r4   Ú	temp_modeÚexpanded_imÚ	__class__s      €r%   rº   zGifImageFile.load_prepare´  s—  ø€ ØÔ.Ð7�C�C°Cˆ	ØˆŒØŒ<˜1ÒÐØÔ'Ð3Ýœ*Ÿ/š/Ø˜tœy¨$Ô*Bñô �”øð ŒY˜/Ð)Ð)Ø œGˆDŒMØÔ"ð  Ýœ*Ÿ/š/¨#¨t¬y¸$Ô:RÐ:WÐVWÑXÔX�”Ø"�”Ô" 5ÐI¨4Ô+>×+FÒ+FÑ+HÔ+HÐIÐIÐIÐIÐIà�”ØŒ}ð 	" ¤Ð!5¸$¼)ÀtÄwÄ|Ò:SÐ:SÝœ*Ÿ/š/¨$¬'¬,¸¼	ÑBÔBˆKØÔ"ð NØ&�Ô& uÐM¨tÔ/B×/JÒ/JÑ/LÔ/LÐMÐMÐMÐMØ×Ò˜dœg v°´´Ñ'<Ñ=Ô=Ð=à!ˆDŒGØˆŒ
Ø"ˆÔå‰Œ×ÒÑÔÐÐÐr$   c                ó4  — | j         dk    rŒ| j        dk    rt          t          j        k    rj| j        �(| j                             | j        d¦  «         d| _        nd| _        | j         	                    | j        t          j        j        ¦  «        | _        d S | j        sd S | j        | j        j        k    rÍ| j        �&t          j                             d| j        ¦  «        }nht          j                             d| j        ¦  «        }|                     dd| j                             ¦   «         ¦  «         | 	                    d¦  «        }|                     | j        d| j        j        z   ¦  «         || _        | j        €J ‚| j        �g| j        dk    r!| j                             d| j        ¦  «        }nU| j                             | j        d¦  «         | j         	                    d¦  «        }n| j         	                    d¦  «        }| j        €J ‚|                      || j        ¦  «        }| j        | _        | j        j        | _        |j        dv r#| j                             || j        |¦  «         d S | j                             || j        ¦  «         d S )	Nr   r€   r   rI   rµ   r�   ÚLA)r¿   r   )rg   r�   r›   r   r"   rš   r—   rž   rœ   rŸ   r
   r    r¡   r¶   r”   r£   r¤   r·   Ú
getpaletter˜   Úconvert_transparentr™   r¥   )r4   r¼   Úframe_ims      r%   Úload_endzGifImageFile.load_endÏ  sF  € ØŒ<˜1ÒÐØŒy˜CÒÐÕ$4½Ô8RÒ$RÐ$RØÔ+Ð7Ø”G×+Ò+¨DÔ,DÀaÑHÔHÐHØ!'�D”J�Jà!&�D”JØœ'Ÿ/š/¨$¬)µU´\Ô5PÑQÔQ�”ØˆFØŒ}ð 	ØˆFØŒ9˜œÔ*Ò*Ð*ØÔ'Ð3Ý#œjŸošo¨f°d´iÑ@Ô@��å#œjŸošo¨c°4´9Ñ=Ô=�Ø×&Ò& u¨e°T´W×5GÒ5GÑ5IÔ5IÑJÔJÐJØ)×1Ò1°%Ñ8Ô8�Ø×Ò˜dœm¨V°d´mÔ6HÑ-HÑIÔIÐIà'ˆDŒMØ”=Ð,Ð,Ð,ØÔ#Ð/ØŒy˜CÒÐØœ7×6Ò6°t¸TÔ=UÑVÔV��à”×'Ò'¨Ô(@À!ÑDÔDÐDØœ7Ÿ?š?¨6Ñ2Ô2��à”w—’ uÑ-Ô-ˆHàÔ"Ð.Ð.Ð.Ø—:’:˜h¨Ô(;Ñ<Ô<ˆà”-ˆŒØ”W”\ˆŒ
ØŒ=˜NÐ*Ð*ØŒG�MŠM˜( DÔ$7¸ÑBÔBÐBÐBÐBàŒG�MŠM˜( DÔ$7Ñ8Ô8Ð8Ð8Ð8r$   c                ó   — | j         S ©N)rg   )r4   s    r%   rR   zGifImageFile.tellù  s
   € ØŒ|Ðr$   )r(   r0   )r7   r'   r(   r)   )r(   r>   )r(   rZ   )r(   r)   )rc   rZ   r(   r>   )T)rc   rZ   rl   r)   r(   r>   )r   r   r   ÚformatÚformat_descriptionÚ!_close_exclusive_fp_after_loadingrO   r6   r=   rY   Úpropertyr`   r   rb   r^   rU   rº   rÃ   rR   Ú__classcell__)r½   s   @r%   r.   r.   R   s+  ø€ € € € € Ø€FØ)ÐØ(-Ð%à€Nðð ð ð ðð ð ð ðð ð ð ð6 ð	ð 	ð 	ñ „Xð	ð ðð ð ñ „_ðð"'ð 'ð 'ð 'ð C!ð C!ð C!ð C!ð C!ðJð ð ð ð ð ð6(9ð (9ð (9ð (9ðTð ð ð ð ð ð ð r$   r.   r�   r€   )Ú1r�   r€   r—   úImage.Imagec                óž  — | j         t          v r|                      ¦   «          | S t          j        | j         ¦  «        dk    rx|                      dt          j        j        ¬¦  «        } | j        €J ‚| j        j         dk    r7| j        j	        D ]*}|d         dk    r| j        j	        |         | j
        d<    nŒ+| S |                      d	¦  «        S )
a  
    Takes an image (or frame), returns an image in a mode that is appropriate
    for saving in a Gif.

    It may return the original image, or it may return an image converted to
    palette or 'L' mode.

    :param im: Image object
    :returns: Image object
    rI   r€   ©rP   Nr   r9   r   rƒ   r�   )r�   ÚRAWMODEr’   r
   ÚgetmodebaserŸ   ÚPaletteÚADAPTIVErP   ÚcolorsrK   )r—   Úrgbas     r%   Ú_normalize_moderÕ     sÊ   € ð 
„w•'ÐÐØ
�Š‰	Œ	ˆ	Øˆ	ÝÔ˜œÑ!Ô! UÒ*Ð*Ø�ZŠZ˜¥U¤]Ô%;ˆZÑ<Ô<ˆØŒzÐ%Ð%Ð%ØŒ:Œ?˜fÒ$Ð$Øœ
Ô)ð ð �Ø˜”7˜a’<�<Ø.0¬jÔ.?ÀÔ.E�B”G˜NÑ+Ø�Eð  ð ˆ	Ø�:Š:�c‰?Œ?Ðr$   rP   ú_Palette | NonerK   údict[str, Any]c                ó´  — d}|rgt          |t          t          t          f¦  «        rt          |dd…         ¦  «        }t          |t          j        ¦  «        rt          |j        ¦  «        }| j        dk    r+|s(|                      d¦  «        }|€J ‚t          |¦  «        }nC|s&t          d„ t          d¦  «        D ¦   «         ¦  «        }t	          j        d|¬¦  «        | _        |€J ‚|r÷g }| j        €J ‚t          dt          |¦  «        d¦  «        D ]V}t          |||dz   …         ¦  «        }| j        j                             |¦  «        }||v rd}|                     |¦  «         ŒWt          |¦  «        D ]1\  }}|€*t          t          |¦  «        ¦  «        D ]}	|	|vr|	||<    nŒŒ2g }
|D ]}|€J ‚|
                     |¦  «         Œ|                      |
¦  «        } nat!          | |¦  «        }|�O|                      ||¦  «        } d	|v r3	 |                     |d	         ¦  «        |d	<   n# t$          $ r |d	= Y nw xY w| S | j        €J ‚|| j        _        | S )
at  
    Normalizes the palette for image.
      - Sets the palette to the incoming palette, if provided.
      - Ensures that there's a palette for L mode images
      - Optimizes the palette if necessary/desired.

    :param im: Image object
    :param palette: bytes object containing the source palette, or ....
    :param info: encoderinfo
    :returns: Image object
    Ni   r€   c              3  ó    K  — | ]	}|d z  V — Œ
dS )r9   Nr#   )Ú.0r<   s     r%   ú	<genexpr>z%_normalize_palette.<locals>.<genexpr>>  s&   è è € Ð&BÐ&B°! q¨A¡vÐ&BÐ&BÐ&BÐ&BÐ&BÐ&Br$   rI   rÎ   r   r9   rƒ   )rŒ   r'   Ú	bytearrayÚlistr   rP   r�   rÀ   r:   r;   rˆ   rÓ   r¢   ÚappendÚ	enumerateÚremap_paletteÚ_get_optimizeÚindexr“   )r—   rP   rK   Úsource_paletteÚ
im_paletteÚused_palette_colorsr<   Úsource_colorrâ   ÚjÚdest_mapÚoptimized_palette_colorss               r%   Ú_normalize_paletterê   !  så  € ð €NØð 8å�g¥¥yµ$Ð7Ñ8Ô8ð 	6Ý& w¨t°¨t¤}Ñ5Ô5ˆNÝ�g�|Ô8Ñ9Ô9ð 	8Ý& w¤Ñ7Ô7ˆNà	„w�#‚~€~Øð 	3ØŸš tÑ,Ô,ˆJØÐ)Ð)Ð)Ý& zÑ2Ô2ˆNøàð 	CÝ&Ð&BÐ&Bµu¸S±z´zÐ&BÑ&BÔ&BÑBÔBˆNÝ!Ô.¨u¸nÐMÑMÔMˆŒ
ØÐ%Ð%Ð%àð Ø02ÐØŒzÐ%Ð%Ð%Ý�q�#˜nÑ-Ô-¨qÑ1Ô1ð 	.ð 	.ˆAÝ  °°A¸±E°	Ô!:Ñ;Ô;ˆLØ”JÔ%×)Ò)¨,Ñ7Ô7ˆEØÐ+Ð+Ð+Ø�Ø×&Ò& uÑ-Ô-Ð-Ð-Ý!Ð"5Ñ6Ô6ð 	ð 	‰HˆAˆuØˆ}Ý�sÐ#6Ñ7Ô7Ñ8Ô8ð ð �AØÐ 3Ð3Ð3Ø12Ð+¨AÑ.Ø˜ð 4øð !ˆØ(ð 	#ð 	#ˆEØÐ$Ð$Ð$Ø�OŠO˜EÑ"Ô"Ð"Ð"Ø×Ò˜hÑ'Ô'ˆˆå#0°°TÑ#:Ô#:Ð Ø#Ð/Ø×!Ò!Ð":¸NÑKÔKˆBØ Ð%Ð%ð-Ø+C×+IÒ+IØ˜^Ô,ñ,ô ,�D˜Ñ(Ð(øõ "ð -ð -ð -Ø˜^Ð,Ð,Ð,ð-øøøàˆIàŒ:Ð!Ð!Ð!Ø'€B„JÔØ€Is   ÈH. È.H>È=H>r2   ú	IO[bytes]r>   c                óv  — t          | ¦  «        }|j                             ¦   «         D ]5\  }}t          |t          ¦  «        r| j                             ||¦  «         Œ6t          ||| j        ¦  «        }t          || j        ¦  «        D ]}| 	                    |¦  «         Œd}t          | ¦  «        r|dz  }t          || d|¦  «         dt          | ¦  «        f|_        t          j        ||t          j        dd| j        z   dt"          |j                 ¦  «        g¦  «         | 	                    d¦  «         d S )Nr   r~   rµ   rC   r‹   ó    )rÕ   rK   ÚitemsrŒ   ÚstrÚencoderinfoÚ
setdefaultrê   Ú_get_global_headerÚwriteÚget_interlaceÚ_write_local_headerÚencoderconfigr   Ú_saver§   r”   rÏ   r�   )r—   r2   rP   Úim_outr³   Úvr5   rW   s           r%   Ú_write_single_framerú   h  s6  € õ
 ˜RÑ Ô €FØ”×!Ò!Ñ#Ô#ð ,ð ,‰ˆˆ1Ý�a�ÑÔð 	,ØŒN×%Ò% a¨Ñ+Ô+Ð+øÝ ¨°´Ñ@Ô@€Få ¨¬Ñ7Ô7ð ð ˆØ
�Š�‰Œˆˆð €EÝ�RÑÔð Ø˜‘
ˆÝ˜˜B ¨Ñ.Ô.Ð.à�}¨RÑ0Ô0Ð1€FÔÝ„OØ�•Y”_ U¨F°R´WÑ,<¸aÅÈÌÔAUÑVÔVÐWñô ð ð ‡H‚HˆU�O„O€O€O€Or$   Úbase_imÚim_frameú4tuple[Image.Image, tuple[int, int, int, int] | None]c                óð   — d„ | |fD ¦   «         }|d         |d         k    r*|                      d¦  «        }|                       d¦  «        } t          j        || ¦  «        }||                     d¬¦  «        fS )Nc                óR   — g | ]$}|j         rt          |j         j         ¦  «        nd ‘Œ%S )r$   )rP   r'   )rÚ   r—   s     r%   ú
<listcomp>z_getbbox.<locals>.<listcomp>‡  s>   € ð ð ð Ø=? R¤ZÐ8�ˆbŒjÔ Ñ!Ô!Ð!°Sðð ð r$   r   r	   r   F)Ú
alpha_only)rŸ   r   Úsubtract_moduloÚgetbbox)rû   rü   Úpalette_bytesÚdeltas       r%   Ú_getbboxr  „  s‹   € ðð ØDKÈXÐCVðñ ô €Mð �QÔ˜=¨Ô+Ò+Ð+Ø×#Ò# FÑ+Ô+ˆØ—/’/ &Ñ)Ô)ˆÝÔ& x°Ñ9Ô9€EØ�%—-’-¨5�-Ñ1Ô1Ð1Ð1r$   c                  ó.   — e Zd ZU ded<   ded<   ded<   dS )Ú_FramerÌ   r—   z tuple[int, int, int, int] | NoneÚbboxr×   rð   N)r   r   r   Ú__annotations__r#   r$   r%   r  r  ‘  s3   € € € € € € Ø€O€O�OØ*Ð*Ð*Ñ*ØÐÐÑÐÐr$   r  c           	     ó   — | j                              d¦  «        }| j                              d| j                             d¦  «        ¦  «        }g }d }d}d }t          j        | g| j                              dg ¦  «        ¦  «        D �]}	t          j        |	¦  «        D �]}
t          |
                     ¦   «         ¦  «        }
|dk    rV|
j         	                    ¦   «         D ]<\  }}|dk    rŒt          |t          ¦  «        r| j                              ||¦  «         Œ=| j                              ¦   «         }d|
j        v r!|                     d|
j        d         ¦  «         t          |
||¦  «        }
t          |t          t          f¦  «        r||         |d<   n|€d|
j        v r|
j        d         |d<   t          |t          t          f¦  «        r||         |d<   |dz  }d }|�r‘|�rŽt!          ||
¦  «        \  }}|s8|                     d¦  «        r!|d         j         dxx         |d         z  cc<   �Œ˜|d         j                              d¦  «        dk    r·| j                              d| j                             d¦  «        ¦  «        }|�v|€\t#          |
|¦  «        }t%          j        d	|
j        |¦  «        }|d         j        j        }|€J ‚|                     ||j        ¦  «         t!          ||
¦  «        d         }�ntd
|
j        z   }�nh|                     d¦  «        �rO|
j        dk    �rCd|vr8|
j        €J ‚	 |
j                             |
¦  «        |d<   n# t4          $ r Y nw xY wd|v �r|
                     ¦   «         }t%          j        d	|j        |d         ¦  «        }|j        dk    r4|                     ¦   «         \  }}}}t9          j        d„ ||||¬¦  «        }ne|j        d	k    rCt%          j        d|j        ¦  «        }|                     |                     ¦   «         ¦  «         |}t9          j        d„ |¬¦  «        }|                      |tC          j"        |¦  «        ¬¦  «         nd }|
}| #                    tI          |p|
||¦  «        ¦  «         �Œ�ŒtK          |¦  «        dk    r&d| j         v r|d         j         d         | j         d<   dS |D ]Ÿ}|j        }
|j&        s0tO          |
|j         ¦  «        D ]}| (                    |¦  «         Œd
}nH|s
d|j         d<   |j&        d
|
j        z   k    r|
 )                    |j&        ¦  «        }
|j&        d d…         }tU          ||
||j         ¦  «         Œ dS )Nrs   Údisposalr   Úappend_imagesrƒ   r	   rn   r   r€   rµ   ÚoptimizerË   r   c                ó¼   —  | d          | d          | d          | d         | d         | d         ¦  «        | d         ¦  «        | d         ¦  «        dz  d¦  «        S )	NrŸ   r•   ÚrÚgÚbÚarw   rË   r#   ©Úargss    r%   ú<lambda>z(_write_multiple_frames.<locals>.<lambda>á  sv   € ¨_¨T°)¬_Ø$/ D¨¤KØ(3¨¨U¬Ø,7¨D°¬K¸¸S¼	À4ÈÄ9Ñ,MÔ,MÈtÐTWÌyñ)*ô )*ð )-¨S¬	ñ	%&ô %&ð '*ñ%*ð %(ñ	."ô 	."€ r$   )r  r  r  r  r�   c                ó8   —  | d         | d         dz  d¦  «        S )NrŸ   r—   rw   rË   r#   r  s    r%   r  z(_write_multiple_frames.<locals>.<lambda>÷  s   € ¨_¨T°)¬_¸TÀ$¼ZÈ#Ñ=MÈsÑ-SÔ-S€ r$   )r—   )ÚmaskFTÚinclude_color_table)+rð   r¢   rK   Ú	itertoolsÚchainr   ÚIteratorrÕ   r‚   rî   rŒ   rï   rñ   rê   rÝ   rˆ   r  Ú_get_backgroundr
   Únewr”   r—   rP   r·   r�   Ú_new_color_indexr“   Úsplitr   Úlambda_evalÚputdataÚget_flattened_datar˜   r   ÚinvertrÞ   r  r;   r	  rò   ró   ÚcropÚ_write_frame_data)r—   r2   rP   rs   r  Ú	im_framesÚprevious_imÚframe_countÚbackground_imÚ
imSequencerü   r³   rù   rð   Ú
diff_framer  r	  r„   rH   Úfirst_paletter¤   r  r  r  r  r  Údelta_lÚ
frame_datar5   Úoffsets                                 r%   Ú_write_multiple_framesr1  —  sþ  € ð Œ~×!Ò! *Ñ-Ô-€HØŒ~×!Ò! *¨b¬g¯kªk¸*Ñ.EÔ.EÑFÔF€Hà €IØ&*€KØ€KØ€MÝ”o r d¨B¬N×,>Ò,>¸ÐPRÑ,SÔ,SÑTÔTð ]Pñ ]Pˆ
Ý%Ô.¨zÑ:Ô:ð \	Pñ \	PˆHå& x§}¢}¡¤Ñ7Ô7ˆHØ˜aÒÐØ$œM×/Ò/Ñ1Ô1ð 8ð 8‘D�A�qØ˜NÒ*Ð*Ø Ý! !¥SÑ)Ô)ð 8Øœ×1Ò1°!°QÑ7Ô7Ð7øàœ.×-Ò-Ñ/Ô/ˆKØ ¤Ð.Ð.Ø×&Ò& ~°x´}À^Ô7TÑUÔUÐUÝ)¨(°G¸[ÑIÔIˆHÝ˜(¥T­5 MÑ2Ô2ð DØ*2°;Ô*?�˜JÑ'Ð'ØÐ! j°H´MÐ&AÐ&AØ*2¬-¸
Ô*C�˜JÑ'Ý˜(¥T­5 MÑ2Ô2ð @Ø*2°;Ô*?�˜JÑ'Ø˜1ÑˆKàˆJØñ C˜[ñ Cå& {°HÑ=Ô=‘��tØð à"—’ zÑ2Ô2ð YØ! "œÔ1°*Ð=Ð=Ô=ÀÈZÔAXÑXÐ=Ð=Ñ=ÙØ˜R”=Ô,×0Ò0°Ñ<Ô<ÀÒAÐAð œN×.Ò.Ø&¨¬¯ª°NÑ(CÔ(Cñô �Eð Ð(Ø(Ð0Ý)8¸À5Ñ)IÔ)I˜JÝ,1¬I°c¸8¼=È*Ñ,UÔ,U˜MØ,5°a¬L¬OÔ,C˜MØ#0Ð#<Ð#<Ð#<Ø)×4Ò4°]ÀMÔDVÑWÔWÐWÝ'¨°xÑ@Ô@ÀÔC˜™à%¨¬Ñ5˜™Ø —_’_ ZÑ0Ô0ñ )K°X´]ÀcÒ5IÑ5IØ%¨[Ð8Ð8Ø'Ô/Ð;Ð;Ð;ð!à (Ô 0× AÒ AÀ(Ñ KÔ Kð (¨Ñ7Ð7øõ  *ð !ð !ð !Ø ˜Dð!øøøà%¨Ð4Ñ4à%-§]¢]¡_¤_˜
Ý$œy¨¨e¬j¸+ÀnÔ:UÑVÔV˜Ø œ:¨Ò/Ð/Ø).¯ª©¬™J˜A˜q ! QÝ#,Ô#8ð	!"ð 	!"ð #$Ø"#Ø"#Ø"#ð$ñ $ô $˜D˜Dð"  %œz¨SÒ0Ð0å*/¬)°C¸¼Ñ*DÔ*D Ø '§¢°×0HÒ0HÑ0JÔ0JÑ KÔ KÐ KØ(/ Ý#,Ô#8Ø SÐ SØ#(ð$ñ $ô $˜Dð #×(Ò(¨µH´OÀDÑ4IÔ4IÐ(ÑJÔJÐJøà�Ø"ˆKØ×Ò�V JÐ$:°(¸DÀ+ÑNÔNÑOÔOÐOÑOñy\	Põ| ˆ9�~„~˜ÒÐØ˜œÐ'Ð'à)2°1¬Ô)AÀ*Ô)MˆBŒN˜:Ñ&Øˆuàð Hð Hˆ
Ø”=ˆØŒð 	)å'¨°*Ô2HÑIÔIð ð �Ø—’˜‘”��ØˆFˆFð ð EØ@D�
Ô&Ð'<Ñ=àŒ &¨8¬=Ñ"8Ò8Ð8Ø#Ÿ=š=¨¬Ñ9Ô9�Ø”_ R a RÔ(ˆFÝ˜"˜h¨°
Ô0FÑGÔGÐGÐGØˆ4s   Ì?MÍ
M*Í)M*Úfilenameústr | bytesc                ó,   — t          | ||d¬¦  «         d S )NT)Úsave_all)r÷   )r—   r2   r2  s      r%   Ú	_save_allr6    s   € Ý	ˆ"ˆb�( TÐ*Ñ*Ô*Ð*Ð*Ð*r$   r5  c                óŠ  — d| j         v s	d| j        v r4| j                              d| j                             d¦  «        ¦  «        }nd }| j                              dd¦  «         |rt	          | ||¦  «        st          | ||¦  «         |                     d¦  «         t          |d¦  «        r|                     ¦   «          d S d S )NrP   r  Trp   Úflush)	rð   rK   r¢   rñ   r1  rú   ró   Úhasattrr8  )r—   r2   r2  r5  rP   s        r%   r÷   r÷     sË   € ð �B”NÐ"Ð" i°2´7Ð&:Ð&:Ø”.×$Ò$ Y°´·²¸IÑ0FÔ0FÑGÔGˆˆàˆØ
Œ×!Ò! *¨dÑ3Ô3Ð3àð -Õ1°"°b¸'ÑBÔBð -Ý˜B  GÑ,Ô,Ð,à‡H‚HˆT�N„N€Nåˆr�7ÑÔð Ø
�Š‰
Œ
ˆ
ˆ
ˆ
ðð r$   rZ   c                óp   — | j                              dd¦  «        }t          | j        ¦  «        dk     rd}|S )Nr©   r	   é   r   )rð   r¢   Úminr”   )r—   r©   s     r%   rô   rô   0  s9   € Ø”×"Ò" ;°Ñ2Ô2€Iõ ˆ2Œ7�|„|�bÒÐØˆ	àÐr$   r0  útuple[int, int]rW   c                ó2  — 	 |j         d         }n# t          $ r d }Y nw xY wd|j         v rt          |j         d         dz  ¦  «        }nd}t          |j                              dd¦  «        ¦  «        }|€|dk    s|r…|�dnd}||dz  z  }|                      dt          d	¦  «        z   t          d
¦  «        z   t          |¦  «        z   t          |¦  «        z   t          |pd¦  «        z   t          d¦  «        z   ¦  «         |j                              d¦  «        }|r*t          |¦  «        }	t          |	¦  «        }
|
r
|dz  }||
z  }|                      dt          |d         ¦  «        z   t          |d         ¦  «        z   t          |j	        d         ¦  «        z   t          |j	        d         ¦  «        z   t          |¦  «        z   ¦  «         |r$|
r"|                      t          |	¦  «        ¦  «         |                      t          d¦  «        ¦  «         d S )Nrƒ   rs   rD   r   r  r	   r   rq   rr   r}   r  rF   r{   rC   )rð   ÚKeyErrorrZ   r¢   ró   r   Úo16Ú_get_palette_bytesÚ_get_color_table_sizer”   Ú_get_header_palette)r2   r—   r0  rW   rƒ   rs   r  Úpacked_flagr  r  Úcolor_table_sizes              r%   rõ   rõ   :  sH  € ðØ”~ nÔ5ˆˆøÝð ð ð Øˆˆˆðøøøð �R”^Ð#Ð#Ý�r”~ jÔ1°BÑ6Ñ7Ô7ˆˆàˆå�2”>×%Ò% j°!Ñ4Ô4Ñ5Ô5€HàÐ 8¨q¢= =°H =Ø'Ð3�a�a¸ˆØ�x 1‘}Ñ$ˆà
�ŠØÝ�‰gŒgñå�‰eŒeñõ �‰oŒoñõ �(‰mŒmñ	õ
 �Ð" Ñ#Ô#ñ$õ �‰eŒeññ	
ô 	
ð 	
ð œ.×,Ò,Ð-BÑCÔCÐØð -Ý*¨2Ñ.Ô.ˆÝ0°Ñ?Ô?ÐØð 	-Ø˜C‘KˆEØÐ,Ñ,ˆEà‡H‚HØÝ
ˆf�QŒi‰.Œ.ñ	å
ˆf�QŒi‰.Œ.ñ	õ ˆbŒg�aŒj‰/Œ/ñ	õ ˆbŒg�aŒj‰/Œ/ñ		õ
 ˆU‰)Œ)ñ	ñô ð ð ð 5Ð/ð 5Ø
�ŠÕ$ ]Ñ3Ô3Ñ4Ô4Ð4Ø‡H‚H�R�‰UŒU�O„O€O€O€Os   ‚ �žc                ó"  — |                       ¦   «         }	 t          |d¦  «        5 }| j        dk    r$t          j        d|g|t          j        ¬¦  «         nÒdd|g}dg}t          j        |t          j        t          j        ¬¦  «        }t          j        ||j        |t          j        ¬¦  «        }|j        €J ‚|j         	                    ¦   «          | 
                    ¦   «         }	|	rt          j        |	|¦  «        ‚| 
                    ¦   «         }	|	rt          j        |	|¦  «        ‚d d d ¦  «         n# 1 swxY w Y   	 t          j        |¦  «         d S # t          $ r Y d S w xY w# 	 t          j        |¦  «         w # t          $ r Y w w xY wxY w)NÚwbrI   Úppmtogif)ÚstdoutÚstderrÚppmquantÚ256)ÚstdinrI  rJ  )Ú_dumpÚopenr�   Ú
subprocessÚ
check_callÚDEVNULLÚPopenÚPIPErI  ÚcloseÚwaitÚCalledProcessErrorÚosÚunlinkÚOSError)
r—   r2   r2  Útempfilerj   Ú	quant_cmdÚ	togif_cmdÚ
quant_procÚ
togif_procÚretcodes
             r%   Ú_save_netpbmra  l  s  € ð �xŠx‰zŒz€Hð$Ý�(˜DÑ!Ô!ð 	L QØŒw˜%ÒÐÝÔ%Ø Ð*°1½ZÔ=Oðñ ô ð ð ð (¨°Ð9�	Ø'˜L�	Ý'Ô-Ø¥j¤o½jÔ>Pðñ ô �
õ (Ô-ØØ$Ô+ØÝ%Ô-ð	ñ ô �
ð "Ô(Ð4Ð4Ð4ØÔ!×'Ò'Ñ)Ô)Ð)à$Ÿ/š/Ñ+Ô+�Øð LÝ$Ô7¸ÀÑKÔKÐKà$Ÿ/š/Ñ+Ô+�Øð LÝ$Ô7¸ÀÑKÔKÐKð=	Lð 	Lð 	Lñ 	Lô 	Lð 	Lð 	Lð 	Lð 	Lð 	Lð 	Løøøð 	Lð 	Lð 	Lð 	Lð@	ÝŒI�hÑÔÐÐÐøÝð 	ð 	ð 	ØˆDˆDð	øøøøð	ÝŒI�hÑÔÐÐøÝð 	ð 	ð 	ØˆDð	øøøøøøse   –E' ¦DD4Ä(E' Ä4D8Ä8E' Ä;D8Ä<E' Å E Å
E$Å#E$Å'FÅ)E>Å=FÅ>
FÆFÆ
FÆFúlist[int] | Nonec                ó„  — | j         dv �r5|�r2|                     d¦  «        �r| j        dk    �r| j        dk    �rt          p
| j         dk    }|s| j        | j        z  dk     rÝg }t          |                      ¦   «         ¦  «        D ]\  }}|r|                     |¦  «         Œ|s t          |¦  «        t          |¦  «        k    r|S | j
        €J ‚t          | j
        j
        ¦  «        t          j        | j
        j         ¦  «        z  }d|dz
                       ¦   «         z  }t          |¦  «        |dz  k    r|dk    r|S dS )	aL  
    Palette optimization is a potentially expensive operation.

    This function determines if the palette should be optimized using
    some heuristics, then returns the list of palette entries in use.

    :param im: Image object
    :param info: encoderinfo
    :returns: list of indexes of palette entries in use, or None
    )r€   r�   r  r   r�   i   Nr	   r   )r�   r¢   ÚwidthÚheightÚ_FORCE_OPTIMIZErß   Ú	histogramrÞ   r•   r;   rP   r
   ÚgetmodebandsÚ
bit_length)r—   rK   Úoptimiserå   r<   ÚcountÚnum_palette_colorsÚcurrent_palette_sizes           r%   rá   rá   ¡  so  € ð 	Œ�:ÐÑØñ 	à�HŠH�ZÑ Ô ñ 	ð ŒH˜ŠM‰MØŒI˜ŠN‰Nõ #Ð4 b¤g°¢nˆØð 	+�r”x "¤)Ñ+¨iÒ7Ð7à"$ÐÝ% b§l¢l¡n¤nÑ5Ô5ð 2ð 2‘��5Øð 2Ø'×.Ò.¨qÑ1Ô1Ð1øàð +�3Ð2Ñ3Ô3µsÐ;NÑ7OÔ7OÒOÐOØ*Ð*à”:Ð)Ð)Ð)Ý!$ R¤ZÔ%7Ñ!8Ô!8½EÔ<NØ”
”ñ=ô =ñ "Ðð $%Ð);¸aÑ)?×(KÒ(KÑ(MÔ(MÑ#MÐ õ Ð'Ñ(Ô(Ð,@ÀAÑ,EÒEÐEà(¨1Ò,Ð,à*Ð*Øˆ4r$   r  c                ó¨   — | sdS t          | ¦  «        dk     rdS t          j        t          j        t          | ¦  «        dz  d¦  «        ¦  «        dz
  S )Nr   r|   r	   r9   r   )r;   ÚmathÚceilÚlog)r  s    r%   rB  rB  ×  sV   € àð CØˆqÝ	ˆ]Ñ	Ô	˜aÒ	Ð	ØˆqåŒy�œ¥# mÑ"4Ô"4¸Ñ"9¸1Ñ=Ô=Ñ>Ô>ÀÑBÐBr$   c                ó�   — t          | ¦  «        }d|z  t          | ¦  «        dz  z
  }|dk    r| t          d¦  «        dz  |z  z  } | S )zä
    Returns the palette, null padded to the next power of 2 (*3) bytes
    suitable for direct inclusion in the GIF header

    :param palette_bytes: Unpadded palette bytes, in RGBRGB form
    :returns: Null padded palette
    r   r9   r   )rB  r;   r   )r  rE  Úactual_target_size_diffs      r%   rC  rC  á  s]   € õ -¨]Ñ;Ô;Ðð  !Ð$4Ñ4½¸MÑ8JÔ8JÈaÑ8OÑOÐØ Ò"Ð"Ø�˜A™œ ™Ð%<Ñ<Ñ<ˆØÐr$   c                óè   ‡— | j         sdS t          | j         j         ¦  «        Š| j         j        dk    r>d                     ˆfd„t	          t          ‰¦  «        dz  ¦  «        D ¦   «         ¦  «        Š‰S )zš
    Gets the palette for inclusion in the gif header

    :param im: Image object
    :returns: Bytes, len<=768 suitable for inclusion in gif header
    r$   r   c              3  ó>   •K  — | ]}‰|d z  |d z  dz   …         V — ŒdS )r}   r9   Nr#   )rÚ   r<   rP   s     €r%   rÛ   z%_get_palette_bytes.<locals>.<genexpr>ÿ  s9   øè è € ÐXÐX¸!˜7 1 q¡5¨1¨q©5°1©9Ð#4Ô5ÐXÐXÐXÐXÐXÐXr$   r9   )rP   r'   r�   Újoinr:   r;   )r—   rP   s    @r%   rA  rA  ó  st   ø€ ð Œ:ð Øˆså�B”JÔ&Ñ'Ô'€GØ	„z„˜&Ò Ð Ø—(’(ÐXÐXÐXÐX½uÅSÈÁ\Ä\ÐUVÑEVÑ?WÔ?WÐXÑXÔXÑXÔXˆØ€Nr$   Úinfo_backgroundú=int | tuple[int, int, int] | tuple[int, int, int, int] | Nonec                óÚ   — d}|rft          |t          ¦  «        rO| j        €J ‚	 | j                             || ¦  «        }n+# t          $ r}t          |¦  «        dvr‚ Y d }~n
d }~ww xY w|}|S )Nr   )z$cannot allocate more than 256 colorsz/cannot add non-opaque RGBA color to RGB palette)rŒ   rˆ   rP   Úgetcolorr“   rï   )r—   rw  rH   rk   s       r%   r  r    s³   € ð €JØð )Ý�o¥uÑ-Ô-ð 	)ð ”:Ð)Ð)Ð)ð
ØœZ×0Ò0°À"ÑEÔE�
�
øÝð ð ð Ý�q‘6”6ð "ð ð ð ðð ð ð ð øøøøðøøøð )ˆJØÐs   ¤A  Á 
A&Á
A!Á!A&úlist[bytes]c                ó  — d}| j                              d¦  «        dk    sE|rEd|v s?|                     d¦  «        €*|                     d¦  «        s|                     d¦  «        rd}t          | |                     d	¦  «        ¦  «        }t          | ¦  «        }t	          |¦  «        }d
|z   t          | j        d         ¦  «        z   t          | j        d         ¦  «        z   t          |dz   ¦  «        t          |¦  «        t          d¦  «        z   t          |¦  «        g}|                     d¦  «        �~| 	                    dt          d¦  «        z   t          d¦  «        z   dz   t          d¦  «        z   t          d¦  «        z   t          |d         ¦  «        z   t          d¦  «        z   ¦  «         |                     d¦  «        rºdt          d¦  «        z   }|d         }t          |t          ¦  «        r|                     ¦   «         }t          dt          |¦  «        d¦  «        D ]1}	||	|	dz   …         }
|t          t          |
¦  «        ¦  «        |
z   z  }Œ2|t          d¦  «        z  }| 	                    |¦  «         |S )z2Return a list of strings representing a GIF headers   87arB   s   89arƒ   rz   Nrs   ro   rH   s   GIFr   r	   rF   rq   rw   rG   ry   r9   ru   )rK   r¢   r  rA  rB  r@  r”   r   rC  rÞ   rŒ   rï   Úencoder:   r;   )r—   rK   rB   rH   r  rE  ÚheaderÚcomment_blockro   r<   Úsubblocks              r%   rò   rò     s  € ð €GØ	„w‡{‚{�9ÑÔ Ò'Ð'Øð (ð ˜dÐ"Ð"Ø�xŠx˜ÑÔÐ+Ø�xŠx˜
Ñ#Ô#ð ,à�xŠx˜	Ñ"Ô"ð ,ð
 ˆå   T§X¢X¨lÑ%;Ô%;Ñ<Ô<€Jå& rÑ*Ô*€MÝ,¨]Ñ;Ô;Ðð 	Ø
ñ	å
ˆbŒg�aŒj‰/Œ/ñ	õ ˆbŒg�aŒj‰/Œ/ñ	õ 	Ð˜cÑ!Ñ"Ô"å
ˆ:‰Œ�˜A™œÑå˜MÑ*Ô*ð€Fð ‡x‚x�ÑÔÐ#Ø�ŠØÝ�‰gŒgñå�‰fŒfñð ñõ �‰eŒeñ	õ
 �‰eŒeñõ �$�v”,ÑÔñ õ �‰eŒeññ		
ô 		
ð 		
ð ‡x‚x�	ÑÔð %Ø�r #™wœw™ˆà�y”/ˆÝ�g�sÑ#Ô#ð 	'Ø—n’nÑ&Ô&ˆGÝ�q�#˜g™,œ,¨Ñ,Ô,ð 	:ð 	:ˆAØ˜q 1 s¡7˜{Ô+ˆHØ�R¥ H¡¤Ñ.Ô.°Ñ9Ñ9ˆMˆMà�˜A™œÑˆØ�Š�mÑ$Ô$Ð$Ø€Mr$   Úparamsc                óþ   — 	 ||_         t          | ||d¦  «         t          j        || t          j        dd|j        z   dt          |j                 ¦  «        g¦  «         |                      d¦  «         |` d S # |` w xY w)Nr   r‹   rµ   rí   )	rð   rõ   r   r÷   r§   r”   rÏ   r�   ró   )r2   rü   r0  r�  s       r%   r&  r&  \  s’   € ð!Ø%ˆÔõ 	˜B ¨&°!Ñ4Ô4Ð4åŒØØÝŒ_˜U F¨X¬]Ñ$:¸A½wÀxÄ}Ô?UÑVÔVÐWñ	
ô 	
ð 	
ð 	�Š�‰ŒˆàÐ Ð Ð øˆHÐ Ð Ð Ð Ð s   ‚A2A8 Á8A<údict[str, Any] | Noneú$tuple[list[bytes], list[int] | None]c                óÞ   — |€i }t          | |¦  «        }d|vrd| j        v r| j        d         |d<   t          | ||¦  «        }|j        | _        |j        | _        t          | |¦  «        }||fS )a  
    Legacy Method to get Gif data from image.

    Warning:: May modify image data.

    :param im: Image object
    :param palette: bytes object containing the source palette, or ....
    :param info: encoderinfo
    :returns: tuple of(list of header items, optimized palette)

    NrH   )rá   rK   rê   rP   r—   rò   )r—   rP   rK   rå   Úim_modr~  s         r%   Ú	getheaderr‡  w  s„   € ð €|Øˆå'¨¨DÑ1Ô1Ðà˜4ÐÐ L°B´GÐ$;Ð$;ØœW \Ô2ˆˆ\Ñå  G¨TÑ2Ô2€FØ”€B„JØŒI€B„EÝ  DÑ)Ô)€FàÐ&Ð&Ð&r$   rµ   r   c                ó˜   — ddl m}  G d„ d|¦  «        }|                      ¦   «           |¦   «         }t          || ||¦  «         |j        S )aë  
    Legacy Method

    Return a list of strings representing this image.
    The first string is a local image header, the rest contains
    encoded image data.

    To specify duration, add the time in milliseconds,
    e.g. ``getdata(im_frame, duration=1000)``

    :param im: Image object
    :param offset: Tuple of (x, y) pixels. Defaults to (0, 0)
    :param \**params: e.g. duration or other encoder info parameters
    :returns: List of bytes containing GIF encoded frame data

    r   )ÚBytesIOc                  ó   — e Zd Zg Zdd„ZdS )úgetdata.<locals>.Collectorr6   r   r(   rZ   c                óT   — | j                              |¦  «         t          |¦  «        S rÅ   )r6   rÞ   r;   )r4   r6   s     r%   ró   z getdata.<locals>.Collector.write­  s$   € ØŒI×Ò˜TÑ"Ô"Ð"Ý�t‘9”9Ðr$   N)r6   r   r(   rZ   )r   r   r   r6   ró   r#   r$   r%   Ú	Collectorr‹  ª  s-   € € € € € Øˆð	ð 	ð 	ð 	ð 	ð 	r$   r�  )Úior‰  r’   r&  r6   )r—   r0  r�  r‰  r�  r2   s         r%   r¸   r¸   •  su   € ð& ÐÐÐÐÐðð ð ð ð �Gñ ô ð ð ‡G‚G�I„I€Ià	ˆ‰Œ€Bå�b˜"˜f fÑ-Ô-Ð-àŒ7€Nr$   z.gifz	image/gif)r&   r'   r(   r)   )r—   rÌ   r(   rÌ   )r—   rÌ   rP   rÖ   rK   r×   r(   rÌ   )r—   rÌ   r2   rë   rP   rÖ   r(   r>   )rû   rÌ   rü   rÌ   r(   rý   )r—   rÌ   r2   rë   rP   rÖ   r(   r)   )r—   rÌ   r2   rë   r2  r3  r(   r>   )F)
r—   rÌ   r2   rë   r2  r3  r5  r)   r(   r>   )r—   rÌ   r(   rZ   )
r2   rë   r—   rÌ   r0  r=  rW   rZ   r(   r>   )r—   rÌ   rK   r×   r(   rb  )r  r'   r(   rZ   )r  r'   r(   r'   )r—   rÌ   r(   r'   )r—   rÌ   rw  rx  r(   rZ   )r—   rÌ   rK   r×   r(   r{  )
r2   rë   rü   rÌ   r0  r=  r�  r×   r(   r>   )NN)r—   rÌ   rP   rÖ   rK   rƒ  r(   r„  )rµ   )r—   rÌ   r0  r=  r�  r   r(   r{  )JÚ
__future__r   r  ro  rX  rP  Úenumr   Ú	functoolsr   Útypingr   r   r   Ú r
   r   r   r   r   r   r   Ú_binaryr   rL   r   r   r@  Ú_utilr   ÚTYPE_CHECKINGr   r   r   Ú_typingr   r   r    r›   r,   r.   rÏ   rÕ   r'   rÜ   rÝ   rZ   Ú_Paletterê   rú   r  r  r1  r6  r÷   rô   rõ   ra  rf  rá   rB  rC  rA  r  rò   r&  r‡  r¸   Úregister_openrÆ   Úregister_saveÚregister_save_allÚregister_extensionÚregister_mimer#   r$   r%   ú<module>rž     sƒ  ðð4 #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð "Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø  Ð  Ð  Ð  Ð  Ð  à€Øð  Ø"Ð"Ð"Ð"Ð"Ð"Ð"Ð"àÐÐÐÐÐØÐÐÐÐÐðð ð ð ð �gñ ô ð ð #Ô2Ð ð5ð 5ð 5ð 5ðhð hð hð hð h�9Ô&ñ hô hð hð^ ˜# CÐ
(Ð
(€ðð ð ð ð4 �9Ñ˜t CœyÑ(¨<Ô+DÑD€ðDð Dð Dð DðNð ð ð ð8
2ð 
2ð 
2ð 
2ð ð  ð  ð  ð  ˆZñ  ô  ð  ðð ð ð ðD+ð +ð +ð +ð
 MRðð ð ð ð ð&ð ð ð ð/ð /ð /ð /ðd-ð -ð -ð -ðd €ð3ð 3ð 3ð 3ðlCð Cð Cð Cðð ð ð ð$ð ð ð ð ð ð ð ð6;ð ;ð ;ð ;ð|!ð !ð !ð !ð8 UYð'ð 'ð 'ð 'ð 'ð> 06ð"ð "ð "ð "ð "ðP €Ô �LÔ'¨°wÑ ?Ô ?Ð ?Ø €Ô �LÔ'¨Ñ /Ô /Ð /Ø €Ô ˜Ô+¨YÑ 7Ô 7Ð 7Ø €Ô ˜Ô,¨fÑ 5Ô 5Ð 5Ø €Ô �LÔ'¨Ñ 5Ô 5Ð 5Ð 5Ð 5r$   