§
    £”jmI  ã            
       óè  — d Z ddlmZ ddlmZmZmZmZmZm	Z	m
Z
 ddlmZmZ ddlmZmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZmZmZmZ dd	l m!Z! d%d„Z"d„ Z# G d„ de¦  «        Z$ G d„ de¦  «        Z% G d„ de¦  «        Z&d„ Z'd„ Z(d„ Z) G d„ dee¦  «        Z*e+dk    rNdZ, edd¦  «        Z-e- .                     e*dd
dddd¬¦  «        ¦  «         e- /                    d d!gd"d#¬$¦  «         d
S d
S )&z3.3.0é    )Úcolors)ÚisNumberÚisColorOrNoneÚ	isBooleanÚisListOfNumbersÚOneOfÚisListOfColorsÚisNumberOrNone)ÚAttrMapÚAttrMapValue)ÚDrawingÚGroupÚLineÚRectÚ	LineShapeÚ
definePathÚEmptyClipPath)ÚWidget)Úradians)Ú	translateÚrotateÚmmultÚtransformPointsÚinverse)ÚflattenNc                 óÐ   — |dk    r| dz   }d} |dk    rd}g }||dz  z
  }	 | t          |¦  «        |z  z   }|dk    r||k    rn#|dk     r||k    rn|                     |¦  «         ŒE|S )z6A range function, that does accept float increments...Ng        g      ð?g-Cëâ6?é   r   )ÚlenÚappend)ÚstartÚendÚincÚLÚnexts        úo/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/reportlab/graphics/widgets/grids.pyÚfranger&      s˜   € ð ˆd‚{€{Ø�c‰kˆØˆà
ˆd‚{€{Øˆà
€AØ
��F‘
Ñ
€CðØ•s˜1‘v”v ‘|Ñ#ˆØ�Š7ˆ7�t˜s’{�{ØØ�1ŠWˆW˜ š˜ØØ	�Š�‰Œˆðð €Hó    c                 ó¦   — g }t          t          | dd…         ¦  «        ¦  «        D ])}|                     | |dz            | |         z
  ¦  «         Œ*|S )z}Returns a list of distances between adjacent numbers in some input list.

    E.g. [1, 1, 2, 3, 5, 7] -> [0, 1, 1, 2, 2]
    Néÿÿÿÿr   )Úranger   r   )ÚlistÚdÚis      r%   ÚmakeDistancesListr.   &   sY   € ð 	€AÝ•3�t˜C˜R˜C”y‘>”>Ñ"Ô"ð &ð &ˆØ	�Š��a˜‘c”˜T !œWÑ$Ñ%Ô%Ð%Ð%à€Hr'   c            
       ó@  — e Zd ZdZ ed.i d eed¬¦  «        “d eed¬¦  «        “d eed¬¦  «        “d	 eed
¬¦  «        “d e ed¦  «        d¬¦  «        “d e ed¦  «        d¬¦  «        “d e ed¦  «        d¬¦  «        “d eed¬¦  «        “d eed¬¦  «        “d eed¬¦  «        “d ee	d¬¦  «        “d ee
d¬¦  «        “d ee
d¬¦  «        “d eed ¬¦  «        “d! ee
d"¬¦  «        “d# eed$¬¦  «        “ŽZd%„ Zd&„ Zd'„ Zd/d)„Zd*„ Zd+„ Zd,„ Zd-S )0ÚGridaŽ  This makes a rectangular grid of equidistant stripes.

    The grid contains an outer border rectangle, and stripes
    inside which can be drawn with lines and/or as solid tiles.
    The drawing order is: outer rectangle, then lines and tiles.

    The stripes' width is indicated as 'delta'. The sequence of
    stripes can have an offset named 'delta0'. Both values need
    to be positive!
    Úxú!The grid's lower-left x position.©ÚdescÚyú!The grid's lower-left y position.ÚwidthúThe grid's width.ÚheightúThe grid's height.Úorientation©ÚverticalÚ
horizontalú1Determines if stripes are vertical or horizontal.ÚuseLines)r   r   z+Determines if stripes are drawn with lines.ÚuseRectsz6Determines if stripes are drawn with solid rectangles.Údeltaz+Determines the width/height of the stripes.Údelta0z3Determines the stripes initial width/height offset.Ú
deltaStepsz%List of deltas to be used cyclically.ÚstripeColorsz:Colors applied cyclically in the right or upper direction.Ú	fillColorz&Background color for entire rectangle.ÚstrokeColorzColor used for lines.ÚstrokeWidthúWidth used for lines.ÚrectStrokeColorzColor for outer rect stroke.ÚrectStrokeWidthzWidth for outer rect stroke.c                 ó4  — d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        g | _	        t          j        | _        t          j        t          j        t          j        g| _        t          j        | _        d| _        d S )Nr   éd   r=   r   é   é   )r1   r5   r7   r9   r;   r@   rA   rB   rC   rD   r   ÚwhiterF   ÚredÚgreenÚbluerE   ÚblackrG   rH   )Úselfs    r%   Ú__init__zGrid.__init__\   s   € ØˆŒØˆŒØˆŒ
ØˆŒØ%ˆÔØˆŒØˆŒØˆŒ
ØˆŒØˆŒÝœˆŒÝ#œZ­¬µv´{ÐCˆÔÝ!œ<ˆÔØˆÔÐÐr'   c                 ól   — t          dd¦  «        }t          ¦   «         }|                     |¦  «         |S ©NrM   )r   r0   Úadd©rU   ÚDÚgs      r%   Údemoz	Grid.demom   s.   € Ý�C˜ÑÔˆå‰FŒFˆØ	�Šˆa‰Œˆàˆr'   c                 óø   — t          | d| j        ¦  «        }t          | d| j        ¦  «        }| j        s|rD|rBt	          | j        | j        | j        | j        ¦  «        }| j        |_        ||_        ||_        |S d S )NrJ   rK   )	ÚgetattrrG   rH   rF   r   r1   r5   r7   r9   )rU   rG   rH   Úrects       r%   ÚmakeOuterRectzGrid.makeOuterRectu   s‚   € Ý˜dÐ#4°TÔ5EÑFÔFˆÝ˜dÐ#4°TÔ5EÑFÔFˆØŒ>ð 	˜kð 	¨kð 	Ý˜œ ¤¨¬
°D´KÑ@Ô@ˆDØ!œ^ˆDŒNØ*ˆDÔØ*ˆDÔØˆKà�4r'   r   c                 ó¾  — | j         | j        }}|r|}n|}| j        rf|| j        z   g}d}	 |d         ||z   k    r|d= nD|                     |d         | j        |t          | j        ¦  «        z           z   ¦  «         |dz   }ŒWn!t          || j        z   ||z   | j        ¦  «        }|                     ||z   ¦  «         | j        dk    r|                     d|¦  «         |S )z1Returns a list of positions where to place lines.r   r   r)   )	r7   r9   rD   rC   r   r   r&   rB   Úinsert)rU   r    ÚisXÚwÚhÚlengthÚrr-   s           r%   ÚmakeLinePosListzGrid.makeLinePosList�   s  € ð Œz˜4œ;ˆ1ˆØð 	ØˆFˆFàˆFØŒ?ð 
	HØ˜œÑ$Ð%ˆAØˆAðØ�R”5˜5 6™>Ò)Ð)Ø˜"˜ØØ—’˜˜2œ ¤°µS¸¼Ñ5IÔ5IÑ1IÔ!JÑJÑKÔKÐKØ˜‘E�ðð õ �u˜tœ{Ñ*¨E°F©N¸D¼JÑGÔGˆAà	�Š�˜‘Ñ Ô Ð ØŒ;˜!ÒÐØ�HŠH�Q˜ÑÔÐàˆr'   c                 ó6  — t          ¦   «         }| j        | j        }}| j        dk    rñ| j        dk    rn|                      | j        d¬¦  «        }|D ]N}t          || j        || j        |z   ¦  «        }| j	        |_	        | j
        |_
        |                     |¦  «         ŒOnx| j        dk    rm|                      | j        d¬¦  «        }|D ]N}t          | j        || j        |z   |¦  «        }| j	        |_	        | j
        |_
        |                     |¦  «         ŒO|S ©Nr   r=   )rd   r>   r   )r   r7   r9   r@   r;   ri   r1   r   r5   rG   rH   rY   )rU   Úgroupre   rf   rh   r1   Úliner5   s           r%   ÚmakeInnerLineszGrid.makeInnerLinesœ   s#  € å‘”ˆàŒz˜4œ;ˆ1ˆàŒ=˜AÒÐØÔ :Ò-Ð-Ø×(Ò(¨¬°QÐ(Ñ7Ô7�Øð $ð $�AÝ  4¤6¨1¨d¬f°q©jÑ9Ô9�DØ'+Ô'7�DÔ$Ø'+Ô'7�DÔ$Ø—I’I˜d‘O”O�O�Oð	$ð
 Ô! \Ò1Ð1Ø×(Ò(¨¬°QÐ(Ñ7Ô7�Øð $ð $�AÝ ¤¨¨4¬6°A©:°qÑ9Ô9�DØ'+Ô'7�DÔ$Ø'+Ô'7�DÔ$Ø—I’I˜d‘O”O�O�Oàˆr'   c                 ó   — t          ¦   «         }| j        | j        }}| j        dk    �r%| j        }| j        dk    r|                      | j        d¬¦  «        }n'| j        dk    r|                      | j        d¬¦  «        }t          |¦  «        }d}t          t          |¦  «        ¦  «        D ]¡}| j        dk    r&||         }	t          |	| j        ||         |¦  «        }
n0| j        dk    r%||         }t          | j        ||||         ¦  «        }
||t          |¦  «        z           |
_        d |
_        |                     |
¦  «         |dz   }Œ¢|S rk   )r   r7   r9   rA   rE   r;   ri   r1   r5   r.   r*   r   r   rF   rG   rY   )rU   rl   re   rf   Úcolsrh   Údistr-   Újr1   Ústriper5   s               r%   ÚmakeInnerTileszGrid.makeInnerTilesµ   sS  € å‘”ˆàŒz˜4œ;ˆ1ˆð Œ=˜AÒÑØÔ$ˆDàÔ :Ò-Ð-Ø×(Ò(¨¬°QÐ(Ñ7Ô7��ØÔ! \Ò1Ð1Ø×(Ò(¨¬°QÐ(Ñ7Ô7�å$ QÑ'Ô'ˆDàˆAÝ�3˜t™9œ9Ñ%Ô%ð 
ð 
�ØÔ# zÒ1Ð1Ø˜!œ�AÝ! ! T¤V¨T°!¬W°aÑ8Ô8�F�FØÔ%¨Ò5Ð5Ø˜!œ�AÝ! $¤&¨!¨Q°°Q´Ñ8Ô8�FØ#'¨­C°©I¬I©Ô#6�Ô Ø%)�Ô"Ø—	’	˜&Ñ!Ô!Ð!Ø˜‘E��àˆr'   c                 ó  — t          ¦   «         }|                     |                      ¦   «         ¦  «         |                     |                      ¦   «         ¦  «         |                     |                      ¦   «         d¬¦  «         |S )NÚ
_gridLines©Úname)r   rY   ra   rt   rn   )rU   rl   s     r%   Údrawz	Grid.drawÖ   sn   € å‘”ˆà�	Š	�$×$Ò$Ñ&Ô&Ñ'Ô'Ð'Ø�	Š	�$×%Ò%Ñ'Ô'Ñ(Ô(Ð(Ø�	Š	�$×%Ò%Ñ'Ô'¨\ˆ	Ñ:Ô:Ð:àˆr'   N© )r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r	   r   r
   Ú_attrMaprV   r]   ra   ri   rn   rt   ry   rz   r'   r%   r0   r0   3   sô  € € € € € ð	ð 	ð ˆwð 
ð 
ð 
ØˆL˜Ð(KÐLÑLÔLÐLð
àˆL˜Ð(KÐLÑLÔLÐLð
ð �˜XÐ,?Ð@Ñ@Ô@Ð@ð
ð �˜hÐ-AÐBÑBÔBÐBð	
ð
 #�l 5 5Ð)CÑ#DÔ#DØDðFñ Fô Fð Fð
ð  �<   f¡¤Ø>ð@ñ @ô @ð @ð
ð  �<   f¡¤ØIðKñ Kô Kð Kð
ð �˜XØ>ð@ñ @ô @ð @ð
ð �˜hØFðHñ Hô Hð Hð
ð "�\ /Ø8ð:ñ :ô :ð :ð
ð" $�| NØMðOñ Oô Oð Oð#
ð& !�L Ø9ð;ñ ;ô ;ð ;ð'
ð* #�l =Ø(ð*ñ *ô *ð *ð+
ð. #�l 8Ø(ð*ñ *ô *ð *ð/
ð2 '˜, }Ð;YÐZÑZÔZÐZð3
ð4 '˜, ~Ð<ZÐ[Ñ[Ô[Ð[ð5
€Hð:ð ð ð"ð ð ð
ð 
ð 
ðð ð ð ð6ð ð ð2ð ð ðBð ð ð ð r'   r0   c                   óÊ   — e Zd ZdZ e eed¬¦  «         eed¬¦  «         eed¬¦  «         eed¬¦  «         edd¬¦  «         edd	¬¦  «        ¬
¦  «        Zd„ Zd„ Z	d„ Z
dS )Ú
DoubleGridzFThis combines two ordinary Grid objects orthogonal to each other.
    r2   r3   r6   r8   r:   NzThe first grid component.zThe second grid component.)r1   r5   r7   r9   Úgrid0Úgrid1c                 ó>  — d| _         d| _        d| _        d| _        t	          ¦   «         }| j         |_         | j        |_        | j        |_        | j        |_        d|_        d|_        d|_        d|_        d|_	        g |_
        t          j        |_        t          j        t          j        t          j        g|_        t          j        |_        d|_        t	          ¦   «         }| j         |_         | j        |_        | j        |_        | j        |_        d|_        d|_        d|_        d|_        d|_	        g |_
        t          j        |_        t          j        t          j        t          j        g|_        t          j        |_        d|_        || _        || _        d S )Nr   rM   r=   r   rN   r>   )r1   r5   r7   r9   r0   r;   r@   rA   rB   rC   rD   r   rP   rF   rQ   rR   rS   rE   rT   rG   rH   r‚   rƒ   )rU   Úg0Úg1s      r%   rV   zDoubleGrid.__init__î   s8  € ØˆŒØˆŒØˆŒ
ØˆŒå‰VŒVˆØŒvˆŒØŒvˆŒØ”:ˆŒØ”KˆŒ	Ø#ˆŒØˆŒØˆŒØˆŒØˆŒ	ØˆŒÝ”|ˆŒÝ!œ:¥v¤|µV´[ÐAˆŒÝœˆŒØˆŒå‰VŒVˆØŒvˆŒØŒvˆŒØ”:ˆŒØ”KˆŒ	Ø%ˆŒØˆŒØˆŒØˆŒØˆŒ	ØˆŒÝ”|ˆŒÝ!œ:¥v¤|µV´[ÐAˆŒÝœˆŒØˆŒàˆŒ
ØˆŒ
ˆ
ˆ
r'   c                 ól   — t          dd¦  «        }t          ¦   «         }|                     |¦  «         |S rX   )r   r�   rY   rZ   s      r%   r]   zDoubleGrid.demo   s.   € Ý�C˜ÑÔˆÝ‰LŒLˆØ	�Šˆa‰ŒˆØˆr'   c                 ó|  — t          ¦   «         }| j        | j        }}|j        dk    r|j        dk    r||fp||f}|D ])}|                     |                     ¦   «         ¦  «         Œ*|D ]R}|                     |                     ¦   «         ¦  «         |                     |                     ¦   «         d¬¦  «         ŒS|S )Nr   r   rv   rw   )r   r‚   rƒ   rA   rY   ra   rt   rn   )rU   rl   r…   r†   ÚGr\   s         r%   ry   zDoubleGrid.draw'  sÉ   € Ý‘”ˆØ”˜TœZˆBˆð ŒK˜1ÒÐ= ¤°Ò!1Ð=°r¸"°gÐHÀ"ÀRÀˆØð 	)ð 	)ˆAØ�IŠI�a—o’oÑ'Ô'Ñ(Ô(Ð(Ð(Øð 	<ð 	<ˆAØ�IŠI�a×&Ò&Ñ(Ô(Ñ)Ô)Ð)Ø�IŠI�a×&Ò&Ñ(Ô(¨lˆIÑ;Ô;Ð;Ð;àˆr'   )r{   r|   r}   r~   r   r   r   r   rV   r]   ry   rz   r'   r%   r�   r�   á   sÖ   € € € € € ðð ð ˆwØˆL˜Ð(KÐLÑLÔLØˆL˜Ð(KÐLÑLÔLØ�˜XÐ,?Ð@Ñ@Ô@Ø�˜hÐ-AÐBÑBÔBØ�˜TÐ(CÐDÑDÔDØ�˜TÐ(DÐEÑEÔEð
ñ 
ô 
€Hð'ð 'ð 'ðdð ð ðð ð ð ð r'   r�   c                   óZ  — e Zd ZdZ e eed¬¦  «         eed¬¦  «         eed¬¦  «         eed¬¦  «         e ed¦  «        d¬¦  «         eed	¬¦  «         eed
¬¦  «         eed¬¦  «         eed¬¦  «         eed¬¦  «         ee	d¬¦  «        ¬¦  «        Z
d„ Zd„ Zd„ Zd„ ZdS )Ú
ShadedRecta  This makes a rectangle with shaded colors between two colors.

    Colors are interpolated linearly between 'fillColorStart'
    and 'fillColorEnd', both of which appear at the margins.
    If 'numShades' is set to one, though, only 'fillColorStart'
    is used.
    r2   r3   r6   r8   r:   r<   r?   ú#The number of interpolating colors.zStart value of the color shade.zEnd value of the color shade.zColor used for border line.rI   ú#True if shading reverses in middle.)r1   r5   r7   r9   r;   Ú	numShadesÚfillColorStartÚfillColorEndrG   rH   ÚcylinderModec                 ó  — d| _         d| _        d| _        d| _        d| _        d| _        t          j        | _        t          j	        | _
        t          j	        | _        d| _        d| _        |                      |¦  «         d S )Nr   rM   r=   rN   rO   )r1   r5   r7   r9   r;   rŽ   r   Úpinkr�   rT   r�   rG   rH   r‘   ÚsetProperties©rU   Úkws     r%   rV   zShadedRect.__init__N  su   € ØˆŒØˆŒØˆŒ
ØˆŒØ%ˆÔØˆŒÝ$œkˆÔÝ"œLˆÔÝ!œ<ˆÔØˆÔØˆÔØ×Ò˜2ÑÔÐÐÐr'   c                 ól   — t          dd¦  «        }t          ¦   «         }|                     |¦  «         |S rX   )r   r‹   rY   rZ   s      r%   r]   zShadedRect.demo\  s.   € Ý�C˜ÑÔˆÝ‰LŒLˆØ	�Šˆa‰Œˆàˆr'   c                 ó4  — | j         | j        | j        | j        | j        | j        f\  }}}}}}|dk     r|dk    r||z   }| }| j        dk    r||}}n@|dk     r|dk    r||z   }| }| j        dk    r||}}n|dk     r|dk     r||z   }| }||z   }| }||||||fS )z8Flip rectangle's corners if width or height is negative.r   r=   r>   )r1   r5   r7   r9   r�   r�   r;   )rU   r1   r5   r7   r9   r�   r�   s          r%   Ú_flipRectCornerszShadedRect._flipRectCornersc  sð   € à<@¼FÀDÄFÈDÌJÐX\ÔXcÐeiÔexÐz~ô  {Lð  =LÑ9ˆˆ1ˆe�V˜^¨\Ø�1Š9ˆ9˜ !š˜Ø�E‘	ˆAØ�FˆEØÔ Ò+Ð+ÈLÐZh¸\¨^øØ�AŠXˆX˜% š'˜'Ø�F‘
ˆAØ�WˆFØÔ Ò-Ð-ÈlÐ\j¸|¨~øØ�aŠZˆZ˜F QšJ˜JØ�E‘	ˆAØ�FˆEØ�F‘
ˆAØ�WˆFØ�!�U˜F N°LÐ@Ð@r'   c                 ó^  — t          ¦   «         }|                      ¦   «         \  }}}}}}| j        dk    }| j        }	t	          t	          | dd ¦  «        dd ¦  «        }
|
�r|
j        }|                     ¦   «          |                     ¦   «         }|                     ||||¦  «         | 	                    |d¬¦  «         |	rn|r6 |
||||dz  z   |||fd¬¦  «          |
||dz  z   |||z   |||fd¬¦  «         ne |
|||||dz  z   ||fd¬¦  «          |
|||dz  z   |||z   ||fd¬¦  «         n/|r |
||||z   |||fd¬¦  «         n |
|||||z   ||fd¬¦  «         | 
                    ¦   «          �nc| j        }|	r"|dz  s|d	z   }t          |d	z
  dz  ¦  «        d	z   }t          |¦  «        }|r"|d	k    r|g}n9t          |||z   ||z  ¦  «        }n!|d	k    r|g}nt          |||z   ||z  ¦  «        }|D ]á}|rt          ||||z  |¦  «        pt          |||||z  ¦  «        }|	rc|                     |¦  «        |k    r%t#          j        ||||         |d
         |¦  «        }nIt#          j        |||d         ||         |¦  «        }n$t#          j        |||d         |d
         |¦  «        }||_        ||_        d	|_        |                     |¦  «         Œâ| j        rQ| j        dk    rFt          ||||¦  «        }| j        |_        | j        |_        d |_        |                     |¦  «         |S )Nr=   Ú_canvasÚlinearGradientr   )ÚstrokerO   F)Úextendr   r)   )r   r™   r;   r‘   r_   Ú__self__Ú	saveStateÚ	beginPathr`   ÚclipPathÚrestoreStaterŽ   ÚintÚfloatr&   r   Úindexr   ÚlinearlyInterpolatedColorrF   rG   rH   rY   )rU   rl   r1   r5   re   rf   Úc0Úc1r=   r‘   ÚlinGÚcanvÚprŽ   ÚhalfNumShadesÚnumÚVÚvrs   Úcolr`   s                        r%   ry   zShadedRect.drawu  sá  € å‘”ˆØ!×2Ò2Ñ4Ô4Ñˆˆ1ˆa��B˜ØÔ# zÒ1ˆØÔ(ˆÝ•w˜t I¨dÑ3Ô3Ð4DÀTÑJÔJˆØñ 0	"Ø”=ˆDØ�NŠNÑÔÐØ—’Ñ Ô ˆAØ�FŠF�1�a˜˜AÑÔÐØ�MŠM˜! AˆMÑ&Ô&Ð&Øð >Øð BØ�D˜˜A˜q  1¡™u a¨"¨R¨¸Ð?Ñ?Ô?Ð?Ø�D˜˜1˜Q™3™  1 Q¡3¨¨B¨r¨7¸5ÐAÑAÔAÐAÐAà�D˜˜A˜q ! A a¡C¡%¨"¨R¨¸Ð?Ñ?Ô?Ð?Ø�D˜˜A˜a ™c™E 1 a¨¡c¨B¨r¨7¸5ÐAÑAÔAÐAÐAàð >Ø�D˜˜A˜q ™s A¨¨2 w°uÐ=Ñ=Ô=Ð=Ð=à�D˜˜A˜q ! A¡#¨¨2 w°uÐ=Ñ=Ô=Ð=Ø×ÒÑÔÐÑàœˆIØð 9Ø  ‘{Ð;°	¸!± IÝ # Y¨q¡[°!¡OÑ 4Ô 4°qÑ 8�Ý˜	Ñ"Ô"ˆCØð 	0Ø ’>�>Ø˜�A�Aå˜q ! a¡%¨¨3©Ñ/Ô/�A�Aà ’>�>Ø˜�A�Aå˜q ! a¡%¨¨3©Ñ/Ô/�Aàð "ð "�Ø!Ð:¥d¨1¨a°°3±¸Ñ&:Ô&:ÐR½dÀ1ÀaÈÈAÈcÉEÑ>RÔ>R�Øð PØ—w’w˜q‘z”z =Ò0Ð0Ý$Ô>¸rÀ"ÀQÀ}ÔEUÐVWÐXZÔV[Ð]^Ñ_Ô_˜˜å$Ô>¸rÀ"ÀQÀqÄTÈ!ÈMÔJZÐ\]Ñ^Ô^˜˜å Ô:¸2¸bÀÀ1ÄÀaÈÄeÈQÑOÔO�CØ#&�Ô Ø%(�Ô"Ø%&�Ô"Ø—	’	˜&Ñ!Ô!Ð!Ð!ØÔð 	 Ô 0°!Ò 3Ð 3Ý˜˜1˜a Ñ#Ô#ˆDØ#Ô/ˆDÔØ#Ô/ˆDÔØ!ˆDŒNØ�IŠI�d‰OŒOˆOØˆr'   N)r{   r|   r}   r~   r   r   r   r   r   r   r   rV   r]   r™   ry   rz   r'   r%   r‹   r‹   7  sQ  € € € € € ðð ð ˆwØˆL˜Ð(KÐLÑLÔLØˆL˜Ð(KÐLÑLÔLØ�˜XÐ,?Ð@Ñ@Ô@Ø�˜hÐ-AÐBÑBÔBØ"�l 5 5Ð)CÑ#DÔ#DÐK~ÐÑÔØ �L Ð0UÐVÑVÔVØ%˜ mÐ:[Ð\Ñ\Ô\Ø#�| MÐ8WÐXÑXÔXØ"�l =Ð7TÐUÑUÔUØ"�l 8Ð2IÐJÑJÔJØ#�| IÐ4YÐZÑZÔZð
ñ 
ô 
€Hðð ð ðð ð ðAð Að Að$>ð >ð >ð >ð >r'   r‹   c           
      ó¬   — |dk    r| gS g }|dk    rB|dz
  }t          |¦  «        D ]-}|                     t          j        | |d||¦  «        ¦  «         Œ.|S )z7Return a range of intermediate colors between c0 and c1r   r   )r*   r   r   r§   )r¨   r©   ÚnÚCÚlimr-   s         r%   Ú
colorRanger¶   ¶  sl   € àˆ!‚t€t�R�Dˆ[à
€AØˆ‚s€sØ�‰cˆÝ�q‘”ð 	Gð 	GˆAØ�HŠH•VÔ5°b¸¸A¸cÀ1ÑEÔEÑFÔFÐFÐFØ€Hr'   c                 ó`   — d}d}| D ]\  }}||z  }||z  }Œt          | ¦  «        }||z  ||z  fS )z(compute average point of a set of pointsr   )r   )ÚPÚcxÚcyr1   r5   r³   s         r%   Úcentroidr»   Â  sP   € à	
€BØ	
€BØð ð ‰ˆˆ!Ø
ˆA‰ˆØ
ˆA‰ˆˆÝˆA‰Œ€AØˆa‰4��A‘ˆ:Ðr'   c                 ó$  — t          | ¦  «        \  }}t          |¦  «        }t          t          ||¦  «        t	          |¦  «        ¦  «        }t          t          || ¦  «        ¦  «        }|ddd…         }|ddd…         }	t          |¦  «        }
t          |¦  «        }t          |	¦  «        }t          |	¦  «        }	|
|_	        ||
z
  |_
        ||_        |	|z
  |_        t          t          |¦  «        ¬¦  «        }|                     |¦  «         |S )a�  
    given P a sequence P of x,y coordinate pairs and an angle in degrees
    find the centroid of P and the axis at angle theta through it
    find the extreme points of P wrt axis parallel distance and axis
    orthogonal distance. Then compute the least rectangle that will still
    enclose P when rotated by angle. Positive angles correspond to clockwise
    rotation of the enclosing rect.
    NrO   r   )Ú	transform)r»   r   r   r   r   r   r   ÚminÚmaxr1   r7   r5   r9   r   r   rY   )r¸   Úangler`   Úx0Úy0ÚthetaÚmxÚtpÚxxÚyxÚxnÚynr\   s                r%   ÚrotatedEnclosingRectrÊ   Ì  sð   € õ �a‰[Œ[�F€BˆÝ�E‰NŒN€Eå	�y˜˜BÑÔ¥ u¡¤Ñ	.Ô	.€Bõ 
•  AÑ&Ô&Ñ	'Ô	'€BØ	ˆCˆCˆaˆCŒ€BØ	ˆAˆDˆqˆDŒ€BÝ	ˆR‰Œ€BÝ	ˆR‰Œ€BÝ	ˆR‰Œ€BÝ	ˆR‰Œ€Bð €D„FØ�B‘€D„JØ€D„FØ�R‘%€D„KÝ� ™œÐ$Ñ$Ô$€AØ‡E‚Eˆ$�K„K€KØ€Hr'   c                   óº   — e Zd ZdZ ee eed¬¦  «         ee¦  «         ee¦  «         eed¬¦  «         ee	d¬¦  «         ee
¦  «        ¬¦  «        Zd„ Zd„ Zd	S )
ÚShadedPolygonzõgiven a list of points [(x0,y0),....] we construct an enclosing
    shaded rectangle and mask using the polygon points.
    At angle 0 the shading fillColorStart left --> fillColorEnd right.
    positive angles rotate the shading clockwise.
    zShading angler3   rŒ   r�   )ÚBASErÀ   r�   r�   rŽ   r‘   Úpointsc                 ó°   — d| _         t          j        | _        t          j        | _        d| _        d| _        g d¢| _        t          j
        | |¦  «         d S )NéZ   r   é2   )r)   r)   rO   rO   é   r)   )rÀ   r   rQ   r�   rR   r�   r‘   rŽ   rÎ   r   rV   r•   s     r%   rV   zShadedPolygon.__init__û  sR   € ØˆŒ
Ý$œjˆÔÝ"œLˆÔØˆÔØˆŒØ&Ð&Ð&ˆŒÝÔ˜4 Ñ#Ô#Ð#Ð#Ð#r'   c           	      ó   — | j         }t          t          |d d d…         |dd d…         ¦  «        ¦  «        }t          d|d         z   gd„ |dd …         D ¦   «         z   dgz   d d ¬¦  «        }d|_        t          ¦   «         }|                     |¦  «         | j        dz  }d|cxk    rd	k    s!n d
|cxk    rdk    sn d|cxk    rdk    rn ndnd}t          dd |¬¦  «        }dD ]!}t          ||t          | |¦  «        ¦  «         Œ"|                     t          |||¦  «        ¦  «         |                     t          ¦  «         |                     ¦   «         }d|_        | j        |_        | j        |_        |                     |¦  «         |S )NrO   r   )ÚmoveTor   c                 ó   — g | ]}d |z   ‘ŒS ))ÚlineTorz   )Ú.0r1   s     r%   ú
<listcomp>z&ShadedPolygon.draw.<locals>.<listcomp>  s   € Ð-KÐ-KÐ-KÀ¨k¸!©mÐ-KÐ-KÐ-Kr'   Ú	closePath)rF   rG   ih  é-   i;  é‡   éá   r>   r=   )rH   rG   r;   )r�   r�   rŽ   r‘   )rÎ   r+   Úzipr   Ú
isClipPathr   rY   rÀ   r‹   Úsetattrr_   rÊ   r   ÚcopyrG   rH   )rU   r¸   Úpathr\   rÀ   r;   r`   Úks           r%   ry   zShadedPolygon.draw  s§  € ØŒKˆÝ•�Q�s�s˜�s”V˜A˜a˜d ˜dœGÑ$Ô$Ñ%Ô%ˆÝ˜; q¨¤tÑ+Ð,Ð-KÐ-KÀQÀqÀrÀrÄUÐ-KÑ-KÔ-KÑKÈ[ÈMÑYØ¨ð.ñ .ô .ˆàˆŒÝ‰GŒGˆØ	�Šˆd‰ŒˆØ”
˜SÑ ˆØ&'¨ l l¢l l°¢l l l l°c¸5°o°o²o°oÀ#²o°o°o°oÈÈeÈÈÊÈÐUXÊÈÈÈÈ�l�lÐ^hˆÝ a°DÀ[ÐQÑQÔQˆØNð 	,ð 	,ˆAÝ�D˜�7 4¨™?œ?Ñ+Ô+Ð+Ð+Ø	�ŠÕ" 1 e¨TÑ2Ô2Ñ3Ô3Ð3Ø	�Š�mÑÔÐØ�yŠy‰{Œ{ˆØˆŒØÔ+ˆÔØÔ+ˆÔØ	�Šˆd‰ŒˆØˆr'   N)r{   r|   r}   r~   r   r   r   r   r   r   r   r   rV   ry   rz   r'   r%   rÌ   rÌ   ì  sµ   € € € € € ðð ð
 ˆw˜IØ�˜X¨?Ð;Ñ;Ô;Ø%˜ mÑ4Ô4Ø#�| MÑ2Ô2Ø �L Ð0UÐVÑVÔVØ#�| IÐ4YÐZÑZÔZØ�˜oÑ.Ô.ð
ñ 
ô 
€Hð$ð $ð $ðð ð ð ð r'   rÌ   Ú__main__rÚ   éx   )é
   rå   é<   ræ   én   rå   r   rÐ   rÑ   )rÎ   rG   rH   rÀ   rŽ   r‘   ÚpdfÚgifÚshobjz/tmp)ÚformatsÚfnRootÚoutDir)NN)0Ú__version__Úreportlab.libr   Úreportlab.lib.validatorsr   r   r   r   r   r	   r
   Úreportlab.lib.attrmapr   r   Úreportlab.graphics.shapesr   r   r   r   r   r   r   Úreportlab.graphics.widgetbaser   Úmathr   Úreportlab.graphics.transformr   r   r   r   r   Úreportlab.lib.utilsr   r&   r.   r0   r�   r‹   r¶   r»   rÊ   rÌ   r{   rÀ   r[   rY   Úsaverz   r'   r%   ú<module>rø      s”  ðð €à  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø Ð Ð Ð Ð Ð Ø [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ðð ð ð ð.
ð 
ð 
ðkð kð kð kð kˆ6ñ kô kð kð\Sð Sð Sð Sð S�ñ Sô Sð Sðl|ð |ð |ð |ð |�ñ |ô |ð |ð~	ð 	ð 	ðð ð ðð ð ð@,ð ,ð ,ð ,ð ,�F˜9ñ ,ô ,ð ,ð\ ˆZÒÐØ
€EØˆ��CÑÔ€AØ‡E‚Eˆ-ˆ-Ð3ÀÐQRÐY[ÐfhÐvwÐ
xÑ
xÔ
xÑyÔyÐyØ‡F‚F�E˜%�=¨°v€FÑ>Ô>Ð>Ð>Ð>ð	 Ðr'   