K i LddlmZddlZddlZddlZddlZddlZddlZddlZddl m Z m Z ddl m Z ddlmZmZddlmZmZmZddlmZmZmZmZmZmZdd lmZdd lmZ dd lm!Z!dd l"m#Z#m$Z$dd lm%Z%dZ&e&rddl m'Z'ddlm(Z(ddl)m*Z*m+Z+m,Z,ejZe.Z/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZdZ?d Z@d!ZAd"ZBd#ZCd$ZDd%ZEd&ZFd'ZGd(ZHd)ZId*ZJd+ZKd,ZLd-ZMd.ZNd/ZOd0ZPd1ZQd2ZRd3ZSd4ZTd5ZUd6ZVd7ZWd8ZXd9ZYd:ZZd;Z[dd?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^Z^e^jDcic]\}}|| c}}Z`ie3dd_dd_d`fdae4dd_dd_d`fdae3dd_d?d_d`fdbe4dd_d?d_d`fdbe3dd_dd_d`fdce4dd_dd_d`fdce3dd_d?d_d`fdde4dd_d?d_d`fdde3dd_dded`fdfe4dd_dded`fdfe3dd_d?ded`fdge4dd_d?ded`fdge3dd_dded`fdhe4dd_dded`fdhe3dd_d?ded`fdie4dd_d?ded`fdie3dd_ddjd`fdkie4dd_ddjd`fdke3dd_d?djd`fdle4dd_d?djd`fdle3dd_ddjd`fdme4dd_ddjd`fdme3dd_d?djd`fdne4dd_d?djd`fdne3dd_ddod`fdpe4dd_ddod`fdpe3dd_d?dod`fdqe4dd_d?dod`fdqe3dd_ddod`fdre4dd_ddod`fdre3ddeddod`fdre4ddeddod`fdre3dd_d?dod`fdse4dd_d?dod`fdsie3dd_ddtd`fdue3dd_ddvd`fdwe3dd_ddvd`fdwe4dd_ddvd`fdxe3dd_d?dvd`fdye3ddeddvd`fdze4ddeddvd`fd{e3dd|dd}d`fd~e4dd|dd}d`fde3dd_dd}d`fde3ddedd}d`fde4ddedd}d`fde3dd|dd}d`fd~e4dd|dd}d`fde3dd_dddefde4dd_dddefde3d?d_ddd`fdie4d?d_ddd`fde3d?d_d?dd`fde4d?d_d?dd`fde3d?d_ddd`fde4d?d_ddd`fde3d?d_dddfde4d?d_dddfde3d?d_dddfde4d?d_dddfde3d?d_dddfde4d?d_dddfde3d?d_ddd_fde4d?d_ddd_fde3d?d_dddfde4d?d_dddfde3d?d_dddfde4d?d_dddfdie3d?d_dddefde4d?d_dddefde3d?d_dddfde4d?d_dddfde3d?d_dddfde4d?d_dddfde3d?d_dddfde4d?d_dddfde3d?d_ddd`fde4d?d_ddd`fde3d?d_ddd`fde4d?d_ddd`fde3d?d_dddfde4d?d_dddfde3d?d_ddd_fde4d?d_ddd_fde3d?d_dddefdie4d?d_dddefde3dAd_dd_d`fde4dAd_dd_d`fde3dAd_d?d_d`fde4dAd_d?d_d`fde3dAd_dded`fde4dAd_dded`fde3dAd_d?ded`fde4dAd_d?ded`fde3dAd_ddjd`fde4dAd_ddjd`fde3dAd_d?djd`fde4dAd_d?djd`fde3dAd_ddod`fde4dAd_ddod`fde3dAd_dddfde4dAd_dddfdie3dAd_dddefde4dAd_dddefde3dAd_d?dod`fde4dAd_d?dod`fde3dEd_ddd`fde4dEd_ddd`fde3dEd_dddfde4dEd_dddfde3dEd_dddfde4dEd_dddfde3dEd_ddd`fde4dEd_ddd`fde3dGd_ddod`fdre4dGd_ddod`fdre3dGd_ddd`fde4dGd_ddd`fde3dKd_ddd`fde4dKd_ddd`fdiZaebdeaDZcgdZdddZe ddZf ddZgiZhiZiddZjGddeZke delemgefZnddZoddZpddZqe&re erefZsne ZsGd„desZtehet_heiet_ie%jD]:\ZuZvevjddīZvexetdeveheudexetdeveieu<[h[i[u[vGdDŽdetZyeyZzGdɄdej0Z{idde3ddd_dfdde3dddodfdde3dddd?fdde3dAddodfdde3dAddd?fdde3dd?d}dfdde3dddvdfdde3dddvdfdde3ddAd}dfdde3d?dddfdde3d?dddfdde3d?ddd?fdde3dEdddfdde3dGdddfdde3dKdddfdde4dddvdfZ|dd݄Z}GdބdejZddZeje{je{eeeje{je}eje{jeej e{jddgej e{jdycc}}w)) annotationsN)CallableMutableMapping)Fraction)NumberRational)IOAnycast)ExifTagsImage ImageFileImageOps ImagePaletteTiffTags)i16be)i32be)o8) DeferredErroris_pathTYPESF)Iterator)NoReturn)Buffer IntegralLikeStrOrBytesPathsIIsMMiiiii iiiiiiii(i-i1i2i;i=i@iBiCDiEiJiRiSi[iiiiiIisiiiiiiraw tiff_ccittgroup3group4tiff_lzw tiff_jpegjpegtiff_adobe_deflatei tiff_raw_16ipackbitsi)tiff_thunderscani tiff_deflateit tiff_sgilogiu tiff_sgilog24imlzmaiPzstdiQwebpr )1z1;I)r>z1;IR)r>r>)r>z1;R)r%)LzL;2I)r?zL;2IR)r?zL;2)r?zL;2R)r))r?zL;4I)r?zL;4IR)r?zL;4)r?zL;4R)r1)r?zL;I)r?zL;IR)r?r?)r?zL;R) )I;16zI;12))rArA)I;16BrC)rAzI;16R)IzI;16S)rDzI;16BS)r') )FF;32F)rFzF;32BF)rDzI;32N)rDI;32S)rDzI;32BS)r1r1)LArI)r1r1r1)RGBrJ)rJzRGB;R)r1r1r1r1)RGBArKr)rJRGBX)r1r1r1r1r1rr)rJRGBXX)r1r1r1r1r1r1)rrr)rJRGBXXX)rKRGBa)r r)rKRGBaX)r rr)rKRGBaXX)r%r)rKRGBAX)r%rr)rKRGBAXX)i)rBrBrB)rJzRGB;16L)rJzRGB;16B)rBrBrBrB)rKzRGBA;16L)rKzRGBA;16B)rJzRGBX;16L)rJzRGBX;16B)rKzRGBa;16L)rKzRGBa;16B)PzP;1)rVzP;1R)rVzP;2)rVzP;2R)rVzP;4)rVzP;4R)rVrV)rVPX)PArX)rVzP;R)CMYKrY)rYCMYKX)rYCMYKXX)rYzCMYK;16L)rYzCMYK;16B)LABr\c#8K|]}t|dyw)r)N)len).0key_tps Y/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/PIL/TiffImagePlugin.py rbsAV#fQi.As)sMM*sII*sMM*sII*sMM+sII+c>|jttSN) startswithtuplePREFIXESprefixs ra_acceptrj"s   U8_ --cxt|dkD}t|rd|z n|j|}|r|dddS|S)Nr )abs IFDRationallimit_rational)valmax_valinvn_ds ra_limit_rationalru&sC c(Q,C a#g# . = =g FC3tt9$$rkroc t|}|j|jf}td|D|krt |t |}t d|D}t||kDrt |d|dz |}|S)Nc32K|]}t|ywrdfloatr_is rarbz)_limit_signed_rational..4s !58 !c32K|]}t|ywrdrxrzs rarbz)_limit_signed_rational..7s,1eAh,r|rr )r numerator denominatorminrurnrfmax)rqrrmin_valfracrt n_d_floats ra_limit_signed_rationalr.s~ C=D-1^^T=M=M-MC !S !!G+c3w<0,,,I 9~ilYq\97C Jrkc dfd }|S)Nc6t|j|Srd)getattr_val)selfargsops radelegatez_delegate..delegateFs&wtyy"%t,,rk)rrorztuple[float, ...]returnzbool | float | Fractionr=)rrs` ra _delegaterEs'--"3- - OrkcFeZdZdZ dZ d( d)dZed*dZed+dZd,dZ d-dZ d+dZ d.d Z d/d Z d0d Z ed Zed ZedZedZedZedZedZedZedZedZedZedZedZedZedZedZedZ edZ!edZ"edZ#ed Z$ed!Z%ed"Z&ed#Z'ed$Z(ed%Z)e*e+d&r ed&Z,y'y')1rozImplements 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 _denominatorrc|t|tr4|j|_|j|_|j |_yt|tr#|j|_|j|_n*trtt||_n||_||_|dk(rtd|_y|dk(rt||_yt||k(rtt|||_yt||z |_y)z :param value: either an integer numerator, a float/rational/other number, or an IFDRational :param denominator: Optional integer denominator Nrnanr ) isinstanceror~rrrrr TYPE_CHECKINGr rryint)rvaluers ra__init__zIFDRational.__init__\s e[ )#ooDO % 1 1D  DI  eX &#ooDO % 1 1D "&|U";"' +D  ! e DI A  DI Z5  U[9DI !45DIrkc|jSrd)rrs rar~zIFDRational.numerator~s rkc|jSrd)rrs rarzIFDRational.denominators   rkc|jdk(r|j|jfSt|jtsJ|jj |}|j|jfS)z :param max_denominator: Integer, the maximum denominator value :returns: Tuple of (numerator, denominator) r)rr~rrrlimit_denominator)rmax_denominatorfs rarpzIFDRational.limit_rationalsb   q >>4#3#33 3$))X... II ' ' 8{{AMM))rkc>tt|jSrd)strryrrs ra__repr__zIFDRational.__repr__s5#$$rkc6|jjSrd)r__hash__rs rarzIFDRational.__hash__syy!!##rkc|j}t|tr |j}t|tr t|}||k(Srd)rrrory)rotherrqs ra__eq__zIFDRational.__eq__s;ii e[ )JJE eU #*Ce|rkcH|j|j|jgSrd)rrrrs ra __getstate__zIFDRational.__getstate__s 4??D,=,=>>rkctj|d|\}}}t|ttfsJ||_t rtt||_ n||_ t|tsJ||_ yNr) rorrryrrrr rrrr)rstaterrrs ra __setstate__zIFDRational.__setstate__sjT1%).&j,$ 1222 "<.decoratorsL# == # #G ,qr*223.decorators# rk)rCallable[..., Any]rrr=)rrs` ra_register_writerrs rkcddlm}|\}}|||<tjd d dfd }|ft|<fdt |<y)Nr r=cH|jt|z|Srd)_unpackr^)rdata legacy_apifmtrs ra basic_handlerz&_register_basic..basic_handlers)||s4yD01#7>>rkc<djfd|DS)Nrkc3BK|]}j|ywrd)_pack)r_rrrs rarbz4_register_basic....sz!_register_basic..s B? ?  -N3OCrkceZdZUdZiZded<iZded< d= d>dZedZ ed Z ed?d Z e jd@d Z dAd Z dBd ZdCdZdDdZdEdZdFdZdGdZdHdZdIdZdJdZdKdZdLdZeeeej:ddfej<ddfej>ddfej@ddfejBd d!fejDd"d#fejFd$d%fejHddfejJd&d'fg e&d(d(dMdNd)Z'e(d(dOd*Z)e&d+d(dMdPd,Z*e(d+dQd-Z+e&d.d/ dM dRd0Z,e(d.dSd1Z-e&d2d(dMdNd3Z.e(d2dTd4Z/e&d5d/ dM dRd6Z0e(d5dSd7Z1dUd8Z2dVd9Z3dWd:Z4dXdYd;Z5dZd<Z6y)[raThis 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]]rzdict[int, Callable[..., Any]]rNct|sdt|d}t|||n|dd|_|jtk(rd|_n(|jt k(rd|_n d}t||ddk(|_||_i|_ |j|jr|jd |d dd n|jd |d dd |_ d|_ y)aInitialize 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. znot a TIFF file (header z not valid)Nr%>n 4<<rkc|jSrd)_offsetrs rarzImageFileDirectory_v2.orrkc|jSrd)rrs rarz ImageFileDirectory_v2.legacy_apiqsrkcd}t|)Nz"Not allowing setting of legacy api) Exception)rrrs rarz ImageFileDirectory_v2.legacy_apius2nrkcXi|_i|_i|_i|_d|_d|_yrd)_tags_v1_tags_v2_tagdatar_nextrrs rarzImageFileDirectory_v2.resetzs,(* (* *,   #' rkc*tt|Srd)rdictrs ra__str__zImageFileDirectory_v2.__str__s4:rkc|jDcic]0\}}tj||jj|2c}}Scc}}w)z :returns: dict of name|key: value Returns the complete tag dictionary, with named tags where possible. )itemsrlookuprr)rcoders ranamedzImageFileDirectory_v2.namedsH $zz| e OOD$** - 2 2E 9   s5A cjtt|jt|jzSrd)r^setr rrs ra__len__zImageFileDirectory_v2.__len__$3t}}%DMM(::;;rkc||jvrG|j|}|j|}|j|\}}||||j||<|j|}|jrt |t tfs|f}|Srd)rr rrrrrfr)rtagrtyprhandlerrqs ra __getitem__z!ImageFileDirectory_v2.__getitem__s dmm #==%D,,s#C //4MD'dDOO#B&C rkc>||jvxs||jvSrd)rr rr/s ra __contains__z"ImageFileDirectory_v2.__contains__dmm#;sdmm';;rkc>|j|||jyrd)_setitemr)rr/rs ra __setitem__z!ImageFileDirectory_v2.__setitem__s c5$//2rkc  tttf}tj||j  t ||r|gn|}||jvr jr j|j|<ntj|j|<td|Dr]|D]9}t |tsJ|dkstj|j|<ntj|j|<nktd|Drd}d}d} |D]A}t |tsJ|rd|cxkrdksnd}|rd|cxkrdksnd}| s:|dks@d} C|rtj|j|<n|rtj |j|<n| rtj"|j|<ntj$|j|<ntd |Drtj&|j|<n_td |Drtj(|j|<n/td |Drtj*|j|<|j|tjk(r2|Dcgc]&}t |tr|j-d d n|(}}nJ|j|tjk(r*|Dcgc]}t |tr t/|n|!}}|j|tj"k(xrt |t0} | st3 fd|D}|r |j4n |j6} | s j8dk(s<|j|tj*k(s j8Mt;|dk(r?|s=|r2|j|tjtjfvr|f} |\| |<y|| |<ycc}wcc}w#t<$r0t?j@d|dt;|d|d| |<YywxYw)Nc3<K|]}t|tywrd)rror_vs rarbz1ImageFileDirectory_v2._setitem..sBaz![1Brc3<K|]}t|tywrd)rrr<s rarbz1ImageFileDirectory_v2._setitem..<As+TrFiic3<K|]}t|tywrd)rryr<s rarbz1ImageFileDirectory_v2._setitem..>!Au->r>c3<K|]}t|tywrd)rrr<s rarbz1ImageFileDirectory_v2._setitem..r@r>c3<K|]}t|tywrd)rrr<s rarbz1ImageFileDirectory_v2._setitem..rBr>asciirc3dK|]'}t|trj|n|)ywrd)rrcvt_enum)r_rinfos rarbz1ImageFileDirectory_v2._setitem..s0)35#(> e$EIs-0r zMetadata Warning, tag z had too many entries: z , expected 1)!rrrrr'rrrtype UNDEFINEDallroSIGNED_RATIONALRATIONALrSHORT SIGNED_SHORTLONG SIGNED_LONGDOUBLEASCIIBYTEencoderyr#rfrrlengthr^ ValueErrorwarningswarn) rr/rr basetypesrr=short signed_shortlongis_ifddestrHs @rar8zImageFileDirectory_v2._setitemsUC( sDJJ/&ui8%e dll "yy$(II S!$,$6$6 S!B6BB#>)![999q5080H0HDLL-! > -5,=,= S)v>>(0DLL%v>>(0 DLL% <<  2 2 2 1;1c0B),IF\\# ("3"3 3EKL*Q"4eAh!;LFLc"hmm3P 648P#F !+t}}  [[A ||C HMM1 #F q(8dll3/!!((4! &% cDI[ M: & ,SE1H6{m<1#1IS  &s+O?'$P1P 6QQc|jj|d|jj|d|jj|dyrd)rpoprr r4s ra __delitem__z!ImageFileDirectory_v2.__delitem__s> #t$ #t$ #t$rkcjtt|jt|jzSrd)iterr+r rrs ra__iter__zImageFileDirectory_v2.__iter__$C &T]]);;<D rkr%cR|jdr|dd}|jddS)Nrmzlatin-1r)endswithdecoderss ra load_stringz!ImageFileDirectory_v2.load_string-s* == 9D{{9i00rkct|tr t|}t|ts|j dd}|dzS)NrErrz)rrrrrUrrs ra write_stringz"ImageFileDirectory_v2.write_string3s; eS !JE%'LL)4Eu}rkr+r1c |jt|dzd|}dfd tfdt|ddd|dddDS)Nr)r?c(r||fSt||Srdroarlrs racombinez4ImageFileDirectory_v2.load_rational..combineB'Aq6 >[A-> >rkc36K|]\}}||ywrdr=r_numdenomrs rarbz6ImageFileDirectory_v2.load_rational..EVZS%WS%(Vr%r rrrlrrztuple[int, int] | IFDRationalrr^rfziprrrvalsrs ` @ra load_rationalz#ImageFileDirectory_v2.load_rational<W||s4yA~.a0$7 ?V3tCaCy$qtRSt*;UVVVrkc8djfd|DS)Nrkc3XK|]!}jdgt|d#yw)2LlN)rrur_rrs rarbz7ImageFileDirectory_v2.write_rational..Is- DHJDJJt ?odI> ? s'*rrrs` rawrite_rationalz$ImageFileDirectory_v2.write_rationalGs!xx LR   rkr/c|Srdr=rss raload_undefinedz$ImageFileDirectory_v2.load_undefinedMrurkct|tr t|}t|trt|j dd}|S)NrEr)rrorrrUrs rawrite_undefinedz%ImageFileDirectory_v2.write_undefinedQs: e[ )JE eS !J%%gy9E rk c |jt|dzd|}dfd tfdt|ddd|dddDS)Nr)rnc(r||fSt||Srdrrs rarz;ImageFileDirectory_v2.load_signed_rational..combine_rrkc36K|]\}}||ywrdr=rs rarbz=ImageFileDirectory_v2.load_signed_rational..brrr%r rrrs ` @raload_signed_rationalz*ImageFileDirectory_v2.load_signed_rationalYrrkc8djfd|DS)Nrkc 3ZK|]"}jdgt|dd$yw)2liiN)rrrs rarbz>ImageFileDirectory_v2.write_signed_rational..fs3  DJJt P4T9hO P s(+rrs` rawrite_signed_rationalz+ImageFileDirectory_v2.write_signed_rationalds!xx    rkc~|j|}t||k7rd|dt|d}t||S)Nz&Corrupt EXIF data. Expecting to read  bytes but only got z. )readr^OSError)rfprretrs ra _ensure_readz"ImageFileDirectory_v2._ensure_readksNggdm s8t %%)F*>s3xjL #,  rkc ~|j|j|_ |jr"|j d|j |dn!|j d|j |dd}t |D]}|jr"|j d|j |dn!|j d|j |d \}}}}tj||jj}tj|d } d |d |d | d |d } |j|\} } || z} | |jrdndkDrv|j}|j |jrdnd|\}| d|d|z } |j#|t%j&|| }|j#|n|d| }t)|| k7r>t+j,d| dt)|d|tj!| |stj!| ||j.|<||j0|<| dz } | | dkDrd| dn t3|z } tj!| |jr"|j d|j |dn!|j d|j |d\|_y#t$rtj!d| |YwxYw#t6$r(} t+j,t9| Yd} ~ yd} ~ wwxYw)Nrr1rkr%rHHQ8sHHL4sr@unknownztag:  ( ) - type: )z%s - unsupported type %sr)r?z Tag Location: z - Data Location: z/Possibly corrupt EXIF data. Expecting to read rz. Skipping tag z - value: rE)rtellrrrrrangerr'rrrgetrKeyErrorloggerdebugseekr _safe_readr^rXrYr rrrrr)rr tag_countr{r/r0countrtagnametypnamer unit_sizer1rhereoffsets raloadzImageFileDirectory_v2.loadus wwy = == S$"3"3B":;\\#t'8'8Q'?@ I 9%. "}}LL$*;*;B*CDgt/@/@R/HI&S% #//#tzz:??))C3gYbZy3%qI)-)<)C9KK rkc \|j|jrdndt|j}g}|jrdnd}|jrdnd}|t|t|j|jrdndzz|zz }d}t |jj D]H\}}|t k(r t|}|j|} tjd|| t|| tjk(xrt|t} | rYt|j!| } |j|} | j D] \} }|| | < | j#|}n+t|t$r|n|f} |j&| |g| }tj(||j*j,}| rd nt/j0| d }d |d |d|d | d }|t|dk\rdt|dn t3| z }tj|| rd}nH| tj4tj6tj8fvr t|}n t| }t||kr(|j;|| ||j=|ddf |j;|| ||j|||f|t|dzdzdzz }K|||\}} }}}|rM|j>| \}}||||j@Dcgc]}||z } }|j&| |g| }n(|j||jC||d|z}|| |||f||<|D]Z\}} }}}tjd|| |t|t|||j|jrdnd|| ||z }\||j|dz }|D]!\}} }}}||z }t|dzs|dz }#|Scc}w)Nrrkr?r1r)rr@zTag %s, Type: %s, Value: %s)rifdrzsave: rrz ) - value: rBrrr rzrkr%rz%s %s %s %s %srr)"rrr^rsortedr& STRIPOFFSETSrrrrrrPrr#rrtobytesrfrr'rrrrrrTrSrJappendljustrrr)rrresultentriesrfmt_size stripoffsetsr/rr0r^rrifd_tag ifd_valuerrrrrrr1rqs rarzImageFileDirectory_v2.tobytess 4==Cc3t}};MN<>]]c 11 K#dmm,dmmL Lx W  !!4!4!67" 3JCl""7| ,,s#C LL6S$u+ NHMM)Ej.EF+DMMO3Gs+*0,,.-&GY#,CL-{{6*",UE":0t++C0??ooc4::6;;G%e599S)+DG7)2cU*WIRuKPC CIOXc$i[0V TC LL 8J8JKKD F 4yH$S%He1LcRSS%C1H$OP3t9q=Q.22E" 3J  #+2<+@ (CeUD $ 3 3C 8 g29$doo2VW3#,WW0t++C0?? 3 S%(@(Cf(LM$'eUD$@GL !-4  (CeUD LL)3UDKd T djj==gsC F  $**S!$$-4 (CeUD dNF4y1}%  -Xs6 P)c|jdk(r|j|j|j}|j|}|j||t |zSr)rwriterrr^)rrrrs rasavezImageFileDirectory_v2.savesU 779> HHT]]_ %f% F ##rk)sII*NN)rrriz bytes | Noner int | Nonerr)rr)rrrrrrr)rzdict[str, Any]rr/rrr r/rrrr/rrr rr)r/rrr rrrr)r/rrrrz Iterator[int])rrrrrr)rrrr rrr)rrrrrr)rbytes | int | IFDRationalrr)rrrrrr)rzstr | bytes | intrr)rrrrrz)tuple[tuple[int, int] | IFDRational, ...])rrorr)rrrr)r IO[bytes]rrrr)rrrr)rrrL)rrrr)rrrr)7rrrrr__annotations__rrrrirrsetterrr$r)r,r2r5r9r8rbrerrlistmaprrrNrP SIGNED_BYTErOrQFLOATrRIFDLONG8rrtrrxr}rrrrrrrrrrrrr=rkrarrs:x:;s rkc|jSrd)r rs rarzImageFileDirectory_v1.<s DMMrkzdict[int, int]rc||j}|j|_|j|_|j|_|S)a2Returns 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` rh)rir rr)clsoriginalrs rafrom_v2zImageFileDirectory_v1.from_v2Bs<)(( && == rkct|j}t|j|_t|j|_t|j |_|S)a2Returns 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` rh)rrir#r rr)rrs rato_v2zImageFileDirectory_v1.to_v2TsG$4;;7DMM* 4<<( DMM*  rkc>||jvxs||jvSrd)rr r4s rar5z"ImageFileDirectory_v1.__contains__er6rkcjtt|jt|jzSrd)r^r+r rrs rar,zImageFileDirectory_v1.__len__hr-rkcjtt|jt|jzSrd)rdr+r rrs rarezImageFileDirectory_v1.__iter__krfrkc8dD]}|j|||yN)FT)r8)rr/rrs rar9z!ImageFileDirectory_v1.__setitem__ns!' 2J MM#uj 1 2rkc ||jvrR|j|}|j|}|j|\}}dD]}|j |||||||j|}t |t tfs|f}|Sr)rr rrr8rrfr)rr/rr0rr1legacyrqs rar2z!ImageFileDirectory_v1.__getitem__rs dmm #==%D,,s#C //4MD'' H c74v#>G HmmC #u~.&C rk)rr rr rr)rrrr)rrrrrrr)rrrrrrtagstagdatar classmethodrrr5r,rer9r2 __classcell__rs@rarr$s`$  . /D12G!""<<=2 rkrceZdZdZdZdZ d dfd ZddZeddZ ddZ ddZ dd Z dd Z dfd Zdd Zdd ZddZddZxZS) TiffImageFileTIFFz Adobe TIFFFc2| | t|||yrd)rr)rrfilenamers rarzTiffImageFile.__init__s 5 " X&rkc|jJ|jjd}|ddk(r||jjdz }t||_|jjx|_|_d|_|j|_g|_ d|_ tjdtjd|j tjdt||jd y) z#Open the first image in a TIFF fileNr1r%rrmz*** TiffImageFile._open ***z - __first: %sz - ifh: %sr)rrrtag_v2r_TiffImageFile__first_TiffImageFile__next_TiffImageFile__frame_fp _frame_pos _n_framesrrr_seekrs ra_openzTiffImageFile._opensww"""ggll1o q6R< 477<<? "C+C0 &*[[%5%55 t{ 77%'%) 23 _dll3 [$s), 1 rkcR|j}||j}|jt|j|j/|j|jdz|j/|j ||jJ|jS)Nr )rrrr^rr)rcurrent_n_framescurrents ran_frameszTiffImageFile.n_framess>>  #iikG JJs4??+ ,..( 499;?+..( IIg ~~)))~~rkc|j|sy|j||j[|jj|j k7s/|jj |j k7s |jrd|_yyy)z%Select a given frame as current imageN) _seek_checkr_imimr _tile_sizemodereadonly)rframes rarzTiffImageFile.seeksi&  5 88  GGLLDOO +ww||tyy(}}DH rkc|t|jtr|jj|j|_t |j |kr|js d}t|tjd||j|j|jj|jdk\r d}t||jj|j|j j|jtjd|jj|j j#|j|j j$|j vrd|_n|j j$|_|jdk(r |dz|_t |j dk(r|jdk7|_|xjdz c_ t |j |kr|jj|j ||j j#|jt*|j vrF|j t*}t|t,rt |dk(r|d}||j.d<nd|j.vr |j.d=|j1t2j5|j x|_|_||_ |j;y) Nzno more images in TIFF filez9Seeking to frame %s, on frame %s, __next %s, location: %slzUnable to seek to framezLoading tags, location: %srr xmp)rrrexrr^rrEOFErrorrrrrrWrrrrrr is_animatedXMPrfrH _reload_exifrrr/r_setup)rr#rr%s rarzTiffImageFile._seeksD dhh .((++ (($//"e+;;3sm# LLK     {{e#/ o% GGLL % OO " "4;; / LL5tww||~ F KK  TWW %{{4??2  "kk.. {{a!&4??#q(#';;!#3 LLA L9$//"e+:  T__U+, ! $++ ++c"C#u%#c(a-!f"DIIe  dii  %  3;;DKKHH48  rkc|jS)zReturn the current frame number)rrs rarzTiffImageFile.tells ||rkci}|jjtjj}|r|j drt |dd}tj|ddzdz dz}t|d|zd|z}|d|zd|z|z}d|i||<|tjd|z|zdz dzd}|j dr|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. s8BIMr)r-r r%rrN) rrr BaseImageResourcesrei16mathceili32)rblocksrqidnrrs raget_photoshop_blocksz"TiffImageFile.get_photoshop_blocksskkoohmm::; ..)Qq]IIs1vzQ./!33q1urAv./26BFTM2$d^r $))R!Vd]a$781<>?..) rkcp|jr|jr|jSt|Srd)tileuse_load_libtiff _load_libtiffrr)rrs rarzTiffImageFile.loads- 99..%%' 'w|~rkc |jXtj|jtjj |j |j|_tjj|yrd) rr_decompression_bomb_checkr corenewr!rr load_preparers rar@zTiffImageFile.load_preparesP 88   + +DOO <jjnnTYY@DG((.rkcf|jsBd|_|j}tjD]}||vr|j |t j|dtjj|jvr&|jtjj=yy)NT)in_place) r(!_close_exclusive_fp_after_loadinggetexifrTAGS_V2_GROUPSget_ifdrexif_transposer r. Orientationr)rexifkeys raload_endzTiffImageFile.load_ends59D 2<<>D.. "d? S! " t4 == $ $ 3 HMM556 4rkctjj||jt|jdk(s d}t ||jdd}|jdd}|j J t|j dxr|j j}t|j dr|j j|r-t|tsJt|}||d <t|}tj|jd ||j} |j!|j"||j&xr |j( }t|j d rBt*j-d |j/|j j1\} } n|rt*j-d|s|j j3dt5j6|dt4j8} |j/d\} } t5j6|| t4j:n\t*j-d|j j3d|j/|j j=\} } g|_d|_|jA|r!|j jCd|_| dkrd| }t |tjj|S#t $rd}Y]wxYw#t$$r}d }t ||d}~wwxYw)zWOverload method triggered when we detect a compressed tiff Calls out to libtiffr zNot exactly one tilerr'NfilenoflushFr%libtiffzCouldn't set the imagegetvaluez5have getvalue. just sending in a string from getvaluez3have fileno, calling fileno version of the decoder.sfpfpz+don't have fileno or getvalue. just readingzdecoder error )"rrr@r^r9rrrrMrNrrfr _getdecoderr! decoderconfigsetimagerrW _exclusive_fpr(rrr|rProslseekSEEK_CURSEEK_SETrr"rKclose) rrextentsrr args_listdecodere close_self_fpr6errposs rar;zTiffImageFile._load_libtiff0s   499~"(C#, ))A,q/yy|A ww""" (+@0@Btww(  dE* **T IIaL#D##DIIy$@R@RS &   TWWg . **C43C3C/C 477J ' LLP Q^^DGG$4$4$67FAs  LLN O  Q((2q"++.C^^G,FAs HHRbkk * LLF G GGLLO^^DGGLLN3FAs     GGMMODG 7"3%(C#, {{%%G B  &*C#,A % &s+A"L9M 9 MM M'M""M'c d|jvr d}t|t|jjtd|_|jjt d|_|jjtd}|j dk(rd}|jjtd}tjdtjd|j tjd |tjd |jtjd |tjd |jjt |jt}|jt}t#|t$rt#|t$s d}t'|||f|_|jjt*j,j.}|dvr ||f|_n ||f|_tjd|j2|jjt4d}t7|dkDr"t9|t;|cxk(rdk(rnnd}|jjt<d} |jjt>d} |dvrd} n |dk(rd} nd} | t7| z } t7| } |jjt@|j dk(r|dvrdnd} | tBkDr#tjEd| d}tG|| | kr| d| } n| | kDr | dk(r| | z} t7| | k7r d}tG||jjH|||| | f}tjd| tJ|\|_&}tjd|tjd |jN|j |jPd!<|jjtRd}|jjtTd}|r|r|jjtV}|d"k(r||f|jPd#<nS|dk(r|d$z|d$zf|jPd#<n6|#||f|jPd#<||f|jPd%<n||f|jPd%<dx}x}}g|_,tZxs|j d&k7|_.|j\r|d"k(r5|dddz|ddz}tjd|tJ|\|_&}|dk(r!|j d'k(r|jdk(rd(}n!|d)k(rd*}n|j_d+r|dd,d-z}||j d.|jj`f}|jXjctejfd/dd||fd|nth|jvstj|jvrth|jvr6|jth}|jjtl|}|}n|jtj}|jjtn}|jjtp}t#|t$rt#|t$s d0}t'||}||k(r||k(r|jd"k7r|d,d}|D]}||z|kDr|ts| zd1z }nd}|}|jd"k(r ||}|| z}|t%|df}|jXjctejf|j ||t;||z|t;||z|f||||z }||k\sd||z}}||k\sd}|dz }n"tjd2d}tG|tt|jvr |jtt|jPd3<|jNd4vrW|jtvDcgc]}ty|d5z} }t{j|d6d7j| |_@yy#t$r}d }t!||d}~wwxYw#t$r(}tjdd}tG||d}~wwxYwcc}w)8z-Setup this image object based on current tagsiz+Windows Media Photo files not yet supportedr rr.r-z*** Summary ***z- compression: %sz - photometric_interpretation: %sz- planar_configuration: %sz- fill_order: %sz- YCbCr subsampling: %szMissing dimensionsNzInvalid dimensions)r+r-r/r1z - size: %sr<r=)r%r-r1r'r+r))r%r-z.More samples per pixel than can be decoded: %sz#Invalid value for samples per pixelzunknown data organizationzformat key: %sz- unsupported formatzunknown pixel modez- raw mode: %sz- pil mode: %s compressionr%dpigRQ@ resolutionr$r0rJrAI;16N)z;16Bz;16LrmNFrOzInvalid tile dimensionsr1z- unsupported data organization icc_profilerVrXr!RGB;Lrk)ArrCOMPRESSION_INFOr COMPRESSION _compressionPLANAR_CONFIGURATION_planar_configurationPHOTOMETRIC_INTERPRETATION FILLORDERrrYCBCRSUBSAMPLING IMAGEWIDTH IMAGELENGTHr TypeErrorrrrWr r r.rH_sizer SAMPLEFORMATr^rr BITSPERSAMPLE EXTRASAMPLESSAMPLESPERPIXELMAX_SAMPLESPERPIXELerrorr ri OPEN_INFO_moder!rH X_RESOLUTION Y_RESOLUTIONRESOLUTION_UNITr9 READ_LIBTIFFr:r{rrr_Tiler TILEOFFSETS ROWSPERSTRIP TILEWIDTH TILELENGTHsum ICCPROFILECOLORMAPrrr$rpalette)!rrphoto fillorderxsizeysizer] orientation sample_format bps_tuple extra_tuple bps_countbps_actual_countsamples_per_pixelrJrawmodexresyresresunitxylayerroffsetsrmw tilewidthrstride tile_rawmoderrlrs! rar+zTiffImageFile._setups T[[ ?C#, -T[[__[!-LM%)[[__5I1%M"  :A>    +EKKOOIq1  &' ($*;*;< 7? 143M3MN '3 . @P0QR (KK +EKK ,E%%Zs-C&CS/ !,kkoohmm&?&?@ , &DJDJ \499-  d; }  !c-&8C  KKOO ""k1evoA1  2 2 LL@BS 8Cc" " / /""4#45I !1 16F!6K"$55I y>. .-Cc" " KK           %s+ *"+C. DJ  %w/ %tyy1#'#4#4 - {{|Q/{{|Q/ Dkkooo6G!|$($< % A$(4K#= % $($< % +/* ,'*.* ,'A , J0A0AU0J  A~"1gns12w. -s3'0n# G %%/..!3 F"!!!"23!#2,,$++UDKK4F4FGA II  Y__YAue8LaQRS T T[[ (K4;;,Ft{{*++l3KKOOL%8++k2 KKOOI6 KKOOJ/!)S1As9K3C$S/)Eza5jT-G-G1-L!"#,! #q55=Y/!3FF& --2#*5>Li'F$c&k15   OO))As1q5%0#a!eU2CD Q:a!eqAEz 7 #: LL: ;-Cc" "  $'+{{:'>DIIm $ 99 #-1[[-BCr!s(|CGC'++GSXXg5FGDL $[ (&CC.a ' (P * LL/ 0&Cc" ) *LDs63&b<b#c b  bb # c,#ccrd)rStrOrBytesPath | IO[bytes]r zstr | bytes | Nonerrrr)r#rrr)rzdict[int, dict[str, bytes]])rzImage.core.PixelAccess | None)rrrformatformat_descriptionrCrrrrrrrr7rr@rKr;r+rrs@rar r s F%(-% (, ' & '% '  '2   /b* / 7"_&BoHrkr r>r?rIrVrXrDrHrAI;16LrFrGrJrMrKrYYCbCrr\rCc f t|j\}}}}}}|j} |j } t |} | jdrd| _ | d}|d}n|dk(rd }n|d k(rd }txs|dk7}d | t<|jd | t<|jd | t <d| vr| d}nCd| vr=| d}t|t"r*t%j&}|j)||}ni}t*j-dt/|t|t0r|j3}|D]t}t|t$j&r'|t4j6vr|j9|| |<n|j|| |< |j:|| j:|<vi}t?|dr|j@j3}i|tC|di}tDtFfD] }||vs||= t?|drtHtJtLtNtPtRfD]}||jTvs|tNk(r=|jTj:|t4jVt4jXfvr||=X|jT|| |<|jTj:|| j:|<| jd|jjd}|r || tZ<t\dftJdftLdftJdftLdftHdft^dft`dftbdftddff D]\}}|| vs | || |<| jd}|r!d| tH<|d | tJ<|d | tL<|dk7r)|| tf<ti|d k7rti|| tj<| || tl<|d k7r || tF<tn| vr || tn<n|jd vr| tnd k(r|jd!k(rl|jq}|j)}|_ts|jtD]/}ts|jvD]}|||fd"k(rd nd"|||f<1|}ntyjz|}|jd#vrs|j|jd$d%}g}ti|d&z}tsd&D]0} |||| z|| d zzD!cgc]}!|!d'z c}!z }|d gd'|z zz }2|| t<| t| t }#}"ti||"|d zd(zd)zz}$t| vr[|rG| jd*t}%|$d k(rd nt|%|$z|#}&|d k(rt|&d(zd)zd)z|#}&n|#}&|&d k(rd }&|&| t<|$d k(rd n |$| tz}'|#| tzd z | tz}(|'d+k\r!t4j| j:t<|'f|(d z z|$|#z|'|(d z zz fz| t<ttsd |'|(z|'| t<tj|d | t<|jd,k(r6td-td.ijD]\}})| j||)ttttg}*|r~d/| vrG| d/}+t|+tr |+d ks|+d0kDr d1} t| |d k7r d2} t| |+| t<t*j-d3t*j-d4t| jd },t?|d5r" |jd |j},i}-|*ttttttgz }*tf|d i}.tj| j|jD]\}}/|t4jvr|t4j6vrt4j|-|<n|| j:vr| j:||-|<nht|/tttt"fs"t|/tr8td6|/Dr&t5j|j}0|0r|0|-|<||.vs||*vst|/tr|/jd7d8d9z|.|<t|/trt|/|.|<|/|.|<"tF|.vr(ti|.tFd k(r|.tFd |.tF<t*j-d:t|.j|jd;vrd<}t/|.j}1|1j|||,||1|-f}2t%j|jd=|2| }3|3j|j|d>|jz |3jtjd d\}4}5|,s|j|5|4rn<|4d krjd?|4d@} t| |*D]}| |=| j|}6tj||tjdd>|jz|6||$d fgdA| vrt|dA| yy#t$r!} d|jd} t| | d} ~ wwxYw#t$r1|jjd}t|trd}Y wxYw#t<$rY wxYwcc}!w#tj$rYwxYw)BNzcannot write mode z as TIFFrhbig_tiffTrbr$r.r0r6r2r rtiffinforIzTiffinfo Keys: %sr/rrg descriptionrd x_resolution y_resolutionresolution_unitsoftware date_timeartist copyrightrcr%r<)r>r?r>r rhrJrir'r!r/r1 strip_sizerr)r r )rr r rr qualitydzInvalid quality settingz5quality setting only supported for 'jpeg' compressionzSaving using libtiff encoderz Items: %srMc3RK|]}t|tttf!ywrd)rrryror<s rarbz_save..sTJq3{*CDTs%'rErrzzConverted items: %s)rArCrrerOrNzencoder error z when writing image file_debug_multipage)q SAVE_INFOr!rr encoderinfo encoderconfigrrrrHrr WRITE_LIBTIFFrmrrrrsrrExifrrrrrrrrErFrrrr/rEXIFIFDrvrr~rIPTC_NAA_CHUNKPHOTOSHOP_CHUNKr)rrTrJrIMAGEDESCRIPTIONSOFTWARE DATE_TIMEARTIST COPYRIGHTrwr^ryrxrocopyrheightwidthrinvertr getpaletterr STRIP_SIZErrPSTRIPBYTECOUNTSrfrCOMPRESSION_INFO_REVrkrqREFERENCEBLACKWHITEr& setdefaultrrrTILEBYTECOUNTSrW JPEGQUALITYrrrMioUnsupportedOperation OSUBFILETYPETRANSFERFUNCTIONSUBIFD itertoolschain LIBTIFF_CORErryrrKr'rIrUrosort _getencoderrSrMAXBLOCKrr_saversetattr)7rrr rrirrbitsextrar]rrrrrbrOrHrIrJ legacy_ifd supplied_tagsr/iccrrc inverted_impxrrlutcolormapcolorsr{r=rrmr im_strip_sizerows_per_stripstrip_byte_countsstrips_per_image default_value blocklistrrtypesattsrrIrrencodererrcoderrs7 rarrs) "6?6H3e ..K$$M v .Cz" !-0   #  &* 3{e3G!"CggajC OwwqzC [ :& ; 6" dE "::?M  # - c"#r8         >Cbii.(RYY->->s-CMM&&L.&c*!yy~CH')yy'8'8'=CKK$! >( //-])C DC J =) |$ |$ ~& ~& +, : K  K   ) T ; "4(CH ) //% C  OFLFL t|!M t9>#&t9C  !L {"L!,*/ &' J 3'A#Ba#G 77c>'')K!!#B~{112AA";#4#45A(*1a4C1S1a4AA!$B ww+eeug.SQq -A #fqj6QU;K*LMQSM MH sV|, ,H -!H z?C ,qA Y1tAw;?q0 1F3 'OOL*EM"(A+Q3}7NPQ3RNf$!$~'9a&?1%Da!HN Q N*L#q[fs<7H.HC --1c,6GGE!'/}} O$-/3Ca3GH &*:Q*>??LC a"%557HIC ,// Q?C  ww' f !=#  %' / C NN3 .  / J ^DI  #!),Ggs+w{gm/ o%f$M o%&C  34 [&"56 2x   iik           !.tAw7$//#))+}7J7J7LM &JC (///(111!)E#JCKK'!$S!1E#JUC'?@ue,TeTT#??3/44D%)c $3i#7eS) % Wi @5 HDI{3 %e DI %DI/ &2 4 C\(:$;q$@!%l!3A!6D  *F4::<,@A 770 0G DJJL! k3$ >##BGGY=I 01#NN9+=+=>qrBMGT  Q;"7)+CDC#,  CC "   __UFRWW$4fwPQ>R S T [(&,)Y ""277)84cl!" ggkk-0 k3 'K T   |Nt**  sSjkl, l !l k#j??k6ll lll0/l0cDeZdZgdZhdZd d!dZd"dZd"dZd"dZd#dZ d$dZ d%d Z e jfd&d Zd"d Zd'd Zd"d Zd(dZd)dZd*dZd%dZd%dZed+dZ d, d-dZd.dZd.dZd.dZd/dZd.dZd.dZd"dZ d"dZ!d0dZ" d1 d2dZ#y)3AppendingTiffWriter)rr r r%r)r1r r r%r)r1r)r1r)r%r)r1>  r"r#cL|t|r%||_d|_ t||rdnd|_n#t tt||_d|_|jj|_ |jy#t $rt|d|_YLwxYw)NTzw+bzr+bF) rrclose_fpopenrrr r rr beginningsetup)rfnr?s rarzAppendingTiffWriter.__init__s 2;DI DM )b3%E:"U)R(DF!DM  )b% )sBB#"B#c&|jj|jtjd|_d|_|jjdx|_}d|v|_ |sd|_ yd|_ |tvr d}t||j|jtrdnd|jr*|jjdtj |j#|j%y) Nrr)+TFzInvalid TIFF file headerrr)rrrrUrXwhereToWriteNewIFDOffsetoffsetOfNewPagerIIMMrisFirstrg RuntimeError setEndianrer rWskipIFDsgoToEnd)riimmrs rarzAppendingTiffWriter.setups  DNNBKK048% 66;;q>) D4 DL  x ,Cs# # doob1ss; == FFKK2;; '  rkc|jry|jj|j|jj d}|sy||j k7r d}t ||jr*|jjdtj|j|jrdnd}||jz }|jJ|jj|j|j||jrdnd|jj||jy)Nr)z1IIMM of new page doesn't match IIMM of first pager1)rrrrrrrrrUrW_readr_writefixIFD)rrr ifd_offsets rafinalizezAppendingTiffWriter.finalizes <<   D(()vv{{1~  499 ECs# # == FFKK2;; 'ZZT]]: d*** ,,888  D112 JT]]:  J rkcD|j|jyrd)rrrs ranewFramezAppendingTiffWriter.newFrame5s  rkc|Srdr=rs ra __enter__zAppendingTiffWriter.__enter__:s rkc>|jr|jyyrd)rrY)rrs ra__exit__zAppendingTiffWriter.__exit__=s == JJL rkcP|jj|jz Srd)rrrrs rarzAppendingTiffWriter.tellAsvv{{}t3333rkc|tjk(r||jz }|jj |||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. )rUrXrrrr)rrwhences rarzAppendingTiffWriter.seekDs> R[[ d** *F  FF#yy{rkc>|jjdtj|jj }d|dzz }d|cxkrdkr'nn$|jj t ||jj |_y)NrrB)rrrUSEEK_ENDrrrr)rr` pad_bytess rarzAppendingTiffWriter.goToEndQsj  Ar{{#ffkkmrM y 2  FFLLy) *#vv{{}rkc||_|jd|_|jd|_|jd|jr dz|_ydz|_y)Nr?rkrr)endianlongFmtshortFmtr tagFormat)rrs rarzAppendingTiffWriter.setEndian[sS ++a( ;;-q)  KK=+dmmsMMrkc |j|jrdnd}|dk(r9|jj|jr dz |_ydz |_y|jj ||j|jrdnd}|jj ||jrdndzt j)Nr1r)rr%rr@)r rrrrrrUrW)rr num_tagss rarzAppendingTiffWriter.skipIFDsasAA>JQ04 A1--.1- FFKK #zzt}}!!|rd}n|rd}nd}|j||S)Nr%r)r)rI)rrisShortisLongr$s ra fixOffsetszAppendingTiffWriter.fixOffsetss, J JJz22rkN)F)rrr?rrrr)rr)rrrrr)rrrrrr)rrrr)rrrr)r$rrr)r$rrr)r0rr1rrrrL)rrr$rr4rrr)rrrr)rrr$rrr)rrr$rrr)FF)rrrQrrRrrr)$rrrrGrHrrrrrrrrrXrrrrrr%r r*r. staticmethodr2r5r8r:r=r rArDrYr rIrSr=rkrarrs J( D 44 4/1kk -N O"$ $$ BC B B&) B;> B  B'++>  '3R6:AF 3 3#' 39= 3  3rkrcXt|jjdg}t|ds|s t |||S|j } t |5}|g|zD]}|j|}t|dsd|_t|dd}t|D]@} |j| |jt ||||jB||_ ddd|j|y#1swYxYw#|j|wxYw)N append_imagesrrr=r )rrrrrrr_attach_default_encoderinforrrrrr) rrr rVcur_idxtfimsrnfrrs ra _save_allr\ s++OR@AM 2z "=RX&&ggiG  $ .tm+ .!==bA sO4(*C%c:q1 :"CHHSMHHJ#r8,KKM " #. . .  . . s% DBD 0D DDD)z.tifz.tiffz image/tiff)rirrr)rqrrrrr!tuple[IntegralLike, IntegralLike])rqrorrrrrrr])rrrr )rrrrrz$Callable[[_LoaderFunc], _LoaderFunc])rrrz2Callable[[Callable[..., Any]], Callable[..., Any]])rztuple[int, str, str]rr)rz Image.Imagerrr z str | bytesrr) __future__rrrloggingr1rUrrXcollections.abcrr fractionsrnumbersrrtypingr r r r rrrrr_binaryrr0rr3r_utilrrrrrr_typingrrr getLoggerrrrrrr r rrrrsrwrkrorprrryrrr~rrmrrrrr PREDICTORrrrrrrrxrv JPEGTABLESrqrrrrrrr)rIMAGEJ_META_DATA_BYTE_COUNTSIMAGEJ_META_DATArjr&rr|rrzrgrjrurrrrrorrrrrrr _IFDv2BaserrrrrrImageFileDirectoryr rrBytesIOrr\ register_openr register_saveregister_save_allregister_extensions register_mime)kr=s00rarvsCR#  4$ JJ!!) (==   8 $                                     %u|x  x  z {v = :  > = ?  6!" 6#$ 6%**:)?)?)ABA1B} 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 /} 0D!T2 1} 2D!T2 3} 4D!T2 5} 6D!T2 7} 8D!T2 9} :D!T2 ;} <D!T2 =} >D!T2 ?} @D!T2 A} BD!T2 C} DD!T2 E} FD!T2 G} HD!T2 I} JD!UB!1K} LD!UB!1M} ND!UB!1O} PD!UB!3Q} RD!UB!2S} TD!UBU} VD!UBW} XD!UBY} ZD!UB[} \D!UB]} ^D!UB_} `D!UBa} bD!UBc} dD!UBe} fD!VT"Lg} hD!VT"Li} jD!Y#^k} lD!Y#^m} nD!Y#%5o} pD!Y#%5q} rD!\2&(8s} tD!\2&(8u} vD!\4(/w} xD!\4(/y} zD!_f-/?{} |D!_f-/?}} ~D!'35F} @D!'35FA} BD!\4(*:C} DD!\4(*:E} FD!_f-/@G} HD!_f-/@I} JD!'35GK} LD!'35GM} ND!\4(*:O} PD!\4(*:Q} RD!_f-/@S} TD!_f-/@U} VD!'35GW} XD!'35GY} ZD!\6*,<[} \D!\6*,<]} ^D!\2&(:_} `D!\2&(:a} bD!%r*,@c} dD!%r*,@e} fD!%t,.Ag} hD!%t,.Ai} jD!%t,.Bk} lD!%t,.Bm} nD!%t,.Bo} pD!%t,.Bq} rD!T2 s} tD!T2 u} vD!T2 w} xD!T2 y} zD!T2 {} |D!T2 }} ~D!T2 } @D!T2 A} BD!T2 C} DD!T2 E} FD!T2 G} HD!T2 I} JD!T2 K} LD!T2 M} ND!VT"KO} PD!VT"KQ} RD!VT"LS} TD!VT"LU} VD!T2 W} XD!T2 Y} ZD!\2&(8[} \D!\2&(8]} ^D!_d+->_} `D!_d+->a} bD!'02Dc} dD!'02De} fD!%r*,@g} hD!%r*,@i} jD!T2 k} lD!T2 m} rD!Y#_s} tD!Y#_u} vD!Y#^w} xD!Y#^y}  ~AyAA .% '%25%&%   " -0 & &G'(G'T/=sBC  $S)JJP$JP$f(6$(7%JIC <<S !D !U4&>>#3Fq3IJ !VD6?OC4HIJOS$X1Xx+yHI''yHF #r1at $ #r1at $    4Q61 %   #r1at $   4Q61 % '2q!UD )  VRAud +  gr1a - '2q!UD )  E2q!Y -  VRA|Q /  VRA|Q /  VRA|T 2   gr1aD 1! " E2q!Y -# $ gr1a -%  ,q-h i3"**i3X 8M((-AM((%0 ,,i8-..0ABM((,7[DCs _