+
    f7ij  c                   s   ^ RI Ht ^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHtHt ^ RIHt ^ RIt^ RIt^ R	IHt . R!Ot]P*                  ! R
4      t. R"Ot. R#Ot]! R ]! R$^4       4       4      t. R%Ot^tR tR tR t R t!R t"R&R lt#R&R lt$R&R lt%R t&R t'R t(R'R lt)R(R lt*R(R lt+R(R lt,R(R lt-R t.R t/R)R lt0R&R lt1]2R 8X  d   ^ RI3t3]3Ph                  ! ]1! 4       4       R# R# )*i    )newTable)Axis)AreaPen)NullPen)StatisticsPen)piecewiseLinearMapnormalizeValue)makeOutputFileNameN)pformatzfontTools.varLib.avar.planc              #   s   "   T F6  p\         P                  ! \         P                  ! VR ,          4      4      x  K8  	  R# 5i)g      4@N)mathdegreesatan).0ds   & A/usr/lib64/python3.14/site-packages/fontTools/varLib/avar/plan.py	<genexpr>r   M   s)     HAdll499QX.//s   >A c                s,    W,
          W!,
          ,          # )zOLinearly normalize value in [rangeMin, rangeMax] to [0, 1], with extrapolation. )valuerangeMinrangeMax   &&&r   normalizeLinearr   l   s    !455    c                s,    WW!,
          ,          ,           # )zALinear interpolation between a and b, with t typically in [0, 1].r   )tabr   r   interpolateLinearr   q   s    AE{?r   c                s    \         P                  ! V4      p\         P                  ! V4      p\         P                  ! V 4      V,
          WC,
          ,          # )zVLogarithmically normalize value in [rangeMin, rangeMax] to [0, 1], with extrapolation.)r	   log)r   r   r   logMinlogMax   &&&  r   normalizeLogr   v   s8    XXhFXXhFHHUOf$99r   c                s    \         P                  ! V4      p\         P                  ! V4      p\         P                  ! W0WC,
          ,          ,           4      # )zFLogarithmic interpolation between a and b, with t typically in [0, 1].)r	   r   exp)r   r   r   ZlogAZlogBr   r   interpolateLogr!   }   s5    88A;D88A;D88D,,--r   c                s&   \         P                  ! \         P                  ! V4      4      p\         P                  ! \         P                  ! V4      4      p\         P                  ! \         P                  ! V 4      4      V,
          WC,
          ,          # )zPAngularly normalize value in [rangeMin, rangeMax] to [0, 1], with extrapolation.)r	   ZtanZradians)r   r   r   ZtanMinZtanMaxr   r   normalizeDegreesr"      sT    XXdll8,-FXXdll8,-FHHT\\%()F2vGGr   c                s   \        V\        4      '       d   TpMV Uu/ uF  q3^bK  	  pp^ ;rEV F  pVe   VP                  V^ 4      pV^ 8X  d   K"  M^pW,          p\        V R7      p	VP	                  V	4       VP
                  V,          p
WJ\        V	P                  4      ,          ,          pWZ,          pK  	  WE,          # u upi )z:Measure the perceptual average weight of the given glyphs.glyphset)
isinstancedictgetr   drawwidthabsr   )r$   glyphsfrequenciesgZwght_sumwdth_sum
glyph_name	frequencyglyphpenmult   &&         r   measureWeightr5      s    &$%+,V!tV,H
"#
A6IA~  I$x(

3{{Y&3syy>)) " ) -s   Cc                sV   \        V\        4      '       d   TpMV Uu/ uF  q3^bK  	  pp^ p^ pV Fi  pVe   VP                  V^ 4      pV^ 8X  d   K"  M^pW,          p\        4       p	VP	                  V	4       WHP
                  V,          ,          pWW,          pKk  	  WE,          # u upi )z.Measure the average width of the given glyphs.)r%   r&   r'   r   r(   r)   )
r$   r+   r,   r-   r.   freq_sumr/   r0   r1   r2   s
   &&        r   measureWidthr7      s    &$%+,V!tV,HH
"#
A6IA~  I$i

3KK)++   ) -s   B&c                s   \        V\        4      '       d   TpMV Uu/ uF  q3^bK  	  pp^ p^ pV F~  pVe   VP                  V^ 4      pV^ 8X  d   K"  M^pW,          p\        V R7      p	VP	                  V	4       VP
                  V,          p
WJV	P                  ,          ,          pWZ,          pK  	  \        P                  ! \        P                  ! WE,          4      4      ) # u upi )z?Measure the perceptual average slant angle of the given glyphs.r#   )
r%   r&   r'   r   r(   r)   Zslantr	   r
   r   )r$   r+   r,   r-   Zslnt_sumr6   r/   r0   r1   r2   r3   r4   r   measureSlantr8      s    &$%+,V!tV,HH
"#
A6IA~  I$X.

3{{Y&399$$ " LL8#67888+ -s   C$c                sl   W1^ ,          ,          W1^,          ,          W1^,          ,          repV ^,          WE,          ,          pV ^,          We,          ,          p\         P                  ! R.V O5!   \         P                  RVV ^,          V4       \        Wp^ ,          ,
          4      V ^,          ,          R8  g,   \        W^,          ,
          4      V ^,          ,          R8  dO   \         P                  R4       \         P                  ! R.V O5!   \         P                  RVV ^,          V4       R# R# )	zSanitize the width axis limits.z$Original width axis limits: %g:%g:%gz&Calculated width axis limits: %g:%g:%g皙?z6Calculated width axis min/max do not match user input.z%  Current width axis limits: %g:%g:%gz'  Suggested width axis limits: %g:%g:%gFTr   infor*   warning)	
userTripledesignTriplepinsmeasurementsminVal
defaultValmaxValcalculatedMinValcalculatedMaxVals	   &&&&     r   sanitizeWidthrF      s    	!_%!_%!_% F "!}(;<!!}(;<HH3AjAHH01	 	!},-
1=DQ-/0:a=@4GLM3	
	
 	5qM		
 r   c                s   \        \        V 4      4      ^8  d   R# W1^ ,          ,          W1^,          ,          W1^,          ,          rep\        P                  ! V4      p\        P                  ! V4      p\        P                  ! V4      p	V ^,          V ^ ,          ,
          V ^,          V ^ ,          ,
          ,          p
\        P                  ! WzW,
          ,          ,           4      pW,
          Wd,
          ,          p
V ^ ,          W^,          V ^ ,          ,
          ,          ,           p\        P
                  ! R.V O5!   \        P                  RV ^ ,          VV ^,          4       \        W^,          ,
          4      V ^,          ,          R8  Ed   \        P                  R4       \        P                  ! R.V O5!   \        P                  RV ^ ,          VV ^,          4       V ^,          V ^ ,          ,
          V ^,          V ^ ,          ,
          ,          p
\        P                  ! WzW,
          ,          ,           4      pW,
          WT,
          ,          p
V ^ ,          W^,          V ^ ,          ,
          ,          ,           p\        P                  RV ^ ,          V ^,          V4       V ^ ,          V ^,          ,
          V ^,          V ^,          ,
          ,          p
\        P                  ! WW,
          ,          ,           4      pW,
          WV,
          ,          p
V ^,          W^,          V ^,          ,
          ,          ,           p\        P                  R	VV ^,          V ^,          4       R
# R# )z Sanitize the weight axis limits.Tz%Original weight axis limits: %g:%g:%gz'Calculated weight axis limits: %g:%g:%gr9   z9Calculated weight axis default does not match user input.z&  Current weight axis limits: %g:%g:%gz:  Suggested weight axis limits, changing default: %g:%g:%gz:  Suggested weight axis limits, changing maximum: %g:%g:%gz:  Suggested weight axis limits, changing minimum: %g:%g:%gF)Zlensetr	   r   r    r;   r*   r<   )r=   r>   r?   r@   rA   rB   rC   r   Z
logDefaultr   r   ZyZcalculatedDefaultValrE   rD   s   &&&&           r   sanitizeWeightrH   	  s    3z?a 	!_%!_%!_% F XXfF*%JXXfF	AA	&:a=:a=+HIAv//0A	
(A%a=11
10M+NNHH4BzBHH111	 Q-/0:a=@4GOP4	
	

 	HqM qM		
 ]Z]*z!}z!}/LMHHV:#6778ZJ/0%a=11
10M+NNHqMqM		
 ]Z]*z!}z!}/LMHHV:#6778ZJ/0%a=11
10M+NNHqMqM		
 r   c                s   \         P                  ! R.V O5!   \         P                  RW1^ ,          ,          W1^,          ,          W1^,          ,          4       \        W1^ ,          ,          V ^ ,          ,
          4      ^8  gW   \        W1^,          ,          V ^,          ,
          4      ^8  g,   \        W1^,          ,          V ^,          ,
          4      ^8  do   \         P                  R4       \         P                  ! R.V O5!   \         P                  RW1^ ,          ,          W1^,          ,          W1^,          ,          4       R# R# )zSanitize the slant axis limits.z$Original slant axis limits: %g:%g:%gz&Calculated slant axis limits: %g:%g:%gz>Calculated slant axis min/default/max do not match user input.z%  Current slant axis limits: %g:%g:%gz'  Suggested slant axis limits: %g:%g:%gFTr:   )r=   r>   r?   r@   s   &&&&r   sanitizeSlantrI   P  s     HH3AjAHH0!_%!_%!_%	 	La)JqM9:Q>|O,z!}<=A|O,z!}<=ATU3	
	
 	5a)a)a)		
 r   c           	     s	   \        V\        4      '       d$   VP                  VP                  VP                  3pVw  rpVf   \
        pVf   V! / 4      P                  4       pV
f   / p
MV
P                  4       p
\        P                  RWV4       WV3pV	e   \        P                  ! R.V	O5!   MTp	V
'       d.   \        P                  R\        V
P                  4       4      4       V
P                  W^ ,          W^,          W^,          /4       / p/ p/ p\        WV0\        V
P                  4       4      ,          4       F#  pV! VV/R7      pV
V,          pV ! VV4      VV&   K%  	  Ve!   \        P                  RV4       V! WV
V4       \        P                  R\        V4      4       \!        \#        \        V
P                  4       4      4      RR \#        \        V
P                  4       4      4      R,          4       EF=  w  w  ppw  ppV Uu0 uF  pVTu;8  d
   V8  g   K  M K  VkK  	  ppV'       g   K=  \%        VV4      p\%        VV4      p\%        VV	4      p\%        VV	4      p\        P                  R	\        V4      4       \        P                  R
VVV4       VP                  4       p \'        ^V^,           4       Fa  p!VVV,
          V!,          V^,           ,          ,           p\        P                  RV4       V! VV/R7      p\)        VV
4      pV ! VV4      V V&   Kc  	  \        P                  R\        V 4      4       / p"\        V 4       F  pVV"V V,          &   K  	  VVV&   VVV&   \        V4       F  pV! VVV4      p#V! V#V V,          V V,          4      p$\)        V$V"4      p%\        P                  RVV%3,          4       V%VV&   VVV,
          VV,
          ,          VV,
          ,          ,           p&VV%V,
          VV,
          ,          VV,
          ,          ,           VV&&   K  	  VVV&   VVV&   EK@  	  \        P                  RV\        V4      4       \        P                  RV\        V4      4       \*        ;QJ d*    R VP                  4        4       F  '       d   K   RM	  RM! R VP                  4        4       4      '       d   \        P                  RV4       / p/ pVV3# u upi )a  Plan an axis.

measureFunc: callable that takes a glyphset and an optional
list of glyphnames, and returns the glyphset-wide measurement
to be used for the axis.

normalizeFunc: callable that takes a measurement and a minimum
and maximum, and normalizes the measurement into the range 0..1,
possibly extrapolating too.

interpolateFunc: callable that takes a normalized t value, and a
minimum and maximum, and returns the interpolated value,
possibly extrapolating too.

glyphSetFunc: callable that takes a variations "location" dictionary,
and returns a glyphset.

axisTag: the axis tag string.

axisLimits: a triple of minimum, default, and maximum values for
the axis. Or an `fvar` Axis object.

values: a list of output values to map for this axis.

samples: the number of samples to use when sampling. Default 8.

glyphs: a list of glyph names to use when sampling. Defaults to None,
which will process all glyphs.

designLimits: an optional triple of minimum, default, and maximum values
represenging the "design" limits for the axis. If not provided, the
axisLimits will be used.

pins: an optional dictionary of before/after mapping entries to pin in
the output.

sanitizeFunc: an optional callable to call to sanitize the axis limits.
Nz(Axis limits min %g / default %g / max %gz/Axis design-limits min %g / default %g / max %gzPins %s)Zlocationz/Sanitizing axis limit values for the `%s` axis.zCalculated average value:
%si   NNzPlanning target values %s.z"Sampling %u points in range %g,%g.zSampling value %g.zSampled average value:
%szPlanned mapping value %g to %g.z%Planned mapping for the `%s` axis:
%sz0Planned normalized mapping for the `%s` axis:
%sc              3   sN   "   T F  w  r\        W,
          4      R 8  x  K  	  R# 5i)g{Gz?N)r*   )r   kZv   &  r   r   ZplanAxis.<locals>.<genexpr>  s     
?)>3qu:)>s   #%FTz6Detected identity mapping for the `%s` axis. Dropping.i)r%   fvarAxisminValuedefaultValuemaxValueSAMPLESZkeysZcopyr   r;   sorteditemsZupdaterG   Zdebugr   Zziplistr   ranger   Zall)'ZmeasureFuncZnormalizeFuncZinterpolateFuncglyphSetFuncaxisTag
axisLimitsvaluessamplesr+   designLimitsr?   sanitizeFuncrN   rO   rP   ZtripleZoutZoutNormalizedZaxisMeasurementsr   r$   ZdesignValuer   Z	targetMinr   Z	targetMaxwZtargetValuesZnormalizedMinZnormalizedMaxZnormalizedTargetMinZnormalizedTargetMaxZvalueMeasurementsZsampleZmeasurementValuer   ZtargetMeasurementZtargetValueZvalueNormalizeds'   &&&&&&&&&&&&                           r   planAxisr^   q  s   j *h'' )):+B+BJDWDWX
'1$HH~b!&&(|yy{HH2HH h/FBR\RF4::<01KK1oq/1o	
 CM:S=MMN'5)9:5k(3Hf(E% O
 BGLV41ABII-w7G/HI8;VDJJL!"3B'VDJJL!"2&9494) $*E6aX-DH-D-D6E&x8&x8,YE,YE-vl/CD5w(S,113Aw{+F8 3v=1MMEII*E2#gu-=>H,UD9K-86-Jk* , 			.8I0JK-.E9>.u56 / "H':m$L)EeXx8A /$Y/1B91M! -->@PQKII75+:NNO$CJ+ux/?8#/./0 0O .Ai'Y&D(+>AT+TDV .VM/* * "H':m$[9^ HH5wMHH; s
?)<)<)>
?sss
?)<)<)>
???I7So Fs   S9*S9.S9c                    Vf   \         p\        \        \        \        T RTTTTTTV'       d   \
        R7      # RR7      # )zPlan a weight (`wght`) axis.

weights: A list of weight values to plan for. If None, the default
values are used.

This function simply calls planAxis with values=weights, and the appropriate
arguments. See documenation for planAxis for more information.
NwghtrY   rZ   r+   r[   r?   r\   )WEIGHTSr^   r5   r   r!   rH   )rV   rX   weightsrZ   r+   r[   r?   sanitize   &&&&&&&&r   planWeightAxisrf     sP    & !'/^  6: r   c                r_   )a	  Plan a width (`wdth`) axis.

widths: A list of width values (percentages) to plan for. If None, the default
values are used.

This function simply calls planAxis with values=widths, and the appropriate
arguments. See documenation for planAxis for more information.
Nwdthra   )WIDTHSr^   r7   r   r   rF   )rV   rX   widthsrZ   r+   r[   r?   rd   re   r   planWidthAxisrj   :  sP    & ~!&.]  59 r   c                r_   )zPlan a slant (`slnt`) axis.

slants: A list slant angles to plan for. If None, the default
values are used.

This function simply calls planAxis with values=slants, and the appropriate
arguments. See documenation for planAxis for more information.
Nslntra   )SLANTSr^   r8   r"   r   rI   )rV   rX   slantsrZ   r+   r[   r?   rd   re   r   planSlantAxisrn   `  sP    & ~!&.]  59 r   c                sZ    Vf   \         p\        \        \        \        V RVVVVVVR7      # )a  Plan a optical-size (`opsz`) axis.

sizes: A list of optical size values to plan for. If None, the default
values are used.

This function simply calls planAxis with values=sizes, and the appropriate
arguments. See documenation for planAxis for more information.
opsz)rY   rZ   r+   r[   r?   )SIZESr^   r5   r   r!   )rV   rX   sizesrZ   r+   r[   r?   rd   re   r   planOpticalSizeAxisrr     s<    & }! r   c                s    RW3V,           ,          pV'       d   VR,          pM	VR,          pVP                  4        F  w  rVVRWV3,          ,          pK  	  V'       d
   VR,          pV# )z-Make a designspace snippet for a single axis.zC    <axis tag="%s" name="%s" minimum="%g" default="%g" maximum="%g"z>
z/>z$      <map input="%g" output="%g"/>
z    </axis>)rS   )rW   axisNameZ	axisLimitmappingdesignspaceSnippetZkeyr   s   &&&&   r   makeDesignspaceSnippetrv     ss     	N*	,  e#d"mmo
ETT & m+r   c                s    \        R4      ;V R&   pV R,          P                   F  p/ VP                  VP                  &   K  	  R# )z&Add an empty `avar` table to the font.avarfvarN)r    axessegmentsrW   )fontrw   axisrL   r   addEmptyAvarr}     s;    "6**DL4V!!&(dll# "r   c                s6   RpV R,          P                    F  pVP                  V8X  g   K  Tp M	  Vf   R# VP                  VP                  VP                  3p\
        P                  RV4       RV 9   d2   V R,          P                  V,          p/ V R,          P                  V&   MRpVe?   \        V\        4      '       d)   VP                  4        Uu. uF  p\        V4      NK  	  ppVeA   \        V\        4      '       d+   VP                  R4       Uu. uF  p\        V4      NK  	  ppMRpVe^   \        V\        4      '       dH   / pVP                  4        F.  pVP                  R4      w  pp\        V4      V\        V4      &   K0  	  Tp?V! V P                  VVVVVVV	R7      w  ppV
'       dR   ^ RIHp TP                  \!        V4      \!        V4       Uu. uF  pVV,          NK  	  up4       VP#                  4        Ve!   \
        P                  R	V\%        V4      4       V'       d*   RV 9  d   \'        V 4       VV R,          P                  V&   MRV 9   d   / V R,          P                  V&   \)        VVVV4      pV# u upi u upi u upi )
zProcess a single axis.Nrx   Z zPlanning %s axis.rw   :)rZ   r+   r[   r?   rd   )pyplotzExisting %s mapping:
%s)ry   rW   rN   rO   rP   r   r;   rz   r%   strsplitfloatZgetGlyphSetZ
matplotlibr   plotrR   Zshowr   r}   rv   )r{   ZplanFuncrW   rs   rY   rZ   r+   r[   r?   rd   r   rX   r|   ZexistingMappingr]   r   ZnewPinsZpinZbeforeZafterrt   ZmappingNormalizedr   rK   ru   s   &&&&&&&&&&&              r   processAxisr     sj    JV!!<<7"J " %%z'>'>
@S@STJHH (+~v,//8)+Vg&j55$*LLN3Nq%(N3J|S$A$A*6*<*<S*AB*AQa*AB JtS11::<CIIcNMFE%*5\GE&M"   !)!	"G %$%+12C+DE+Daq!!+DE	
 	"+Xw7OP):Vg&T>-/DL!!'*/	 q 4 C@ Fs   JJ!J
c                s
   V f   ^ RI pVP                  R,          p ^ RIHp ^ RIHp ^ RIpVP                  RRR7      pVP                  RR	R
R7       VP                  RR\        RR7       VP                  R\        RR7       VP                  R\        RR7       VP                  R\        RR7       VP                  R\        RR7       VP                  R\        RR7       VP                  RRRRR7       VP                  RR \        R!R7       VP                  R"\        R#R7       VP                  R$\        R%R7       VP                  R&\        R'R7       VP                  R(\        R)R7       VP                  R*\        R+R7       VP                  R,\        R-R7       VP                  R.\        R/R7       VP                  R0\        R1R7       VP                  R2R3RR4R7       VP                  R5R67      pVP                  R7R8RR9R7       VP                  R:R;RR<R7       VP                  V 4      pT! VP                  '       d   R=MVP                  '       d   R>MR?R@7       V! VP                  4      pRAV9   g   \         P#                  RB4       ^# VP$                  e}   VP$                  P'                  4       p	RCVP$                  9   dQ   / p	VP$                  P'                  4        F0  p
RCV
9   d#   V
P'                  RC4      w  r\)        V4      W&   K,  RDW&   K2  	  MRp	. pVP+                  \-        V\.        RERFVP0                  VP2                  V	VP4                  VP6                  VP8                  VP:                  RG7      4       VP+                  \-        V\<        RHRIVP>                  VP2                  V	VP@                  VPB                  VP8                  VP:                  RG7      4       VP+                  \-        V\D        RJRKVPF                  VP2                  V	VPH                  VPJ                  VP8                  VP:                  RG7      4       VP+                  \-        V\L        RLRMVPN                  VP2                  V	VPP                  VPR                  VP8                  VP:                  RG7      4       \         PU                  RN4       V F  pV'       g   K  \W        V4       K  	  VPX                  f   \[        VP                  RORPRQ7      pMVPX                  pV'       d*   \         PU                  RRV4       VP]                  V4       R# R# )Sz3Plan the standard axis mappings for a variable fontNrJ   )configLogger)TTFontzfonttools varLib.avar.planz#Plan `avar` table for variable font)Zdescriptionr{   zvarfont.ttfzVariable-font file.)Zmetavarhelpz-oz--output-filezOutput font file name.)Ztyper   z	--weightsz+Space-separate list of weights to generate.z--widthsz*Space-separate list of widths to generate.z--slantsz*Space-separate list of slants to generate.z--sizesz1Space-separate list of optical-sizes to generate.z	--sampleszNumber of samples.z-sz
--sanitizeZ
store_truezSanitize axis limits)Zactionr   z-gz--glyphsz2Space-separate list of glyphs to use for sampling.z--weight-design-limitsz4min:default:max in design units for the `wght` axis.z--width-design-limitsz4min:default:max in design units for the `wdth` axis.z--slant-design-limitsz4min:default:max in design units for the `slnt` axis.z--optical-size-design-limitsz4min:default:max in design units for the `opsz` axis.z--weight-pinsz=Space-separate list of before:after pins for the `wght` axis.z--width-pinsz=Space-separate list of before:after pins for the `wdth` axis.z--slant-pinsz=Space-separate list of before:after pins for the `slnt` axis.z--optical-size-pinsz=Space-separate list of before:after pins for the `opsz` axis.z-pz--plotzPlot the resulting mapping.F)Zrequiredz-vz	--verbosezRun more verbosely.z-qz--quietzTurn verbosity off.ZDEBUGZWARNINGZINFO)Zlevelrx   zNot a variable font.r~   g      ?r`   ZWeight)rY   rZ   r+   r[   r?   rd   r   rg   ZWidthrk   ZSlantro   ZOpticalSizezDesignspace snippet:Tz.avar)Z	overWriteZsuffixz	Saving %s)/sysZargvZ	fontToolsr   fontTools.ttLibr   argparseZArgumentParserZadd_argumentr   ZintZadd_mutually_exclusive_groupZ
parse_argsZverboseZquietr{   r   Zerrorr+   r   r   Zappendr   rf   rc   rZ   Zweight_design_limitsZweight_pinsrd   r   rj   ri   Zwidth_design_limitsZ
width_pinsrn   rm   Zslant_design_limitsZ
slant_pinsrr   rq   Zoptical_size_design_limitsZoptical_size_pinsr;   ZprintZoutput_filer   Zsave)Zargsr   r   r   r   ZparserZlogging_groupZoptionsr{   r+   r-   r1   r0   ZdesignspaceSnippetsZsnippetZoutfiles   &               r   mainr   #  s>    |xx|&&$$$9 % F <QR
%	   #$Q   #O   #O   "U   #4HI
l<6L   A	    C  
 C  
 C  
 &C  
 L  
 L  
 L  
 L  
 h|2O   777GMk,5J   i3H   %G!///wGMMMyv ',,DT>		()~~!%%''.. F^^))+!8'(wws|$E$))$4FM #FI , ??OO 55$$%%	
 >>OO 44##%%	
 >>OO 44##%%	
 ==OO ;;**%%	
  HH#$&7'N ' "$W\\T'R%%g&		' r   Z__main__)rf   rj   rn   rr   r^   rH   rF   rI   r5   r7   r8   r   r   r"   r   r!   r   rv   r}   r   )i2   id   i   i   i   i,  i^  i  i  i  i&  iX  i  i  i  i   iR  i  i  )g      9@g     B@g      I@g     @O@g     R@g     U@g      Y@g      \@g     @_@g     0a@g     b@g     Pd@g     e@g     pg@g      i@i)i   i   i   i   i	   i
   i   i   i   i   i   i   i$   i0   i<   iH   i`   ix   i   i   i   i   )N)NNNNN)NNNNNF)NNNNFF)5r   r    ZfontTools.ttLib.tables._f_v_a_rr   rM   ZfontTools.pens.areaPenr   ZfontTools.pens.basePenr   ZfontTools.pens.statisticsPenr   ZfontTools.varLib.modelsr   r   ZfontTools.misc.cliToolsr   r	   ZloggingZpprintr   Z__all__Z	getLoggerr   rb   rh   rT   rU   rl   rp   rQ   r   r   r   r!   r"   r5   r7   r8   rF   rH   rI   r^   rf   rj   rn   rr   rv   r}   r   r   Z__name__r   Zexitr   r   r   <module>r      s   $ < * * 6 F 6   . 45,
$ 
HsBH	H	4 6

:.H889:&RDNB`F#L#L#L"J*)YxCL zHHTV r   