ó
    Eñi…¥  ã                  ó4  • S SK Jr  S SKrS SKrS SKrS SKrS SKJr  S SKJ	r	  S SK
JrJrJr  SSKJrJrJrJrJrJrJr  SSKJr  SS	KJr  SS
KJr  SSKJr  Sr\(       a  S SK
JrJ r   SSKJ!r!  SSK"J#r#   " S S\5      r$\$RJ                  r&S/S jr' " S S\R"                  5      r(SSSS.r)S0S jr*\+\,-  \-\.   -  \R(                  -  r/        S1S jr0        S2S jr1      S3S jr2 " S S\5      r3        S4S jr4S5S jr5 S6         S7S  jjr6S8S! jr7          S9S" jr8S5S# jr9Sr:S:S$ jr;S;S% jr<S<S& jr=S=S' jr>      S>S( jr?S?S) jr@          S@S* jrA SA       SBS+ jjrB SC       SDS, jjrC\Rˆ                  " \(RŠ                  \(\'5        \RŒ                  " \(RŠ                  \65        \RŽ                  " \(RŠ                  \55        \R�                  " \(RŠ                  S-5        \R’                  " \(RŠ                  S.5        g)Eé    )ÚannotationsN)ÚIntEnum)Úcached_property)ÚAnyÚ
NamedTupleÚcasté   )ÚImageÚ
ImageChopsÚ	ImageFileÚ	ImageMathÚImageOpsÚImagePaletteÚImageSequence)Úi16le)Úo8)Úo16le)ÚDeferredErrorF)ÚIOÚLiteral)Ú_imaging)ÚBufferc                  ó$   • \ rS rSrSrSrSrSrSrg)ÚLoadingStrategyé:   z.. versionadded:: 9.1.0r   r	   é   © N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚRGB_AFTER_FIRSTÚ RGB_AFTER_DIFFERENT_PALETTE_ONLYÚ
RGB_ALWAYSÚ__static_attributes__r   ó    ÚO/home/mande/repo/quber/.venv/lib/python3.13/site-packages/PIL/GifImagePlugin.pyr   r   :   s   † Ù!à€OØ'(Ð$ØƒJr'   r   c                ó$   • U R                  S5      $ )N)s   GIF87as   GIF89a)Ú
startswith)Úprefixs    r(   Ú_acceptr,   I   s   € Ø×ÑÐ3Ó4Ð4r'   c                  ó®   ^ • \ rS rSrSrSrSrSrSS jrSS jr	SS jr
\SS	 j5       r\SS
 j5       rSS jrSSS jjrSU 4S jjrSS jrSS jrSrU =r$ )ÚGifImageFileéR   ÚGIFzCompuserve GIFFNc                ó¶   • U R                   c   eU R                   R                  S5      nU(       a(  US   (       a  U R                   R                  US   5      $ g )Nr	   r   )ÚfpÚread)ÚselfÚss     r(   ÚdataÚGifImageFile.dataY   sF   € Ø�w‰wÑ"Ð"Ð"Ø�G‰G�L‰L˜‹OˆÞ��1—Ø—7‘7—<‘<  !¡Ó%Ð%Ør'   c                ó�   • [        S[        U5      S5       H,  nUS-  X   s=:X  a  XS-      s=:X  a  XS-      :X  a  M(     g    g   g)Nr   é   r	   r   TF)ÚrangeÚlen)r4   ÚpÚis      r(   Ú_is_palette_neededÚGifImageFile._is_palette_needed`   sM   € Ü�qœ#˜a›& !Ö$ˆAØ˜‘F˜a™dÕ: a¨A©¡hÕ:°!¸±E±(Ö:Ùð ;Ùñ %ð r'   c                ó„  • U R                   c   eU R                   R                  S5      n[        U5      (       d  Sn[        U5      eUS S U R                  S'   [        US5      [        US5      4U l        US   nUS-  S-   nUS	-  (       ak  US
   U R                  S'   U R                   R                  SU-  5      nU R                  U5      (       a%  [        R                  " SU5      nU=U l
        U l        U R                   U l        U R                   R                  5       U l        S U l        U R!                  S5        g )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Úbitsr<   rQ   s          r(   Ú_openÚGifImageFile._openf   s  € à�w‰wÑ"Ð"Ð"Ø�G‰G�L‰L˜ÓˆÜ�q�z‰zØ"ˆCÜ˜cÓ"Ð"à   !˜uˆ�	‰	�)ÑÜ˜˜A“Y¤ A q£	Ð)ˆŒ
Ø�"‘ˆØ˜‘	˜Q‰ˆà�3�;à&'¨¡eˆD�I‰I�lÑ#à—‘—‘˜Q $™YÓ'ˆAØ×&Ñ& q×)Ñ)Ü&×*Ò*¨5°!Ó4�Ø5<Ð<�Ô# d¤là—7‘7ˆŒØŸ™Ÿ™›ˆŒØ%)ˆŒØ�
‰
�1�r'   c                ó  • U R                   c7  U R                  5       n  U R                  U R                  5       S-   S5        M%  U R                   $ ! [         a    U R                  5       S-   U l          Of = fU R	                  U5        NF)Nr	   F©rU   rS   rV   ÚEOFErrorÚseek)r4   Úcurrents     r(   Ún_framesÚGifImageFile.n_frames�   sv   € à�>‰>Ñ!Ø—i‘i“kˆGð1ØØ—J‘J˜tŸy™y›{¨Q™°Ô6ñ ð
 �~‰~Ðøô ó 1Ø!%§¡£¨q¡�–ð1úà�I‰I�gÕs   Ÿ&A Á"A6Á5A6c                óÞ   • U R                   b  U R                   S:g  $ U R                  5       nU(       a  g U R                  SS5        SnU R	                  U5        U$ ! [         a    Sn N!f = f)Nr	   TFr]   )r4   r`   Úis_animateds      r(   rd   ÚGifImageFile.is_animated�   sn   € à�>‰>Ñ%Ø—>‘> QÑ&Ð&à—)‘)“+ˆÞØð	 Ø�J‰J�q˜%Ô ØˆKð 	�	‰	�'ÔØÐøô	 ó 	 ØŠKð	 ús   ¶A ÁA,Á+A,c                ód  • U R                  U5      (       d  g XR                  :  a  S U l        U R                  S5        U R                  n [	        U R                  S-   US-   5       H  nU R                  U5        M     g ! [
         a$  nU R                  U5        Sn[        U5      UeS nAff = f)Nr   r	   úno more images in GIF file)Ú_seek_checkÚ_GifImageFile__frameÚ_imrV   r:   r^   r_   )r4   ÚframeÚ
last_frameÚfÚerW   s         r(   r_   ÚGifImageFile.seekŸ   s–   € Ø×Ñ ×&Ñ&ØØ—<‘<ÓØˆDŒHØ�J‰J�qŒMà—\‘\ˆ
ð	'Ü˜4Ÿ<™<¨!Ñ+¨U°Q©YÖ7�Ø—
‘
˜1–ò 8øäó 	'Ø�I‰I�jÔ!Ø.ˆCÜ˜3“- QÐ&ûð	'ús   Á4B Â
B/ÂB*Â*B/c                óh  ^ • [        T R                  [        5      (       a  T R                  R                  eUS:X  a_  ST l        S T l        ST l        T R                  R                  T R                  5        ST l	        ST R                  ;   a  T R                  S	 O(T R                  (       a  U(       a  T R                  5         UT R                  S-   :w  a  SU 3n[        U5      eT R                  T l        T R                  (       aY  T R                  R                  T R                  5        T R                  5       (       a   T R                  5       (       a  M  ST l        T R                  R!                  S5      nU(       a  US:X  a  Sn[#        U5      eS n0 nS nS nS n	 U(       d  T R                  R!                  S5      nU(       a  US:X  a  GOUS:X  Ga‚  T R                  R!                  S5      nT R                  5       n
US   S	:X  aB  U
b?  U
S   nUS-  (       a  U
S
   n[%        U
S5      S-  US'   SU-  nUS-	  nU(       a  UT l	        OÝUS   S:X  aE  SnU
(       a  XÚ-  nT R                  5       n
U
(       a  M  SU;   a  US==   SU-   -  ss'   OXÖS'   SnMý  US   S:X  a†  US:X  a€  U
b}  U
T R                  R'                  5       4US'   U
R)                  S5      (       aH  T R                  5       n
U
(       a1  [+        U
5      S
:¼  a"  U
S   S:X  a  [%        U
S5      T R                  S'   T R                  5       (       a   T R                  5       (       a  M  GO‹US:X  Ga„  T R                  R!                  S5      n[%        US5      [%        US5      pþU[%        US5      -   U[%        US5      -   nnUT R,                  S   :”  d  UT R,                  S   :”  a^  U(       aW  [/        UT R,                  S   5      [/        UT R,                  S   5      4T l        [2        R4                  " T R0                  5        XïUU4n	US   nUS-  S:g  nUS-  (       aV  US-  S-   nT R                  R!                  S
U-  5      nT R7                  U5      (       a  [8        R:                  " SU5      nOSnT R                  R!                  S5      S   nT R                  R'                  5       T l        OSnGMJ  Uc  S n[#        U5      eUT l        U(       d  g / T l        T R
                  (       a0  T R<                  R?                  T R
                  T R@                  5        Ub  UOT RB                  T l"        UT l#        US:X  aŒ  T RD                  (       a-  [H        [J        RL                  :X  a  Ub  S!OST l'        OS"T l'        OS#T l'        U(       a	  UT l(        GO-T RB                  (       a  SS$K)J)n  U" T RB                  5      T l(        OþS T l(        OöT RT                  S":X  aæ  [H        [J        RV                  :w  d  U(       aÇ  S%T R                  ;   aw  T R<                  RY                  T R                  S%   S5        T R<                  R[                  S![2        R\                  R^                  5      T l        S!T l'        T R                  S%	 O@ST l'        T R<                  R[                  S[2        R\                  R^                  5      T l        S,U 4S& jjnS T l        U	T l         T R@                  (       Ga¡  T R                  S:¼  Ga�   T R                  S:X  aÌ  T R@                  u  pïnnUU-
  UU-
  4n[2        R4                  " U5        S"nT R                  Ra                  S%U5      nUb  T RT                  S';   a  S!nU" U5      S(-   nO6T R                  Ra                  S)S5      nT RT                  S';   a
  SnU" U5      n[2        Rb                  Re                  UUU5      T l        O³T Rf                  b,  T Ri                  T R<                  T R@                  5      T l        OzUbw  T R@                  u  pïnnUU-
  UU-
  4n[2        R4                  " U5        S"nUnT RT                  S';   a  S!nU" U5      S(-   n[2        Rb                  Re                  UUU5      T l        Ubu  SnUb@  US:X  a(  [H        [J        RL                  :w  a  UT R                  S%'   OT RT                  S';  a  Un[l        Rn                  " S*WWWW4T R                  WUU45      /T l        URa                  S5      (       a  US   T R                  S'   S+ H<  nUU;   a  UU   T R                  U'   M  UT R                  ;   d  M/  T R                  U	 M>     g ! [j         a     Nïf = f)-Nr   éÿÿÿÿÚcommentr	   zcannot seek to frame ó   ;rg   ó   !éù   r9   rE   Údurationé   r   éþ   r'   ó   
éÿ   Ú	extensionó   NETSCAPE2.0Úloopó   ,é	   é   rB   rD   é@   rG   rF   rJ   Fzimage not found in GIF frameÚRGBAÚPÚL)ÚcopyÚtransparencyc           	     ó  >• TR                   (       av  U S-  S-   [        TR                   R                  5      :”  a  Sn [        [        [
        [
        [
        4   [	        TR                   R                  U S-  U S-  S-    5      5      $ X U 4$ )Nr9   r   )Ú_frame_paletter;   rQ   r   ÚtupleÚint)Úcolorr4   s    €r(   Ú_rgbÚ GifImageFile._seek.<locals>._rgba  s�   ø€ Ø×"×"Ø˜1‘9˜q‘=¤3 t×':Ñ':×'BÑ'BÓ#CÓCØ�EÜÜœ#œs¤C˜-Ñ(Ü˜$×-Ñ-×5Ñ5°e¸a±iÀ%È!Á)ÈaÁ-ÐPÓQóð ð
  eÐ,Ð,r'   ©rJ   r‚   )r   rI   Úgif)rv   r{   )r‹   rŠ   Úreturnztuple[int, int, int])8Ú
isinstancerR   r   ÚexÚ_GifImageFile__offsetÚdisposeri   r_   rT   Údisposal_methodrL   ÚtileÚloadÚ
ValueErrorr2   r6   r3   r^   rM   rS   r*   r;   ÚsizeÚmaxrN   r
   Ú_decompression_bomb_checkr>   r   rO   ÚimÚpasteÚdispose_extentrP   rˆ   Ú_frame_transparencyÚLOADING_STRATEGYr   r%   Ú_moderQ   r…   Úmoder$   ÚputpalettealphaÚconvertÚDitherÚFLOYDSTEINBERGÚgetÚcoreÚfillrj   Ú_cropÚAttributeErrorr   Ú_Tile)r4   rk   Úupdate_imagerW   r5   rQ   rL   Úframe_transparencyÚ	interlaceÚframe_dispose_extentÚblockrX   Údispose_bitsrr   Úx0Úy0Úx1Úy1rY   r<   r…   rŒ   Údispose_sizeÚdispose_moder‹   r†   Úks   `                          r(   rV   ÚGifImageFile._seek¯   s1  ø€ Ü�d—h‘h¤×.Ñ.Ø—(‘(—+‘+ÐØ�A‹:àˆDŒMØ8<ˆDŒLØˆDŒLØ�H‰H�M‰M˜$Ÿ-™-Ô(Ø#$ˆDÔ Ø˜DŸI™IÓ%Ø—I‘I˜iÐ(øð �y�yž\Ø—	‘	”à�D—L‘L 1Ñ$Ó$Ø)¨%¨Ð1ˆCÜ˜S“/Ð!à—(‘(ˆŒØ�=�=à�G‰G�L‰L˜Ÿ™Ô'Ø—)‘)—+‘+Øð —)‘)—+“+àˆDŒMà�G‰G�L‰L˜‹OˆÞ�A˜“IØ.ˆCÜ˜3“-ÐàEIˆà!ˆØ!ÐØˆ	Ø#ÐØÞØ—G‘G—L‘L “O�Þ˜˜T›	Ùà�d”ð —G‘G—L‘L “O�ØŸ	™	›�Ø�Q‘4˜3“; 5Ñ#4ð " !™H�EØ˜q—yØ-2°1©XÐ*Ü'*¨5°!£}°rÑ'9�D˜Ñ$ð $.°Ñ#5�LØ#/°1Ñ#4�LÞ#ð
 0<˜Ô,øØ�q‘T˜S“[ð "�Gö  ØÑ(˜Ø $§	¡	£˜÷  ˜%ð ! DÓ(à˜Y›¨5°7©?Ñ:œà*1˜Y™Ø�AÙØ�q‘T˜S“[ U¨a£Z°EÑ4Eð ).¨t¯w©w¯|©|«~Ð(=�D˜Ñ%Ø×'Ñ'¨×7Ñ7Ø $§	¡	£˜Þ ¤S¨£Z°1£_¸¸q¹ÀQ»Ü03°E¸1³˜DŸI™I fÑ-Ø—i‘i—k‘kØð —i‘i—k“kùð �d”ð —G‘G—L‘L “O�ô ˜Q ›¤C¨¨1£I�BØœc ! Q›i™¨¬c°!°Q«i©�B�Ø˜Ÿ™ 1™Ó%¨¨d¯i©i¸©lÓ):ÆÜ!$ R¨¯©°1©Ó!6¼¸BÀÇ	Á	È!ÁÓ8MÐ!M�D”JÜ×3Ò3°D·J±JÔ?Ø')¨r°2 ~Ð$Ø˜!™�à" R™Z¨AÑ-�	à˜3—;Ø! A™I¨™?�DØŸ™Ÿ™ Q¨$¡YÓ/�AØ×.Ñ.¨q×1Ñ1Ü".×"2Ò"2°5¸!Ó"<™à"'˜ð —w‘w—|‘| A“ qÑ)�Ø $§¡§¡£�”ØØˆAòs ðv ÑØ0ˆCÜ˜3“-ÐàˆŒÞØàˆŒ	à�<�<Ø�G‰G�M‰M˜$Ÿ,™,¨×(;Ñ(;Ô<à)0Ñ)<™gÀ$×BUÑBUˆÔØ#5ˆÔ Ø�A‹:Ø×"×"Ü#¤×'AÑ'AÓAØ+=Ñ+I¡Èu�D•Jà!$�D•Jà �”
æØ&�–Ø×$×$Ý%á# D×$7Ñ$7Ó8�•à#�•à�y‰y˜CÓä$¬×(XÑ(XÓXÞà%¨¯©Ó2ØŸ™×/Ñ/°·	±	¸.Ñ0IÈ1ÔMØ"&§'¡'§/¡/°&¼%¿,¹,×:UÑ:UÓ"V˜œØ%+˜œ
Ø ŸI™I nÑ5à%*˜œ
Ø"&§'¡'§/¡/°%¼¿¹×9TÑ9TÓ"U˜œ÷		-ð ˆŒØ@TˆÔØ××Ð 4×#7Ñ#7¸1Ô#<ð*Ø×'Ñ'¨1Ó,ð &*×%8Ñ%8‘N�B˜B Ø$&¨¡G¨R°"©WÐ#5�Lä×3Ò3°LÔAð $'�LØ ŸI™IŸM™M¨.Ð:LÓM�EØÑ(ØŸ9™9¨Ó7Ø+1˜LÙ$(¨£K°$Ñ$6˜Eøà $§	¡	§¡¨l¸AÓ >˜ØŸ9™9¨Ó7Ø+0˜LÙ$(¨£K˜EÜ#(§:¡:§?¡?°<ÀÈuÓ#U�D•Lð —x‘xÑ+à'+§z¡z°$·'±'¸4×;NÑ;NÓ'O˜�Ø+Ñ7Ø)-×)<Ñ)<™˜  BØ(*¨R©°°b±Ð'9˜ä×7Ò7¸ÔEØ'*˜Ø 2˜ØŸ9™9¨Ó7Ø+1˜LÙ$(Ð);Ó$<¸tÑ$C˜EÜ',§z¡z§¡Ø(¨,¸ó(˜œð Ñ ØˆLØ!Ñ-Ø˜A“:Ü'¬?×+EÑ+EÓEØ4F˜Ÿ	™	 .Ñ1øØ—Y‘Y oÓ5Ø#5�Lä—’ØØ˜˜R Ð$Ø—M‘MØ˜9 lÐ3ó	ðˆDŒIð �8‰8�I×ÑØ#'¨	¡?ˆD�I‰I�iÑ Û*ˆAØ�D‹yØ# A™w�—	‘	˜!“Ø�d—i‘i•Ø—I‘I˜a’Lò	 +øô- "ó Ùðús    Ü2Cf$ à8f$ áA:f$ æ$
f1æ0f1c                óp  >• U R                   (       a  SOSnS U l        U R                  S:X  aG  U R                  b9  [        R
                  R                  XR                  U R                  5      U l        O²U R                  S;   a¢  U R                  U l        U R                   (       ay  [        R
                  R                  SU R                  U R                  =(       d    S5      U l        U R                  R                  " S/U R                   R                  5       Q76   OS U l        U R                  (       dä  U R                  b×  U R                  U R                  R                  :w  a³  [        R
                  R                  U R                  R                  U R                  5      nU R                   (       a+  UR                  " S/U R                   R                  5       Q76   UR                  U R                  SU R                  R                  -   5        X l        Xl        S U l         [        TU ]A  5         g )Nrƒ   r„   r   rŽ   rJ   ©r   r   )rˆ   Ú_prev_imri   rŸ   r
   r¨   r©   r™   rœ   r¢   Ú
putpaletteÚgetdatarj   r�   r¡   ÚsuperÚload_prepare)r4   Ú	temp_modeÚexpanded_imÚ	__class__s      €r(   rÁ   ÚGifImageFile.load_prepare´  sx  ø€ Ø×.×.‘C°Cˆ	ØˆŒØ�<‰<˜1ÓØ×'Ñ'Ñ3ÜŸ*™*Ÿ/™/ØŸy™y¨$×*BÑ*Bó�”øð �Y‰Y˜/Ó)Ø ŸG™GˆDŒMØ×"×"ÜŸ*™*Ÿ/™/¨#¨t¯y©y¸$×:RÑ:R×:WÐVWÓX�”Ø—‘×"Ò" 5ÐI¨4×+>Ñ+>×+FÑ+FÓ+HÔIà�”Ø�}�} §¡Ñ!5¸$¿)¹)ÀtÇwÁwÇ|Á|Ó:SÜŸ*™*Ÿ/™/¨$¯'©'¯,©,¸¿	¹	ÓBˆKØ×"×"Ø×&Ò& uÐM¨t×/BÑ/B×/JÑ/JÓ/LÓMØ×Ñ˜dŸg™g v°·±·±Ñ'<Ô=à!ŒGØŒ
Ø"ˆÔä‰ÑÕr'   c                ó^  • U R                   S:X  a®  U R                  S:X  a�  [        [        R                  :X  a…  U R
                  b.  U R                  R                  U R
                  S5        SU l        OSU l        U R                  R                  U R                  [        R                  R                  5      U l        g U R                  (       d  g U R                  U R                  R                  :w  aæ  U R
                  b+  [        R                  R!                  SU R                  5      nOf[        R                  R!                  SU R                  5      nUR#                  SSU R                  R%                  5       5        UR                  S5      nUR'                  U R                  SU R                  R                  -   5        Xl        U R                  c   eU R
                  by  U R                  S:X  a'  U R                  R)                  SU R
                  5      nO]U R                  R                  U R
                  S5        U R                  R                  S5      nOU R                  R                  S5      nU R*                  c   eU R-                  X R*                  5      nU R                  U l        U R                  R                  U l        UR                  S;   a'  U R                  R'                  X R*                  U5        g U R                  R'                  X R*                  5        g )	Nr   rƒ   r‚   rJ   r¼   r„   ÚLA)rÇ   r‚   )ri   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_endÚGifImageFile.load_endÏ  s2  € Ø�<‰<˜1ÓØ�y‰y˜CÓÔ$4¼×8RÑ8RÓ$RØ×+Ñ+Ñ7Ø—G‘G×+Ñ+¨D×,DÑ,DÀaÔHØ!'�D•Jà!&�D”JØŸ'™'Ÿ/™/¨$¯)©)´U·\±\×5PÑ5PÓQ�”ØØ�}�}ØØ�9‰9˜Ÿ™×*Ñ*Ó*Ø×'Ñ'Ñ3Ü#Ÿj™jŸo™o¨f°d·i±iÓ@‘ä#Ÿj™jŸo™o¨c°4·9±9Ó=�Ø×&Ñ& u¨e°T·W±W×5GÑ5GÓ5IÔJØ)×1Ñ1°%Ó8�Ø×Ñ˜dŸm™m¨V°d·m±m×6HÑ6HÑ-HÔIà'ŒMØ—=‘=Ñ,Ð,Ð,Ø×#Ñ#Ñ/Ø�y‰y˜CÓØŸ7™7×6Ñ6°t¸T×=UÑ=UÓV‘à—‘×'Ñ'¨×(@Ñ(@À!ÔDØŸ7™7Ÿ?™?¨6Ó2‘à—w‘w—‘ uÓ-ˆHà×"Ñ"Ñ.Ð.Ð.Ø—:‘:˜h×(;Ñ(;Ó<ˆà—-‘-ˆŒØ—W‘W—\‘\ˆŒ
Ø�=‰=˜NÓ*Ø�G‰G�M‰M˜(×$7Ñ$7¸ÕBà�G‰G�M‰M˜(×$7Ñ$7Õ8r'   c                ó   • U R                   $ ©N)ri   )r4   s    r(   rS   ÚGifImageFile.tellù  s   € Ø�|‰|Ðr'   )Ú__frameÚ__offsetÚ__rewindrR   rˆ   rŸ   rj   r¡   rU   r½   rN   r•   r”   rž   r2   rP   rœ   rQ   r–   )r�   zbytes | None)r<   Úbytesr�   Úbool)r�   ÚNone)r�   rŠ   )r�   rÔ   )rk   rŠ   r�   rÕ   )T)rk   rŠ   r­   rÔ   r�   rÕ   )r   r   r    r!   ÚformatÚformat_descriptionÚ!_close_exclusive_fp_after_loadingrP   r6   r>   rZ   Úpropertyra   r   rd   r_   rV   rÁ   rË   rS   r&   Ú__classcell__)rÄ   s   @r(   r.   r.   R   sq   ø† Ø€FØ)ÐØ(-Ð%à€Nôôôð6 ó	ó ð	ð óó ðô"'ö C!÷Jô6(9÷Tò r'   r.   r„   rƒ   )Ú1r„   rƒ   c                óü  • U R                   [        ;   a  U R                  5         U $ [        R                  " U R                   5      S:X  a¢  U R                  S[        R                  R                  S9n U R                  c   eU R                  R                   S:X  aO  U R                  R                   H5  nUS   S:X  d  M  U R                  R                  U   U R                  S'     U $    U $ U R                  S5      $ )	zï
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
rJ   rƒ   ©rQ   r‚   r9   r   r†   r„   )r¢   ÚRAWMODEr—   r
   Úgetmodebaser¤   ÚPaletteÚADAPTIVErQ   ÚcolorsrL   )rœ   Úrgbas     r(   Ú_normalize_moderä     sÊ   € ð 
‡w�w”'ÓØ
�‰Œ	Øˆ	Ü×Ò˜Ÿ™Ó! UÓ*Ø�Z‰Z˜¤U§]¡]×%;Ñ%;ˆZÐ<ˆØ�z‰zÑ%Ð%Ð%Ø�:‰:�?‰?˜fÓ$ØŸ
™
×)Ô)�Ø˜‘7˜a•<Ø.0¯j©j×.?Ñ.?ÀÑ.E�B—G‘G˜NÑ+ØØˆ	ñ	 *ð ˆ	Ø�:‰:�c‹?Ðr'   c                ó¢  • SnU(       ab  [        U[        [        [        45      (       a  [        USS 5      n[        U[        R                  5      (       a  [        UR
                  5      nU R                  S:X  a)  U(       d!  U R                  S5      nUc   e[        U5      nO<U(       d  [        S [        S5       5       5      n[        R                  " SUS9U l        Uc   eU(       aî  / nU R
                  c   e[        S[        U5      S5       HP  n[        X6US-    5      nU R
                  R                  R                  U5      nX…;   a  SnUR                  U5        MR     [        U5       H1  u  phUb  M
  [        [        U5      5       H  n	X•;  d  M
  X•U'     M/     M3     / n
U H  nUc   eU
R                  U5        M     U R                  U
5      n OA[!        X5      nUb3  U R                  X³5      n S	U;   a   UR#                  US	   5      US	'   U $ U $ U R
                  c   eX0R
                  l        U $ ! [$         a    US		  U $ f = f)
aP  
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  ó*   #   • U  H	  oS -  v •  M     g7f)r9   Nr   )Ú.0r=   s     r(   Ú	<genexpr>Ú%_normalize_palette.<locals>.<genexpr>>  s   é € Ð&B²z°!¨A¦v²zùs   ‚rJ   rÝ   r   r9   r†   )r‘   rÓ   Ú	bytearrayÚlistr   rQ   r¢   rÈ   r:   r;   r‰   râ   r§   ÚappendÚ	enumerateÚremap_paletteÚ_get_optimizeÚindexr˜   )rœ   rQ   rL   Úsource_paletteÚ
im_paletteÚused_palette_colorsr=   Úsource_colorrð   ÚjÚdest_mapÚoptimized_palette_colorss               r(   Ú_normalize_paletterø   !  s@  € ð €NÞä�g¤¤y´$Ð7×8Ñ8Ü& w¨t° }Ó5ˆNÜ�gœ|×8Ñ8×9Ñ9Ü& w§¡Ó7ˆNà	‡w�w�#ƒ~ÞØŸ™ tÓ,ˆJØÑ)Ð)Ð)Ü& zÓ2ˆNøæÜ&Ñ&B´u¸S´zÓ&BÓBˆNÜ!×.Ò.¨u¸nÑMˆŒ
ØÑ%Ð%Ð%æØ02ÐØ�z‰zÑ%Ð%Ð%Ü�qœ#˜nÓ-¨qÖ1ˆAÜ  °A¸±EÐ!:Ó;ˆLØ—J‘J×%Ñ%×)Ñ)¨,Ó7ˆEØÓ+Ø�Ø×&Ñ& uÖ-ñ 2ô "Ð"5Ö6‰HˆAØ‹}ÜœsÐ#6Ó7Ö8�AØÕ3Ø12¨AÑ.Úó 9ñ 7ð !ˆÛ(ˆEØÑ$Ð$Ð$Ø�O‰O˜EÖ"ñ )ð ×Ñ˜hÓ'‰ä#0°Ó#:Ð Ø#Ñ/Ø×!Ñ!Ð":ÓKˆBØ Ó%ð-Ø+C×+IÑ+IØ˜^Ñ,ó,�D˜Ñ(ð
 ˆI�2ˆIà�:‰:Ñ!Ð!Ð!Ø'‡J�JÔØ€Iøô "ó -Ø˜^Ñ,ØˆIð-ús   ÈH= È=IÉIc                ór  • [        U 5      nUR                  R                  5        H7  u  pE[        U[        5      (       d  M  U R
                  R                  XE5        M9     [        X2U R
                  5      n[        X0R
                  5       H  nUR                  U5        M     Sn[        U 5      (       a  US-  n[        XSU5        S[        U 5      4Ul        [        R                  " X1[        R                  " SSU R                   -   S["        UR$                     5      /5        UR                  S5        g )Nr   r�   r¼   rD   r�   ó    )rä   rL   Úitemsr‘   ÚstrÚencoderinfoÚ
setdefaultrø   Ú_get_global_headerÚwriteÚget_interlaceÚ_write_local_headerÚencoderconfigr   Ú_saver¬   r™   rÞ   r¢   )rœ   r2   rQ   Úim_outr¹   Úvr5   rX   s           r(   Ú_write_single_framer  h  sñ   € ô
 ˜RÓ €FØ—‘×!Ñ!Ö#‰ˆÜ�aœ×ÓØ�N‰N×%Ñ% aÖ+ñ $ô   °·±Ó@€Fä ¯©Ö7ˆØ
�‰�Žñ 8ð €EÜ�R×ÑØ˜‘
ˆÜ˜ ¨Ô.àœ}¨RÓ0Ð1€FÔÜ‡O‚OØ”Y—_’_ U¨F°R·W±WÑ,<¸aÄÈÏÉÑAUÓVÐWôð ‡H�HˆU…Or'   c                ó8  • X4 Vs/ s H4  o"R                   (       a  [        UR                   R                   5      OSPM6     nnUS   US   :w  a"  UR                  S5      nU R                  S5      n [        R                  " X5      nXDR                  SS94$ s  snf )Nr'   r   r	   r‚   F)Ú
alpha_only)rQ   rÓ   r¤   r   Úsubtract_moduloÚgetbbox)Úbase_imÚim_framerœ   Úpalette_bytesÚdeltas        r(   Ú_getbboxr  „  s™   € ð ELÑCVóÚCV¸R§Z§ZŒˆb�j‰j× Ñ Ô!°SÒ8ÑCVð ð ð �QÑ˜=¨Ñ+Ó+Ø×#Ñ# FÓ+ˆØ—/‘/ &Ó)ˆÜ×&Ò& xÓ9€EØ—-‘-¨5�-Ð1Ð1Ð1ùòs   †;Bc                  ó4   • \ rS rSr% S\S'   S\S'   S\S'   Srg	)
Ú_Framei‘  úImage.Imagerœ   z tuple[int, int, int, int] | NoneÚbboxúdict[str, Any]rý   r   N)r   r   r    r!   Ú__annotations__r&   r   r'   r(   r  r  ‘  s   ‡ ØƒOØ
*Ó*ØÖr'   r  c           
     ó¾  • U R                   R                  S5      nU R                   R                  SU R                  R                  S5      5      n/ nS nSnS n[        R                  " U /U R                   R                  S/ 5      5       GH3  n	[
        R                  " U	5       GH  n
[        U
R                  5       5      n
US:X  a]  U
R                  R                  5        H?  u  p¼US:X  a  M  [        U[        5      (       d  M$  U R                   R                  X¼5        MA     U R                   R                  5       nSU
R                  ;   a  UR                  SU
R                  S   5        [        X¢U5      n
[        U[        [        45      (       a  X7   US'   O%Uc"  SU
R                  ;   a  U
R                  S   US'   [        U[        [        45      (       a  XG   US'   US-  nS nU(       Ga�  U(       Ga•  [!        Xj5      u  nnU(       d6  UR                  S5      (       a  US   R                   S==   US   -  ss'   GM¡  US   R                   R                  S5      S:X  aÄ  U R                   R                  SU R                  R                  S5      5      nUb{  Uch  [#        U
U5      n[$        R&                  " S	U
R(                  U5      nUS   R*                  R,                  nUc   eUR/                  UUR0                  5        [!        XŠ5      S   nGOwS
U
R(                  -   nGOfUR                  S5      (       GaL  U
R0                  S:w  Ga;  SU;  a.  U
R,                  c   e U
R,                  R3                  U
5      US'   SU;   Ga   U
R                  5       n[$        R&                  " S	UR(                  US   5      nUR0                  S:X  a/  UR7                  5       u  nnnn[8        R:                  " S UUUUS9nOhUR0                  S	:X  aB  [$        R&                  " SUR(                  5      nUR=                  UR?                  5       5        Un[8        R:                  " S US9nURA                  U[B        RD                  " U5      S9  OS nU
nURG                  [I        U=(       d    U
UU5      5        GM     GM6     [K        U5      S:X  a0  SU R                   ;   a  US   R                   S   U R                   S'   gU HÅ  nUR*                  n
URL                  (       d1  [O        U
UR                   5       H  nURQ                  U5        M     S
nO]U(       d  SUR                   S'   URL                  S
U
R(                  -   :w  a  U
RS                  URL                  5      n
URL                  S S n[U        XUUR                   5        MÇ     g! [4         a     GNSf = f)Nrv   Údisposalr   Úappend_imagesr†   r	   rq   r   rƒ   r¼   ÚoptimizerÛ   r‚   c                ót   • U S   " U S   " U S   " U S   " U S   U S   5      U S   5      U S   5      S-  S5      $ )	Nr¤   rš   ÚrÚgÚbÚarz   rÛ   r   ©Úargss    r(   Ú<lambda>Ú(_write_multiple_frames.<locals>.<lambda>á  sZ   € ¨T°)ª_Ø$(¨¢KØ(,¨UªØ,0°ªK¸¸S¹	À4ÈÁ9Ó,MÈtÐTWÉyó)*ð )-¨S©	ó	%&ð '*ñ%*ð %(ô	."r'   )r  r  r  r  r„   c                ó&   • U S   " U S   S-  S5      $ )Nr¤   rœ   rz   rÛ   r   r   s    r(   r"  r#  ÷  s   € ¨T°)ª_¸TÀ$¹ZÈ#Ñ=MÈsÔ-Sr'   )rœ   )ÚmaskFTÚinclude_color_table)+rý   r§   rL   Ú	itertoolsÚchainr   ÚIteratorrä   r…   rû   r‘   rü   rþ   rø   rë   r‰   r  Ú_get_backgroundr
   Únewr™   rœ   rQ   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   rQ   rv   r  Ú	im_framesÚprevious_imÚframe_countÚbackground_imÚ
imSequencer  r¹   r  rý   Ú
diff_framer  r  r‹   rI   Úfirst_paletter©   r  r  r  r  r%  Údelta_lÚ
frame_datar5   Úoffsets                                 r(   Ú_write_multiple_framesr>  —  s  € ð �~‰~×!Ñ! *Ó-€HØ�~‰~×!Ñ! *¨b¯g©g¯k©k¸*Ó.EÓF€Hà €IØ&*€KØ€KØ€MÜ—o’o r d¨B¯N©N×,>Ñ,>¸ÐPRÓ,S×Tˆ
Ü%×.Ò.¨z×:ˆHä& x§}¡}£Ó7ˆHØ˜aÓØ$ŸM™M×/Ñ/Ö1‘D�AØ˜NÓ*Ù Ü! !¤S×)Ó)ØŸ™×1Ñ1°!Ö7ñ	 2ð Ÿ.™.×-Ñ-Ó/ˆKØ §¡Ó.Ø×&Ñ& ~°x·}±}À^Ñ7TÔUÜ)¨(¸[ÓIˆHÜ˜(¤T¬5 M×2Ñ2Ø*2Ñ*?�˜JÒ'ØÑ! j°H·M±MÓ&AØ*2¯-©-¸
Ñ*C�˜JÑ'Ü˜(¤T¬5 M×2Ñ2Ø*2Ñ*?�˜JÑ'Ø˜1ÑˆKàˆJßŸ[ä& {Ó=‘��tÞà"—‘ z×2Ñ2Ø! "™×1Ñ1°*Ó=ÀÈZÑAXÑXÓ=ÚØ˜R‘=×,Ñ,×0Ñ0°Ó<ÀÓAð ŸN™N×.Ñ.Ø&¨¯©¯©°NÓ(Có�Eð Ñ(Ø(Ñ0Ü)8¸À5Ó)I˜JÜ,1¯IªI°c¸8¿=¹=È*Ó,U˜MØ,5°a©L¯O©O×,CÑ,C˜MØ#0Ñ#<Ð<Ð#<Ø)×4Ñ4°]ÀM×DVÑDVÔWÜ'¨Ó@ÀÑCšà%¨¯©Ñ5šØ —_‘_ Z×0Ò0°X·]±]ÀcÔ5IØ%¨[Ó8Ø'×/Ñ/Ñ;Ð;Ð;ð!à (× 0Ñ 0× AÑ AÀ(Ó Kð (¨Ñ7ð
 &¨Ô4à%-§]¡]£_˜
Ü$Ÿyšy¨¨e¯j©j¸+ÀnÑ:UÓV˜Ø Ÿ:™:¨Ó/Ø).¯©«™J˜A˜q ! QÜ#,×#8Ò#8ñ	!"ð #$Ø"#Ø"#Ø"#ñ$™Dð"  %Ÿz™z¨SÓ0ä*/¯)ª)°C¸¿¹Ó*D Ø '§¡°×0HÑ0HÓ0JÔ KØ(/ Ü#,×#8Ò#8Ù SØ#(ñ$˜Dð #×(Ñ(¨´H·O²OÀDÓ4IÐ(ÑJøà�Ø"ˆKØ×ÑœV J×$:°(¸DÀ+ÓN×Oôy ;ñ Uô~ ˆ9ƒ~˜ÓØ˜Ÿ™Ó'à)2°1©×)AÑ)AÀ*Ñ)MˆB�N‰N˜:Ñ&Øãˆ
Ø—=‘=ˆØ��ä'¨°*×2HÑ2HÖI�Ø—‘˜–ñ Jà‰Fö Ø@D�
×&Ñ&Ð'<Ñ=à�‰ &¨8¯=©=Ñ"8Ó8Ø#Ÿ=™=¨¯©Ó9�Ø—_‘_ R aÐ(ˆFÜ˜"¨°
×0FÑ0FÖGñ  ð  øô}  *ó !Ú ð!ús   Í*W×
W×Wc                ó   • [        XUSS9  g )NT)Úsave_all)r  )rœ   r2   Úfilenames      r(   Ú	_save_allrB    s   € Ü	ˆ"�( TÓ*r'   c                óš  • SU R                   ;   d  SU R                  ;   a6  U R                   R                  SU R                  R                  S5      5      nOS nU R                   R                  SS5        U(       a  [	        XU5      (       d  [        XU5        UR                  S5        [        US5      (       a  UR                  5         g g )NrQ   r  Trs   Úflush)	rý   rL   r§   rþ   r>  r  r   ÚhasattrrD  )rœ   r2   rA  r@  rQ   s        r(   r  r    s—   € ð �B—N‘NÓ" i°2·7±7Ó&:Ø—.‘.×$Ñ$ Y°·±·±¸IÓ0FÓG‰àˆØ
�‰×!Ñ! *¨dÔ3æÔ1°"¸'×BÑBÜ˜B GÔ,à‡H�HˆT„Näˆr�7×ÑØ
�‰�
ð r'   c                ót   • U R                   R                  SS5      n[        U R                  5      S:  a  SnU$ )Nr¯   r	   é   r   )rý   r§   Úminr™   )rœ   r¯   s     r(   r  r  0  s5   € Ø—‘×"Ñ" ;°Ó2€Iô ˆ2�7‰7ƒ|�bÓØˆ	àÐr'   c                óÞ  •  UR                   S   nSUR                   ;   a  [        UR                   S   S-  5      nOSn[        UR                   R                  SS5      5      nUc  US:w  d  U(       ap  Ub  SOSnXvS-  -  nU R	                  S[        S	5      -   [        S
5      -   [        U5      -   [        U5      -   [        U=(       d    S5      -   [        S5      -   5        UR                   R                  S5      nU(       a&  [        U5      n	[        U	5      n
U
(       a	  US-  nX:-  nU R	                  S[        US   5      -   [        US   5      -   [        UR                  S   5      -   [        UR                  S   5      -   [        U5      -   5        U(       a!  W
(       a  U R	                  [        W	5      5        U R	                  [        S5      5        g ! [         a    S n GNÚf = f)Nr†   rv   rE   r   r  r	   r   rt   ru   r€   r&  rG   r~   rD   )rý   ÚKeyErrorrŠ   r§   r   r   Úo16Ú_get_palette_bytesÚ_get_color_table_sizer™   Ú_get_header_palette)r2   rœ   r=  rX   r†   rv   r  Úpacked_flagr&  r  Úcolor_table_sizes              r(   r  r  :  sÓ  € ðØ—~‘~ nÑ5ˆð �R—^‘^Ó#Ü�r—~‘~ jÑ1°BÑ6Ó7‰àˆä�2—>‘>×%Ñ% j°!Ó4Ó5€HàÑ 8¨q£=¶HØ'Ñ3‘a¸ˆØ 1‘}Ñ$ˆà
�‰ØÜ�‹gñä�‹eñô �‹oñô �(‹mñ	ô
 �×" Ó#ñ$ô �‹eñô	
ð Ÿ.™.×,Ñ,Ð-BÓCÐÞÜ*¨2Ó.ˆÜ0°Ó?ÐÞØ˜C‘KˆEØÑ,ˆEà‡H�HØÜ
ˆf�Q‰i‹.ñ	ä
ˆf�Q‰i‹.ñ	ô ˆb�g‰g�a‰j‹/ñ	ô ˆb�g‰g�a‰j‹/ñ		ô
 ˆU‹)ñ	ôö Ö/Ø
�‰Ô$ ]Ó3Ô4Ø‡H�HŒR�‹U…OøôU ó Ø‹ðús   ‚G ÇG,Ç+G,c                ó^  • U R                  5       n [        US5       nU R                  S:w  a'  [        R                  " SU/U[        R
                  S9  OìSSU/nS/n[        R                  " U[        R                  [        R
                  S9n[        R                  " UUR                  U[        R
                  S9nUR                  c   eUR                  R                  5         UR                  5       n	U	(       a  [        R                  " X•5      eUR                  5       n	U	(       a  [        R                  " X–5      eS S S 5         [        R                  " U5        g ! , (       d  f       N&= f! [         a     g f = f!  [        R                  " U5        f ! [         a     f f = f= f)NÚwbrJ   Úppmtogif)ÚstdoutÚstderrÚppmquantÚ256)ÚstdinrT  rU  )Ú_dumpÚopenr¢   Ú
subprocessÚ
check_callÚDEVNULLÚPopenÚPIPErT  ÚcloseÚwaitÚCalledProcessErrorÚosÚunlinkÚOSError)
rœ   r2   rA  Útempfilerm   Ú	quant_cmdÚ	togif_cmdÚ
quant_procÚ
togif_procÚretcodes
             r(   Ú_save_netpbmrl  l  sj  € ð �x‰x‹z€Hð$Ü�(˜DÔ! QØ�w‰w˜%ÓÜ×%Ò%Ø Ð*°1¼Z×=OÑ=Oóð (¨°Ð9�	Ø'˜L�	Ü'×-Ò-Ø¤j§o¡o¼j×>PÑ>Pñ�
ô (×-Ò-ØØ$×+Ñ+ØÜ%×-Ñ-ñ	�
ð "×(Ñ(Ñ4Ð4Ð4Ø×!Ñ!×'Ñ'Ô)à$Ÿ/™/Ó+�ÞÜ$×7Ò7¸ÓKÐKà$Ÿ/™/Ó+�ÞÜ$×7Ò7¸ÓKÐK÷= "ð@	Ü�IŠI�hÕ÷C "Õ!ûôD ó 	Ùð	ûð	Ü�IŠI�hÕøÜó 	Ùð	ýsY   ’F žD$E"ÅF ÅE3 Å"
E0Å,F Å3
F Å?F ÆF,ÆFÆF,Æ
F)Æ&F,Æ(F)Æ)F,c                óø  • U R                   S;   Gai  U(       Gaa  UR                  S5      (       GaJ  U R                  S:w  Ga9  U R                  S:w  Ga(  [        =(       d    U R                   S:H  nU(       d  U R                  U R                  -  S:  aè  / n[        U R                  5       5       H  u  pEU(       d  M  UR                  U5        M!     U(       d  [        U5      [        U5      :¼  a  U$ U R                  c   e[        U R                  R                  5      [        R                  " U R                  R                   5      -  nSUS-
  R                  5       -  n[        U5      US-  ::  a  US:”  a  U$ g)	a0  
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;   rQ   r
   ÚgetmodebandsÚ
bit_length)rœ   rL   Úoptimiseró   r=   ÚcountÚnum_palette_colorsÚcurrent_palette_sizes           r(   rï   rï   ¡  s6  € ð 	�‰�:ÔßØ�H‰H�Z× Ò Ø�H‰H˜ŒMØ�I‰I˜ŒNô #×4 b§g¡g°¡nˆÞ�r—x‘x "§)¡)Ñ+¨iÓ7à"$ÐÜ% b§l¡l£nÖ5‘�ß�5Ø'×.Ñ.¨qÖ1ñ 6ö œ3Ð2Ó3´sÐ;NÓ7OÓOØ*Ð*à—:‘:Ñ)Ð)Ð)Ü!$ R§Z¡Z×%7Ñ%7Ó!8¼E×<NÒ<NØ—
‘
—‘ó=ñ "Ðð $%Ð);¸aÑ)?×(KÑ(KÓ(MÑ#MÐ ô Ð'Ó(Ð,@ÀAÑ,EÓEà(¨1Ó,à*Ð*Ør'   c                ó¦   • U (       d  g[        U 5      S:  a  g[        R                  " [        R                  " [        U 5      S-  S5      5      S-
  $ )Nr   r   r	   r9   r   )r;   ÚmathÚceilÚlog)r  s    r(   rM  rM  ×  sA   € æØÜ	ˆ]Ó	˜aÓ	Øä�yŠyœŸš¤# mÓ"4¸Ñ"9¸1Ó=Ó>ÀÑBÐBr'   c                óx   • [        U 5      nSU-  [        U 5      S-  -
  nUS:”  a  U [        S5      S-  U-  -  n U $ )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   )rM  r;   r   )r  rP  Úactual_target_size_diffs      r(   rN  rN  á  sR   € ô -¨]Ó;Ðð  !Ð$4Ñ4¼¸MÓ8JÈaÑ8OÑOÐØ Ó"Øœ˜A› ™Ð%<Ñ<Ñ<ˆØÐr'   c                óþ   ^• U R                   (       d  g[        U R                   R                   5      mU R                   R                  S:X  a0  SR                  U4S j[	        [        T5      S-  5       5       5      mT$ )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  ó@   >#   • U  H  nTUS -  US -  S-    v •  M     g7f)r€   r9   Nr   )rç   r=   rQ   s     €r(   rè   Ú%_get_palette_bytes.<locals>.<genexpr>ÿ  s&   øé € ÐXÒ?W¸!˜7 1 q¡5¨1¨q©5°1©9Õ5Ò?Wùs   ƒr9   )rQ   rÓ   r¢   Újoinr:   r;   )rœ   rQ   s    @r(   rL  rL  ó  s[   ø€ ð �:�:Øä�B—J‘J×&Ñ&Ó'€GØ	‡z�z‡�˜&Ó Ø—(‘(ÔX¼uÄSÈÃ\ÐUVÑEVÔ?WÓXÓXˆØ€Nr'   c                óð   • SnU(       aD  [        U[        5      (       a-  U R                  c   e U R                  R                  X5      nU$ UnU$ ! [         a  n[        U5      S;  a  e  S nAU$ S nAff = f)Nr   )z$cannot allocate more than 256 colorsz/cannot add non-opaque RGBA color to RGB palette)r‘   r‰   rQ   Úgetcolorr˜   rü   )rœ   Úinfo_backgroundrI   rn   s       r(   r*  r*    sŽ   € ð €JÞÜ�o¤u×-Ñ-ð —:‘:Ñ)Ð)Ð)ð
ØŸZ™Z×0Ñ0°ÓE�
ð Ðð )ˆJØÐøô ó Ü�q“6ð "ó ð óð Ðûðús   ¯A Á
A5ÁA0Á0A5c                óD  • SnU R                   R                  S5      S:X  dK  U(       aF  SU;   d>  UR                  S5      c,  UR                  S5      (       d  UR                  S5      (       a  Sn[        XR                  S5      5      n[        U 5      n[	        U5      nS	U-   [        U R                  S
   5      -   [        U R                  S   5      -   [        US-   5      [        U5      [        S
5      -   [        U5      /nUR                  S5      b_  UR                  S[        S5      -   [        S5      -   S-   [        S5      -   [        S5      -   [        US   5      -   [        S
5      -   5        UR                  S5      (       a•  S[        S5      -   nUS   n[        U[        5      (       a  UR                  5       n[        S
[        U5      S5       H$  n	X‰U	S-    n
U[        [        U
5      5      U
-   -  nM&     U[        S
5      -  nUR                  U5        U$ )z2Return a list of strings representing a GIF headers   87arC   s   89ar†   r}   rv   rr   rI   s   GIFr   r	   rG   rt   rz   rH   r|   r9   rx   )rL   r§   r*  rL  rM  rK  r™   r   rN  rì   r‘   rü   Úencoder:   r;   )rœ   rL   rC   rI   r  rP  ÚheaderÚcomment_blockrr   r=   Úsubblocks              r(   rÿ   rÿ     s  € ð €GØ	‡w�w‡{�{�9Ó Ó'Þà˜dÓ"Ø�x‰x˜ÓÑ+Ø�x‰x˜
×#Ñ#Ø�x‰x˜	×"Ñ"ð ˆä  §X¡X¨lÓ%;Ó<€Jä& rÓ*€MÜ,¨]Ó;Ðð 	Ø
ñ	ä
ˆb�g‰g�a‰j‹/ñ	ô ˆb�g‰g�a‰j‹/ñ	ô 	Ð˜cÑ!Ó"ä
ˆ:‹œ˜A›Ñä˜MÓ*ð€Fð ‡x�x�ÓÑ#Ø�‰ØÜ�‹gñä�‹fñð ñô �‹eñ	ô
 �‹eñô �$�v‘,Óñ ô �‹eñô		
ð ‡x�x�	×ÑØœr #›w™ˆà�y‘/ˆÜ�gœs×#Ñ#Ø—n‘nÓ&ˆGÜ�qœ#˜g›,¨Ö,ˆAØ 1 s¡7Ð+ˆHØœR¤ H£Ó.°Ñ9Ñ9ŠMñ -ð 	œ˜A›ÑˆØ�‰�mÔ$Ø€Mr'   c                óü   •  X1l         [        XUS5        [        R                  " UU [        R                  " SSUR
                  -   S[        UR                     5      /5        U R                  S5        U? g ! U? f = f)Nr   r�   r¼   rú   )	rý   r  r   r  r¬   r™   rÞ   r¢   r   )r2   r  r=  Úparamss       r(   r3  r3  \  sn   € ð!Ø%Ôô 	˜B¨&°!Ô4ä�ŠØØÜ�_Š_˜U F¨X¯]©]Ñ$:¸A¼wÀxÇ}Á}Ñ?UÓVÐWô	
ð 	�‰�ŒàÑ øˆHÑ ús   ‚A2A7 Á7A;c                óê   • Uc  0 n[        X5      nSU;  a"  SU R                  ;   a  U R                  S   US'   [        XU5      nUR                  U l        UR                  U l        [        X5      nXS4$ )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)

rI   )rï   rL   rø   rQ   rœ   rÿ   )rœ   rQ   rL   ró   Úim_modr‡  s         r(   Ú	getheaderrŽ  w  st   € ð �|Øˆä'¨Ó1Ðà˜4Ó L°B·G±GÓ$;ØŸW™W \Ñ2ˆˆ\Ñä ¨TÓ2€FØ—‘€B„JØ�I‰I€B„EÜ Ó)€FàÐ&Ð&r'   c                ó‚   • SSK Jn   " S SU5      nU R                  5         U" 5       n[        XPX5        UR                  $ )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                  ó"   • \ rS rSr/ rSS jrSrg)Úgetdata.<locals>.Collectoriª  c                óN   • U R                   R                  U5        [        U5      $ rÎ   )r6   rì   r;   )r4   r6   s     r(   r   Ú getdata.<locals>.Collector.write­  s   € Ø�I‰I×Ñ˜TÔ"Ü�t“9Ðr'   r   N)r6   r   r�   rŠ   )r   r   r    r!   r6   r   r&   r   r'   r(   Ú	Collectorr’  ª  s   † Øˆ÷	r'   r•  )Úior�  r—   r3  r6   )rœ   r=  r‹  r�  r•  r2   s         r(   r¿   r¿   •  s8   € õ& ô�Gô ð ‡G�G„Iá	‹€Bä�b˜fÔ-à�7‰7€Nr'   z.gifz	image/gif)r+   rÓ   r�   rÔ   )rœ   r  r�   r  )rœ   r  rQ   ú_Palette | NonerL   r  r�   r  )rœ   r  r2   ú	IO[bytes]rQ   r—  r�   rÕ   )r  r  r  r  r�   z4tuple[Image.Image, tuple[int, int, int, int] | None])rœ   r  r2   r˜  rQ   r—  r�   rÔ   )rœ   r  r2   r˜  rA  ústr | bytesr�   rÕ   )F)
rœ   r  r2   r˜  rA  r™  r@  rÔ   r�   rÕ   )rœ   r  r�   rŠ   )
r2   r˜  rœ   r  r=  útuple[int, int]rX   rŠ   r�   rÕ   )rœ   r  rL   r  r�   zlist[int] | None)r  rÓ   r�   rŠ   )r  rÓ   r�   rÓ   )rœ   r  r�   rÓ   )rœ   r  r„  z=int | tuple[int, int, int] | tuple[int, int, int, int] | Noner�   rŠ   )rœ   r  rL   r  r�   úlist[bytes])
r2   r˜  r  r  r=  rš  r‹  r  r�   rÕ   )NN)rœ   r  rQ   r—  rL   zdict[str, Any] | Noner�   z$tuple[list[bytes], list[int] | None])r¼   )rœ   r  r=  rš  r‹  r   r�   r›  )JÚ
__future__r   r'  ry  rc  r[  Úenumr   Ú	functoolsr   Útypingr   r   r   Ú r
   r   r   r   r   r   r   Ú_binaryr   rM   r   r   rK  Ú_utilr   ÚTYPE_CHECKINGr   r   r   Ú_typingr   r   r#   r    r,   r.   rÞ   rä   rÓ   rê   rë   rŠ   Ú_Paletterø   r  r  r  r>  rB  r  r  r  rl  rp  rï   rM  rN  rL  r*  rÿ   r3  rŽ  r¿   Úregister_openrÖ   Úregister_saveÚregister_save_allÚregister_extensionÚregister_mimer   r'   r(   Ú<module>r«     s  ðõ4 #ã Û Û 	Û Ý Ý %ß (Ñ (÷÷ ñ õ "Ý Ý !Ý  à€Þß"åÝô�gô ð #×2Ñ2Ð ô5ôh�9×&Ñ&ô hð^ ˜# CÑ
(€ôð4 �9Ñ˜t C™yÑ(¨<×+DÑ+DÑD€ðDØðDØ-ðDØ5CðDàôDðNØðàðð ðð 
ô	ð8
2Øð
2Ø$/ð
2à9ô
2ô ˆZô  ðØðØ"ðØ-<ðà	ôôD+ð
 MRðØðØ"ðØ.9ðØEIðà	õô&ð/Øð/Ø"ð/Ø,;ð/ØDGð/à	ô/ôd-ðd €ô3ôlCôô$ð ØðàRðð 	ôô6;ð|!Øð!àð!ð ð!ð ð	!ð
 
ô!ð8 UYð'Øð'Ø-ð'Ø<Qð'à)õ'ð> 06ð"Øð"Ø,ð"ØADð"àõ"ðP × Ò �L×'Ñ'¨°wÔ ?Ø × Ò �L×'Ñ'¨Ô /Ø × Ò ˜×+Ñ+¨YÔ 7Ø × Ò ˜×,Ñ,¨fÔ 5Ø × Ò �L×'Ñ'¨Õ 5r'   