§
    ¥”jŽ  ã                   óæ  — d Z ddlZddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlZddlmZmZmZ dd	lmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZmZ de_         G d„ de ¦  «        Z! G d„ d¦  «        Z" G d„ dej#        ¦  «        Z$ G d„ dej#        ¦  «        Z% G d„ d¦  «        Z&	 	 d'd„Z'd„ Z(d„ Z)d„ Z*d „ Z+ G d!„ d"¦  «        Z, G d#„ d$e,¦  «        Z- G d%„ d&e,¦  «        Z.dS )(z+Fetch and decode images in various formats.é    N)Úmd5)ÚBytesIO)Úcycle)ÚPath)ÚElementTree)ÚImageÚ	ImageFileÚImageOps)Úparse_coloré   )ÚDEFAULT_OPTIONS©Ú
percentage)ÚLOGGER)ÚSVG)ÚURLFetchingErrorÚfetchTc                   ó   — e Zd ZdZdS )ÚImageLoadingErrorzpAn error occured when loading an image.

    The image data is probably corrupted or in an invalid format.

    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ú`/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/weasyprint/images.pyr   r      s   € € € € € ðð ð ð r   r   c                   óN   — e Zd Zdddefd„Zd„ Zd„ Zd
d„Zd„ Ze	d	„ ¦   «         Z
dS )ÚRasterImageNÚnonec                 ó   — |}t          ||¦  «        }||ur|j        |_        d x}}|| _        |€i n|| _        |d         x| _        }	|d         | _        d|j        v r|                     d¦  «        }n|j        dv r|                     d¦  «        }|j        | _        |j	        | _	        |j
        | _
        | j
        dk    r| j	        | j
        z  nt          j        | _        |d         x| _        }
t          |d	i ¦  «                             d
¦  «        }| j        dk    o|d u| _        |j        dv r[d| _        |�|
s|	�Mt%          j        ¦   «         }d|
dœ}| j        �
| j        |d<    |j        |fi |¤Ž |                     ¦   «         }d }nWd| _        |�|
s|j        dk    rAt%          j        ¦   «         }|                     |d|
¬¦  «         |                     ¦   «         }d }|                      ||¦  «        | _        d S )NÚjpeg_qualityÚdpiÚtransparencyÚRGBA)Ú1ÚPÚIÚRGBr   Úoptimize_imagesÚappÚAPP14ÚCMYK)ÚJPEGÚMPOr-   ©ÚformatÚoptimizeÚqualityÚPNG)Úrotate_pillow_imager0   ÚidÚ_cacheÚ_jpeg_qualityÚ_dpiÚinfoÚconvertÚmodeÚwidthÚheightÚmathÚinfÚratior1   ÚgetattrÚgetÚinvert_colorsÚior   ÚsaveÚgetvalueÚcache_image_dataÚ
image_data)ÚselfÚpillow_imageÚimage_idrH   ÚfilenameÚcacheÚorientationÚoptionsÚoriginal_pillow_imager!   r1   Úapp14Ú
image_files                r   Ú__init__zRasterImage.__init__#   s9  € ð !-ÐÝ*¨<¸ÑEÔEˆØ ¨Ð4Ð4à"7Ô">ˆLÔà$(Ð(ˆJ˜àˆŒØ!˜M�b�b¨uˆŒØ,3°NÔ,CÐCˆÔ˜\Ø˜E”NˆŒ	à˜\Ô.Ð.Ð.Ø'×/Ò/°Ñ7Ô7ˆLˆLØÔ /Ð1Ð1Ø'×/Ò/°Ñ6Ô6ˆLà Ô%ˆŒ	Ø!Ô'ˆŒ
Ø"Ô)ˆŒØ37´;À!Ò3CÐ3C�d”j 4¤;Ñ.Ð.ÍÌˆŒ
Ø#*Ð+<Ô#=Ð=ˆŒ˜õ
 Ð-¨u°bÑ9Ô9×=Ò=¸gÑFÔFˆØ!œY¨&Ò0ÐF°UÀ$Ð5FˆÔàÔ /Ð1Ð1Ø ˆDŒKØÐ! XÐ!°Ð1IÝœZ™\œ\�
Ø%+¸ÐBÐB�ØÔ%Ð1Ø)-Ô);�G˜IÑ&Ø!�Ô! *Ð8Ð8°Ð8Ð8Ð8Ø'×0Ò0Ñ2Ô2�
Ø�øàˆDŒKØÐ! XÐ!°Ô1DÈÒ1MÐ1MÝœZ™\œ\�
Ø×!Ò! *°UÀXÐ!ÑNÔNÐNØ'×0Ò0Ñ2Ô2�
Ø�Ø×/Ò/°
¸HÑEÔEˆŒˆˆr   c                 ó6   — | j         |z  | j        |z  | j        fS ©N)r<   r=   r@   )rI   Ú
resolutionÚ	font_sizes      r   Úget_intrinsic_sizezRasterImage.get_intrinsic_sizeW   s   € ØŒz˜JÑ&¨¬°jÑ(@À$Ä*ÐLÐLr   c                 óø  — | j         dk    s| j        dk    rd S |d         }|dk    }d}| j        rƒd}t          ||j        d         d         z  |z  ¦  «        }	t          ||j        d         d         z  |z  ¦  «        }
t          | j         |	z  | j        |
z  ¦  «        }|| j        k    r
| j        |z  }|                     | ||¦  «        }|                     |dd| d|¦  «         |                     |¦  «         d S )Nr   Úimage_renderingÚautor   gÇqÇqŒ?)	r<   r=   r8   ÚabsÚctmÚmaxÚ	add_imageÚ	transformÚdraw_x_object)rI   ÚstreamÚconcrete_widthÚconcrete_heightÚstylerZ   Úinterpolater@   Úpt_to_inÚwidth_inchesÚheight_inchesr"   Ú
image_names                r   ÚdrawzRasterImage.drawZ   s  € ØŒ:˜Š?ˆ?˜dœk¨QÒ.Ð.ØˆFàÐ 1Ô2ˆØ%¨Ò/ˆØˆØŒ9ð 	(Ø!ˆHÝ˜~°´
¸1´¸aÔ0@Ñ@À8ÑKÑLÔLˆLÝ °&´*¸Q´-ÀÔ2BÑ BÀXÑ MÑNÔNˆMÝ�d”j <Ñ/°´¸}Ñ1LÑMÔMˆCØ�T”YŠˆØœ	 C™�Ø×%Ò% d¨K¸Ñ?Ô?ˆ
à×ÒØ˜A˜q ?Ð"2°A°ñ	Hô 	Hð 	Hà×Ò˜ZÑ(Ô(Ð(Ð(Ð(r   Úsourcec                 ó|   — |rt          |¦  «        S | j        › d|› d| j        pd› �}t          | j        ||¦  «        S )Nú-Ú )ÚLazyLocalImager5   r8   Ú	LazyImager6   )rI   ÚdatarL   ÚslotÚkeys        r   rG   zRasterImage.cache_image_datan   sO   € Øð 	5Ý! (Ñ+Ô+Ð+à”WÐ7Ð7˜tÐ7Ð7 d¤i o°2Ð7Ð7ˆCÝ˜Tœ[¨#¨tÑ4Ô4Ð4r   c                 ó¤  — |dk    r| j         | j        }}�n t          j        t	          j        | j        j        ¦  «        ¦  «        }t          dt          | j         |z  ¦  «        ¦  «        }t          dt          | j        |z  ¦  «        ¦  «        }| 
                    ||f¦  «         t	          j        ¦   «         }|                     ||j        | j        ¬¦  «         |j         |j        }}|                      |                     ¦   «         ¦  «        | _        | j        dv rd}n6| j        dv rd}n*| j        dk    rd}nt#          j        d	| j        ¦  «         d}t'          j        d
d|||d|rdnddœ¦  «        }| j        dk    r>| j        rt'          j        d¦  «        |d<   d|d<   t'          j        | j        g|¦  «        S d|d<   t'          j        d|dœ¦  «        |d<   | j        dv rd|d         d<   | j        dv ræt          j        t	          j        | j        j        ¦  «        ¦  «        }	|	                     d¦  «        }
|	                     | j        d d…         ¦  «        }	|                      |	¦  «        }|                      |
¦  «        }|                      |d¬¦  «        }t'          j        |gdd
dt'          j        d|dœ¦  «        ||dd|rdndd œ	¬!¦  «        |d"<   nC|                      t          j        t	          j        | j        j        ¦  «        ¦  «        ¦  «        }t'          j        |                      |d#¬¦  «        g|¦  «        S )$Nr   r/   )r(   r$   z
/DeviceRGB)ÚLÚLAz/DeviceGrayr,   z/DeviceCMYKzUnknown image mode: %sz/XObjectz/Imageé   ÚtrueÚfalse)ÚTypeÚSubtypeÚWidthÚHeightÚ
ColorSpaceÚBitsPerComponentÚInterpolater-   )r   r   r   r   r   r   r   r   ÚDecodez
/DCTDecodeÚFilterz/FlateDecodeé   )Ú	PredictorÚColumnsÚDecodeParmsé   ÚColors)r$   rw   ÚAéÿÿÿÿÚstreamalpha)rs   )	rƒ   r{   r|   r‡   r}   r~   r   r€   r�   )ÚextraÚSMaskrb   )r<   r=   r   ÚopenrD   r   rH   rr   r^   ÚroundÚ	thumbnailrE   r0   r1   rG   rF   r;   r   ÚwarningÚpydyfÚ
DictionaryrC   ÚArrayÚStreamÚ
getchannelr:   Ú_get_png_data)rI   rf   Ú	dpi_ratior<   r=   r‘   rR   Úcolor_spacer�   rJ   ÚalphaÚpng_dataÚ
alpha_datarb   s                 r   Úget_x_objectzRasterImage.get_x_objectu   s€  € Ø˜Š>ˆ>Ø œJ¨¬�6ˆE‰Eåœ
¥2¤:¨d¬oÔ.BÑ#CÔ#CÑDÔDˆIÝ˜�5 ¤¨iÑ!7Ñ8Ô8Ñ9Ô9ˆEÝ˜�E $¤+°	Ñ"9Ñ:Ô:Ñ;Ô;ˆFØ×Ò ¨ Ñ0Ô0Ð0Ýœ™œˆJØ�NŠNØ 9Ô#3¸d¼mð ñ Mô Mð Mà%œO¨YÔ-=�6ˆEØ"×3Ò3°J×4GÒ4GÑ4IÔ4IÑJÔJˆDŒOàŒ9˜Ð'Ð'Ø&ˆKˆKØŒY˜+Ð%Ð%Ø'ˆKˆKØŒY˜&Ò Ð Ø'ˆKˆKåŒNÐ3°T´YÑ?Ô?Ð?Ø&ˆKåÔ ØØØØØ%Ø !Ø%0Ð=˜6˜6°gð"
ð "
ñ ô ˆð Œ;˜&Ò Ð ØÔ!ð :Ý"'¤+¨jÑ"9Ô"9��h‘Ø*ˆE�(‰OÝ”< ¤Ð 1°5Ñ9Ô9Ð9à(ˆˆh‰Ý$Ô/ð Øð	1
ð 	1
ñ 	 ô 	 ˆˆmÑð Œ9˜Ð'Ð'à-.ˆE�-Ô  Ñ*ØŒ9˜Ð&Ð&å œ:¥b¤j°´Ô1EÑ&FÔ&FÑGÔGˆLØ ×+Ò+¨CÑ0Ô0ˆEØ'×/Ò/°´	¸#¸2¸#´Ñ?Ô?ˆLØ×)Ò)¨,Ñ7Ô7ˆHà×+Ò+¨EÑ2Ô2ˆJØ×*Ò*¨:¸MÐ*ÑJÔJˆFÝ"œ\¨6¨(Ø(Ø"Ø#Ý$Ô/Ø!#Ø$ð1ð 1ñ  ô  ð Ø Ø+Ø$%Ø)4ÐA˜v˜v¸'ð;ð ;ð ñ ô ˆE�'‰NˆNð ×)Ò)Ý”
�2œ: d¤oÔ&:Ñ;Ô;Ñ<Ô<ñ>ô >ˆHõ Œ|˜T×2Ò2°8À(Ð2ÑKÔKÐLÈeÑTÔTÐTr   c                 ó6  — t          ¦   «         }|                      |d¬¦  «         |                     d¦  «         g }|                     d¦  «        }|r²t	          j        d|¦  «        \  }|                     d¦  «        }|dk    r)|                     |                     |¦  «        ¦  «         n |                     |t          j        ¦  «         |                     dt          j        ¦  «         |                     d¦  «        }|°²d 	                    |¦  «        S )Nr3   )r0   rx   é   z!Is   IDATr   )
r   rE   ÚseekÚreadÚstructÚunpackÚappendrD   ÚSEEK_CURÚjoin)rJ   rR   rœ   Úraw_chunk_lengthÚchunk_lengthÚ
chunk_types         r   r˜   zRasterImage._get_png_dataÈ   s  € å‘Y”Yˆ
Ø×Ò˜*¨UÐÑ3Ô3Ð3ð 	�Š˜ÑÔÐàˆØ%Ÿ?š?¨1Ñ-Ô-Ðàð 	2õ #œM¨$Ð0@ÑAÔA‰MˆLØ#Ÿš¨Ñ+Ô+ˆJØ˜WÒ$Ð$Ø—’ 
§¢°Ñ =Ô =Ñ>Ô>Ð>Ð>à—’ ­b¬kÑ:Ô:Ð:à�OŠO˜A�rœ{Ñ+Ô+Ð+Ø)Ÿš¨qÑ1Ô1Ðð ð 	2ð �xŠx˜Ñ!Ô!Ð!r   )Nrl   )r   r   r   r   rS   rX   rk   rG   rž   Ústaticmethodr˜   r   r   r   r   r   "   s�   € € € € € ØDHØ¨¸ð2Fð 2Fð 2Fð 2FðhMð Mð Mð)ð )ð )ð(5ð 5ð 5ð 5ðQUð QUð QUðf ð"ð "ñ „\ð"ð "ð "r   r   c                   ó4   ‡ — e Zd Zˆ fd„Zed„ ¦   «         Zˆ xZS )rq   c                 ón   •— t          ¦   «                              ¦   «          || _        || _        |||<   d S rU   )ÚsuperrS   Ú_keyr6   )rI   rM   rt   rr   Ú	__class__s       €r   rS   zLazyImage.__init__æ   s4   ø€ Ý‰Œ×ÒÑÔÐØˆŒ	ØˆŒØˆˆc‰
ˆ
ˆ
r   c                 ó&   — | j         | j                 S rU   )r6   r¯   ©rI   s    r   rr   zLazyImage.dataì   s   € àŒ{˜4œ9Ô%Ð%r   ©r   r   r   rS   Úpropertyrr   Ú__classcell__©r°   s   @r   rq   rq   å   sS   ø€ € € € € ðð ð ð ð ð ð&ð &ñ „Xð&ð &ð &ð &ð &r   rq   c                   ó4   ‡ — e Zd Zˆ fd„Zed„ ¦   «         Zˆ xZS )rp   c                 óV   •— t          ¦   «                              ¦   «          || _        d S rU   )r®   rS   Ú	_filename)rI   rL   r°   s     €r   rS   zLazyLocalImage.__init__ò   s$   ø€ Ý‰Œ×ÒÑÔÐØ!ˆŒˆˆr   c                 óN   — t          | j        ¦  «                             ¦   «         S rU   )r   r¹   Ú
read_bytesr²   s    r   rr   zLazyLocalImage.dataö   s   € å�D”NÑ#Ô#×.Ò.Ñ0Ô0Ð0r   r³   r¶   s   @r   rp   rp   ñ   sS   ø€ € € € € ð"ð "ð "ð "ð "ð ð1ð 1ñ „Xð1ð 1ð 1ð 1ð 1r   rp   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚSVGImagec                 ót   — |r|j         nd }t          ||||¦  «        | _        || _        || _        || _        d S rU   )Úfont_configr   Ú_svgÚ	_base_urlÚ_url_fetcherÚ_context)rI   ÚtreeÚbase_urlÚurl_fetcherÚcontextr¿   s         r   rS   zSVGImage.__init__ü   sC   € Ø-4Ð>�gÔ)Ð)¸$ˆÝ˜˜h¨°[ÑAÔAˆŒ	Ø!ˆŒØ'ˆÔØˆŒˆˆr   c                 ó  — | j                              |¦  «        \  }}d ||fv rO| j                              ¦   «         }|r1|d         r)|d         r!|d         |d         z  }|r||z  }n|r||z  }nd }n|r|r||z  }nd}|||fS )Né   rˆ   r   )rÀ   rX   Úget_viewbox)rI   Úimage_resolutionrW   r<   r=   Úviewboxr@   s          r   rX   zSVGImage.get_intrinsic_size  sÅ   € Øœ	×4Ò4°YÑ?Ô?‰ˆˆvØ�E˜6�?Ð"Ð"Ø”i×+Ò+Ñ-Ô-ˆGØð ˜7 1œ:ð ¨'°!¬*ð Ø œ
 W¨Q¤ZÑ/�Øð +Ø" U™]�F�FØð +Ø" U™N�Eøà��Øð 	�vð 	Ø˜F‘NˆEˆEàˆEØ�f˜eÐ#Ð#r   c                 óè   — 	 | j                              |||| j        | j        ¦  «         d S # t          $ r;}t          j        d| j        ¦  «         t          j        d|¬¦  «         Y d }~d S d }~ww xY w)NzFailed to render SVG image %sz Error while rendering SVG image:©Úexc_info)rÀ   rk   rÁ   rÃ   ÚBaseExceptionr   ÚerrorÚdebug)rI   rb   rc   rd   Ú_styleÚ	exceptions         r   rk   zSVGImage.draw  sœ   € ð	QØŒI�NŠNØ˜¨¸¼Ø”ñô ð ð ð øõ ð 	Qð 	Qð 	QÝŒLÐ8¸$¼.ÑIÔIÐIÝŒLÐ;ÀiÐPÑPÔPÐPÐPÐPÐPÐPÐPÐPøøøøð	Qøøøs   ‚(, ¬
A1¶0A,Á,A1N)r   r   r   rS   rX   rk   r   r   r   r½   r½   û   sF   € € € € € ð ð  ð  ð$ð $ð $ð$Qð Qð Qð Qð Qr   r½   ú
from-imagec           	      óÄ  — || v r| |         S 	 t          ||¦  «        5 }|                     ¦   «         }|p|j        }	ddd¦  «         n# 1 swxY w Y   d}
g }|	dk    rT	 t          j        |¦  «        }t          ||||¦  «        }
n,# t          $ r}|                     |¦  «         Y d}~nd}~ww xY w|
€Û	 t          j	        t          |¦  «        ¦  «        }t          |                     ¦   «         d¬¦  «                             ¦   «         }t          ||||j        | ||¦  «        }
ni# t          $ r\}|	dk    rt           |d         ‚	 t          j        |¦  «        }t          ||||¦  «        }
n# t          $ r	 t           |‚w xY wY d}~nd}~ww xY wnL# t"          t           f$ r8}t%          j        d||¦  «         t%          j        d|¬¦  «         d}
Y d}~nd}~ww xY w|
| |<   |
S )	z(Get an Image instance from an image URI.Nzimage/svg+xmlF)Úusedforsecurityr   zFailed to load image at %r: %szError while loading image:rÎ   )r   r¢   Úcontent_typer   Ú
fromstringr½   Ú	Exceptionr¥   r   r�   r   r   ÚencodeÚ	hexdigestr   Úpathr   r   r   rÑ   rÒ   )rM   rÆ   rO   ÚurlÚforced_mime_typerÇ   rN   ÚresponseÚ
bytestringÚ	mime_typeÚimageÚsvg_exceptionsrÄ   Úsvg_exceptionrJ   rK   Úraster_exceptionrÔ   s                     r   Úget_image_from_urirç     s¨  € ð ˆe€|€|Ø�SŒzÐð'Ý�; Ñ$Ô$ð 	B¨Ø!Ÿš™œˆJØ(ÐA¨HÔ,AˆIð	Bð 	Bð 	Bñ 	Bô 	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bøøøð 	Bð 	Bð 	Bð 	Bð ˆØˆà˜Ò'Ð'ð5Ý"Ô-¨jÑ9Ô9�Ý   s¨K¸ÑAÔA��øÝð 5ð 5ð 5Ø×%Ò% mÑ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4øøøøð5øøøð ˆ=ð*Ý$œz­'°*Ñ*=Ô*=Ñ>Ô>�õ ˜sŸzšz™|œ|¸UÐCÑCÔC×MÒMÑOÔO�Ý#Ø  (¨J¸¼ÀuØ ñ*ô *��øõ ð 
Bð 
Bð 
BØ Ò/Ð/å+°ÀÔ1BÐBðBå&Ô1°*Ñ=Ô=�DÝ$ T¨3°¸WÑEÔE�E�EøÝ ð Bð Bð Bå+Ð1AÐAðBøøøð �E�E�E�Eøøøøð
Bøøøøøõ$ Õ/Ð0ð ð ð ÝŒÐ5°s¸IÑFÔFÐFÝŒÐ1¸IÐFÑFÔFÐFØˆˆˆˆˆˆøøøøðøøøð
 €Eˆ#�JØ€Ls¦   ŽF žA¼F ÁAÁF ÁAÁF Á&B ÂF Â
B.ÂB)Â$F Â)B.Â.F Â4!D% ÃAF Ä%
FÄ/FÅ&E+Å*FÅ+E>Å>FÆF ÆFÆF ÆGÆ .GÇGc                 ó<  — | j         }|dk    rd| j        v rt          j        | ¦  «        } ni|dk    rc|\  }}|dk    r2t	          t
          j        d|› �¦  «        }|                      |¦  «        } |r$|                      t
          j        j        ¦  «        } || _         | S )z{Return a copy of a Pillow image with modified orientation.

    If orientation is not changed, return the same image.

    rÕ   Úexifr   r   ÚROTATE_)	r0   r9   r
   Úexif_transposerA   r   Ú	TransposeÚ	transposeÚFLIP_LEFT_RIGHT)rJ   rN   Úimage_formatÚangleÚflipÚrotations         r   r4   r4   R  sµ   € ð  Ô&€LØ�lÒ"Ð"Ø�\Ô&Ð&Ð&Ý#Ô2°<Ñ@Ô@ˆLøØ	˜Ò	Ð	Ø!‰ˆˆtØ�1Š9ˆ9Ý�uœÐ0A¸%Ð0AÐ0AÑBÔBˆHØ'×1Ò1°(Ñ;Ô;ˆLØð 	1Ø'×1Ò1Ý”Ô/ñ1ô 1ˆLð '€LÔØÐr   c                 óŽ  ‡ ‡— ˆˆ fd„|D ¦   «         }ˆˆ fd„|D ¦   «         }|d         €d|d<   |d         €‰ |d<   |d         }t          |¦  «        D ]\  }}|�||k     r|||<   Œ|}Œd}t          |¦  «        D ]=\  }}|�6||         }||z
  ||z
  z  }	t          |dz   |¦  «        D ]}
||
|	z  z   ||
<   Œ|}Œ>d„ |D ¦   «         }||fS )aª  Give color stops positions and hints on the gradient vector.

    ``vector_length`` is the distance between the starting point and ending
    point of the vector gradient.

    ``positions`` is a list of ``None``, or ``Dimension`` in px or %. 0 is the
    starting point, 1 the ending point.

    See https://drafts.csswg.org/css-images-3/#color-stop-syntax.

    Return processed color stops, as a list of floats in px.

    c                 ó2   •— g | ]}t          |‰‰¦  «        ‘ŒS r   r   )Ú.0Úpositionre   Úvector_lengths     €€r   ú
<listcomp>z'process_color_stops.<locals>.<listcomp>y  s%   ø€ ÐVÐVÐVÀ•˜H e¨]Ñ;Ô;ÐVÐVÐVr   c                 ó8   •— g | ]}t          |‰‰¦  «        ‰z  ‘ŒS r   r   )rõ   Úhintre   r÷   s     €€r   rø   z'process_color_stops.<locals>.<listcomp>z  s*   ø€ ÐVÐVÐVÈ�Z˜˜e ]Ñ3Ô3°mÑCÐVÐVÐVr   r   Nr‹   r   c           	      ót   — g | ]5}|d k    rd n*|dk    rdn"t          dt          j        d|¦  «        ¦  «        ‘Œ6S )r   r   l        g      à?)Úminr>   Úlog)rõ   rú   s     r   rø   z'process_color_stops.<locals>.<listcomp>–  sZ   € ð =ð =ð =ð /3ð �QŠYˆYˆˆØ˜1’9�9ˆˆÝˆG•T”X˜c 4Ñ(Ô(Ñ)Ô)ð=ð =ð =r   )Ú	enumerateÚrange)r÷   Ú	positionsÚhintsre   Úprevious_posÚirö   Ú
previous_iÚbaseÚ	incrementÚjs   `  `       r   Úprocess_color_stopsr  j  sX  øø€ ð WÐVÐVÐVÐVÈIÐVÑVÔV€IØVÐVÐVÐVÐVÐPUÐVÑVÔV€Eð �„|ÐØˆ	�!‰Ø�„}ÐØ%ˆ	�"‰ð ˜Q”<€LÝ  Ñ+Ô+ð (ð (‰ˆˆ8ØÐØ˜,Ò&Ð&Ø+�	˜!‘�à'�øð €JÝ  Ñ+Ô+ð ð ‰ˆˆ8ØÐØ˜ZÔ(ˆDØ! D™¨Q°©^Ñ<ˆIÝ˜:¨™>¨1Ñ-Ô-ð 4ð 4�Ø# a¨)¡mÑ3�	˜!‘�ØˆJøð=ð =ð 7<ð=ñ =ô =€Eð
 �eÐÐr   c                 óŽ   ‡‡— | d         | d         cŠ}|‰z
  Š‰dk    rdgt          | ¦  «        z  } nˆˆfd„| D ¦   «         } ‰|| fS )zòNormalize stop positions between 0 and 1.

    Return ``(first, last, positions)``.

    first: original position of the first position.
    last: original position of the last position.
    positions: list of positions between 0 and 1.

    r   r‹   c                 ó    •— g | ]
}|‰z
  ‰z  ‘ŒS r   r   )rõ   ÚposÚfirstÚtotal_lengths     €€r   rø   z,normalize_stop_positions.<locals>.<listcomp>­  s"   ø€ ÐGÐGÐG°c�c˜E‘k \Ñ1ÐGÐGÐGr   )Úlen)r   Úlastr  r  s     @@r   Únormalize_stop_positionsr  ž  sj   øø€ ð ˜A”, 	¨"¤€K€Eˆ4Ø˜%‘<€LØ�qÒÐØ�C�#˜i™.œ.Ñ(ˆ	ˆ	àGÐGÐGÐGÐG¸YÐGÑGÔGˆ	Ø�$˜	Ð!Ð!r   c                 ó¬  — t          |¦  «        }|dk    sJ ‚|t          | ¦  «        k    sJ ‚|d         |d         z
  }|dk    r!t          t          |¦  «        ¦  «        }|dz
  }d„ | D ¦   «         }d„ | D ¦   «         }d„ | D ¦   «         }d„ | D ¦   «         }dx}x}	x}
}d|z  }t          |dd	…         d¦  «        D ]X\  }}|||dz
           z
  |z  }|dz
  |fD ]:}|||         |z  z  }|	||         |z  z  }	|
||         |z  z  }
|||         |z  z  }Œ;ŒY|dk    rt	          d
¦  «        S t	          d||z  dz  › d|	|z  dz  › d|
|z  dz  › d|› d�	¦  «        S )zG
    https://drafts.csswg.org/css-images-3/#gradient-average-color
    r   r‹   r   c                 ó"   — g | ]\  }}}}||z  ‘ŒS r   r   ©rõ   ÚrÚgÚbÚas        r   rø   z*gradient_average_color.<locals>.<listcomp>½  ó$   € Ð/Ð/Ð/™*˜!˜Q  1��A‘Ð/Ð/Ð/r   c                 ó"   — g | ]\  }}}}||z  ‘ŒS r   r   r  s        r   rø   z*gradient_average_color.<locals>.<listcomp>¾  r  r   c                 ó"   — g | ]\  }}}}||z  ‘ŒS r   r   r  s        r   rø   z*gradient_average_color.<locals>.<listcomp>¿  r  r   c                 ó   — g | ]	\  }}}}|‘Œ
S r   r   r  s        r   rø   z*gradient_average_color.<locals>.<listcomp>À  s    € Ð(Ð(Ð(‘:�1�a˜˜AˆQÐ(Ð(Ð(r   rÉ   NÚtransparentzrgb(éÿ   ú ú/ú))r  Úlistrÿ   rþ   r   )Úcolorsr   Únb_stopsr  Úpremul_rÚpremul_gÚpremul_br›   Úresult_rÚresult_gÚresult_bÚresult_aÚtotal_weightr  rö   Úweightr  s                    r   Úgradient_average_colorr-  ±  s  € õ
 �9‰~Œ~€HØ�aŠ<ˆ<ˆ<ˆ<Ø•s˜6‘{”{Ò"Ð"Ð"Ð"Ø˜R”= 9¨Q¤<Ñ/€LØ�qÒÐÝ�˜x™œÑ)Ô)ˆ	Ø !‘|ˆØ/Ð/¨Ð/Ñ/Ô/€HØ/Ð/¨Ð/Ñ/Ô/€HØ/Ð/¨Ð/Ñ/Ô/€HØ(Ð( Ð(Ñ(Ô(€EØ01Ð1€HÐ1ˆxÐ1˜( XØ�|Ñ#€LÝ  ¨1¨2¨2¤°Ñ2Ô2ð *ð *‰ˆˆ8Ø˜Y q¨1¡uÔ-Ñ-°Ñ=ˆØ�a‘%˜�ð 	*ð 	*ˆAØ˜ œ fÑ,Ñ,ˆHØ˜ œ fÑ,Ñ,ˆHØ˜ œ fÑ,Ñ,ˆHØ˜˜aœ 6Ñ)Ñ)ˆHˆHð		*ð �1‚}€}Ý˜=Ñ)Ô)Ð)åð9�8˜hÑ&¨Ñ,ð 9ð 9¨x¸(Ñ/BÀSÑ/Hð 9ð 9Ø˜(Ñ" SÑ(ð9ð 9Ø,4ð9ð 9ð 9ñ:ô :ð 	:r   c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚGradientc                 ó¢   — |sJ ‚t          d„ |D ¦   «         ¦  «        | _        t          d„ |D ¦   «         ¦  «        | _        || _        || _        d S )Nc              3   ó    K  — | ]	\  }}|V — Œ
d S rU   r   )rõ   ÚcolorÚ_s      r   ú	<genexpr>z$Gradient.__init__.<locals>.<genexpr>×  s&   è è € Ð>Ð>¡h e¨Q˜EÐ>Ð>Ð>Ð>Ð>Ð>r   c              3   ó    K  — | ]	\  }}|V — Œ
d S rU   r   )rõ   r3  rö   s      r   r4  z$Gradient.__init__.<locals>.<genexpr>Ù  s&   è è € Ð#LÐ#L±°°H HÐ#LÐ#LÐ#LÐ#LÐ#LÐ#Lr   )Útupler"  Ústop_positionsÚcolor_hintsÚ	repeating)rI   Úcolor_stopsr9  r8  s       r   rS   zGradient.__init__Ô  s^   € ØÐÐÐåÐ>Ð>°+Ð>Ñ>Ô>Ñ>Ô>ˆŒå#Ð#LÐ#LÀÐ#LÑ#LÔ#LÑLÔLˆÔà&ˆÔà"ˆŒˆˆr   c                 ó   — dS )N)NNNr   )rI   rË   rW   s      r   rX   zGradient.get_intrinsic_sizeß  s   € ØÐr   c                 ó–  ‡‡‡‡— |                       |||¦  «        \  }}}}ŠŠ|dk    rI‰                     dd||¦  «         ‰                     ‰d         ¦  «         ‰                     ¦   «          d S d„ ‰D ¦   «         Šˆˆfd„t	          t          ‰¦  «        dz
  ¦  «        D ¦   «         }	ˆˆfd„t	          t          ‰¦  «        dz
  ¦  «        D ¦   «         }
t          ‰¦  «        D ][\  }}|dk    rP|dk    r|
|dz
           d         |
|dz
           d<   |t          ‰¦  «        dz
  k     r|
|         d         |
|         d<   Œ\t          |	¦  «        D ]%\  }\  }}}d||fvr||fdk    r||z  |
|         d<   Œ&|d	k    rdnd
}|d         |d         f}| j         }t          ‰¦  «        dz
  dz  }|dd…         }ˆfd„|
D ¦   «         }‰                     ||||¦  «        }‰ 	                    |d||||¦  «        }‰ 
                    |¬¦  «         t          d„ ‰D ¦   «         ¦  «        r‰‰                     dd||¦  «        }|d	k    rdnd
}ˆfd„|	D ¦   «         }‰                     ||||¦  «        }| 	                    |d||||¦  «        }| 
                    |¬¦  «         d|j        › d�g|_        ‰                     |j        ¦  «         d S )NÚsolidr   c                 ó   — g | ]
}|d          ‘ŒS )rˆ   r   )rõ   r2  s     r   rø   z!Gradient.draw.<locals>.<listcomp>ì  s   € Ð/Ð/Ð/˜u�%˜”(Ð/Ð/Ð/r   c                 óD   •— g | ]}‰|         ‰|d z            ‰|         g‘ŒS ©r   r   )rõ   r  Úalphasr8  s     €€r   rø   z!Gradient.draw.<locals>.<listcomp>í  s@   ø€ ð -ð -ð -àð �AŒY˜˜q 1™uœ {°1¤~Ð6ð-ð -ð -r   r   c                 ó°   •— g | ]R}‰|                               d ¦  «        dd…         ‰|dz                                  d ¦  «        dd…         ‰|         g‘ŒSS )ÚsrgbNrˆ   r   )Úto)rõ   r  r8  r"  s     €€r   rø   z!Gradient.draw.<locals>.<listcomp>ñ  sm   ø€ ð -ð -ð -àð �AŒY�\Š\˜&Ñ!Ô! " 1 "Ô% v¨a°!©e¤}×'7Ò'7¸Ñ'?Ô'?ÀÀÀÔ'CÀ[ÐQRÄ^ÐTð-ð -ð -r   )r   r   rÉ   Úlinearrˆ   r‹   ©r   r   c              3   óP   •K  — | ] \  }}}‰                      d |||¦  «        V — Œ!dS ©rF  N©Úcreate_interpolation_function©rõ   Úc0Úc1rú   rb   s       €r   r4  z Gradient.draw.<locals>.<genexpr>  sQ   øè è € ð /ð /á��B˜ð ×0Ò0°¸¸RÀÑFÔFð/ð /ð /ð /ð /ð /r   r(   )Údc              3   ó"   K  — | ]
}|d k    V — ŒdS )r   Nr   )rõ   r›   s     r   r4  z Gradient.draw.<locals>.<genexpr>  s&   è è € Ð.Ð.˜eˆu˜ŠzÐ.Ð.Ð.Ð.Ð.Ð.r   c              3   óT   •K  — | ]"\  }}}‰                      d |f|f|¦  «        V — Œ#dS rH  rI  rK  s       €r   r4  z Gradient.draw.<locals>.<genexpr>  sU   øè è € ð 3ð 3á �B˜˜Dð ×4Ò4°V¸b¸UÀRÀEÈ4ÑPÔPð3ð 3ð 3ð 3ð 3ð 3r   ÚGrayr  z sh)ÚlayoutÚ	rectangleÚ	set_colorÚfillrÿ   r  rþ   r9  Úcreate_stitching_functionÚadd_shadingr`   ÚanyÚset_alpha_stater5   rb   Úpaint_shading)rI   rb   rc   rd   re   Úscale_yÚtype_Úpointsr   Úalpha_couplesÚcolor_couplesr  r›   Úa0Úa1rú   Úshading_typeÚdomainÚextendrÛ   ÚboundsÚsub_functionsÚfunctionÚshadingÚalpha_streamÚalpha_shadingrA  r8  r"  s    `                        @@@r   rk   zGradient.drawâ  sÂ  øøøø€ ØAEÇÂØ˜O¨UñB4ô B4Ñ>ˆ�˜ 	¨6°;ð �GÒÐØ×Ò˜Q  >°?ÑCÔCÐCØ×Ò˜V AœYÑ'Ô'Ð'Ø�KŠK‰MŒMˆMØˆFà/Ð/¨Ð/Ñ/Ô/ˆð-ð -ð -ð -ð -å�3˜v™;œ;¨™?Ñ+Ô+ð-ñ -ô -ˆð-ð -ð -ð -ð -å�3˜v™;œ;¨™?Ñ+Ô+ð-ñ -ô -ˆõ
 " &Ñ)Ô)ð 	>ð 	>‰HˆAˆuØ˜ŠzˆzØ�q’5�5Ø.;¸AÀ¹EÔ.BÀ1Ô.E�M ! a¡%Ô(¨Ñ+Ø•s˜6‘{”{ Q‘Ò&Ð&Ø*7¸Ô*:¸1Ô*=�M !Ô$ QÑ'øÝ!*¨=Ñ!9Ô!9ð 	.ð 	.ÑˆA‰~��B˜Ø˜˜R˜Ð Ð  b¨" X°Ò%7Ð%7Ø&(¨2¡g�˜aÔ  Ñ#øà! XÒ-Ð-�q�q°1ˆØ˜A”, 	¨"¤Ð.ˆØ”^Ð#ˆÝ�f‘+”+ ‘/ VÑ+ˆØ˜1˜R˜4”ˆð/ð /ð /ð /à -ð/ñ /ô /ˆð ×3Ò3Ø�F˜F Mñ3ô 3ˆð ×$Ò$Ø˜% ¨°¸ñCô Cˆà×Ò˜7ÐÑ#Ô#Ð#åÐ.Ð. vÐ.Ñ.Ô.Ñ.Ô.ð 	>Ø!×1Ò1Ø�1�n oñ7ô 7ˆLð !&¨Ò 1Ð 1˜1˜1°qˆLð3ð 3ð 3ð 3à$1ð3ñ 3ô 3ˆMð ×7Ò7Ø˜ ¨ñ7ô 7ˆHà(×4Ò4Ø˜f f¨f°f¸hñHô HˆMà×"Ò" WÐ"Ñ-Ô-Ð-Ø#< }Ô'7Ð#<Ð#<Ð#<Ð"=ˆLÔà×Ò˜WœZÑ(Ô(Ð(Ð(Ð(r   c                 ó   — t           ‚)a€  Get layout information about the gradient.

        width, height: Gradient box. Top-left is at coordinates (0, 0).
        style: box computed style.

        Returns (scale_y, type_, points, positions, colors).

        scale_y: vertical scale of the gradient. float, used for ellipses
                 radial gradients. 1 otherwise.
        type_: gradient type.
        points: coordinates of useful points, depending on type_:
            'solid': None.
            'linear': (x0, y0, x1, y1)
                      coordinates of the starting and ending points.
            'radial': (cx0, cy0, radius0, cx1, cy1, radius1)
                      coordinates of the starting end ending circles
        positions: positions of the color stops. list of floats in between 0
                   and 1 (0 at the starting point, 1 at the ending point).
        colors: list of (r, g, b, a).

        )ÚNotImplementedError)rI   r<   r=   re   s       r   rR  zGradient.layout   s
   € õ, "Ð!r   N)r   r   r   rS   rX   rk   rR  r   r   r   r/  r/  Ó  sQ   € € € € € ð	#ð 	#ð 	#ð ð  ð  ð<)ð <)ð <)ð|"ð "ð "ð "ð "r   r/  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚLinearGradientc                 ól   •— t          ¦   «                              |||¦  «         |\  | _        | _        d S rU   )r®   rS   Údirection_typeÚ	direction)rI   r:  rq  r9  r8  r°   s        €r   rS   zLinearGradient.__init__:  s2   ø€ Ý‰Œ×Ò˜ i°Ñ=Ô=Ð=à.7Ñ+ˆÔ˜Tœ^˜^˜^r   c                 óŽ  ‡— t          | j        ¦  «        dk    rddd g | j        d         gg fS | j        dk    rW| j                             d¦  «        \  }}|dk    rdnd}|dk    rdnd}t          j        ||¦  «        }||z  |z  }	||z  |z  }
n=| j        d	k    sJ ‚| j        }t          j        |¦  «        }	t          j        |¦  «         }
t          |	d
¦  «        t          |
d
¦  «        }
}	t          | j        ¦  «        }t          ||	z  ¦  «        t          ||
z  ¦  «        z   }t          || j        | j        |¦  «        \  Š}| j        sÃ‰d         ‰d         k    rQ‰                     d‰d         dz
  ¦  «         |                     d|d         ¦  «         |                     dd¦  «         ‰d         ‰d         k    rN‰                     ‰d         dz   ¦  «         |                     |d         ¦  «         |                     d¦  «         t%          ‰¦  «        \  }}Š| j        �rá||k    rt'          |‰¦  «        }ddd g |gg fS ||z
  }|dk    sJ ‚ˆfd„t)          t          ‰¦  «        dz
  ¦  «        D ¦   «         }t+          dg|¢R ¦  «        }t+          |¦  «        }t+          |¦  «        }t+          dg|d d d…         ¢R ¦  «        }t+          |d d d…         ¦  «        }t+          |d d d…         ¦  «        }||k     rt-          |¦  «        }|                     t-          |¦  «        ¦  «         |                     t-          |¦  «        ¦  «         ‰                     ‰d         |z   ¦  «         |||z  z  }||k     °|dk    r‚t-          |¦  «        }|                     dt-          |¦  «        ¦  «         |                     dt-          |¦  «        ¦  «         ‰                     d‰d         |z
  ¦  «         |||z  z  }|dk    °‚||	|z  z
  dz  }||
|z  z
  dz  }||	|z  z   ||
|z  z   ||	|z  z   ||
|z  z   f}dd|‰||fS )Nr   r=  r   Úcornerr3  Úleftr‹   Útoprð   é	   éþÿÿÿc                 ó8   •— g | ]}‰|d z            ‰|         z
  ‘ŒS r@  r   )rõ   r  r   s     €r   rø   z)LinearGradient.layout.<locals>.<listcomp>u  s;   ø€ ð 4ð 4ð 4àð ˜!˜a™%Ô  9¨Q¤<Ñ/ð4ð 4ð 4r   rÉ   rE  )r  r"  rp  rq  Úsplitr>   ÚhypotÚsinÚcosr�   r!  r\   r  r7  r8  r9  Úinsertr¥   r  r-  rÿ   r   Únext)rI   r<   r=   re   ÚyÚxÚfactor_xÚfactor_yÚdiagonalÚdxÚdyrð   r"  r÷   r  r  r  r2  Ústop_lengthÚposition_stepsÚ
next_stepsÚnext_colorsÚ
next_hintsÚprevious_stepsÚprevious_colorsÚprevious_hintsÚstepÚstart_xÚstart_yr]  r   s                                 @r   rR  zLinearGradient.layout?  s¿  ø€ åˆtŒ{ÑÔ˜qÒ Ð Ø�g˜t R¨$¬+°a¬.Ð)9¸2Ð=Ð=ð Ô (Ò*Ð*Ø”>×'Ò'¨Ñ,Ô,‰DˆAˆqØ &š[˜[�r�r¨aˆHØ %šZ˜Z�r�r¨QˆHÝ”z %¨Ñ0Ô0ˆHð ˜FÑ" XÑ-ˆBØ˜EÑ! HÑ,ˆBˆBàÔ&¨'Ò1Ð1Ð1Ð1Ø”NˆEÝ”˜%‘”ˆBÝ”(˜5‘/”/Ð!ˆBõ �r˜1‘”�u R¨™|œ|ˆBˆõ �d”kÑ"Ô"ˆÝ˜E B™J™œ­#¨f°r©kÑ*:Ô*:Ñ:ˆÝ.Ø˜4Ô.°Ô0@À%ñIô IÑˆ	�5àŒ~ð 
	 ð ˜Œ|˜y¨œ|Ò+Ð+Ø× Ò   I¨a¤L°1Ñ$4Ñ5Ô5Ð5Ø—’˜a ¨¤Ñ+Ô+Ð+Ø—’˜Q Ñ"Ô"Ð"Ø˜Œ} 	¨"¤Ò-Ð-Ø× Ò  ¨2¤°Ñ!2Ñ3Ô3Ð3Ø—’˜f RœjÑ)Ô)Ð)Ø—’˜Q‘”�Ý!9¸)Ñ!DÔ!DÑˆˆt�YàŒ>ñ $	,ð ˜Š}ˆ}Ý.¨v°yÑAÔA�Ø˜' 4¨¨e¨W°bÐ8Ð8ð  ™,ˆKØ ’?�?�?�?ð4ð 4ð 4ð 4å�s 9™~œ~°Ñ1Ñ2Ô2ð4ñ 4ô 4ˆNõ
  Ð3 NÐ3Ð3Ñ4Ô4ˆJÝ ™-œ-ˆKÝ˜u™œˆJÝ" AÐ#=¨°t°t¸°tÔ(<Ð#=Ð#=Ñ>Ô>ˆNÝ# F¨4¨4¨R¨4¤LÑ1Ô1ˆOÝ" 5¨¨¨2¨¤;Ñ/Ô/ˆNð ˜Ò&Ð&Ý˜JÑ'Ô'�Ø—’�d ;Ñ/Ô/Ñ0Ô0Ð0Ø—’�T *Ñ-Ô-Ñ.Ô.Ð.Ø× Ò  ¨2¤°Ñ!5Ñ6Ô6Ð6Ø˜˜{Ñ*Ñ*�ð ˜Ò&Ð&ð ˜!’)�)Ý˜NÑ+Ô+�Ø—’˜a¥ oÑ!6Ô!6Ñ7Ô7Ð7Ø—’˜Q¥ ^Ñ 4Ô 4Ñ5Ô5Ð5Ø× Ò   I¨a¤L°4Ñ$7Ñ8Ô8Ð8Ø˜ Ñ+Ñ+�ð ˜!’)�)ð ˜2 Ñ-Ñ-°Ñ2ˆØ˜B Ñ.Ñ.°!Ñ3ˆà�b˜5‘jÑ  '¨B°©JÑ"6Ø�b˜4‘iÑ ¨2°©9Ñ!4ð6ˆð �(˜F I¨v°uÐ<Ð<r   )r   r   r   rS   rR  rµ   r¶   s   @r   rn  rn  9  sN   ø€ € € € € ð8ð 8ð 8ð 8ð 8ð
Y=ð Y=ð Y=ð Y=ð Y=ð Y=ð Y=r   rn  c                   ó6   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zˆ xZS )ÚRadialGradientc                 óˆ   •— t          ¦   «                              |||¦  «         || _        || _        |\  | _        | _        d S rU   )r®   rS   ÚcenterÚshapeÚ	size_typeÚsize)rI   r:  r•  r—  r”  r9  r8  r°   s          €r   rS   zRadialGradient.__init__œ  sA   ø€ Ý‰Œ×Ò˜ i°Ñ=Ô=Ð=àˆŒàˆŒ
ð %)Ñ!ˆŒ˜œ	˜	˜	r   c           	      ó  ‡— t          | j        ¦  «        dk    rddd g | j        d         gg fS | j        \  }}}}t          |||¦  «        }t          |||¦  «        }|dk    r||z
  }|dk    r||z
  } | j        |                      |||||¦  «        Ž \  }}	|	|z  }
t          | j        ¦  «        }t          || j        | j	        |¦  «        \  }}| j
        sÆ|d         dk    rZ|d         |d         k    rH|                     dd¦  «         |                     d|d         ¦  «         |                     dd¦  «         |d         |d         k    rN|                     |d         dz   ¦  «         |                     |d         ¦  «         |                     d¦  «         |d         dk     rê| j
        r2|d         |d         z
  }|d|d          |z  z   z  Šˆfd„|D ¦   «         }n±|d         dk    rddd g | j        d         gg fS t          |¦  «        D ]�\  }}|dk    r||d …         ||d …         }} na|dk    rZ||         }||dz
           }||dz
           }|dk     sJ ‚t          ||||g|dd|g¦  «        }|g||d …         ¢}dg||d …         ¢} nŒ‚t          |¦  «        \  }}}||k    r | j
        rt          ||¦  «        }ddd g |gg fS |||
z  ||||
z  |f}| j
        r |                      |||
||||¦  «        \  }}}}|
d	||||fS )
Nr   r=  r   ÚrightÚbottomrw  r‹   c                 ó   •— g | ]}|‰z   ‘ŒS r   r   )rõ   rö   Úoffsets     €r   rø   z)RadialGradient.layout.<locals>.<listcomp>Ñ  s   ø€ ÐIÐIÐI°8˜X¨Ñ.ÐIÐIÐIr   Úradial)r  r"  r”  r   Ú_handle_degenerateÚ_resolve_sizer!  r  r7  r8  r9  r}  r¥   rþ   r-  r  Ú_repeat)rI   r<   r=   re   Úorigin_xÚcenter_xÚorigin_yÚcenter_yÚsize_xÚsize_yr[  r"  r   r  r÷   r  rö   r2  Úprevious_colorÚprevious_positionÚintermediate_colorr  r  r]  rœ  s                           @r   rR  zRadialGradient.layout©  sí  ø€ åˆtŒ{ÑÔ˜qÒ Ð Ø�g˜t R¨$¬+°a¬.Ð)9¸2Ð=Ð=ð 26´Ñ.ˆ�(˜H hÝ˜h¨¨uÑ5Ô5ˆÝ˜h¨¨vÑ6Ô6ˆØ�wÒÐØ˜xÑ'ˆHØ�xÒÐØ Ñ(ˆHð 1˜Ô0Ø×Ò  v¨x¸À5ÑIÔIðK‰ˆ�à˜6‘/ˆõ �d”kÑ"Ô"ˆÝ.Ø�DÔ'¨Ô)9¸5ñBô BÑˆ	�5àŒ~ð 
	 ð ˜Œ|˜aÒÐ I¨a¤L°I¸a´LÒ$@Ð$@Ø× Ò   AÑ&Ô&Ð&Ø—’˜a ¨¤Ñ+Ô+Ð+Ø—’˜Q Ñ"Ô"Ð"Ø˜Œ} 	¨"¤Ò-Ð-Ø× Ò  ¨2¤°Ñ!2Ñ3Ô3Ð3Ø—’˜f RœjÑ)Ô)Ð)Ø—’˜Q‘”�Ø�QŒ<˜!ÒÐàŒ~ð à )¨"¤°	¸!´Ñ <�Ø&¨!°	¸!´¨}ÀÑ/MÑ*NÑO�ØIÐIÐIÐI¸yÐIÑIÔI�	�	ð ˜R”= AÒ%Ð%à˜g t¨R°$´+¸b´/Ð1BÀBÐFÐFÝ#,¨YÑ#7Ô#7ð ð ‘K�A�xØ 1’}�}à,2°1°2°2¬J¸	À!À"À"¼ 	˜Ø˜Ø !’|�|à & q¤	˜Ø)/°°A±¬˜Ø,5°a¸!±eÔ,<Ð)Ø0°1Ò4Ð4Ð4Ð4Ý-CØ+¨^¸UÀEÐJØ.°°1°hÐ?ñ.Aô .AÐ*ð #5Ð!B°v¸a¸b¸b´zÐ!B˜Ø%&Ð$7¨°1°2°2¬Ð$7˜	Ø˜ð $õ ":¸)Ñ!DÔ!DÑˆˆt�Yð �DŠ=ˆ=˜Tœ^ˆ=Ý*¨6°9Ñ=Ô=ˆEØ�g˜t R¨%¨°"Ð4Ð4ð �h Ñ(¨%Ø�h Ñ(¨$ð0ˆð Œ>ð 	JØ/3¯|ª|Ø�v˜w¨°	¸6À5ñ0Jô 0JÑ,ˆF�I˜v uð ˜ &¨)°V¸UÐBÐBr   c           
      ó`  ‡‡‡— |                      ¦   «         }|                      ¦   «         }	‰                      ¦   «         Š|d         |d         z
  }
t          t          j        ||d         z
  ||z  |d         z
  ¦  «        t          j        ||d         z
  |d          |z  ¦  «        t          j        |d          ||z  |d         z
  ¦  «        t          j        |d          |d          |z  ¦  «        ¦  «        }t          j        ||d         z
  |
z  ¦  «        }|dk    rQd|z   }||z  }g |¢d‘|z  d d…         }ˆfd„t          |¦  «        D ¦   «         Šg |d d…         ¢|d         |
|z  z   ‘R }|d         dk    r|‰||fS |d         |
z  }g |d d…         ¢d‘|dd …         ¢R }t          |¦  «        Š‰r2||‰z  z  }|dg|	¢‰z  z  }ˆˆfd„t          ‰¦  «        D ¦   «         ‰z   Š|‰z
  }|dk    r|‰||fS ‰d         ‰d         fd	k    sJ ‚d|cxk     rdk     sn J ‚‰d d d…         }d|z
  }t          |d¬
¦  «        D ]é\  }}||k    rC|| d …         |z   }g |	| d …         ¢d‘|¢}ˆfd„‰| d …         D ¦   «         }|‰z   Š|‰||fc S ||k     r•||          }||dz
            }‰|dz
            }||||g}||||g}t          ||¦  «        }|g||dz
   d …         ¢|¢}dg|	|dz
   d …         ¢d‘|¢}ˆfd„‰|dz
   d …         D ¦   «         }|dz
  ‰z
  g|¢‰¢R Š|‰||fc S Œêd S )Né   rÉ   r   r   r‹   c                 ó$   •— g | ]}‰D ]}||z   ‘ŒŒS r   r   )rõ   r  rö   r   s      €r   rø   z*RadialGradient._repeat.<locals>.<listcomp>  sG   ø€ ð Oð Oð OØ!"ÀIðOð OØ8@��H‘ðOð Oð Oð Or   rˆ   c                 ó*   •— g | ]}‰D ]
}|‰z
  |z   ‘ŒŒS r   r   )rõ   r  rö   Úfull_repeatÚoriginal_positionss      €€r   rø   z*RadialGradient._repeat.<locals>.<listcomp>#  sG   ø€ ð 4ð 4ð 4Ø/0Ø 2ð4ð 4àð �K‘ (Ñ*ð4ð 4ð 4ð 4r   rF  )Ústartc                 ó    •— g | ]
}|‰z
  d z
  ‘ŒS r@  r   ©rõ   rö   r®  s     €r   rø   z*RadialGradient._repeat.<locals>.<listcomp>:  s3   ø€ ð !=ð !=ð !=à ð ˜{Ñ*¨QÑ.ð!=ð !=ð !=r   c                 ó    •— g | ]
}|d z
  ‰z
  ‘ŒS r@  r   r²  s     €r   rø   z*RadialGradient._repeat.<locals>.<listcomp>K  s/   ø€ ð !6ð !6ð !6Ø3;�H˜q‘L ;Ñ.ð!6ð !6ð !6r   )	Úcopyr^   r>   rz  Úceilrÿ   Úintrþ   r-  )rI   r<   r=   r[  r]  r   r"  r  Úoriginal_colorsÚoriginal_hintsÚgradient_lengthÚmax_distanceÚrepeat_afterÚrepeatÚrepeat_beforeÚpartial_repeatÚreverser@   r  rö   Únew_positionsr2  Ú
next_colorÚnext_positionÚaverage_colorsÚaverage_positionsÚ
zero_colorr®  r¯  s        `                     @@r   r   zRadialGradient._repeatû  sÊ  øøø€ à Ÿ+š+™-œ-ˆØŸš™œˆØ&Ÿ^š^Ñ-Ô-ÐØ  œ) f¨Q¤iÑ/ˆõ ÝŒJ�u˜v aœyÑ(¨&°7Ñ*:¸VÀA¼YÑ*FÑGÔGÝŒJ�u˜v aœyÑ(¨6°!¬9¨*°wÑ*>Ñ?Ô?ÝŒJ˜˜qœ	�z 6¨GÑ#3°f¸Q´iÑ#?Ñ@Ô@ÝŒJ˜˜qœ	�z F¨1¤I :°Ñ#7Ñ8Ô8ñ	:ô :ˆõ
 ”y ,°¸´Ñ":¸oÑ!MÑNÔNˆØ˜!ÒÐà˜Ñ%ˆFØ�fÑˆFØ �u�[˜a�[ 6Ñ)¨3¨B¨3Ô/ˆEðOð Oð Oð OÝ&+¨F¡m¤mðOñ Oô OˆIàN�v˜b˜q˜b”zÐN 6¨!¤9¨ÀÑ/MÑ#MÐNÐNˆFà�!Œ9˜Š>ˆ>à˜9 f¨eÐ3Ð3ð ˜qœ	 OÑ3ˆð /�6˜"˜1˜"”:Ð.˜qÐ. 6¨!¨"¨"¤:Ð.Ð.ˆõ ˜-Ñ(Ô(ˆØð 	@à�o¨Ñ3Ñ3ˆFØ�aÐ)˜.Ð)¨KÑ7Ñ7ˆEð4ð 4ð 4ð 4ð 4Ý49¸+Ñ4FÔ4Fð4ñ 4ô 4à6?ñ@ˆIð
 '¨Ñ4ˆØ˜QÒÐà˜9 f¨eÐ3Ð3ð
 # 1Ô%Ð'9¸"Ô'=Ð>À&ÒHÐHÐHÐHØ�>Ð%Ð%Ò%Ð% AÒ%Ð%Ð%Ð%Ð%Ð%Ø$ T T r TÔ*ˆØ�NÑ"ˆÝ$ W°AÐ6Ñ6Ô6ð 	8ð 	8‰KˆAˆxØ˜5Ò Ð ð )¨!¨¨¨Ô-°Ñ6�Ø9˜.¨!¨¨¨Ô-Ð9¨qÐ9°5Ð9�ð!=ð !=ð !=ð !=à$6¸°r°s°sÔ$;ð!=ñ !=ô !=�ð *¨IÑ5�	Ø˜y¨&°%Ð7Ð7Ð7Ð7Ø˜%ÒÐð (¨¨Ô+�Ø,¨q°1©u¨XÔ6�
Ø 2°Q¸±U°8Ô <�Ø"'¨°
¸JÐ!G�Ø%-¨u°e¸]Ð$KÐ!Ý3°NÐDUÑVÔV�
Ø$ÐI ¸¸1¹°v°w°wÔ'?ÐIÀ&ÐI�ØÐ@˜^¨a°©c¨F¨G¨GÔ4Ð@°aÐ@¸%Ð@�ð!6ð !6ð !6ð !6à)¨A°©E¨(¨)¨)Ô4ð!6ñ !6ô !6�ð # Q™Y¨Ñ4ÐQ°}ÐQÀyÐQÐQ�	Ø˜y¨&°%Ð7Ð7Ð7Ð7ð!  ð	8ð 	8r   c           	      óP  — | j         dk    r0| j        \  }}t          |||¦  «        }t          |||¦  «        }||fS t          |¦  «        }t          ||z
  ¦  «        }	t          |¦  «        }
t          ||z
  ¦  «        }| j                             d¦  «        rt
          nt          }| j                             d¦  «        r5| j        dk    r |||	|
|¦  «        }||fS  |||	¦  «         ||
|¦  «        fS | j        dk    r^ |t          j
        ||
¦  «        t          j
        ||¦  «        t          j
        |	|
¦  «        t          j
        |	|¦  «        ¦  «        }||fS  |||
f||f|	|
f|	|fd„ ¬¦  «        \  }}|t          j        d¦  «        z  |t          j        d¦  «        z  fS )z+Resolve circle size of the radial gradient.ÚexplicitÚclosestÚsideÚcirclec                 ó   — t          j        | Ž S rU   )r>   rz  )r  s    r   ú<lambda>z.RadialGradient._resolve_size.<locals>.<lambda>k  s   € �$œ* a˜.€ r   )rt   rÉ   )r–  r—  r   r\   Ú
startswithrü   r^   Úendswithr•  r>   rz  Úsqrt)rI   r<   r=   r¢  r¤  re   r¥  r¦  rt  r™  ru  rš  ÚpickÚsize_xyÚcorner_xÚcorner_ys                   r   rŸ  zRadialGradient._resolve_sizeQ  sË  € àŒ>˜ZÒ'Ð'Ø!œY‰NˆF�FÝ ¨¨uÑ5Ô5ˆFÝ ¨¨vÑ6Ô6ˆFØ˜6�>Ð!Ý�8‰}Œ}ˆÝ�E˜HÑ$Ñ%Ô%ˆÝ�(‰mŒmˆÝ�V˜hÑ&Ñ'Ô'ˆØ”i×*Ò*¨9Ñ5Ô5Ð>�sˆs½3ˆØŒ9×Ò˜fÑ%Ô%ð 	8ØŒz˜XÒ%Ð%Ø˜$˜t U¨C°Ñ8Ô8�Ø Ð'Ð'à�4˜˜eÑ$Ô$ d d¨3°Ñ&7Ô&7Ð7Ð7àŒ:˜Ò!Ð!Ø�d�4œ: d¨CÑ0Ô0µ$´*¸TÀ6Ñ2JÔ2JÝœ: e¨SÑ1Ô1µ4´:¸eÀVÑ3LÔ3LñNô NˆGà˜GÐ#Ð#à!˜TØ�3ˆK˜$ ˜¨%°¨¸¸v°Ø(Ð(ð*ñ *ô *Ñˆ�(ð �$œ) A™,œ,Ñ&¨µ4´9¸Q±<´<Ñ(?Ð?Ð?r   c                 ó^   — ||cxk    rdk    rn ndx}}n|dk    rd}d}n
|dk    rd}d}||fS )ztHandle degenerate radial gradients.

        See https://drafts.csswg.org/css-images-3/#degenerate-radials

        r   gH¯¼šò×z>g    ÐcAr   )rI   r¥  r¦  s      r   rž  z!RadialGradient._handle_degeneraten  sd   € ð �VÐ Ð Ò Ð ˜qÒ Ð Ð Ð Ð Ø"Ð"ˆF�V�VØ�qŠ[ˆ[ØˆFØˆFˆFØ�qŠ[ˆ[ØˆFØˆFØ�vˆ~Ðr   )	r   r   r   rS   rR  r   rŸ  rž  rµ   r¶   s   @r   r’  r’  ›  s‚   ø€ € € € € ð)ð )ð )ð )ð )ðPCð PCð PCðdT8ð T8ð T8ðl@ð @ð @ð:ð ð ð ð ð ð r   r’  )NNrÕ   )/r   rD   r>   r£   Úhashlibr   r   Ú	itertoolsr   Úpathlibr   Ú	xml.etreer   r“   ÚPILr   r	   r
   Útinycss2.color5r   ro   r   Úlayout.percentr   Úloggerr   Úsvgr   Úurlsr   r   ÚLOAD_TRUNCATED_IMAGESÚ
ValueErrorr   r   ÚObjectrq   rp   r½   rç   r4   r  r  r-  r/  rn  r’  r   r   r   ú<module>râ     s  ðØ 1Ð 1à 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'à Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )ð #'€	Ô ðð ð ð ð ˜
ñ ô ð ð@"ð @"ð @"ð @"ð @"ñ @"ô @"ð @"ðF	&ð 	&ð 	&ð 	&ð 	&�”ñ 	&ô 	&ð 	&ð1ð 1ð 1ð 1ð 1�U”\ñ 1ô 1ð 1ð!Qð !Qð !Qð !Qð !Qñ !Qô !Qð !QðH KOØ1=ð0ð 0ð 0ð 0ðfð ð ð01ð 1ð 1ðh"ð "ð "ð&:ð :ð :ðDc"ð c"ð c"ð c"ð c"ñ c"ô c"ð c"ðL_=ð _=ð _=ð _=ð _=�Xñ _=ô _=ð _=ðDað að að að a�Xñ aô að að að ar   