+
    bIi             	       6   Rt RtRt^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
HtHt ^ R	IHtHtHtHtHtHtHtHtHtHtHt ^ R
IHt ^ RI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) ^ RI*H+t+ ^ RI,H-t-H.t. ^ RI/H0t0 ^ RI1H2t2 ^ RI3H4t4 ^ RI5H6t6H7t7H8t8H9t9 ^ RI:H;t;H<t<H=t= ^ RI>H?t? ^ RI@t@^ RIAHBtB  ^ RICtCRP                  R4      tE]@P                  ! R]@P                  ! ]E4      ,          4      P                  tI]@P                  ! R]@P                  ! ]E4      ,          4      P                  tKRR ltLRR ltHR tMR tNR  tO ! R! R]44      tP ! R" R]44      tQR# tRRR$ ltSR% tTR& tURR' ltVRR( ltWRR) ltXRR* ltYRR+ ltZR, t[R- t\R. t]Rt^Rt_R/ t`RR0 ltaRR1 ltbRR2 ltcRR3 ltdRR4 lteRR5 ltfR6 tg ! R7 R8]h4      ti ! R9 R:]h4      tj ! R; R<]h4      tk ! R= R>]k4      tl ! R? R@]l4      tm ! RA RB]k]i4      tn ! RC RD]n4      to ! RE RF]p4      tqRRG ltr ! RH RI]h4      ts ! RJ RK]s]m4      tt ! RL RM]s]n4      tuRN tv^ tw^tx^ty^tzRO t{RP t|RRQ lt}RR t~RS t]@P                  ! RT]@EP                   4      tRU tRV tRWtRXtRYt]@P                  ! RZ4      t]@P                  ! R[4      t]@P                  ! RP                  R\]R]34      4      t]@P                  ! RP                  R\]]R]34      4      t]@P                  ! RP                  R^]R_34      4      tR` tRa tRb tRc t]93Rd lt ! Re Rf]p4      t ! Rg Rh]4      t ! Ri Rj]4      t ! Rk Rl]4      t ! Rm Rn]p4      t ! Ro Rp]p4      t ! Rq Rr]]4      t ! Rs Rt]]4      t ! Ru Rv]h4      t]93Rw ltRRx ltRy tRz tR{ tR| tR} tR~ tR tR tR tR t]@P                  ! R4      tR tR tR tR t ! R R]p4      tR tRR ltR tRR ltR t ! R R ]"4      t]R8X  Ed   R tR tR tRR lt^ RI/HtH0t0 ^ RIHt ^ RIt]EPt                  R,          t]. 8X  d   R.t]3R lt]! 4       t]R,          t]0! R]R7      tR]n        ]! ^4      '       do   Rt]! ]]4      t]! ]4       RRutt]EP                  ]]4      w  tt]! ]4       ]P                  ]]4      t] F   t]EP                  ]]4       ]! ]4       RtK"  	  ]! ^4      '       d7   ]! R]R,          4      t]! ]4       ]EP                  ^^4      w  tt]! ]4       ]! ^4      '       d9   Rt]! ]]R,          4      t]! ]4       ]EP                  RR4      w  tt]! ]4       ]! ^4      '       d   RtRtRt]! ]]4      t]! ]4       ]EP                  ]]4      w  tt]! R]]4       ]! ]4       ]P                  ]]4      t]! ]^ ,          4       ]^ ,          EP                  ]]4      w  tt]! R]]4       ]! ]^ ,          4       ]! ^4      '       dN   R]! ^4      : R]! ^4      : R2t]! ]]R,          4      t]! ]4       ]EP                  RR4      w  tt]! ]4       ]! ^4      '       dB   R F;  t]! ]]R,          ^ R7      t]! ]4       ]EP                  RR4      w  tt]! ]4       K=  	  ]! ^4      '       d9   Rt]! ]]R,          4      t]! ]4       ]EP                  RR4      w  tt]! ]4       ]! ^4      '       d   Rt]! ]]R,          4      t]! ]4       ]EP                  RR4      w  tt]! ]4       ]P                  R]R,          4      t]! ]! ]4      4       ]! ]^ ,          4       ]! ]^ ,          4       ]^,          EP                  RR4       ]! ]^,          4       ]! ]^,          4       ]! ^	4      '       dP   Rt]! ]]0! R]R,          ])R7      4      t]! ]4       ]EP                  ^],          ^,
          R4      w  tt]! ]4       ]! ^
4      '       dP   Rt]! ]]0! R]R,          ])R7      4      t]! ]4       ]EP                  ^],          ^,
          R4      w  tt]! ]4       ]! ^4      '       d<   Rt]! ]]0! RR^
R7      R7      t]! ]4       ]EP                  RR4      w  tt]! ]4       ]! ^4      '       dJ   ^ RIHt ^ RI	Ht ]! ]! RR4      4       ]! ]! RR4      4       Rt]! ]]0! RR^
R7      R7      t]! ]4       R# R# R#    RtC ELf; i)	Paragraph	ParaLinesFragLinez3.5.20z%The standard paragraph implementation)
whitespace)truth)category)stringWidthgetAscentDescentgetFont)
rtlSupportbidiTextbidiWordList	isBidiStrbidiStrWrap
isBidiListBidiListbidiListWrap	BidiIndexbidiFragWordinnerBidiStrWrap)shapeFragWord)
ParaParser_PCT_num_re_us_value)Flowable)Color)TA_LEFTTA_RIGHT	TA_CENTER
TA_JUSTIFY)normalizeTRBL)	wordSplitALL_CANNOT_START)ParagraphStyle)deepcopy)ABag)decimalSymbol_FUZZparaFontSizeHeightOffsethyphenationMinWordLength)
_classNameisBytesisStr)sameFragN)
MethodType z[%s]+z[%s]+$c                .   \        V 4      '       d   V P                  4       p V '       db   \        P                  ! V 4      pV'       d7   \	        VP                  ^4      4      WP                  ^4      ,          ,          # \        V RR7      # V'       d   V# V # )z/convert a strike/underline distance to a numberF)allowRelative)r-   stripr   matchfloatgroup_parser_num)svMapdefaultms   &&& څC:\Users\petid\OneDrive\Desktop\Maestro\MAESTRO CLAUDE\MAESTRO\maestro-backend\venv\Lib\site-packages\reportlab/platypus/paragraph.py_usConvr=   O   si    QxxGGI""1%AQWWQZ(ggaj)999"1599NH    c                    \        V 4      '       d   V P                  R 4      p Ve#   \        V4      '       d   VP                  R 4      pVf   RV 9   d   \        V 4      MV P                  V4       Uu. uF  q"NK  	  up# u upi )utf8    )r,   decode_wsc_re_splitsplit)textdelimuwords   && r<   rD   rD   ]   so    t}}T[[0dWU^^U\\&5IU7<}SWd 3]a]g]ghm]n np neE nppps   2
A?c                 p    \        V 4      '       d   V P                  R 4      p V P                  \        4      # r@   )r,   rB   r3   _wscrE   s   &r<   r3   r3   b   s'    t}}T[[0d::dr>   c                 p    \        V 4      '       d   V P                  R 4      p V P                  \        4      # rI   )r,   rB   lstriprJ   rK   s   &r<   rM   rM   f   '    t}}T[[0d;;tr>   c                 p    \        V 4      '       d   V P                  R 4      p V P                  \        4      # rI   )r,   rB   rstriprJ   rK   s   &r<   rP   rP   j   rN   r>   c                       ] tR t^ntRtRtR# )r   a  
class ParaLines contains the broken into lines representation of Paragraphs
    kind=0  Simple
    fontName, fontSize, textColor apply to whole Paragraph
    lines   [(extraSpace1,words1),....,(extraspaceN,wordsN)]

    kind==1 Complex
    lines   [FragLine1,...,FragLineN]
 N__name__
__module____qualname____firstlineno____doc____static_attributes__rR   r>   r<   r   r   n       r>   c                       ] tR t^ytRtRtR# )r   a  
class FragLine contains a styled line (ie a line with more than one style)::

    extraSpace  unused space for justification only
    wordCount   1+spaces in line for justification purposes
    words       [ParaFrags] style text lumps to be concatenated together
    fontSize    maximum fontSize seen on the line; not used at present,
                but could be used for line spacing.
rR   NrS   rR   r>   r<   r   r   y   rZ   r>   c                 v    R P                  \        \        \        \	        \        V 4      4      4      4      4      #  )joinlistfilterr   rD   r3   Ls   &r<   
_lineCleanrd      s%    88DeE!Ho6788r>   c                    \        \        \        \        \        \        \        V R4      4      4      4      4      pVP                  V4      # )zThis is an internal utility which takes triple-
quoted text form within the document and returns
(hopefully) the paragraph the user intended originally.
)r`   ra   r   maprd   rD   r_   )rE   joinerrc   s   && r<   cleanBlockQuotedTextri      s6     6%SU4->?@ABA;;q>r>   c                 H    VR 8  g   VR8  d   V P                  V4       R# R# )gư>Ngư)setXPos)txdxs   &&r<   rk   rk      s    	$w"U(


2 r>   c                 h    \        V 4      '       d   V P                  R 4      # V P                  R4      # )s    rA   )r,   count)ws   &r<   
_nbspCountrq      s(    qzzww{##wwvr>   c                    VR8  ;'       g    \        V RR4      pRP                  V4      p\        W4       V'       g(   \        V4      \	        V4      ,           ^,
          pV^ 8*  pV'       d   V P                  V^4       MDV P                  V\        X4      ,          4       V P                  V^4       V P                  ^ 4       \        W) 4       V# :0yE>preformattedFr^   :0yE)getattrr_   rk   lenrq   _textOutsetWordSpacer5   )rl   offset
extraspacewordslastsimplerE   nSpacess   &&&&&   r<   _leftDrawParaLiner      s    AAN5!AF88E?DBe*Z--a/!
D

U7^34
D
BwMr>   c                    VR8  ;'       g    \        V RR4      pRP                  V4      pV'       g(   \        V4      \        V4      ,           ^,
          pV^ 8*  pV'       d/   VRV,          ,           p\	        W4       V P                  V^4       MQTpV P                  V\        X4      ,          4       \	        W4       V P                  V^4       V P                  ^ 4       \	        W) 4       V# )rt   ru   Fr^         ?rv   rw   r_   rx   rq   rk   ry   rz   r5   	rl   r{   r|   r}   r~   r   rE   r   r;   s	   &&&&&    r<   _centerDrawParaLiner      s    AAN5!AF88E?De*Z--a/!S:%%
D

U7^34
D
BrNHr>   c                    VR8  ;'       g    \        V RR4      pRP                  V4      pV'       g(   \        V4      \        V4      ,           ^,
          pV^ 8*  pV'       d6   W,           p\	        W4       V P                  RP                  V4      ^4       MQTpV P                  V\        X4      ,          4       \	        W4       V P                  V^4       V P                  ^ 4       \	        W) 4       V# rs   r   r   s	   &&&&&    r<   _rightDrawParaLiner      s    AAN5!AF88E?De*Z--a/!
CHHUOA&

U7^34
D
BrNHr>   c                    \        W4       R P                  V4      p\        V RR4      ;'       g.    RTu;8  ;'       d    R8*  Mu ;'       g    T;'       d    VR8  pV'       g(   \        V4      \	        V4      ,           ^,
          pV^ 8*  pV'       d   V P                  V^4       MDV P                  V\        X4      ,          4       V P                  V^4       V P                  ^ 4       \        W) 4       V# )r^   ru   Frt   rv   )rk   r_   rw   rx   rq   ry   rz   r5   )rl   r{   r|   r}   r~   rE   r   r   s   &&&&&   r<   _justifyDrawParaLiner      s    BHHUODb.ii53I3IT3IiitOhOhXbchXhFe*Z--a/!
D

U7^34
D
BwMr>   c                 :    V'       d   \         M\        ! WW#V4      # N)r   r   )rl   r{   r|   r}   r~   s   &&&&&r<   _justifyDrawParaLineRTLr      s    "&,@@"jaeffr>   c                V   VR8X  d   ^ pMVR9   d
   W ,
          pMVR8X  d    VRV,          V ,           R,          ,
          pM`VR	9   d   VRV,          ,
          pMHVR8X  d   RV,          pM7VR8X  d   R
V,          pM&\        VR4      '       d   VP                  V4      pMTpW3V ,           3# )z1return bottom,top offsets relative to baseline(0)baselinemiddle333333?r   supersubnormalizedValue)ztext-toptop)ztext-bottombottomg      ࿩hasattrr   )hvafontSizeiyos   &&& r<   	imgVRanger      s    	:~	!	!j	X#h,q.#--	'	'X%	W(l	U8m	%	&	&  *1u9r>   c                 L    \        V R 4      '       d   V P                  V4      # V # )r   r   )vnvs   &&r<   imgNormVr      s&    q"##  $$r>   c                    V P                   p\        V4      '       d6   TpV P                  pV P                  pV P                  pV P
                  p^ pMv\        VRR4      p\        VRV P                  4      p\        VRV P                  4      p\        VRV P                  4      p\        VRV P
                  4      p\        VR^ 4      pW#WEWg3# )    rE   .fontNamer   	textColor	backColordy)endDotsr-   r   r   r   r   rw   )styledotsrE   r   r   r   r   r   s   &       r<   _getDotsInfor      s    ==DT{{>>>>OO	OO	tF3'4
5>>:4
5>>:DU__=	DU__=	T$q!I88r>   c           
         \        VR R 4      pVP                  pVP                  pVP                  pVP                  p	VP
                  p
VP                  pWP                  ,          p V
R9   pV'       dm   V
R8X  dE   \        \        V,          VP                  4      p\        \        V,          VP                  ) 4      pMVP                  pVP                  ) pW,           pVP                  V8w  d   VP                  V4       V'       d   VP                  pVed   VX,
          pVP                   V8w  d   WVP                   ,
          ,          p\#        VV,
          4      R8  d   TpVP%                  W4       Wn        VX,
          Vn        Wn        \        VR^ 4      p^ pVP&                  p. p. pVP(                  pVP*                  p\-        V4       EF  w  pp\/        VR4      '       Ed:   VP0                  pVP2                  pVR8X  d   VP4                  pVf   VP6                  P8                  p\;        VP<                  VP>                  4      p\;        VP@                  V4      p\C        VVPD                  V4      w  pp V VV,          ,           p!VPF                  PI                  VPJ                  V!VV,           VVRR	7       V V,          p V!V,          p!\M        VV!VP                  ,
          4       MVPN                  p"VR
8X  d%   VPF                  PQ                  V"WV,           4       MVPF                  PS                  V"4      p#V#'       g   \U        RV: RV": R24      h\W        WWVP                  R7      VPF                  n,         V#! VPF                  V\        VRR4      4       VPF                  =,VVR,          J db   VPZ                  '       g;   VP]                  VP6                  P^                  VP6                  P8                  4       VPa                  R^4       EKP  EKS  V VV,          ,           p!T!p$VP8                  p%VPb                  p&VPd                  p'V^ 8  d6   T!V'       d   ^ M#\g        VV^,
          ,          Ph                  V4      ,
          p$VPZ                  VP4                  3VP^                  V%38w  d   VPk                  VP^                  V%4       VPb                  V&8w  d   V&Vn1        VPm                  V&4       VPd                  V'8w  d   V'Vn2        VPo                  V'4       VVP(                  8w  dJ   \q        V4      p(\q        VP(                  4      p)V)V(,
          p*V(V),
          p+V+ F  p,VV,,          V$3VV,&   K  	  VVPr                  8w  dS   \q        V4      p(\q        VPr                  4      p)V)V(,
          p-V(V),
          p.V. F  p,VV,,          V$3VV,&   V! V,R4       K  	  VPh                  p/VPa                  V/VVR,          J 4       VVP(                  8w  d!   X* F  p,V,V%V&V!3V%3VV,&   K  	  VP(                  pV'       d&   V F  p,VV,,          w  p0p1V%V18  g   K  V0V%3VV,&   K!  	  V'RV%,          ,
          p2V'V%,           p3VVPr                  8w  d)   X- F  p,V,V 3V2V33VV,&   V! V,R4       K  	  VPr                  pV'       dC   V F<  p,VV,,          w  p0p4p5V2V48  g
   V3V58  g   K   V0\u        V2V44      \        V3V54      3VV,&   K>  	  \        VRR4      p6V6'       d"   VPv                  '       g   V6Vn;        V!Vn<        MVPv                  '       d   V6'       g;   VPz                  P}                  VPx                  V$VPv                  34       RVn;        MvVPv                  VPv                  8w  g   VPb                  VPv                  8w  dA   VPz                  P}                  VPx                  V$VPv                  34       V6Vn;        V!Vn<        VPF                  P                  V/VPZ                  VP4                  4      p7V V7,          p VV/P                  R4      \        V/4      ,           ,          pEK  	  V V^,
          V,          ,           p!V'       d   VP6                  P                  '       df   VP6                  P                  R8w  d!   VR8w  d   \        V V!VP                  Wq4       M*VR8w  d$   VP                  p8\        V8V8V	V8,
          WqRR7       V'       d   V F  p,VV,,          V!3VV,&   K  	  V'       d!   V F  p,VV,,          V!3VV,&   V! V,R4       K  	  VPv                  '       d3   VPz                  P}                  VPx                  V!VPv                  34       VP                  V	8w  d   \M        WVP                  ,
          4       R# R#   TPF                  =,i ; i)_linkRecordc                      R # r   rR   )argskwdss   *,r<   <lambda>_putFragLine.<locals>.<lambda>  s    r>   maxNrt   
_wordSpacecbDefnimgauto)maskanchorzMissing z callback attribute '')rl   cur_xcur_yleadingxslabelr0   endg?startr   r^   RTLrightleftF)r   )minr   )Grw   ru   	XtraStater   _x0autoLeadingr   
leftIndentr   _56ascent_16descent_leading
setLeading_olb	_oleadingabssetTextOriginr}   us_lineslinks	enumerater   r   kind	_fontsizer   r   r   width	paraWidthheightr   valign_canvas	drawImageimagerk   namebookmarkHorizontal
getNamedCBAttributeErrordict_curr_tx_info	_fontnamesetFontr   ry   r   rise_trailingSpaceLengthrE   _setFontsetFillColorsetRisesetlinkr   r   backColor_x
backColorsappendr   ro   rq   r   wordWrap_do_dots_fragmaxWidth	_x_offset)9r   rl   liner~   pKind
linkRecordru   r   r   x0r   r   dalr   r   olbxcywsr   r}   ALLLr   r   ifr   r   txfsrp   r   iy0iy1cur_x_sr   funcend_xr   r   r   SNSnLLeLLlnALeALrE   l0fsmaxnlonhilohibgtxtlenr   s9   &&&&&                                                    r<   _putFragLiner    s   M*DEJ??L	BHHE	B..KjjG	]]E

&C
WT[[1F#g+t||m4G[[F||mG.	{{G
g
gg?f*C||W$2<<//3u9~d"  * '/	L	#BGJJE	B	B{{HHHE% 11XXXF;;DU{||<88,,DV\\",,7V]]40#AfmmD9C'"*,

$$V\\'%)AaV$T
17266>*{{>JJ11$u7]K::006D,UYZ^-_`` .2R%cecoco-pBJJ,5RZZWVGD-IJJJ4E"I~|||JJrxx001B1BCBq! 
 gbj(GEzzHI66D1u1:NuUVWXUXz`b:cdR\\*QZZ,AAAJJ1||Y&(	*ww}

4  QZZG_1f"fA"*1+e"3HQK QVV|G[1f"fA$Qx~E!Hq'  66DKKQ%)^,QZZA#$Xi"@"IHQK ZZA (IB~&((l 
 X%C/CQVV|A !%yS0E!Hq)  VVA!&qJBB2vR#%c#bk#c"+#=a 
 ;t,B",,,!!(MM((2>>5",,*OQ#'BL[[",,.",,2LMM((2>>5",,*OQ#%BL%,BNZZ++D",,MFVOEtzz#z$'777G[ !^ WQYN"G   88e#g~eGDMM"@F]LLE%U
BG	A"1+w.HQK  
AQx(E!Hq  
|||
r~~wEG	vvrzbff9 I JJ4s   gg c                 8   \        VP                  4      w  rgrrVP                  P                  WgV4      pW,           V8:  EdW   VP                  V8w  g   VP
                  V8w  d   VP                  Wx4       V'       d   V\        VR VP                  4      ,          pVP                  ^ VP                  V,           4       \        WAV ,
          4       \        W!,
          V,          4      p\        WBW,          ,
          4       VP                  V	8w  d   VP                  V	4       V
'       d   VP                  P!                  WV
34       VP#                  W,          ^4       V'       d0   VP                  VP                  VP                  V,
          4       R# R# R# )_dotsOffsetXN)r   r   r   r   r   r   r   rw   r   r   r   rk   intr   r   r   r   ry   )r   r  r   r   rl   r   rE   r   r   r   r   r   r  ns   &&&&&&        r<   r   r     s   4@4J1D(YZZ##DH=F~x<<!R\\8%;JJx)WRrvv>>
288B;'5=!!6)*fh&'<<"OOI&bmm**E9+EF
AF1rrxx{32  r>   c           
      "   Wn         \        W4       VP                  pVR8  ;'       g    \        VRR4      pV'       gj   VP                  \        VP                   Uu. uF,  p\        VR4      '       d   K  \        VP                  4      NK.  	  up4      ,           ^,
          pV^ 8*  pV'       d   \        WW#R4       M?V P                  V\        X4      ,          4       \        WW#R4       V P                  ^ 4       \        W) 4       R# u upi )rt   ru   Fr   r   Nrv   )r   rk   
extraSpacerw   	wordCountsumr}   r   rq   rE   r  rz   r5   rl   r{   r   r~   r  r   rp   r   s   &&&&    r<   _leftDrawParaLineXr#    s    LBJCCnU!CF..$**%h*QT[\]^fTg&8j&8*%h!iijkk!VV4

U7^34VV4
Bw &is   D
7D
c           
         Wn         WP                  ,           V n         VP                  pVR8  ;'       g    \	        VRR4      pV'       gj   VP
                  \        VP                   Uu. uF,  p\        VR4      '       d   K  \        VP                  4      NK.  	  up4      ,           ^,
          pV^ 8*  pV'       d4   VRVP                  ,          ,           p\        W4       \        WW#R4       MATpV P                  V\        X4      ,          4       \        WW#R4       V P                  ^ 4       \        W) 4       V =R# u upi   T =i ; i)rt   ru   Fr   r   centerNrv   )r   r   r  r  rw   r   r!  r}   r   rq   rE   rk   r  rz   r5   	rl   r{   r   r~   r  r   rp   r   r;   s	   &&&&     r<   _centerDrawParaLineXr'    s   LvvoBO__
E!GGWT.%GnnSdjj)ljX_`abjXk*<*QVV*<j)l%mmnooGaZFs4??**ABM84AOOJw78H5OOA2O *m Os0   -E E +E
E
 E >B E E Ec           
      J   Wn         VP                  pVR8  ;'       g    \        VRR4      pV'       gj   VP                  \	        VP
                   Uu. uF,  p\        VR4      '       d   K  \        VP                  4      NK.  	  up4      ,           ^,
          pV^ 8*  pV'       d,   WP                  ,           p\        W4       \        WW#R4       MATpV P                  V\        X4      ,          4       \        WW#R4       V P                  ^ 4       \        W) 4       R# u upi )rt   ru   Fr   r   Nrv   )r   r  rw   r   r!  r}   r   rq   rE   rk   r  rz   r5   r&  s	   &&&&     r<   _rightDrawParaLineXr)    s    LJCCnU!CF..$**%h*QT[\]^fTg&8j&8*%h!iijkk!??"Q4w/

U7^34QD0
BrN &is   D 
,D 
c           
      p   Wn         \        W4       VP                  pVP                  ;'       g.    RTu;8  ;'       d    R 8*  Mu ;'       g    T;'       d    VR8  pV'       gj   VP                  \        VP                   Uu. uF,  p\        VR4      '       d   K  \        VP                  4      NK.  	  up4      ,           ^,
          pV^ 8*  pV'       gA   V P                  V\        X4      ,          4       \        WW#R4       V P                  ^ 4       M\        WW#R4       \        W) 4       R# u upi )rt   r   justifyNrv   )r   rk   r  	lineBreakr   r!  r}   r   rq   rE   rz   r5   r  r"  s   &&&&    r<   _justifyDrawParaLineXr-    s    LBJ^^VVj 6 6$ 6VVD<U<UZPUEUF..$**%h*QT[\]^fTg&8j&8*%h!iijkk!

U7^34VY7
VY7Bw &is   D3
D3
c                 8    V'       d   \         M\        ! WW#4      # r   )r)  r-  )rl   r{   r   r~   s   &&&&r<   _justifyDrawParaLineXRTLr/    s    #'-BBRQU\\r>   c                     \        V 4      pV'       d@   VP                  P                  VP                  4       VP                  VP
                  4      # ^ # r   )_wsc_end_searchr   r   r6   r   r   )rE   rl   r   s   && r<   r   r     s;    		BMO2::!!"((*bllBLLIVUVVr>   c                       ] tR tRtRtRtR# )_HSFragi  z!a frag that's followed by a spacerR   NrS   rR   r>   r<   r4  r4    s    +r>   r4  c                       ] tR tRtRtRtR# )_InjectedFragi!  zHa frag that's injected in breaklines and must be removed on reprocessingrR   NrS   rR   r>   r<   r6  r6  !  s    Rr>   r6  c                       ] tR tRtRtRtR# )
_SplitFragi%  za split fragrR   NrS   rR   r>   r<   r8  r8  %  s    r>   r8  c                       ] tR tRtRtRtR# )_SplitFragHi)  z.a split frag that's the head part of the splitrR   NrS   rR   r>   r<   r:  r:  )  s    8r>   r:  c                       ] tR tRtRtRtR# )_SplitFragHYi.  z:a head split frag that needs '-' removing before rejoiningrR   NrS   rR   r>   r<   r<  r<  .  s    Dr>   r<  c                       ] tR tRtRtRtR# )_SplitFragHSi2  z'a split frag that's followed by a spacerR   NrS   rR   r>   r<   r>  r>  2      1r>   r>  c                       ] tR tRtRtRtR# )_SplitFragLLi6  z<a frag that is forced to end in - because of paragraph splitrR   NrS   rR   r>   r<   rA  rA  6  s    Fr>   rA  c                   *   a  ] tR tRt o RR ltRtV tR# )_SHYIndexedStri:  Nc                   V'       g_   VP                  \        4      p. pVP                  p^ pV F  pV\        V4      ,          pV! V4       K  	  RP	                  V4      pVRR p\
        P                  W4      pW&n        V# )r   r0   Nr   )rD   _shyr   rx   r_   str__new___shyIndices)clsuXaxr8   selfs   &&&    r<   rG  _SHYIndexedStr.__new__;  sv    AAAASV!  
A#2A{{3!r>   )rH  r   )rT   rU   rV   rW   rG  rY   __classdictcell____classdict__s   @r<   rC  rC  :  s      r>   rC  c                   V P                  R4      p\        V \        4      '       d{   V P                  R,          pVR,          pV'       dL   \	        VR4      '       d2   TP                  VP                   Uu. uF  qUV,           NK  	  up4       W!,          p\        W#4      # V'       dW   W!,          p\	        VR4      '       d=   XP                  VP                   Uu. uF  qUX,           NK  	  up4       \        W#4      # V# u upi u upi )zDrejoin two parts of an original _SHYIndexedStr or str that was split-NNNrH  r   )rP   
isinstancerC  rH  r   extend)r8   ssrJ  rK  rM  _s   &&    r<   _shyUnsplitrZ  J  s    	A!N##MM!bEr-((r~~6~!A##~67GAa""		2m$$HH2>>2>acc>23!!&&H 7 3s   7DDc                   *   a  ] tR tRt o RtR tRtV tR# )_SHYWordi\  zIa fragword containing soft hyphens some of its strings are _SHYIndexedStrc           
       a V ^ ,          pRV n         V^ 8X  d   . # RpRpW,
          ;rgRp\        V R,          4       F  w  p	w  op
V3R lp\        V
\        4      '       dr   V! R4      pWl,           p\        V
P                  4       F9  w  rV
RV WR ppW! V4      ,           pVf   TpVV8  pV'       d    MWVVVVV3pK;  	  Wk! V
4      ,          pMWk! V
4      ,          pWb8  pV'       g   K  Vf   K   M	  Ve	   W,
          MRV n         V'       g   . # Vw  rpppppV	^,           pV V,          w  op
V
P                  p\        VR,           VRV^,            4      pV RV SV3.,           pVV,
          V^ &   VV^ ,          ,
          V,           .V'       g   . M/S\        TVV^,           R  Uu. uF  pVV,
          NK  	  up4      3.,           V V^,           R ,           p\        V4      \        V4      3# u upi )r   NF   NNc                 F   < \        V SP                  SP                  4      # r   r   r   r   )r8   r  s   &r<   r   %_SHYWord.shyphenate.<locals>.<lambda>g  s    ;q!**ajjAr>   rT  )_fswwr   rV  rC  rH  _SplitFragSHY
_SHYWordHS)rN  newWidthr   wwpossibleexceeded	baseWidth
baseWidth0fswwr  tsWshyLenbwjrM  r   r   leftwi1rK  leftsrc   rY  Rr  s   &&&                      @r<   
shyphenate_SHYWord.shyphenate^  s   !W
q5)!).	 b*GAeqAB!N++C'%amm4DA"#BQ%2%Dr$xKE|ET$x/H QtUFBH 5 RU"	RU"	$/xD,e# +$ )-(8T_j
.6+aeVqSBx1MMtCx$1Q30"I!E#z!!!WV^bQ~eZ[\]^_\_\`ZaLbZaUVQqSSZaLb7c4d3efimnpqrnrnsittQA.. Mcs   -G5)rd  N)rT   rU   rV   rW   rX   rw  rY   rP  rQ  s   @r<   r\  r\  \  s     S$/ $/r>   r\  c                       ] tR tRtRtRtR# )re  i  zOa head split frag that requires removal of a hyphen at the end before rejoiningrR   NrS   rR   r>   r<   re  re    s    Yr>   re  c                       ] tR tRtRtRtR# )rf  i  z=a fragword containing soft hyphens that's followed by a spacerR   NrS   rR   r>   r<   rf  rf        Gr>   rf  c                 \     \        V ^ ,          ^ ,          \        \        34      #     R# ; i)r   F)rV  r5   r  )fragss   &r<   _processed_fragsr~    s*    %(1+uSk22s   #& +c                   ^ .pVP                   p^ pRpV  F  pW5^ ,          ,          p\        V\        4      pVR,           F  pVw  rV'       dN   WuR,          J dB   V\        V	R,          VP                  VP
                  4      R,           ,          p\        V	4      p	WHJ d"   V\        VR,          ^,          V	4      3VR&   K  V! W34       TpK  	  K  	  W1^ &   \        X4      ! V4      # )z!F should be a list of _SplitFragsNr_  rt   r   )r   rV  r<  r   r   r   rZ  _reconstructSplitFrags)
Frv  aRwLenpstyr  rmhyffstyrn  s
   &         r<   _rejoinSplitFragWordsr    s    	
A	
BDD!!L)B%%BFCeAbE#,,s||DtKKN{k!B%(156"C7   aD!!$Q''r>   c                     \        V \        4      '       d#   \        V \        4      '       d   \        # \        # \        V \        4      '       d$   \        V \        4      '       d   \        # \         # \
        # r   )rV  r\  r4  rf  rA  r`   )r  s   &r<   r  r    sa    CMaPXCYCY:a00Z qh qOYZ[\cOdOd:a#=#=<qCJqjnqr>   c                
  a V3R lp. pVP                   p. p\        V 4      '       d   VP                   p V  F  p\        V\        4      '       d   K  V! V4       \        V\        4      '       d7   V! V4       \        V\
        4      '       d   V! \        V4      4       VR Km  Ko  V'       d   V! \        V4      4       VR V! V4       K  	  V'       d   V! \        V4      4       EMERp^ pRpRpV  EF  pVP                  pVR8w  EdZ   \        Vn        V'       d   \!        V4      pV'       g   K@  Rp\#        V4      pV^ ,          \$        9   g	   V'       g   V'       d9   VP'                  ^ V4       T! V'       d   \)        V4      MT4       Tp. pRpRp^ pM!T;'       d    \        VR,          \
        4      pV'       g   VP'                  ^ R4       M
V'       g   K  VRR  F  p\*        V9   d   \-        V4      pRpVP                  VV34       V\        VVP                  VP                  4      ,          pVP'                  ^ V4       T! V'       g   \        V\(        4      '       d   \/        V4      M
\        V4      4       . pRp^ pK  	  RpVR,          p\*        V9   d   \-        V4      pRpVP                  VV34       V\        VVP                  VP                  4      ,          pV'       dk   VR,          \$        9   dV   VP'                  ^ V4       T! V'       g   \        V\(        4      '       d   \)        V4      M
\        V4      4       . pRp^ pEKk  EKn  EKq  \1        VR4      '       Ed   VP2                  p\5        VR^ 4      pV'       d   \1        VR	4      '       d   SVn        VP9                  S4      pV'       d6   VP'                  ^ V4       T! V'       d   \        V4      MT4       . pRpRp^ p\:        Vn        V! VVR3.4       RpEK(  \<        Vn        V'       gC   V'       d;   \        VR,          \
        4      '       d   VR,          P                  VR34       EK}  VP                  VR34       EK  \1        VR
4      '       g   EK  V'       d#   VP'                  ^ V4       V! V4       . p^ pRpRp\>        Vn        V! ^ VR3.4       RpEK  	  V'       dD   VP'                  ^ V4       T! V'       g   \        V\(        4      '       d   \)        V4      MT4       V'       g$   V '       d   V ^ ,          p\        Vn        ^ VR3..pV# )zgiven a Parafrag list return a list of fragwords
[[size, (f00,w00), ..., (f0n,w0n)],....,[size, (fm0,wm0), ..., (f0n,wmn)]]
each pair f,w represents a style and some string
each sublist represents a word
c                    < V ^ ,          p\        V\        4      '       d2   VP                  S8w  d   SVn        VP                  S4      pW^ &   R# R# R# r   N)rV  r   _normalizerr   )r  rp   r   s   & r<   _rescaleFrag#_getFragWords.<locals>._rescaleFrag  sM    aDa}}h& (%%h/! ' r>   TrU  NFr0   r   r   r   r,  r   ) r   r~  rV  r6  r8  r4  r  r<  r   r   r   rZ  r  rE   _FK_TEXT_fkindrM   rD   r   insertr\  rE  rC  rf  r   r   rw   r  r   _FK_IMG
_FK_APPEND	_FK_BREAK)r}  r   r  rv  r  WaWr  f0Wlenr  lfrn  tshangingSpacer  hangingStrip
shyIndicesrE   r
  whsrp   cbs   &f                     r<   _getFragWordsr    sQ    	A	
B
AXX a..Qa
++qE!!W--034aD . 034aDqE  (+,d 
A66DRx#!$<D#(L$K7j(1*8A;!<*%*
',==JquW$=2 3BAqy*1-%)
HHaUOQ

AJJ??AHHQqM
j86L6Lz!}RYZ[R\]A!&JA    %bE19&q)A!%J!A[AJJ

;;DH
2HHQqMjJq4J4Jx{PWXYPZ[A!&JA 34 8$$XXBwq)q!233(0--h7171:1=%*
',&AH1R&zN#(L)AHz!B%'@'@"aV,!B(K((HHQqMqEAA!&J#(L$Aqf:#i l HHQqMjJq,B,Bx{JaAAHQrFA
 Hr>   c              #   T  "   V R ,           F  w  r\        VR4      '       d   V\        VP                  R^ 4      V3x  K5  V'       dS   \        V4      '       d   VP	                  R4      pV F(  pV\        W1P                  VP                  4      V3x  K*  	  K  V^ V3x  K  	  R# 5i)r_  r   r   r@   N)r   rw   r   r,   rB   r   r   r   )rp   r  r8   cs   &   r<   _fragWordIterr  n  s     "1XWQXXga0!33qzzHHV$Qzz1::>AA  Q'M s   AB(	AB(c                :   . p\        V4      ^,
          pV\        WS^,           4      ,          p. p^ pRp	^ p
V ^,          ^ ,          p\        V 4       F  w  rpW,           pW8  ;'       d'    \        T
;'       g    V
'       * ;'       d    W8*  4      pWJg	   V'       d   VP	                  4       p\        VR4      '       d   Wn        VP                  W34       V'       dO   \        V
.V,           4      pVP                  V4       V^,          pTpV\        WS^,           4      ,          p. pTp^ p
Rp	TpW,          p
W,          p	TpK  	  VP                  W34       \        V \        4      '       d   \        M\        ! V
.V,           4      pVP                  V4       V# )ag  given a frag word, w, as returned by getFragWords
split it into frag words that fit in lines of length
maxWidth the available length on the currebt line
maxWidths[lineno+1] the maxWidth for the next line
.....
maxWidths[lineno+n]

return the new word list which is either
_SplitFrag....._SPlitFrag or
_SplitFrag....._SplitFragHS if the word is hanging space.
r0   rE   )rx   r   r  boolcloner   rE   r   r8  rV  r4  r>  r:  )rp   r   	maxWidthslinenorv  	maxlinenomaxWidthNextr  	lineWidthfragText	wordWidthr  gcwr  newLineWidthtooLongs   &&&&             r<   _splitFragWordr  z  sn    	AIq IS!845L
AIHI	!QA"Q |'ccD1b1b9}?a?aQSQa,c:	Aq  !HHa\"	{1}-!'(Yax)@A!	HA	 	+ #, HHa\#Ag..K	?)QOAHHQKHr>   uK  (^(?:[a-z0-9\.\-\+]*)://)(?:\S+(?::\S*)?@)?(?:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|\[[0-9a-f:\.]+\]|([a-z¡-￿0-9](?:[a-z¡-￿0-9-]{0,61}[a-z¡-￿0-9])?(?:\.(?!-)[a-z¡-￿0-9-]{1,63}(?<!-))*\.(?!-)(?:[a-z¡-￿-]{2,63}|xn--[a-z0-9]{1,59})(?<!-)\.?|localhost))(?::\d{2,5})?(?:[/?#][^\s]*)?\Zc              #      "   R pV P                  V4      '       d   W2,          pV RR p K&  ^p V P                  W$4      pV^ 8  d   R# V^,          pWRV ,           WR V,           3x  K>  5i)r0   Nr   )endswithfind)urischemeslashtailr  s   &&&  r<   _slash_partsr    sn     D
,,u

#2h	A
HHUQ3	Q!WnSWT\))s   A+AA+c                 l   \        V 4      '       d   V P                  R 4      p \        P                  V 4      pV'       g   R# VP	                  ^4      pV \        V4      R p V'       g
   RV 9  d   RMRpV'       d   V '       d   W 3.M. \        \        WV4      4      ,           pVP                  4        V# )r@   N/\)	r,   rB   uri_patr4   r6   rx   r`   r  reverse)r  r;   r  r  rv  s   &    r<   _uri_split_pairsr    s    s||3::f-ScATWWQZF
c&kl
CCsNT 
"s6-d<SX;Y6ZZAIIKHr>   u[   A-Za-zÀ-ÖØ-öø-ɏẀ-ẅḀ-ỿА-яḂḃḊḋḞḟṀṁṖṗṠṡṪṫẛỲỳ   ­u   -­u   ^['"([{¿‘‚“„]+u   []'")}?!.,;:’‛”‟]+$z^[z]+$([z])c
                 (   \        V4      '       d   VP                  R 4      p\        P                  V4      p
V
'       d!   V
P	                  ^ 4      pV\        V4      R pMRp\        V\        4      '       d   VR,          R8X  d	   RpVRR pM@\        P                  V4      p
V
'       d"   V
P	                  ^ 4      pVR\        V4      )  pMRp\        V4      V	8  d   R# W2,
          p\        V4      pVep   W$8  g   V'       d`   V^V,
          V,          8:  dK   V FD  w  ppW,           pVV,           p\        WV4      pVV,           pVV8:  g   K5  R^ VVV,
          VV3u # 	  R# \        P                  V4      pV '       d   \        P                  V4      '       g#   \        P                  V4      '       d   RV9  d   \        RWV4      pV ! V4       Fv  w  ppW,           p\        P                  VR,          4      '       g   RpTpMRp^ pVV,           p\        WV4      pVV,           V,           pVV8:  g   Kg  VVVVV,
          VV3u # 	  \        V4      pV^8  d   V'       d   RV9  d   \        P                  V4      '       d   \!        \#        ^V^4      4       Ff  pVRP%                  VRV 4      ,           pRP%                  VVR 4      V,           p\        WV4      pVV,           pVV8:  g   KW  R^ VVV,
          VV3u # 	  R# R# R# R# R# )r@   Nr0   rT  r   )r,   rB   _hy_pfx_patr4   r6   rx   rV  _SplitWordLL_hy_sfx_patsearchr  r   _hy_shy_patrD   _hy_letters_pat_hy_shy_letters_patreversedranger_   )
hyphenatorr8   rh  rg  r   r   r   uriWasteReduceembeddedHyphenationhymwlr;   pfxsfxw0rv  r   rn  hwtwHhylenjcjclenr  r  s   &&&&&&&&&&               r<   
_hyGenPairr    s   qzzqxx'1!Aggajc#hiL!L!!aeSjcrFq!''!*C*CH9AC
1v~v	BA};>bQ~5Ex4O.O1EG H5"Wx<a2b51,,  	!A--a005H5N5Nq5Q5QVX`aVaC2a=CAaA$$QrU++CAQ1BBB8|%2b51,, !  	AA!t#!8K8Q8QRS8T8T%!A,'Abggaen$A!"$AQ1BBB8|!Br"uQq(( ( 9U#tr>   c                   ^ ;r. pVP                   p. pVP                  p\        ^\        V 4      4       F  pW,          w  rVP                  ^ 8w  d    R# \        VR4      '       d!   \        VP                  R^ 4      '       d    R# V	'       g   K]  \        V	4      '       d   V	P                  R4      p	V! V	4       V! \        V	4      Wq3.,          4       V\        V	4      ,          pK  	  RP                  V4      \        V4      3# )ztakes a frag word and assembles a unicode word from it
if a rise is seen or a non-zerowidth cbdefn then we return
None. Otherwise we return (uword,([i1,c1],[i2,c2],...])
where each ii is the index of the word fragment in the word
Nr   r   r@   r0   )rW  r   r  rx   r   r   rw   r   r,   rB   r_   tuple)
FWccplenrK  eXUaUr  r  rn  s
   &         r<   _fragWordSplitRepr    s     MB
A	
B
A	
B1SWu6619T1X7188GA#>#>(1::188F+q
1
3q6A6(?
c!f  771:eAhr>   c                6    \        R V  4       4      .V ,           # )zF are the fragsc              3   f   "   T F'  w  r\        W!P                  VP                  4      x  K)  	  R # 5ir   rb  ).0r8   rJ  s   &  r<   	<genexpr>#_rebuildFragWord.<locals>.<genexpr>.  s$     C#!Qzz!**55s   /1)r!  )r  s   &r<   _rebuildFragWordr  ,  s    CCDEaGGr>   c           	      D	   \        V4      pV'       g   R # Vw  r\        V4      '       d   VP                  R4      p\        P	                  V4      p	V	'       d!   V	P                  ^ 4      p
V\        V
4      R  pMRp
\        V\        4      '       d%   VR,          ^,          R,          R8X  d	   RpVR R pM@\        P                  V4      p	V	'       d"   V	P                  ^ 4      pVR \        V4      )  pMRp\        V4      V8  d   R # V^ ,          pW,,
          p\        V4      pVe   W8  g   V'       d   V^V,
          V,          8:  d   V F  w  ppW,           p\        V4      pVV,          w  ppV^V pVV,          w  ppVR VV,
           pV'       d   VP                  VV34       VVV,
          R  pVV^,           R  pV'       d   VP                  ^ VV34       \        V4      pW^ ,          ,           V8:  g   K  RV\        V4      3u # 	  R # \        P!                  V4      pV '       EdB   \"        P	                  V4      '       g%   \$        P	                  V4      '       Ed   RV9  Ed   V ! V4       F  w  ppW,           p\        V4      pVV,          w  ppV^V pVV,          w  ppVR VV,
           p\        P	                  VR,          4      '       g   RpMRpV'       g	   V'       d   VP                  VVV,           34       VVV,
          R  pVV^,           R  pV'       d   VP                  ^ VV34       \        V4      pW^ ,          ,           V8:  g   K  VV\        V4      3u # 	  \        V4      pV^8  Ed   V'       Ed   RV9  Ed   \$        P	                  V4      '       d   \'        \)        ^V^4      4       F  p\        V
RP+                  VR V 4      ,           4      pVV,          w  ppV^V pVV,          w  ppVR VV,
           pV'       d   VP                  VV34       VVV,
          R  pVV^,           R  pV'       d   VP                  ^ VV34       \        V4      pW^ ,          ,           V8:  g   K  RV\        V4      3u # 	  R # R # R # R # R # )Nr@   r0   rT  r   )r  r,   rB   r  r4   r6   rx   rV  rA  r  r  r  r   r  r  r  rD   r  r  r  r  r_   )r  r  rg  r   r  r  r  rK  r8   r;   r  r  rh  r  rv  r   rn  posfxr  FLffxsfxlsfxrFRr  r  r  r  s   &&&&&&&                      r<   _hyGenFragsPairr  0  s   "AfDAqzzqxx'1!Aggajc#hiL"\""r"vay}c'9crFq!''!*C*CH9AC
1v~v	AB	B 	A};>bQ~5Ex4O.O1E!f3B"Xb6S7CF|C:.3r67|1Y1c$Z0$R(d7H$a 0 444  	!Az,,Q//4G4M4Ma4P4PUW_`U`a=CAaAa&CsVFBAbB"vHCwB<D$$QrU++r		3tBw-(s2vw<DBqDEBRYYq#d, $AA$w !,R000' !. 	AA!t##!8K8Q8QRS8T8T%!A,'AcBGGAbqEN*+CsVFBAbB"vHCwB<DRYYDz*s2vw<DBqDEBRYYq#d, $AA$w !,R000 ( 9U#tr>   c                 r   V^ ,          pV^ 8X  d   . # \        V4      ^8X  d   V^,          w  r\        V\        4      '       d   \        V	4      p	\	        W	WrW8P
                  VP                  WEV4
      p
V
'       d]   V
w  rrppV'       d   \        M\        ! W,           WV,           3.4      \        V\        4      '       d   \        M\        ! WV3.4      .#  R# \        WW#WEV4      p
V
'       dH   V
w  rpV'       d   \        M\        ! V4      \        V\        4      '       d   \        M\        ! V4      .# R# r  )rx   rV  rA  r  r  r   r   r<  r:  r4  r>  r8  r  )r  r  rg  r   r  r  r  rh  r  r8   rv  r  r  r  r  r   rn  s   &&&&&&&          r<   _hyphenateFragWordr    s9   	AB	1uRi
2wz!ub&&QAzbHjj!**Ucy~&'#Brq!%'\[828QtH:MN`jkmnu`v`vP\  }G  QG  JL  PQ  MR  IS  PT  U  U   JH~chiHB1%'\[8!<jY[\cNdNdljt>tvw=xyyr>   c                       ] tR tRtRtRtR# )
_SplitWordi  z[simple str word split into _SplitWord instances
the function _splitWord does the splitting
rR   NrS   rR   r>   r<   r  r    s     	r>   r  c                       ] tR tRtRtRtR# )_SplitWordEndi  z/the remainder of a str word that has been splitrR   NrS   rR   r>   r<   r  r    s    9r>   r  c                       ] tR tRtRtRtR# )_SplitWordHi  z'hyphenation head if no hyphen was addedrR   NrS   rR   r>   r<   r  r    r?  r>   r  c                       ] tR tRtRtRtR# )_SplitWordHYi  z6head part of a hyphenation word pair with added hyphenrR   NrS   rR   r>   r<   r  r    s    @r>   r  c                       ] tR tRtRtRtR# )r  i  z=a word that's forced to end with - because of paragraph splitrR   NrS   rR   r>   r<   r  r    r{  r>   r  c                   4   a  ] tR tRt o RtR tRR ltRtV tR# )_SHYStri  z for simple soft hyphenated wordsc                X   VP                  \        4      p\        V4      ^8  di   \        P	                  V RP                  V4      4      p^ .pVP                  pV F"  pV! VR,          \        V4      ,           4       K$  	  V^R Vn        V# \        P	                  W4      p. Vn        V# )r`  r0   r   )rD   rE  rx   rF  rG  r_   r   __sp__)rI  r8   r
  rN  spasprX  s   &&     r<   rG  _SHYStr.__new__  s    GGDMq6!8;;sBGGAJ/DB))CBrF3r7N# Qr(DK  ;;s&DDKr>   c           	     &   RV n         \        \        \        V P                  4      4      4       F  w  rgV RV p\        WW%4      p	V'       g   Wn         W9,           p
W8:  g   K4  V P                  VR \        V 4      .,           p\        \        V4      ^,
          4       Uu. uF  qW,          W^,           ,           NK  	  pp\        VR,           4      pV P                  RV Vn        V\        \        P                  V4      4      .u # 	  R# u upi )zW
baseWidth = currentWidth + spaceWidth + hyphenWidth
limWidth = maxWidth + spaceShrink
r^  NrT  )rd  r  r`   r   r  r   rx   r  r   rE  r_   )rN  r   r   rk  limWidthencodingr  r  swswwswnwTrr  r
  s   &&&&&&        r<   __shysplit___SHYStr.__shysplit__  s    
 $DJ!$y'=">? #2Y!"Cs* #AB3t9+5A49#a&(ODOqad1qS6*OAD CB $BQBIwtyy|455 @ Es     D)r  rd  NrI   )	rT   rU   rV   rW   rX   rG  r  rY   rP  rQ  s   @r<   r   r     s     *6 6r>   r   c                       ] tR tRtRtR# )_SHYSplitHYi  rR   NrT   rU   rV   rW   rY   rR   r>   r<   r  r        r>   r  c                       ] tR tRtRtR# )	_SHYSpliti  rR   Nr  rR   r>   r<   r  r    r  r>   r  c                       ] tR tRtRtRtR# )r   i  z4lines/words value for a bidiSorted kind==0 paragraphrR   NrS   rR   r>   r<   r   r     s    >r>   r   c
                 J   V^ 8X  d   . # \        WWEWaW'W4
      p
V
'       d   V
w  rrpp\        V4      '       d@   \        V'       d   \        M\        ! W,           4      V4      \        \        V4      V4      .# V'       d   \        M\        ! W,           4      \        V4      .# R# r  )r  r   r   r  r  r  )r  r   r   rp   rh  rg  r   r  r  r  rv  hyr  r  r  r   rn  s   &&&&&&&&&&       r<   _hyphenateWordr    s    	1uRi:"H]pxA"#21aQ<<!Dad KANa 035 5 &(\[8!$?a@PQQ 	r>   c                   . pVP                   p\        V4      ^,
          p	Rp
V\        W4      ,          pV\        W^,           4      ,          p\        V 4      '       d   V P	                  V4      p \        V 4      pV  F  p\        WWV4      pW,           pVV8  df   V
'       g   V
'       gV   W8:  dP   T! V'       d   \        \        V
4      V 4      M
\        V
4      4       V^,          pTpV\        W4      ,          pTpRp
W,          p
TpK  	  T! V'       d   \        \        V
4      V 4      4       V# \        V
4      4       V# )z
split w into words that fit in lines of length
maxWidth
maxWidths[lineno+1]
.....
maxWidths[lineno+n]

then push those new words onto words
r0   )
r   rx   r   r,   rB   r   r   r   r  r  )rp   r  r  r  r   r   r  rv  r  r  wordTextr   r  bidir  r  r  s   &&&&&&&          r<   
_splitWordr    s    	A	
BIq IHY./HS!845LqzzHHXQ<DH6 | hxBDTd{:h/2
8@TUaKF#H Y!67HLH 	  {=*1-SH <I;RSHr>   c                   \        V ^ ,          \        4      '       d'   V ^ ,          pV R,           F  p\        W4      pK  	  V# \        V ^ ,          \        4      '       ds   \        V R,          \        4      '       d   \
        M\        pRP                  R V  4       4      p\        V R,          \        4      '       d   V# \        VR,           4      # RP                  V 4      # )z-R can be a list of pure _SplitWord or _SHYStrrU  r0   c              3   \   "   T F"  p\        V\        4      '       d   VR R MTx  K$  	  R # 5i)Nr   )rV  r  r  rY  s   & r<   r  $_rejoinSplitWords.<locals>.<genexpr>  s'     L!Qz!L99QsVq@!s   *,rT  r   )rV  r   rZ  r  r  rF  r_   )rv  rrY  cfr8   s   &    r<   _rejoinSplitWordsr#    s    !A$waD1AA A 	AaD	&	&qum44S,GGL!LMqum44qM,qu:MMwwqzr>   c                 :    \        \        V 4      V ^ ,          4      # r1  )r   r#  )rv  s   &r<   _BidiStrWrapRejoinSplitWordsr%  !  s    (+AaD11r>   c              #   b  "   . pVP                   p \
        pT P                  Y  Fo  pT^,           F_  p\        T\        4      '       d.   T! T4       \        T\        4      '       d   T! T4      x  TR KF  T'       d   T! T4      x  TR Tx  Ka  	  Kq  	  T'       d   T! T4      x  R# R# 5i)r   rU  N)r   rV  linesr   r%  r#  r  r  )blParar   stoprv  r  jfuncr  rp   s   &&&     r<   _yieldBLParaWordsr+  $  s     
A	
B "\\%%1A!J''1a..(N!(N!G  & 	Ah 	s   A=B/  B/!B/c                 8   V P                  4       pR F!  p\        W44      '       g   K  \        W44       K#  	  \        \	        WV4      4      Vn        \        V P                  \        4      '       d8   VP
                  P                  R R7       \        VP
                  4      Vn        \        VP
                  R,          \        4      '       dJ   \        VP
                  R,          \        4      '       d   \        M\        VP
                  R,          n        V.# )r'  c                     V P                   # r   )	__bidiL__rY  s   &r<   r   %_split_blParaSimple.<locals>.<lambda>A  s    Q[[r>   key)r'  r   rE   r   )r  r   delattrr`   r+  r}   rV  r'  r   sortr  r   r  r  	__class__)r(  r   r)  r  rL  s   &&&  r<   _split_blParaSimpler6  ;  s    A&1<< '$V$78AG&,,x((	01177#!''"+l++-7G-L-L	R^3Jr>   c                    . pV P                   W pV F  pVP                   F  pVP                  V4       K  	  WTR,          Jg   K5  \        V4      ^,
          pV^ 8  dG   \	        W7,          R4      '       d/   \        W7,          P                  R^ 4      '       g   V^,          pKM  V^ 8  g   K  W7,          pVP                  '       g
   RVn        K  VP                  R,          R8w  g   K  V;P                  R,          un        K  	  V# )r`  r   r   r^   r   )r'  r}   r   rx   r   rw   r   rE   )	r(  r   r)  r  r'  r  rp   r  r  s	   &&&      r<   _split_blParaHardr8  G  s    
ALL$EAHHQK "IAqAQ$71411'!$++gVW:X:XZ[_`Z`Z[!tDvvvqvVVBZ_affmf  Hr>   c                   VP                   pV'       g   VP                   R8w  EdW   VR8H  p\        V4      '       d   TpT;'       d
    \        V9   p	V	'       d   VRVP                  \        4       p\	        WP
                  VP                  4      p
V	'       d4   V
R\	        \        VP
                  VP                  4      ,          ,          p
M^ p
V F  pVP                  pT;'       d
    \        V9   p	V	'       dL   VRVP                  \        4       pV
R\	        \        VP                  VP                  4      ,          ,          p
V
\	        WP                  VP                  4      ,          p
V	'       g   K   M	  M^ p
VR8X  d
   V
R,          p
V\        VR^ 4      ,          pV'       g%   V P                  VP                  V
,
          V4      pMDV^ ,          pWP                  ,           VP                  V
,           ,
          pV P                  W4      pVP                  VP
                  VP                  4       VP                  \        VRVP                   4      4       \        V4      '       d   VP#                  V4       MeV F_  pVP                  VP                  VP                  4       VP                  VP                   4       VP#                  VP                  4       Ka  	  V P%                  V4       V'       gE   VP'                  4       VP                  R,          ,           p\)        WVP*                  ,
          4      pV# )	z:draw a bullet text could be a simple string or a frag listr   numericNr   r   bulletOffsetYbulletColor333333?)bulletAnchorr-   r'   indexr   bulletFontNamebulletFontSizerE   r   r   rw   	beginTextbulletIndentrightIndentr   r   r   textOutdrawTextgetXr   r   )canvasr{   r   
bulletTextr   rtlr>  r:  rn  qbulletWidthr  tx2r   bulletStart	bulletEnds   &&&&&&          r<   _drawBulletrP  V  s   %%L
e  ')	)A..MQ.Aa//0!%a)=)=u?S?STK+{=%BVBVX]XlXl'm!mm+ KFF22 21177=12A3]AJJPQPZPZ)[#[[K{1jj!**EE1   X{c1{	WU?1--Eu11+=eDA---u/A/A+/MN{2KK$$e&:&:;WU=ABZJAKK

AJJ/Q[[)KK 
 OOC HHJ!5!5!;;	V(8(889Mr>   c                .   V '       Ed   \        V 4      '       d"   \        WP                  VP                  4      pM=^ pV  F5  pV\        VP                  VP
                  VP                  4      ,          pK7  	  VP                  V,           RVP                  ,          ,           pVP                  R8X  d   VP                  VP                  ,           pMVP                  VP                  ,           pWV8  d   V^ ;;,          WV,
          ,          uu&   R# R# R# )z@work out bullet width and adjust maxWidths[0] if neccessary
    r=  r   N)r-   r   r@  rA  rE   r   r   rC  r   rD  firstLineIndentr   )rI  r   r  rL  r  	bulletLenindents   &&&    r<   _handleBulletWidthrU    s     z%z3G3GI]I]^K K{1661::qzzJJ  &&4sU=Q=Q7QQ	>>5 &&u'<'<<F%%e&;&;;FaLY/0L  r>   c                   . p^ pW,          pRp\        V 4      p^ ;rx WV8  dZ   W8  d   X	V,          R8X  d   V^,          pK  W8X  d4   V^,          pWV8X  d   M$^ pW,          p
V
P                  p	\        V	4      pK^   W8X  d   R# Rp. p^ p^ pW8  g   Kx  X	P                  RV4      pV^ 8  d   W8H   \        WV X
P                  V
P
                  4      pVV,          pW8  d@   V. 8w  d9   VV,
          pVP                  V,          R8X  d   V^,
          pV^,
          pK,  EK  V^ 8  d   TpV^ ,          V
J d   W^&   MWV3pVP                  V4       W8X  g   K  V^,          pK  )z
given a list of ParaFrags we return a list of ParaLines

each ParaLine has
1)  ExtraSpace
2)  blankCount
3)  [textDefns....]
each text definition is a (ParaFrag, start, limit) triplet
r^   Nr   )NNN)rx   rE   r  r   r   r   r   )r}  widthsr'  lineNummaxWr  r  limr   rE   r  r  r   cLenr   rr  rp   s   &&               r<   splitLines0r\    sX    EGoDA%jAC
c)US 0%1*%zQ4Hvv$i:u #i		#e$AsAFDqM!**QZZ@AAIDyT2XAvffSk3&'C%aiGsAtqyA$QKAvQr>   c                     V P                   pVP                  pWX8w  d   VP                  V4       VP                  p	Wi8w  d   VP	                  V4       VP                  WW44       R # r   )r   
_lineWidthsetLineWidth_strokeColorObjsetStrokeColorr   )
rl   x1y1x2y2nlwnsccanvolwoscs
   &&&&&&&   r<   _do_linerk    sS    ::D
//C
x#


C
xC IIbbr>   c           	      .   VP                   pVP                  pVP                  WP                  ,          ,
          pVP                  pVP
                  p	VP                  p
\        WV	R 7      pVP                  pWP                  P                  RP                  VP                   P                  V ,          ^,          4      VP                  V	4      ,           V,           pV F  w  rppppppVR8H  p\        VWP                  R7      p\        VV^R7      pVV,           pV'       g   V) pVV,           \        VR8X  d   V'       d   RMRMTV4      ,           pV'       g   T
pV^ 8  g   K  VP                  VVVVVV4       VV,          pV^,          pK3  	  R# ))rc   r  r  r^   	underliner:   r0   -0.125*L0.25*LN)r   r   r   r   r  r   r   r   _defaultLineWidthr   r   r_   r'  r   r=   rk  )r  rb  r   rl   r   r   r   y0r  fstcvaluesdwrd  r  kr  rp   or!  r;   r  rm  lwlgr   ys   &&&&&                      r<   _do_under_liner|    sI   	BHHE	AmmO	#B
A	
B	
BBb!F			B	jj$$SXXbll.@.@.CA.F%GWYZ	Z]_	_B#Aa!Aa{N	Qv&:&:;Qva(Us"FW2Ij8STU[\\b!cKKAr1b!,GAFA $r>   z^[a-zA-Z][-+a-zA-Z0-9]+$c                    V'       g   R # VP                  R4      '       d)   V P                  P                  RVR,          V^R7       R # VP                  R^4      p\	        V4      ^8H  ;'       d     V^ ,          P                  4       ;'       g    RpVR8X  d)   V P                  P                  RV^,          V^R7       R # \        P                  V4      '       dX   VP                  4       R8H  ;'       d    R;'       g    R	pVR8X  d
   V^,          pV P                  P                  W^VR
7       R # V P                  P                  W^R	R
7       R # )N#r0   r_  )relative:documentpdfGoToRURI)r  r   )	
startswithr   linkRectrD   rx   lower
_scheme_rer4   linkURL)rl   r   rectpartsr  r   s   &&&   r<   _doLinkr    s   s


BR$;

3q!UQ3358>>#399r:JJE!HdQ?f%%&227;;eDW}U1XdJJtADAJJtAEBr>   c           
         VP                   pVP                  P                  pVP                  W,          ,
          VP                  P
                  R ,          ,
          pRP                  VP                  V ,          ^,          4      pVP                  P                  WsP                  VP                  4      pVP                   F   w  r\        W:WW,           We,           34       K"  	  R# )g       @r^   N)r   r   r   r   r  r   r_   r'  r   r   r   r   r   r  )r  t_offr   rl   r   r   r{  rE   textlenr  r   s   &&&&       r<   _do_link_liner  	  s    	BhhG
19rtt}}S00A88BHHQKN#Djj$$T<<FG775U]AI>? r>   c                 0   V P                   pVP                  pVP                  pVP                  P                  pVP
                  pVP                  pVR 8X  d   \        VRV,          4      pMVR8X  d
   RV,          pVP                  '       dv   W&,           pWt,
          pVP                   FG  w  rpV P                  P                  V4       V P                  P                  WW,
          V^ ^R7       KI  	  . Vn        RVn        \        VP                  P                  4       4       F)  w  w  w  w  rrr\!        WWV,           WV,           34       K+  	  / Vn        VP"                  '       Ed   V P$                  p\'        VR7      p\        VP"                  P                  4       4       F  w  w  w  w  ppppppppppp	pp
VR8H  pVVR&   VVR&   \)        VVV P$                  R	7      p\)        VV^R	7      pVV,           pV'       g   V) pVV,           \)        VR
8w  d   TMV'       d   RMRV4      ,           pV'       g   TpV^ 8  g   K  V P+                  V	VV
VVV4       VV,          pV^,          pK3  	  / Vn        V;P                  V,          un        R# )r   r   r   )strokefillNrb   rm  r  r  rn  r0   ro  rp  )r   r   r  r   r   r   r   r   r   r   r   r  r   sortedr   ru  r  r   rq  r   r=   rk  ) rl   r   rr  r  r   r   r   ylydescrb  rd  r  r  r   r  r  rv  ru  rw  rp   rx  r!  r;   r  rs  rt  r  rm  ry  rz  r   r{  s    &                               r<   _do_post_textr    s1   	B	B
AhhG..KzzHEgc(l+	e	h,	}}}]}}GB!JJ##A&JJOOBRU7!OC % $*288??+<$= (12"2"ubR%01 %>BH	{{{!!!7=bkk>P>P>R7S30)q1Qq1Q2b%;IF3KF3K6"*>*>?B6!,BBBB3bQae	*xY_``A"aA#B2q"a0RQ 8T HHHr>   c                 <   VP                   pV'       Ed   VP                  4       pVR 8X  d   \        P                  pMUVR8X  d   \        P                  pM=VR8X  d   \        P                  pM%VR8X  d   R# \        RVP                   ,          4      h\        V 4      pV^8X  d(   V! V ^ ,          P                  4      V ^ ,          n        R# V\        P                  J d   RpV  F  pVP                  pV'       g   K  VP                  R4      '       g	   V'       d
   V! V4      pM,VP                  R4      pV^ 8  d   VRV V! WgR 4      ,           pVP                  R4      pWen        K  	  R# V  F&  pVP                  pV'       g   K  V! V4      Vn        K(  	  R# R# )	lowercase	uppercase
capitalizenoneNz+ParaStyle.textTransform value %r is invalidTr^   )textTransformr  rF  uppertitle
ValueErrorrx   rE   r  r  r  )r}  r   ttr  pbr  rJ  r  s   &&      r<   textTransformFragsr  C  s@   			B	r88:{?B_B,BZJUM`M``aaJa4uQx}}-E!HM399_BFF(<<$$1AsA!tbqE"QrU)OZZ_  FF(A = 
r>   c                   N   a  ] tR tRt o RtR t]! R 4      t]! R 4      tRt	V t
R# )cjkUih  z4simple class to hold the frag corresponding to a strc                    \         P                  W4      pW$n        \        VR 4      '       d    \	        VP
                  R^ 4      pWTn        V# \        WP                  VP                  4      Vn        V# )r   r   )
rF  rG  _fragr   rw   r   _widthr   r   r   )rI  valuefragr  rN  rp   s   &&&&  r<   rG  cjkU.__new__j  s]    {{3%
4!!GA.AK  &eMM$--HDKr>   c                    V P                   # r   )r  rN  s   &r<   r   cjkU.<lambda>s  s    r>   c                    V P                   # r   )r  r  s   &r<   r   r  t  s    $++r>   )r  r  N)rT   rU   rV   rW   rX   rG  propertyr  r   rY   rP  rQ  s   @r<   r  r  h  s%     > +,D-.Er>   r  c                 2   . p. p\        4       p^ ;p	;rV  EF&  pVP                  pVP                  pV'       dj   \        VRR4      p\        VR^ 4      '       d0   \	        \        VP                  V4      VP                  V4      w  ppM3\        VP                  V4      w  ppM\        VP                  V4      w  pp\        W4      p	\        V
V4      p
\        VV4      p\        W4      '       g<   VP                  4       pRP                  V4      Vn        VP!                  V4       . pTpVP!                  V4       EK)  	  V'       d8   VP                  4       pRP                  V4      Vn        VP!                  V4       \        ^V^VR,          WWW$R7
      # )r   r   Nr   r0   r_  )
r   r  r   r}   r   r   r   r   currentWidthr,  )r   r  r   rw   r   r   r   r   r	   r   r   r   r.   r  r_   rE   r   )r  r   	widthUsedr  r,  
calcBoundsr}   CWr  maxSize	maxAscent
minDescentrJ  r  r   r   r   r   s   &&&&&&            r<   makeCJKParaLiner  v  sc   E	B	B'((G(iFF::Qx-Fvga(("+HV]]8,LV]][c"d"21::h"G.qzz(COFGg'	&)	G,
~~xxzBggbkBGLLBB
		!) * 
88:''"+Rj159V]  xB  bk  @  @r>   c                  a . oV  F  pVP                   p\        V4      '       d   VP                  V4      pV'       d.   SP                  V Uu. uF  p\	        WdV4      NK  	  up4       Kf  SP                  \	        WTV4      4       K  	  . p^ ;p;rV^ ,          p\        S4      pW8  Ed   SV,          pV^,          pVP                  p\        VR4      '       d   Wn	        VP                  V4      pW,          p	\        VP                  R4      pW\        ,           8  ;'       d    V	^ 8  ;'       g    TpV'       g   K  W,
          pV'       g   \        V4      R8  d   W,           ^,	          p\        V^,
          VR	4       F  pSV,          pV'       d   \        V4      R8X  g   \        V4      R8  g   K6  V^,           pVV8  g   KH  V^,           pV\!        V3R l\        VV4       4       4      ,          pSV,          P                  pSV,          pTp M	  V\"        9  d    W^,           8  d   V^,          pVV,          pVP                  \%        SW WVW4      4        V\        V4      ,          pTp
^ p	EK  V	^ 8  d(   VP                  \%        SV
R WW,
          RV4      4       \)        ^VR7      # u upi   \&         d    TR	,          p L]i ; i)
z@This attempts to be wordSplit for frags using the dumb algorithmr   r,  i 0  Zsc              3   J   <"   T F  pSV,          P                   x  K  	  R # 5ir   )r   )r  iir  s   & r<   r  cjkFragSplit.<locals>.<genexpr>  s     1S
"!B%++
s    #NFr   r'  r   )rE   r,   rB   rW  r  r   rx   r   r   r  r   r  r(   ordr  r   r!  r#   r  
IndexErrorr   )r}  r  r  r  r  rE   rn  r'  r  r  lineStartPosr   nUrJ  rp   r,  endLiner  
limitCheckrr  ujrw  r  s   &&&&                  @r<   cjkFragSplitr    s   
Avv4==;;x(DHH$7$Qd1x($78HHT$*+  E#$$A$	|H	QB
$aD	QGG1&''$M!!(+A	AFF;/	--==)A+KK)7!-Jq6&= #/.1!4J"1Q3z"5qT(2,"4B !!A s$%aC *c1SaPQ
1S.S S
$%aDJJ$%aD$% % 6& ,,>1A FA!OJLL<):8jYbno)$SZ0 LI 1}_Q|}%5hI[\ablmn!%((O 8z  )$R=)s   J<
(K KKc                 (   VP                   V n        \        VR R4      V n        \        VRR4      V n        \        VRR4      ;'       g    RV n        \        VRR4      V n        \        VRR4      V n        \        VRR4      ;'       g    RV n        R	# )
underlineColorr0   underlineWidthunderlineOffsetz-0.125fstrikeColorstrikeWidthstrikeOffsetz0.25fN)	r^  rq  rw   _underlineColor_underlineWidth_underlineOffset_strikeColor_strikeWidth_strikeOffset)rl   rH  r   s   &&&r<   _setTXLinePropsr    s    !,,B '7;B '7;B!%(9"=JJBeM"5BOeM"5BOu^B7BB7Br>   c                    \        R4      p. P                  pV  FF  pRpVR,           F,  w  rg\        VR4      '       d   TpM
V'       g   TpWW,          pK.  	  V! V4       KH  	  \        VP                  VRR7      # )z0return the Visual order for a list of frag wordsi   r0   r_  r   T	directionwx)chrr   r   r   __self__)r}   r  pur  rp   rE   r  r8   s   &&      r<   fragWordsVisualOrderr    st    	VB
		AbEEDAq""ID  	
$  

Y$??r>   c                     V P                   # r   )	__bidiV__r/  s   &r<   r   r     s    akkr>   c                      a  ] tR tRt o RtRR ltR tR tR tR t	R	 t
R
 tR tR tR tR tR tRR ltRR ltR t]RR l4       tRtV tR# )r   i  a_
  Paragraph(text, style, bulletText=None, caseSensitive=1)
text a string of stuff to go into the paragraph.
style is a style definition as in reportlab.lib.styles.
bulletText is an optional bullet defintion.
caseSensitive set this to 0 if you want the markup tags and their attributes to be case-insensitive.

This class is a flowable that can format a block of text
into a paragraph with a given style.

The paragraph Text can contain XML-like markup including the tags:
<b> ... </b> - bold
< u [color="red"] [width="pts"] [offset="pts"]> < /u > - underline
    width and offset can be empty meaning use existing canvas line width
    or with an f/F suffix regarded as a fraction of the font size
< strike > < /strike > - strike through has the same parameters as underline
<i> ... </i> - italics
<u> ... </u> - underline
<strike> ... </strike> - strike through
<super> ... </super> - superscript
<sub> ... </sub> - subscript
<font name=fontfamily/fontname color=colorname size=float>
<span name=fontfamily/fontname color=colorname backcolor=colorname size=float style=stylename>
<onDraw name=callable label="a label"/>
<index [name="callablecanvasattribute"] label="a label"/>
<link>link text</link>
    attributes of links
        size/fontSize/uwidth/uoffset=num
        name/face/fontName=name
        fg/textColor/color/ucolor=color
        backcolor/backColor/bgcolor=color
        dest/destination/target/href/link=target
        underline=bool turn on underline
<a>anchor text</a>
    attributes of anchors
        size/fontSize/uwidth/uoffset=num
        fontName=name
        fg/textColor/color/ucolor=color
        backcolor/backColor/bgcolor=color
        href=href
        underline="yes|no"
<a name="anchorpoint"/>
<unichar name="unicode character name"/>
<unichar value="unicode code point"/>
<img src="path" width="1in" height="1in" valign="bottom"/>
        width="w%" --> fontSize*w/100   idea from Roberto Alsina
        height="h%" --> linewidth*h/100 <ralsina@netmanagers.com.ar>

The whole may be surrounded by <para> </para> tags

The <b> and <i> tags will work for the built-in fonts (Helvetica
/Times / Courier).  For other fonts you need to register a family
of 4 fonts using reportlab.pdfbase.pdfmetrics.registerFont; then
use the addMapping function to tell the library that these 4 fonts
form a family e.g.
from reportlab.lib.fonts import addMapping
addMapping('Vera', 0, 0, 'Vera')    #normal
addMapping('Vera', 0, 1, 'Vera-Italic')    #italic
addMapping('Vera', 1, 0, 'Vera-Bold')    #bold
addMapping('Vera', 1, 1, 'Vera-BoldItalic')    #italic and bold

It will also be able to handle any MathML specified Greek characters.
Nc           	         Vf   \        RR7      pWPn        W`n        T P                  YT;'       g    \	        VRR 4      V\
        4       R # )NparagraphImplicitDefaultStyle)r   rI  )r$   caseSensitiver  _setuprw   ri   )rN  rE   r   rI  r}  r  r  s   &&&&&&&r<   __init__Paragraph.__init__@  sB    ="(GHE* D!O!Owu\$/OQVXlmr>   c                   V P                   P                  pVR ,           .p\        V P                  P	                  4       4      pV Fv  pVP                  \        V4      P                  RR4      P                  RR4      : R\        \        W4      4      P                  RR4      P                  RR4      : 24       Kx  	  VP                  RV,           4       RP                  V4      # )(rf   r^     z: z) #)
r5  rT   r`   __dict__keysr   reprreplacerw   r_   )rN  r  rc   r  rw  s   &    r<   __repr__Paragraph.__repr__H  s    NN##sUGDMM&&()AHHas!;!C!CD!MdSZ[_ScNdNlNlmqsvNwNN  AE  FI  OJ  K  L 	qyy|r>   c                b   Vf   V! V4      p\        4       pV P                  Vn        VP                  W4      w  r$pVf<   \        RVP                  ^ ,          : RVR \        ^\        V4      4       : R24      h\        WB4       V'       d   TpWn        W@n	        W n
        W0n        ^ V n        R # )Nzxml parser error (z) in paragraph beginning
'r   )r   r  parser  errorsr   rx   r  rE   r}  r   rI  debug)rN  rE   r   rI  r}  cleaner_parserbulletTextFragss   &&&&&&  r<   r  Paragraph._setupQ  s    
 =4=D lG$($6$6G!,3MM$,E)E/} ~~a((.@s2c$i/@)A"C D Du+_
 	

$
r>   c           	     v   V\         8  d   R# Wn        V P                  pVP                  pWVP                  ,           ,
          VP
                  ,
          pW,
          VP
                  ,
          pWV.V n        VP                  R8X  d   V P                  V P                  4      pMV P                  V P                  4      pWpn
        \        V R\        VRR4      4      pVP                  p	VP                  ^8X  d   VR9  d   ^ p
VR8X  dC   VP                   F1  pV
\        VP                   VP"                  ,
          V	4      ,          p
K3  	  MVR8X  d8   VP                   F&  pWP                   VP"                  ,
          ,          p
K(  	  M\%        RV,          4      h\'        VP                  4      V	,          p
MnVR8X  d(   \        WP                   VP"                  ,
          4      p	M$VR8X  d   VP                   VP"                  ,
          p	\'        VP                  4      V	,          p
Wn        V P                  V
3# )	r   CJKr   r0   r   r   invalid autoLeading value %r)r   r^  r0   off)r(   r   r   r   rR  rD  _wrapWidthsr   breakLinesCJK
breakLinesr(  rw   r   r   r'  r   r   r   r  rx   r   )rN  
availWidthavailHeightr   r   first_line_widthlater_widthsr(  r   r   r   r  s   &&&         r<   wrapParagraph.wraph  s   e  


%%
%E4I4I)IJUM^M^^!.1B1BB,;>>U"''(8(89F__T%5%56Fd=}R1PQ--;;>*,%#\\#ahhqyy&8"AA * %'#\\((QYY"66 * %%Ck%QRRV\\*W4E!gmmFNN&BCe# --6&0Fzz6!!r>   c                  aa V P                   p\        V4      pV'       g   ^ # V^8X  d   \        V4      '       gs   V^ ,          pVP                  oVP                  o\        VV3R l\        VR4      '       d    \        VP                  R4       4       4      # VP                   4       4      # \        R \        V4       4       4      # )z-Attempt to determine a minimum sensible widthc              3   >   <"   T F  p\        VSS4      x  K  	  R # 5ir   )r   )r  rp   fNfSs   & r<   r  %Paragraph.minWidth.<locals>.<genexpr>  s     l6j{1R++6js   rE   r^   c              3   2   "   T F  q^ ,          x  K  	  R# 5ir  rR   )r  rp   s   & r<   r  r
    s     :%9tt%9s   )r}  rx   r~  r   r   r   r   rD   rE   r}   r  )rN  r}  nFragsr  r  r	  s   &   @@r<   minWidthParagraph.minWidth  s    

E
a19-e44aABBlGTUV\L]L]eAFFC6H6jlllcdcjcj6jlll:]5%9:::r>   c                   V'       g   . # VP                   pWB,          P                  pV\        V4      8w  d   WC,          P                  M\        V P                  4      pV P                  WV pV'       d#   \	        VR,          \
        4      '       d   VR K*  \	        VR,          \        4      '       d6   \	        VR,          \        4      '       d   \        M\        VR,          n
        V# )r`  r   )r'  sFWrx   r}  rV  r6  r<  r\  rf  rA  r5  )rN  r(  r   r)  r'  r  sFWNr  s   &&&&    r<   _split_blParaProcessed Paragraph._split_blParaProcessed  s    BYl"&E
"2u{DJJJJs Jqu]332aeL)),6quX,F,FjLAbEOr>   c                    V P                   P                  ^ 8X  d   \        # \        V P                  4      '       g   \
        # V P                  # r1  )r(  r   r6  r~  r}  r8  r  r  s   &r<   _get_split_blParaFuncParagraph._get_split_blParaFunc  sA    '+{{'7'7':# 	;3CDJJ3O3O+	;!88	;r>   c           
        \        V P                  4      ^ 8:  g   V\        8  g   V\        8  d   . # \        V R4      '       g   V P	                  W4       V P
                  pV P                  p\        V R\        VRR4      4      pVP                  pVP                  pVP                  ^8X  d   VR9  d   ^ ;rVR8X  di   \        VP                  4       FN  w  r\        VP                  VP                  ,
          V4      pW,           pWR,           8  d    MTp	V
^,           pKP  	  MVR8X  d]   \        VP                  4       FB  w  rWP                  ,           VP                  ,
          pWR,           8  d    MTp	V
^,           pKD  	  Mv\        RV,          4      hTpVR8X  d   \        VRVP                   ,          4      pMVR8X  d   RVP                   ,          p\#        V\%        V4      ,          4      pW,          p	\        V R	\        VR	^ 4      4      pV'       g   V^8:  g   V^ 8X  d   V =. # \        V4      p\        V R
\        VR
^4      4      pW8:  d   V .# V'       g2   W^,           8X  d%   V'       d   V^8X  g   V^8  d   V^,          pMV =. # V P'                  4       pVP(                  '       d   \+        V4      pRVn        MTpV P-                  RVV P.                  V! V^ V4      R7      p\1        ^VP                  ^ V W!R7      Vn        \3        VP                  V^,
          ,          \4        4      ;'       dQ    \        VP                  V^,
          ,          R4      ;'       d%    VP                  V^,
          ,          P6                  '       * Vn        ^Vn        V	Vn        VVn        VP@                  ^ 8w  d   \+        V4      p^ Vn         V P-                  RVRV! W8V4      R7      pR FE  p\        V V4      '       g   K  \C        VV\        V V4      4       \C        VV\        V V4      4       KG  	  VV.# )r   r(  r   r0   r   rt   r   r  r   allowOrphansallowWidowsN)rI  r}  )r   r'  aHr  r,  r  )r   )"rx   r}  r(   r   r  r(  r   rw   r   r'  r   r   r   r   r   r  r   r  r5   r  r   r%   r5  rI  r   rV  r   r,  _JustifyLast
_splitparar   r   rR  setattr)rN  r   r  r(  r   r   r   r'  r8   r   r  r  r   r  r  r  r  style1P1P2rL  s   &&&                  r<   rD   Paragraph.split  s   tzz?AE!1[5Fr	 tH%%IIj-

d=}R1PQ--;;>k;NAE!$V\\2CAAHHQYY.w7AAT))F!A 3 e#$V\\2CAxx		1AT))F!A 3 !!?+!MNNAE!ENN 23e#&Ka()ASFtN75PQ3RSA!Q$IJd=}Q1OP46MA#v QTacFAI))+===e_F!FNF>>$vtFSTUVGW>X16<<!+<Z	  *&,,qs*;HE  @  @$+FLL1,={$K @  @$*LL1$5$?$?A 	  A%UOE$%E!>>$u4;K>LAtA1WT!_-1WT!_-	 2wr>   c                <    V P                  V P                  4       R # r   )drawParar  r  s   &r<   drawParagraph.draw  s     	djj!r>   c                ,   ^ V n         \        V\        \        34      '       g   V.pMTp. p^ ;V n        p\        V4      ^,
          pV P                  pVP                  pT;'       d    VP                  4       R 9   pV'       d   \        p\        '       g   \        R4       VP                  ;'       d)    \        \        VP                  4      P                  4      p	\!        VRR4      p
V
'       d   \#        V
4      '       dJ   V
P%                  4       p
V
'       d/   \&        '       d#   \&        P(                  ! V
R7      P*                  p
M)Rp
M&\-        V
4      '       g   \/        RV
,          4      hMRp
VP0                  pVP2                  pV^8  pVP4                  pVP6                  pT
;'       g    T;'       g    TpV'       d   \!        VR\8        4      p^ ;V n        V n        \?        V P@                  Wb4       V^ ,          p\!        V R\!        VRR4      4      pVR!9  pV PB                  p\        V4      pV^8X  Ed   VPD                  '       Eg   \G        V^ ,          R4      '       Eg~   \G        V^ ,          R	4      '       Egd   \I        V4      '       EgR   V	'       EgI   V^ ,          pVPJ                  pVP                  p\M        VV4      w  ppR
p\G        VR4      '       d   \%        VPN                  4      pV'       g   VPQ                  ^ . VVVR7      # \S        V4      pV'       d   TpV	'       di   \U        V\V        RR7      p \Y        V4       U!U"u. uF>  w  p!p"\[        \]        V"VP                  \^        PJ                  R7      V V!,          V!4      NK@  	  pp!p"M\U        VVR7      pVV8g  pM_\        VP`                  \b        4      pVP`                  R,          pV F  p#\%        V#4      '       g   K   M	  VPQ                  ^ . VVVR7      # \e        RVVV Pf                  4      p$VV$,          p%. p&V$) p'\e        RVVV Pf                  4      p(^ p)V'       Ed
   VPi                  ^ 4      p*V*'       g   \        V*\j        4      '       d   ^p)M\l        V*9   d   \o        V*4      p*\e        V*VVV Pf                  4      p+V'V$,           V+,           p,VV%\        V&4      ,          ,           p-V,V-8  Ed   \        V*\p        4      '       Egp   V)'       Egg   \        V*\n        4      '       d   V*Ps                  VVV'V$,           V(,           R,
          V-V Pf                  R7      p.V.'       d$   V.VR&   V ;P<                  ^,          un        ^p)EK0  \        V&4      '       d|   V\u        WT4      ,          p/V'       g    V*Pv                  V(,           R,           V/8:  dC   V*Ps                  VV^ V(,           R,
          V/V Pf                  R7      p.V.'       d   V*.VR&   ^p)Rp*T'p,MV'       d   \!        VRR
4      '       * p0\y        V0'       d   T
MRTTT*T+T,T-V0'       d   TMR
T;'       d    T0X4
      p.V.'       d$   V.VR&   V ;P<                  ^,          un        ^p)EK4  V'       dX   \        V&4      '       dG   \y        V0'       d   T
MRTTT*T+T+TV0'       d   TMR
T;'       d    T0V4
      p.V.'       d   V*.VR&   ^p)T'p,Rp*V'       d   \        V*\j        4      '       gp   V)'       gh   \u        WE4      p1V+\{        VV1V1^,            4      8  dC   \}        V*V'V$,           W$VVV Pf                  4      VR&   V ;P:                  ^,          un        ^p)EK   V,V-8:  g   \        V&4      '       d	   V)'       d~   V*'       d   V&P                  V*4       V)'       dX   ^ p)V,V P                   8  d   V,V n         VP                  VV,,
          V&34       . p&V$) p'V^,          pV\u        WT4      ,          pEK  T,p'EK  V'V P                   8  d   V'V n         VP                  VV',
          V&34       V*.p&T+p'V^,          pV\u        WT4      ,          pEK  V&. 8w  d3   V'V P                   8  d   V'V n         VP                  VV',
          V&34       V'       d2   V F   p2V2^,          P                  \        R7       K"  	  \c        V4      pVPQ                  ^ VVVVR7      # V^ 8:  dL   \        ^ VPJ                  VP                  VP                  VPJ                  R"VPJ                  ,          . R7      # VP                  '       * p3. p. p4V4P~                  p5\        VV4      pR
pV'       d   \        ;QJ d    R V 4       F  '       g   K   RM	  R
M! R V 4       4      '       g   \        VVR7      p V	'       dE   \Y        V4       U!U"u. uF,  w  p!p"\        \        V"4      \        V V!,          V!4      4      NK.  	  pp!p"MV\Y        V4       U!U"u. uF  w  p!p"\        V"VV V!,          V!R7      NK  	  pp!p"M"V	'       d   V U"u. uF  p"\        V"4      NK  	  pp"^ p6V'       EdQ   VPi                  ^ 4      p#V5! V#4       V#R#,          ^ ,          pVP                  pVPJ                  pV'       g   ^ ;p7;p$p'Tp8\M        VV4      w  p9p:V#^ ,          p+V#^,          ^ ,          pV+^ 8  d   X'X$,           V+,           p,MX'p,VP                  \        8H  p;Tp-V'       d   X$p<V Fn  p=V=P                  \        8X  g   K  V=PN                  P                  R4      p>V>'       g   K?  V<V>\e        RV=P                  V=PJ                  4      ,          ,          p<Kp  	  V<V,          p<V-V<,          p-V;'       Egk   V,V-8  Edc   \        V#\        4      '       EgL   \G        VR4      '       Eg9   \        V#\        4      '       Ed   V#P                  V,V-4      p.V.'       dg   V.VR&   VP                  ^\        ^ VPQ                  \        RR7      R3.4      4       V4Pi                  R#4       V ;P<                  ^,          un        EK  \        V44      ^8  d   V\u        WT4      ,          p/V'       g   V#Pv                  R,           V/8:  dX   V#P                  V+V/4      p.V.'       d>   \        ^ VPQ                  \        RR7      R3.4      V#.VR&   V4Pi                  R#4       EK  EMDV'       Ed<   \!        VRR
4      '       * p0\        V0'       d   T
MRT#T,T-V0'       d   TMR
T;'       d    T0X4      p.V.'       dg   V.VR&   VP                  ^\        ^ VPQ                  \        RR7      R3.4      4       V4Pi                  R#4       V ;P<                  ^,          un        EKf  V'       d   \        V44      ^8  du   \        V0'       d   T
MRT#T+TV0'       d   TMR
T;'       d    T0V4      p.V.'       d>   \        ^ VPQ                  \        RR7      R3.4      V#.VR&   V4Pi                  R#4       EK  V'       d   \        V#\        4      '       g   \u        WE4      p1V+\{        VV1V1^,            4      8  d   \        V#VX$,
          V',
          W$4      VR&   VP                  ^\        ^ VPQ                  \        RR7      R3.4      4       V4Pi                  R#4       V ;P:                  ^,          un        EK  V,V-8  ;'       d    X7^ 8  ;'       g    T;p?V?'       Eg   V;'       d   EK  V#^,          ^,          p@V@'       d
   X7^,          p7VPJ                  pV'       ds   VP                  \        8X  dD   \        \        VP                  P                  V4      VP                  P                  V4      w  ppM3\M        VP                  V4      w  ppM\M        VP                  V4      w  pp\{        X8V4      p8\{        X9V4      p9\u        X:V4      p:V'       g   VPQ                  4       pAVA.pX@VAn'        EM=\        XAV4      '       g   X$'       d~   \        V4      ^,
          p!V!^ 8  de   VV!,          p=V!^,          p!V=P                  \        8X  g   K0  V=PN                  P                  R4      '       g   V=;PN                  R,          un'         VPQ                  4       pAVP                  VA4       X@VAn'        M}X$'       d]   XAPN                  P                  R4      '       g"   XA;PN                  RX@,           ,          un'        M3XA;PN                  X@,          un'        MXA;PN                  X@,          un'        \        V#\        4      '       d   \e        RVV4      M^ p$^ pBV#R,           EF  p!V!^ ,          PQ                  4       pAV!^,          VAn'        VAPN                  '       d   ^pBVP                  XA4       VAPJ                  pV'       ds   XAP                  \        8X  dD   \        \        XAP                  P                  V4      VAP                  P                  V4      w  ppM3\M        XAP                  V4      w  ppM\M        XAP                  V4      w  pp\{        V8V4      p8\{        V9V4      p9\u        V:V4      p:EK  	  X@'       g   XB'       d
   X7^,          p7T,p'EK  V;'       dB   VPQ                  4       pAVP                  VA4       T3;'       d    \        V#\        4      '       * pCMR
pCV'V P                   8  d   V'V n         VP                  \        VV',
          X7XCVX8X9X:VV6R7	      4       \        V44      ^,
          p6V^,          pV\u        WT4      ,          pV;'       d   . pE	KT  \        V#\        4      '       d   \e        RVV4      M^ p$V$V,          p%T+p'^p7VPQ                  4       pAVAPJ                  p8V'       ds   XAP                  \        8X  dD   \        \        XAP                  P                  V4      VAP                  P                  V4      w  ppM3\M        XAP                  V84      w  p9p:M\M        XAP                  V84      w  p9p:XA.pV#^,          ^,          VAn'        V#R,           F  p!V!^ ,          PQ                  4       pAV!^,          VAn'        VP                  VA4       VAPJ                  pV'       ds   XAP                  \        8X  dD   \        \        XAP                  P                  V4      VAP                  P                  V4      w  ppM3\M        XAP                  V4      w  ppM\M        XAP                  V4      w  pp\{        V8V4      p8\{        V9V4      p9\u        V:V4      p:K  	  EKY  V'       dC   X'V P                   8  d   V'V n         VP                  \        VV',
          X7R
VX8X9X:VV6R7	      4       V'       d*   V F#  p2V2P`                  P                  \        R7       K%  	  V4V n!        \        ^VR7      # u up"p!i u up"p!i u up"p!i u up"i )$a  
Returns a broken line structure. There are two cases

A) For the simple case of a single formatting input fragment the output is
    A fragment specifier with
        - kind = 0
        - fontName, fontSize, leading, textColor
        - lines=  A list of lines

                Each line has two items.

                1. unused width in points
                2. word list

B) When there is more than one input formatting fragment the output is
    A fragment specifier with
       - kind = 1
       - lines=  A list of fragments each having fields
                    - extraspace (needed for justified)
                    - fontSize
                    - words=word list
                        each word is itself a fragment with
                        various settings
    in addition frags becomes a frag word list

This structure can be used to easily draw paragraphs with the various alignments.
You can supply either a single width or a list of widths; the latter will have its
last item repeated until necessary. A 2-element list is useful when there is a
different first line indent; a longer list could be created to facilitate custom wraps
around irregular objects.r0   hyphenationLang)langNzLhyphenator should be a language spec or a callable unicode -->  pairs not %rr*   r   r   r   FrE   )r   r'  r   r   r   Tr  r   r   )r  rU  r^   rT  rt   )r  :r   r   Nnobrr1  )r   r   r   r   r   r   r'  c              3   8   "   T F  p\        V4      x  K  	  R # 5ir   )isBidiIndexListr  s   & r<   r  'Paragraph.breakLines.<locals>.<genexpr>  s     $HA_Q%7%7s   )r  bidiVbidiL)r  rE   :   NN)	r  r   r,  r}   r   r   r   r   r  r  )r   LTRr  皙ɿr   )a
_width_maxrV  r  r`   r   rx   r   r   r  r   r   shapingr  r
   r   shapablerw   r-   r3   pyphenPypheniteratecallabler  r  r  spaceShrinkagesplitLongWordsr*   _splitLongWordCount_hyphenationsrU  rI  r}  r   r   r~  r   r	   rE   r  rD   r   r  r   r   shapeStrr   r}   r   r   r  popr  rE  r   r  r  r   rd  r  r   r  r   r4  	sortBidiVr   r   justifyBreaksr  anyr  bidiIndexListWrapr   r   r   r  r  r  ro   r:  r\  rw  r  r6  r  r8  r  r  r   r   r   r   r.   r  r4  r   )DrN  r   r  r'  r  r  r   r   doBidir4  r  r  r  hyphenation2r:  r;  attemptHyphenationr  r   r   r  r}  r  r  r   r   r   r   bidiSortrE   r}   _wordsVXr  rY  rp   
spaceWidthdSpaceShrinkcLiner  hywforcedSplitwordr  rg  r  hswnMWhyOknmwr  njlbvr  aFWr  r  r  r  r  r,  spaceShrinkwinsr  nTextr  nillbsD   &&                                                                  r<   r  Paragraph.breakLines	  sB   @ %t--E7yi  f	N1$	

>>??hnn.-?F:--JJD)@)I)I$JU#4R8
Z  '--/
&&!'J!?!G!GJ!%Jj)) !or|!|}} * J--#77*1,----'PP>PP=PE"<=UVE899 4#5 	4??5;Q<d=}R1PQ 
2


E
AI'%(8*D*DPUVWPXYdHeHe ''77aAzzHzzH.xAOFGHq  QVV}776'[c7dd "$KE!&"!-ei4!PB H  IN  O  %P  Owzwxyz%5hq!**^_^h^h6ijlmnjopq%r  OE  %PE$0($KE#(F?%aggh7
AQxx  776'[c7dd$S(HdmmLJ)*4LE&;Lc8Xt}}ECK%yy|
4
 ; ;"#KT\"4=D'h$--P	'*4y@#l3u:&==H$jk.J.Jkk!$w//"// (( ,z 9C ?$ F (+/==	 0 " ),E#J ..!3.*+K$ ZZ"+C	,A"BC+

3t0Cc/I&*&7&7$,h$%GdN$'/3}}	 '8 '& $'26E#J23K+/D/;H+#*1VE#::,4ZT ((D)Xx6:N$7$@$@D%I ),E#J ..!3.*+K$)c%jj"0t ((D)YPX6:N$7$@$@D%#IC  #.2Vc
./+7'+%z$z/J/Jk!&3$S3s1u)=%>>)3Dj9PQZbjkstx  uB  uB  *CE#J 4494*+K$X%SZZ;U\\$/"&'#doo5th&95%AB "(2{!#,S-B#C'/#doo5tLL(\"95!AB!FE#,LaKF(Y)>?H by/<h5u=>AaDII)I,  77fWV^7__QY!ennu~~&+ooennUYZ_ZhZhUh"$& & +++EEB))C"52FH$H$H$H$H I I)&HE`ijp`qr`qY\YZ[\/a0@2a5QRAST`qFrF`ijp`qr`qY\YZ[\l1xbeRST`qFrF4:;Fq-*F;C&JJqMAbE!H::::455A5
\&G,<Xh,O)IzaD	aDGQ;+j89DH+H HHi/	#!",K#99h.!#s!3B!r +r+c"++bkk2Z/Z Z	 $
  >1K+H yXh%6z!K?X?Xahijksatat!!H--ll8X>*-F3K"MM!M1aggY\^g>_`b=c:d,efFF2J ..!3.$ WQY"+C	,A"BC+qwwt|S/@&'ll9c&B#&3@!QWWT]ceWEfgiDjAk3lmn2oF3K$&FF2J$,++#*1VE#::0t$%hx6:N$7$@$@D%I *-F3K"MM!M1aggY\^g>_`b=c:d,efFF2J ..!3.$)c"gai"44ZT())H:>E(;(D(De#MC  #/<aPY_aAbce@f=g/hij.ks "r
 (%j:.F.F!&3$S3s1u)=%>>*88J;N|;[\e*mF3K"MM!M1aggY\^g>_`b=c:d,efFF2J 4494$#H,441BBw (aDGEa1fa zzH!88W,-6xPX7YZ[ZbZbZiZijr-sNGF.>qzz(.SOFG*:1::h*O!'(3G #If 5I!$Z!8J GGI!"!&%a]]% #E
1A"#Q$%*1X !Q#%99h#6+-77+;+;C+@+@(*3$)GGIQ!&# vvs33FFcEk1FFFeOF%GQRST[G\G\S(!CbcJBrUUaDJJL t6662Q#$::% xx01:8AHHOOT\;]^_^f^f^m^mnv1w2B1::h2W.>qzz(.SOFG"%gh"7$'	&$9	%(G%<
 #  !R1#+L GGIQ#GGJq,G(G##DOO3|T_LLXl5JVW25U18T^iq,/"1 2 b'!)C aKF(Y)>?H  " GQRST[G\G\S(!CbcJ#-n#<L#,LA	AjjG!88W,-6xPX7YZ[ZbZbZiZijr-sNGF4DQZZPW4X1Iz0@G0T-	:CEqT!WAFrUUaDJJL tQ#$::% xx01:8AHHOOT\;]^_^f^f^m^mnv1w2B1::h2W.>qzz(.SOFG"%gh"7$'	&$9	%(G%<
 #" /<X(\2IUVaf*/'[eow|A BAGGLLYL/ DJ!511C %PH sr;s   AAY2AY"AYAYc           
        \        V\        \        34      '       g   V.pV P                  p^ V n        \        V P                  W!4       V P                  p\        V4      pV^8X  Ed(   \        V^ ,          R4      '       Eg   VP                  '       g   V^ ,          p\        V R4      '       d;   \        V R^ 4      '       d(   VP                  ^ V P                  P                  R7      # . p^ p\        VR4      '       d   VP                  pMRP!                  \        VR. 4      4      p\#        WVP$                  VP&                  4      pV U	U
u. uF	  w  rW.3NK  	  pp	p
VP                  ^ WP&                  RVP&                  ,          R7      # V^ 8:  dL   \)        ^ VP&                  VP$                  VP*                  . VP&                  RVP&                  ,          R	7      # \        V R4      '       d    \        V R^ 4      '       d   V P                  # \        V R
\        VR
R4      4      pVR9  p\-        W1V4      # u up
p	i )zRInitially, the dumbest possible wrapping algorithm.
Cannot handle font variations.r   r(  r  r  rE   r0   r}   )r   r'  r   r   )r   r   r   r   r'  r   r   r   r2  r  )rV  r`   r  r   r   rU  rI  r}  rx   r   r   rw   r  r(  r'  rE   r_   r"   r   r   r   r   r  )rN  r  r   r}  r  r  r'  r  rE   r  r   wrappedLinesr   r  s   &&            r<   r  Paragraph.breakLinesCJK	  s    )T%L11	{9

 	4??E=

U19WU1Xh77aAtH%%'$|A*F*FwwAT[[->->w??EFq  vvwwwq45dqzz1::FE
 <AA5ZbRL5LA77jjRVWXWaWaRa7bbQY!ennu~~&+ooRu~~^bchcqcq^qs s 4!!gd<&B&B;;d=}R1PQ 
2
Ej99 Bs   H;c                8    V P                   P                  W4      # r   )rh  rB  )rN  rM  r{  s   &&&r<   rB  Paragraph.beginText	  s    yy""1((r>   c           	        V P                   pV P                  pV P                  pVP                  pVP                  p\        V R\        VRR4      4      pVP                  pTp	V'       d   Rp
\        ^^^ 4      p\        RRR4      pM&\        VRR4      p
\        VRR4      pVP                  pV'       g   V'       Ed=   V
'       Ed4   VP                  4        VP                  p\        ^ ^ R7      pV'       d]   V
'       dU   VP                  V4       VP                  V
4       ^VR	&   \        VR
^ 4      pV'       d   V'       g   VP                  pWR&   V'       d   VP                  V4       ^VR&   \        VR^ 4      p\!        V4      w  ppppV! VV,
          V) V P"                  WP$                  ,           ,
          V,           V,           V P&                  V,           V,           3/ VB  VP)                  4        \+        V4      pV P,                  pV^ 8  Ed>   \        V R^ .4      pVV\+        V4      ,
          VR,          .,          ,          pVP                  4        VP.                  pVP0                  V^ ,          ,           pV^,
          p\        V RR4      '       * pVP2                  pVP4                  pVR8H  pT;'       d    V P6                  pVP8                  ^ 8X  Edp   V\:        8X  d   \<        p MCV\>        8X  d   \@        p M1V\B        8X  d   \D        p MV\F        8X  d   V'       d   \H        M\J        p Tp!\L        '       d   V P&                  V!PN                  ,
          p"M(V P&                  \        V!RV!PN                  4      ,
          p"V'       d   \Q        VVV"VVVR7      pVP                  V!PR                  4       V PU                  V	V"4      p#RV PV                  PX                  P[                  4       9   V#n.        VR8X  d(   \_        WdP`                  VPb                  ,
          4      pM$VR8X  d   VP`                  VPb                  ,
          pVR9   d
   VR,           MTV#n2        V#Pg                  V!Ph                  V!PN                  V4       V^ ,          ^ ,          p$V^ ,          ^,          p%T;'       d    V^8H  p&V&'       d   V'       d   \+        V%4      V8  d   Rp&X ! V#VV$V%V&4      p'V!Pj                  '       g   V!Pl                  '       Ed   \o        \p        V#4      V#n8        \s        4       ;V#n:        ;p(V#n;        \y        V#W#4       V"V(n=        V!V(n>        VV(n        VV(n        V!Pl                  V(n6        V!PR                  V(n)        . V(n?        V'V,           p)V\F        8w  g	   V&'       d   ^ p$V!Pj                  '       d   \        ^ V)V$V#V!Pj                  4       V!Pl                  '       d   \        ^ V)V$V#4       \        ^V4       F  p*VV*,          ^ ,          p$VV*,          ^,          p%T;'       d    V*V8H  p&V&'       d   V'       d   \+        V%4      V8  d   Rp&V ! V#VV*,          V$V%V&4      p'V'V,           p)V\F        8w  g	   V&'       d   ^ p$V!Pj                  '       d   \        V*V'V$V#V!Pj                  4       V!Pl                  '       g   K  \        V*V)V$V#4       K  	  EMV\        ^V4       Fe  p*VV*,          ^,          p%T;'       d    V*V8H  p&V&'       d   V'       d   \+        V%4      V8  d   Rp&V ! V#VV*,          VV*,          ^ ,          V%V&4       Kg  	  EMV'       d%   V F  p+V+P                  RRR1,          V+nC        K   	  V^ ,          p!\L        '       d   V P&                  V!PN                  ,
          p"M(V P&                  \        V!RV!PN                  4      ,
          p"\        p V'       d   Tp,\Q        VVV"VVVR7      pV\:        8X  d   \        p M_V\>        8X  d   \        p MMV\B        8X  d   \        p M;V\F        8X  d   V'       d   \        M\        p M\        R\        V4      ,          4      hV PU                  V	V"4      p#RV PV                  PX                  P[                  4       9   V#n.        \y        V#W#4       \o        \p        V#4      V#n8        VV#n2        \s        4       ;p(V#n;        RV(n)        RV(n        ^ V(nK        . V(n?        / V(n5        / V(nL        / V(n6        VP                  V(n        VV(n        RV#nM        RV#nN        V"V(n=        V!V(n>        VV(n        VV(nO        V P"                  V(nP        RRuV#nQ        V#nR        V^ ,          p+T;'       d    V^8H  p&V&'       d   V'       d   V+P                  V8  d   Rp&V ! V#VV+V&4       \        V#4       \        ^V4       F[  p*VV*,          p+T;'       d    V*V8H  p&V&'       d   V'       d   V+P                  V8  d   Rp&V ! V#VV*,          V+V&4       \        V#4       K]  	  VP                  V#4       VP)                  4        R# R# )zDraws a paragraph according to the given style.
Returns the final y position at the bottom. Not safe for
paragraphs without spaces e.g. Japanese; wrapping
algorithm will go infinite.r   r0   r   g?borderWidthNborderColor)r  r  r  borderRadiusradiusr  borderPadding_offsetsr  Fr   r   )rJ  ru   r   r   z-handledzbad align %sr   )r1  r   )Vrh  r   r(  r'  r   rw   r   r   r   	saveStater  r   ra  r_  	roundRectr   r!   r   rD  r   restoreStaterx   rI  	alignmentrR  justifyLastLiner   r  r   r   r   r   r   r   r   r    r   r   r)   r   rP  r   rB  r5  rT   r  ru   r   r   r   r  r   r   r   r   r/   rk  r&   r   r   r  r   r  r   r|  r  r  r}   r#  r'  r)  r/  r-  r  r  r   r   r   r   r   r   r   r   r   r  rF  )-rN  r  rH  r   r(  r'  r   r   r   r   rq  bcr  opr   brbptbprbpbbplbpnLinesrI  rh  rl  r{   rZ  noJustifyLastjllwcr   isRTLbRTLdplr  r   rl   r   r}   lastLiner  r   rm   r  r   oos-   &&                                           r<   r#  Paragraph.drawPara	  sS    

--d=}R1PQ %%
Bq1Bs3s#B}T2B}T2BB ""BQa(Db%%b)##B'!"XU>!4e))B%'N##B' Vq1B!.r!2Cc3zC

j1B1B&BCcI#Mc)#-  	 
 !U__
A:tJs3HH-~==HI**8A;6F(C '^E BBM))E~~HeOE--T--D{{A~'+C)+-C(*,C*,5:1@TC++ KK!**4E KK'!HQZZ*HHE(uZRVWF ##AKK0^^E51"0DNN4K4K4Q4Q4S"S%!'--*FGG %'$mmFNN:G 7?-6Ox
2U] 

1::qzz7;1Xa[a(66VQY#e*U*:"HRUH=:::",Xb"9BK046BE6B#B6$BHBD$BH$BHFFBG#$;;BL$&BMz)B *,q"zzz&q"b"ajjAvvv}QB; #1f-"1Xa[ %a#0#;#;QV##e*U2B%*H #R!b% J":-$j0H1b:::*1eRQZZH666=BB#? . #1f- %a#0#;#;QV##e*U2B%*HR!eAhqk5(K .  %%)ZZ"%5
 !&!H++ KK!**4E KK'!HQZZ*HHE(B(uZSWXF',C)+.C(*-C*,6;2AVC$^d9o%EFF ^^E51"0DNN4K4K4Q4Q4S"SF2("5'"&&(R\!!  "]]
 *"  !,#zz,0$)R\Qx(66VQY$..*>"HRx0b! q&)A 8D,77CHEdnnU.B!&Xa[$9!"% * OOB!A r>   c                   \        V RR4      pV'       d   . pVP                  p\        V4      '       dE   V F=  pVR,           F  w  rgV! V4       K  	  \        V\        4      '       g   K5  V! R4       K?  	  M/V F)  p\        VR4      '       g   K  V! VP                  4       K+  	  RP                  V4      # V'       d   \        V RR4      pVf   \        V 4      pV# R# )zXConvenience function for templates which want access
to the raw text, without XML tags. r}  Nr_  r^   rE   r0   )	rw   r   r~  rV  r4  r   rE   r_   r  )	rN  identifyr}  plainsplains_appendrO  r   rE   r  s	   &&       r<   getPlainTextParagraph.getPlainText
  s     WT*F"MMM&&!D&*2hh
%d+ '/!$w//%c*	 " "DtV,,%dii0 " 776?"4t,D|DJTKr>   c                    \        V R4      '       g   Q R4       hV P                  P                  '       d   V P                  3R lpMV P                  3R lp\	        \        WP                  P                  4      4      # )zConvenience function; tells you how wide each line
actually is.  For justified styles, this will be
the same as the wrap width; for others it might be
useful for seeing if paragraphs will fit in spaces.r   z%Cannot call this method before wrap()c                 &    WP                   ,
          # r   )r  r  rp   s   &&r<   r   0Paragraph.getActualLineWidths0.<locals>.<lambda>
  s    a//.Ar>   c                      W^ ,          ,
          # r1  rR   r  s   &&r<   r   r  
  s
    aq'kr>   )r   r(  r   r   r`   rg   r'  )rN  r  s   & r<   getActualLineWidths0Paragraph.getActualLineWidths0
  s_    
 tW%%N'NN%;;"&**AD"&**9DC[[../00r>   c           
     N   R .pVP                   p\        V 4       F  w  rVV'       d   V! RV^ ,          ,          4       VR,           F\  pV! R\        V^ ,          4      ,          4       V! RV^,          ,          4       V! RWVP                  P                  3,          4       K^  	  V! R4       K  V! RV^ ,          RP                  R	 VR,           4       4      WVP                  P                  3,          4       K  	  VR
,          pVRV,           P                  V4      ,           # )[z    [%r,r_  z        (%s,)z        %r),z    ], #%d %sz    ]z[%r, %s], #%d %s, c              3   |   "   T F2  pR V^ ,          P                   P                  : RV^,          : R2x  K4  	  R# 5i)r  ,)N)r5  rT   )r  r  s   & r<   r  &Paragraph.dumpFrags.<locals>.<genexpr>  s0     8vpujlbeooF^F^_abc_d_d9epus   :<r^   rf   )r   r   r  r5  rT   r_   )r}  rT  fullrv  r  r  r  r  s   &&&     r<   	dumpFragsParagraph.dumpFrags
  s   EXXU#CA:!$%B%%Bbe45~1-.!KK,@,@)AAB   7%1dii8vpqrtpu8v.wxy  {F  {F  {O  {O  )P  P  Q $ 3JDF==###r>   )r=  r<  r3  r  r(  rI  r  r  r  r}  r   r   rE   r   )NNNr`  r@   r1  r   )   F)rT   rU   rV   rW   rX   r  r  r  r  r  r  r  rD   r$  r  r  rB  r#  r  r  staticmethodr  rY   rP  rQ  s   @r<   r   r     ss     =|n.'"R;	;
Sj"B2H(:T)V"p2
1 $ $r>   __main__c                    \        R \        V 4      ,          4       V P                  P                  p\        P
                  P                  p\        V4       F  w  r4W,          p\        VR4      '       d   VP                  pM	V^,          p\        V4      pV! RW6\        \        VRR4      4      3,          4       \        V4       F+  pV! RV\        WW,          RWW,          4      3,          4       K-  	  \        4        K  	  R# )z$dumpParagraphLines(<Paragraph @ %d>)r}   zline%d: %d(%s)
  r   Unknownz %d:'%s'rE   N)printidr(  r'  sysstdoutwriter   r   r}   rx   rF  rw   r  )Pr'  outwr  r   r}   nwordsrp   s   &       r<   dumpParagraphLinesr  	  s    4r!u<=zz&FA8DtG$$

QZF%#gd;y6Y2Z([[\6]Z758F58#D EEF #G 'r>   c           	          R V ^,          ,          .pR FG  p\        V ^ ,          V4      '       g   K  VP                  V: R\        V ^ ,          V4      : 24       KI  	  RP                  V4      # )z'%s'=r  )	r   r   r   r   rm  striker   r   r,  )r   r   rw   r_   )rp   rv  rL  s   &  r<   fragDumpr    sV    QqTM?sAqtAAgad1o67 t yy|r>   c                    \        R \        V 4      V P                  4       3,          4       V P                  p\	        V4      p\        V4       Fz  p\        RY1V,          P                  RP                  W,          P                   Uu. uF(  qD\        8w  g   K  V: R\        W,          V4      : 2NK*  	  up4      3,          4       K|  	  \        P                  P                  p^ p^ p\        VR4       Fe  pWg^ ,          ,          pV! RW6V^ ,          3,          4       VR,           F  pV! R\        V4      ,          4       K  	  \        4        V^,          pKg  	  R# u upi )	z6dumpParagraphFrags(<Paragraph @ %d>) minWidth() = %.2fzfrag%d: '%s' %sr^   r  ih  zfragword%d: cum=%3d size=%dr_  z (%s)N)r  r  r  r}  rx   r  rE   r_   r  rw   r  r  r  r  r  )	r  r}  r  r  rw  r  cumr  rp   s	   &        r<   dumpParagraphFragsr     s<   F"Q%QRQ[Q[Q]I^^_u:qA#q(--mrmum~m~  BKm~hi  FJ  CJBcQwW\W_`aObBcm~  BK  9L  'M  M  N  zzuS)AQ4KC.!!A$?@rUUWx{*+ GFA * BKs   E!E!c           	        a \        \        P                  ^ ,          \        4      '       d   / o. P                  pV3R lp\        P                   F  pV! V! V4      4       K  	  \        R4       \        RP                  R \        SP                  4       4       4       4      4       \        \        : RRP                  VP                  4      : R24       \        R4       R# R# )	r   c                 n  < . P                   pV R ,           FY  p\        V^ ,          4      pVS9  d   \        S4      V^ ,          3SV&   V! RSV,          ^ ,          : RV^,          : R24       K[  	  RV P                  P                  : RV ^ ,          : RRP                  VP                  4      : R2# )r_  z(__frag_z__, r  r  r  r  z]),)r   r  rx   r5  rT   r_   r  )rp   rn  rY  fid_Fs   &   r<   	_showWord%dumpProcessedFrags.<locals>._showWord6  s    II2AQqT(C"}#&r71Q4.3RWQZZ!=>	 
 34++2F2F!diiXYXbXbNcddr>   zfrom reportlab.platypus.paragraph import _HSFrag, _SplitFragHS, _SplitFragHY, _SplitFrag, _getFragWords
from reportlab.platypus.paraparser import ParaFrag
from reportlab.lib.colors import Colorrf   c              3   4   "   T F  pR V,          x  K  	  R# 5i)z__frag_%s__ = %rNrR   r  s   & r<   r  %dumpProcessedFrags.<locals>.<genexpr>A  s     Q=P/!33=Ps   z=[
z  ]z%print(_getFragWords(processed_frags))N)rV  r   r}  r`   r   r  r_   r  ru  processed_fragsr  )r  r   _Sr  rY  r  s   &&   @r<   dumpProcessedFragsr  2  s    bhhqk$''BBe XX9Q<    X  Y$))QVBIIK=PQRS2;;9OPQ9:! (r>   )getSampleStyleSheetr$   )cmr_  4c                 R    R V9   ;'       g    RV9   ;'       g    \        V 4      V9   # )all*)rF  )r  TESTSs   &&r<   flaggedr  K  s(    ~@@@@Q5@r>   BodyTextdiscussiontext)parent	Helveticaa8  The <font name=courier color=green>CMYK</font> or subtractive method follows the way a printer
mixes three pigments (cyan, magenta, and yellow) to form colors.
Because mixing chemicals is more difficult than combining light there
is a fourth parameter for darkness.  For example a chemical
combination of the <font name=courier color=green>CMY</font> pigments generally never makes a perfect
black -- instead producing a muddy color -- so, to get black printers
don't use the <font name=courier color=green>CMY</font> pigments but use a direct black ink.  Because
<font name=courier color=green>CMYK</font> maps more directly to the way printer hardware works it may
be the case that &amp;| &amp; | colors specified in <font name=courier color=green>CMYK</font> will provide better fidelity
and better control when printed.
g     |@gffffffE@i  z.Price<super><font color="red">*</font></super>Normalah  Dieses Kapitel bietet eine schnelle <b><font color=red>Programme :: starten</font></b>
<onDraw name=myIndex label="Programme :: starten">
<b><font color=red>Eingabeaufforderung :: (&gt;&gt;&gt;)</font></b>
<onDraw name=myIndex label="Eingabeaufforderung :: (&gt;&gt;&gt;)">
<b><font color=red>&gt;&gt;&gt; (Eingabeaufforderung)</font></b>
<onDraw name=myIndex label="&gt;&gt;&gt; (Eingabeaufforderung)">
Einf&#xfc;hrung in Python <b><font color=red>Python :: Einf&#xfc;hrung</font></b>
<onDraw name=myIndex label="Python :: Einf&#xfc;hrung">.
Das Ziel ist, die grundlegenden Eigenschaften von Python darzustellen, ohne
sich zu sehr in speziellen Regeln oder Details zu verstricken. Dazu behandelt
dieses Kapitel kurz die wesentlichen Konzepte wie Variablen, Ausdr&#xfc;cke,
Kontrollfluss, Funktionen sowie Ein- und Ausgabe. Es erhebt nicht den Anspruch,
umfassend zu sein.CodeaD  Die eingebaute Funktion <font name=Courier>range(i, j [, stride])</font><onDraw name=myIndex label="eingebaute Funktionen::range()"><onDraw name=myIndex label="range() (Funktion)"><onDraw name=myIndex label="Funktionen::range()"> erzeugt eine Liste von Ganzzahlen und f&#xfc;llt sie mit Werten <font name=Courier>k</font>, f&#xfc;r die gilt: <font name=Courier>i &lt;= k &lt; j</font>. Man kann auch eine optionale Schrittweite angeben. Die eingebaute Funktion <font name=Courier>range()</font><onDraw name=myIndex label="eingebaute Funktionen::range()"><onDraw name=myIndex label="range() (Funktion)"><onDraw name=myIndex label="Funktionen::range()"> erf&#xfc;llt einen &#xe4;hnlichen Zweck, gibt aber eine unver&#xe4;nderliche Sequenz vom Typ <font name=Courier>RangeType</font><onDraw name=myIndex label="RangeType"> zur&#xfc;ck. Anstatt alle Werte in der Liste abzuspeichern, berechnet diese Liste ihre Werte, wann immer sie angefordert werden. Das ist sehr viel speicherschonender, wenn mit sehr langen Listen von Ganzzahlen gearbeitet wird. <font name=Courier>RangeType</font> kennt eine einzige Methode, <font name=Courier>s.tolist()</font><onDraw name=myIndex label="RangeType::tolist() (Methode)"><onDraw name=myIndex label="s.tolist() (Methode)"><onDraw name=myIndex label="Methoden::s.tolist()">, die seine Werte in eine Liste umwandelt.i  gP@zAfter initial wrapzAfter split wrapz<para> z <![CDATA[</font></b>& z < >]]></para>)r  zR<para align="CENTER" fontSize="24" leading="30"><b>Generated by:</b>Dilbert</para>zU- bullet 0<br/>- bullet 1<br/>- bullet 2<br/>- bullet 3<br/>- bullet 4<br/>- bullet 5g       @a  Furthermore, the fundamental error of
regarding <img src="../docs/images/testimg.gif" width="3" height="7"/> functional notions as
categorial delimits a general
convention regarding the forms of the<br/>
grammar. I suggested that these results
would follow from the assumption thataaa)r  alignu   a b cÂ d e fa  This page tests out a number of attributes of the <b>paraStyle</b><onDraw name="_indexAdd" label="paraStyle"/> tag.
This paragraph is in a style we have called "style1". It should be a normal <onDraw name="_indexAdd" label="normal"/> paragraph, set in Courier 12 pt.
It should be a normal<onDraw name="_indexAdd" label="normal"/> paragraph, set in Courier (not bold).
It should be a normal<onDraw name="_indexAdd" label="normal"/> paragraph, set in Courier 12 pt.r  Courierr)  )r   i'  )TTFont)registerFont
DejaVuSanszDejaVuSans.ttfzNotoSansKhmer-RegularzNotoSansKhmer-Regular.ttfur   Hello clifftop <font name='NotoSansKhmer-Regular'>ឆ្នាំ</font> world <span color='red'>of </span>wonder!dvsstyle)r   ri   r   r   )	rf   r^      u    u    u    u    u    u    u    u    u    u    u    u    u   ​u    u    u    u    u   　r   r]   r1  g?gUUUUUU?)TrI   )r  i  g33333Ӆ@)zqHere comes <FONT FACE="Helvetica" SIZE="14pt">Helvetica 14</FONT> with <STRONG>strong</STRONG> <EM>emphasis</EM>.zqHere comes <font face="Helvetica" size="14pt">Helvetica 14</font> with <Strong>strong</Strong> <em>emphasis</em>.zOHere comes <font face="Courier" size="3cm">Courier 3cm</font> and normal again.g֣p=
w{@)__all____version__rX   stringr   operatorr   unicodedatar   reportlab.pdfbase.pdfmetricsr   r	   r
   reportlab.pdfgen.textobjectr   r   r   r   r   r   r   r   r   r   r   reportlab.pdfbase.ttfontsr   reportlab.platypus.paraparserr   r   r   r7   r   reportlab.platypus.flowablesr   reportlab.lib.colorsr   reportlab.lib.enumsr   r   r   r    reportlab.lib.geomutilsr!   reportlab.lib.textsplitr"   r#   reportlab.lib.stylesr$   copyr%   reportlab.lib.abagr&   reportlab.rl_configr'   r(   r)   r*   reportlab.lib.utilsr+   r,   r-   reportlab.lib.rl_accelr.   retypesr/   r6  r_   rJ   compileescaperD   rC   r  r2  r=   r3   rM   rP   r   r   rd   ri   rk   rq   r   r   r   r   r   r   r   r   r   r   r  r   r#  r'  r)  r-  r/  r   r`   r4  r6  r8  r:  r<  r>  rA  rF  rC  rZ  r\  re  rf  r~  r  r  r  r  r  r  r  r  r  Ir  r  r  _hy_lettersrE  _hy_shyr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r#  r%  r+  r6  r8  rP  rU  r\  rk  r|  r  r  r  r  r  r  r  r  r  r  r@  r   rT   r  r  r  r  r  reportlab.lib.unitsr  r  argvr  r  
styleSheetBr   r   rE   r  r  r  r  rp   r   r
  r8   r  r  h0r  rx   r  r  rR   r>   r<   <module>r     s`	  	
 3     O O9 9 9 9 4 ] ] 1 & H H 1 ? /  #  : : + 	  
ww  @ jj"))D/1288

8RYYt_45<<q
	 		t 	9 &&"g(9$ 	kZ4" ,$ ]W	d 		D 		 		* 	
	; 		:g 		< 	S  $&/t &/PZHl Z	, 	 

	(,q||
.f **  Q  SU  SW  SW  X* 
jjABjjCD

277DU#;<=JJrwwW['GHI jj$wt!456>)@,HY1x 7(	 		J 		* 		; 		3 	#6c #6J	', 		
 		t 	
 3
R!F2.
1f1(8t. ZZ23
C @/b#J/3 /@@O)bC@ "	E$ E$N  Z $;( I&HHRLEby% A %&J:A+A6EENqzz
 D
1BffRn!1GGBrNAFF2bMq!B 
 qzz
H*U]J^
_1ffRo!1qzz D*V,
-1ffT6"!1qzz X
D!
1ffRm!"1Q'1GGBrN1Q4 !		"R 2 B'1Q4 qzzEHXcRUhW
D*V,
-1ffT6"!1qzzD j2!DAq!&&v&CAaq! qzzg
D*V,
-1ffT6"!1qzzi
D*X.
/1ffT6"!1GGD3c!f1Q4 1Q4 	!		$1Q4 1Q4  qzz) DZ5IPZ[
\1ffQrT"Wf%!1r{{%
DZ5IPZ[
\1ffQrT"Wf%!1r{{c D~h	SUV
W1ffZ&!1r{{4=VL)9:;V34OPQ Q
D~j,XZ[
\1 [ EWFs   .d d