
    ZMh;L                      d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZ d dlmZ d dlmZmZ d dlmZmZmZmZmZ ddl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dl&m'Z' ddl(m)Z)m*Z* ddlm+Z+ dZ,e,rddl&m-Z-m.Z.  ej/        e0          Z1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAd ZBd!ZCd"ZDd#ZEd$ZFd%ZGd&ZHd'ZId(ZJd)ZKd*ZLd+ZMd,ZNd-ZOd.ZPd/ZQd0ZRd1ZSd2ZTd3ZUd4ZVd5ZWd6ZXd7ZYd8ZZd9Z[d:Z\d;Z]d<Z^d=Z_i dd>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^Z`d_ e`a                                D             Zbi e5d d`dd`dafdbe6d d`dd`dafdbe5d d`d?d`dafdce6d d`d?d`dafdce5dd`dd`dafdde6dd`dd`dafdde5dd`d?d`dafdee6dd`d?d`dafdee5d d`ddfdafdge6d d`ddfdafdge5d d`d?dfdafdhe6d d`d?dfdafdhe5dd`ddfdafdie6dd`ddfdafdie5dd`d?dfdafdje6dd`d?dfdafdje5d d`ddkdafdli e6d d`ddkdafdle5d d`d?dkdafdme6d d`d?dkdafdme5dd`ddkdafdne6dd`ddkdafdne5dd`d?dkdafdoe6dd`d?dkdafdoe5d d`ddpdafdqe6d d`ddpdafdqe5d d`d?dpdafdre6d d`d?dpdafdre5dd`ddpdafdse6dd`ddpdafdse5ddfddpdafdse6ddfddpdafdse5dd`d?dpdafdte6dd`d?dpdafdti e5dd`ddudafdve5d d`ddwdafdxe5dd`ddwdafdxe6dd`ddwdafdye5dd`d?dwdafdze5ddfddwdafd{e6ddfddwdafd|e5d d}dd~dafde6d d}dd~dafde5dd`dd~dafde5ddfdd~dafde6ddfdd~dafde5dd}dd~dafde6dd}dd~dafde5dd`dddffde6dd`dddffde5d?d`dddafdi e6d?d`dddafde5d?d`d?ddafde6d?d`d?ddafde5d?d`dddafde6d?d`dddafde5d?d`dddfde6d?d`dddfde5d?d`dddfde6d?d`dddfde5d?d`dddfde6d?d`dddfde5d?d`ddd`fde6d?d`ddd`fde5d?d`dddfde6d?d`dddfde5d?d`dddfde6d?d`dddfdi e5d?d`dddffde6d?d`dddffde5d?d`dddfde6d?d`dddfde5d?d`dddfde6d?d`dddfde5d?d`dddfde6d?d`dddfde5d?d`dddafde6d?d`dddafde5d?d`dddafde6d?d`dddafde5d?d`dddfde6d?d`dddfde5d?d`ddd`fde6d?d`ddd`fde5d?d`dddffdi e6d?d`dddffde5dAd`dd`dafde6dAd`dd`dafde5dAd`d?d`dafde6dAd`d?d`dafde5dAd`ddfdafde6dAd`ddfdafde5dAd`d?dfdafde6dAd`d?dfdafde5dAd`ddkdafde6dAd`ddkdafde5dAd`d?dkdafde6dAd`d?dkdafde5dAd`ddpdafde6dAd`ddpdafde5dAd`dddfde5dAd`dddffdi e6dAd`dddffde5dAd`d?dpdafde6dAd`d?dpdafde5dEd`dddafde6dEd`dddafde5dEd`dddfde6dEd`dddfde5dEd`dddfde6dEd`dddfde5dEd`dddafde6dEd`dddafde5dGd`ddpdafdse6dGd`ddpdafdse5dGd`dddafde6dGd`dddafde5dKd`dddafde6dKd`dddafdZc edd ecD                       Zeg dZf egejh        dd          s e%dd           ddZiddǄZjd	dʄZki Zli Zmd
d΄Zn G dτ de          Zoedepeqgef         ZrddԄZsddքZtddڄZue,reevef         ZwneZw G dۄ dew          Zxelex_l        emex_m         e+ja                    D ]M\  ZyZzez{                    ddݦ          Zz e|exdez eley         d                     e|exdez emey                    N[l[m[y[z G d dex          Z}e}Z~ G d dej                  Zi dde5ddd`dfdde5dddpdfdde5dddd?fdde5dAddpdfdde5dAddd?fdde5dd?d~dfdde5dddwdfdde5dd?dwdfdde5ddAd~dfdde5d?dddfdde5d?ddd fdde5d?ddd?fdde5dEdddfdde5dGdddfdde5dKdddfdde6dd?d~dfdde6dddwdfde6dd?dwdfde6ddAd~dfdZdd Z G d dej                  ZddZ ej        ej        eei            ej        ej        e            ej        ej        e            ej        ej        ddg            ej        ej        d           dS (      )annotationsN)IteratorMutableMapping)Fraction)NumberRational)IOAnyCallableNoReturncast   )ExifTagsImage	ImageFileImageOpsImagePaletteTiffTags)i16be)i32beo8)	deprecate)StrOrBytesPath)DeferredErroris_pathTYPESF)BufferIntegralLike   s   IIs   MM      i  i  i  i  i
  i    i  i  i  i  i  i  i(  i-  i1  i2  i;  i=  i@  iB  iC  D  iE  iJ  iR  iS  i[  i  i  i  i  iI  is  ii  i  i  i  i  raw   
tiff_ccitt   group3   group4   tiff_lzw   	tiff_jpeg   jpeg   tiff_adobe_deflatei  tiff_raw_16i  packbitsi)  tiff_thunderscani  tiff_deflateit  tiff_sgilogiu  tiff_sgilog24im  lzmaiP  zstdiQ  webpc                    i | ]\  }}||	S  r?   ).0kvs      S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/PIL/TiffImagePlugin.py
<dictcomp>rD      s    BBBA1BBB    r   r?   )1z1;I)rG   z1;IR)rG   rG   )rG   z1;R)r'   )LzL;2I)rH   zL;2IR)rH   zL;2)rH   zL;2R)r+   )rH   zL;4I)rH   zL;4IR)rH   zL;4)rH   zL;4R)r3   )rH   zL;I)rH   zL;IR)rH   rH   )rH   zL;R)   )I;16zI;12)   )rJ   rJ   )I;16BrL   )rJ   zI;16R)II;16S)rM   I;16BS)r)   )    )FF;32F)rQ   F;32BF)rM   zI;32N)rM   I;32S)rM   I;32BS)r3   r3   )LArV   )r3   r3   r3   )RGBrW   )rW   zRGB;R)r3   r3   r3   r3   )RGBArX   r   )rW   RGBX)r3   r3   r3   r3   r3   r   r   )rW   RGBXX)r3   r3   r3   r3   r3   r3   )r   r   r   )rW   RGBXXX)rX   RGBa)r   r   )rX   RGBaX)r   r   r   )rX   RGBaXX)r'   r   )rX   RGBAX)r'   r   r   )rX   RGBAXX)i  )rK   rK   rK   )rW   zRGB;16L)rW   zRGB;16B)rK   rK   rK   rK   )rX   zRGBA;16L)rX   zRGBA;16B)rW   zRGBX;16L)rW   zRGBX;16B)rX   zRGBa;16L)rX   zRGBa;16B)PzP;1)rc   zP;1R)rc   zP;2)rc   zP;2R)rc   zP;4)rc   zP;4R)rc   rc   )rc   PX)PAre   )rc   zP;R)CMYKrf   )rf   CMYKX)rf   CMYKXX)rf   zCMYK;16L)rf   zCMYK;16B)LABri   c              #  @   K   | ]}t          |d                    V  dS )r+   N)len)r@   key_tps     rC   	<genexpr>rm     s,      AAV#fQi..AAAAAArE   )s   MM *s   II* s   MM* s   II *s   MM +s   II+ libtiff_support_custom_tagsTz*Support for LibTIFF earlier than version 4rI   prefixbytesreturnboolc                P    |                      t          t                              S N)
startswithtuplePREFIXESro   s    rC   _acceptry   #  s    U8__---rE   valfloat | Fraction | IFDRationalmax_valint!tuple[IntegralLike, IntegralLike]c                    t          |           dk    }t          |rd| z  n|                               |          }|r|d d d         n|S )Nr   )absIFDRationallimit_rational)rz   r|   invn_ds       rC   _limit_rationalr   '  sT     c((Q,C
-a#gg#
.
.
=
=g
F
FC$3ttt99$rE   r   min_valc                J   t          |           }|j        |j        f}t          d |D                       |k     rt	          | t          |                    }t          d |D                       }t          |          |k    rt	          |d         |d         z  |          }|S )Nc              3  4   K   | ]}t          |          V  d S rt   floatr@   is     rC   rm   z)_limit_signed_rational.<locals>.<genexpr>5  s(      
!
!588
!
!
!
!
!
!rE   c              3  4   K   | ]}t          |          V  d S rt   r   r   s     rC   rm   z)_limit_signed_rational.<locals>.<genexpr>8  s(      ,,1eAhh,,,,,,rE   r   r   )r   	numeratordenominatorminr   r   rv   max)rz   r|   r   fracr   	n_d_floats         rC   _limit_signed_rationalr   /  s     C==D-1^T=M-MC

!
!S
!
!
!!!G++c3w<<00,,,,,,,I
9~~ilYq\97CCJrE   opstrr
   c                     d fd}|S )	Nselfr   argstuple[float, ...]rq   bool | float | Fractionc                4     t          | j                  | S rt   )getattr_val)r   r   r   s     rC   delegatez_delegate.<locals>.delegateG  s     &wty"%%t,,rE   )r   r   r   r   rq   r   r?   )r   r   s   ` rC   	_delegater   F  s(    - - - - - -
 OrE   c                     e Zd ZdZ	 dZ	 d8d9d
Zed:d            Zed;d            Zd<dZ	d=dZ
d;dZd>dZd?dZd@dZ	  ed          Z ed          Z ed          Z ed          Z ed           Z ed!          Z ed"          Z ed#          Z ed$          Z ed%          Z ed&          Z ed'          Z ed(          Z ed)          Z ed*          Z ed+          Z ed,          Z  ed-          Z! ed.          Z" ed/          Z# ed0          Z$ ed1          Z% ed2          Z& ed3          Z' ed4          Z( ed5          Z) e*e+d6          r ed6          Z,d7S d7S )Ar   zImplements a rational class where 0/0 is a legal value to match
    the in the wild use of exif rationals.

    e.g., DigitalZoomRatio - 0.00/0.00  indicates that no digital zoom was used
    )
_numerator_denominatorr   r   valuer{   r   r}   rq   Nonec                H   |  t          |t                    r&|j        | _        |j        | _        |j        | _        dS t          |t                    r|j        | _        |j        | _        n0t          rt          t          |          | _        n|| _        || _        |dk    rt          d          | _        dS |dk    rt          |          | _        dS t          |          |k    r$t          t          |          |          | _        dS t          ||z            | _        dS )z
        :param value: either an integer numerator, a
        float/rational/other number, or an IFDRational
        :param denominator: Optional integer denominator
        Nr   nanr   )
isinstancer   r   r   r   r   r   r   TYPE_CHECKINGr   r    r   r}   )r   r   r   s      rC   __init__zIFDRational.__init__]  s    	#e[)) 	#oDO % 1D
DIFeX&& 	,#oDO % 1D ("&|U";";"' +D!eDIIIA DIIIZZ5   U[99DIII !455DIIIrE   r    c                    | j         S rt   )r   r   s    rC   r   zIFDRational.numerator  s
    rE   c                    | j         S rt   )r   r   s    rC   r   zIFDRational.denominator  s      rE   max_denominatortuple[IntegralLike, int]c                    | j         dk    r| j        | j         fS t          | j        t                    sJ | j                            |          }|j        |j         fS )z

        :param max_denominator: Integer, the maximum denominator value
        :returns: Tuple of (numerator, denominator)
        r   )r   r   r   r   r   limit_denominator)r   r   fs      rC   r   zIFDRational.limit_rational  s^     q  >4#333$)X.....I''88{AM))rE   r   c                D    t          t          | j                            S rt   )r   r   r   r   s    rC   __repr__zIFDRational.__repr__  s    5##$$$rE   c                4    | j                                         S rt   )r   __hash__r   s    rC   r   zIFDRational.__hash__  s    y!!###rE   otherobjectrr   c                    | j         }t          |t                    r|j         }t          |t                    rt          |          }||k    S rt   )r   r   r   r   )r   r   rz   s      rC   __eq__zIFDRational.__eq__  sI    ie[)) 	JEeU## 	**Ce|rE   %list[float | Fraction | IntegralLike]c                *    | j         | j        | j        gS rt   )r   r   r   r   s    rC   __getstate__zIFDRational.__getstate__  s    	4?D,=>>rE   statec                    t                               | d           |\  }}}t          |t          t          f          sJ || _        t          rt          t          |          | _	        n|| _	        t          |t                    sJ || _        d S Nr   )r   r   r   r   r   r   r   r   r    r   r}   r   )r   r   r   r   r   s        rC   __setstate__zIFDRational.__setstate__  s    T1%%%).&j,$ 122222	 	)"<<<DOO(DO,,,,,,(rE   __add____radd____sub____rsub____mul____rmul____truediv____rtruediv____floordiv____rfloordiv____mod____rmod____pow____rpow____pos____neg____abs__	__trunc____lt____gt____le____ge____bool____ceil__	__floor__	__round____int__NrF   )r   r{   r   r}   rq   r   )rq   r    rq   r}   )r   r}   rq   r   rq   r   )r   r   rq   rr   )rq   r   )r   r   rq   r   )-__name__
__module____qualname____doc__	__slots__r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   hasattrr   r   r?   rE   rC   r   r   O  s        
 7I IJ 6  6  6  6  6D    X ! ! ! X!* * * *% % % %$ $ $ $   ? ? ? ?
) 
) 
) 
) i	""Gy$$Hi	""Gy$$Hi	""Gy$$H)M**K9^,,L9^,,LIo..Mi	""Gy$$Hi	""Gy$$Hi	""Gi	""Gi	""G	+&&IYx  FYx  FYx  FYx  Fy$$Hy$$H	+&&I	+&&Iwx## ')I&&' 'rE   ImageFileDirectory_v2idxsize$Callable[[_LoaderFunc], _LoaderFunc]c                     d fd}|S )Nfunc_LoaderFuncrq   c                    ddl m} | j                            d          r&| j        dd                              dd          |<   | ft
          <   | S )Nr   r   load_r-   _ )r   r   r   ru   replace_load_dispatch)r   r   r   r   s     rC   	decoratorz#_register_loader.<locals>.decorator  sd    ######=##G,, 	=qrr*223<<E#J"DjsrE   )r   r   rq   r   r?   )r   r   r   s   `` rC   _register_loaderr     s/           rE   2Callable[[Callable[..., Any]], Callable[..., Any]]c                     d fd}|S )Nr   Callable[..., Any]rq   c                    | t           <   | S rt   )_write_dispatch)r   r   s    rC   r   z#_register_writer.<locals>.decorator  s    #rE   )r   r   rq   r   r?   )r   r   s   ` rC   _register_writerr     s)          rE   idx_fmt_nametuple[int, str, str]r   c                    ddl m} | \  }}|||<   t          j        d           	 ddfd}|ft          |<   fdt
          |<   d S )Nr   r   =Tr   r   datarp   
legacy_apirr   rq   tuple[Any, ...]c                X    |                      t          |          z    |          S rt   )_unpackrk   )r   r   r  fmtr   s      rC   basic_handlerz&_register_basic.<locals>.basic_handler  s/     ||s4yyD07#77>>>rE   c                J     d                      fd|D                       S )NrE   c              3  D   K   | ]}                     |          V  d S rt   )_pack)r@   r   r  r   s     rC   rm   z4_register_basic.<locals>.<lambda>.<locals>.<genexpr>  s1      <<EC''<<<<<<rE   join)r   valuesr  s   ` rC   <lambda>z!_register_basic.<locals>.<lambda>  s0    <<<<<V<<<<< rE   T)r   r   r   rp   r  rr   rq   r  )r   r   structcalcsizer   r   )r   r   r   namer  r  r   s        @@rC   _register_basicr    s    !NCdE#J?9s99%%D FJ? ? ? ? ? ? ? ?
 -N3   OCrE   c                     e Zd ZU dZi Zded<   i Zded<   	 	 	 d_d`dZ ed           Z	 ed           Z
edad            Zej        dbd            ZdcdZdddZdedZdfdZdgd!Zdhd#Zdid$Zdjd&Zdkd'Zdld)Zdmd-Zdnd/Z e eeej        d0d1fej        d2d3fej        d4d5fej         d6d7fej!        d8d9fej"        d:d;fej#        d<d=fej$        d2d3fej%        d>d?fg	                      e&d@d@          dodpdB            Z' e(d@          dqdD            Z) e&dEd@          dodrdF            Z* e(dE          dsdH            Z+ e&dIdJ          	 dodtdL            Z, e(dI          dudN            Z- e&dOd@          dodpdP            Z. e(dO          dvdQ            Z/ e&dRdJ          	 dodtdS            Z0 e(dR          dudT            Z1dwdXZ2dxdYZ3dydZZ4dzd{d]Z5d|d^Z6dS )}r   a  This class represents a TIFF tag directory.  To speed things up, we
    don't decode tags unless they're asked for.

    Exposes a dictionary interface of the tags in the directory::

        ifd = ImageFileDirectory_v2()
        ifd[key] = 'Some Data'
        ifd.tagtype[key] = TiffTags.ASCII
        print(ifd[key])
        'Some Data'

    Individual values are returned as the strings or numbers, sequences are
    returned as tuples of the values.

    The tiff metadata type of each item is stored in a dictionary of
    tag types in
    :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v2.tagtype`. The types
    are read from a tiff file, guessed from the type added, or added
    manually.

    Data Structures:

        * ``self.tagtype = {}``

          * Key: numerical TIFF tag number
          * Value: integer corresponding to the data type from
            :py:data:`.TiffTags.TYPES`

          .. versionadded:: 3.0.0

    'Internal' data structures:

        * ``self._tags_v2 = {}``

          * Key: numerical TIFF tag number
          * Value: decoded data, as tuple for multiple values

        * ``self._tagdata = {}``

          * Key: numerical TIFF tag number
          * Value: undecoded byte string from file

        * ``self._tags_v1 = {}``

          * Key: numerical TIFF tag number
          * Value: decoded data in the v1 format

    Tags will be found in the private attributes ``self._tagdata``, and in
    ``self._tags_v2`` once decoded.

    ``self.legacy_api`` is a value for internal use, and shouldn't be changed
    from outside code. In cooperation with
    :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`, if ``legacy_api``
    is true, then decoded tags will be populated into both ``_tags_v1`` and
    ``_tags_v2``. ``_tags_v2`` will be used if this IFD is used in the TIFF
    save routine. Tags should be read from ``_tags_v1`` if
    ``legacy_api == true``.

    z"dict[int, tuple[int, _LoaderFunc]]r   zdict[int, Callable[..., Any]]r      II*     Nifhrp   ro   bytes | Nonegroup
int | Nonerq   r   c                .   t          |          s"dt          |           d}t          |          ||n	|dd         | _        | j        t          k    rd| _        n)| j        t          k    rd| _        nd}t          |          |d         dk    | _        || _        i | _	        	 | 
                                 | j        r$|                     d	|d
d                   d         n#|                     d|dd                   d         | _        d| _        dS )a  Initialize an ImageFileDirectory.

        To construct an ImageFileDirectory from a real file, pass the 8-byte
        magic header to the constructor.  To only set the endianness, pass it
        as the 'prefix' keyword argument.

        :param ifh: One of the accepted magic headers (cf. PREFIXES); also sets
              endianness.
        :param prefix: Override the endianness of the file.
        znot a TIFF file (header z not valid)Nr'   ><znot a TIFF IFD+   Qr3   r   rH   r+   F)ry   reprSyntaxError_prefixMM_endianII_bigtiffr  tagtyperesetr  next_legacy_api)r   r  ro   r  msgs        rC   r   zImageFileDirectory_v2.__init__H  s     s|| 	#CT#YYCCCCc"""!'!3vvRaR<2DLL\RDLL"Cc"""A"
')'

 }/DLLc!""g&&q))c3qrr7++A. 		
 !rE   c                    | j         S rt   )r   r   s    rC   r  zImageFileDirectory_v2.<lambda>o      4< rE   c                    | j         S rt   )_offsetr   s    rC   r  zImageFileDirectory_v2.<lambda>p  r+  rE   rr   c                    | j         S rt   )r(  r   s    rC   r  z ImageFileDirectory_v2.legacy_apir  s    rE   r   r   c                $    d}t          |          )Nz"Not allowing setting of legacy api)	Exception)r   r   r)  s      rC   r  z ImageFileDirectory_v2.legacy_apiv  s    2nnrE   c                Z    i | _         i | _        i | _        i | _        d | _        d | _        d S rt   )_tags_v1_tags_v2_tagdatar%  _nextr-  r   s    rC   r&  zImageFileDirectory_v2.reset{  s0    (*(**,
#'rE   r   c                :    t          t          |                     S rt   )r   dictr   s    rC   __str__zImageFileDirectory_v2.__str__  s    4::rE   dict[str, Any]c                D      fd                                  D             S )z
        :returns: dict of name|key: value

        Returns the complete tag dictionary, with named tags where possible.
        c                V    i | ]%\  }}t          j        |j                  j        |&S r?   )r   lookupr  r  )r@   coder   r   s      rC   rD   z/ImageFileDirectory_v2.named.<locals>.<dictcomp>  s@     
 
 
e OD$*--2E
 
 
rE   )itemsr   s   `rC   namedzImageFileDirectory_v2.named  s6    
 
 
 
#zz||
 
 
 	
rE   r}   c                n    t          t          | j                  t          | j                  z            S rt   )rk   setr4  r3  r   s    rC   __len__zImageFileDirectory_v2.__len__  )    3t}%%DM(:(::;;;rE   tagr
   c                    || j         vr?| j        |         }| j        |         }| j        |         \  }} || || j                  | |<   | j         |         }| j        rt          |t          t          f          s|f}|S rt   )r3  r4  r%  r   r  r   rv   rp   )r   rD  r   typr   handlerrz   s          rC   __getitem__z!ImageFileDirectory_v2.__getitem__  s    dm##=%D,s#C /4MD'dDO<<DImC ? 	:cE5>#B#B 	&C
rE   r   c                &    || j         v p|| j        v S rt   )r3  r4  r   rD  s     rC   __contains__z"ImageFileDirectory_v2.__contains__      dm#;sdm';;rE   c                >    |                      ||| j                   d S rt   )_setitemr  )r   rD  r   s      rC   __setitem__z!ImageFileDirectory_v2.__setitem__  s     c5$/22222rE   r  c           	     >   t           t          t          f}t          j        || j                  t          ||          r|gn|}|| j        vrj        rj        | j        |<   nt          j	        | j        |<   t          d |D                       rN|D ]5}t          |t                    sJ |dk     rt          j        | j        |<    n6t          j        | j        |<   nNt          d |D                       rd}d}d}	|D ]I}t          |t                    sJ |rd|cxk    rdk     sn d}|rd|cxk     rdk     sn d}|	r|dk     rd}	J|rt          j        | j        |<   n|rt          j        | j        |<   n|	rt          j        | j        |<   nt          j        | j        |<   nt          d	 |D                       rt          j        | j        |<   n[t          d
 |D                       rt          j        | j        |<   n-t          d |D                       rt          j        | j        |<   | j        |         t          j	        k    rd |D             }n'| j        |         t          j        k    rd |D             }| j        |         t          j        k    ot          |t,                    }
|
st/          fd|D                       }|r| j        n| j        }|
sj        dk    s7| j        |         t          j        k    sj        t7          |          dk    rz|sx|r(| j        |         t          j        t          j        fv r|f}	 |\  ||<   d S # t8          $ r7 t;          j        d| dt7          |           d           |d         ||<   Y d S w xY w|||<   d S )Nc              3  @   K   | ]}t          |t                    V  d S rt   )r   r   r@   rB   s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s,      BBaz![11BBBBBBrE   r   c              3  @   K   | ]}t          |t                    V  d S rt   )r   r}   rR  s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  ,      <<As++<<<<<<rE   Tr!   Fi i   c              3  @   K   | ]}t          |t                    V  d S rt   )r   r   rR  s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  ,      >>!Au-->>>>>>rE   c              3  @   K   | ]}t          |t                    V  d S rt   )r   r   rR  s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  rT  rE   c              3  @   K   | ]}t          |t                    V  d S rt   )r   rp   rR  s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  rV  rE   c                h    g | ]/}t          |t                    r|                    d d          n|0S )asciir   )r   r   encoderR  s     rC   
<listcomp>z2ImageFileDirectory_v2._setitem.<locals>.<listcomp>  sJ        1;1c0B0BI),,,  rE   c                Z    g | ](}t          |t                    rt          |          n|)S r?   )r   r}   r   rR  s     rC   r\  z2ImageFileDirectory_v2._setitem.<locals>.<listcomp>  s1    LLL*Q"4"4;eAhhh!LLLrE   c              3  p   K   | ]0}t          |t                    r                    |          n|V  1d S rt   )r   r   cvt_enum)r@   r   infos     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  sW         )35#(>(>Ie$$$E     rE   r   zMetadata Warning, tag z had too many entries: z, expected 1)r   rp   r   r   r<  r  r   r%  type	UNDEFINEDallr   SIGNED_RATIONALRATIONALr}   SHORTSIGNED_SHORTLONGSIGNED_LONGDOUBLEASCIIBYTEr7  rv   r2  r3  lengthrk   
ValueErrorwarningswarn)r   rD  r   r  	basetypesr  rB   shortsigned_shortlongis_ifddestr`  s               @rC   rN  zImageFileDirectory_v2._setitem  sq   UC(	sDJ//&ui88C%edl""y %6$(IS!!$,$6S!BB6BBBBB !6# > >)![99999q55080HDL-!E ! -5,=S)<<V<<<<< 6 E#'LD# ) ))!S11111  *!q....5....$)E' 1A1E1E1E1E1E1E1E1E+0L )AEE#(D A,4NS))% A,4,AS)) A,4MS)),4,@S))>>v>>>>> 6(0DL%%<<V<<<<< 6(0DL%%>>v>>>>> 6(0DL%< 222   FF \#("333LLVLLLFc"hm3P
648P8P 	    #    F
 !+=t}}  	[A|C HM11#Fq(8(8(8  #dl3/!(4   !&%c & & &1S 1 16{{1 1 1   #1IS				& DIIIs   M =NNc                    | j                             |d            | j                            |d            | j                            |d            d S rt   )r3  popr2  r4  rJ  s     rC   __delitem__z!ImageFileDirectory_v2.__delitem__  sP    #t$$$#t$$$#t$$$$$rE   Iterator[int]c                n    t          t          | j                  t          | j                  z            S rt   )iterrA  r4  r3  r   s    rC   __iter__zImageFileDirectory_v2.__iter__  )    C&&T]););;<<<rE   r  r   r  c                <    t          j        | j        |z   |          S rt   )r  unpackr"  )r   r  r   s      rC   r  zImageFileDirectory_v2._unpack  s    }T\C/666rE   r  c                6    t          j        | j        |z   g|R  S rt   )r  packr"  )r   r  r  s      rC   r	  zImageFileDirectory_v2._pack  s!    {4<#-77777rE   Hrr  rH   rt  bzsigned bytehzsigned shortlzsigned longr   r   ddoubler  long8r   Tc                    |S rt   r?   r   r   r  s      rC   	load_bytezImageFileDirectory_v2.load_byte"      rE   bytes | int | IFDRationalc                    t          |t                    rt          |          }t          |t                    rt          |f          }|S rt   )r   r   r}   rp   r   r   s     rC   
write_bytez ImageFileDirectory_v2.write_byte&  sC    dK(( 	t99DdC   	"$>>DrE   r'   c                l    |                     d          r
|d d         }|                    dd          S )N    r   zlatin-1r   )endswithdecoder  s      rC   load_stringz!ImageFileDirectory_v2.load_string.  s7    == 	9D{{9i000rE   str | bytes | intc                    t          |t                    rt          |          }t          |t                    s|                    dd          }|dz   S )NrZ  r   r  )r   r}   r   rp   r[  r   r   s     rC   write_stringz"ImageFileDirectory_v2.write_string4  sP     eS!! 	JJE%'' 	5LL)44Eu}rE   r-   r3   )tuple[tuple[int, int] | IFDRational, ...]c           
         |                      t          |          dz   d|          }dfdt          fd	t          |d d d
         |dd d
                   D                       S )Nr+   rH   ar}   r  rq   tuple[int, int] | IFDRationalc                0    r| |fnt          | |          S rt   r   r  r  r  s     rC   combinez4ImageFileDirectory_v2.load_rational.<locals>.combineC       '>Aq66[A->->>rE   c              3  6   K   | ]\  }} ||          V  d S rt   r?   r@   numdenomr  s      rC   rm   z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>F  3      VVZS%WWS%((VVVVVVrE   r'   r   r  r}   r  r}   rq   r  r  rk   rv   zipr   r   r  valsr  s     ` @rC   load_rationalz#ImageFileDirectory_v2.load_rational=       ||s4yyA~000$77	? 	? 	? 	? 	? 	? VVVV3tCCaCy$qtRSt*;U;UVVVVVVrE   r   c                F     d                      fd|D                       S )NrE   c              3  P   K   | ] } j         d gt          |d          R  V  !dS )2Ll    N)r	  r   r@   r   r   s     rC   rm   z7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>J  sR       
 
DHJDJt?odI>>???
 
 
 
 
 
rE   r
  r   r  s   ` rC   write_rationalz$ImageFileDirectory_v2.write_rationalH  s?    xx 
 
 
 
LR
 
 
 
 
 	
rE   r1   c                    |S rt   r?   r  s      rC   load_undefinedz$ImageFileDirectory_v2.load_undefinedN  r  rE   c                    t          |t                    rt          |          }t          |t                    r#t          |                              dd          }|S )NrZ  r   )r   r   r}   r   r[  r  s     rC   write_undefinedz%ImageFileDirectory_v2.write_undefinedR  sQ    e[)) 	JJEeS!! 	:JJ%%gy99ErE   
   c           
         |                      t          |          dz   d|          }dfdt          fd	t          |d d d
         |dd d
                   D                       S )Nr+   r  r  r}   r  rq   r  c                0    r| |fnt          | |          S rt   r  r  s     rC   r  z;ImageFileDirectory_v2.load_signed_rational.<locals>.combine`  r  rE   c              3  6   K   | ]\  }} ||          V  d S rt   r?   r  s      rC   rm   z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>c  r  rE   r'   r   r  r  r  s     ` @rC   load_signed_rationalz*ImageFileDirectory_v2.load_signed_rationalZ  r  rE   c                F     d                      fd|D                       S )NrE   c           	   3  R   K   | ]!} j         d gt          |dd          R  V  "dS )2lii   N)r	  r   r  s     rC   rm   z>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>g  sX       
 
 DJtP4T9hOOPPP
 
 
 
 
 
rE   r
  r  s   ` rC   write_signed_rationalz+ImageFileDirectory_v2.write_signed_rationale  s?    xx 
 
 
 

 
 
 
 
 	
rE   fp	IO[bytes]r   c                    |                     |          }t          |          |k    r%d| dt          |           d}t          |          |S )Nz&Corrupt EXIF data.  Expecting to read  bytes but only got z. )readrk   OSError)r   r  r   retr)  s        rC   _ensure_readz"ImageFileDirectory_v2._ensure_readl  sj    ggdmms88tL%)L L?B3xxL L L  #,,
rE   c           
        |                                   |                                | _        	 | j        r*|                     d|                     |d                    n)|                     d|                     |d                    d         }t          |          D ]J}| j        r*|                     d|                     |d                    n)|                     d|                     |d	                    \  }}}}t          j        || j	                  j
        }t          j        |d
          }	d| d| d|	 d| d	}
	 | j        |         \  }}n,# t          $ r t                              d|
|           Y w xY w||z  }|| j        rdndk    r|                                }|                     | j        rdnd|          \  }|
d| d| z  }
|                    |           t%          j        ||          }|                    |           n
|d |         }t)          |          |k    rFt+          j        d| dt)          |           d|            t                              |
           |st                              |
           || j        |<   || j        |<   |
dz  }
|
|dk    rd| dnt3          |          z  }
t                              |
           L| j        r*|                     d|                     |d                    n)|                     d|                     |d                    \  | _        d S # t6          $ r,}
t+          j        t9          |
                     Y d }
~
d S d }
~
ww xY w)Nr  r3   r  r'   r   HHQ8s   HHL4srI   unknownztag:  (
) - type: )z%s - unsupported type %sr+   rH   z Tag Location: z - Data Location: z/Possibly corrupt EXIF data.  Expecting to read r  z. Skipping tag z
 - value: rP   <table:  bytes>)r&  tellr-  r$  r  r  ranger   r<  r  r  r   getr   KeyErrorloggerdebugseekr   
_safe_readrk   ro  rp  r4  r%  r  r'  r  r   )r   r  	tag_countr   rD  rF  countr   tagnametypnamer)  	unit_sizerG  r   hereoffsets                   rC   loadzImageFileDirectory_v2.loadv  s   

wwyy=	 =AS$"3"3B":":;;;\\#t'8'8Q'?'?@@	I
 9%% ." ." }JDLL$*;*;B*C*CDDDgt/@/@R/H/HII &S% #/#tz::?)C33IgIIIIII3III)-)<S)A&Iww   LL!;S#FFFH y(4111557799D $DM-JSSsD Q QIVMTMMVMMMCGGFOOO$/D99DGGDMMMM;Dt99$$M/-1/ /GJ4yy/ /),/ /  
 LL%%% LL%%%%)c"$'S!|#4"99/$////$t**LS!!!! =AS$"3"3B":":;;;\\#t'8'8Q'?'?@@ TYYY
  	 	 	M#c((###FFFFF	s=   DM EM &F =M ?F  GM 
N!N  Nc                   | j         |                     d| j        rdnd          z   }| j        r||                     ddd          z  }|| j        r|                     dd          n|                     d	d          z  }|S )
Nr  r  *   HHr3   r   r  rK   rH   )r   r	  r$  r   r  s     rC   _get_ifhzImageFileDirectory_v2._get_ifh  s    lTZZ4=-HRRbIII= 	*4::dAq)))CdmKtzz#r"""C9K9KK
rE   r   r  c                   |                      | j        rdndt          | j                            }g }| j        rdnd}| j        rdnd}t          |          t          | j                  | j        rdndz  z   |z   z  d }t	          | j                                                  D ]\  }}|t          k    rt          |          }| j        |         }	t          	                    d||	t          |                     |	t          j        k    ot          |t                    }
|
ret          |                                 |	          }| j        |         }|                                D ]
\  }}|||<   |                              }n.t          |t$                    r|n|f} | j        |	         | g|R  }t          j        || j                  j        }|
rd
nt/          j        |	d          }d| d| d| d|	 d	}|t          |          dk    rdt          |           dnt3          |          z  }t          	                    |           |
rd}nD|	t          j        t          j        t          j        fv rt          |          }nt          |          }t          |          |k    r0|                    ||	||                    |d          df           6|                    ||	||                      |          |f           t          |          dz   dz  dz  z  |||         \  }}	}}}|rC| j        |	         \  }}fd || || j                   D             } | j        |	         | g|R  }n3|                      || !                    ||          d         z             }||	|||f||<   |D ]f\  }}	}}}t          	                    d||	|t          |          t          |                     ||                      | j        rdnd||	||          z  }g||                      |d          z  }|D ]$\  }}	}}}||z  }t          |          dz  r|dz  }%|S )Nr  r  rH   r3   r+   r  rI   zTag %s, Type: %s, Value: %s)r  ifdr  zsave: r  r  z) - value: rK   r  r  r   r  rE   r'   c                    g | ]}|z   S r?   r?   )r@   rz   r  s     rC   r\  z1ImageFileDirectory_v2.tobytes.<locals>.<listcomp>  s    WWW3#,WWWrE   r   z%s %s %s %s %sr  r  )"r	  r$  rk   r3  sortedr>  STRIPOFFSETSr%  r  r  r  r   rh  r   r7  r   r  tobytesrv   r   r<  r  r  r   r  r   rl  rk  rb  appendljustr   r  r  )r   r  resultentriesr  fmt_sizestripoffsetsrD  r   rF  ru  r  r  ifd_tag	ifd_valuer   r  r  r)  r  r   rG  s    `                    rC   r  zImageFileDirectory_v2.tobytes  s   4=9CCc3t};M;MNN<>]+cc,111KK#dm,,dm0KLLxW	
  !!4!4!6!677 "	3 "	3JCl"""7||,s#CLL6S$u++NNNHM)Ej.E.EF @+DMMOO3GGGs+*0,,.. - -&GY#,CLL{{6**",UE":":H0t+C0????oc4:66;G%Dee59S)+D+DGP7PPcPPWPPPPPCCIIOO0c$ii0000VTCLL  $8JKKKD		F4yyH$$S%He1L1LcRSSSSS%C1H1H$OPPP3t99q=Q.22 #+2<+@(CeUD N $ 3C 8gWWWW''$do2V2VWWW0t+C0????

3S%(@(@(Cf(LMM$'eUD$@GL! -4 	 	(CeUDLL)3UDKKdTTTdjj=5gsC  FF
 	$**S!$$$ -4 	  	 (CeUDdNF4yy1}  %rE   c                    |                                 dk    r'|                    |                                            |                                 }|                     |          }|                    |           |t	          |          z   S r   )r  writer  r  rk   )r   r  r  r  s       rC   savezImageFileDirectory_v2.save  sn    7799>>HHT]]__%%%f%%
F##rE   )r  NN)r  rp   ro   r  r  r  rq   r   )rq   rr   )r   rr   rq   r   rq   r   r   )rq   r9  r   rD  r}   rq   r
   rD  r   rq   rr   rD  r}   r   r
   rq   r   )rD  r}   r   r
   r  rr   rq   r   )rD  r}   rq   r   rq   rz  )r  r   r   rp   rq   r  )r  r   r  r
   rq   rp   r  )r   rp   r  rr   rq   rp   )r   r  rq   rp   )r   rp   r  rr   rq   r   )r   r  rq   rp   )r   rp   r  rr   rq   r  )r  r   rq   rp   )r   r  rq   rp   )r  r  r   r}   rq   rp   )r  r  rq   r   )rq   rp   rY   )r  r}   rq   rp   )r  r  rq   r}   )7r   r   r   r   r   __annotations__r   r   r   ro   r  r  setterr&  r8  r?  rB  rH  rK  rO  rN  ry  r}  r  r	  listmapr  r   rf  rh  SIGNED_BYTErg  ri  FLOATrj  IFDLONG8r   r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r?   rE   rC   r   r     s        : :x :<N;;;;57O7777 3# 	%! %! %! %! %!N X//00FX//00F      X     ( ( ( (   	
 	
 	
 	
< < < <	 	 	 	< < < <3 3 3 3\ \ \ \|% % % %
= = = =7 7 7 78 8 8 8 	Dg.V,%sM:&^<%sM:g.#x0sF+g.
	
 	
  " a     a    a1 1 1 1 1
 a    a.2W W W W W a
 
 
 

 a     a    b!.2W W W W W b
 
 
 
   A A A AF   N N N N N`$ $ $ $ $ $rE   r   r   r   write_c                       e Zd ZU dZd fdZ ed           Z ed	           Zd
ed<   	 e	dd            Z
ddZddZddZd dZd!dZd"dZ xZS )#ImageFileDirectory_v1a  This class represents the **legacy** interface to a TIFF tag directory.

    Exposes a dictionary interface of the tags in the directory::

        ifd = ImageFileDirectory_v1()
        ifd[key] = 'Some Data'
        ifd.tagtype[key] = TiffTags.ASCII
        print(ifd[key])
        ('Some Data',)

    Also contains a dictionary of tag types as read from the tiff image file,
    :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v1.tagtype`.

    Values are returned as a tuple.

    ..  deprecated:: 3.0.0
    r   r
   kwargsrq   r   c                H     t                      j        |i | d| _        d S )NT)superr   r(  )r   r   r  	__class__s      rC   r   zImageFileDirectory_v1.__init__8  s-    $)&)))rE   c                    | j         S rt   )r2  r   s    rC   r  zImageFileDirectory_v1.<lambda><  s     rE   c                    | j         S rt   )r4  r   s    rC   r  zImageFileDirectory_v1.<lambda>=  s    DM rE   zdict[int, int]r%  originalr   c                p     | |j                   }|j        |_        |j        |_        |j        |_        |S )a2  Returns an
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`
        instance with the same data as is contained in the original
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`
        instance.

        :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`

        rx   )ro   r4  r%  r'  )clsr  r  s      rC   from_v2zImageFileDirectory_v1.from_v2C  s:     c)))(&=
rE   c                    t          | j                  }t          | j                  |_        t          | j                  |_        t          | j                  |_        |S )a2  Returns an
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`
        instance with the same data as is contained in the original
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`
        instance.

        :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`

        rx   )r   ro   r7  r4  r%  r3  )r   r  s     rC   to_v2zImageFileDirectory_v1.to_v2U  sN     $4;777DM**4<((DM**
rE   rD  r   rr   c                &    || j         v p|| j        v S rt   )r2  r4  rJ  s     rC   rK  z"ImageFileDirectory_v1.__contains__f  rL  rE   r}   c                n    t          t          | j                  t          | j                  z            S rt   )rk   rA  r4  r2  r   s    rC   rB  zImageFileDirectory_v1.__len__i  rC  rE   rz  c                n    t          t          | j                  t          | j                  z            S rt   )r|  rA  r4  r2  r   s    rC   r}  zImageFileDirectory_v1.__iter__l  r~  rE   r   c                >    dD ]}|                      |||           d S N)FT)rN  )r   rD  r   r  s       rC   rO  z!ImageFileDirectory_v1.__setitem__o  s4    ' 	2 	2JMM#uj1111	2 	2rE   c           	        || j         vrQ| j        |         }| j        |         }| j        |         \  }}dD ]$}|                     | || ||          |           %| j         |         }t          |t          t          f          s|f}|S r  )r2  r4  r%  r   rN  r   rv   rp   )r   rD  r   rF  r   rG  legacyrz   s           rC   rH  z!ImageFileDirectory_v1.__getitem__s  s    dm##=%D,s#C /4MD'' H Hc774v#>#>GGGGmC #u~.. 	&C
rE   )r   r
   r  r
   rq   r   )r  r   rq   r
  )rq   r   r  r   r  r  r  )r   r   r   r   r   r   tagstagdatar   classmethodr  r  rK  rB  r}  rO  rH  __classcell__r  s   @rC   r
  r
  %  s         $            8..//Dh1122G !   ["   "< < < << < < <= = = =2 2 2 2
 
 
 
 
 
 
 
rE   r
  c                       e Zd ZdZdZdZ	 dd fdZddZedd            Z	ddZ
ddZddZd dZd! fdZddZddZd!dZddZ xZS )"TiffImageFileTIFFz
Adobe TIFFFNr  StrOrBytesPath | IO[bytes]filenamestr | bytes | Nonerq   r   c                X    |  	 |  	 t                                          ||           d S rt   )r  r   )r   r  r'  r  s      rC   r   zTiffImageFile.__init__  s7    
 	*5'"X&&&&&rE   c                   | j                             d          }|d         dk    r|| j                             d          z  }t          |          | _        | j        j        x| _        | _        d| _        | j         | _        g | _	        d| _
        t                              d           t                              d| j                   t                              dt          |                     |                     d	           dS )
z#Open the first image in a TIFF filer3   r'   r  r   Nz*** TiffImageFile._open ***z- __first: %sz	- ifh: %sr   )r  r  r   tag_v2r'  _TiffImageFile__first_TiffImageFile__next_TiffImageFile__frame_fp
_frame_pos	_n_framesr  r  r  _seekr  s     rC   _openzTiffImageFile._open  s     gll1ooq6R<<47<<??"C+C00 &*[%55t{7%'%)2333_dl333[$s)),,, 	

1rE   r}   c                D   | j         }||                                 }|                     t          | j                             | j         1|                     |                                 dz              | j         1|                     |           | j         J | j         S )Nr   )r1  r  r2  rk   r0  r  )r   current_n_framescurrents      rC   n_frameszTiffImageFile.n_frames  s    >#iikkGJJs4?++,,,.(

499;;?+++ .(IIg~)))~rE   framec                    |                      |          sdS |                     |           | j        3| j        j        | j        k    s| j        j        | j        k    rd| _        dS dS dS )z%Select a given frame as current imageN)_seek_checkr2  _imimr   
_tile_sizemode)r   r8  s     rC   r  zTiffImageFile.seek  ss    && 	F

58GLDO++tw|ty/H/H DHHH	  /H/HrE   c                t   t          | j        t                    r| j        j        | j        | _        t          | j                  |k    r| j        sd}t          |          t          
                    d|| j        | j        | j                                                   | j        dk    rd}t          |          | j                            | j                   | j                            | j                   t          
                    d| j                                                   | j                            | j                   | j        j        | j        v rd| _        n| j        j        | _        | j        dk    r
|dz   | _        t          | j                  dk    r| j        dk    | _        | xj        dz  c_        t          | j                  |k    | j                            | j        |                    | j                            | j                   t*          | j        v r| j        t*                   | j        d<   nd| j        v r| j        d= |                                  t0                              | j                  x| _        | _        || _        |                                  d S )	Nzno more images in TIFF filez9Seeking to frame %s, on frame %s, __next %s, location: %sl            zUnable to seek to framezLoading tags, location: %sr   r   xmp)r   r/  r   exr  rk   r0  r-  EOFErrorr  r  r.  r  rn  r  r  r+  r  r'  r1  is_animatedXMPr`  _reload_exifr
  r  rD  r  _setup)r   r8  r)  s      rC   r2  zTiffImageFile._seek  sT   dh.. 	(+($/""e++; $3smm#LLK   {e##/ oo%GLL%%%O""4;///LL5tw||~~FFFKTW%%%{4?22  "k.{a!&4?##q((#';!#3 LLALL9 $/""e++: 	T_U+,,,!!!$+#{3/DIedi	% 3;;DKHHH48rE   c                    | j         S )zReturn the current frame number)r.  r   s    rC   r  zTiffImageFile.tell  s
    |rE   dict[int, dict[str, bytes]]c                   i }| j                             t          j        j                  }|r|                    d          rt          |dd                   }t          j        |d         dz   dz            dz  }t          |d|z   d|z                      }|d|z   d|z   |z            }d|i||<   |t          j        d|z   |z   dz            dz  d         }|                    d          |S )	a5  
        Returns a dictionary of Photoshop "Image Resource Blocks".
        The keys are the image resource ID. For more information, see
        https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577409_pgfId-1037727

        :returns: Photoshop "Image Resource Blocks" in a dictionary.
        s   8BIMr+   r/   r   r'   r  r   N)
r+  r  r   BaseImageResourcesru   i16mathceili32)r   blocksrz   idnr   r   s          rC   get_photoshop_blocksz"TiffImageFile.get_photoshop_blocks  s    koohm:;; 	@..)) @QqS]]Is1vzQ.//!33q1urAv~.//26BFTM12$d^r
$)R!Vd]a$7881<>>? ..)) @ rE   Image.core.PixelAccess | Nonec                    | j         r| j        r|                                 S t                                                      S rt   )tileuse_load_libtiff_load_libtiffr  r  )r   r  s    rC   r  zTiffImageFile.load  s;    9 	(. 	(%%'''ww||~~rE   c                    | j         Ht          j        | j                   t          j                            | j        | j                  | _        t          j        	                    |            d S rt   )
r;  r   _decompression_bomb_checkr=  corenewr>  r<  r   load_preparer   s    rC   r]  zTiffImageFile.load_prepare  sU    8+DO<<<jnnTY@@DG((.....rE   c                *   | j         sDd| _        |                                 }t          j        D ]}||vr|                    |           t          j        | d           t          j	        j
        | j        v r| j        t          j	        j
        = d S d S )NT)in_place)rC  !_close_exclusive_fp_after_loadinggetexifr   TAGS_V2_GROUPSget_ifdr   exif_transposer   rJ  Orientationr+  )r   exifkeys      rC   load_endzTiffImageFile.load_end  s      	"59D2 <<>>D. " "d??S!!!!t4444=$33HM5666 43rE   c                   t           j                             |            |                                  t          | j                  dk    sd}t          |          | j        d         d         }| j        d         d         }	 t          | j        d          o| j                                        }t          | j        d          r| j        	                                 n# t
          $ r d}Y nw xY w|r:t          |t                    sJ t          |          }||d<   t          |          }t          j        | j        d	|| j                  }	 |                    | j        |           n$# t$          $ r}d
}t          |          |d}~ww xY w| j        o| j         }t          | j        d          rJt*                              d           |                    | j                                                  \  }	}
n|rt*                              d           |s| j                            d           t5          j        |dt4          j                  }|                    d          \  }	}
t5          j        ||t4          j                   nct*                              d           | j                            d           |                    | j                                                  \  }	}
g | _        d| _        |                                   |r | j        !                                 d| _        |
dk     rd|
 }t          |          t           j                             |           S )zWOverload method triggered when we detect a compressed tiff
        Calls out to libtiffr   zNot exactly one tiler   r)   filenoflushFr'   libtiffzCouldn't set the imageNgetvaluez5have getvalue. just sending in a string from getvaluez3have fileno, calling fileno version of the decoder.s   fpfpz+don't have fileno or getvalue. just readingzdecoder error )"r   r  r]  rk   rV  r  r   r  rj  rk  r   rv   r  _getdecoderr>  decoderconfigsetimager<  rn  _exclusive_fprC  r  r  r  rm  r  oslseekSEEK_CURSEEK_SETr  readonlyrh  close)r   r)  extentsr   r  	args_listdecodereclose_self_fprR  errposs               rC   rX  zTiffImageFile._load_libtiff,  s#    	49~~""(C#,, )A,q/y|A

	(++@0@0@B tw((   	 	 	 BBB	
  	$dE*****T

IIaL##D#DIy$@RSS	&TWg.... 	& 	& 	&*C#,,A%	& *C43C/C47J'' !	4 LLPQQQ^^DG$4$4$6$677FAss 	4LLNOOO   Q (2q"+..C^^G,,FAsHRbk**** LLFGGGGLLOOO^^DGLLNN33FAs	 	GMMOOODG77(3((C#,,{%%%s+   AC! !C0/C0E- -
F7F		Fc                
   d| j         v rd}t          |          t          | j                             t          d                   | _        | j                             t          d          | _        | j                             t          d          }| j        dk    rd}| j                             t          d          }t                              d           t                              d| j                   t                              d	|           t                              d
| j                   t                              d|           t                              d| j                             t                               	 | j         t                   }| j         t                   }n$# t          $ r}d}t!          |          |d}~ww xY wt#          |t$                    rt#          |t$                    sd}t'          |          ||f| _        | j                             t*          j        j                  }|dv r
||f| _        n	||f| _        t                              d| j                   | j                             t4          d          }t7          |          dk    r,t9          |          t;          |          cxk    rdk    rn nd}| j                             t<          d          }	| j                             t>          d          }
|dv rd}n|dk    rd}nd}|t7          |
          z  }t7          |	          }| j                             t@          | j        dk    r|dv rdnd          }|tB          k    r,t          "                    d|           d}tG          |          ||k     r|	d|         }	n||k    r|dk    r|	|z  }	t7          |	          |k    rd}tG          |          | j         j$        ||||	|
f}t                              d|           	 tJ          |         \  | _&        }n># t          $ r1}t                              d           d}tG          |          |d}~ww xY wt                              d|           t                              d | j'                   | j        | j(        d!<   | j                             tR          d          }| j                             tT          d          }|rt|rr| j                             tV                    }|d"k    r||f| j(        d#<   n@|dk    r|d$z  |d$z  f| j(        d#<   n'|||f| j(        d#<   ||f| j(        d%<   n||f| j(        d%<   dx}x}}g | _,        tZ          p
| j        d&k    | _.        | j.        r|d"k    rH|dd         dz   |dd         z   }t                              d|           tJ          |         \  | _&        }|dk    r| j        d'k    r| j        dk    rd(}n+|d)k    rd*}n"|/                    d+          r|dd,         d-z   }|| j        d.| j         j0        f}| j,        1                    te          j3        d/dd||fd|                     nth          | j         v stj          | j         v rth          | j         v r5| j         th                   }| j                             tl          |          }|}n| j         tj                   }| j                             tn                    }| j                             tp                    }t#          |t$                    rt#          |t$                    sd0}t'          |          |}||k    r||k    r| j        d"k    r
|d,d         }|D ]}||z   |k    r|ts          |	          z  d1z  }nd}|}| j        d"k    r||         }||z  }|t%          |          df}| j,        1                    te          j3        | j        ||t;          ||z   |          t;          ||z   |          f||                     ||z  }||k    rd||z   }}||k    rd}|dz  }n+t                              d2           d}tG          |          tt          | j         v r| j         tt                   | j(        d3<   | j'        d4v rKd5 | j         tv                   D             }ty          j=        d6d7>                    |                    | _?        dS dS )8z-Setup this image object based on current tagsi  z+Windows Media Photo files not yet supportedr   r   r0   r/   z*** Summary ***z- compression: %sz - photometric_interpretation: %sz- planar_configuration: %sz- fill_order: %sz- YCbCr subsampling: %szMissing dimensionsNzInvalid dimensions)r-   r/   r1   r3   z
- size: %srF   r?   )r'   r/   r3   r)   r-   r+   )r'   r/   z.More samples per pixel than can be decoded: %sz#Invalid value for samples per pixelzunknown data organizationzformat key: %sz- unsupported formatzunknown pixel modez- raw mode: %sz- pil mode: %scompressionr'   dpigRQ@
resolutionr&   r2   rW   rJ   I;16N)z;16Bz;16Lr   NFrl  zInvalid tile dimensionsr3   z- unsupported data organizationicc_profilerc   re   c                2    g | ]}t          |d z            S r#   r   )r@   r  s     rC   r\  z(TiffImageFile._setup.<locals>.<listcomp>z  s"    CCCr!s(||CCCrE   RGB;LrE   )@r+  r  COMPRESSION_INFOr  COMPRESSION_compressionPLANAR_CONFIGURATION_planar_configurationPHOTOMETRIC_INTERPRETATION	FILLORDERr  r  YCBCRSUBSAMPLING
IMAGEWIDTHIMAGELENGTHr  	TypeErrorr   r}   rn  r=  r   rJ  re  _sizer   SAMPLEFORMATrk   r   r   BITSPERSAMPLEEXTRASAMPLESSAMPLESPERPIXELMAX_SAMPLESPERPIXELerrorr  ro   	OPEN_INFO_moder>  r`  X_RESOLUTIONY_RESOLUTIONRESOLUTION_UNITrV  READ_LIBTIFFrW  r  r  r  r   _Tiler  TILEOFFSETSROWSPERSTRIP	TILEWIDTH
TILELENGTHsum
ICCPROFILECOLORMAPr   r&   r  palette) r   r)  photo	fillorderxsizeysizer{  orientationsample_format	bps_tupleextra_tuple	bps_countbps_actual_countsamples_per_pixelrg  rawmodexresyresresunitxylayerr  offsetsr  w	tilewidthr  stridetile_rawmoder   r  s                                    rC   rF  zTiffImageFile._setup  s&	    T[  ?C#,, -T[__[!-L-LM%)[__5I1%M%M"  :A>> ++EKOOIq11	&'''($*;<<<7???143MNNN'333.@P0Q0QRRR	(K
+EK,EE 	( 	( 	(&CC..a'	( %%% 	"Zs-C-C 	"&CS//!,koohm&?@@,&&DJJDJ\49---d;;}!!c-&8&8C<N<N&S&S&S&SRS&S&S&S&S&S !MKOOM488	koolB77IIIaZZIIIS%%%	y>> KOO"k11evooAA1
 

 222LL@BS   8Cc"""/// ""4#4"45II!1116F!6K6K "$55Iy>>...-Cc""" K
 	%s+++	*"+C.DJ 	* 	* 	*LL/000&Cc"")	*
 	%w///%ty111#'#4	- {|Q//{|Q// 	5D 	5kooo66G!||$($<	%  A$(4K#=	%  $($<	%  +/*	,''*.*	,' A	 , J0AU0J  ^	# A~~"1"gns122w.-s333 '0n#
G 

%//.!33
 F""!!!"233 -!#2#,, $+UDK4FGAIY_YAue8LaQRSSTTTTT[((K4;,F,Ft{**+l3KOOL%88 +k2 KOOI66	KOOJ//!)S11 *As9K9K *3C$S//)Ezza5jjT-G1-L-L!"##,! # #q55==Y/!3FFF&-22#*5>Li'F$c&kk15	  O)As1q5%00#a!eU2C2CD	    Q::a!eqAEzz
7#: LL:;;;-Cc""" $$'+{:'>DIm$ 9##CCT[-BCCCG'+GSXXg5F5FGGDLLL $#s0   $F+ +
G5GG!P7 7
Q2,Q--Q2rt   )r  r&  r'  r(  rq   r   r  r   )r8  r}   rq   r   )rq   rH  )rq   rT  )r   r   r   formatformat_descriptionr`  r   r3  r   r7  r  r2  r  rS  r  r]  rh  rX  rF  r!  r"  s   @rC   r$  r$    s`       F%(-%
 (,' ' ' ' ' ' '   0 	 	 	 X		 	 	 	, , , ,\      *     
/ / / /7 7 7 7"^& ^& ^& ^&@oH oH oH oH oH oH oH oHrE   r$  rG   rH   rV   rc   re   rM   rT   rJ   rN   rQ   rR   rW   rZ   rX   rf   YCbCrri   rU   rL   rO   rS   )rO   rS   r<  Image.Imager  r  r'  str | bytesc                   	 t           | j                 \  }}}}}}n-# t          $ r }	d| j         d}
t          |
          |	d }	~	ww xY w| j        }| j        }t          |          }|                    d          rd|_        	 |d         }nA# t          $ r4 | j	                            d          }t          |t                    rd }Y nw xY w|d}n|dk    rd	}n|d
k    rd}t          p|dk    }d|t          <   | j        d         |t          <   | j        d         |t           <   d|v r	|d         }nNd|v rH|d         }t          |t"                    r*t%          j                    }|                    |           |}ni }t*                              dt/          |                     t          |t0                    r|                                }|D ]}t          |t$          j                  r'|t4          j        v r|                    |          ||<   n|                    |          ||<   	 |j        |         |j        |<   r# t<          $ r Y ~w xY wi }t?          | d          r| j                                         }i |tC          | di           }tD          tF          fD ]	}||v r||= 
t?          | d          rtH          tJ          tL          tN          tP          tR          fD ]n}|| j*        v rc|tN          k    r.| j*        j        |         t4          j+        t4          j,        fvr||= D| j*        |         ||<   | j*        j        |         |j        |<   o|                    d| j	                            d                    }|r
||tZ          <   t\          dftJ          dftL          dftJ          dftL          dftH          dft^          dft`          dftb          dftd          dff
D ]\  }}||v r||         ||<   |                    d          }|r*d|tH          <   |d         |tJ          <   |d         |tL          <   |dk    r4||tf          <   ti          |          dk    rti          |          |tj          <   |
||tl          <   |dk    r
||tF          <   tn          |vr||tn          <   n| j        d v r|tn                   dk    r| j        d!k    rr| 8                                }|                                }|Gts          |j:                  D ]0}ts          |j;                  D ]}|||f         d"k    rdnd"|||f<   1|} nty          j=        |           } | j        d#v rw| j>        ?                    d$d%          }g }ti          |          d&z  }ts          d&          D ].} |d' ||| z  || dz   z           D             z  }|dgd(|z
  z  z  }/||t          <   |t                   |t                    }"}!ti          |          |!|d         z  d)z   d*z  z  }#t          |vrl|rV|                    d+t                    }$|#dk    rdnt          |$|#z  |"          }%|d	k    rt          |%d)z   d*z  d*z  |"          }%n|"}%|%dk    rd}%|%|t          <   |#dk    rdn|#|t                   z  }&|"|t                   z   dz
  |t                   z  }'|&d,k    rt4          jD        |j        t          <   |&f|'dz
  z  |#|"z  |&|'dz
  z  z
  fz   |t          <   t          ts          d|&|'z  |&                    |t          <   t                              |d          |t          <   | j        d-k    r>t          d.t          d/iL                                D ]\  }}(|M                    ||(           t          t          t          t          g})|rd0|v r[|d0         }*t          |*t                    r|*dk     s|*d1k    rd2}
t          |
          |d	k    rd3}
t          |
          |*|t          <   t*                              d4           t*                              d5t          |L                                                     d}+t?          |d6          r@	 |U                    d           |V                                }+n# t          jX        $ r Y nw xY wi },|)t          t          t          t          t          t          gz  })tf          |d         i}-t          j]        |L                                |L                                          D ]\  }}.|t4          j^        vrtC          t$          j_        d7d8          s0|t4          j        v rt4          j`        |,|<   nc||j        v r|j        |         |,|<   nIt          |.t          t          t          t"          f          st5          jc        |          jd        }/|/r|/|,|<   ||-vrd||)vr`t          |.t                    r|.e                    d9d:          d;z   |-|<   t          |.t                    rt          |.          |-|<   |.|-|<   tF          |-v r9ti          |-tF                             dk    r|-tF                   d         |-tF          <   t*                              d<t          |-L                                                     | j        d=v rd>}t/          |-L                                          }0|0g                                 |||+||0|,f}1t%          jh        | j        d?|1|          }2|2i                    | j>        d@| j        z              	 |2e                    t          jk                  dd          \  }3}4|+s|l                    |4           |3rnE|3dk     rdA|3 dB}
t          |
          nT|)D ]}||= |m                    |          }5t          jn        | |t          jo        dd@| j        z   |5||#df          g           dC|v rt          | dC|           d S d S )DNzcannot write mode z as TIFFrx   big_tiffTr  r&   r0   r2   r8   r4   r   r   tiffinforf  zTiffinfo Keys: %srD  r+  r  descriptionr  x_resolutiony_resolutionresolution_unitsoftware	date_timeartist	copyrightr  r'   rF   )rG   rH   rG   r"   r  rW   r  r)   c                    g | ]}|d z  S r  r?   rR  s     rC   r\  z_save.<locals>.<listcomp>6  s    MMMQSMMMrE   r#   r1   r3   
strip_sizer!   r  )r   r   )r   r"      r"   r  r"   qualityd   zInvalid quality settingz5quality setting only supported for 'jpeg' compressionzSaving using libtiff encoderz	Items: %srj  rn   FrZ  r   r  zConverted items: %s)rL   rJ   r  rl  r[   zencoder error z when writing image file_debug_multipage)q	SAVE_INFOr>  r  r  encoderinfoencoderconfigr   r  r$  r`  r   r}   WRITE_LIBTIFFr  r   r  r  rp   r   Exifr  r  r  r  r
  r  r   rb  rc  r%  r0  r   rD  r   EXIFIFDr  r  r  r  IPTC_NAA_CHUNKPHOTOSHOP_CHUNKrD  r+  rl  rb  r  IMAGEDESCRIPTIONSOFTWARE	DATE_TIMEARTIST	COPYRIGHTr  rk   r  r  r  copyr  heightwidthr   invertr<  
getpaletter  r  
STRIP_SIZEr   rh  STRIPBYTECOUNTSrv   r  COMPRESSION_INFO_REVr  r  REFERENCEBLACKWHITEr>  
setdefaultr  r  r  TILEBYTECOUNTSrn  JPEGQUALITYr  r  rj  ioUnsupportedOperationOSUBFILETYPETRANSFERFUNCTIONSUBIFD	itertoolschainLIBTIFF_COREr[  r  r   r   r<  ra  r[  r   sort_getencoderrp  r   MAXBLOCKr  r  _saver  setattr)6r<  r  r'  r  ro   r  r  bitsextrar{  r)  r  r  r  r  rl  r`  rf  rg  
legacy_ifdsupplied_tagsrD  iccr  r  inverted_impxr  r  lutcolormapcolorsr   r  r  r  im_strip_sizerows_per_stripstrip_byte_countsstrips_per_imagedefault_value	blocklistr  r/  typesattsr   ra  r  r  encodererrcoder   r  s6                                                         rC   r  r    s   "6?6H3ee " " "427444cll!" .K$M
v
.
.
.Cz"" !-0   gkk-00k3'' 	K	
 		#	#		&	&*3{e3G !"CgajC
OwqzC [  :&	;		6"dE"" 	:<<DIIdOOOD
LL$d4jj111$-.. zz||  dEJ'' 	%C83J,J,J||C((CHHxx}}CH	#|C0CK 	 	 	D	 Jr5 $V\\^^
?z?WR2%>%>?M 		 # # -c" r8 > 
 	> 	>C bi.((RY->s-CM&L . . &c**!y~CH')y'8'=CK$ //-])C)C
D
DC
 J 
=)	|$	|$	~&	~&	+,	:	K 		K  ) )	T ;"4(CH
//%
 
 C
 # OFLFLt||!Mt99>>#&t99C !L{{"L!,,*/&''	J		3'A#Ba#G#G7c>>''))K!!##B~{122 A AA";#455 A A(*1a4C11S1a4A $$B	w+eug..SQq 	- 	-AMM#fqj6QU;K.K*LMMMMHsV|,,HH Hz?C,qAYY1tAw;?q01F3 	'OOL*EEM"(A++QQ3}7NPQ3R3RNf$$!$~'9a&?1%Da!H!HNQN*L#q[[fs<7H.HC--1c,6GGE!!'/}O$-/3Ca3GH
&*:Q*>??L C a"%557HII C ,//Q??C	w'f!=#
 %''	/ 	/C NN3....J^DI n
##!),Ggs++ &w{{gmm/ oo%f$$M oo%&C3444[&"5"56662x   	


iikk*     	
 	
	 !.tAw7 $/#))++}7J7J7L7LMM 	& 	&JC
 (///uz+H%PP (111!)E#JJCK''!$S!1E#JJ$US%e,DEE *#?3//4D *%)c
$3i#7#7eS)) & %Wi @ @5 HDII{33 & %eDII %DI4C\(:$;$;q$@$@!%l!3A!6D*F4::<<,@,@AAA 7'''G
 DJJLL!!		k3$>#BGY=II 0111	#NN9+=>>qrrBMGT  	 Q;;D7DDDC#,, 
  	 	CC"_UFRW$4fwPQ>RSST	
 	
 	
 [((&,,,,, )(sJ    
AAAB ;C
C/I
II*)b b&%b&c                  &   e Zd Zg dZh dZd:d;d
Zd<dZd<dZd<dZd=dZ	d>dZ
d?dZej        fd@dZd<dZdAdZd<dZdBdZdCd ZdDd!Zd?d"Zd?d#ZedEd'            Z	 dFdGd+ZdHd,ZdHd-ZdHd.ZdId/ZdHd0ZdHd1Zd<d2Z d<d3Z!dJd5Z"	 dKdLd8Z#d9S )MAppendingTiffWriter)r   r   r   r'   r+   r3   r   r   r'   r+   r3   r+   r3   r+   r'   r+   r3   >       	     r$   r%   Ffnr&  r\  rr   rq   r   c                   |  t          |          rN|| _        d| _        	 t          ||rdnd          | _        nQ# t
          $ r t          |d          | _        Y n0w xY wt          t          t                   |          | _        d| _        | j        	                                | _
        |                                  d S )NTzw+bzr+bF)r   r  close_fpopenr   r  r   r	   rp   r  	beginningsetup)r   r  r\  s      rC   r   zAppendingTiffWriter.__init__  s    2;; 		"DI DM)b3"9%%E:: ) ) )b%) "U)R((DF!DM

s   ; AAc                ,   | j                             | j        t          j                   d | _        d| _        | j                             d          x| _        }d|v | _	        |s	d| _
        d S d| _
        |t          vrd}t          |          |                     |                    t                    rdnd           | j	        r%| j                             dt          j                   |                                  |                                  d S )	Nr   r+      +TFzInvalid TIFF file headerr  r  )r   r  r  rr  ru  whereToWriteNewIFDOffsetoffsetOfNewPager  IIMMr$  isFirstrw   RuntimeError	setEndianru   r#  rt  skipIFDsgoToEnd)r   iimmr)  s      rC   r  zAppendingTiffWriter.setup  s    DNBK00048% 6;;q>>)	D4 	DLFx,Cs###doob11:sss;;;= 	(FKK2;'''rE   c                \   | j         rd S | j                            | j                   | j                            d          }|sd S || j        k    rd}t          |          | j        r%| j                            dt          j	                   | 
                    | j        rdnd          }|| j        z  }| j        J | j                            | j                   |                     || j        rdnd           | j                            |           |                                  d S )Nr+   z1IIMM of new page doesn't match IIMM of first pager3   )r#  r   r  r!  r  r"  r$  r$  rr  rt  _readr   _writefixIFD)r   r(  r)  
ifd_offsets       rC   finalizezAppendingTiffWriter.finalize  s   < 	F 	D()))v{{1~~ 	F49ECs###= 	(FKK2;'''ZZT] 9::
d**
,888D1222JT] 9:::JrE   c                V    |                                   |                                  d S rt   )r.  r  r   s    rC   newFramezAppendingTiffWriter.newFrame5  s     

rE   c                    | S rt   r?   r   s    rC   	__enter__zAppendingTiffWriter.__enter__:  s    rE   r   r   c                @    | j         r|                                  d S d S rt   )r  rw  )r   r   s     rC   __exit__zAppendingTiffWriter.__exit__=  s'    = 	JJLLLLL	 	rE   r}   c                D    | j                                         | j        z
  S rt   )r   r  r!  r   s    rC   r  zAppendingTiffWriter.tellA  s    v{{}}t333rE   r  whencec                    |t           j        k    r
|| j        z  }| j                            ||           |                                 S )z
        :param offset: Distance to seek.
        :param whence: Whether the distance is relative to the start,
                       end or current position.
        :returns: The resulting position, relative to the start.
        )rr  ru  r!  r   r  r  )r   r  r6  s      rC   r  zAppendingTiffWriter.seekD  sB     R[  d**FFF###yy{{rE   c                <   | j                             dt          j                   | j                                         }d|dz  z
  }d|cxk     rdk     r*n n'| j                             t          |                     | j                                         | _        d S )Nr   rK   )r   r  rr  SEEK_ENDr  r  rp   r!  )r   r~  	pad_bytess      rC   r'  zAppendingTiffWriter.goToEndQ  s    Ar{###fkkmm rM	y2FLLy))***#v{{}}rE   endianr   c                    || _         | j          d| _        | j          d| _        | j          d| j        rdndz   | _        d S )NrH   r  r  r  )r;  longFmtshortFmtr$  	tagFormat)r   r;  s     rC   r%  zAppendingTiffWriter.setEndian[  sS    +(((;))) K+++dm/LssMrE   c                x   	 |                      | j        rdnd          }|dk    r,| j                                        | j        rdndz
  | _        d S | j                            |           |                      | j        rdnd          }| j                            || j        rdndz  t          j                   )NTr3   r+   r   r'   r  rI   )r*  r$  r   r  r   r  rr  rt  )r   r-  num_tagss      rC   r&  zAppendingTiffWriter.skipIFDsa  s    
	O$=AAA>>JQ04-AAA1- FKK
###zzt}";!!!<<HFKK$-$?BBR@"+NNN
	OrE   r   r   c               6    | j                             |          S rt   )r   r  r  s     rC   r  zAppendingTiffWriter.writen  s    v||D!!!rE   
field_sizec                Z    	 dddd|         S # t           $ r d}t          |          w xY w)Nr  rH   r  )r'   r+   r3   zoffset is not supported)r  r$  )r   rC  r)  s      rC   _fmtzAppendingTiffWriter._fmtq  sJ    	$ss++J77 	$ 	$ 	$+Cs###	$s    *c                    t          j        | j        |                     |          z   | j                            |                    \  }|S rt   )r  r  r;  rE  r   r  )r   rC  r   s      rC   r*  zAppendingTiffWriter._readx  sB    =K$))J///Z1H1H
 
 rE   c                ,    |                      d          S Nr'   r*  r   s    rC   	readShortzAppendingTiffWriter.readShort~      zz!}}rE   c                ,    |                      d          S Nr+   rI  r   s    rC   readLongzAppendingTiffWriter.readLong  rK  rE   bytes_writtenr  expectedc                H    | | |k    rd|  d| }t          |          d S d S )Nzwrote only z bytes but wanted )r$  )rO  rP  r)  s      rC   _verify_bytes_writtenz)AppendingTiffWriter._verify_bytes_written  sC    $()B)BKKKKKCs### %$)B)BrE   r   r   new_field_sizec                   | j                             | t          j                   |s|}| j                             t          j        | j        |                     |          z   |                    }| 	                    ||           d S rt   )
r   r  rr  rt  r  r  r  r;  rE  rR  )r   r   rC  rS  rO  s        rC   _rewriteLastz AppendingTiffWriter._rewriteLast  s     	ZK--- 	('NKdii&?&??GG
 
 	""=.AAAAArE   c                4    |                      |dd           d S )Nr'   r+   rU  r  s     rC   rewriteLastShortToLongz*AppendingTiffWriter.rewriteLastShortToLong  s     %A&&&&&rE   c                .    |                      |d          S rH  rW  r  s     rC   rewriteLastShortz$AppendingTiffWriter.rewriteLastShort        ***rE   c                .    |                      |d          S rM  rW  r  s     rC   rewriteLastLongz#AppendingTiffWriter.rewriteLastLong  r[  rE   c                    | j                             t          j        | j        |                     |          z   |                    }|                     ||           d S rt   )r   r  r  r  r;  rE  rR  )r   r   rC  rO  s       rC   r+  zAppendingTiffWriter._write  sW    Kdii
&;&;;UCC
 
 	""=*=====rE   c                2    |                      |d           d S rH  r+  r  s     rC   
writeShortzAppendingTiffWriter.writeShort      E1rE   c                2    |                      |d           d S rM  r`  r  s     rC   	writeLongzAppendingTiffWriter.writeLong  rb  rE   c                r    |                                   | j        r| j                                         d S d S rt   )r.  r  r   rw  r   s    rC   rw  zAppendingTiffWriter.close  s6    = 	FLLNNNNN	 	rE   c           
        |                      | j        rdnd          }t          |          D ]}t          j        | j        | j                            | j        rdnd                    \  }}}| j        |         }||z  }| j        rdnd}||k    }	|	s3|                      |          | j	        z   }
| 
                    |
|           || j        v r| j                                        }t                              dt          j        |          j        |t%          j        |d          |||           |	r5|                     ||           | j                            ||z              =| j                            |
           |                     ||           | j                            |           |	r%| j                            |t,          j                   d S )Nr3   r'   rI   r+   z;fixIFD: %s (%d) - type: %s (%d) - type size: %d - count: %dr  )r*  r$  r  r  r  r?  r   r  
fieldSizesr!  rU  Tagsr  r  r  r   r<  r  r   r  _fixOffsetsr  rr  rt  )r   rA  r   rD  
field_typer  rC  
total_sizer  is_localr  cur_poss               rC   r,  zAppendingTiffWriter.fixIFD  s   ::4=7aaa88x $	3 $	3A%+]$-,FBBQ G G& &"CU 4J#e+J M0qqqH!X-H 4H--0DD!!&(333di&++--QOC((-Ij)44    )$$UJ777FKK( 23333FKK'''$$UJ777FKK(((( 3Hbk222I$	3 $	3rE   r  c                   t          |          D ]}|                     |          }|| j        z  }d}| j        r|dv r	|dk    rd}n|dk    r|dk    rd}|r|dk    rd	}t	          |          |                     |||           | dz
  dz
  }| j                            |t          j	                   | 
                    |           | j                            d|z
  t          j	                   |                     ||           d S )
Nr   )r'   r+   l        r3   r'   r!   r+   r   znot implemented)r  r*  r!  r$  r$  rU  r   r  rr  rt  ra  )r   r  rC  r   r  rS  r)  rewinds           rC   ri  zAppendingTiffWriter._fixOffsets  s.   u 	6 	6AZZ
++Fd**FN} #v!5!5&E//!"qVu__!" 6A::+C&s+++ !!&*nEEE(1,q0FBK000///AJ4444!!&*55553	6 	6rE   isShortisLongc                F    |rd}n|rd}nd}|                      ||          S )Nr'   r+   r   )ri  )r   r  rp  rq  rC  s        rC   
fixOffsetszAppendingTiffWriter.fixOffsets  s=      	JJ 	JJJz222rE   N)F)r  r&  r\  rr   rq   r   r  )rq   r  )r   r   rq   r   r   )r  r}   r6  r}   rq   r}   )r;  r   rq   r   )r   r   rq   r}   )rC  r}   rq   r   )rC  r}   rq   r}   )rO  r  rP  r}   rq   r   rY   )r   r}   rC  r}   rS  r}   rq   r   )r   r}   rq   r   )r   r}   rC  r}   rq   r   )r  r}   rC  r}   rq   r   )FF)r  r}   rp  rr   rq  rr   rq   r   )$r   r   r   rg  rh  r   r  r.  r0  r2  r4  r  r  ru  r  r'  r%  r&  r  rE  r*  rJ  rN  staticmethodrR  rU  rX  rZ  r]  r+  ra  rd  rw  r,  ri  rs  r?   rE   rC   r  r    s         J(  D       4   4   
      4 4 4 4 /1k     - - - -N N N NO O O O" " " "$ $ $ $          $ $ $ \$ BC	B 	B 	B 	B 	B' ' ' '+ + + ++ + + +> > > >         
'3 '3 '3 '3R6 6 6 6: AF	3 	3 	3 	3 	3 	3 	3rE   r  c                   t          | j                            dg                     }t          | d          s|st	          | ||          S |                                 }	 t          |          5 }| g|z   D ]}t          |d          si |_        t          |d          sd|_        t          |dd          }t          |          D ]P}|
                    |           |                                 t	          |||           |                                 Q	 d d d            n# 1 swxY w Y   | 
                    |           d S # | 
                    |           w xY w)Nappend_imagesr7  r  r  r?   r   )r  r  r  r   r  r  r  r  r   r  r  r  r0  )	r<  r  r'  rv  cur_idxtfimsnfrr   s	            rC   	_save_allr{   	  s   ++OR@@AAM2z"" '= 'RX&&&ggiiG $$ 	"tm+ " "sM22 )&(COsO44 +(*C%c:q11 :: " "CHHSMMMHHJJJ#r8,,,KKMMMM	""	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	s1   !E 0B)D&E &D**E -D*.E Ez.tifz.tiffz
image/tiff)ro   rp   rq   rr   )rz   r{   r|   r}   rq   r~   )rz   r   r|   r}   r   r}   rq   r~   )r   r   rq   r
   )r   r}   r   r}   rq   r   )r   r}   rq   r   )r   r   rq   r   )r<  r  r  r  r'  r  rq   r   )
__future__r   r  r  loggingrM  rr  r  ro  collections.abcr   r   	fractionsr   numbersr   r   typingr	   r
   r   r   r    r   r   r   r   r   r   _binaryr   rL  r   rO  r   
_deprecater   _typingr   _utilr   r   r   r   r   r    	getLoggerr   r  r  r  r  r#  r!  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  	PREDICTORr  r  r  r  r  r  r  r  
JPEGTABLESr  r  r  r  r  r  r  rD  r  IMAGEJ_META_DATA_BYTE_COUNTSIMAGEJ_META_DATAr  r>  r  r  r   r  rw   r   r[  ry   r   r   r   r   r   r   rp   rr   r   r   r   r  r}   
_IFDv2Baser   r   r  r   r  r
  ImageFileDirectoryr$  r  r  BytesIOr  r{  register_openr  register_saveregister_save_allregister_extensionsregister_mimer?   rE   rC   <module>r     si  R # " " " " " 				       				   4 4 4 4 4 4 4 4       $ $ $ $ $ $ $ $ 4 4 4 4 4 4 4 4 4 4 4 4 4 4 J J J J J J J J J J J J J J J J ! ! ! ! ! ! ! ! ! ! ! !       ! ! ! ! ! ! # # # # # # ) ) ) ) ) ) ) )       .--------		8	$	$ 


 
  	   				
	
  	

	  %  u | x	
 x z { v  
= 
: 
 
> 
= 
?  
6!" 
6#$ 
6% * CB)9)?)?)A)ABBB | D!T2| D!T2	|
 D!T2| D!T2| D!T2
| D!T2
| D!T2| D!T2| D!T2| D!T2| D!T2| D!T2| D!T2|  D!T2!|" D!T2#|$ D!T2%|& D!T2'| |( D!T2)|* D!T2+|, D!T2-|. D!T2/|0 D!T21|2 D!T23|4 D!T25|6 D!T27|8 D!T29|: D!T2;|< D!T2=|> D!T2
?|@ D!T2
A|B D!T2
C|D D!T2
E|F D!T2G|H D!T2I| | |J D!UB!1K|L D!UB!1M|N D!UB!1O|P D!UB!3Q|R D!UB!2S|T D!UBU|V D!UBW|X D!UBY|Z D!UB[|\ D!UB]|^ D!UB_|` D!UBa|b D!UBc|d D!UBe|f D!VT"Lg|h D!VT"Li|j D!Y#^k| | |l D!Y#^m|n D!Y#%5o|p D!Y#%5q|r D!\2&(8s|t D!\2&(8u|v D!\4(/w|x D!\4(/y|z D!_f-/?{|| D!_f-/?}|~ D!'35F|@ D!'35FA|B D!\4(*:C|D D!\4(*:E|F D!_f-/@G|H D!_f-/@I|J D!'35GK|L D!'35GM| | |N D!\4(*:O|P D!\4(*:Q|R D!_f-/@S|T D!_f-/@U|V D!'35GW|X D!'35GY|Z D!\6*,<[|\ D!\6*,<]|^ D!\2&(:_|` D!\2&(:a|b D!%r*,@c|d D!%r*,@e|f D!%t,.Ag|h D!%t,.Ai|j D!%t,.Bk|l D!%t,.Bm|n D!%t,.Bo| | |p D!%t,.Bq|r D!T2s|t D!T2u|v D!T2w|x D!T2y|z D!T2{|| D!T2}|~ D!T2|@ D!T2A|B D!T2C|D D!T2E|F D!T2G|H D!T2I|J D!T2
K|L D!T2
M|N D!VT"KO|P D!VT"LQ| | |R D!VT"LS|T D!T2U|V D!T2W|X D!\2&(8Y|Z D!\2&(8[|\ D!_d+->]|^ D!_d+->_|` D!'02Da|b D!'02Dc|d D!%r*,@e|f D!%r*,@g|h D!T2
i|j D!T2
k|p D!Y#_q|r D!Y#_s|t D!Y#^u|v D!Y#^w| |	| cAAyAAAAA    wuz8$?? @I:B???. . . .% % % %   &    G' G' G' G' G'( G' G' G'T /=sBC	 	 	 	      $   S)JJJP$ P$ P$ P$ P$J P$ P$ P$f (6  $(7  % J JIC<<S!!DG!>4>>>#3Fq3IJJJG!?D??OC4HIIIIOS$X X X X X1 X X Xx + sH sH sH sH sHI' sH sH sHz #r1at	$ #r1at	$	
 	4Q61
% #r1at	$ 	4Q61
% '2q!UD	) VRAud+ gr1a- '2q!UD	) 
E2q!Y- VRA|Q/ VRA|Q/ VRA|T2  gr1aD1!" 
E2q!Y-#$ xQ5$/%& gr1a-'( Q5$/Q5$/+  	2s- s- s- s-l	i3 i3 i3 i3 i3"* i3 i3 i3X	   8  M(- A A A  M(% 0 0 0  ,i 8 8 8  -.0A B B B  M(, 7 7 7 7 7rE   