§
    yØj‘@  ã                  ó¸  — d Z ddlmZ ddh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 d
ZerddlmZ  G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Zd9d„Z	 d:d;d„Zd<d„Zd<d„Z G d„ d e¦  «        Zd=d"„Z G d#„ d$ej        ¦  «        Z G d%„ d&ej        ej        ¦  «        Z G d'„ d(e¦  «        Z G d)„ d*e¦  «        Z  G d+„ d,ej!        ¦  «        Z"d>d4„Z# ej$        ej%        ee¦  «          ej&        ej%        d5¦  «          ej'        d6e¦  «          ej'        d7e ¦  «          ej(        ej%        e#¦  «          ej)        d8e"¦  «         dS )?aÑ  
Blizzard Mipmap Format (.blp)
Jerome Leclanche <jerome@leclan.ch>

The contents of this file are hereby released in the public domain (CC0)
Full text of the CC0 license:
  https://creativecommons.org/publicdomain/zero/1.0/

BLP1 files, used mostly in Warcraft III, are not fully supported.
All types of BLP2 files used in World of Warcraft are supported.

The BLP file structure consists of a header, up to 16 mipmaps of the
texture

Texture sizes must be powers of two, though the two dimensions do
not have to be equal; 512x256 is valid, but 512x200 is not.
The first mipmap (mipmap #0) is the full size image; each subsequent
mipmap halves both dimensions. The final mipmap should be 1x1.

BLP files come in many different flavours:
* JPEG-compressed (type == 0) - only supported for BLP1.
* RAW images (type == 1, encoding == 1). Each mipmap is stored as an
  array of 8-bit values, one per pixel, left to right, top to bottom.
  Each value is an index to the palette.
* DXT-compressed (type == 1, encoding == 2):
- DXT1 compression is used if alpha_encoding == 0.
  - An additional alpha bit is used if alpha_depth == 1.
  - DXT3 compression is used if alpha_encoding == 1.
  - DXT5 compression is used if alpha_encoding == 7.
é    )ÚannotationsÚioÚstructN)ÚIntEnum)ÚBytesIOé   )ÚImageÚ	ImageFileF)ÚIOc                  ó   — e Zd ZdZdS )ÚFormatr   N)Ú__name__Ú
__module__Ú__qualname__ÚJPEG© ó    ú‡/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/PIL/BlpImagePlugin.pyr   r   1   s   € € € € € Ø€D€D€Dr   r   c                  ó   — e Zd ZdZdZdZdS )ÚEncodingr   é   é   N)r   r   r   ÚUNCOMPRESSEDÚDXTÚUNCOMPRESSED_RAW_BGRAr   r   r   r   r   5   s    € € € € € Ø€LØ
€CØÐÐÐr   r   c                  ó   — e Zd ZdZdZdZdS )ÚAlphaEncodingr   r   é   N)r   r   r   ÚDXT1ÚDXT3ÚDXT5r   r   r   r   r   ;   s   € € € € € Ø€DØ€DØ€D€D€Dr   r   ÚiÚintÚreturnútuple[int, int, int]c                ó<   — | dz	  dz  dz  | dz	  dz  dz  | dz  dz  fS )Né   é   r   é   é?   r   r   )r"   s    r   Ú
unpack_565r+   A   s2   € Ø�"‰W˜Ñ Ñ" a¨1¡f°¡_¸Ñ$:¸QÀ¹XÈ!¹OÐKÐKr   ÚdataÚbytesÚalphaÚboolú1tuple[bytearray, bytearray, bytearray, bytearray]c           	     óT  — t          | ¦  «        dz  }t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         f}t          |¦  «        D �]N}|dz  }t          j        d| |¦  «        \  }}}t          |¦  «        \  }	}
}t          |¦  «        \  }}}t          d¦  «        D ]ö}t          d¦  «        D ]ä}|dz  }|dz	  }d}|dk    r|	|
|}}}n‰|dk    r|||}}}n||dk    rA||k    r"d|	z  |z   dz  }d|
z  |z   dz  }d|z  |z   dz  }nN|	|z   dz  }|
|z   dz  }||z   dz  }n5|dk    r/||k    r"d|z  |	z   dz  }d|z  |
z   dz  }d|z  |z   dz  }nd	\  }}}}|r ||                              ||||g¦  «         ŒÆ||                              |||g¦  «         ŒåŒ÷�ŒP|S )
úE
    input: one "row" of data (i.e. will produce 4*width pixels)
    é   z<HHIé   r   r   éÿ   r   r   )r   r   r   r   ©ÚlenÚ	bytearrayÚranger   Úunpack_fromr+   Úextend)r,   r.   ÚblocksÚretÚblock_indexÚidxÚcolor0Úcolor1ÚbitsÚr0Úg0Úb0Úr1Úg1Úb1Újr"   ÚcontrolÚaÚrÚgÚbs                         r   Údecode_dxt1rO   E   s)  € õ �‰YŒY˜!‰^€FÝ‰;Œ;�	™œ¥Y¡[¤[µ)±+´+Ð
>€Cå˜V‘}”}ð *-ñ *-ˆà˜A‰oˆÝ%Ô1°&¸$ÀÑDÔDÑˆ�˜å Ñ'Ô'‰
ˆˆB�Ý Ñ'Ô'‰
ˆˆB�õ �q‘”ð  	-ð  	-ˆAÝ˜1‘X”Xð -ð -�ð  ™(�Ø˜q‘y�à�Ø˜a’<�<Ø  " b˜!�q�A�AØ ’\�\Ø  " b˜!�q�A�AØ ’\�\Ø ’�Ø ™V b™[¨QÑ.˜Ø ™V b™[¨QÑ.˜Ø ™V b™[¨QÑ.˜˜à "™W¨™N˜Ø "™W¨™N˜Ø "™W¨™N˜˜Ø ’\�\Ø ’�Ø ™V b™[¨QÑ.˜Ø ™V b™[¨QÑ.˜Ø ™V b™[¨QÑ.˜˜à%/™
˜˜1˜a àð -Ø˜”F—M’M 1 a¨¨A ,Ñ/Ô/Ð/Ð/à˜”F—M’M 1 a¨ )Ñ,Ô,Ð,Ð,ð?-ñ 	-ðD €Jr   c           	     óŠ  — t          | ¦  «        dz  }t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         f}t          |¦  «        D �]i}|dz  }| ||dz   …         }t          j        d|¦  «        }t          j        d|d¦  «        \  }}t          j        d|d¦  «        \  }	t          |¦  «        \  }
}}t          |¦  «        \  }}}t          d¦  «        D ]Ø}d}t          d¦  «        D ]Ä}d|z  |z   d	z  }||         }|rd}|dz  }nd
}|dz  }|dz  }|	d	d|z  |z   z  z	  dz  }|dk    r|
||}}}n\|dk    r|||}}}nO|d	k    r"d	|
z  |z   dz  }d	|z  |z   dz  }d	|z  |z   dz  }n'|dk    r!d	|z  |
z   dz  }d	|z  |z   dz  }d	|z  |z   dz  }||                              ||||g¦  «         ŒÅŒÙ�Œk|S )r2   é   z<8Bú<HHr3   ú<Ié   r4   Fr   Té   é   r   r   r   r6   )r,   r<   r=   r>   r?   ÚblockrB   r@   rA   ÚcoderC   rD   rE   rF   rG   rH   rI   Úhighr"   Úalphacode_indexrK   Ú
color_coderL   rM   rN   s                            r   Údecode_dxt3r\   ~   s?  € õ
 �‰YŒY˜"‰_€FÝ‰;Œ;�	™œ¥Y¡[¤[µ)±+´+Ð
>€Cå˜V‘}”}ð (,ñ (,ˆØ˜BÑˆØ�S˜3 ™8�^Ô$ˆåÔ! %¨Ñ/Ô/ˆÝÔ+¨E°5¸!Ñ<Ô<‰ˆ�åÔ$ T¨5°"Ñ5Ô5‰ˆå Ñ'Ô'‰
ˆˆB�Ý Ñ'Ô'‰
ˆˆB�å�q‘”ð 	,ð 	,ˆAØˆDÝ˜1‘X”Xð ,ð ,�Ø#$ q¡5¨1¡9°Ñ"2�Ø˜Ô)�Øð Ø �DØ˜!‘G�A�Aà�DØ˜‘H�AØ�R‘�à" a¨1¨q©5°1©9¡oÑ5¸Ñ=�
à ’?�?Ø  " b˜!�q�A�AØ 1’_�_Ø  " b˜!�q�A�AØ 1’_�_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�A�AØ 1’_�_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�Aà�A”—’˜q ! Q¨˜lÑ+Ô+Ð+Ð+ð5,ñ	,ð< €Jr   c           	     ó  — t          | ¦  «        dz  }t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         f}t          |¦  «        D �](}|dz  }| ||dz   …         }t          j        d|¦  «        \  }}t          j        d|d¦  «        }|d         |d         dz  z  |d         dz  z  |d         d	z  z  }	|d
         |d         dz  z  }
t          j        d|d¦  «        \  }}t          j        d|d¦  «        \  }t          |¦  «        \  }}}t          |¦  «        \  }}}t          d¦  «        D �]=}t          d¦  «        D �])}dd|z  |z   z  }|dk    r	|
|z	  dz  }n |dk    r|
dz	  |	dz  dz  z  }n|	|dz
  z	  dz  }|d
k    r|}nJ|dk    r|}nA||k    rd|z
  |z  |dz
  |z  z   dz  }n&|dk    rd
}n|dk    rd}nd|z
  |z  |dz
  |z  z   dz  }|dd|z  |z   z  z	  dz  }|d
k    r|||}}}n\|dk    r|||}}}nO|dk    r"d|z  |z   dz  }d|z  |z   dz  }d|z  |z   dz  }n'|dk    r!d|z  |z   dz  }d|z  |z   dz  }d|z  |z   dz  }||                              ||||g¦  «         �Œ+�Œ?�Œ*|S )zG
    input: one "row" of data (i.e. will produce 4 * width pixels)
    rQ   z<BBz<6Br   r   r3   r4   r)   é   r   r   rR   rS   rT   r   rU   é   r5   r6   )r,   r<   r=   r>   r?   rW   Úa0Úa1rB   Ú
alphacode1Ú
alphacode2r@   rA   rX   rC   rD   rE   rF   rG   rH   rI   r"   rZ   Ú	alphacoderK   r[   rL   rM   rN   s                                r   Údecode_dxt5re   ³   sB  € õ
 �‰YŒY˜"‰_€FÝ‰;Œ;�	™œ¥Y¡[¤[µ)±+´+Ð
>€Cå˜V‘}”}ð 9,ñ 9,ˆØ˜BÑˆØ�S˜3 ™8�^Ô$ˆåÔ# E¨5Ñ1Ô1‰ˆˆBåÔ! %¨°Ñ2Ô2ˆØ˜!”W  Q¤¨1¡Ñ-°°a´¸B±Ñ?À4ÈÄ7ÈbÁ=ÑQˆ
Ø˜!”W  Q¤¨1¡Ñ-ˆ
åÔ+¨E°5¸!Ñ<Ô<‰ˆ�åÔ$ T¨5°"Ñ5Ô5‰ˆå Ñ'Ô'‰
ˆˆB�Ý Ñ'Ô'‰
ˆˆB�å�q‘”ð (	,ñ (	,ˆAÝ˜1‘X”Xð ',ñ ',�à"# q¨1¡u¨q¡y¡/�à" bÒ(Ð(Ø!+¨Ñ!>À$Ñ F�I�IØ$¨Ò*Ð*Ø!+¨rÑ!1°zÀQ±È$Ñ6NÑ O�I�Ià!+°À"Ñ0DÑ!EÈÑ M�Ià ’>�>Ø�A�AØ !’^�^Ø�A�AØ˜"’W�WØ˜i™-¨2Ñ-°¸Q±À"Ñ0DÑDÈÑJ�A�AØ !’^�^Ø�A�AØ !’^�^Ø�A�Aà˜i™-¨2Ñ-°¸Q±À"Ñ0DÑDÈÑJ�Aà" a¨1¨q©5°1©9¡oÑ5¸Ñ=�
à ’?�?Ø  " b˜!�q�A�AØ 1’_�_Ø  " b˜!�q�A�AØ 1’_�_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�A�AØ 1’_�_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�Aà�A”—’˜q ! Q¨˜lÑ+Ô+Ð+Ñ+ñO',ñ(	,ðT €Jr   c                  ó   — e Zd ZdS )ÚBLPFormatErrorN)r   r   r   r   r   r   rg   rg   ù   s   € € € € € Ø€Dr   rg   Úprefixc                ó,   — |                       d¦  «        S )N)ó   BLP1ó   BLP2)Ú
startswith)rh   s    r   Ú_acceptrm   ý   s   € Ø×ÒÐ/Ñ0Ô0Ð0r   c                  ó"   — e Zd ZdZdZdZdd„ZdS )	ÚBlpImageFilez 
    Blizzard Mipmap Format
    ÚBLPzBlizzard Mipmap Formatr$   ÚNonec                ó  — | j         €J ‚| j                              d¦  «        | _        t          | j        ¦  «        s&dt	          | j        ¦  «        › �}t          |¦  «        ‚t          j        d| j                              d¦  «        ¦  «        d         }| j        dk    r8t          j        d| j                              d¦  «        ¦  «        d         dk    }nÂt          j        d| j                              d¦  «        ¦  «        d         }t          j        d| j                              d¦  «        ¦  «        d         dk    }t          j        d| j                              d¦  «        ¦  «        d         }| j                              dt          j
        ¦  «         t          j        d	| j                              d
¦  «        ¦  «        | _        | j        dk    r`t          j        d| j                              d¦  «        ¦  «        d         }| j                              dt          j
        ¦  «         |||f}d}n||||f}d}| j                             ¦   «         }|rdnd| _        t          j        |ddg| j        ¢R ||¦  «        g| _        d S )Nr4   zBad BLP magic ú<ir   rj   rS   ú<br   ú<IIr3   é   é   ÚRGBAÚRGB)ÚfpÚreadÚmagicrm   Úreprrg   r   ÚunpackÚseekÚosÚSEEK_CURÚ_sizeÚdecodeÚ_moder
   Ú_TileÚsizeÚtile)	ÚselfÚmsgÚcompressionr.   ÚencodingÚalpha_encodingÚargsÚoffsetÚdecoders	            r   Ú_openzBlpImageFile._open	  s  € ØŒwÐ"Ð"Ð"Ø”W—\’\ !‘_”_ˆŒ
Ý�t”zÑ"Ô"ð 	&Ø5¥4¨¬
Ñ#3Ô#3Ð5Ð5ˆCÝ  Ñ%Ô%Ð%å”m D¨$¬'¯,ª,°q©/¬/Ñ:Ô:¸1Ô=ˆØŒ:˜Ò Ð Ý”M $¨¬¯ª°Q©¬Ñ8Ô8¸Ô;¸qÒ@ˆEˆEå”} T¨4¬7¯<ª<¸©?¬?Ñ;Ô;¸AÔ>ˆHÝ”M $¨¬¯ª°Q©¬Ñ8Ô8¸Ô;¸qÒ@ˆEÝ#œ]¨4°´·²¸a±´ÑAÔAÀ!ÔDˆNØŒG�LŠL˜�BœKÑ(Ô(Ð(å”] 5¨$¬'¯,ª,°q©/¬/Ñ:Ô:ˆŒ
ð Œ:˜Ò Ð Ý”} T¨4¬7¯<ª<¸©?¬?Ñ;Ô;¸AÔ>ˆHØŒG�LŠL˜�BœKÑ(Ô(Ð(à ¨5Ð1ˆDØˆFˆFà ¨5°.ÐAˆDØˆFà”*×#Ò#Ñ%Ô%ˆà$Ð/�V�V¨%ˆŒ
Ý”_ W¨q°!Ð.@°d´iÐ.@Ð.@À&È$ÑOÔOÐPˆŒ	ˆ	ˆ	r   N©r$   rq   )r   r   r   Ú__doc__ÚformatÚformat_descriptionr�   r   r   r   ro   ro     sE   € € € € € ðð ð €FØ1Ðð Qð  Qð  Qð  Qð  Qð  Qr   ro   c                  ó\   — e Zd ZdZdd„Zej        dd„¦   «         Zdd	„Zdd„Z	dd„Z
dd„ZdS )Ú_BLPBaseDecoderTÚbufferúImage.DecoderInputr$   útuple[int, int]c                ó¬   — 	 |                       ¦   «          |                      ¦   «          n)# t          j        $ r}d}t	          |¦  «        |‚d }~ww xY wdS )NzTruncated BLP file)éÿÿÿÿr   )Ú_read_headerÚ_loadr   ÚerrorÚOSError)rˆ   r—   Úer‰   s       r   rƒ   z_BLPBaseDecoder.decode/  sc   € ð	&Ø×ÒÑÔÐØ�JŠJ‰LŒLˆLˆLøÝŒ|ð 	&ð 	&ð 	&Ø&ˆCÝ˜#‘,”, AÐ%øøøøð	&øøøð ˆus   ‚(+ «AºAÁArq   c                ó   — d S ©Nr   ©rˆ   s    r   r�   z_BLPBaseDecoder._load8  s   € àˆr   c                óº   — t          j        d|                      d¦  «        ¦  «        | _        t          j        d|                      d¦  «        ¦  «        | _        d S )Nú<16Ié@   )r   r~   Ú
_safe_readÚ_offsetsÚ_lengthsr£   s    r   rœ   z_BLPBaseDecoder._read_header<  sD   € Ýœ f¨d¯oªo¸fÑ.EÔ.EÑFÔFˆŒÝœ f¨d¯oªo¸fÑ.EÔ.EÑFÔFˆŒˆˆr   Úlengthr#   r-   c                óH   — | j         €J ‚t          j        | j         |¦  «        S r¢   )Úfdr
   r§   )rˆ   rª   s     r   r§   z_BLPBaseDecoder._safe_read@  s%   € ØŒwÐ"Ð"Ð"ÝÔ# D¤G¨VÑ4Ô4Ð4r   úlist[tuple[int, int, int, int]]c                óê   — g }t          d¦  «        D ]`}	 t          j        d|                      d¦  «        ¦  «        \  }}}}n# t          j        $ r Y  nw xY w|                     ||||f¦  «         Œa|S )Né   ú<4Br4   )r9   r   r~   r§   rž   Úappend)rˆ   r=   r"   rN   rM   rL   rK   s          r   Ú_read_palettez_BLPBaseDecoder._read_paletteD  sŽ   € ØˆÝ�s‘”ð 	%ð 	%ˆAðÝ#œ]¨5°$·/²/À!Ñ2DÔ2DÑEÔE‘
��1�a˜˜øÝ”<ð ð ð Ø��ðøøøà�JŠJ˜˜1˜a �|Ñ$Ô$Ð$Ð$Øˆ
s   •-AÁAÁAÚpaletter.   r/   r8   c                ó`  — t          ¦   «         }t          |                      | j        d         ¦  «        ¦  «        }	 	 t	          j        d|                     d¦  «        ¦  «        \  }n# t          j        $ r Y n4w xY w||         \  }}}}	|||f}
|r|
|	fz  }
|                     |
¦  «         Œq|S )Nr   Tú<Br   )	r8   r   r§   r©   r   r~   r{   rž   r;   )rˆ   r³   r.   r,   Ú_datarŽ   rN   rM   rL   rK   Úds              r   Ú
_read_bgraz_BLPBaseDecoder._read_bgraN  sÂ   € õ ‰{Œ{ˆÝ˜Ÿš¨¬°aÔ(8Ñ9Ô9Ñ:Ô:ˆð		ðÝ"œM¨$°·
²
¸1±´Ñ>Ô>‘	��øÝ”<ð ð ð Ø�ðøøøà  œ‰JˆAˆq�!�QØ"# Q¨ ˆAØð Ø�a�T‘	�Ø�KŠK˜‰NŒNˆNð		ð ˆs   ¾*A) Á)A;Á:A;N)r—   r˜   r$   r™   r‘   )rª   r#   r$   r-   )r$   r­   )r³   r­   r.   r/   r$   r8   )r   r   r   Ú	_pulls_fdrƒ   ÚabcÚabstractmethodr�   rœ   r§   r²   r¸   r   r   r   r–   r–   ,  s¥   € € € € € Ø€Iðð ð ð ð 	Ôðð ð ñ ÔððGð Gð Gð Gð5ð 5ð 5ð 5ðð ð ð ðð ð ð ð ð r   r–   c                  ó   — e Zd Zdd„Zdd„ZdS )ÚBLP1Decoderr$   rq   c                ó~  — | j         \  }}}|t          j        k    r|                      ¦   «          d S |dk    rf|dv rA|                      ¦   «         }|                      ||¦  «        }|                      |¦  «         d S dt          |¦  «        › �}t          |¦  «        ‚dt          |¦  «        › �}t          |¦  «        ‚)Nr   )r4   r)   zUnsupported BLP encoding zUnsupported BLP compression )	r�   r   r   Ú_decode_jpeg_streamr²   r¸   Ú
set_as_rawr}   rg   )rˆ   Ú_compressionÚ	_encodingr.   r³   r,   r‰   s          r   r�   zBLP1Decoder._loada  sÉ   € Ø)-¬Ñ&ˆ�i à�6œ;Ò&Ð&Ø×$Ò$Ñ&Ô&Ð&Ð&Ð&à˜QÒÐØ˜FÐ"Ð"Ø×,Ò,Ñ.Ô.�Ø—’ w°Ñ6Ô6�Ø—’ Ñ%Ô%Ð%Ð%Ð%àCµ$°y±/´/ÐCÐC�Ý$ SÑ)Ô)Ð)àBµ°i±´ÐBÐBˆCÝ  Ñ%Ô%Ð%r   c                óþ  — ddl m} t          j        d|                      d¦  «        ¦  «        \  }|                      |¦  «        }| j        €J ‚|                      | j        d         | j                             ¦   «         z
  ¦  «         |                      | j        d         ¦  «        }||z   } |t          |¦  «        ¦  «        }t          j        |j        ¦  «         |j        dk    rX|j        d         j        }t!          |t"          ¦  «        sJ ‚|j        d                              |d         df¬¦  «        g|_        |                      |                     d¦  «                             ¦   «         d	¦  «         d S )
Nr   )ÚJpegImageFilerS   r4   r   ÚCMYK)r�   ry   ÚBGR)ÚJpegImagePluginrÄ   r   r~   r§   r¬   r¨   Útellr©   r   r	   Ú_decompression_bomb_checkr†   Úmoder‡   r�   Ú
isinstanceÚtupleÚ_replacerÀ   ÚconvertÚtobytes)rˆ   rÄ   Újpeg_header_sizeÚjpeg_headerr,   Úimager�   s          r   r¿   zBLP1Decoder._decode_jpeg_streams  sT  € Ø2Ð2Ð2Ð2Ð2Ð2å$œm¨D°$·/²/À!Ñ2DÔ2DÑEÔEÑÐ	Ø—o’oÐ&6Ñ7Ô7ˆØŒwÐ"Ð"Ð"Ø�Š˜œ aÔ(¨4¬7¯<ª<©>¬>Ñ9Ñ:Ô:Ð:Ø�Š˜tœ}¨QÔ/Ñ0Ô0ˆØ˜TÑ!ˆØ��g d™mœmÑ,Ô,ˆÝÔ'¨¬
Ñ3Ô3Ð3ØŒ:˜ÒÐØ”:˜a”=Ô%ˆDÝ˜d¥EÑ*Ô*Ð*Ð*Ð*Øœ* Qœ-×0Ò0°t¸A´wÀÐ6GÐ0ÑHÔHÐIˆEŒJØ�Š˜Ÿš eÑ,Ô,×4Ò4Ñ6Ô6¸Ñ>Ô>Ð>Ð>Ð>r   Nr‘   )r   r   r   r�   r¿   r   r   r   r½   r½   `  s<   € € € € € ð&ð &ð &ð &ð$?ð ?ð ?ð ?ð ?ð ?r   r½   c                  ó   — e Zd Zdd„ZdS )ÚBLP2Decoderr$   rq   c                óÞ  — | j         \  }}}}|                      ¦   «         }| j        €J ‚| j                             | j        d         ¦  «         |dk    �rá|t
          j        k    r|                      ||¦  «        }�nÚ|t
          j        k    �r‡t          ¦   «         }|t          j        k    rd| j        j        dz   dz  dz  }t          | j        j        dz   dz  ¦  «        D ]-}t!          |                      |¦  «        |¦  «        D ]}	||	z  }ŒŒ.�nG|t          j        k    rb| j        j        dz   dz  dz  }t          | j        j        dz   dz  ¦  «        D ],}t'          |                      |¦  «        ¦  «        D ]}	||	z  }ŒŒ-nÕ|t          j        k    rb| j        j        dz   dz  dz  }t          | j        j        dz   dz  ¦  «        D ],}t+          |                      |¦  «        ¦  «        D ]}	||	z  }ŒŒ-ncdt-          |¦  «        › �}
t/          |
¦  «        ‚dt-          |¦  «        › �}
t/          |
¦  «        ‚d	t-          |¦  «        › �}
t/          |
¦  «        ‚|                      |¦  «         d S )
Nr   r   r   r4   r3   rQ   zUnsupported alpha encoding zUnknown BLP encoding zUnknown BLP compression )r�   r²   r¬   r   r¨   r   r   r¸   r   r8   r   r   ÚstateÚxsizer9   ÚysizerO   r§   r    r\   r!   re   r}   rg   rÀ   )rˆ   rÁ   rÂ   r.   Ú_alpha_encodingr³   r,   ÚlinesizeÚybr·   r‰   s              r   r�   zBLP2Decoder._load†  s¬  € Ø:>¼)Ñ7ˆ�i ¨à×$Ò$Ñ&Ô&ˆàŒwÐ"Ð"Ð"ØŒ�Š�T”] 1Ô%Ñ&Ô&Ð&à˜1ÒÑð �HÔ1Ò1Ð1Ø—’ w°Ñ6Ô6�‘à�hœlÒ*Ñ*Ý ‘{”{�Ø"¥mÔ&8Ò8Ð8Ø $¤
Ô 0°1Ñ 4¸Ñ:¸QÑ>�HÝ# T¤ZÔ%5¸Ñ%9¸aÑ$?Ñ@Ô@ð &ð &˜Ý!,¨T¯_ª_¸XÑ-FÔ-FÈÑ!NÔ!Nð &ð &˜AØ  A™I˜D˜Dð&ñ&ð %­Ô(:Ò:Ð:Ø $¤
Ô 0°1Ñ 4¸Ñ:¸RÑ?�HÝ# T¤ZÔ%5¸Ñ%9¸aÑ$?Ñ@Ô@ð &ð &˜Ý!,¨T¯_ª_¸XÑ-FÔ-FÑ!GÔ!Gð &ð &˜AØ  A™I˜D˜Dð&ð&ð %­Ô(:Ò:Ð:Ø $¤
Ô 0°1Ñ 4¸Ñ:¸RÑ?�HÝ# T¤ZÔ%5¸Ñ%9¸aÑ$?Ñ@Ô@ð &ð &˜Ý!,¨T¯_ª_¸XÑ-FÔ-FÑ!GÔ!Gð &ð &˜AØ  A™I˜D˜Dð&ð&ð P½¸_Ñ8MÔ8MÐOÐO�CÝ(¨Ñ-Ô-Ð-à?­d°9©o¬oÐ?Ð?�Ý$ SÑ)Ô)Ð)ð B­T°,Ñ-?Ô-?ÐAÐAˆCÝ  Ñ%Ô%Ð%à�Š˜ÑÔÐÐÐr   Nr‘   )r   r   r   r�   r   r   r   rÔ   rÔ   …  s(   € € € € € ð,ð ,ð ,ð ,ð ,ð ,r   rÔ   c                  ó"   — e Zd ZdZd
d„Zdd„Zd	S )Ú
BLPEncoderTr$   r-   c           	     óP  — d}| j         €J ‚| j                              d¦  «        }t          t          |¦  «        dz  ¦  «        D ]5}||dz  |dz   dz  …         \  }}}}|t	          j        d||||¦  «        z  }Œ6t          |¦  «        dk     r|dz  }t          |¦  «        dk     °|S )Nr   rx   r4   r   r°   i   s       )ÚimÚ
getpaletter9   r7   r   Úpack)rˆ   r,   r³   r"   rL   rM   rN   rK   s           r   Ú_write_palettezBLPEncoder._write_palette¸  sÀ   € ØˆØŒwÐ"Ð"Ð"Ø”'×$Ò$ VÑ,Ô,ˆÝ•s˜7‘|”| qÑ(Ñ)Ô)ð 	3ð 	3ˆAØ   Q¡¨!¨a©%°1©Ð!4Ô5‰JˆAˆq�!�QØ•F”K  q¨!¨Q°Ñ2Ô2Ñ2ˆDˆDÝ�$‰iŒi˜'Ò!Ð!Ø�KÑˆDõ �$‰iŒi˜'Ò!Ð!àˆr   Úbufsizer#   útuple[int, int, bytes]c           
     ó°  — |                       ¦   «         }dt          |¦  «        z   }t          j        d|gd¢R Ž }| j        €J ‚| j        j        \  }}|t          j        d||z  gd¢R Ž z  }||z  }t          |¦  «        D ]F}t          |¦  «        D ]4}|t          j        d| j                             ||f¦  «        ¦  «        z  }Œ5ŒGt          |¦  «        d|fS )Né”   r¥   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rµ   r   )râ   r7   r   rá   rß   r†   r9   Úgetpixel)	rˆ   rã   Úpalette_datarŽ   r,   ÚwÚhÚyÚxs	            r   ÚencodezBLPEncoder.encodeÃ  sú   € Ø×*Ò*Ñ,Ô,ˆà ¥3 |Ñ#4Ô#4Ñ4ˆÝŒ{˜6 6Ð8¨YÐ8Ð8Ð8ˆàŒwÐ"Ð"Ð"ØŒwŒ|‰ˆˆ1Ø•”˜F A¨¡EÐ8¨YÐ8Ð8Ð8Ñ8ˆà�Ñˆå�q‘”ð 	Dð 	DˆAÝ˜1‘X”Xð Dð D�Ø�œ D¨$¬'×*:Ò*:¸A¸q¸6Ñ*BÔ*BÑCÔCÑC��ðDõ �4‰yŒy˜!˜TÐ!Ð!r   N)r$   r-   )rã   r#   r$   rä   )r   r   r   Ú
_pushes_fdrâ   rí   r   r   r   rÝ   rÝ   µ  sA   € € € € € Ø€Jð	ð 	ð 	ð 	ð"ð "ð "ð "ð "ð "r   rÝ   rß   úImage.Imagerz   ú	IO[bytes]Úfilenameústr | bytesrq   c           
     ó^  — | j         dk    rd}t          |¦  «        ‚| j                             d¦  «        dk    rdnd}|                     |¦  «         | j        €J ‚|                     t          j        dd¦  «        ¦  «         | j        j         d	k    rdnd
}|dk    r)|                     t          j        d|¦  «        ¦  «         nª|                     t          j        dt          j	        ¦  «        ¦  «         |                     t          j        d|¦  «        ¦  «         |                     t          j        dd
¦  «        ¦  «         |                     t          j        dd
¦  «        ¦  «         |                     t          j        dg| j
        ¢R Ž ¦  «         |dk    rP|                     t          j        dd¦  «        ¦  «         |                     t          j        dd
¦  «        ¦  «         t          j        | |t          j        dd
d
g| j
        ¢R d
| j         ¦  «        g¦  «         d S )NÚPzUnsupported BLP image modeÚblp_versionÚBLP1rj   rk   rs   r   rx   r   z<Lrt   ru   r)   rp   )rÊ   Ú
ValueErrorÚencoderinfoÚgetÚwriter³   r   rá   r   r   r†   r
   Ú_saver…   )rß   rz   rñ   r‰   r|   Úalpha_depths         r   rû   rû   Ö  så  € Ø	„w�#‚~€~Ø*ˆÝ˜‰oŒoÐà”~×)Ò)¨-Ñ8Ô8¸FÒBÐBˆGˆGÈ€EØ‡H‚HˆU�O„O€OàŒ:Ð!Ð!Ð!Ø‡H‚H�VŒ[˜˜qÑ!Ô!Ñ"Ô"Ð"à”z”¨&Ò0Ð0�!�!°a€KØ�ÒÐØ
�Š•”˜T ;Ñ/Ô/Ñ0Ô0Ð0Ð0à
�Š•”˜T¥8Ô#8Ñ9Ô9Ñ:Ô:Ð:Ø
�Š•”˜T ;Ñ/Ô/Ñ0Ô0Ð0Ø
�Š•”˜T 1Ñ%Ô%Ñ&Ô&Ð&Ø
�Š•”˜T 1Ñ%Ô%Ñ&Ô&Ð&Ø‡H‚H�VŒ[˜Ð) ¤Ð)Ð)Ð)Ñ*Ô*Ð*Ø�ÒÐØ
�Š•”˜T 1Ñ%Ô%Ñ&Ô&Ð&Ø
�Š•”˜T 1Ñ%Ô%Ñ&Ô&Ð&å„O�B˜�Yœ_¨U°Q¸Ð4D¸B¼GÐ4DÐ4DÀaÈÌÑQÔQÐRÑSÔSÐSÐSÐSr   z.blprö   ÚBLP2rp   )r"   r#   r$   r%   )F)r,   r-   r.   r/   r$   r0   )r,   r-   r$   r0   )rh   r-   r$   r/   )rß   rï   rz   rð   rñ   rò   r$   rq   )*r’   Ú
__future__r   Ú__lazy_modules__rº   r€   r   Úenumr   r   r   Ú r	   r
   ÚTYPE_CHECKINGÚtypingr   r   r   r   r+   rO   r\   re   ÚNotImplementedErrorrg   rm   ro   ÚABCÚ	PyDecoderr–   r½   rÔ   Ú	PyEncoderrÝ   rû   Úregister_openr“   Úregister_extensionÚregister_decoderÚregister_saveÚregister_encoderr   r   r   ú<module>r     s[  ððð ð> #Ð "Ð "Ð "Ð "Ð "à˜(Ð#Ð à 
€
€
€
Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ð Ð à€Øð ØÐÐÐÐÐðð ð ð ð ˆWñ ô ð ðð ð ð ð ˆwñ ô ð ðð ð ð ð �Gñ ô ð ðLð Lð Lð Lð
  %ð6ð 6ð 6ð 6ð 6ðr2ð 2ð 2ð 2ðjCð Cð Cð CðL	ð 	ð 	ð 	ð 	Ð(ñ 	ô 	ð 	ð1ð 1ð 1ð 1ð(Qð (Qð (Qð (Qð (Q�9Ô&ñ (Qô (Qð (QðV1ð 1ð 1ð 1ð 1�c”g˜yÔ2ñ 1ô 1ð 1ðh"?ð "?ð "?ð "?ð "?�/ñ "?ô "?ð "?ðJ-ð -ð -ð -ð -�/ñ -ô -ð -ð`"ð "ð "ð "ð "�Ô$ñ "ô "ð "ðBTð Tð Tð Tð6 €Ô �LÔ'¨°wÑ ?Ô ?Ð ?Ø €Ô ˜Ô,¨fÑ 5Ô 5Ð 5Ø €Ô �v˜{Ñ +Ô +Ð +Ø €Ô �v˜{Ñ +Ô +Ð +à €Ô �LÔ'¨Ñ /Ô /Ð /Ø €Ô �u˜jÑ )Ô )Ð )Ð )Ð )r   