ó
    oñ:ia  ã                   óÌ  • S r SSKJr  S rS rS;S jrS rS rS	 r " S
 S\	5      r
S rS<S jrS;S jrS rS rS rS rS rS r    S=S jrS;S jr\S:X  Ga‰  SSKr\" \R2                  5      S:X  a/  SSKr\R6                  " \R8                  " 5       R:                  5        SSKr\R>                  " SSS9r \ RC                  SSSS S!9  \ RC                  S"S#SSS$S%9  \ RC                  S&S'SS(S)9  \ RC                  S*S+\"S,S-9  \ RG                  \R2                  SS 5      r$\$RJ                  (       a³  \$RL                  c  SOS. r'\" \$RJ                  5      r%\(" S/5        \(" \" \%5      5        \" \%\'5      r)\(" S05        \(" \)5        \" \)5      r*\(" S15        \(" \" \*5      5        \%\*:X  d   e\(" S25        \(" \" \" \%\'5      5      5        \(" S35        \(" \" \" \%\'5      5      5        \$RV                  (       aî  SS4K,J-r-  \-" \$RV                  5      r+\+S5   R\                  R^                  S   r0\0Rb                  r2\2Rg                  5        HE  r4\2\4   r5\5Rm                  5         \5Rn                  RN                  r'\" \5RJ                  \'\S69\5l%        MG     \$Rp                  c  SS7K9J:r:  \:" \$RV                  SS8S99r;O\$Rp                  r;\;(       a  \(" S:\;5        \+Ry                  \;5        gggg)>aZ  T2CharString operator specializer and generalizer.

PostScript glyph drawing operations can be expressed in multiple different
ways. For example, as well as the ``lineto`` operator, there is also a
``hlineto`` operator which draws a horizontal line, removing the need to
specify a ``dx`` coordinate, and a ``vlineto`` operator which draws a
vertical line, removing the need to specify a ``dy`` coordinate. As well
as decompiling :class:`fontTools.misc.psCharStrings.T2CharString` objects
into lists of operations, this module allows for conversion between general
and specific forms of the operation.

é    )ÚmaxStackLimitc                 óú   • [        U [        5      (       a  U R                  5       n / nU  H   n [        U5      nUR                  U5        M"     U$ ! [         a      [        U5      n N/! [         a      N<f = ff = f©N)Ú
isinstanceÚstrÚsplitÚintÚ
ValueErrorÚfloatÚappend)ÚstringÚprogramÚtokens      Ú_/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/fontTools/cffLib/specializer.pyÚstringToProgramr      s}   € Ü�&œ#×ÑØ—‘“ˆØ€GÛˆð	Ü˜“JˆEð 	�‰�uÖñ ð €Nøô ó 	ðÜ˜e›’øÜó Úðúð	ús)   ®AÁ
A:ÁA(Á(
A6Á2A:Á5A6Á6A:c                 ó2   • SR                  S U  5       5      $ )NÚ c              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr   )r   )Ú.0Úxs     r   Ú	<genexpr>Ú"programToString.<locals>.<genexpr>$   s   é € Ð,¢G˜q”C˜—F�F¢Gùs   ‚)Újoin)r   s    r   ÚprogramToStringr   #   s   € Ø�8‰8Ñ,¡GÓ,Ó,Ð,ó    Nc                 ó@  • SnSnSnSn/ n/ n[        U 5      nU GHe  n	[        U	[        5      (       d  UR                  U	5        M,  U	S:X  a>  Uc   eSU" U5      -   n
US   nXº-  S-   nX|* S /X|* S& [	        U5      nXKU-   S-
  -  nUnMp  U	S:X  a  US   n[        U5      [        L d   eOpU(       di  U	S;   ac  S	nU	S
;   nU(       a  U[	        XuS 5      -   nO[	        U5      nU(       a2  US-  U-  (       a%  UR                  S5      nUR                  SU/45        U	S;   aK  U(       a  UR                  SU45        UR                  U	/ 45        UR                  S[        U5      /45        OUR                  X—45        / nGMh     U(       a  UR                  SU45        U$ )u  Takes a T2CharString program list and returns list of commands.
Each command is a two-tuple of commandname,arg-list.  The commandname might
be empty string if no commandname shall be emitted (used for glyph width,
hintmask/cntrmask argument, as well as stray arguments at the end of the
program (ðŸ¤·).
'getNumRegions' may be None, or a callable object. It must return the
number of regions. 'getNumRegions' takes a single argument, vsindex. It
returns the numRegions for the vsindex.
The Charstring may or may not start with a width value. If the first
non-blend operator has an odd number of arguments, then the first argument is
a width, and is popped off. This is complicated with blend operators, as
there may be more than one before the first hint or moveto operator, and each
one reduces several arguments to just one list argument. We have to sum the
number of arguments that are not part of the blend arguments, and all the
'numBlends' values. We could instead have said that by definition, if there
is a blend operator, there is no width value, since CFF2 Charstrings don't
have width values. I discussed this with Behdad, and we are allowing for an
initial width value in this case because developers may assemble a CFF2
charstring from CFF Charstrings, which could have width values.
Fr   ÚblendNé   éÿÿÿÿÚvsindex>
   ÚhstemÚvstemÚendcharÚhmovetoÚhstemhmÚrmovetoÚvmovetoÚvstemhmÚcntrmaskÚhintmaskT>   r$   r'   é   Ú >   r)   r*   )	Úiterr   r   r   ÚlenÚtyper	   ÚpopÚnext)r   ÚgetNumRegionsÚseenWidthOpÚvsIndexÚlenBlendStackÚlastBlendIndexÚcommandsÚstackÚitr   ÚnumSourceFontsÚ	numBlendsÚnumBlendArgsÚlenStackÚparityÚnumArgsÚwidths                    r   ÚprogramToCommandsrA   '   sÊ  € ð, €KØ€GØ€MØ€NØ€HØ€EÜ	ˆg‹€BäˆÜ˜%¤×%Ñ%Ø�L‰L˜ÔÙà�GÓØ Ñ,Ð,Ð,Ø¡¨wÓ!7Ñ7ˆNð ˜b™	ˆIØ$Ñ5¸Ñ9ˆLà%*¨=¨>Ð%:Ð$;ˆE�-�.Ð!Ü˜5“zˆHØ¨Ñ1°AÑ5Ñ5ˆMØ%ˆNáà�iÓØ˜B‘iˆGÜ˜“=¤CÒ'Ð'Ñ'æ 5ð -
ó $
ð ˆKØÐ4Ñ4ˆFÞð (¬#¨e°OÐ.DÓ*EÑE‘ä˜e›*�Þ˜G a™K¨6×1ØŸ	™	 !›�Ø—‘  e W Ô.àÐ,Ó,ÞØ—‘  U Ô,Ø�O‰O˜U B˜KÔ(Ø�O‰O˜R¤$ r£( Ð,Õ-à�O‰O˜U˜NÔ+Ø‹ñq ör Ø�‰˜˜U˜Ô$Ø€Or   c                 ó°   • / nU  HM  n[        U[        5      (       a$  UR                  U5        UR                  S5        M<  UR                  U5        MO     U$ )Nr   )r   ÚlistÚextendr   )ÚargsÚ
token_listÚargs      r   Ú_flattenBlendArgsrH   ƒ   sP   € Ø€JÛˆÜ�cœ4× Ñ Ø×Ñ˜cÔ"Ø×Ñ˜gÖ&à×Ñ˜cÖ"ñ ð Ðr   c                 óº   • / nU  HR  u  p#[        S U 5       5      (       a  [        U5      nUR                  U5        U(       d  MA  UR                  U5        MT     U$ )zmTakes a commands list as returned by programToCommands() and converts
it back to a T2CharString program list.c              3   óB   #   • U  H  n[        U[        5      v •  M     g 7fr   ©r   rC   ©r   rG   s     r   r   Ú$commandsToProgram.<locals>.<genexpr>“   ó   é € Ð5²¨Œz˜#œt×$Ð$²ùó   ‚)ÚanyrH   rD   r   )r7   r   ÚoprE   s       r   ÚcommandsToProgramrR   Ž   sT   € ð €GÛ‰ˆÜÑ5±Ó5×5Ñ5Ü$ TÓ*ˆDØ�‰�tÔßˆ2Ø�N‰N˜2Öñ ð €Nr   c              #   ó~   #   • [        U 5      nX!-  S:w  a  [        U 5      e[        SX!5       H  nXX1-    v •  M     g7f)z'Group the list el into groups of size nr   N)r.   r
   Úrange)ÚelÚnÚlÚis       r   Ú_everyNrY   ›   s=   é € äˆB‹€AØ�u�ƒzÜ˜‹nÐÜ�1�aŽ^ˆØ�Q‘UˆmÔò ùs   ‚;=c                   óä   • \ rS rSr\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       r\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       r\S 5       rSrg)Ú!_GeneralizerDecombinerCommandsMapé¤   c              #   óL   #   • [        U 5      S:w  a  [        U 5      eSU 4v •  g 7f)Nr+   r&   ©r.   r
   ©rE   s    r   r&   Ú)_GeneralizerDecombinerCommandsMap.rmoveto¥   s&   é € äˆt‹9˜‹>Ü˜TÓ"Ð"Ø˜$ÐÓùs   ‚"$c              #   óV   #   • [        U 5      S:w  a  [        U 5      eSU S   S/4v •  g 7f©Nr   r&   r   r^   r_   s    r   r$   Ú)_GeneralizerDecombinerCommandsMap.hmoveto«   s.   é € äˆt‹9˜‹>Ü˜TÓ"Ð"Ø˜4 ™7 A˜,Ð'Ó'ùó   ‚')c              #   óV   #   • [        U 5      S:w  a  [        U 5      eSSU S   /4v •  g 7frb   r^   r_   s    r   r'   Ú)_GeneralizerDecombinerCommandsMap.vmoveto±   s.   é € äˆt‹9˜‹>Ü˜TÓ"Ð"Ø˜1˜d 1™g˜,Ð'Ó'ùrd   c              #   ób   #   • U (       d  [        U 5      e[        U S5       H	  n SU 4v •  M     g 7f)Nr+   Úrlineto©r
   rY   r_   s    r   rh   Ú)_GeneralizerDecombinerCommandsMap.rlineto·   s/   é € æÜ˜TÓ"Ð"Ü˜D !Ö$ˆDØ˜dÐ#Ô#ò %ùó   ‚-/c              #   ó°   #   • U (       d  [        U 5      e[        U 5      n  S[        U5      S/4v •  SS[        U5      /4v •  M$  ! [         a     g f = f7f©Nrh   r   ©r
   r-   r1   ÚStopIteration©rE   r9   s     r   ÚhlinetoÚ)_GeneralizerDecombinerCommandsMap.hlineto¾   sb   é € æÜ˜TÓ"Ð"Ü�$‹Zˆð	ØØ ¤4¨£8¨Q -Ð0Ò0Ø  1¤d¨2£h -Ð0Ò0ñ øô ó 	Ùð	üó"   ‚A¡%A Á
AÁAÁAÁAc              #   ó°   #   • U (       d  [        U 5      e[        U 5      n  SS[        U5      /4v •  S[        U5      S/4v •  M$  ! [         a     g f = f7frm   rn   rp   s     r   ÚvlinetoÚ)_GeneralizerDecombinerCommandsMap.vlinetoÊ   sb   é € æÜ˜TÓ"Ð"Ü�$‹Zˆð	ØØ  1¤d¨2£h -Ð0Ò0Ø ¤4¨£8¨Q -Ð0Ò0ñ øô ó 	Ùð	ürs   c              #   ób   #   • U (       d  [        U 5      e[        U S5       H	  n SU 4v •  M     g 7f)Né   Ú	rrcurvetori   r_   s    r   ry   Ú+_GeneralizerDecombinerCommandsMap.rrcurvetoÖ   s/   é € æÜ˜TÓ"Ð"Ü˜D !Ö$ˆDØ Ð%Ô%ò %ùrk   c              #   óþ   #   • [        U 5      nUS:  d	  US-  S:”  a  [        U 5      eUS-  S:X  a   SU S   U S   U S   U S   U S   S/4v •  U SS  n [        U S5       H  n SU S   SU S   U S   U S   S/4v •  M     g 7f©Né   r   r+   ry   r   é   é   ©r.   r
   rY   ©rE   rW   s     r   Ú	hhcurvetoÚ+_GeneralizerDecombinerCommandsMap.hhcurvetoÝ   s¥   é € ä�‹IˆØˆq‹5�A˜‘E˜A“IÜ˜TÓ"Ð"Øˆq‰5�A‹:Ø  a¡¨$¨q©'°4¸±7¸DÀ¹GÀTÈ!ÁWÈaÐ PÐQÒQØ˜˜�8ˆDÜ˜D !Ö$ˆDØ  a¡¨!¨T°!©W°d¸1±g¸tÀA¹wÈÐ JÐKÔKò %ùó   ‚A;A=c           	   #   óþ   #   • [        U 5      nUS:  d	  US-  S:”  a  [        U 5      eUS-  S:X  a   SU S   U S   U S   U S   SU S   /4v •  U SS  n [        U S5       H  n SSU S   U S   U S   SU S   /4v •  M     g 7fr|   r€   r�   s     r   Ú	vvcurvetoÚ+_GeneralizerDecombinerCommandsMap.vvcurvetoè   s¥   é € ä�‹IˆØˆq‹5�A˜‘E˜A“IÜ˜TÓ"Ð"Øˆq‰5�A‹:Ø  a¡¨$¨q©'°4¸±7¸DÀ¹GÀQÈÈQÉÐ PÐQÒQØ˜˜�8ˆDÜ˜D !Ö$ˆDØ  D¨¡G¨T°!©W°d¸1±g¸qÀ$ÀqÁ'Ð JÐKÔKò %ùr„   c              #   óê  #   • [        U 5      nUS:  d	  US-  S;  a  [        U 5      eS nUS-  S:X  a  US-  S:H  nU S S U SS  p [        U S5      n  [        U5      n SU S	   S	U S   U S   S	U S
   /4v •  [        U5      n SS	U S	   U S   U S   U S
   S	/4v •  MH  ! [         a     Of = fU(       aA  Un W(       a  SU S	   S	U S   U S   U S   U S
   /4v •  g SS	U S	   U S   U S   U S
   U S   /4v •  g g 7f©Nr}   é   >   r   r   r}   r   r+   r   r   éûÿÿÿry   r   r~   ©r.   r
   rY   r1   ro   ©rE   rW   Ú	last_argsÚlastStraightr9   s        r   Ú	hvcurvetoÚ+_GeneralizerDecombinerCommandsMap.hvcurvetoó   sT  é € ä�‹IˆØˆq‹5�A˜‘E Ó-Ü˜TÓ"Ð"Øˆ	Øˆq‰5�A‹:Ø˜q™5 A™:ˆLØ" 3 B˜i¨¨b¨c¨�)Ü�T˜1Óˆð	ØÜ˜B“x�Ø" T¨!¡W¨a°°a±¸$¸q¹'À1ÀdÈ1ÁgÐ$NÐOÒOÜ˜B“x�Ø" Q¨¨Q©°°a±¸$¸q¹'À4ÈÁ7ÈAÐ$NÐOÒOñ	 øô
 ó 	Ùð	úæØˆDÞØ" T¨!¡W¨a°°a±¸$¸q¹'À4ÈÁ7ÈDÐQRÉGÐ$TÐUÓUà" Q¨¨Q©°°a±¸$¸q¹'À4ÈÁ7ÈDÐQRÉGÐ$TÐUÓUð ùó&   ‚AC3ÁA	B Â
B'Â$C3Â&B'Â'AC3c              #   óê  #   • [        U 5      nUS:  d	  US-  S;  a  [        U 5      eS nUS-  S:X  a  US-  S:H  nU S S U SS  p [        U S5      n  [        U5      n SS	U S	   U S   U S   U S
   S	/4v •  [        U5      n SU S	   S	U S   U S   S	U S
   /4v •  MH  ! [         a     Of = fU(       aA  Un W(       a  SS	U S	   U S   U S   U S
   U S   /4v •  g SU S	   S	U S   U S   U S   U S
   /4v •  g g 7fr‰   rŒ   r�   s        r   Ú	vhcurvetoÚ+_GeneralizerDecombinerCommandsMap.vhcurveto  sT  é € ä�‹IˆØˆq‹5�A˜‘E Ó-Ü˜TÓ"Ð"Øˆ	Øˆq‰5�A‹:Ø˜q™5 A™:ˆLØ" 3 B˜i¨¨b¨c¨�)Ü�T˜1Óˆð	ØÜ˜B“x�Ø" Q¨¨Q©°°a±¸$¸q¹'À4ÈÁ7ÈAÐ$NÐOÒOÜ˜B“x�Ø" T¨!¡W¨a°°a±¸$¸q¹'À1ÀdÈ1ÁgÐ$NÐOÒOñ	 øô
 ó 	Ùð	úæØˆDÞØ" Q¨¨Q©°°a±¸$¸q¹'À4ÈÁ7ÈDÐQRÉGÐ$TÐUÓUà" T¨!¡W¨a°°a±¸$¸q¹'À4ÈÁ7ÈDÐQRÉGÐ$TÐUÓUð ùr’   c              #   ó¦   #   • [        U 5      nUS:  d	  US-  S:w  a  [        U 5      eU S S U SS  p [        U S5       H	  n SU 4v •  M     SU4v •  g 7f)NrŠ   rx   r+   éþÿÿÿry   rh   r€   ©rE   rW   rŽ   s      r   Ú
rcurvelineÚ,_GeneralizerDecombinerCommandsMap.rcurveline%  sd   é € ä�‹IˆØˆq‹5�A˜‘E˜Q“JÜ˜TÓ"Ð"Ø˜s ˜) T¨"¨# YˆiÜ˜D !Ö$ˆDØ Ð%Ô%ñ %à˜)Ð$Ó$ùó   ‚AAc              #   ó¦   #   • [        U 5      nUS:  d	  US-  S:w  a  [        U 5      eU S S U SS  p [        U S5       H	  n SU 4v •  M     SU4v •  g 7f)NrŠ   r+   r   iúÿÿÿrh   ry   r€   r˜   s      r   Ú
rlinecurveÚ,_GeneralizerDecombinerCommandsMap.rlinecurve/  sd   é € ä�‹IˆØˆq‹5�A˜‘E˜Q“JÜ˜TÓ"Ð"Ø˜s ˜) T¨"¨# YˆiÜ˜D !Ö$ˆDØ˜dÐ#Ô#ñ %à˜IÐ&Ó&ùr›   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ústaticmethodr&   r$   r'   rh   rq   ru   ry   r‚   r†   r�   r”   r™   r�   Ú__static_attributes__rŸ   r   r   r[   r[   ¤   s  † Øñ ó ð ð
 ñ(ó ð(ð
 ñ(ó ð(ð
 ñ$ó ð$ð ñ	ó ð	ð ñ	ó ð	ð ñ&ó ð&ð ñLó ðLð ñLó ðLð ñVó ðVð0 ñVó ðVð0 ñ%ó ð%ð ñ'ó ó'r   r[   c           	      óT  • [        U  Vs/ s H  n[        U[        5      PM     sn5      (       a@  U  VVs/ s H0  n[        U[        5      (       a  [        U5      OU/  H  nUPM     M2     nnnOU nUS   nUS S n[	        U5      nXe-  S-
  nXWS-   -  U:X  d  [        U 5      eUS U  Vs/ s H  o/PM     nnXES  n	[	        U	5      n
[        SX§5       Vs/ s H	  o9X3U-    PM     nn[        X‹5       VVs/ s H  u  pÍXÍ-   S/-   PM     nnnU$ s  snf s  snnf s  snf s  snf s  snnf ©Nr   r   r   )rP   r   rC   Ú_convertBlendOpToArgsr.   r
   rT   Úzip)Ú	blendListrG   ÚerX   rE   r;   rW   Ú
numRegionsÚdefaultArgsÚ	deltaArgsÚnumDeltaValuesÚ	deltaListÚaÚbÚ
blend_argss                  r   r¨   r¨   :  s`  € ô
 ©YÓ7ªY cŒJ�sœDÖ!©YÑ7×8Ñ8ñ ô
â�Ü2<¸QÄ×2EÑ2EÔ+¨AÔ.ÈAÈ3ÓN�ó áNñ Ùð 	ñ 
ˆð ˆð �R‘€Ið ��ˆ9€DäˆD‹	€AØ‘ !Ñ#€JØ a™Ñ(¨AÓ-Ü˜Ó#Ð#à$(¨¨)Ñ$4Ó5Ò$4˜S“5Ñ$4€KÐ5Ø�ZÐ €IÜ˜“^€Nä/4°Q¸Ô/SóÚ/S¨!�!˜*‘nÓ%Ñ/Sð ð ô +.¨kÔ*EÔFÒ*E¡$ !�!‘%˜1˜#”+Ñ*E€JÑFØÐùòE 8ùó
ùò4 6ùòùó Gs   ŠDµ7DÂ+DÃDÃ6D$c           
      ó¨  • / n[         nU  H¸  u  pE[        U Vs/ s H  n[        U[        5      PM     sn5      (       a@   U VVs/ s H0  n[        U[        5      (       a  [	        U5      OU/  H  nUPM     M2     nnn[        X4S 5      nUc  UR                  XE45        M—   U" U5       H  n	UR                  U	5        M     Mº     U$ s  snf s  snnf ! [
         a2    U(       a)  UR                  SU45        UR                  SU/45         N�e f = f! [
         a4    U(       a+  UR                  SU45        UR                  SU/45         GMD  e f = f)Nr,   )r[   rP   r   rC   r¨   r
   r   Úgetattr)
r7   ÚignoreErrorsÚresultÚmappingrQ   rE   rG   rV   ÚfuncÚcommands
             r   ÚgeneralizeCommandsr»   d  s\  € Ø€FÜ/€GÛ‰ˆä±Ó6²¨#”
˜3¤Ö%±Ñ6×7Ñ7ðñ  $ôâ#˜ä6@ÀÄd×6KÑ6KÔ-¨cÔ2ÐRUÐQVÓVð ó ñ Wñ Ù#ð ñ ô  �w DÓ)ˆØ‰<Ø�M‰M˜2˜*Ô%Ùð
	Ù ž:�Ø—‘˜gÖ&ó &ñ3 ðF €MùòC 7ùóøô ó Þð —M‘M 2 t *Ô-Ø—M‘M 2¨ t *Ö-àðûô  ó 	Þð —‘˜r 4˜jÔ)Ø—‘˜r B 4˜j×)Ð)àð	ús;   ™C	
Á CÁ7CÁ<CÂ# DÃCÃ8DÄDÄ8EÅEc                 ó>   • [        [        [        X5      40 UD65      $ r   )rR   r»   rA   ©r   r2   Úkwargss      r   ÚgeneralizeProgramr¿   �  ó"   € ÜÜÔ,¨WÓDÑOÈÑOóð r   c                 óp   • U S   (       d  U S   (       d  SU SS 4$ SU SS 4$ U S   (       d  SU SS 4$ SU 4$ )aV  
Takes X,Y vector v and returns one of r, h, v, or 0 depending on which
of X and/or Y are zero, plus tuple of nonzero ones.  If both are zero,
it returns a single zero still.

>>> _categorizeVector((0,0))
('0', (0,))
>>> _categorizeVector((1,0))
('h', (1,))
>>> _categorizeVector((0,2))
('v', (2,))
>>> _categorizeVector((1,2))
('r', (1, 2))
r   r   Ú0NÚvÚhÚrrŸ   )rÃ   s    r   Ú_categorizeVectorrÆ   “  sR   € ð ˆQ�4Ø��tØ˜˜"˜1˜�:Ðà˜˜!˜"˜�:Ðà��tØ˜˜"˜1˜�:Ðà˜�6ˆMr   c                 ó2   • U S:X  a  U$ US:X  a  U $ X:X  a  U $ g )NrÂ   rŸ   )r±   r²   s     r   Ú_mergeCategoriesrÈ   ®  s'   € ØˆCƒxØˆØˆCƒxØˆØƒvØˆØr   c                 ó2   • U S:X  a  gU S:X  a  gU S;   d   eU $ )NrÄ   rÃ   Ú0rrŸ   )r±   s    r   Ú_negateCategoryrË   ¸  s'   € ØˆCƒxØØˆCƒxØØ�‹9Ðˆ9Ø€Hr   c                 ó²  • [        U 5      nSn/ nSnXA:  Ga?  X   nUS-  n[        U[        5      (       d  UR                  U5        US-  nGOUn[        U5      S-
  nU/nUSU-   -  nXA:  ai  [        X   [        5      (       aR  X'-   [        :  aF  UR                  X   5        US-  nX'-  nXA:  a%  [        X   [        5      (       a  X'-   [        :  a  MF  [        U5      n	/ n
U H  nU
R                  US   5        M     U H"  nUS   S:X  d   eU
R                  USS 5        M$     U
R                  U	5        UR                  U
5        Xi-   nXA:  a  GM?  U$ )Nr   r   r   )r.   r   rC   r   r   rD   )rE   Únum_argsÚ	stack_useÚnew_argsrX   rG   Úprev_stack_useÚnum_sourcesÚ	blendlistÚ
num_blendsr³   s              r   Ú_convertToBlendCmdsrÔ   Á  sm  € ô �4‹y€HØ€IØ€HØ	€AØ
Œ,Ø‰gˆØ	ˆQ‰ˆÜ˜#œt×$Ñ$Ø�O‰O˜CÔ Ø˜‰NŠIà&ˆNô
 ˜c›( Q™,ˆKØ˜ˆIØ˜˜[™Ñ(ˆIð “Ü˜t™w¬×-Ñ-ØÑ+¬mÓ;à× Ñ  ¡Ô)Ø�Q‘�ØÑ(�	ð “Ü˜t™w¬×-Ñ-ØÑ+¬mÕ;ô ˜Y›ˆJàˆJÛ �Ø×!Ñ! # a¡&Ö)ñ !ã �Ø˜2‘w !“|Ð#�|Ø×!Ñ! # a¨ )Ö,ñ !ð ×Ñ˜jÔ)Ø�O‰O˜JÔ'Ø&Ñ3ˆIð] Ž,ð` €Or   c                 ó¤  • [        U[        5      (       a|  [        U [        5      (       ae  [        U 5      [        U5      :w  d  U S   US   :w  a
  [        5       e[	        U S S US S 5       VVs/ s H  u  p#[        X#5      PM     snnU S   /-   $ Xp[        U [        5      (       a!  U S   S:X  d   e[        U S   U5      /U SS  -   $ X-   $ s  snnf r§   )r   rC   r.   r
   r©   Ú_addArgs)r±   r²   ÚvaÚvbs       r   rÖ   rÖ   û  sÌ   € Ü�!”T×ÑÜ�aœ×ÑÜ�1‹vœ˜Q›Ó 1 R¡5¨A¨b©E£>Ü “lÐ"Ü36°q¸¸"°v¸qÀÀ"¸vÔ3FÔGÒ3F©¨”H˜RÖ$Ñ3FÒGÈ1ÈRÉ5È'ÑQÐQàˆqÜ�!”T×ÑØ�‰u˜‹zÐˆzÜ˜˜1™˜qÓ!Ð" Q q r UÑ*Ð*Ø‰5€Lùó Hs   Á.Cc                 ó    • SnSnU  H:  n[        U5      [        L a   [        X![        U5      -   5      nXS   -  nM5  US-  nM<     [        X5      $ )Nr   r   r   )r/   rC   ÚmaxÚ_argsStackUse)rE   ÚstackLenÚmaxLenrG   s       r   rÛ   rÛ   	  sX   € Ø€HØ€FÛˆÜ�‹9œÒä˜¬M¸#Ó,>Ñ!>Ó?ˆFØ˜B™ÑŠHà˜‰MŠHñ ô ˆxÓ Ð r   Tc                 óô  • U(       a
  [        XS9n O[        U 5      n [        [        U 5      S-
  SS5       H`  nSX   S   s=:X  a  XS-
     S   :X  d  M  O  M#  XS-
     S   X   S   pvS[	        US   US   5      [	        US   US   5      /4XS-
  '   X	 Mb     [        [        U 5      5       Hd  nX   u  p‰US;   a  [        U	5      u  p©X¨SS  -   U	4X'   M)  US:X  d  M1  [        U	S S 5      u  p¼[        U	S	S  5      u  pÞX½-   S
-   XÉSS -   U-   4X'   Mf     U(       dË  [        [        U 5      S-
  SS5       H®  nX   u  p‰US:X  a+  [        U	5      S:X  d   e[        U	SS 5      u  p©U
S-   nX‰4X'   US:X  a  X	 MD  U(       d  MM  US;   d  MU  X€US-
     S   :X  d  Me  XS-
     u  nn[        U	5      S:X  a  [        U5      S:X  d   e [	        U	S   US   5      /nUU4XS-
  '   X	 M°     [        S[        U 5      S-
  5       Hó  nX   u  p‰XS-
     S   XS-      S   nnUS;   a@  UUs=:X  a  S:X  a3  O  O0[        U	5      S:X  d   eUS   S:X  a  SU	S   /OU	S   S/n	SU	4X'   Mc  USS  S
:X  d  Mn  [        U	5      S:X  d  M  UUs=:X  a  S:X  d  MŽ  O  M’  US   S:H  US   S:H  -  (       d   eUS   S:X  a  SnOUS   S:w  a  SnOUS   S:X  a  SnOSnU	S U [        U	5      " S5      -   U	US  -   n	SU	4X'   Mõ     U (       a  [        U S   S   5      OSn[        [        U 5      S-
  SS5       GHa  nXS-
     u  nnX   u  nnS nUU1SS1::  a,  UU:X  a  UnOó[        U5      nUS:X  a	  US:X  a  SnOÙUS:X  a  SnOÐUU4S;   a  UnOÅUU1SS1:X  a  UnO¸S
USS  s=:X  a	  USS  :X  a¥  O  O¢US S u  nnUS S u  nnUS:X  d  US:X  d  UUs=:X  a  S:X  a  O  OM©  [        UU5      nUc  Mº  US:X  a  [        UU5      nUc  MÑ  SU-   S
-   nOCUS:X  a#  [        U[        U5      5      nUc  Mú  US-   S
-   nO[        UU5      nUc  GM  UU-   S
-   n[        U5      n[        U[        U5      U-   5      n U(       a  U U:  a  UXÎ-   4XS-
  '   X	 U nGM_  UnGMd     [        [        U 5      5       Hõ  nX   u  p‰US;   a  SUSS  -   U	4X'   M  USS  S
:X  d  M(  US S S;  d  M3  [        U	5      nUS S u  n!nU!S:H  US:H  -  (       a  US-  S:X  d   eU!S :X  a  Sn!US :X  a  SnU!S:X  a  Un!US:X  a  [        U!5      nU!U1SS1::  d	   U!U45       eUS-  (       aB  U!U:w  a%  U!S:H  US!-  S:H  -  (       a  U	S S	 U	SS  -   U	S	S -   n	OU!S:X  a  U	SS U	S S -   U	SS  -   n	U!U-   S
-   U	4X'   M÷     [        [        U 5      5       H1  nX   u  p‰[        S" U	 5       5      (       d  M"  U[        U	5      4X'   M3     U $ ! [         a     GMÀ  f = f)#N)r¶   r   r   r   r&   >   rh   r&   ry   r+   r—   Úcurvetor}   Ú	00curvetor~   ÚlinetoÚ0lineto>   rq   ru   >   râ   rq   ru   rh   rÃ   r   rÅ   )r   rx   r�   r™   >   ©rh   r�   ©ry   r™   ru   rq   >   râ   Ú0movetorÄ   >   ÚhhÚhvÚrrÚvhÚvvrÂ   rŠ   c              3   óB   #   • U  H  n[        U[        5      v •  M     g 7fr   rK   rL   s     r   r   Ú%specializeCommands.<locals>.<genexpr>>  rN   rO   )r»   rC   rT   r.   rÖ   rÆ   r
   r/   rÛ   rÈ   rË   rÚ   rP   rÔ   )"r7   r¶   ÚgeneralizeFirstÚpreserveTopologyÚmaxstackrX   Úv1Úv2rQ   rE   ÚcÚc1Úargs1Úc2Úargs2Ú_Ú
other_argsrÏ   ÚprvÚnxtÚposÚstackUseÚop1Úop2Únew_oprW   Úd0Úd1Úd2Úd3ÚdÚargs1StackUseÚcombinedStackUseÚop0s"                                     r   ÚspecializeCommandsr    sH  € öP Ü% hÑJ‰ä˜“>ˆô ”3�x“= 1Ñ$ a¨Ö,ˆØ˜™ A™Õ<¨(°q±5©/¸!Ñ*<×<Ñ<Ø !™e‘_ QÑ'¨©°Q©�àÜ˜"˜Q™%  A¡Ó'¬°"°Q±%¸¸A¹Ó)?Ð@ðˆH˜‘U‰Oð ’ñ -ôn ”3�x“=Ö!ˆØ‘;‰ˆàÐ'Ó'Ü'¨Ó-‰GˆAØ  ˜f™* dÐ*ˆH‰KÙà�ÕÜ)¨$¨r°¨(Ó3‰IˆBÜ)¨$¨r¨s¨)Ó4‰IˆBØ™' IÑ-¨u¸A¸a°yÑ/@À5Ñ/HÐHˆH‰KÙñ "öF Ü”s˜8“} qÑ(¨"¨bÖ1ˆAØ‘{‰HˆBð �[Ó Ü˜4“y A“~Ð%�~Ü+¨D°°1¨IÓ6‘�Ø˜‘\�Ø ˜h�‘ð �Y‹Ø�KÙ÷ ˆq�RÐ1Õ1°rÀaÈ!Áe¹_ÈQÑ=OÕ7OØ (¨Q©¡‘��:Ü˜4“y A“~¬#¨j«/¸QÓ*>Ð>Ð>ðÜ (¨¨a©°*¸Q±-Ó @ÐA�Hð $& x .�˜Q™‘Ø�KÙñ; 2ôB �1”c˜(“m aÑ'Ö(ˆØ‘;‰ˆØ ™E‘? 1Ñ% x°A±¡°qÑ'9ˆSˆàÐ2Ó2°s¸cÕ7NÀYÖ7NÜ�t“9 “>Ð!�>Ø#% a¡5¨C£<�A�t˜A‘w‘<°d¸1±g¸q°\ˆDØ$ dÐ+ˆH‰KÙàˆaˆbˆ6�YÕ¤3 t£9°¥>°c¸SÕ6OÀK×6OÑ6OØ�q‘E˜S‘L R¨¡U¨c¡\×2Ð2Ð2Ø�!‰u˜‹|Ø‘Ø�A‘˜#“Ø‘Ø�A‘˜#“Ø‘à�à˜˜�:¤ T¤
¨4Ó 0Ñ0°4¸¸°:Ñ=ˆDØ&¨Ð-ˆH‰KÙñ/ )ö4 2:Œ}˜X b™\¨!™_Ô-¸q€HÜ”3�x“= 1Ñ$ a¨×,ˆØ !™e‘_‰
ˆˆUØ‘[‰
ˆˆUØˆð �ˆ:˜) [Ð1Ó1Ø�c‹zØ‘ä˜“J�Ø˜+Ó%¨!¨q«&Ø)‘FØ˜!“VØ)�Føà�3ˆZÐSÓSØ‰Fà�3ˆZ˜I yÐ1Ó1Ø‰Fà˜#˜a˜b˜'Õ, S¨¨ WÖ,Ø˜˜!�W‰FˆB�Ø˜˜!�W‰FˆB�à�S‹y˜B #›I¨¨r­°S®Ùä   RÓ(ˆAØ‰yÙØ�S‹yÜ$ Q¨Ó+�Ø‘9ÙØ˜q™ 9Ñ,‘Ø�s“Ü% b¬/¸!Ó*<Ó=�Ø‘:ÙØ˜c™ IÑ-‘ä% b¨"Ó-�Ø‘:ÚØ˜a™ )Ñ+�ô & eÓ,ˆÜ˜}¬c°%«j¸8Ñ.CÓDÐÞÐ&¨Ó1Ø% u¡}Ð5ˆH˜‘U‰OØ�Ø'‹Hà$‹Hñs -ôx ”3�x“=Ö!ˆØ‘;‰ˆàÐ'Ó'Ø  1 2 ™,¨Ð,ˆH‰KÙàˆaˆbˆ6�YÕ 2 b q 6Ð1OÕ#OÜ�D“	ˆAà˜"˜1�v‰HˆC�Ø�s‘
˜s c™z×*Ø˜1‘u “zÐ!�zØ�c‹zØ�Ø�c‹zØ�Ø�c‹zØ�Ø�c‹zÜ% cÓ*�Ø˜�: # s Ó+Ð7¨c°3¨ZÓ7Ð+à�1�uØ˜#“:Ø˜s™
 q¨1¡u°¡z×2à# C R˜y¨4°°¨9Ñ4°t¸B¸r°{ÑB˜øà˜c“zà# A a˜y¨4°°¨8Ñ3°d¸1¸2°hÑ>˜à ™) iÑ/°Ð5ˆH‰KÙñE "ôJ ”3�x“=Ö!ˆØ‘;‰ˆÜÑ5±Ó5×5Ó5ØÔ1°$Ó7Ð7ˆH‹Kñ "ð
 €OøôS "ó Ûðús   ÇW(×(
W7×6W7c                 ó>   • [        [        [        X5      40 UD65      $ r   )rR   r  rA   r½   s      r   ÚspecializeProgramr
  D  rÀ   r   Ú__main__r   zfonttools cffLib.specializerz&CFF CharString generalizer/specializer)Údescriptionr   rº   Ú*z	Commands.)ÚmetavarÚnargsÚhelpz--num-regionsÚ
NumRegionsz5Number of variable-font regions for blend opertaions.)r  r  Údefaultr  z--fontÚFONTFILEzCFF2 font to specialize.)r  r  r  z-oz--output-filezOutput font file name.)r/   r  c                 óP   • [        [        R                  U c  S   5      $ U    5      $ )Nr   )r	   ÚoptionsÚnum_regions)r4   s    r   Ú<lambda>r  s  s&   € ¤Ü×#Ñ#¨© AÑFô"Ø>EÑFô"r   zProgram:z	Commands:zProgram from commands:zGeneralized program:zSpecialized program:)ÚTTFontÚCFF2)rï   )ÚmakeOutputFileNamez.specialized)Ú	overWriteÚsuffixÚSavingr   )F)FTFé0   )=Ú__doc__ÚfontTools.cffLibr   r   r   rA   rH   rR   rY   Úobjectr[   r¨   r»   r¿   rÆ   rÈ   rË   rÔ   rÖ   rÛ   r  r
  r    Úsysr.   ÚargvÚdoctestÚexitÚtestmodÚfailedÚargparseÚArgumentParserÚparserÚadd_argumentr   Ú
parse_argsr  r   r  r2   Úprintr7   Úprogram2ÚfontÚfontTools.ttLibr  ÚcffÚtopDictIndexÚcff2ÚCharStringsÚcharstringsÚkeysÚ	glyphNameÚ
charstringÚ	decompileÚprivateÚoutput_fileÚfontTools.misc.cliToolsr  ÚoutfileÚsaverŸ   r   r   Ú<module>r?     s.  ðñõ +òò -ôYòxò
òôS'¨ô S'òl'ôT&ôRòò6òò7òtò
!ð ØØØôkô\	ð ˆzÔÛá
ˆ3�8‰8ƒ}˜ÓÛà�Š�—’Ó"×)Ñ)Ô*ãà×$Ò$Ø&Ø<ñ€Fð ×Ñ˜	¨9¸CÀkÐÑRØ
×ÑØØØØØDð ñ ð ×ÑØØØØ'ð	 ñ ð ×ÑØØØØ%ð	 ñ ð ×Ñ §¡¨¨ Ó-€Gà‡‡ð ×"Ñ"Ñ*ñ ñð 	ñ " '§/¡/Ó2ˆÙˆjÔÙ‰o˜gÓ&Ô'Ù$ W¨mÓ<ˆÙˆkÔÙˆhŒÙ$ XÓ.ˆÙÐ&Ô'Ù‰o˜hÓ'Ô(Ø˜(Ó"Ð"Ð"ÙÐ$Ô%Ù‰oÑ/°¸ÓGÓHÔIÙÐ$Ô%Ù‰oÑ/°¸ÓGÓHÔIà‡|‡|Ý*á�g—l‘lÓ#ˆØ�F‰|×Ñ×,Ñ,¨QÑ/ˆØ×&Ñ&ˆØ$×)Ñ)Ö+ˆIØ$ YÑ/ˆJØ× Ñ Ô"Ø&×.Ñ.×<Ñ<ˆMÙ!2Ø×"Ñ" M¸Mñ"ˆJÖñ	 ,ð ×ÑÑ&ÝBá(Ø—‘¨°^ñ‰Gð ×)Ñ)ˆGÞÙ�(˜GÔ$Ø�I‰I�gÕð ð- ð{ r   