§
    £”j<  ã                   ó`  — d Z ddlZddlmZmZ ddlmZmZ ddlm	Z	 ddl
mZ  G d„ de	¦  «        Z G d	„ d
e¦  «        Z G d„ de¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Zd„ Z G d„ d¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZdS )zdObjects related to parsing headers of JPEG image streams.

Includes both JFIF and Exif sub-formats.
é    N)ÚJPEG_MARKER_CODEÚ	MIME_TYPE)Ú
BIG_ENDIANÚStreamReader)ÚBaseImageHeader)ÚTiffc                   ó>   — e Zd ZdZed„ ¦   «         Zed„ ¦   «         ZdS )ÚJpegz(Base class for JFIF and EXIF subclasses.c                 ó   — t           j        S )zWMIME content type for this image, unconditionally `image/jpeg` for JPEG
        images.)r   ÚJPEG©Úselfs    ú^/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/docx/image/jpeg.pyÚcontent_typezJpeg.content_type   s   € õ Œ~Ðó    c                 ó   — dS )z8Default filename extension, always 'jpg' for JPG images.Újpg© r   s    r   Údefault_extzJpeg.default_ext   s	   € ð ˆur   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   r   r   r   r   r
   r
      sN   € € € € € Ø2Ð2àðð ñ „Xðð
 ðð ñ „Xðð ð r   r
   c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )ÚExifz*Image header parser for Exif image format.c                 ó²   — t                                |¦  «        }|j        j        }|j        j        }|j        j        }|j        j        } | ||||¦  «        S )z[Return |Exif| instance having header properties parsed from Exif image in
        `stream`.)Ú_JfifMarkersÚfrom_streamÚsofÚpx_widthÚ	px_heightÚapp1Úhorz_dpiÚvert_dpi©ÚclsÚstreamÚmarkersr!   r"   r$   r%   s          r   r   zExif.from_stream    sW   € õ ×*Ò*¨6Ñ2Ô2ˆð ”;Ô'ˆØ”KÔ)ˆ	Ø”<Ô(ˆØ”<Ô(ˆàˆs�8˜Y¨°(Ñ;Ô;Ð;r   N©r   r   r   r   Úclassmethodr   r   r   r   r   r      s3   € € € € € Ø4Ð4àð<ð <ñ „[ð<ð <ð <r   r   c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )ÚJfifz*Image header parser for JFIF image format.c                 ó²   — t                                |¦  «        }|j        j        }|j        j        }|j        j        }|j        j        } | ||||¦  «        S )zXReturn a |Jfif| instance having header properties parsed from image in
        `stream`.)r   r   r    r!   r"   Úapp0r$   r%   r&   s          r   r   zJfif.from_stream2   sU   € õ ×*Ò*¨6Ñ2Ô2ˆà”;Ô'ˆØ”KÔ)ˆ	Ø”<Ô(ˆØ”<Ô(ˆàˆs�8˜Y¨°(Ñ;Ô;Ð;r   Nr*   r   r   r   r-   r-   /   s3   € € € € € Ø4Ð4àð
<ð 
<ñ „[ð
<ð 
<ð 
<r   r-   c                   ó€   ‡ — e Zd ZdZˆ fd„Zd„ Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
ed„ ¦   «         Zˆ xZS )r   zfSequence of markers in a JPEG file, perhaps truncated at first SOS marker for
    performance reasons.c                 ó~   •— t          t          | ¦  «                             ¦   «          t          |¦  «        | _        d S ©N)Úsuperr   Ú__init__ÚlistÚ_markers)r   r)   Ú	__class__s     €r   r4   z_JfifMarkers.__init__D   s0   ø€ Ý�l˜DÑ!Ô!×*Ò*Ñ,Ô,Ð,Ý˜W™œˆŒˆˆr   c           	      óÒ   — d}d}g }| j         D ]?}|                     ||j        |j        t	          |j        ¦  «        |j        fz  ¦  «         Œ@|g|z   }d                     |¦  «        S )z{Returns a tabular listing of the markers in this instance, which can be handy
        for debugging and perhaps other uses.z4 offset  seglen  mc  name
=======  ======  ==  =====z%7d  %6d  %02X  %sú
)r6   ÚappendÚoffsetÚsegment_lengthÚordÚmarker_codeÚnameÚjoin)r   ÚheaderÚtmplÚrowsÚmarkerÚliness         r   Ú__str__z_JfifMarkers.__str__H   sŠ   € ð IˆØ#ˆØˆØ”mð 		ð 		ˆFØ�KŠKØà”MØÔ)Ý˜Ô*Ñ+Ô+Ø”Kð	ññô ð ð ð �˜4‘ˆØ�yŠy˜ÑÔÐr   c                 óÖ   — t                                |¦  «        }g }|                     ¦   «         D ].}|                     |¦  «         |j        t
          j        k    r nŒ/ | |¦  «        S )zrReturn a |_JfifMarkers| instance containing a |_JfifMarker| subclass instance
        for each marker in `stream`.)Ú_MarkerParserr   Úiter_markersr:   r>   r   ÚSOS)r'   r(   Úmarker_parserr)   rD   s        r   r   z_JfifMarkers.from_stream[   ss   € õ &×1Ò1°&Ñ9Ô9ˆØˆØ#×0Ò0Ñ2Ô2ð 	ð 	ˆFØ�NŠN˜6Ñ"Ô"Ð"ØÔ!Õ%5Ô%9Ò9Ð9Ø�ð :àˆs�7‰|Œ|Ðr   c                 óf   — | j         D ]}|j        t          j        k    r|c S Œt	          d¦  «        ‚)z#First APP0 marker in image markers.zno APP0 marker in image)r6   r>   r   ÚAPP0ÚKeyError©r   Úms     r   r/   z_JfifMarkers.app0g   óC   € ð ”ð 	ð 	ˆAØŒ}Õ 0Ô 5Ò5Ð5Ø���ð 6åÐ0Ñ1Ô1Ð1r   c                 óf   — | j         D ]}|j        t          j        k    r|c S Œt	          d¦  «        ‚)z#First APP1 marker in image markers.zno APP1 marker in image)r6   r>   r   ÚAPP1rN   rO   s     r   r#   z_JfifMarkers.app1o   rQ   r   c                 ób   — | j         D ]}|j        t          j        v r|c S Œt	          d¦  «        ‚)z4First start of frame (SOFn) marker in this sequence.z(no start of frame (SOFn) marker in image)r6   r>   r   ÚSOF_MARKER_CODESrN   rO   s     r   r    z_JfifMarkers.sofw   sD   € ð ”ð 	ð 	ˆAØŒ}Õ 0Ô AÐAÐAØ���ð BåÐAÑBÔBÐBr   )r   r   r   r   r4   rF   r+   r   r   r/   r#   r    Ú__classcell__©r7   s   @r   r   r   @   sÄ   ø€ € € € € ðð ð&ð &ð &ð &ð &ð ð  ð  ð& ð	ð 	ñ „[ð	ð ð2ð 2ñ „Xð2ð ð2ð 2ñ „Xð2ð ðCð Cñ „XðCð Cð Cð Cð Cr   r   c                   ó>   ‡ — e Zd ZdZˆ fd„Zed„ ¦   «         Zd„ Zˆ xZS )rH   zUService class that knows how to parse a JFIF stream and iterate over its
    markers.c                 ód   •— t          t          | ¦  «                             ¦   «          || _        d S r2   )r3   rH   r4   Ú_stream)r   Ústream_readerr7   s     €r   r4   z_MarkerParser.__init__„   s*   ø€ Ý�m˜TÑ"Ô"×+Ò+Ñ-Ô-Ð-Ø$ˆŒˆˆr   c                 óB   — t          |t          ¦  «        } | |¦  «        S )zFReturn a |_MarkerParser| instance to parse JFIF markers from `stream`.)r   r   )r'   r(   r[   s      r   r   z_MarkerParser.from_streamˆ   s#   € õ % V­ZÑ8Ô8ˆØˆs�=Ñ!Ô!Ð!r   c              #   ó  K  — t                                | j        ¦  «        }d}d}|t          j        k    rN|                     |¦  «        \  }}t          || j        |¦  «        }|V — ||j        z   }|t          j        k    °LdS dS )z…Generate a (marker_code, segment_offset) 2-tuple for each marker in the JPEG
        `stream`, in the order they occur in the stream.r   N)Ú_MarkerFinderr   rZ   r   ÚEOIÚnextÚ_MarkerFactoryr<   )r   Úmarker_finderÚstartr>   Úsegment_offsetrD   s         r   rI   z_MarkerParser.iter_markersŽ   s”   è è € õ &×1Ò1°$´,Ñ?Ô?ˆØˆØˆØÕ-Ô1Ò1Ð1Ø*7×*<Ò*<¸UÑ*CÔ*CÑ'ˆK˜Ý# K°´¸~ÑNÔNˆFØˆLˆLˆLØ" VÔ%:Ñ:ˆEð	 Õ-Ô1Ò1Ð1Ð1Ð1Ð1Ð1r   )	r   r   r   r   r4   r+   r   rI   rV   rW   s   @r   rH   rH   €   sl   ø€ € € € € ðð ð%ð %ð %ð %ð %ð ð"ð "ñ „[ð"ð

;ð 
;ð 
;ð 
;ð 
;ð 
;ð 
;r   rH   c                   óP   ‡ — e Zd ZdZˆ fd„Zed„ ¦   «         Zd„ Zd„ Zd„ Z	d„ Z
ˆ xZS )r^   zFService class that knows how to find the next JFIF marker in a stream.c                 ód   •— t          t          | ¦  «                             ¦   «          || _        d S r2   )r3   r^   r4   rZ   )r   r(   r7   s     €r   r4   z_MarkerFinder.__init__ž   s*   ø€ Ý�m˜TÑ"Ô"×+Ò+Ñ-Ô-Ð-ØˆŒˆˆr   c                 ó   —  | |¦  «        S )zCReturn a |_MarkerFinder| instance to find JFIF markers in `stream`.r   )r'   r(   s     r   r   z_MarkerFinder.from_stream¢   s   € ð ˆs�6‰{Œ{Ðr   c                 ó’   — |}	 |                       |¬¦  «        }|                      |dz   ¬¦  «        \  }}|dk    rŒ:||dz   }}	 ||fS )aX  Return a (marker_code, segment_offset) 2-tuple identifying and locating the
        first marker in `stream` occuring after offset `start`.

        The returned `segment_offset` points to the position immediately following the
        2-byte marker code, the start of the marker segment, for those markers that have
        a segment.
        T)rc   é   ó    )Ú_offset_of_next_ff_byteÚ_next_non_ff_byte)r   rc   ÚpositionÚbyte_r>   rd   s         r   r`   z_MarkerFinder.next§   sk   € ð ˆð
	à×3Ò3¸(Ð3ÑCÔCˆHà"×4Ò4¸8Àa¹<Ð4ÑHÔH‰OˆH�eà˜ÒÐØà*/°¸A±˜ˆKØØ˜NÐ*Ð*r   c                 óÞ   — | j                              |¦  «         |                      ¦   «         }|dk    r|                      ¦   «         }|dk    °| j                              ¦   «         dz
  }||fS )uù   Return an offset, byte 2-tuple for the next byte in `stream` that is not
        'Ã¿', starting with the byte at offset `start`.

        If the byte at offset `start` is not 'Ã¿', `start` and the returned `offset`
        will be the same.
        ó   ÿri   ©rZ   ÚseekÚ
_read_byteÚtell)r   rc   rn   Úoffset_of_non_ff_bytes       r   rl   z_MarkerFinder._next_non_ff_byte½   st   € ð 	Œ×Ò˜%Ñ Ô Ð Ø—’Ñ!Ô!ˆØ�wÒÐØ—O’OÑ%Ô%ˆEð �wÒÐà $¤× 1Ò 1Ñ 3Ô 3°aÑ 7ÐØ$ eÐ+Ð+r   c                 óÚ   — | j                              |¦  «         |                      ¦   «         }|dk    r|                      ¦   «         }|dk    °| j                              ¦   «         dz
  }|S )uç   Return the offset of the next 'Ã¿' byte in `stream` starting with the byte
        at offset `start`.

        Returns `start` if the byte at that offset is a hex 255; it does not necessarily
        advance in the stream.
        rp   ri   rq   )r   rc   rn   Úoffset_of_ff_bytes       r   rk   z%_MarkerFinder._offset_of_next_ff_byteË   so   € ð 	Œ×Ò˜%Ñ Ô Ð Ø—’Ñ!Ô!ˆØ�wÒÐØ—O’OÑ%Ô%ˆEð �wÒÐà œL×-Ò-Ñ/Ô/°!Ñ3ÐØ Ð r   c                 ó\   — | j                              d¦  «        }|st          d¦  «        ‚|S )zeReturn the next byte read from stream.

        Raise Exception if stream is at end of file.
        ri   zunexpected end of file)rZ   ÚreadÚ	Exception)r   rn   s     r   rs   z_MarkerFinder._read_byteÙ   s5   € ð
 ”×!Ò! !Ñ$Ô$ˆØð 	6ÝÐ4Ñ5Ô5Ð5Øˆr   )r   r   r   r   r4   r+   r   r`   rl   rk   rs   rV   rW   s   @r   r^   r^   ›   s•   ø€ € € € € ØPÐPðð ð ð ð ð ðð ñ „[ðð+ð +ð +ð,,ð ,ð ,ð!ð !ð !ðð ð ð ð ð ð r   r^   c                 óÊ   — | t           j        k    rt          }n5| t           j        k    rt          }n| t           j        v rt          }nt          }|                     || |¦  «        S )znReturn |_Marker| or subclass instance appropriate for marker at `offset` in
    `stream` having `marker_code`.)	r   rM   Ú_App0MarkerrS   Ú_App1MarkerrU   Ú
_SofMarkerÚ_Markerr   )r>   r(   r;   Ú
marker_clss       r   ra   ra   ä   sc   € ð Õ&Ô+Ò+Ð+Ý ˆ
ˆ
Ø	Õ(Ô-Ò	-Ð	-Ý ˆ
ˆ
Ø	Õ(Ô9Ð	9Ð	9Ýˆ
ˆ
åˆ
Ø×!Ò! &¨+°vÑ>Ô>Ð>r   c                   ó�   ‡ — e Zd ZdZˆ fd„Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
ed„ ¦   «         Zˆ xZS )r   zqBase class for JFIF marker classes.

    Represents a marker and its segment occuring in a JPEG byte stream.
    c                 ó€   •— t          t          | ¦  «                             ¦   «          || _        || _        || _        d S r2   )r3   r   r4   Ú_marker_codeÚ_offsetÚ_segment_length)r   r>   r;   r<   r7   s       €r   r4   z_Marker.__init__ø   s<   ø€ Ý�g�tÑÔ×%Ò%Ñ'Ô'Ð'Ø'ˆÔØˆŒØ-ˆÔÐÐr   c                 ót   — t          j        |¦  «        rd}n|                     |¦  «        } | |||¦  «        S )zhReturn a generic |_Marker| instance for the marker at `offset` in `stream`
        having `marker_code`.r   )r   Úis_standaloneÚ
read_short)r'   r(   r>   r;   r<   s        r   r   z_Marker.from_streamþ   sE   € õ Ô)¨+Ñ6Ô6ð 	7ØˆNˆNà#×.Ò.¨vÑ6Ô6ˆNØˆs�; ¨Ñ7Ô7Ð7r   c                 ó   — | j         S )um   The single-byte code that identifies the type of this marker, e.g. ``'Ã '``
        for start of image (SOI).)rƒ   r   s    r   r>   z_Marker.marker_code  s   € ð Ô Ð r   c                 ó0   — t           j        | j                 S r2   )r   Úmarker_namesrƒ   r   s    r   r?   z_Marker.name  s   € åÔ,¨TÔ->Ô?Ð?r   c                 ó   — | j         S r2   )r„   r   s    r   r;   z_Marker.offset  s
   € àŒ|Ðr   c                 ó   — | j         S )z-The length in bytes of this marker's segment.)r…   r   s    r   r<   z_Marker.segment_length  s   € ð Ô#Ð#r   )r   r   r   r   r4   r+   r   r   r>   r?   r;   r<   rV   rW   s   @r   r   r   ò   sÌ   ø€ € € € € ðð ð
.ð .ð .ð .ð .ð ð8ð 8ñ „[ð8ð ð!ð !ñ „Xð!ð
 ð@ð @ñ „Xð@ð ðð ñ „Xðð ð$ð $ñ „Xð$ð $ð $ð $ð $r   r   c                   ój   ‡ — e Zd ZdZˆ fd„Zed„ ¦   «         Zed„ ¦   «         Zd„ Ze	d„ ¦   «         Z
ˆ xZS )r|   z&Represents a JFIF APP0 marker segment.c                 ó†   •— t          t          | ¦  «                             |||¦  «         || _        || _        || _        d S r2   )r3   r|   r4   Ú_density_unitsÚ
_x_densityÚ
_y_density)r   r>   r;   ÚlengthÚdensity_unitsÚ	x_densityÚ	y_densityr7   s          €r   r4   z_App0Marker.__init__  s?   ø€ Ý�k˜4Ñ Ô ×)Ò)¨+°v¸vÑFÔFÐFØ+ˆÔØ#ˆŒØ#ˆŒˆˆr   c                 ó6   — |                       | j        ¦  «        S ©z[Horizontal dots per inch specified in this marker, defaults to 72 if not
        specified.)Ú_dpir‘   r   s    r   r$   z_App0Marker.horz_dpi%  ó   € ð �yŠy˜œÑ)Ô)Ð)r   c                 ó6   — |                       | j        ¦  «        S ©zYVertical dots per inch specified in this marker, defaults to 72 if not
        specified.)r™   r’   r   s    r   r%   z_App0Marker.vert_dpi+  rš   r   c                 ó|   — | j         dk    r|}n-| j         dk    r t          t          |dz  ¦  «        ¦  «        }nd}|S )z6Return dots per inch corresponding to `density` value.ri   é   gR¸…ëQ@éH   )r�   ÚintÚround)r   ÚdensityÚdpis      r   r™   z_App0Marker._dpi1  sJ   € àÔ !Ò#Ð#ØˆCˆCØÔ  AÒ%Ð%Ý•e˜G d™NÑ+Ô+Ñ,Ô,ˆCˆCàˆCØˆ
r   c                 óÐ   — |                      |¦  «        }|                     |d¦  «        }|                      |d¦  «        }|                      |d¦  «        } | ||||||¦  «        S )zUReturn an |_App0Marker| instance for the APP0 marker at `offset` in
        `stream`.é	   é
   é   )rˆ   Ú	read_byte)r'   r(   r>   r;   r<   r”   r•   r–   s           r   r   z_App0Marker.from_stream;  sq   € ð  ×*Ò*¨6Ñ2Ô2ˆØ×(Ò(¨°Ñ3Ô3ˆØ×%Ò% f¨bÑ1Ô1ˆ	Ø×%Ò% f¨bÑ1Ô1ˆ	Øˆs�; ¨¸ÀyÐR[Ñ\Ô\Ð\r   )r   r   r   r   r4   r   r$   r%   r™   r+   r   rV   rW   s   @r   r|   r|     s¥   ø€ € € € € Ø0Ð0ð$ð $ð $ð $ð $ð ð*ð *ñ „Xð*ð
 ð*ð *ñ „Xð*ð
ð ð ð ð]ð ]ñ „[ð]ð ]ð ]ð ]ð ]r   r|   c                   ó�   ‡ — e Zd ZdZˆ fd„Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
ed„ ¦   «         Zˆ xZS )r}   z-Represents a JFIF APP1 (Exif) marker segment.c                 óx   •— t          t          | ¦  «                             |||¦  «         || _        || _        d S r2   )r3   r}   r4   Ú	_horz_dpiÚ	_vert_dpi)r   r>   r;   r“   r$   r%   r7   s         €r   r4   z_App1Marker.__init__S  s7   ø€ Ý�k˜4Ñ Ô ×)Ò)¨+°v¸vÑFÔFÐFØ!ˆŒØ!ˆŒˆˆr   c                 óÖ   — |                      |¦  «        }|                      ||¦  «        r | |||dd¦  «        S |                      |||¦  «        } | ||||j        |j        ¦  «        S )zmExtract the horizontal and vertical dots-per-inch value from the APP1 header
        at `offset` in `stream`.rŸ   )rˆ   Ú_is_non_Exif_APP1_segmentÚ_tiff_from_exif_segmentr$   r%   )r'   r(   r>   r;   r<   Útiffs         r   r   z_App1Marker.from_streamX  s{   € ð  ×*Ò*¨6Ñ2Ô2ˆØ×(Ò(¨°Ñ8Ô8ð 	DØ�3�{ F¨N¸BÀÑCÔCÐCØ×*Ò*¨6°6¸>ÑJÔJˆØˆs�; ¨¸¼ÀtÄ}ÑUÔUÐUr   c                 ó   — | j         S r˜   )r«   r   s    r   r$   z_App1Marker.horz_dpij  ó   € ð Œ~Ðr   c                 ó   — | j         S rœ   )r¬   r   s    r   r%   z_App1Marker.vert_dpip  r²   r   c                 óh   — |                      |dz   ¦  «         |                     d¦  «        }|dk    S )z§Return True if the APP1 segment at `offset` in `stream` is NOT an Exif
        segment, as determined by the ``'Exif  '`` signature at offset 2 in the
        segment.rž   é   s   Exif  )rr   ry   )r'   r(   r;   Úexif_signatures       r   r®   z%_App1Marker._is_non_Exif_APP1_segmentv  s4   € ð
 	�Š�F˜Q‘JÑÔÐØŸš Q™œˆØ Ò0Ð0r   c                 ó²   — |                      |dz   ¦  «         |                     |dz
  ¦  «        }t          j        |¦  «        }t	          j        |¦  «        S )zoReturn a |Tiff| instance parsed from the Exif APP1 segment of
        `segment_length` at `offset` in `stream`.é   )rr   ry   ÚioÚBytesIOr   r   )r'   r(   r;   r<   Úsegment_bytesÚ	substreams         r   r¯   z#_App1Marker._tiff_from_exif_segment  sP   € ð
 	�Š�F˜Q‘JÑÔÐØŸš N°QÑ$6Ñ7Ô7ˆÝ”J˜}Ñ-Ô-ˆ	ÝÔ 	Ñ*Ô*Ð*r   )r   r   r   r   r4   r+   r   r   r$   r%   r®   r¯   rV   rW   s   @r   r}   r}   P  sÈ   ø€ € € € € Ø7Ð7ð"ð "ð "ð "ð "ð
 ðVð Vñ „[ðVð" ðð ñ „Xðð
 ðð ñ „Xðð
 ð1ð 1ñ „[ð1ð ð+ð +ñ „[ð+ð +ð +ð +ð +r   r}   c                   ód   ‡ — e Zd ZdZˆ fd„Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	ˆ xZ
S )r~   z7Represents a JFIF start of frame (SOFx) marker segment.c                 óx   •— t          t          | ¦  «                             |||¦  «         || _        || _        d S r2   )r3   r~   r4   Ú	_px_widthÚ
_px_height)r   r>   r;   r<   r!   r"   r7   s         €r   r4   z_SofMarker.__init__�  s7   ø€ Ý�j˜$ÑÔ×(Ò(¨°f¸nÑMÔMÐMØ!ˆŒØ#ˆŒˆˆr   c                 ó¢   — |                      |¦  «        }|                      |d¦  «        }|                      |d¦  «        } | |||||¦  «        S )zJReturn an |_SofMarker| instance for the SOFn marker at `offset` in stream.é   é   )rˆ   )r'   r(   r>   r;   r<   r"   r!   s          r   r   z_SofMarker.from_stream’  sY   € ð  ×*Ò*¨6Ñ2Ô2ˆØ×%Ò% f¨aÑ0Ô0ˆ	Ø×$Ò$ V¨QÑ/Ô/ˆØˆs�; ¨¸À)ÑLÔLÐLr   c                 ó   — | j         S )zImage height in pixels.)rÀ   r   s    r   r"   z_SofMarker.px_height¡  s   € ð ŒÐr   c                 ó   — | j         S )zImage width in pixels.)r¿   r   s    r   r!   z_SofMarker.px_width¦  s   € ð Œ~Ðr   )r   r   r   r   r4   r+   r   r   r"   r!   rV   rW   s   @r   r~   r~   Š  s’   ø€ € € € € ØAÐAð$ð $ð $ð $ð $ð
 ðMð Mñ „[ðMð ðð ñ „Xðð ðð ñ „Xðð ð ð ð r   r~   )r   r¹   Údocx.image.constantsr   r   Údocx.image.helpersr   r   Údocx.image.imager   Údocx.image.tiffr   r
   r   r-   r   rH   r^   ra   r   r|   r}   r~   r   r   r   ú<module>rÊ      s@  ððð ð
 
€	€	€	à <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø  Ð  Ð  Ð  Ð  Ð  ðð ð ð ð ˆ?ñ ô ð ð<ð <ð <ð <ð <ˆ4ñ <ô <ð <ð$<ð <ð <ð <ð <ˆ4ñ <ô <ð <ð"=Cð =Cð =Cð =Cð =Cñ =Cô =Cð =Cð@;ð ;ð ;ð ;ð ;ñ ;ô ;ð ;ð6Fð Fð Fð Fð Fñ Fô Fð FðR?ð ?ð ?ð'$ð '$ð '$ð '$ð '$ñ '$ô '$ð '$ðT1]ð 1]ð 1]ð 1]ð 1]�'ñ 1]ô 1]ð 1]ðh7+ð 7+ð 7+ð 7+ð 7+�'ñ 7+ô 7+ð 7+ðtð ð ð ð �ñ ô ð ð ð r   