)EjXUddlmZddlZddlZddlZddlZddlZddlZddlZddl 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,ej-e.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^d_e^_DZ`ie3dd`dd`dafdbe4dd`dd`dafdbe3dd`d?d`dafdce4dd`d?d`dafdce3dd`dd`dafdde4dd`dd`dafdde3dd`d?d`dafdee4dd`d?d`dafdee3dd`ddfdafdge4dd`ddfdafdge3dd`d?dfdafdhe4dd`d?dfdafdhe3dd`ddfdafdie4dd`ddfdafdie3dd`d?dfdafdje4dd`d?dfdafdje3dd`ddkdafdlie4dd`ddkdafdle3dd`d?dkdafdme4dd`d?dkdafdme3dd`ddkdafdne4dd`ddkdafdne3dd`d?dkdafdoe4dd`d?dkdafdoe3dd`ddpdafdqe4dd`ddpdafdqe3dd`d?dpdafdre4dd`d?dpdafdre3dd`ddpdafdse4dd`ddpdafdse3ddfddpdafdse4ddfddpdafdse3dd`d?dpdafdte4dd`d?dpdafdtie3dd`ddudafdve3dd`ddwdafdxe3dd`ddwdafdxe4dd`ddwdafdye3dd`d?dwdafdze3ddfddwdafd{e4ddfddwdafd|e3dd}dd~dafde4dd}dd~dafde3dd`dd~dafde3ddfdd~dafde4ddfdd~dafde3dd}dd~dafde4dd}dd~dafde3dd`dddffde4dd`dddffde3d?d`dddafdie4d?d`dddafde3d?d`d?ddafde4d?d`d?ddafde3d?d`dddafde4d?d`dddafde3d?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`dddffde4d?d`dddffde3d?d`dddfde4d?d`dddfde3d?d`dddfde4d?d`dddfde3d?d`dddfde4d?d`dddfde3d?d`dddafde4d?d`dddafde3d?d`dddafde4d?d`dddafde3d?d`dddfde4d?d`dddfde3d?d`ddd`fde4d?d`ddd`fde3d?d`dddffdie4d?d`dddffde3dAd`dd`dafde4dAd`dd`dafde3dAd`d?d`dafde4dAd`d?d`dafde3dAd`ddfdafde4dAd`ddfdafde3dAd`d?dfdafde4dAd`d?dfdafde3dAd`ddkdafde4dAd`ddkdafde3dAd`d?dkdafde4dAd`d?dkdafde3dAd`ddpdafde4dAd`ddpdafde3dAd`dddfde4dAd`dddfdie3dAd`dddffde4dAd`dddffde3dAd`d?dpdafde4dAd`d?dpdafde3dEd`dddafde4dEd`dddafde3dEd`dddfde4dEd`dddfde3dEd`dddfde4dEd`dddfde3dEd`dddafde4dEd`dddafde3dGd`ddpdafdse4dGd`ddpdafdse3dGd`dddafde4dGd`dddafde3dKd`dddafde4dKd`dddafdiZaebdeaDZcgdZdddZeddÄZfddƄZgiZhdeid<iZjdeid<dd΄ZkGdτdeZle demengefZoddԄZpddքZqd dڄZre&r e esefZtne ZtGdۄdetZueheu_hejeu_je%j_D]M\ZvZwewxddݦZweyeudewehevdeyeudewejevN[h[j[v[wGddeuZzezZ{GddejZ|idde3ddd`dfdde3dddpdfdde3dddd?fdde3dAddpdfdde3dAddd?fdde3dd?d~dfdde3dddwdfdde3dddwdfdde3ddAd~dfdde3d?dddfdde3d?dddfdde3d?ddd?fdde3dEdddfdde3dGdddfdde3dKdddfdde4dddwdfZ}d dZ~GddejZd dZeje|je|eeeje|je~eje|jeeje|jddgeje|jddS( ) annotationsN)CallableMutableMapping)Fraction)NumberRational)IOAnycast)ExifTagsImage ImageFileImageOps ImagePaletteTiffTags)i16be)i32beo8) 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_sgilog24imlzmaiPzstdiQwebpci|]\}}|| Sr>).0kvs EC:\PYTHON\MyICR_Suite\python\Lib\site-packages\PIL/TiffImagePlugin.py rCsBBBA1BBBr r>)1z1;I)rFz1;IR)rFrF)rFz1;R)r&)LzL;2I)rGzL;2IR)rGzL;2)rGzL;2R)r*)rGzL;4I)rGzL;4IR)rGzL;4)rGzL;4R)r2)rGzL;I)rGzL;IR)rGrG)rGzL;R) )I;16zI;12))rIrI)I;16BrK)rIzI;16R)IzI;16S)rLzI;16BS)r() )FF;32F)rNzF;32BF)rLzI;32N)rLI;32S)rLzI;32BS)r2r2)LArQ)r2r2r2)RGBrR)rRzRGB;R)r2r2r2r2)RGBArSr)rRRGBX)r2r2r2r2r2rr)rRRGBXX)r2r2r2r2r2r2)rrr)rRRGBXXX)rSRGBa)r r)rSRGBaX)r rr)rSRGBaXX)r&r)rSRGBAX)r&rr)rSRGBAXX)i)rJrJrJ)rRzRGB;16L)rRzRGB;16B)rJrJrJrJ)rSzRGBA;16L)rSzRGBA;16B)rRzRGBX;16L)rRzRGBX;16B)rSzRGBa;16L)rSzRGBa;16B)PzP;1)r^zP;1R)r^zP;2)r^zP;2R)r^zP;4)r^zP;4R)r^r^)r^PX)PAr`)r^zP;R)CMYKra)raCMYKX)raCMYKXX)razCMYK;16L)razCMYK;16B)LABrdc#@K|]}t|dVdS)r*N)len)r?key_tps rB rhs,AAV#fQi..AAAAAArD)sMM*sII*sMM*sII*sMM+sII+prefixbytesreturnboolcP|ttSN) startswithtuplePREFIXESris rB_acceptrs"s   U8__ - --rDvalfloat | Fraction | IFDRationalmax_valint!tuple[IntegralLike, IntegralLike]ct|dk}t|rd|z n||}|r |dddn|S)Nr )abs IFDRationallimit_rational)rtrvinvn_ds rB_limit_rationalr&sT c((Q,C -a#gg# . . = =g F FC $3ttt99$rDr|min_valcJt|}|j|jf}td|D|krt |t |}t d|D}t||krt |d|dz |}|S)Nc34K|]}t|VdSrnfloatr?is rBrhz)_limit_signed_rational..4s( ! !588 ! ! ! ! ! !rDc34K|]}t|VdSrnrrs rBrhz)_limit_signed_rational..7s(,,1eAhh,,,,,,rDrr )r numerator denominatorminrr{rpmax)rtrvrfracr n_d_floats rB_limit_signed_rationalr.s C==D-1^T=M-MC ! !S ! ! !!!G++c3w<<00,,,,,,,I 9~~ilYq\97CC JrD"dict[int, tuple[int, _LoaderFunc]]_load_dispatchdict[int, Callable[..., Any]]_write_dispatchopstrr cdfd }|S) Nselfr|argstuple[float, ...]rkbool | float | Fractionc4t|j|Srn)getattr_val)rrrs rBdelegatez_delegate..delegateFs&wty"%%t,,rD)rr|rrrkrr>)rrs` rB _delegaterEs(------ OrDc eZdZdZ dZ d9d:d Zed;d ZeddZ d4#33 3$)X..... I ' ' 8 8{AM))rDrcDtt|jSrn)rrrrs rB__repr__zIFDRational.__repr__s5##$$$rDc4|jSrn)r__hash__rs rBrzIFDRational.__hash__sy!!###rDotherobjectrlc|j}t|tr|j}t|trt|}||kSrn)rrr|r)rrrts rB__eq__zIFDRational.__eq__sIi e[ ) ) JE eU # # **Ce|rD%list[float | Fraction | IntegralLike]c*|j|j|jgSrn)rrrrs rB __getstate__zIFDRational.__getstate__s 4?D,=>>rDstatec t|d|\}}}t|ttfsJ||_t rtt||_ n||_ t|tsJ||_ dSNr) r|rrrrrrr rrrwr)rrrrrs rB __setstate__zIFDRational.__setstate__sT1%%%).&j,$ 122222  )"<<rDrBr|r|Ns  7IIJ 6 6 6 6 6DX!!!X! * * * *%%%%$$$$???? ) ) ) ) i ""Gy$$Hi ""Gy$$Hi ""Gy$$H)M**K9^,,L9^,,LIo..Mi ""Gy$$Hi ""Gy$$Hi ""Gi ""Gi ""G +&&I Yx F Yx F Yx F Yx Fy$$Hy$$H +&&I +&&I +&&Iwx##')I&&''rDImageFileDirectory_v2idxsize$Callable[[_LoaderFunc], _LoaderFunc]cdfd }|S)Nfunc _LoaderFuncrkcddlm}|jdr&|jdddd|<|ft <|S)Nr rload_r,_ )rrrroreplacer)rrrrs rB decoratorz#_register_loader..decoratorsd###### = # #G , , =qrr*223<)rrrs`` rB_register_loaderrs/ rD2Callable[[Callable[..., Any]], Callable[..., Any]]cdfd }|S)NrCallable[..., Any]rkc|t<|Srn)r)rrs rBrz#_register_writer..decorators# rD)rrrkrr>)rrs` rB_register_writerrs) rD idx_fmt_nametuple[int, str, str]rcddlm}|\}}|||<tjd ddfd }|ft|<fdt |<dS)Nr r=Trrdatarj legacy_apirlrktuple[Any, ...]cX|t|z|Srn)_unpackrf)rrrfmtrs rB basic_handlerz&_register_basic..basic_handlers/||s4yyD07#77>>>rDcJdfd|DS)NrDc3DK|]}|VdSrn)_pack)r?rrrs rBrhz4_register_basic....s1<z!_register_basic..s0 <<<<d?fg e&d@d@dodpdBZ'e(d@dqdDZ)e&dEd@dodrdFZ*e(dEdsdHZ+e&dIdJ dodtdLZ,e(dIdudNZ-e&dOd@dodpdPZ.e(dOdvdQZ/e&dRdJ dodtdSZ0e(dRdudTZ1dwdXZ2dxdYZ3dydZZ4dzd{d]Z5d|d^Z6dS)}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``. rrrrII*Nifhrjri bytes | Nonegroup int | Nonerkrc.t|s"dt|d}t|||n |dd|_|jtkrd|_n)|jt krd|_nd}t||ddk|_||_i|_ | |jr$| d |d dd n#| d |d dd |_ d|_ dS)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&>o4<rDc|jSrn)_offsetrs rBr zImageFileDirectory_v2.pr(rDrlc|jSrn)r%rs rBrz ImageFileDirectory_v2.legacy_apirs rDrrc$d}t|)Nz"Not allowing setting of legacy api) Exception)rrr&s rBrz ImageFileDirectory_v2.legacy_apivs2nnrDcZi|_i|_i|_i|_d|_d|_dSrn)_tags_v1_tags_v2_tagdatar"_nextr*rs rBr#zImageFileDirectory_v2.reset{s0(* (* *,   #' rDrc:tt|Srn)rdictrs rB__str__zImageFileDirectory_v2.__str__s4::rDdict[str, Any]cDfdDS)z :returns: dict of name|key: value Returns the complete tag dictionary, with named tags where possible. cVi|]%\}}tj|jj|&Sr>)rlookuprr)r?coderrs rBrCz/ImageFileDirectory_v2.named..s@   e OD$* - - 2E   rD)itemsrs`rBnamedzImageFileDirectory_v2.nameds6     #zz||    rDrwcntt|jt|jzSrn)rfsetr1r0rs rB__len__zImageFileDirectory_v2.__len__)3t}%%DM(:(::;;;rDtagr c||jvr?|j|}|j|}|j|\}}||||j||<|j|}|jrt |t tfs|f}|Srn)r0r1r"rrrrprj)rrArtyprhandlerrts rB __getitem__z!ImageFileDirectory_v2.__getitem__s dm # #=%D,s#C /4MD'dDO<#B#B &C rDrc&||jvp||jvSrn)r0r1rrAs rB __contains__z"ImageFileDirectory_v2.__contains__dm#;sdm';;rDc>||||jdSrn)_setitemr)rrArs rB __setitem__z!ImageFileDirectory_v2.__setitem__s  c5$/22222rDrc > tttf}tj||j t ||r|gn|}||jvr jr j|j|<ntj |j|<td|DrN|D]5}t |tsJ|dkrtj |j|<n6tj |j|<nNtd|Drd}d}d} |D]I}t |tsJ|rd|cxkrdksnd}|rd|cxkrdksnd}| r|dkrd} J|rtj|j|<n|rtj|j|<n| rtj|j|<ntj|j|<ntd |Drtj|j|<n[td |Drtj|j|<n-td |Drtj|j|<|j|tj kr d |D}n'|j|tj kr d |D}|j|tjkot |t,} | st/ fd|D}|r|jn|j} | s jdks7|j|tjks jt7|dkrz|sx|r(|j|tj tj fvr|f} |\| |<dS#t8$r7t;jd|dt7|d|d| |<YdSwxYw|| |<dS)Nc3@K|]}t|tVdSrn)rr|r?rAs rBrhz1ImageFileDirectory_v2._setitem..s,BBaz![11BBBBBBrDrc3@K|]}t|tVdSrn)rrwrOs rBrhz1ImageFileDirectory_v2._setitem..,<<As++<<<<<.,>>!Au-->>>>>>rDc3@K|]}t|tVdSrn)rrrOs rBrhz1ImageFileDirectory_v2._setitem..rQrDc3@K|]}t|tVdSrn)rrjrOs rBrhz1ImageFileDirectory_v2._setitem..rSrDchg|]/}t|tr|ddn|0S)asciir)rrencoderOs rB z2ImageFileDirectory_v2._setitem..sJ1;1c0B0BI),,,rDcZg|](}t|trt|n|)Sr>)rrwrrOs rBrYz2ImageFileDirectory_v2._setitem..s1LLL*Q"4"4;eAhhh!LLLrDc3pK|]0}t|tr|n|V1dSrn)rrcvt_enum)r?rinfos rBrhz1ImageFileDirectory_v2._setitem..sW)35#(>(>I e$$$ErDr zMetadata Warning, tag z had too many entries: z , expected 1)rrjrrr9rrr"type UNDEFINEDallr|SIGNED_RATIONALRATIONALrwSHORT SIGNED_SHORTLONG SIGNED_LONGDOUBLEASCIIBYTEr4rpr/r0lengthrf ValueErrorwarningswarn) rrArr basetypesr rAshort signed_shortlongis_ifddestr]s @rBrKzImageFileDirectory_v2._setitemsqUC( sDJ//&ui88C%e dl " "y% 6$(I S!!$,$6 S!BB6BBBBB!6#>>)![99999q55080HDL-!E!-5,= S)<>v>>>>>6(0DL%%<>v>>>>>6(0 DL% <  2 2 2FF\# ("3 3 3LLVLLLFc"hm3P 648P8P #F !+=t}}   [A  |C HM11 #F q(8(8(8 #dl3/!(4! &% c & & & 1S116{{111#1IS  &DIIIs M=NNc|j|d|j|d|j|ddSrn)r0popr/r1rGs rB __delitem__z!ImageFileDirectory_v2.__delitem__sP #t$$$ #t$$$ #t$$$$$rD Iterator[int]cntt|jt|jzSrn)iterr>r1r0rs rB__iter__zImageFileDirectory_v2.__iter__)C &&T]););;<<rrrs rB load_bytezImageFileDirectory_v2.load_byte" rDbytes | int | IFDRationalct|trt|}t|trt|f}|Srn)rr|rwrjrrs rB write_bytez ImageFileDirectory_v2.write_byte&sC dK ( ( t99D dC  "$>>D rDr&cl|dr |dd}|ddS)Nrzzlatin-1r)endswithdecoders rB load_stringz!ImageFileDirectory_v2.load_string.s7 ==   9D{{9i000rDstr | bytes | intct|trt|}t|ts|dd}|dzS)NrWrr)rrwrrjrXrrs rB write_stringz"ImageFileDirectory_v2.write_string4sP eS ! ! JJE%'' 5LL)44Eu}rDr,r2)tuple[tuple[int, int] | IFDRational, ...]c |t|dzd|}d fd tfd t|ddd |d dd DS) Nr*rGarwrrktuple[int, int] | IFDRationalc0r||fnt||Srnr|rrrs rBcombinez4ImageFileDirectory_v2.load_rational..combineC '>Aq66[A->-> >rDc36K|]\}}||VdSrnr>r?numdenomrs rBrhz6ImageFileDirectory_v2.load_rational..F3VVZS%WWS%((VVVVVVrDr&r rrwrrwrkrrrfrpziprrrvalsrs ` @rB load_rationalz#ImageFileDirectory_v2.load_rational=||s4yyA~000$77 ? ? ? ? ? ?VVVV3tCCaCy$qtRSt*;U;UVVVVVVrDr|cFdfd|DS)NrDc3PK|] }jdgt|dRV!dS)2LlN)rrr?rrs rBrhz7ImageFileDirectory_v2.write_rational..JsR  DHJDJt ?odI>> ? ? ?      rDrrr s` rBwrite_rationalz$ImageFileDirectory_v2.write_rationalHs?xx    LR      rDr0c|Srnr>rs rBload_undefinedz$ImageFileDirectory_v2.load_undefinedNrrDct|trt|}t|tr#t|dd}|S)NrWr)rr|rwrrXrs rBwrite_undefinedz%ImageFileDirectory_v2.write_undefinedRsQ e[ ) ) JJE eS ! ! :JJ%%gy99E rD c |t|dzd|}d fd tfd t|ddd |d dd DS) Nr*rrrwrrkrc0r||fnt||Srnrrs rBrz;ImageFileDirectory_v2.load_signed_rational..combine`rrDc36K|]\}}||VdSrnr>rs rBrhz=ImageFileDirectory_v2.load_signed_rational..crrDr&r rrrs ` @rBload_signed_rationalz*ImageFileDirectory_v2.load_signed_rationalZrrDcFdfd|DS)NrDc 3RK|]!}jdgt|ddRV"dS)2liiN)rrrs rBrhz>ImageFileDirectory_v2.write_signed_rational..gsX   DJt P4T9hOO P P P      rDrrs` rBwrite_signed_rationalz+ImageFileDirectory_v2.write_signed_rationales?xx          rDfp IO[bytes]rc||}t||kr%d|dt|d}t||S)Nz&Corrupt EXIF data. Expecting to read  bytes but only got z. )readrfOSError)rrrretr&s rB _ensure_readz"ImageFileDirectory_v2._ensure_readlsjggdmm s88t  L%)LL?B3xxLLL #,,  rDc |||_ |jr*|d||dn)|d||dd}t |D]J}|jr*|d||dn)|d||d \}}}}tj||j j }tj |d } d |d |d | d |d } |j |\} } n,#t$rtd| |YwxYw|| z} | |jrdndkr|}||jrdnd|\}| d|d|z } ||t%j|| }||n |d| }t)|| krFt+jd| dt)|d|t| |st| ||j|<||j|<| dz } | | dkrd| dnt3|z } t| L|jr*|d||dn)|d||d\|_dS#t6$r,} t+jt9| Yd} ~ dSd} ~ wwxYw)Nrr2rr&rHHQ8sHHL4srHunknownztag:  ( ) - type: )z%s - unsupported type %sr*rGz Tag Location: z - Data Location: z/Possibly corrupt EXIF data. Expecting to read rz. Skipping tag z - value: rM)r#tellr*r!rrrangerr9rrrgetrKeyErrorloggerdebugseekr _safe_readrfrlrmr1r"rr$rr)rr tag_countrrArCcountrtagnametypnamer& unit_sizerDrhereoffsets rBloadzImageFileDirectory_v2.loadvs wwyy = =A S$"3"3B":":;;;\\#t'8'8Q'?'?@@ I 9%%. ". "}JDLL$*;*;B*C*CDDDgt/@/@R/H/HII&S% #/#tz::?)C33IgIIIIII3III)-)r>)r?rtrs rBrYz1ImageFileDirectory_v2.tobytes..sWWW3#,WWWrDrz%s %s %s %s %srr)"rr!rfr0sortedr; STRIPOFFSETSr"rrrrrerr4rrtobytesrprr9rrrrrrirhr_appendljustrrr)rrresultentriesrfmt_size stripoffsetsrArrCrrrr ifd_tag ifd_valuerrrr&rrrDs ` rBrzImageFileDirectory_v2.tobytess4=9CCc3t};M;MNN<>]+cc ,111 KK#dm,,dm0KL Lx W  !!4!4!6!677" 3" 3JCl"""7|| ,s#C LL6S$u++ N N NHM)Ej.E.EF @+DMMOO3GGGs+*0,,..--&GY#,CLL{{6**",UE":":H0t+C0????oc4:66;G%Dee59S)+D+DGP7PPcPPWPPPPPC CIIOO0c$ii0000V TC LL    $8JKKKD F 4yyH$$S%He1L1LcRSSSSS%C1H1H$OPPP3t99q=Q.22  #+2<+@ (CeUD N $ 3C 8 gWWWW''$do2V2VWWW0t+C0???? 3 S%(@(@(Cf(LMM$'eUD$@GL !-4   (CeUD LL)3UDKKd T T T djj=5gsC FF $**S!$$$-4  (CeUD dNF4yy1} % rDc |dkr'|||}||}|||t |zSr)rwriterrrf)rrrrs rBsavezImageFileDirectory_v2.savesn 7799>> HHT]]__ % % %f%% F ##rD)rNN)rrjrirrrrkr)rkrl)rrlrkrrkrr)rkr6rrArwrkr rArrkrlrArwrr rkr)rArwrr rrlrkr)rArwrkrrkrw)rrrrjrkr)rrr r rkrjr )rrjrrlrkrj)rrrkrj)rrjrrlrkr)rrrkrj)rrjrrlrkr)r r|rkrj)rrrkrj)rrrrwrkrj)rrrkr)rkrjrT)rrwrkrj)rrrkrw)7rrrrr__annotations__rrrrirrsetterr#r5r<r?rErHrLrKrvrzrrlistmaprrrcre SIGNED_BYTErdrfFLOATrgIFDLONG8rrrrrrrrrrrrrrrrrr>rDrBrrs::x:<srDc|jSrn)r1rs rBr zImageFileDirectory_v1.=sDMrDzdict[int, int]r"originalrcp||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` rr)rir1r"r$)clsrrs rBfrom_v2zImageFileDirectory_v1.from_v2Cs:c)))( & = rDct|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` rr)rrir4r1r"r0)rrs rBto_v2zImageFileDirectory_v1.to_v2UsN$4;777DM** 4<(( DM**  rDrArrlc&||jvp||jvSrn)r/r1rGs rBrHz"ImageFileDirectory_v1.__contains__frIrDrwcntt|jt|jzSrn)rfr>r1r/rs rBr?zImageFileDirectory_v1.__len__ir@rDrwcntt|jt|jzSrn)ryr>r1r/rs rBrzzImageFileDirectory_v1.__iter__lr{rDrc>dD]}||||dSN)FT)rK)rrArrs rBrLz!ImageFileDirectory_v1.__setitem__os4' 2 2J MM#uj 1 1 1 1 2 2rDc ||jvrQ|j|}|j|}|j|\}}dD]$}|||||||%|j|}t |t tfs|f}|Sr)r/r1r"rrKrrprj)rrArrCrrDlegacyrts rBrEz!ImageFileDirectory_v1.__getitem__ss dm # #=%D,s#C /4MD'' H H c774v#>#>GGGGmC #u~.. &C rD)rr rr rkr)rrrkr)rkrrrrrr)rrrrrrtagstagdatar classmethodrrrHr?rzrLrE __classcell__r s@rBrr%s$       8.. / /Dh1122G![""<<<<<<<<====2222        rDrceZdZdZdZdZ ddfd Zdd ZeddZ ddZ ddZ ddZ d dZ d!fd ZddZddZd!dZddZxZS)" TiffImageFileTIFFz Adobe TIFFFNrStrOrBytesPath | IO[bytes]filenamestr | bytes | NonerkrcX| | t||dSrn)r r)rrr$r s rBrzTiffImageFile.__init__s7 *5 '" X&&&&&rDc&|jJ|jd}|ddkr||jdz }t||_|jjx|_|_d|_|j|_g|_ d|_ t dt d|jt dt||d dS) z#Open the first image in a TIFF fileNr2r&rrzz*** TiffImageFile._open ***z - __first: %sz - ifh: %sr)rrrtag_v2r$_TiffImageFile__first_TiffImageFile__next_TiffImageFile__frame_fp _frame_pos _n_framesrrr_seekrs rB_openzTiffImageFile._opensw"""gll1oo q6R<< 47<<?? "C+C00 &*[%55 t{ 7%'%) 2333 _dl333 [$s)),,, 1 rDrwcD|j}||}|t|j|j1||dz|j1|||jJ|jS)Nr )r.rr/rfr-r)rcurrent_n_framescurrents rBn_frameszTiffImageFile.n_framess>  #iikkG JJs4?++ , , ,.( 499;;?+++.( IIg   ~)))~rDframec||sdS|||j:|jj|jks|jj|jks|jr d|_dSdSdS)z%Select a given frame as current imageN) _seek_checkr/_imimr _tile_sizemodereadonly)rr5s rBrzTiffImageFile.seeks~&&  F 5 8  GLDO + +w|ty((})DHHH ((rDct|jtr |jj|j|_t |j|kr|jsd}t|t d||j |j|j |jdkrd}t||j|j|j|jt d|j |j|j|jj|jvrd|_n|jj|_|jdkr |dz|_t |jdkr|jdk|_|xj dz c_ t |j|k|j|j||j|jt*|jvrM|jt*}t|t,rt |dkr|d}||jd<nd|jvr|jd=|t2|jx|_|_||_ |dS) Nzno more images in TIFF filez9Seeking to frame %s, on frame %s, __next %s, location: %slzUnable to seek to framezLoading tags, location: %srr xmp)rr,rexrrfr-r*EOFErrorrrr+rrkrrr(rr$r. is_animatedXMPrpr] _reload_exifrrrAr_setup)rr5r&r>s rBr/zTiffImageFile._seeks dh . . (+ ($/""e++; $3smm# LLK       {e##/ oo% GLL % % % O " "4; / / / LL5tw||~~ F F F K  TW % % %{4?22  "k. {a!&4?##q((#';!#3 LLA LL9$/""e++:  T_U+,,, !!! $+  +c"C#u%% #c((a--!f"DIe   di   %  3;;DKHHH48  rDc|jS)zReturn the current frame number)r+rs rBrzTiffImageFile.tells |rDdict[int, dict[str, bytes]]cbi}|jtjj}|r|drt |dkrt|dd}tj |ddzdz dz} t|d|zd|z}n#tj $rYnnwxYw|d|zd|z|z}d|i||<|tj d|z|zdz dzd }|drt |dk|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. s8BIMrHr*r.r r&rrN) r(rr BaseImageResourcesrorfi16mathceili32r error)rblocksrtidnrrs rBget_photoshop_blocksz"TiffImageFile.get_photoshop_blockssHkoohm:;;  @..)) @c#hh"nnQqS]]Is1vzQ.//!3s1q526>233DD|E26BFTM12$d^r $)R!Vd]a$7881<>>?..)) @c#hh"nn sB00CCImage.core.PixelAccess | Nonec|jr|jr|StSrn)tileuse_load_libtiff _load_libtiffr r)rr s rBrzTiffImageFile.loads; 9 (. (%%'' 'ww||~~rDc|jHtj|jtj|j|j|_tj |dSrn) r8r_decompression_bomb_checkr:corenewr;r9r load_preparers rBr\zTiffImageFile.load_preparesU 8   +DO < < <jnnTY@@DG((.....rDc*|jsDd|_|}tjD]}||vr||t j|dtj j |j vr|j tj j =dSdS)NT)in_place) rA!_close_exclusive_fp_after_loadinggetexifrTAGS_V2_GROUPSget_ifdrexif_transposer rH Orientationr()rexifkeys rBload_endzTiffImageFile.load_end#s "59D 2<<>>D. " "d?? S!!!!t4444 = $ 3 3 HM5666 4 3rDctj||t|jdksd}t ||jdd}|jdd}|jJ t|jdo|j}t|jdr|j n#t $rd}YnwxYw|r:t|tsJt|}||d <t|}tj |jd ||j} ||j|n$#t$$r}d }t ||d}~wwxYw|jo|j }t|jd rJt*d ||j\} } n|rt*d|s|jdt5j|dt4j} |d\} } t5j|| t4jnct*d|jd||j\} } g|_d|_| |r |j!d|_| dkrd| }t |tj|S)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\rfrUrrrrirjrrpr _getdecoderr; decoderconfigsetimager9rk _exclusive_fprArrrrlroslseekSEEK_CURSEEK_SETrr<rgclose) rr&extentsrr args_listdecodere close_self_fprQerrposs rBrWzTiffImageFile._load_libtiff4s3   49~~""(C#,, )A,q/y|A w""" (++@0@0@Btw((     BBB   $dE** * **T IIaL##D#DIy$@RSS &   TWg . . . . & & &*C#,,A % &*C43C/C 47J ' '! 4 LLP Q Q Q^^DG$4$4$6$677FAss  4 LLN O O O   Q(2q"+..C^^G,,FAs HRbk * * * * LLF G G G GLLOOO^^DGLLNN33FAs      GMMOOODG 77(3((C#,, {%%%s+ AC** C98C9E66 FFFc d|jvrd}t|t|jtd|_|jt d|_|jtd}|jdkrd}|jtd}t dt d|jt d |t d |jt d |t d |jt |jt}|jt}n$#t$r}d }t!||d}~wwxYwt#|t$rt#|t$sd}t'|||f|_|jt*jj}|dvr ||f|_n ||f|_t d|j|jt4d}t7|dkr)t9|t;|kr |df}|jt<d} |jt>d} |jt@|jdkr|dvrdnd} |dvrd} n |dkrd} nd} |jdkrA| r?t9| dkr,| dt7|  } | t7| z} d} | t7| z } t7| } | tBkr,t"d| d}tG|| | kr | d| } n| | kr | dkr| | z} t7| | krd}tG||jj$|||| | f}t d| tJ|\|_&}n>#t$r1}t dd}tG||d}~wwxYwt d |t d!|j'|j|j(d"<|jtRd}|jtTd}|rt|rr|jtV}|dkr ||f|j(d#<n@|dkr|d$z|d$zf|j(d#<n'|||f|j(d#<||f|j(d%<n ||f|j(d%<dx}x}}g|_,tZp |jd&k|_.|j.r|dkrH|dddz|ddz}t d|tJ|\|_&}|dkr|jd'kr|jdkrd(}n+|d)krd*}n"|/d+r |dd,d-z}||jd.|jj0f}|j,1tej3d/dd||fd|nth|jvstj|jvrth|jvr5|jth}|jtl|}|}n|jtj}|jtn}|jtp}t#|t$rt#|t$sd0}t'||}||kr||kr|jdkr |d,d}|D]}||z|kr|ts| zd1z }nd}|}|jdkr ||}|| z}|t%|df}|j,1tej3|j||t;||z|t;||z|f||||z }||krd||z}}||krd}|dz }n+t d2d}tG|tt|jvr|jtt|j(d3<|j'd4vrKd5|jtvD}tyj=d6d7>||_?dSdS)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.r0r2z - size: %srEr>)r&r.r()r&r.r2r,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 compressiondpigRQ@ resolutionr%r1rRrII;16N)z;16Bz;16LrzNFrkzInvalid tile dimensionsr2z- unsupported data organization icc_profiler^r`c2g|]}t|dzSr"r)r?rs rBrYz(TiffImageFile._setup..s"CCCr!s(||CCCrDRGB;LrD)@r(rCOMPRESSION_INFOr COMPRESSION _compressionPLANAR_CONFIGURATION_planar_configurationPHOTOMETRIC_INTERPRETATION FILLORDERrrYCBCRSUBSAMPLING IMAGEWIDTH IMAGELENGTHr TypeErrorrrwrkr:r rHrd_sizer SAMPLEFORMATrfrr BITSPERSAMPLE EXTRASAMPLESSAMPLESPERPIXELMAX_SAMPLESPERPIXELrNrri OPEN_INFO_moder;r] X_RESOLUTION Y_RESOLUTIONRESOLUTION_UNITrU READ_LIBTIFFrVrrrr_Tiler TILEOFFSETS ROWSPERSTRIP TILEWIDTH TILELENGTHsum ICCPROFILECOLORMAPrr%rpalette) rr&photo fillorderxsizeysizery orientation sample_format bps_tuple extra_tuplesamples_per_pixel bps_countbps_actual_countrfrawmodexresyresresunitxylayerroffsetsrw tilewidthrstride tile_rawmoderrs rBrDzTiffImageFile._setupsq  T[ ?C#,, -T[__[!-L-LM%)[__5I1%M%M"  :A>>   + +EKOOIq11  &''' ($*;<<< 7??? 143MNNN '333 . @P0Q0QRRR (K +EK ,EE ( ( (&CC..a ' (%%% "Zs-C-C "&CS// !,koohm&?@@ , & &DJJDJ \49---  d;; }   ! !c-&8&8C > 2 2 2 LL@BS   8Cc"" " / / /""4#4"45II !1 1 16F!6K6K"$55I y>>. . .-Cc"" " K          %s+++ *"+C. DJ * * * LL/ 0 0 0&Cc"" ) *  %w/// %ty111#'#4 - {|Q//{|Q//  5D 5kooo66G!||$($< %  A$(4K#= %  $($< % +/* ,''*.* ,'A , J0AU0J  ^ #A~~"1"gns122w. -s333'0n# G %//.!33 F""!!!"233 -!#2#,,$+UDK4FGA I  Y_YAue8LaQRSS T T T T T[ ( (K4;,F,Ft{**+l3KOOL%88+k2 KOOI66 KOOJ//!)S11*As9K9K*3C$S//)Ezza5jjT-G1-L-L!"##,! # #q55==Y/!3FFF& -22#*5>Li'F$c&kk15   O)As1q5%00#a!eU2C2CD Q::a!eqAEzz 7 #: LL: ; ; ;-Cc"" "  $ $'+{:'>DIm $ 9 # #CCT[-BCCCG'+GSXXg5F5FGGDLLL $ #s0$F++ G 5GG *R R; ,R66R;rn)rr#r$r%rkrrr)r5rwrkr)rkrF)rkrS)rrrformatformat_descriptionr_rr0rr4rr/rrRrr\rgrWrDrrs@rBr!r!s` F%(-% (, ' ' ' ' ' ' '2   X     ////b0 //// 7777"_&_&_&_&BuHuHuHuHuHuHuHuHrDr!rFrGrQr^r`rLrPrII;16LrNrOrRrUrSraYCbCrrdrKr9 Image.Imagerrr$ str | bytesc  t|j\}}}}}}n-#t$r } d|jd} t| | d} ~ wwxYw|j} |j} t |} | drd| _ | d}nA#t$r4|j d}t|trd}YnwxYw|d}n|dkrd }n|d krd }tp|dk}d | t<|jd | t<|jd | t <d| vr | d}nNd| vrH| d}t|t"r*t%j}|||}ni}t*dt/|t|t0r|}|D]}t|t$jr'|t4jvr||| |<n||| |< |j|| j|<r#t<$rY~wxYwi}t?|dr|j }i|tC|di}|tdkrGtD|vr>tF|vr-|tFxxtI|tDzcc<|tD=tJtLfD] }||vr||= t?|drtNtPtRtTtVtXfD]n}||j-vrc|tTkr.|j-j|t4j.t4j/fvr||=D|j-|| |<|j-j|| j|<o| d|j d}|r || t`<tbdftPdftRdftPdftRdftNdftddftfdfthdftjdff D]\}}|| vr | || |<| d}|r*d| tN<|d | tP<|d | tR<|dkr4|| tl<tI|d krtI|| tF<| || tD<|d kr || tL<tn| vr || tn<n|jd vr| tnd kr|jd!krr|8}|}|Gts|j:D]0}ts|j;D]}|||fd"krd nd"|||f<1|}ntyj=|}|jd#vrw|j>?d$d%}g}tI|d&z}tsd&D].} |d'||| z|| d zzDz }|d gd(|z zz }/|| t<| t| t }"}!tI||!|d zd)zd*zz}#t| vrl|rV| d+t}$|#d krd nt|$|#z|"}%|d krt|%d)zd*zd*z|"}%n|"}%|%d krd }%|%| t<|#d krd n|#| tz}&|"| tzd z | tz}'|&d,krt4jD| jt<|&f|'d z z|#|"z|&|'d z zz fz| t<ttsd |&|'z|&| t<t|d | t<|jd-kr>td.td/iLD]\}}(| M||(ttttg})|r d0| vr[| d0}*t|*tr |*d ks|*d1krd2} t| |d krd3} t| |*| t<t*d4t*d5t| Ld }+t?|d6r@ |Ud |V}+n#tjX$rYnwxYwi},|)ttttttgz })tl|d i}-tj]| L|LD]*\}}.|t4j^vr|t4jvrt4j_|,|<n|| jvr| j||,|<nvt|.tttt"fs.t|.tr9td7|.Dr t5jc|jd}/|/r|/|,|<||-vrd||)vr`t|.tr|.ed8d9d:z|-|<t|.trt|.|-|<%|.|-|<,tL|-vr9tI|-tLd kr|-tLd |-tL<t*d;t|-L|jd|1| }2|2i|j>d?|jz |2etjkd d\}3}4|+s|l|4|3rnE|3d krd@|3dA} t| nT|)D]}| |=| m|}5tjn||tjodd?|jz|5||#d fgdB| vrt|dB| dSdS)CNzcannot write mode z as TIFFrrbig_tiffTr~r%r/r1r7r3r rtiffinforezTiffinfo Keys: %srAr(r&r descriptionr x_resolution y_resolutionresolution_unitsoftware date_timeartist copyrightrrE)rFrGrFr!rrRrr(cg|]}|dzSrr>rOs rBrYz_save..HsMMMQSMMMrDr"r0r2 strip_sizer r)r r )rr!r!rr!qualitydzInvalid quality settingz5quality setting only supported for 'jpeg' compressionzSaving using libtiff encoderz Items: %sric3ZK|]&}t|tttfV'dSrn)rrwrr|rOs rBrhz_save..s3TTJq3{*CDDTTTTTTrDrWrrzConverted items: %s)rIrKrrrkrVzencoder error z when writing image file_debug_multipage)q SAVE_INFOr;rr encoderinfo encoderconfigrrr!r]rrw WRITE_LIBTIFFrrrrrjrExifrrrrrrrrarbr"r-rrArrrrfEXIFIFDrrrrIPTC_NAA_CHUNKPHOTOSHOP_CHUNKrBr(rir_rIMAGEDESCRIPTIONSOFTWARE DATE_TIMEARTIST COPYRIGHTrrcopyrheightwidthrinvertr9 getpaletterr STRIP_SIZErreSTRIPBYTECOUNTSrprCOMPRESSION_INFO_REVrrREFERENCEBLACKWHITEr; setdefaultrrrTILEBYTECOUNTSrk JPEGQUALITYrrriioUnsupportedOperation OSUBFILETYPETRANSFERFUNCTIONSUBIFD itertoolschain LIBTIFF_CORErrrr`r9r^rXr|sort _getencoderrorMAXBLOCKrr_saversetattr)6r9rr$rrirrbitsextraryr&rrrr~rkr]rerf legacy_ifd supplied_tagsrAiccrr inverted_impxrrlutcolormapcolorsrrrr im_strip_sizerows_per_stripstrip_byte_countsstrips_per_image default_value blocklistrr,typesattsrr^rrencodererrcoderrs6 rBrrsf "6?6H3ee """427444cll!".K$M v . . .Cz"" !-0 gkk-00 k3 ' ' K    # #  & &* 3{e3G!"CgajC OwqzC [  :& ;  6" dE " " :<%>?M-..!33 8U8U m + + / * * *c- 2M.N.N N * * * , '  ## -  c"r8>         > >Cbi.((RY->s-CM&L..&c**!y~CH')y'8'=CK$ //-])C)C D DC J =) |$ |$ ~& ~& +, : K  K   ) ) T ;  "4(CH //% C # OFLFL t||!M t99>>#&t99C  !L {{"L!,,*/ &'' J  3'A#Ba#G#G 7c>>''))K!!##B~{122AAA";#455AA(*1a4C11S1a4A $$B w+eug..SQq - -A MM#fqj6QU;K.K*LMMM MH sV|, ,HH H z?C ,qA YY1tAw;?q0 1F3  'OOL*EEM"(A++QQ3}7NPQ3R3RNf$$!$~'9a&?1%Da!H!HN Q  N*L#q[[fs<7H.HC --1c,6GGE!!'/} O$-/3Ca3GH &*:Q*>??LC a"%557HIIC ,// Q??C  w' f !=#  %'' / / C NN3 . . . .J ^DIl  # #!),Ggs++ &w{{gmm/ oo%f$$M oo%&C  3444 [&"5"5666 2x    iikk*              !.tAw7$/#))++}7J7J7L7LMM & &JC (///(111!)E#JJCK''!$S!1E#JJUC'?@@*ue,,*TTeTTTTT*$?3//4D*%)c $3i#7#7eS))& % Wi @ @5 HDII{33& %e DII %DI 4  C\(:$;$;q$@$@!%l!3A!6D  *F4::<<,@,@AAA 70 0 0G DJJLL!! k3$ >#BGY=II 0111 #NN9+=>>qrrBMGT     Q;;D7DDDC#,,     CC"   _UFRW$4fwPQ>R S S T   [((&,,,,,)(sJ AAAB ;C  C /I II)c99d  d c&eZdZgdZhdZd:d;d ZddZ d?dZ e j fd@dZd  r#r$Ffnr#r[rlrkrc|t|rN||_d|_ t||rdnd|_nQ#t $rt|d|_Yn0wxYwt tt||_d|_|j |_ | dS)NTzw+bzr+bF) rrclose_fpopenrrr r rjr beginningsetup)rrr[s rBrzAppendingTiffWriter.__init__s  2;; "DI DM )b3"9%%E:: ) ) )b% )"U)R((DF!DM s;AAc,|j|jtjd|_d|_|jdx|_}d|v|_ |s d|_ dSd|_ |tvrd}t|| |trdnd|j r%|jdtj||dS) Nrr*+TFzInvalid TIFF file headerrr)rrrrqrtwhereToWriteNewIFDOffsetoffsetOfNewPagerIIMMr!isFirstrq RuntimeError setEndianror rsskipIFDsgoToEnd)riimmr&s rBrzAppendingTiffWriter.setups  DNBK00048% 6;;q>>) D4  DL F x  ,Cs## # doob11:sss;;; = ( FKK2; ' ' '  rDc\|jrdS|j|j|jd}|sdS||jkrd}t ||jr%|jdtj | |jrdnd}||jz }|j J|j|j | ||jrdnd|j|| dS)Nr*z1IIMM of new page doesn't match IIMM of first pager2)r"rrr rr!r#r!rqrs_readr_writefixIFD)rr'r& ifd_offsets rBfinalizezAppendingTiffWriter.finalize+s <  F  D()))v{{1~~  F 49  ECs## # = ( FKK2; ' ' 'ZZT] 9:: d** ,888  D1222 JT] 9:::  J rDcV||dSrn)r-rrs rBnewFramezAppendingTiffWriter.newFrameEs   rDc|Srnr>rs rB __enter__zAppendingTiffWriter.__enter__Js rDrrc@|jr|dSdSrn)rru)rrs rB__exit__zAppendingTiffWriter.__exit__Ms' =  JJLLLLL  rDrwcD|j|jz Srn)rrr rs rBrzAppendingTiffWriter.tellQsv{{}}t333rDrwhencec|tjkr ||jz }|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. )rqrtr rrr)rrr5s rBrzAppendingTiffWriter.seekTsB R[ d* *F  FF###yy{{rDc<|jdtj|j}d|dzz }d|cxkrdkr*nn'|jt ||j|_dS)NrrJ)rrrqSEEK_ENDrrrjr )rr| pad_bytess rBr&zAppendingTiffWriter.goToEndas  Ar{###fkkmmrM y    2      FLLy)) * * *#v{{}}rDendianrc||_|jd|_|jd|_|jd|jrdndz|_dS)NrGrrr)r:longFmtshortFmtr! tagFormat)rr:s rBr$zAppendingTiffWriter.setEndianksS +((( ;)))  K+++dm/LssMrDcx ||jrdnd}|dkr,|j|jrdndz |_dS|j|||jrdnd}|j||jrdndzt j)NTr2r*rr&rrH)r)r!rrrrrqrs)rr,num_tagss rBr%zAppendingTiffWriter.skipIFDsqs O$=AAA>>JQ04 -AAA1- FKK # # #zzt}";!!!<rr fieldSizesr rTTagsrrrrr9rrr _fixOffsetsrrqrs) rr@rrA field_typerrB total_sizeris_localrcur_poss rBr+zAppendingTiffWriter.fixIFDs::4=7aaa88x$ 3$ 3A%+] $-,FBBQ G G&& "CU4J#e+J M0qqqH!X-H 4H--0DD!!&(333di&++-- QOC((-Ij)44)$$UJ777FKK( 23333FKK'''$$UJ777FKK(((( 3 Hbk222I$ 3$ 3rDrct|D]}||}||jz }d}|jr |dvr |dkrd}n|dkr|dkrd}|r|dkrd }t |||||| dz dz }|j|tj | ||jd|z tj |||dS) Nr)r&r*lr2r&r r*r znot implemented) rr)r r!r#rTrrrqrsr`)rrrBrrrRr&rewinds rBrhzAppendingTiffWriter._fixOffsetss.u 6 6AZZ ++F d* *FN} #v!5!5&E//!"qVu__!" 6A::+C&s+++!!&*nEEE(1,q0 FBK000/// AJ 4444!!&*55553 6 6rDisShortisLongcF|rd}n|rd}nd}|||S)Nr&r*r)rh)rrrorprBs rB fixOffsetszAppendingTiffWriter.fixOffsets s=  JJ  JJJz222rDN)F)rr#r[rlrkrr)rkr)rrrkrr)rrwr5rwrkrw)r:rrkr)rrrkrw)rBrwrkr)rBrwrkrw)rNrrOrwrkrrT)rrwrBrwrRrwrkr)rrwrkr)rrwrBrwrkr)rrwrBrwrkr)FF)rrwrorlrprlrkr)$rrrrfrgrrr-r/r1r3rrrtrr&r$r%rrDr)rIrM staticmethodrQrTrWrYr\r*r`rcrur+rhrrr>rDrBrrsJ(   D     44 4444/1k     ----NNNN O O O O""""$$$$ $$$\$ BC B B B B B''''++++++++>>>>  '3'3'3'3R6666:AF 3 3 3 3 3 3 3rDrct|jdg}t|ds|st |||S|} t |5}|g|zD]}||}t|dsd|_t|dd}t|D]P} | | | t |||| Q||_ dddn #1swxYwY| |dS#| |wxYw)N append_imagesr4rr>r )rrrrrrr_attach_default_encoderinforrrrrr/) r9rr$rucur_idxtfimsrnfrrs rB _save_allr{ s++OR@@AAM 2z " "'='RX&&&ggiiG  $ $ .tm+ . .!==bAA sO44+(*C%c:q11 ::""CHHSMMMHHJJJ#r8,,,KKMMMM"- . . . . . . . . . . . . . . . . s1!E 0B.D+ E +D//E 2D/3E E$z.tifz.tiffz image/tiff)rirjrkrl)rtrurvrwrkrx)rtr|rvrwrrwrkrx)rrrkr )rrwrrwrkr)rrwrkr)rrrkr)r9rrrr$rrkr) __future__rrrloggingrKrqr rlcollections.abcrr fractionsrnumbersrrtypingr r r r rrrrr_binaryrrJrrMr_utilrrrrrr_typingrrr getLoggerrrrrrr rrrrrrrrrrrrrrrrrrrrr PREDICTORrrrrrrrr JPEGTABLESrrrrrrrrBrIMAGEJ_META_DATA_BYTE_COUNTSIMAGEJ_META_DATArr;rrrrrqrsrrrrrrr|rjrlrrrrrw _IFDv2BaserrrrrrImageFileDirectoryr!rrBytesIOrr{ register_openr register_saveregister_save_allregister_extensions register_mimer>rDrBrs'R#""""""  44444444$$$$$$$$ JJJJJJJJJJJJJJJJ!!!!!!!!!!!!)))))))) >((((((==========  8 $ $                                     %u|x  x  z {v = :  > = ?  6!" 6#$ 6%*CB)9)?)?)A)ABBB} 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} }  ~cAAyAAAAA   ....%%%%    &687777133333H'H'H'H'H'(H'H'H'V/=sBC     $ S)JJJP$P$P$P$P$JP$P$P$f(6$(7%JJIC <<S ! !D G !>4>>>#3Fq3IJJJ G !?D??OC4HIIIIOS$XXXXX1XXXx+BHBHBHBHBHI'BHBHBHX #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 -%  ,w-w-w-w-t i3i3i3i3i3"*i3i3i3X 8M(-AAAM(%000 ,i888-.0ABBBM(,77777rD