+
    ŒvjmI  ã                   ó¸  € R t ^ RIHt ^ RIHtHtHtHtHtH	t	H
t
 ^ RIHtHt ^ RIHtHtHtHtHtHtHt ^ RIHt ^ RIHt ^ RIHtHtHtHtHt ^ RI H!t! RR
 lt"R t# ! R R]4      t$ ! R R]4      t% ! R R]4      t&R t'R t(R t) ! R R]]4      t*]+R8X  dA   ^-t,]! ^x^x4      t-]-P]                  ]*! RR	^^Z^2^ R7      4       ]-P_                  RR.RRR7       R	# R	# ) 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                óô   € VR8X  d   V R,           pRp VR8X  d   Rp. pWR,          ,
          p V \        V4      V,          ,           pV^ 8”  d
   WA8¼  d    V# V^ 8  d
   WA8:  d    V# VP                  V4       KM  )z6A range function, that does accept float increments...Ng        g      ð?g-Cëâ6?)ÚlenÚappend)ÚstartÚendÚincÚLÚnexts   &&&  Úd/var/www/html/daimler-pipeline/venv/lib/python3.14/site-packages/reportlab/graphics/widgets/grids.pyÚfranger$      s„   € ð ˆd„{Ø�c�kˆØˆà
ˆd„{Øˆà
€AØ
�F•
Õ
€CØ
Ø”s˜1“v •|Õ#ˆØ�Œ7�t”{Øð
 €Hð	 �1ŒW˜œØð €Hð 	
�‰�Žó    c                óœ   € . p\        \        V RR 4      4       F.  pVP                  W^,           ,          W,          ,
          4       K0  	  V# )zuReturns 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éÿÿÿÿ)Úranger   r   )ÚlistÚdÚis   &  r#   ÚmakeDistancesListr,   &   sB   € ð 	€AÜ”3�t˜C˜R�y“>Ö"ˆØ	�‰�˜•c•˜T�WÕ$Ö%ñ #ð €Hr%   c            
       óâ  a € ] tR t^3t o Rt]! R,/ R]! ]RR7      bR]! ]RR7      bR]! ]RR7      bR	]! ]R
R7      bR]! ]! R-4      RR7      bR]! ]! R.4      RR7      bR]! ]! R.4      RR7      bR]! ]RR7      bR]! ]RR7      bR]! ]	RR7      bR]! ]
RR7      bR]! ]RR7      bR]! ]RR7      bR]! ]RR7      bR]! ]R R7      bR!]! ]R"R7      b tR# tR$ tR% tR/R& ltR' tR( tR) tR*tV tR+# )0ÚGridar  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ú1Determines if stripes are vertical or horizontal.ÚuseLinesz+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                ó\  € ^ V n         ^ V n        ^dV n        ^dV n        RV n        ^ V n        ^V n        ^V n        ^ V n        . V n	        \        P                  V n        \        P                  \        P                  \        P                  .V n        \        P"                  V n        ^V n        R# ©é    ÚverticalN)r/   r3   r5   r7   r9   r;   r<   r=   r>   r?   r   ÚwhiterA   ÚredÚgreenÚbluer@   ÚblackrB   rC   )Úselfs   &r#   Ú__init__ÚGrid.__init__\   sƒ   € ØˆŒØˆŒØˆŒ
ØˆŒØ%ˆÔØˆŒØˆŒØˆŒ
ØˆŒØˆŒÜŸ™ˆŒÜ#ŸZ™Z¬¯©´v·{±{ÐCˆÔÜ!Ÿ<™<ˆÔØˆÖr%   c                óT   € \        ^d^d4      p\        4       pVP                  V4       V# ©éd   )r   r.   Úadd©rP   ÚDÚgs   &  r#   ÚdemoÚ	Grid.demom   s%   € Ü�C˜Óˆä‹FˆØ	�‰ˆaŒàˆr%   c                óP  € \        V R V P                  4      p\        V RV P                  4      pV P                  '       g   V'       d^   V'       dV   \	        V P
                  V P                  V P                  V P                  4      pV P                  Vn        Wn        W#n        V# R# )rE   rF   N)	ÚgetattrrB   rC   rA   r   r/   r3   r5   r7   )rP   rB   rC   Úrects   &   r#   ÚmakeOuterRectÚGrid.makeOuterRectu   sx   € Ü˜dÐ#4°T×5EÑ5EÓFˆÜ˜dÐ#4°T×5EÑ5EÓFˆØ�>�>ˆ>Ÿk¯kÜ˜Ÿ™ §¡¨¯
©
°D·K±KÓ@ˆDØ!Ÿ^™^ˆDŒNØ*ÔØ*ÔØˆKár%   c                óF  € V P                   V P                  rCV'       d   TpMTpV P                  '       d„   WP                  ,           .p^ p VR,          W,           8”  d   VR M‚VP	                  VR,          V P                  V\        V P                  4      ,          ,          ,           4       V^,           pKn  \        WP                  ,           W,           V P                  4      pVP	                  W,           4       V P                  ^ 8w  d   VP                  ^ V4       V# )z1Returns a list of positions where to place lines.r'   )	r5   r7   r?   r>   r   r   r$   r=   Úinsert)rP   r   ÚisXÚwÚhÚlengthÚrr+   s   &&&     r#   ÚmakeLinePosListÚGrid.makeLinePosList�   sÕ   € ð �z‰z˜4Ÿ;™;ˆ1ßØ‰FàˆFØ�?�?ˆ?ØŸ™Õ$Ð%ˆAØˆAØØ�R•5˜5�>Ô)Ø˜"˜ØØ—‘˜˜2� §¡°´S¸¿¹Ó5IÕ1IÕ!JÕJÔKØ˜•E’ä�uŸ{™{Õ*¨E­N¸D¿J¹JÓGˆAà	�‰�•Ô Ø�;‰;˜!ÔØ�H‰H�Q˜Ôàˆr%   c                ó¶  € \        4       pV P                  V P                  r2V P                  ^8X  Ed&   V P                  R8X  dƒ   V P                  V P                  ^R7      pV F]  p\        WPP                  WPP                  V,           4      pV P                  Vn	        V P                  Vn
        VP                  V4       K_  	  V# V P                  R8X  d‚   V P                  V P                  ^ R7      pV F^  p\        V P                  WpP                  V,           V4      pV P                  Vn	        V P                  Vn
        VP                  V4       K`  	  V# )é   rJ   ©rc   Ú
horizontal)r   r5   r7   r;   r9   rh   r/   r   r3   rB   rC   rV   )rP   Úgrouprd   re   rg   r/   Úliner3   s   &       r#   ÚmakeInnerLinesÚGrid.makeInnerLinesœ   s  € ä“ˆà�z‰z˜4Ÿ;™;ˆ1à�=‰=˜AÕØ×Ñ :Ô-Ø×(Ñ(¨¯©°QÐ(Ó7�Û�AÜ §6¡6¨1¯f©f°q­jÓ9�DØ'+×'7Ñ'7�DÔ$Ø'+×'7Ñ'7�DÔ$Ø—I‘I˜d–Oñ	 ð ˆð ×!Ñ! \Ô1Ø×(Ñ(¨¯©°QÐ(Ó7�Û�AÜ §¡¨¯6©6°A­:°qÓ9�DØ'+×'7Ñ'7�DÔ$Ø'+×'7Ñ'7�DÔ$Ø—I‘I˜d–Oñ	 ð ˆr%   c                óä  € \        4       pV P                  V P                  r2V P                  ^8X  Ed=   V P                  pV P
                  R8X  d   V P                  V P                  ^R7      pM.V P
                  R8X  d   V P                  V P                  ^ R7      p\        X4      p^ p\        \        V4      4       F®  pV P
                  R8X  d'   WX,          p	\        W�P                  Wh,          V4      p
M6V P
                  R8X  d&   WX,          p\        V P                  W²Wh,          4      p
WG\        V4      ,          ,          X
n        RV
n        VP                  V
4       V^,           pK°  	  V# )rk   rJ   rl   rm   N)r   r5   r7   r<   r@   r9   rh   r/   r3   r,   r(   r   r   rA   rB   rV   )rP   rn   rd   re   Úcolsrg   Údistr+   Újr/   Ústriper3   s   &           r#   ÚmakeInnerTilesÚGrid.makeInnerTilesµ   s*  € ä“ˆà�z‰z˜4Ÿ;™;ˆ1ð �=‰=˜AÕØ×$Ñ$ˆDà×Ñ :Ô-Ø×(Ñ(¨¯©°QÐ(Ó7‘Ø×!Ñ! \Ô1Ø×(Ñ(¨¯©°QÐ(Ó7�ä$ QÓ'ˆDàˆAÜœ3˜t›9Ö%�Ø×#Ñ# zÔ1Ø��AÜ! !§V¡V¨T­W°aÓ8‘FØ×%Ñ%¨Ô5Ø��AÜ! $§&¡&¨!°µÓ8�FØ#'¬C°«I­Õ#6�Ô Ø%)�Ô"Ø—	‘	˜&Ô!Ø˜•E’ñ &ð ˆr%   c                óØ   € \        4       pVP                  V P                  4       4       VP                  V P                  4       4       VP                  V P	                  4       R R7       V# )Ú
_gridLines©Úname)r   rV   r_   rw   rp   )rP   rn   s   & r#   ÚdrawÚ	Grid.drawÖ   sQ   € ä“ˆà�	‰	�$×$Ñ$Ó&Ô'Ø�	‰	�$×%Ñ%Ó'Ô(Ø�	‰	�$×%Ñ%Ó'¨\ˆ	Ô:àˆr%   )r=   r>   r?   rA   r7   r9   r@   rB   rC   r;   r<   r5   r/   r3   N© ©rJ   rm   )rI   rk   )rI   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r
   r   r   r   r   r   r   r	   Ú_attrMaprQ   rZ   r_   rh   rp   rw   r}   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r#   r.   r.   3   sƒ  ø‡ € ñ	ñ ò 
Ù˜Ð(KÕLð
á˜Ð(KÕLð
ñ ˜XÐ,?Õ@ð
ñ ˜hÐ-AÕBð	
ñ
 #¡5Ð)CÓ#DØDõFð
ñ  ¡ f£Ø>õ@ð
ñ  ¡ f£ØIõKð
ñ ˜XØ>õ@ð
ñ ˜hØFõHð
ñ " /Ø8õ:ð
ñ" $ NØMõOð#
ñ& ! Ø9õ;ð'
ñ* # =Ø(õ*ð+
ñ. # 8Ø(õ*ð/
ñ2 ' }Ð;YÕZð3
ñ4 ' ~Ð<ZÕ[ð5
€Hò:ò"ò
ôò6ò2÷Bð r%   r.   c                   ó²   a € ] tR t^át o Rt]! ]! ]RR7      ]! ]RR7      ]! ]RR7      ]! ]RR7      ]! RRR7      ]! RR	R7      R
7      tR t	R t
R tRtV tR# )Ú
DoubleGridzFThis combines two ordinary Grid objects orthogonal to each other.
    r0   r1   r4   r6   r8   NzThe first grid component.zThe second grid component.)r/   r3   r5   r7   Úgrid0Úgrid1c                óÊ  € ^ V n         ^ V n        ^dV n        ^dV n        \	        4       pV P                   Vn         V P                  Vn        V P                  Vn        V P                  Vn        RVn        ^Vn        ^ Vn        ^Vn        ^ Vn	        . Vn
        \        P                  Vn        \        P                  \        P                  \        P                   .Vn        \        P$                  Vn        ^Vn        \	        4       pV P                   Vn         V P                  Vn        V P                  Vn        V P                  Vn        RVn        ^Vn        ^ Vn        ^Vn        ^ Vn	        . Vn
        \        P                  Vn        \        P                  \        P                  \        P                   .Vn        \        P$                  Vn        ^Vn        Wn        W n        R# )rI   rJ   rm   N)r/   r3   r5   r7   r.   r9   r;   r<   r=   r>   r?   r   rK   rA   rL   rM   rN   r@   rO   rB   rC   r�   rŽ   )rP   Úg0Úg1s   &  r#   rQ   ÚDoubleGrid.__init__î   sP  € ØˆŒØˆŒØˆŒ
ØˆŒä‹VˆØ�v‰vˆŒØ�v‰vˆŒØ—:‘:ˆŒØ—K‘KˆŒ	Ø#ˆŒØˆŒØˆŒØˆŒØˆŒ	ØˆŒÜ—|‘|ˆŒÜ!Ÿ:™:¤v§|¡|´V·[±[ÐAˆŒÜŸ™ˆŒØˆŒä‹VˆØ�v‰vˆŒØ�v‰vˆŒØ—:‘:ˆŒØ—K‘KˆŒ	Ø%ˆŒØˆŒØˆŒØˆŒØˆŒ	ØˆŒÜ—|‘|ˆŒÜ!Ÿ:™:¤v§|¡|´V·[±[ÐAˆŒÜŸ™ˆŒØˆŒàŒ
ØŽ
r%   c                óT   € \        ^d^d4      p\        4       pVP                  V4       V# rT   )r   rŒ   rV   rW   s   &  r#   rZ   ÚDoubleGrid.demo   s%   € Ü�C˜ÓˆÜ‹LˆØ	�‰ˆaŒØˆr%   c                ó¢  € \        4       pV P                  V P                  r2VP                  ^8H  ;'       d#    VP                  ^ 8H  ;'       d    W#3;'       g    W23pV F"  pVP	                  VP                  4       4       K$  	  V FC  pVP	                  VP                  4       4       VP	                  VP                  4       RR7       KE  	  V# )rk   rz   r{   )r   r�   rŽ   r<   rV   r_   rw   rp   )rP   rn   r�   r‘   ÚGrY   s   &     r#   r}   ÚDoubleGrid.draw'  s©   € Ü“ˆØ—‘˜TŸZ™ZˆBð �K‰K˜1Ñ×=Ð= §¡°Ñ!1×=Ð=°r°g×HÐHÀ"ÀˆÛˆAØ�I‰I�a—o‘oÓ'Ö(ñ ãˆAØ�I‰I�a×&Ñ&Ó(Ô)Ø�I‰I�a×&Ñ&Ó(¨lˆIÖ;ñ ð ˆr%   )r�   rŽ   r7   r5   r/   r3   )r�   r‚   rƒ   r„   r…   r
   r   r   r†   rQ   rZ   r}   r‡   rˆ   r‰   s   @r#   rŒ   rŒ   á   sm   ø‡ € ññ Ù˜Ð(KÔLÙ˜Ð(KÔLÙ˜XÐ,?Ô@Ù˜hÐ-AÔBÙ˜TÐ(CÔDÙ˜TÐ(DÔEô
€Hò'òd÷ð r%   rŒ   c                   ó  a € ] tR tRt o Rt]! ]! ]RR7      ]! ]RR7      ]! ]RR7      ]! ]RR7      ]! ]! R4      RR7      ]! ]R	R7      ]! ]	R
R7      ]! ]	RR7      ]! ]	RR7      ]! ]RR7      ]! ]
RR7      R7      tR tR tR tR tRtV tR# )Ú
ShadedRecti7  z÷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.
r0   r1   r4   r6   r8   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.rD   ú#True if shading reverses in middle.)r/   r3   r5   r7   r9   Ú	numShadesÚfillColorStartÚfillColorEndrB   rC   ÚcylinderModec                ó  € ^ V n         ^ V n        ^dV n        ^dV n        RV n        ^V n        \        P                  V n        \        P                  V n
        \        P                  V n        ^V n        ^ V n        V P                  V4       R# rH   )r/   r3   r5   r7   r9   rœ   r   Úpinkr�   rO   rž   rB   rC   rŸ   ÚsetProperties©rP   Úkws   &,r#   rQ   ÚShadedRect.__init__N  so   € ØˆŒØˆŒØˆŒ
ØˆŒØ%ˆÔØˆŒÜ$Ÿk™kˆÔÜ"ŸL™LˆÔÜ!Ÿ<™<ˆÔØˆÔØˆÔØ×Ñ˜2Ör%   c                óT   € \        ^d^d4      p\        4       pVP                  V4       V# rT   )r   r™   rV   rW   s   &  r#   rZ   ÚShadedRect.demo\  s%   € Ü�C˜ÓˆÜ‹LˆØ	�‰ˆaŒàˆr%   c                ó˜  € V P                   V P                  V P                  V P                  V P                  V P
                  3w  rr4rVV^ 8  d'   V^ 8”  d    W,           pV) pV P                  R8X  d   YereMQV^ 8  d'   V^ 8”  d    W$,           pV) pV P                  R8X  d   YereM$V^ 8  d   V^ 8  d   W,           pV) pW$,           pV) pWW4WV3# )z8Flip rectangle's corners if width or height is negative.rJ   rm   )r/   r3   r5   r7   r�   rž   r9   )rP   r/   r3   r5   r7   r�   rž   s   &      r#   Ú_flipRectCornersÚShadedRect._flipRectCornersc  sÙ   € à<@¿F¹FÀDÇFÁFÈDÏJÉJÐX\×XcÑXcÐei×exÑexÐz~÷  {Lñ  {Lð  =LÑ9ˆˆe˜^Ø�1Œ9˜ !œØ•	ˆAØ�FˆEØ×Ñ Ô+ÈL¸\øØ�AŒX˜% œ'Ø•
ˆAØ�WˆFØ×Ñ Ô-Èl¸|øØ�aŒZ˜F QœJØ•	ˆAØ�FˆEØ•
ˆAØ�WˆFØ�U NÐ@Ð@r%   c           	     ó  € \        4       pV P                  4       w  r#rErgV P                  R 8H  pV P                  p	\	        \	        V RR4      RR4      p
V
'       Ed!   V
P
                  pVP                  4        VP                  4       pVP                  W#WE4       VP                  V^ R7       V	'       d…   V'       d?   V
! W#W$^,          ,           W6V3RR7       V
! W$^,          ,           W2V,           W7V3RR7       MoV
! W#W#V^,          ,           Wg3RR7       V
! W#V^,          ,           W#V,           Wv3RR7       M1V'       d   V
! W#W$,           W6V3RR7       MV
! W#W#V,           Wg3RR7       VP                  4        EM¦V P                  pV	'       d9   V^,          '       g
   V^,           p\        V^,
          ^,          4      ^,           p\        V4      pV'       d&   V^8X  d   V.pM>\        W"V,           WO,          4      pM$V^8X  d   V.pM\        W3V,           W_,          4      pV Fø  pT;'       d    \        VW4V,          V4      ;'       g    \        VVWEV,          4      pV	'       dg   VP!                  V4      X8¼  d)   \"        P$                  ! WvVV,          VR,          V4      pMO\"        P$                  ! WgV^ ,          VV,          V4      pM'\"        P$                  ! WgV^ ,          VR,          V4      pVVn        VVn        ^Vn        VP-                  V4       Kú  	  V P(                  '       dX   V P*                  ^ 8¼  dG   \        W#WE4      pV P(                  Vn        V P*                  Vn        RVn        VP-                  V4       V# )rJ   Ú_canvasNÚlinearGradient)ÚstrokeF)Úextendr'   )r   r©   r9   rŸ   r]   Ú__self__Ú	saveStateÚ	beginPathr^   ÚclipPathÚrestoreStaterœ   ÚintÚfloatr$   r   Úindexr   ÚlinearlyInterpolatedColorrA   rB   rC   rV   )rP   rn   r/   r3   rd   re   Úc0Úc1rJ   rŸ   ÚlinGÚcanvÚprœ   ÚhalfNumShadesÚnumÚVÚvrv   Úcolr^   s   &                    r#   r}   ÚShadedRect.drawu  sä  € ä“ˆØ!×2Ñ2Ó4Ñˆˆa�BØ×#Ñ# zÑ1ˆØ×(Ñ(ˆÜ”w˜t I¨dÓ3Ð4DÀTÓJˆßˆ4Ø—=‘=ˆDØ�N‰NÔØ—‘Ó ˆAØ�F‰F�1˜ÔØ�M‰M˜! AˆMÔ&ßßÙ˜˜q 1¥�u a¨R¨¸Õ?Ù˜˜Q�3�  Q¥3¨¨r¨7¸5ÖAá˜˜q A a¥C¥%¨"¨¸Õ?Ù˜˜a �c�E 1¨¥c¨B¨7¸5ÖAçÙ˜˜q�s A¨2 w°uÖ=á˜˜q A¥#¨ w°uÕ=Ø×ÑÖàŸ™ˆIßØ  —{”{°	¸!µ IÜ # Y¨q¥[°!¥OÓ 4°qÕ 8�Ü˜	Ó"ˆCßØ ”>Ø˜‘Aä˜q a¥%¨­Ó/‘Aà ”>Ø˜‘Aä˜q a¥%¨­Ó/�Aã�Ø!×:Ð:¤d¨1¨a°3µ¸Ó&:×RÐR¼dÀ1ÀaÈÈcÍEÓ>R�ßØ—w‘w˜q“z =Ô0Ü$×>Ò>¸rÀQÀ}ÕEUÐVWÐXZÕV[Ð]^Ó_™ä$×>Ò>¸rÀQÀqÅTÈ!ÈMÕJZÐ\]Ó^™ä ×:Ò:¸2ÀÀ1ÅÀaÈÅeÈQÓO�CØ#&�Ô Ø%(�Ô"Ø%&�Ô"Ø—	‘	˜&Ö!ñ ð ××Ð × 0Ñ 0°!Ô 3Ü˜˜aÓ#ˆDØ#×/Ñ/ˆDÔØ#×/Ñ/ˆDÔØ!ˆDŒNØ�I‰I�dŒOØˆr%   )rŸ   rž   r�   r7   rœ   r9   rB   rC   r5   r/   r3   Nr€   )r�   r‚   rƒ   r„   r…   r
   r   r   r   r   r   r†   rQ   rZ   r©   r}   r‡   rˆ   r‰   s   @r#   r™   r™   7  s¯   ø‡ € ññ Ù˜Ð(KÔLÙ˜Ð(KÔLÙ˜XÐ,?Ô@Ù˜hÐ-AÔBÙ"¡5Ð)CÓ#DÐK~ÔÙ  Ð0UÔVÙ% mÐ:[Ô\Ù# MÐ8WÔXÙ" =Ð7TÔUÙ" 8Ð2IÔJÙ# IÐ4YÔZô
€HòòòA÷$>ð >r%   r™   c           
     ó°   € V^8X  d   V .# . pV^8”  dC   V^,
          p\        V4       F*  pVP                  \        P                  ! W^ WE4      4       K,  	  V# )z7Return a range of intermediate colors between c0 and c1)r(   r   r   r¸   )r¹   rº   ÚnÚCÚlimr+   s   &&&   r#   Ú
colorRangerÈ   ¶  sR   € àˆ!„t�R�Dˆ[à
€AØˆ„sØ��cˆÜ�q–ˆAØ�H‰H”V×5Ò5°b¸A¸cÓEÖFñ à€Hr%   c                óv   € ^ p^ pV  F  w  r4W,          pW$,          pK  	  \        V 4      pW,          W%,          3# )z(compute average point of a set of points)r   )ÚPÚcxÚcyr/   r3   rÅ   s   &     r#   ÚcentroidrÍ   Â  s?   € à	
€BØ	
€BÛ‰ˆØ
�ˆØ
�Šñ ô 	ˆA‹€AØ�4�•ˆ:Ðr%   c                ó®  € \        V 4      w  r4\        V4      p\        \        W44      \	        V4      4      p\        \        W`4      4      pVR,          pVR,          p	\        V4      p
\        V4      p\        V	4      p\        V	4      p	W¢n	        WŠ,
          Vn
        W²n        W›,
          Vn        \        \        V4      R7      pVP                  V4       V# )at  
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.
ºNNé   ºrk   NrÐ   )Ú	transform)rÍ   r   r   r   r   r   r   ÚminÚmaxr/   r5   r3   r7   r   r   rV   )rÊ   Úangler^   Úx0Úy0ÚthetaÚmxÚtpÚxxÚyxÚxnÚynrY   s   &&&          r#   ÚrotatedEnclosingRectrß   Ì  s°   € ô �a‹[�F€BÜ�E‹N€Eä	Œy˜Ó¤ u£Ó	.€Bô 
” Ó&Ó	'€BØ	ˆC�€BØ	ˆD�€BÜ	ˆR‹€BÜ	ˆR‹€BÜ	ˆR‹€BÜ	ˆR‹€Bð „FØ•€D„JØ„FØ•%€D„KÜœ ›Ô$€AØ‡E�Eˆ$„KØ€Hr%   c                   ó¢   a € ] tR tRt o Rt]! ]]! ]RR7      ]! ]	4      ]! ]	4      ]! ]RR7      ]! ]
RR7      ]! ]4      R7      tR tR	 tR
tV tR# )ÚShadedPolygoniì  zå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 angler1   rš   r›   )ÚBASErÕ   r�   rž   rœ   rŸ   Úpointsc                óÂ   € ^ZV n         \        P                  V n        \        P                  V n        ^ V n        ^2V n        . ROV n        \        P                  ! W4       R# )éZ   N)r'   r'   rÐ   rÐ   é   r'   )rÕ   r   rL   r�   rM   rž   rŸ   rœ   rã   r   rQ   r£   s   &,r#   rQ   ÚShadedPolygon.__init__û  sE   € ØˆŒ
Ü$Ÿj™jˆÔÜ"ŸL™LˆÔØˆÔØˆŒÚ&ˆŒÜ×Ò˜4Ö#r%   c           	     ó(  € V P                   p\        \        VR ,          VR,          4      4      p\        RV^ ,          ,           .VR,           Uu. uF  pRV,           NK  	  up,           R.,           RRR7      p^Vn        \        4       pVP                  V4       V P                  R,          p^ Tu;8:  d   ^-8:  g&   M RTu;8:  d   R8:  g   M ^‡Tu;8:  d   ^á8:  d   M MRMR	p\        ^ RVR
7      pR F  p\        Wx\        W4      4       K  	  VP                  \        WV4      4       VP                  \        4       VP                  4       p^ Vn        V P                  Vn        V P                  Vn        VP                  V4       V# u upi )rÏ   rÑ   :rk   NNÚ	closePathN)rA   rB   ih  i;  rm   rJ   )rC   rB   r9   )ÚmoveTo)ÚlineTo)r�   rž   rœ   rŸ   )rã   r)   Úzipr   Ú
isClipPathr   rV   rÕ   r™   Úsetattrr]   rß   r   ÚcopyrB   rC   )	rP   rÊ   r/   ÚpathrY   rÕ   r9   r^   Úks	   &        r#   r}   ÚShadedPolygon.draw  s?  € Ø�K‰KˆÜ”�Q�s•V˜A˜d�GÓ$Ó%ˆÜ˜; q¨¥tÕ+Ð,ÀQÀrÆUÓ-KÁUÀ¨k¸!¯m¨mÁUÑ-KÕKÈ[ÈMÕYØ¨ô.ˆàˆŒÜ‹GˆØ	�‰ˆdŒØ—
‘
˜SÕ ˆØ&'¨¦l°¦l°c¸5¶oÀ#¶oÈÈeÎÐUXÏ‘lÐ^hˆÜ a°DÀ[ÔQˆÛNˆAÜ�Dœ7 4›?Ö+ñ Oà	�‰Ô" 1¨TÓ2Ô3Ø	�‰ŒmÔØ�y‰y‹{ˆØˆŒØ×+Ñ+ˆÔØ×+Ñ+ˆÔØ	�‰ˆdŒØˆùò# .Ls   ÁF
)rÕ   rŸ   rž   r�   rœ   rã   N)r�   r‚   rƒ   r„   r…   r
   r   r   r   r   r   r   r†   rQ   r}   r‡   rˆ   r‰   s   @r#   rá   rá   ì  s_   ø‡ € ññ
 ˜IÙ˜X¨?Ô;Ù% mÓ4Ù# MÓ2Ù  Ð0UÔVÙ# IÐ4YÔZÙ˜oÓ.ô
€Hò$÷ð r%   rá   Ú__main__)rã   rB   rC   rÕ   rœ   rŸ   ÚpdfÚgifÚshobjz/tmp)ÚformatsÚfnRootÚoutDir)NN)é
   rú   é<   rû   én   rú   )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,   r.   rŒ   r™   rÈ   rÍ   rß   rá   r�   rÕ   rX   rV   Úsaver   r%   r#   Ú<module>r     sß   ðð €å  ß × Ñ ß 7ß f× fÑ fÝ 0Ý ß [Õ [Ý 'ôò.
ôkˆ6ô kô\S�ô Sôl|�ô |ò~	òòô@,�F˜9ô ,ð\ ˆZÔØ
€EÙ��CÓ€AØ‡E�E‰-Ð3ÀÐQRÐY[ÐfhÐvwÔ
xÔyØ‡F�F�E˜%�=¨°v€FÖ>ñ	 r%   