
    @OOf$                         d dl Z d dl mZmZmZ d dlmZ  ee dd      dk  r ede j                  z        ddl	m
Z
  G d	 d
e      Zy)    N)KaitaiStructKaitaiStreamBytesIO)EnumAPI_VERSION)r   	   zPIncompatible Kaitai Struct Python API: 0.9 or later is required, but you have %s   )exifc                       e Zd ZdZ G d de      ZddZd Z G d de      Z	 G d	 d
e      Z
 G d de      Z G d de      Z G d de      Z G d de      Zy)JpegaE  JPEG File Interchange Format, or JFIF, or, more colloquially known
    as just "JPEG" or "JPG", is a popular 2D bitmap image file format,
    offering lossy compression which works reasonably well with
    photographic images.
    
    Format is organized as a container format, serving multiple
    "segments", each starting with a magic and a marker. JFIF standard
    dictates order and mandatory apperance of segments:
    
    * SOI
    * APP0 (with JFIF magic)
    * APP0 (with JFXX magic, optional)
    * everything else
    * SOS
    * JPEG-compressed stream
    * EOI
    c                        e Zd ZdZdZdZdZdZy)Jpeg.ComponentIdr	               N)__name__
__module____qualname__ycbcriq     d/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/contrib/kaitaistruct/jpeg.pyComponentIdr      s    r   r   Nc                 V    || _         || _        |r|n| | _        | j                          y N_io_parent_root_readselfr"   r#   r$   s       r   __init__zJpeg.__init__%   s$    #U


r   c                    g | _         d}| j                  j                         se| j                   j                  t        j                  | j                  | | j                               |dz  }| j                  j                         sdy y )Nr   r	   )segmentsr"   is_eofappendr   Segmentr$   r'   r   s     r   r%   z
Jpeg._read+   s\    ((//#MM  dhhdjj!IJFA ((//#r   c                   0    e Zd Z G d de      ZddZd Zy)Jpeg.Segmentc                       e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#y")#Jpeg.Segment.MarkerEnumr	                                                                                                   N)$r   r   r   temsof0sof1sof2sof3dhtsof5sof6sof7soieoisosdqtdnldridhpapp0app1app2app3app4app5app6app7app8app9app10app11app12app13app14app15comr   r   r   
MarkerEnumr2   5   s    CDDDDCDDDCCCCCCCDDDDDDDDDDEEEEEECr   rt   Nc                 V    || _         || _        |r|n| | _        | j                          y r    r!   r&   s       r   r(   zJpeg.Segment.__init__W   $    DH"DL"'TDJJJLr   c                    | j                   j                  d      | _        | j                  dk(  s,t        j                  d| j                  | j                   d      t        j                  t        j                  j                  | j                   j                               | _        | j                  t        j                  j                  j                  k7  rP| j                  t        j                  j                  j                  k7  r| j                   j                         | _        | j                  t        j                  j                  j                  k7  r| j                  t        j                  j                  j                  k7  r| j                  }|t        j                  j                  j                   k(  rs| j                   j                  | j                  dz
        | _        t        t%        | j"                              }t        j'                  || | j(                        | _        n|t        j                  j                  j,                  k(  rs| j                   j                  | j                  dz
        | _        t        t%        | j"                              }t        j/                  || | j(                        | _        n_|t        j                  j                  j0                  k(  rr| j                   j                  | j                  dz
        | _        t        t%        | j"                              }t        j3                  || | j(                        | _        n|t        j                  j                  j4                  k(  rr| j                   j                  | j                  dz
        | _        t        t%        | j"                              }t        j7                  || | j(                        | _        n-| j                   j                  | j                  dz
        | _        | j                  t        j                  j                  j4                  k(  r | j                   j9                         | _        y y )Nr	      z/types/segment/seq/0r   )r"   
read_bytesmagickaitaistructValidationNotEqualErrorr   resolve_enumr   r-   rt   read_u1markerr\   r]   	read_u2belengthrd   	_raw_datar   SegmentApp1r$   datarc   SegmentApp0rT   SegmentSof0r^   
SegmentSosread_bytes_full
image_data)r'   _on_io__raw_datas      r   r%   zJpeg.Segment._read]   s   ,,Q/DJ::("::7DJJPTPXPXZqrr&33DLL4K4KTXXM]M]M_`DK++!8!8!<!<<4;;RVR^R^RiRiRmRmCm"hh002++!8!8!<!<<4;;RVR^R^RiRiRmRmCmkk$,,11666%)XX%8%8$++/%KDN$01H$IM $ 0 0djj QDIDLL33888%)XX%8%8$++/%KDN$01H$IM $ 0 0djj QDIDLL33888%)XX%8%8$++/%KDN$01H$IM $ 0 0djj QDIDLL33777%)XX%8%8$++/%KDN$01H$IM $tTZZ PDI $ 3 3T[[1_ FDI{{dll55999"&((":":"< :r   NN)r   r   r   r   rt   r(   r%   r   r   r   r-   r0   3   s    !	 !	D		=r   r-   c                   0    e Zd ZddZd Z G d de      Zy)Jpeg.SegmentSosNc                 V    || _         || _        |r|n| | _        | j                          y r    r!   r&   s       r   r(   zJpeg.SegmentSos.__init__   rv   r   c                    | j                   j                         | _        g | _        t	        | j                        D ]P  }| j                  j                  t        j                  j                  | j                   | | j                               R | j                   j                         | _
        | j                   j                         | _        | j                   j                         | _        y r    )r"   r~   num_components
componentsranger,   r   r   	Componentr$   start_spectral_selectionend_spectralappr_bit_posr.   s     r   r%   zJpeg.SegmentSos._read   s    "&(("2"2"4D DO4../ ^&&t'@'@4QUQ[Q['\]^ -1HH,<,<,>D) $ 0 0 2D $ 0 0 2Dr   c                       e Zd ZddZd Zy)Jpeg.SegmentSos.ComponentNc                 V    || _         || _        |r|n| | _        | j                          y r    r!   r&   s       r   r(   z"Jpeg.SegmentSos.Component.__init__   $    &&+U


r   c                     t        j                  t        j                  | j                  j                               | _        | j                  j                         | _        y r    )r   r}   r   r   r"   r~   idhuffman_tabler'   s    r   r%   zJpeg.SegmentSos.Component._read   s>    &33D4D4DdhhFVFVFXY%)XX%5%5%7"r   r   r   r   r   r(   r%   r   r   r   r   r      s    8r   r   r   r   r   r   r(   r%   r   r   r   r   r   r   r      s    		3		8 		8r   r   c                       e Zd ZddZd Zy)Jpeg.SegmentApp1Nc                 V    || _         || _        |r|n| | _        | j                          y r    r!   r&   s       r   r(   zJpeg.SegmentApp1.__init__   rv   r   c                     | j                   j                  dddd      j                  d      | _        | j                  }|dk(  r1t        j                  | j                   | | j                        | _        y y )Nr   FTASCIIExif)r"   read_bytes_termdecoderz   r   
ExifInJpegr$   body)r'   r   s     r   r%   zJpeg.SegmentApp1._read   s[    ((221eT4HPPQYZDJ**Cg~ OODHHdDJJG	 r   r   r   r   r   r   r   r      s    		Hr   r   c                   0    e Zd ZddZd Z G d de      Zy)Jpeg.SegmentSof0Nc                 V    || _         || _        |r|n| | _        | j                          y r    r!   r&   s       r   r(   zJpeg.SegmentSof0.__init__   rv   r   c                    | j                   j                         | _        | j                   j                         | _        | j                   j                         | _        | j                   j                         | _        g | _        t        | j                        D ]P  }| j                  j                  t        j                  j                  | j                   | | j                               R y r    )r"   r~   bits_per_sampler   image_heightimage_widthr   r   r   r,   r   r   r   r$   r.   s     r   r%   zJpeg.SegmentSof0._read   s    #'88#3#3#5D  $ 2 2 4D#xx113D"&(("2"2"4D DO4../ _&&t'7'7'A'A$((DRVR\R\']^_r   c                   :    e Zd ZddZd Zed        Zed        Zy)Jpeg.SegmentSof0.ComponentNc                 V    || _         || _        |r|n| | _        | j                          y r    r!   r&   s       r   r(   z#Jpeg.SegmentSof0.Component.__init__   r   r   c                    t        j                  t        j                  | j                  j                               | _        | j                  j                         | _        | j                  j                         | _        y r    )	r   r}   r   r   r"   r~   r   sampling_factorsquantization_table_idr   s    r   r%   z Jpeg.SegmentSof0.Component._read   sS    &33D4D4DdhhFVFVFXY(,(8(8(:%-1XX-=-=-?*r   c                 z    t        | d      r| j                  S | j                  dz  dz	  | _        t        | dd       S )N_m_sampling_x   r   )hasattrr   r   getattrr   s    r   
sampling_xz%Jpeg.SegmentSof0.Component.sampling_x   s?    41---'+'<'<s'Bq&H"t_d;;r   c                 t    t        | d      r| j                  S | j                  dz  | _        t        | dd       S )N_m_sampling_y   )r   r   r   r   r   s    r   
sampling_yz%Jpeg.SegmentSof0.Component.sampling_y   s:    41---&*&;&;b&@"t_d;;r   r   )r   r   r   r(   r%   propertyr   r   r   r   r   r   r      s5    @
 < < < <r   r   r   r   r   r   r   r   r      s    		_	< 	<r   r   c                       e Zd ZddZd Zy)Jpeg.ExifInJpegNc                 V    || _         || _        |r|n| | _        | j                          y r    r!   r&   s       r   r(   zJpeg.ExifInJpeg.__init__   rv   r   c                 h   | j                   j                  d      | _        | j                  dk(  s,t        j                  d| j                  | j                   d      | j                   j                         | _        t        t        | j                              }t        j                  |      | _        y )Nr	       z/types/exif_in_jpeg/seq/0)r"   ry   
extra_zeror{   r|   r   r   r   r   r
   r   r   )r'   r   s     r   r%   zJpeg.ExifInJpeg._read   s~    "hh11!4DO??g-"::7DOOUYU]U]_{||!XX557DN()@AM		-0DIr   r   r   r   r   r   r   r      s    		1r   r   c                   0    e Zd Z G d de      ZddZd Zy)Jpeg.SegmentApp0c                       e Zd ZdZdZdZy)Jpeg.SegmentApp0.DensityUnitr   r	   r   N)r   r   r   no_unitspixels_per_inchpixels_per_cmr   r   r   DensityUnitr      s    HOMr   r   Nc                 V    || _         || _        |r|n| | _        | j                          y r    r!   r&   s       r   r(   zJpeg.SegmentApp0.__init__   rv   r   c                    | j                   j                  d      j                  d      | _        | j                   j	                         | _        | j                   j	                         | _        t        j                  t        j                  j                  | j                   j	                               | _        | j                   j                         | _        | j                   j                         | _        | j                   j	                         | _        | j                   j	                         | _        | j                   j                  | j                   | j"                  z  dz        | _        y )Nr   r   r   )r"   ry   r   rz   r~   version_majorversion_minorr   r}   r   r   r   density_unitsr   	density_x	density_ythumbnail_xthumbnail_y	thumbnailr   s    r   r%   zJpeg.SegmentApp0._read   s    ((--a088BDJ!%!1!1!3D!%!1!1!3D!-!:!:4;K;K;W;WY]YaYaYiYiYk!lD!XX//1DN!XX//1DN#xx//1D#xx//1D!XX0043C3CdFVFV3VZ[2[]DNr   r   )r   r   r   r   r   r(   r%   r   r   r   r   r      s    	$ 				^r   r   r   )r   r   r   __doc__r   r   r(   r%   r   r-   r   r   r   r   r   r   r   r   r   r      sm    $d H=, H=X8\ 8<Hl H+<l +<^1\ 1 ^l ^r   r   )r{   r   r   r   enumr   r   	Exception__version__ r
   r   r   r   r   <module>r      sb     < <  </&8
fjv  kC  kC  D  E  E s^< s^r   